教學(xué)目標(biāo)及基本要求:
1、了解數(shù)據(jù)庫的發(fā)展歷程、基本概念及應(yīng)用。
2、了解SQL語言的基本概念及構(gòu)成。
3、掌握數(shù)據(jù)庫的設(shè)計(jì)與管理。
4、掌握使用控件訪問數(shù)據(jù)庫的方法。
教學(xué)重點(diǎn):
1、數(shù)據(jù)庫的設(shè)計(jì)與管理。
2、使用控件訪問數(shù)據(jù)庫。
教學(xué)難點(diǎn):
數(shù)據(jù)庫的設(shè)計(jì)與管理、使用控件訪問數(shù)據(jù)庫。
教學(xué)內(nèi)容:
1、數(shù)據(jù)庫基礎(chǔ)
2、數(shù)據(jù)庫的設(shè)計(jì)與管理
3、使用控件訪問數(shù)據(jù)庫
4、SQL簡介
教學(xué)時(shí)間:
2學(xué)時(shí)
主要內(nèi)容:
第14章 Visual Basic數(shù)據(jù)庫編程技術(shù)
14.1 數(shù)據(jù)庫基礎(chǔ)
第一代:網(wǎng)狀、層次數(shù)據(jù)庫
第二代:關(guān)系數(shù)據(jù)庫
第三代:以面向?qū)ο竽P蜑橹饕卣鞯臄?shù)據(jù)庫
Visual Basic本身使用的是Access數(shù)據(jù)庫,是關(guān)系數(shù)據(jù)庫,數(shù)據(jù)庫文件的擴(kuò)展名為.MDB。
1.表(關(guān)系):用于存儲(chǔ)數(shù)據(jù),以行列方式組織,是關(guān)系數(shù)據(jù)庫的基本元素。
2.記錄(行):指表中的一行。
3.字段(列):指表中的一列。每列均有字段名。
4.索引:索引是建立在表上的單獨(dú)的物理數(shù)據(jù)庫結(jié)構(gòu),基于索引的查詢使數(shù)據(jù)庫獲取更為快捷。
5.關(guān)鍵字(主鍵):關(guān)系數(shù)據(jù)庫中的某個(gè)字段或某些字段的組合。
6.視圖:是一個(gè)與真實(shí)表相同的虛擬表,用于限制用戶可以看到和修改的數(shù)據(jù)量,簡化數(shù)據(jù)的表達(dá)。
一個(gè)完整的數(shù)據(jù)庫系統(tǒng)除了包括可以共享的數(shù)據(jù)庫外,還包括用于數(shù)據(jù)處理的數(shù)據(jù)庫應(yīng)用系統(tǒng)。Visual Basic是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫開發(fā)平臺(tái),具有如下優(yōu)點(diǎn):
① 簡單性。
② 靈活性。
③ 可擴(kuò)充性。
14.2 數(shù)據(jù)庫的設(shè)計(jì)與管理
Visual Basic提供了一個(gè)非常實(shí)用的工具程序,即可視化數(shù)據(jù)管理器(Visual Data Manager),使用它可以方便地建立數(shù)據(jù)庫、數(shù)據(jù)表和數(shù)據(jù)查詢。
在Visual Basic集成環(huán)境中,執(zhí)行“外接程序”菜單下的“可視化數(shù)據(jù)庫管理器”命令,即可打開“可視化數(shù)據(jù)庫管理器”VisData窗口。
2.創(chuàng)建Jet數(shù)據(jù)庫
(1) 選擇“文件”菜單中的“新建”項(xiàng),將出現(xiàn)一個(gè)子菜單à選擇數(shù)據(jù)庫類型à選擇數(shù)據(jù)庫版本。
(2) 出現(xiàn)創(chuàng)建數(shù)據(jù)庫對話框,在該對話框中選擇保存數(shù)據(jù)庫的路徑和數(shù)據(jù)庫文件名。
(3) 單擊“保存”按鈕。
3. 編寫代碼建立數(shù)據(jù)庫文件
在Visual Basic應(yīng)用程序中,還可以通過編寫代碼來建立一個(gè)數(shù)據(jù)庫文件,以及對數(shù)據(jù)庫進(jìn)行索引、查詢等許多操作。
使用可視化數(shù)據(jù)管理器建立數(shù)據(jù)庫后,就可以向該數(shù)據(jù)庫中添加數(shù)據(jù)表,還可以使用代碼來創(chuàng)建表、字段及索引。
1. 建立數(shù)據(jù)表結(jié)構(gòu)
具體操作步驟如下:
(1) 打開已經(jīng)建立的Access數(shù)據(jù)庫。
(2) 將鼠標(biāo)指針移到“數(shù)據(jù)庫窗口”區(qū)域內(nèi),單擊鼠標(biāo)右鍵出現(xiàn)快捷菜單,選擇“新建表”命令,則出現(xiàn)“表結(jié)構(gòu)”對話框,在對話框中輸入相應(yīng)數(shù)據(jù)。
(3) 單擊“添加字段”打開“添加字段”對話框。
(4) 單擊“表結(jié)構(gòu)”對話框中的“添加索引”按鈕,將打開“添加索引”對話框。
2.修改表結(jié)構(gòu)
(1) 打開要修改的數(shù)據(jù)表的數(shù)據(jù)庫。
(2) 在對話框中選擇“設(shè)計(jì)”項(xiàng),打開“表結(jié)構(gòu)”對話框進(jìn)行修改。
1. 輸入記錄
在“數(shù)據(jù)庫窗口”中雙擊數(shù)據(jù)表,執(zhí)行以下操作輸入數(shù)據(jù)記錄:
(1) 單擊“添加”按鈕,在打開的記錄編輯窗口中輸入該記錄;
(2) 單擊“更新”按鈕,確認(rèn)當(dāng)前輸入記錄有效,即更新數(shù)據(jù)庫;
(3) 逐條輸入相應(yīng)的記錄,重復(fù)(2),確認(rèn)輸入;
(4) 單擊“關(guān)閉”按鈕,關(guān)閉數(shù)據(jù)庫管理窗口。
2. 編輯記錄
打開數(shù)據(jù)表管理窗口,先通過滾動(dòng)條將要修改的記錄定位為當(dāng)前記錄,單擊“編輯”按鈕,在彈出的對話框中輸入新值后,再單擊“更新”按鈕。
3. 刪除記錄
打開數(shù)據(jù)表管理窗口,先通過滾動(dòng)條將要?jiǎng)h除的記錄定位為當(dāng)前記錄,單擊“刪除”按鈕,在彈出的對話框中單擊“是”按鈕,即可刪除記錄。
4. 過濾記錄
打開數(shù)據(jù)表管理窗口,單擊“過濾器”按鈕后,在彈出的對話框中輸入要過濾器表達(dá)式。
(1)Recordset對象類型
① 表類型:這種類型的Recordset對象直接表示數(shù)據(jù)庫中的一個(gè)表。
② 動(dòng)態(tài)集類型:這種類型的Recordset對象可以表示本地或鏈接表,也可以作為返回的查詢結(jié)果。
③ 快照集類型:這種類型的Recordset對象所包含的數(shù)據(jù)、記錄是固定的,它所表示的是數(shù)據(jù)庫某一時(shí)刻的狀況,就像照像一樣。
(2)創(chuàng)建Recordset對象
與創(chuàng)建數(shù)據(jù)庫、表和字段一樣,首先要定義對象變量。
(3)刪除Recordset對象
當(dāng)Recordset對象使用完畢后,就應(yīng)該將它刪除,也就是關(guān)閉已經(jīng)打開的表,刪除Recordset對象采用Close方法。
2. 增加、修改與刪除記錄
(1)增加記錄
增加記錄首先要打開一個(gè)數(shù)據(jù)庫和一個(gè)表,然后用AddNew方法創(chuàng)建一條新記錄,AddNew語法格式為recordset.AddNew。
(2)修改記錄
修改記錄使用Edit方法, Edit方法的語法格式為recordset.Edit。
(3)刪除記錄
刪除一條記錄使用Delete方法,其語法格式為recordset. Delete。
3. 移動(dòng)記錄指針
當(dāng)Recordset對象建立后,系統(tǒng)會(huì)自動(dòng)生成一個(gè)指示器,指向表中的第一條記錄,稱之為記錄指針。
(1)AbsolutePosition屬性
在表中移動(dòng)指針,最直接的方法就是使用AbsolutePosition屬性,利用它可以直接將記錄指針移動(dòng)到某一條記錄處。其語法格式為Recordset.AbsolutePosition=N。
(2)BookMark屬性
利用BookMark屬性可以記下當(dāng)前記錄指針?biāo)谖恢茫?dāng)指針指向某一條記錄時(shí),系統(tǒng)就會(huì)產(chǎn)生惟一的標(biāo)識(shí)符存在BookMark屬性中,隨著指針位置的變化,BookMark中的值也變化。通常先將BookMark中的值存在一個(gè)變量中,記住這個(gè)位置,然后指針移動(dòng),當(dāng)需要時(shí),可以再將變量中的值賦給BookMark,這樣指針就可以移回原來的位置。
4. Move及Move系列方法
在Visual Basic中使用Move及Move系列方法可以使指針相對于某一條記錄移動(dòng),即做相對移動(dòng),。Move方法的語法格式為: Recordset.Move rows [,start]
其中,Recordset為Recordset對象變量,表示一個(gè)打開的表。rows表示要相對移動(dòng)的行數(shù),如果為正值,表示向下移動(dòng);若為負(fù)值,表示向上移動(dòng)。start為一條記錄的BookMark值,指示從哪條記錄開始相對移動(dòng),如果這項(xiàng)不給出,則從當(dāng)前記錄開始移動(dòng)指針。一般情況下這項(xiàng)可以省略。
5. 記錄的查詢
(1)Seek方法
在使用Seek方法之前需要先建立索引,并且要確定索引字段,然后通過與Seek方法給出的關(guān)鍵字比較,將指針指向第一條符合條件的記錄。Seek方法的語法格式為:Recordset.Seek=比較運(yùn)算符,關(guān)鍵字1,關(guān)鍵字2 …
其中,Recordset為Recordset對象變量,表示一個(gè)打開的表。比較運(yùn)算符用于比較運(yùn)算,比如:“<”,“>”,“=”,“>=”,等等。關(guān)鍵字為當(dāng)前主索引的關(guān)鍵字段,如果有多個(gè)索引,則關(guān)鍵字段可以給出多個(gè)。
(2)Find方法
Seek方法可以定位符合條件的第一條記錄,當(dāng)需要用特殊方法定位記錄時(shí),可以使用Find方法。其語法格式分別為:
Recordset. FindFirst 條件表達(dá)式
Recordset. FindLast條件表達(dá)式
Recordset. FindNext條件表達(dá)式
Recordset. FindPrevious條件表達(dá)式
其中,Recordset為Recordset對象變量,表示一個(gè)打開的表。
注意:
在Seek、Find后面給出關(guān)鍵字時(shí)要與索引字段的類型一致,否則將找不到需要的記錄。
14.3 使用控件訪問數(shù)據(jù)庫
1. 在窗體上添加Data控件
雙擊工具箱中Data控件圖標(biāo)
(1) Connect屬性:用來確定Data控件所連接的數(shù)據(jù)庫類型,默認(rèn)屬性值是Access。
(2) DatabaseName屬性:確定選擇要訪問數(shù)據(jù)庫文件。
(3) RecordSource屬性:確定要訪問的數(shù)據(jù)源。該屬性值可以是數(shù)據(jù)庫中的某一個(gè)數(shù)據(jù)表,也可以是一條SQL查詢語句。
3. 其他常用屬性
(1) RecordsetType屬性:確定Recordset(記錄集)對象的類型??梢赃x擇的記錄類型有三種,即表類型記錄集(0-Table默認(rèn)值)、動(dòng)態(tài)類型記錄集(1-Dynaset)及靜態(tài)類型記錄集,靜態(tài)類型記錄集又常稱為快照類型記錄集(2-SnapShot)。
(2) Exclusive屬性:確定是否按照獨(dú)享方式打開數(shù)據(jù)庫,在需要多用戶訪問數(shù)據(jù)庫時(shí)需要將該屬性值設(shè)置為False。
(3) Options屬性:用來決定記錄集的特征。例如,在一個(gè)多用戶環(huán)境中,可以設(shè)置Options屬性來禁止他人所做的修改。
(4) BOFAction和EOFAction屬性:這兩個(gè)屬性決定當(dāng)該控件位于光標(biāo)開始(記錄集的EOF屬性值為True)或末尾(記錄集的BOF屬性值為True)時(shí)的行為。
4. Data控件常用的方法
(1)AddNew方法
AddNew用于添加一個(gè)新記錄,新記錄的每個(gè)字段如果有默認(rèn)值將以默認(rèn)值表示,否則為空白。
(2)Delete方法
Delete用于刪除當(dāng)前記錄的內(nèi)容,在刪除后應(yīng)將當(dāng)前記錄移到下一條記錄。
(3)Edit方法
Edit用于對當(dāng)前記錄進(jìn)行編輯修改。
(4)Find方法群組
Find方法群組用于查找記錄,它包含FindFirst、FindLast、FindNext和FindPrevious方法,這4種方法查找的起點(diǎn)不同。
(5)Move方法群組
Move方法群組用于移動(dòng)記錄,它包含MoveFirst(移到第一條記錄)、MoveLast(移到最后一條記錄)、MoveNext(移到下一條記錄)和MovetPrevious(移到前一條記錄)方法。
(6)Refresh
如果DatabaseName、ReadOnly、Exclusive或Connect屬性的設(shè)置值發(fā)生改變,可以使用Refresh方法打開或重新打開數(shù)據(jù)庫,用Refresh方法可以更新數(shù)據(jù)控件的集合內(nèi)容。
(7)Seek方法
Seek方法適用于數(shù)據(jù)表類型(Table)記錄集,通過一個(gè)已被設(shè)置為索引(Index)的字段,查找符合條件的記錄,并使該記錄為當(dāng)前記錄。
(8)Update方法
Update方法用于將修改的記錄內(nèi)容保存到數(shù)據(jù)庫中。該方法一般用在AddNew方法、Edit方法之后。
(9)UpdateControls方法
UpdateControls方法可以從數(shù)據(jù)控件的記錄集中再取回原先的記錄內(nèi)容,即恢復(fù)原先值。
(10)Close方法
Close方法用于關(guān)閉記錄集。該方法也能用在數(shù)據(jù)庫對象上,將數(shù)據(jù)庫關(guān)閉。
5. Data控件常用的事件
(1)Reposition事件
Reposition事件是當(dāng)某一個(gè)記錄成為當(dāng)前記錄之后觸發(fā)。通常利用該事件對當(dāng)前記錄的數(shù)據(jù)內(nèi)容進(jìn)行計(jì)算,觸發(fā)該事件有以下幾種原因:
① 單擊數(shù)據(jù)控件的幾個(gè)按鈕,進(jìn)行記錄移動(dòng);
② 使用Move方法群組;
③ 使用Find方法群組;
④ 其他可改變當(dāng)前記錄的屬性或方法。
事件過程如下:
Private Sub Data1_Reposition()
'事件處理程序
End Sub
(2)Validate事件
Validate事件與Reposition事件不同,是當(dāng)某一記錄成為當(dāng)前記錄之前,或是在Update、Delete、Unload或Close操作之前觸發(fā)。
事件過程如下:
Private Sub Data1_Validate(Action As Integer, Save As Integer)
'事件處理程序
End Sub
其中,Action用來指示引發(fā)這種事件的操作;Save用來指定鏈接的數(shù)據(jù)是否修改了。
(3)Error事件
當(dāng)Data控件產(chǎn)生執(zhí)行錯(cuò)誤時(shí)觸發(fā)。事件過程如下:
Private Sub Data1_Error (DataErr As Integer, Response As Integer)
'事件處理程序
End Sub
其中,DataErr為返回的錯(cuò)誤號(hào);Response設(shè)置執(zhí)行的動(dòng)作,0表示繼續(xù)執(zhí)行,1表示顯示錯(cuò)誤信息。
6. 與控件綁定
控件箱中的常用控件PictureBox、Label、TextBox、CheckBox、Image、OLE、ListBox和ComBox控件都與Data的Recordset的一個(gè)字段綁定,與Data控件綁定的控件稱為數(shù)據(jù)感知控件。
(1)數(shù)據(jù)感知控件的相關(guān)屬性
① DataSource屬性:用于在下拉列表中選擇想要綁定的控件名稱。
② DataField屬性:用于在下拉列表中選擇要顯示的字段名稱。
(2)綁定數(shù)據(jù)控件的步驟
① 將數(shù)據(jù)控件(Data1)放置在窗體中,將數(shù)據(jù)感知控件TextBox放置在窗體中并改名為“圖書編號(hào)”。
② 設(shè)置Data1的DatabaseName屬性為"d:\tsgl\xxjs_book.mdb"文件,設(shè)置Data1的Record-Source屬性為"library"表。
③ 設(shè)置“圖書編號(hào)”的DataSource屬性為Data1,設(shè)置“圖書編號(hào)”的DataField屬性為“圖書編號(hào)”字段。
1. 用DBGrid控件瀏覽數(shù)據(jù)表
在使用DBGrid控件之前,必須通過“工程”菜單的“部件”選取Microsoft DataGrid Control 6.0(SP6)。
DBGrid控件依靠兩個(gè)對象:Data控件的Recordset對象和DBGrid本身的Columns集合。DBGrid控件實(shí)際上是Columns對象的集合,其中每個(gè)對象都有不同數(shù)量的行,每一列對應(yīng)著數(shù)據(jù)庫表的一個(gè)字段,而每一行則對應(yīng)一個(gè)記錄。
2. 用DBGrid控件瀏覽和顯示數(shù)據(jù)表的步驟
(1) 在新窗體中添加一個(gè)數(shù)據(jù)控件(Data1),再設(shè)置其DatabaseName屬性和RecordSource屬性為要顯示的數(shù)據(jù)庫和表。
(2) 在窗體中添加一個(gè)DBGrid控件,并設(shè)置DatabaseSource為剛創(chuàng)建的Data控件。
(3) 設(shè)置DBGrid控件的其他相關(guān)屬性。
(4) 運(yùn)行程序。
3. DBGrid控件的運(yùn)行操作
在運(yùn)行時(shí),DBGrid控件從基本Recordset對象中顯示記錄。
ADO Data控件不是Visual Basic的內(nèi)部控件,在使用之前可以通過單擊“工程”菜單中的“部件”命令或用鼠標(biāo)右鍵單擊控件箱,在快捷菜單中選擇“部件”命令,打開“部件”對話框選擇“Microsoft ADO Data Control6.0(Sp6)(OLEDB)”復(fù)選框,則在控件箱中增加了ADO Data控件(Adodc)的圖標(biāo)
1. ADO Data控件的功能
(1) 連接一個(gè)本地?cái)?shù)據(jù)庫或遠(yuǎn)程數(shù)據(jù)庫。
(2) 打開一個(gè)指定的數(shù)據(jù)庫表,或定義一個(gè)基于結(jié)構(gòu)化查詢語言(SQL)的查詢、存儲(chǔ)過程或該數(shù)據(jù)庫中的表的視圖的記錄集合。
(3) 將數(shù)據(jù)字段的數(shù)值傳遞給數(shù)據(jù)綁定控件,可以在這些控件中顯示或修改這些數(shù)值。
(4) 添加新記錄,或根據(jù)修改顯示在綁定的控件中的數(shù)據(jù)來更新一個(gè)數(shù)據(jù)庫。
2. ADO Data控件的屬性
(1) ConnectionString屬性:用于連接字符串,可以包含進(jìn)行一個(gè)連接所需的所有設(shè)置值,該字符串所傳送的參數(shù)與驅(qū)動(dòng)程序有關(guān)。
(2) UserName屬性:用于指定用戶的名稱,當(dāng)數(shù)據(jù)庫受密碼保護(hù)時(shí),需要在ConnectionString中指定屬性。。
(3) RecordSource屬性:用于設(shè)置要鏈接的表或一條SQL查詢語句??梢栽凇皩傩浴贝绑w中將“記錄源”的屬性設(shè)置為一個(gè)SQL語句。
(4) CommandType屬性:用于指定RecordSource屬性的取值類型。告訴數(shù)據(jù)提供者Source屬性是一條SQL語句、一個(gè)表的名稱、一個(gè)存儲(chǔ)過程,還是一個(gè)未知的類型。
(5) Password屬性:用于指定密碼,在訪問一個(gè)受保護(hù)的數(shù)據(jù)庫時(shí)是必需的。與Provider和UserName屬性類似,如果在ConnectionString屬性中指定了密碼,那么將覆蓋此屬性中指定的值。
(6) CursorType屬性:用于決定記錄集是靜態(tài)類型、動(dòng)態(tài)類型還是鍵集光標(biāo)類型。
(7) Mode屬性:用于決定想用記錄集進(jìn)行什么操作,只讀、讀寫還是其他設(shè)置。
(8) ConnectionTimeout屬性:用于設(shè)置等待建立一個(gè)連續(xù)的時(shí)間,以秒為單位。如果連接超時(shí),則返回一個(gè)錯(cuò)誤。
(9) BOFAction、EOFAction屬性:用于決定當(dāng)控件位于光標(biāo)開始和末尾時(shí)的行為。
3. ADO Data控件對記錄的操作方法
(1) AddNew方法:用于在ADO Data控件的記錄集中添加一條新記錄,其使用語法為:Adodcname.Recordset.AddNew,Adodcname是一個(gè)ADO Data控件的名稱。
(2) Edit方法:用于在ADO Data控件的記錄集中對當(dāng)前記錄進(jìn)行修改,其使用語法為:Adodcname.Recordset.Edit,修改后調(diào)用Update方法保存記錄。
(3) Delete方法:用于在ADO Data控件的記錄集中刪除當(dāng)前記錄,其使用語法為:Adodcname.Recordset.Delete
(4) Update方法:用于把內(nèi)存緩沖區(qū)中的內(nèi)容寫進(jìn)數(shù)據(jù)庫文件,保存對數(shù)據(jù)庫所做的改動(dòng),該方法一般用在AddNew 、Edit方法之后。其使用語法為:Adodcname.Recordset.Update
(5) Move方法群組:Move方法群組是用于在ADO Data控件的記錄集中移動(dòng)記錄。MoveFirst、MoveLast、MoveNext和MovetPrevious分別移到第一條記錄、最后一條記錄、下一條記錄和上一條記錄,其使用語法為:
Adodcname.Recordset.Move 8 '從當(dāng)前記錄開始向下移動(dòng)8條記錄
Adodcname.Recordset. MoveFirst 移動(dòng)到第一條記錄
Adodcname.Recordset. MoveLast 移動(dòng)到最后一條記錄
Adodcname.Recordset. MoveNext 從當(dāng)前記錄移動(dòng)到下一條記錄
Adodcname.Recordset. MovetPrevious 從當(dāng)前記錄移動(dòng)到上一條記錄
(6) Close方法:用于關(guān)閉記錄集,其使用語法為Adodcname.Recordset.close。
4. ADO Data控件的事件
(1) WillMove和MoveComplete事件:WillMove事件是在當(dāng)前記錄的位置即將發(fā)生時(shí)觸發(fā),而MoveComplete事件是在位置改變完成時(shí)觸發(fā)。
(2) WillChangeField和FiledChangeComplete事件:WillChangeField事件是在當(dāng)前記錄集中當(dāng)前記錄的一個(gè)或多個(gè)字段發(fā)生變化時(shí)觸發(fā),而FiledChangeComplete事件則是當(dāng)字段的值發(fā)生變化完成后觸發(fā)。
(3) WillChangeRecord和RecordChangeComplete事件:WillChangeRecord事件是當(dāng)記錄集中的一個(gè)記錄或多個(gè)記錄發(fā)生變化前觸發(fā),而RecordChangeComplete事件則是當(dāng)記錄發(fā)生變化完成后觸發(fā)。
ADO的核心是Command、RecordSet和Connection對象。它們之間的關(guān)系是Command對象、RecordSet對象必須先通過Connection對象來建立數(shù)據(jù)源連接。
(1) Connection對象:Connection對象用于建立與數(shù)據(jù)源的連接。
(2) Command對象:在建立Connection后,可以發(fā)出命令對數(shù)據(jù)源進(jìn)行操作。
(3) RecordSet對象:RecordSet對象只代表記錄集,是基于某一連接的表或是Command對象的執(zhí)行結(jié)果。
在使用ADO對象編程之前,要將ADO函數(shù)庫設(shè)置為引用項(xiàng)目,通過單擊“工程”菜單中的“引用”命令,選擇“Microsoft ActiveX Data Object 2.1 Library”復(fù)選框。還可以使用代碼編程來對ADO對象模型的Command、RecordSet和Connection對象進(jìn)行操作。程序代碼如下:
Option Explicit '在通用聲明定義
Private cnBook AS New ADODB.Connection
Private cmBook AS NEW ADODB. Command
Private rsBook AS NEW ADODB. RecordSet
利用ADO的Command對象、RecordSet對象和Connection對象進(jìn)行編程的模型使用如下步驟:
① 創(chuàng)建Connection對象,設(shè)置好連接字符串(ConnectionString屬性),并使用Open方法與數(shù)據(jù)源建立連接。
② 創(chuàng)建Command對象,并設(shè)置該對象的活動(dòng)連接(ActiveConnection屬性),為上一步已建好的Connection對象,指定要執(zhí)行的數(shù)據(jù)庫操作命令(CommandText屬性),命令可以是任意的Select、Insert或Update語句等。
③ 使用Command對象的Execute方法執(zhí)行命令,如果是查詢命令,該方法會(huì)返回一個(gè)RecordSet對象。
④ 將上一步返回的RecordSet對象保存到變量中,并利用該變量來處理記錄。
⑤ 使用Close方法關(guān)閉與Connection對象和RecordSet對象關(guān)聯(lián)的系統(tǒng)資源(與Open方法相反),此時(shí)對象可以繼續(xù)使用。
⑥ 使用Set對象=Nothing來徹底刪除每個(gè)對象,對象刪除后必須重新創(chuàng)建才能再使用。
14.4 SQL簡介
SQL是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,是一種綜合的、通用的、功能強(qiáng)大的及簡單易學(xué)的語言,它的主要特點(diǎn):
1. 綜合統(tǒng)一
SQL集數(shù)據(jù)定義(Data Define)、數(shù)據(jù)查詢(Data Query)、數(shù)據(jù)操縱(Data Manipulation)和數(shù)據(jù)控制(Data Control)功能于一體。
2. 面向集合的操作方式
SQL采用面向集合的操作方式,無論是查詢操作,還是刪除、插入及更新操作,它操作的對象和結(jié)果都是一個(gè)記錄的集合。
3. 高度非過程化
SQL是非過程化的語言,在使用SQL進(jìn)行數(shù)據(jù)庫操作時(shí),只須提出“做什么”,而不需要說明“該怎么去做”。
4. 同一種語法結(jié)構(gòu)提供兩種執(zhí)行方式
SQL既是一種自含式語言,又是一種嵌入式語言。它既可以獨(dú)立地采用聯(lián)機(jī)交互的方式對數(shù)據(jù)庫進(jìn)行操作,也可以潛入到高級語言程序中。
5. 語言簡潔、易學(xué)易用
SQL由命令、子語句、運(yùn)算符和函數(shù)等基本元素構(gòu)成,通過這些元素組成語句對數(shù)據(jù)庫進(jìn)行操作。
1. SQL命令
SQL對數(shù)據(jù)庫所進(jìn)行的數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制等操作都是通過SQL命令實(shí)現(xiàn)的,常見的SQL命令見表14-2。
表14-2 常用的SQL命令
命 令 | 功 能 說 明 | 命 令 | 功 能 說 明 |
SELECT | 用于在數(shù)據(jù)庫中查找滿足某特定條件的記錄 | DROP | 用于刪除數(shù)據(jù)庫中的表和索引 |
CREATE | 用于創(chuàng)建新的表、字段和索引 | ALTER | 用于通過添加字段或修改字段來修改表 |
INSERT | 用在數(shù)據(jù)庫中添加記錄 | UPDATE | 用于改變指定記錄和字段的值 |
DELETE | 用于從數(shù)據(jù)庫表中刪除記錄 |
2. 子句
SQL命令中的子句是用來修改查詢條件的,通過它可以定義要選擇和要操作的數(shù)據(jù),常用的SQL子句見表14-3。
表14-3 常用的SQL子句
子 句 | 功 能 說 明 | 子 句 | 功 能 說 明 |
FROM | 用來指定需要從中選擇記錄的表名 | HAVING | 用來指定每個(gè)群組需要滿足的條件 |
WHERE | 用來指定選擇的記錄需要滿足的條件 | ORDER BY | 按指定的次序?qū)τ涗浥判颍?span lang="EN-US">ASC為升序DESC為降序 |
GROUP BY | 用來把所選擇的記錄分組 |
3. 運(yùn)算符
SQL運(yùn)算符見表14-4。
表14-4 常用的SQL運(yùn)算符
運(yùn) 算 符 | 功 能 說 明 | |
比較運(yùn)算符 | <、<=、>、>=、< >、= | 分別為小于、小于或等于、大于、大于或等于、不等于、等于 |
BETWEEN | 用來判斷表達(dá)式的值是否在指定值的范圍 | |
LIKE | 在多個(gè)、單個(gè)、特定字符、單個(gè)數(shù)字、范圍或范圍之外等匹配種類模式中使用 | |
IN | 用來判斷表達(dá)式的值是否在指定的列表中出現(xiàn) | |
邏輯運(yùn)算符 | AND | 邏輯與 |
OR | 邏輯或 | |
NOT | 邏輯非 |
4. 函數(shù)
SQL所提供的統(tǒng)計(jì)函數(shù)見表14-5。
表14-5 SQL常用統(tǒng)計(jì)函數(shù)
函 數(shù) | 功 能 說 明 | 函 數(shù) | 功 能 說 明 |
SUM | 用于返回指定段中值的總和 | MIN | 用于返回指定段中的最小值 |
COUNT | 用于計(jì)算所選擇記錄的個(gè)數(shù) | AVG | 用于計(jì)算指定段中值的平均數(shù) |
MAX | 用于返回指定段中的最大值 |
1. 建立、修改或刪除Access數(shù)據(jù)庫中的表
語法:CREATE TABLE 數(shù)據(jù)表([字段名稱1]數(shù)據(jù)類型(長度),[字段名稱2]數(shù)據(jù)類型(長度)…)
例如,建立S_BOOK數(shù)據(jù)表
CREATE TABLE S_book ([書名] text (40),[書號(hào)] Text (5))
2. 建立或刪除Access數(shù)據(jù)庫中表的索引
語法:DROP {TABLE 數(shù)據(jù)表/INDEX index ON數(shù)據(jù)表}
例如,從用戶列表中,刪除編號(hào)索引 / 從數(shù)據(jù)庫中,刪除整個(gè)表
DROP INDEX MyIndex ON 用戶列表 / DROP TABLE 用戶列表
3. 對記錄進(jìn)行插入、刪除或更新操作
語法:INSERT INTO 數(shù)據(jù)表(字段名1,字段名,…)VALUE(數(shù)據(jù)1,數(shù)據(jù)2,…)
DELETE (字段名)FROM 數(shù)據(jù)表 WHERE 子句
(其中,字段名可以省略,因?yàn)橐话愣际莿h除整條記錄)
UPDATE (字段名) SET 新數(shù)據(jù)值 WHERE 子句
例如,將數(shù)據(jù)表S_BOOK中所有“數(shù)量”少于10的字段都改為10
UPDATE S_BOOK SET數(shù)量=10 WHERE數(shù)量<10
4. 從一個(gè)或多個(gè)數(shù)據(jù)庫的一個(gè)或多個(gè)表中獲取數(shù)據(jù)
語法:SELECT 字段列表FROM子句WHERE子句GROUP BY子句HAVING子句ORDER BY子句。
例如,選擇圖書信息表S_BOOK中“書名”字段含有“計(jì)算機(jī)”的書,并按升序排列書號(hào)。
SELECT * FROM S_BOOK WHERE S_BOOK.書名 LIKE '計(jì)算機(jī)*'ORDER BY書號(hào)DESC
5. 對表中數(shù)據(jù)進(jìn)行統(tǒng)計(jì),比如求和、求最大/最小值、計(jì)數(shù)、求平均值等
語法:SELECT COUNT字段列表 AS xx FROM 子句 WHERE子句
例如,查詢英語成績不及格的人數(shù)、英語平均分及最高分
SELECT COUNT * AS 人數(shù) FROM 成績表 WHERE 數(shù)學(xué)<60
SELECT AVG 數(shù)學(xué) AS平均分, MAX 數(shù)學(xué) AS 最高分 FROM 成績表
小結(jié):
數(shù)據(jù)庫用于儲(chǔ)存結(jié)構(gòu)化數(shù)據(jù),它的應(yīng)用無處不在。Visual Basic不僅具有強(qiáng)大的數(shù)據(jù)庫操作功能,而且是一個(gè)優(yōu)秀的數(shù)據(jù)庫開發(fā)平臺(tái),提供了包含數(shù)據(jù)管理器(Data Management)、數(shù)據(jù)控件(Data Control)以及ADC(ActiveX 數(shù)據(jù)對象)等功能強(qiáng)大的工具,利用Visual Basic能夠開發(fā)各種數(shù)據(jù)庫應(yīng)用系統(tǒng),建立多種類型的數(shù)據(jù)庫,并可以管理、維護(hù)和使用這些數(shù)據(jù)庫。
作業(yè):
1.?dāng)?shù)據(jù)表、字段、記錄與數(shù)據(jù)庫的關(guān)系如何?
2.怎樣使用“可視化數(shù)據(jù)庫管理器”來建立和修改數(shù)據(jù)庫?
3.在使用Find方法查找記錄時(shí),如何判斷查找是否成功?
聯(lián)系客服