VB與數(shù)據(jù)庫(kù)課件_第1頁(yè)
VB與數(shù)據(jù)庫(kù)課件_第2頁(yè)
VB與數(shù)據(jù)庫(kù)課件_第3頁(yè)
VB與數(shù)據(jù)庫(kù)課件_第4頁(yè)
VB與數(shù)據(jù)庫(kù)課件_第5頁(yè)
已閱讀5頁(yè),還剩135頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九章VB與數(shù)據(jù)庫(kù)基本內(nèi)容:

介紹了VB中Data控件、DBGrid控件、ADOData控件的使用方法。教學(xué)要求:

掌握相關(guān)控件的屬性、方法和事件。重點(diǎn):

掌握數(shù)據(jù)控件的使用。第九章VB與數(shù)據(jù)庫(kù)基本內(nèi)容:1 在VB中,可用的數(shù)據(jù)訪問(wèn)接口有3種:ActiveX數(shù)據(jù)對(duì)象(ADO)、遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)和數(shù)據(jù)訪問(wèn)對(duì)象(DAO)。數(shù)據(jù)訪問(wèn)接口是一個(gè)對(duì)象模型,它代表了訪問(wèn)數(shù)據(jù)的各個(gè)方面??梢栽谌魏螒?yīng)用程序中通過(guò)編程控制連接、語(yǔ)句生成器和供使用的返回?cái)?shù)據(jù)。 為什么在VB中有3種數(shù)據(jù)訪問(wèn)接口呢?因?yàn)閿?shù)據(jù)訪問(wèn)技術(shù)總是不斷進(jìn)步,而這3種接口的每一種都分別代表了該技術(shù)的不同發(fā)展階段。最新的是ADO,它比RDO和DAO更加簡(jiǎn)單,而且是更加靈活的對(duì)象模型。對(duì)于新工程,應(yīng)該使用ADO作為數(shù)據(jù)訪問(wèn)接口。 ADO控件是VB6.0中文版提供的一個(gè)ActiveX控件,與舊版的Data控件相似。 在VB中,可用的數(shù)據(jù)訪問(wèn)接口有3種:ActiveX數(shù)據(jù)對(duì)象29.1ODBC和數(shù)據(jù)源

ODBC的全稱(chēng)為OpenDatabaseConnection,即開(kāi)放式數(shù)據(jù)庫(kù)連接,是Microsoft公司在1989年推出的連接外部數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)。ODBC的優(yōu)點(diǎn)是:·ODBC提供了一個(gè)能訪問(wèn)大量數(shù)據(jù)庫(kù)的單一接口?!DBC使客戶應(yīng)用程序的開(kāi)發(fā)可以獨(dú)立于后端服務(wù)器。ODBC由以下部分組成,如圖9.1所示。 9.1ODBC和數(shù)據(jù)源3圖9.1ODBC體系結(jié)構(gòu)圖9.1ODBC體系結(jié)構(gòu)4·應(yīng)用程序:是為了訪問(wèn)數(shù)據(jù)庫(kù)而開(kāi)發(fā)的前端,它通過(guò)ODBC的API來(lái)建立與數(shù)據(jù)庫(kù)的連接,并使用SQL命令操縱數(shù)據(jù)庫(kù)?!?shù)據(jù)源:用于描述數(shù)據(jù)庫(kù)管理系統(tǒng)、遠(yuǎn)程操縱系統(tǒng)和網(wǎng)絡(luò)之間的組合方式,其中遠(yuǎn)程操作系統(tǒng)和網(wǎng)絡(luò)并不是必需的?!を?qū)動(dòng)程序管理器:是應(yīng)用程序和用戶訪問(wèn)一個(gè)特定數(shù)據(jù)庫(kù)所必需的驅(qū)動(dòng)程序之間的一個(gè)中介。·驅(qū)動(dòng)程序:為遷移一個(gè)特定的數(shù)據(jù)庫(kù)管理系統(tǒng)真正實(shí)現(xiàn)ODBCAPI。它建立與服務(wù)器的連接,提交SQL查詢(xún),然后向應(yīng)用程序返回結(jié)果集或出錯(cuò)信息。 ·應(yīng)用程序:是為了訪問(wèn)數(shù)據(jù)庫(kù)而開(kāi)發(fā)的前端,它通過(guò)ODBC的5 一旦有了ODBC驅(qū)動(dòng)程序,就可以創(chuàng)建應(yīng)用程序需要的數(shù)據(jù)源。數(shù)據(jù)源的信息包括用于訪問(wèn)的驅(qū)動(dòng)程序和數(shù)據(jù)庫(kù)的名字,還要為數(shù)據(jù)源提供一個(gè)名字,以便在應(yīng)用程序中引用它。 為了創(chuàng)建一個(gè)ODBC數(shù)據(jù)源,選擇WindowsXP系統(tǒng)的“開(kāi)始”|“設(shè)置”|“控制面板”,雙擊選中“ODBC數(shù)據(jù)源”出現(xiàn)ODBC數(shù)據(jù)源管理對(duì)話框。 一旦有了ODBC驅(qū)動(dòng)程序,就可以創(chuàng)建應(yīng)用程序需要的數(shù)據(jù)源。6 例如,為了建立Access的ODBC數(shù)據(jù)源,選擇不同的DSN類(lèi)型。單擊“添加”,彈出選擇數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序?qū)υ捒?,從“選定您需要的驅(qū)動(dòng)程序來(lái)安裝數(shù)據(jù)庫(kù)”的列表框中選擇“MicrosoftAccessDriver(*.mdb)”,單擊“完成”,出現(xiàn)如圖9.2所示的對(duì)話框。在該對(duì)話框中輸入數(shù)據(jù)源名“newstudent”,單擊“選取”,選擇數(shù)據(jù)庫(kù)“E:\vb\student.mdb”。單擊“確定”。這時(shí)返回ODBC數(shù)據(jù)源管理對(duì)話框,看到新添加的“newstudent”數(shù)據(jù)源,如圖9.3所示。這樣以后就可以在應(yīng)用程序中使用該數(shù)據(jù)源了。 VB與數(shù)據(jù)庫(kù)課件7圖9.2“ODBCMicrosoftAccess安裝”對(duì)話框圖9.2“ODBCMicrosoftAccess安裝8圖9.3“ODBC數(shù)據(jù)源管理器”窗口圖9.3“ODBC數(shù)據(jù)源管理器”窗口99.2使用數(shù)據(jù)庫(kù)管理器 VB提供了一個(gè)非常實(shí)用的工具程序,即可視化數(shù)據(jù)管理器(VisualDataManager),使用它可以方便地建立數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)查詢(xún)??梢哉f(shuō),凡是有關(guān)數(shù)據(jù)庫(kù)的操作,都能使用它來(lái)完成,并且由于它提供了可視化的操作界面,因此很容易掌握。 圖9.4可視數(shù)據(jù)庫(kù)管理器9.2使用數(shù)據(jù)庫(kù)管理器圖9.4可視數(shù)據(jù)庫(kù)管理器109.2.1建立一個(gè)數(shù)據(jù)庫(kù)1.啟動(dòng)數(shù)據(jù)庫(kù)管理器 在VB集成環(huán)境中,單擊“外接程序”菜單下的“可視化數(shù)據(jù)庫(kù)管理器”命令,即可打開(kāi)可視化數(shù)據(jù)庫(kù)管理器“VisData”窗口,如圖9.4所示?!皵?shù)據(jù)庫(kù)管理器”窗口由菜單欄、工具欄、子窗口區(qū)和狀態(tài)條組成,啟動(dòng)完成時(shí),其子窗口區(qū)為空。2.建立Jet數(shù)據(jù)庫(kù) 建立Jet數(shù)據(jù)庫(kù)的步驟如下: 9.2.1建立一個(gè)數(shù)據(jù)庫(kù)11 (1)選擇“文件”菜單中的“新建”項(xiàng),出現(xiàn)一個(gè)子菜單,列出如下可選的數(shù)據(jù)庫(kù)類(lèi)型:MicrosoftAccess:MicrosoftAccess(Version2.0或7.0).mdb。Dbase:Dbase(Version5.0,Ⅳ或Ⅱ)數(shù)據(jù)庫(kù)。FoxPro:FoxPro(Version3.0,2.6,2.5或2.0)數(shù)據(jù)庫(kù)。Paradox:Paradox(Version5.0,4.x或3.x)數(shù)據(jù)庫(kù)。ODBC:新的ODBC數(shù)據(jù)源。TextFiles:存儲(chǔ)表文件的目錄。 在其中選擇一項(xiàng),如“MicrosoftAccess”。若再出現(xiàn)下級(jí)子菜單,則再選一項(xiàng),如“Version7.0MDB”。VB與數(shù)據(jù)庫(kù)課件12 (2)出現(xiàn)創(chuàng)建數(shù)據(jù)庫(kù)對(duì)話框,在該對(duì)話框中選擇保存數(shù)據(jù)庫(kù)的路徑和庫(kù)文件名,如輸入數(shù)據(jù)庫(kù)文件名為“student”,保存文件夾為“e:\vb”。 (3)單擊“保存”按鈕后,在VisData多文檔窗口中將出現(xiàn)“數(shù)據(jù)庫(kù)窗口”和“SQL語(yǔ)句”兩個(gè)子窗口。在“數(shù)據(jù)庫(kù)窗口”中單擊“+”號(hào),將列出新建數(shù)據(jù)庫(kù)的常用屬性,如圖9.5所示。VB與數(shù)據(jù)庫(kù)課件13圖9.5新建數(shù)據(jù)庫(kù)的屬性圖9.5新建數(shù)據(jù)庫(kù)的屬性149.2.2添加數(shù)據(jù)表

利用可視化數(shù)據(jù)管理器建立數(shù)據(jù)庫(kù)后,就可以向該數(shù)據(jù)庫(kù)中添加數(shù)據(jù)表,下面以添加Access表為例介紹添加和建立表的方法。1.建立數(shù)據(jù)表結(jié)構(gòu)建立數(shù)據(jù)表結(jié)構(gòu)的步驟如下:(1)打開(kāi)已經(jīng)建立的Access數(shù)據(jù)庫(kù),如“student.mdb”.9.2.2添加數(shù)據(jù)表15(2)用鼠標(biāo)右鍵單擊數(shù)據(jù)庫(kù)窗口,在出現(xiàn)的快捷菜單中選擇“新建表”,此時(shí)將打開(kāi)“表結(jié)構(gòu)”對(duì)話框。 在“表結(jié)構(gòu)”對(duì)話框中,“表名稱(chēng)”必須輸入,即數(shù)據(jù)表必須有一個(gè)名字,如“學(xué)生表”?!白侄瘟斜怼憋@示表中的字段名,通過(guò)“添加字段”和“刪除字段”按鈕進(jìn)行字段的添加和刪除。有索引關(guān)鍵字的可向“索引列表”中添加或刪除索引。(3)單擊“添加字段”按鈕打開(kāi)“添加字段”對(duì)話框。在“名稱(chēng)”文本框中輸入一個(gè)字段名,在“類(lèi)型”下拉列表中選擇相應(yīng)的數(shù)據(jù)類(lèi)型,在“大小”框中輸入字段長(zhǎng)度,選擇字段是“固定字段”還是“可變字段”,以及“允許零長(zhǎng)度”和“必要的”。還可以定義驗(yàn)證規(guī)則來(lái)對(duì)取值進(jìn)行限制,可以指定插入記錄時(shí)字段的默認(rèn)值。 一個(gè)字段完成后,單擊“確定”按鈕,該對(duì)話框中的內(nèi)容將變?yōu)榭瞻?,可繼續(xù)添加該表中的其他字段。當(dāng)所有字段添加完畢后,單擊該對(duì)話框中的“關(guān)閉”按鈕,將返回“表結(jié)構(gòu)”對(duì)話框。(2)用鼠標(biāo)右鍵單擊數(shù)據(jù)庫(kù)窗口,在出現(xiàn)的快捷菜單中選擇“新建16(4)單擊“表結(jié)構(gòu)”對(duì)話框中的“添加索引”按鈕,打開(kāi)“添加索引”對(duì)話框。在“名稱(chēng)”框中輸入索引名,每個(gè)索引都要有一個(gè)名稱(chēng)。在“可用字段”中選擇建立索引的字段名。一個(gè)索引可以由一個(gè)字段建立,也可以用多個(gè)字段建立。 如果要使某個(gè)字段或幾個(gè)字段的值不重復(fù),可以建立索引,并使索引為惟一的,否則一定不要選中“惟一的”。(5)建立好“學(xué)生表”的表結(jié)構(gòu),如圖9.6所示。在“表結(jié)構(gòu)”對(duì)話框中,單擊“生成表”按鈕生成表,關(guān)閉表結(jié)構(gòu)對(duì)話框,在數(shù)據(jù)庫(kù)窗口中可以看到生成的表。

VB與數(shù)據(jù)庫(kù)課件17圖9.6“表結(jié)構(gòu)”對(duì)話框圖9.6“表結(jié)構(gòu)”對(duì)話框182.修改數(shù)據(jù)庫(kù)結(jié)構(gòu) 在可視化數(shù)據(jù)管理器中,可以修改數(shù)據(jù)庫(kù)中已經(jīng)建立的數(shù)據(jù)表的結(jié)構(gòu)。操作如下:(1)打開(kāi)要修改的數(shù)據(jù)表的數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)窗口中用鼠標(biāo)右鍵單擊要修改表結(jié)構(gòu)的數(shù)據(jù)表的表名,出現(xiàn)快捷菜單,如圖9.7所示。(2)在快捷菜單中選擇“設(shè)計(jì)”選項(xiàng),將打開(kāi)“表結(jié)構(gòu)”。此時(shí)的“表結(jié)構(gòu)”對(duì)話框與建立表時(shí)的對(duì)話框不完全相同。在該對(duì)話框中可以做的修改工作包括:修改表名稱(chēng)、修改字段名、添加與刪除字段、修改索引、添加與刪除索引、修改驗(yàn)證和默認(rèn)值等。單擊“打印結(jié)構(gòu)”按鈕可打印表結(jié)構(gòu),單擊“關(guān)閉”按鈕完成修改。

2.修改數(shù)據(jù)庫(kù)結(jié)構(gòu)19圖9.7“數(shù)據(jù)庫(kù)窗口”中的快捷菜單圖9.7“數(shù)據(jù)庫(kù)窗口”中的快捷菜單209.2.3數(shù)據(jù)表中數(shù)據(jù)的編輯1.“數(shù)據(jù)管理器”的工具欄 可視化數(shù)據(jù)管理器的工具欄由“記錄集類(lèi)型按鈕組”、“數(shù)據(jù)顯示按鈕組”和“事務(wù)方式按鈕組”三部分組成。(1)記錄集類(lèi)型按鈕組 記錄集類(lèi)型按鈕組為開(kāi)頭的三個(gè)按鈕,它們的說(shuō)明如下:表類(lèi)型記錄集:在以這種方式打開(kāi)數(shù)據(jù)表中數(shù)據(jù)時(shí),所進(jìn)行的增、刪、改等操作都將直接更新數(shù)據(jù)表中的數(shù)據(jù)。動(dòng)態(tài)集類(lèi)型記錄集:以這種方式可以打開(kāi)數(shù)據(jù)表或由查詢(xún)返回的數(shù)據(jù),所進(jìn)行的增、刪、改及查詢(xún)等操作都先在內(nèi)存中進(jìn)行,速度快??煺疹?lèi)型記錄集:以這種方式打開(kāi)的數(shù)據(jù)表或由查詢(xún)返回的數(shù)據(jù)僅供讀取而不能更改,適用于進(jìn)行查詢(xún)工作。9.2.3數(shù)據(jù)表中數(shù)據(jù)的編輯21(2)數(shù)據(jù)顯示按鈕組 在記錄集類(lèi)型按鈕組的右邊三個(gè)按鈕構(gòu)成了數(shù)據(jù)顯示按鈕組,它們的說(shuō)明如下:在窗體上使用Data控件:在顯示數(shù)據(jù)表的窗口中使用Data控件來(lái)控制記錄的滾動(dòng)。在窗體上不使用Data控件:在顯示數(shù)據(jù)表的窗口中不使用Data控件,而是使用水平滾動(dòng)條來(lái)控制記錄的滾動(dòng)。在窗體上使用DBGrid控件:在顯示數(shù)據(jù)表的窗口中使用DBGrid控件。(3)事務(wù)方式按鈕組 在數(shù)據(jù)顯示按鈕組的右邊三個(gè)按鈕構(gòu)成了事務(wù)方式按鈕組,它們的說(shuō)明如下:開(kāi)始事務(wù):開(kāi)始將數(shù)據(jù)寫(xiě)入內(nèi)存數(shù)據(jù)表中?;貪L當(dāng)前事務(wù):取消由“開(kāi)始事務(wù)”的寫(xiě)入操作。提交當(dāng)前事務(wù):確認(rèn)數(shù)據(jù)寫(xiě)入的操作,將數(shù)據(jù)表數(shù)據(jù)更新,原有數(shù)據(jù)將不能恢復(fù)。(2)數(shù)據(jù)顯示按鈕組222.數(shù)據(jù)記錄的輸入、修改與刪除 在“數(shù)據(jù)管理器”的工具欄中選擇“表類(lèi)型記錄集”、“在窗體上使用Data控件”和“開(kāi)始事務(wù)”選項(xiàng),然后在如圖9.4所示的快捷菜單中選擇“打開(kāi)”選項(xiàng),即可打開(kāi)數(shù)據(jù)表記錄處理窗口,如圖9.8所示。 在該窗口中有6個(gè)按鈕用于記錄操作,它們的作用分別為:添加/取消:向表中添加新記錄或取消添加的記錄。更新:保存窗口中的當(dāng)前記錄。刪除:刪除窗口中的當(dāng)前記錄。查找:根據(jù)指定條件查找滿足條件的記錄。刷新:用于記錄刷新,這僅對(duì)多用戶應(yīng)用程序才是需要的。關(guān)閉:關(guān)閉表處理窗口。2.數(shù)據(jù)記錄的輸入、修改與刪除23圖9.8數(shù)據(jù)記錄處理窗口圖9.8數(shù)據(jù)記錄處理窗口249.2.4使用“數(shù)據(jù)窗體設(shè)計(jì)器” “數(shù)據(jù)窗體設(shè)計(jì)器”可以創(chuàng)建數(shù)據(jù)窗體,并把它們添加到當(dāng)前的VB工程中。使用這個(gè)工具,不必編寫(xiě)任何代碼,就能創(chuàng)建用于瀏覽、修改和查詢(xún)數(shù)據(jù)的應(yīng)用程序?!皵?shù)據(jù)窗體設(shè)計(jì)器”菜單項(xiàng)在“實(shí)用程序”菜單中,只有打開(kāi)一個(gè)數(shù)據(jù)庫(kù)后,該菜單項(xiàng)才有效。數(shù)據(jù)窗體設(shè)計(jì)器的使用步驟如下:(1)首先執(zhí)行“文件”菜單中的“打開(kāi)數(shù)據(jù)庫(kù)”菜單項(xiàng),打開(kāi)前面建立的“student.MDB”數(shù)據(jù)庫(kù),這時(shí)在“實(shí)用程序”菜單中的“數(shù)據(jù)窗體設(shè)計(jì)器”菜單項(xiàng)變?yōu)榭捎玫摹?.2.4使用“數(shù)據(jù)窗體設(shè)計(jì)器”25(2)執(zhí)行“實(shí)用程序”菜單中的“數(shù)據(jù)窗體設(shè)計(jì)器”菜單項(xiàng),出現(xiàn)“數(shù)據(jù)窗體設(shè)計(jì)器”對(duì)話框。在“窗體名稱(chēng)(不帶擴(kuò)展名)”框中輸入“stud”,在“記錄源”組合框中選擇“學(xué)生表”,這時(shí)“可用的字段”列表框中列出學(xué)生表的所有字段,單擊“>>”按鈕將其全部移到“包括的字段”列表框中。(3)單擊“生成窗體”按鈕,當(dāng)所有字段消失后,數(shù)據(jù)窗體被加入到當(dāng)前的工程中。(4)單擊“關(guān)閉”按鈕,關(guān)閉“數(shù)據(jù)窗體設(shè)計(jì)器”對(duì)話框。此時(shí)在工程中生成的數(shù)據(jù)窗體如圖9.9所示。以“frmstud”文件名保存該窗體。該窗體如圖9.9所示。

VB與數(shù)據(jù)庫(kù)課件26圖9.9自動(dòng)生成的窗體圖9.9自動(dòng)生成的窗體27 實(shí)際上,該窗體是VB自動(dòng)生成的,其中包括5個(gè)標(biāo)簽(分別為對(duì)應(yīng)字段的字段名)、5個(gè)文本框(分別用于輸入各字段的值)、5個(gè)命令按鈕(標(biāo)題分別為“添加”、“刪除”、“刷新”、“更新”和“關(guān)閉”,對(duì)應(yīng)的命令按鈕名字分別是cmdAdd,cmdDelete,cmdRefresh,cmdUpdate和cmdClose)和一個(gè)Data控件(名字為Data1,Data控件在下節(jié)中介紹)。在這些命令按鈕上分別設(shè)計(jì)以下Click事件過(guò)程:

實(shí)際上,該窗體是VB自動(dòng)生成的,其中包括5個(gè)標(biāo)簽(分別為對(duì)28PrivateSubcmdAdd_Click()Data1.Recordset.AddNewEndSubPrivateSubcmdDelete_Click()'如果刪除記錄集的最后一條記錄'記錄或記錄集中唯一的記錄Data1.Recordset.DeleteData1.Recordset.MoveNextEndSubPrivateSubcmdRefresh_Click()'這僅對(duì)多用戶應(yīng)用程序才是需要的Data1.RefreshEndSubPrivateSubcmdUpdate_Click()Data1.UpdateRecordData1.Recordset.Bookmark=Data1.Recordset.LastModifiedEndSubPrivateSubcmdClose_Click()UnloadMeEndSubPrivateSubcmdAdd_Click()29(5)單擊“工程”菜單中的“工程1屬性”菜單項(xiàng),出現(xiàn)“工程屬性”對(duì)話框。在“啟動(dòng)對(duì)象”組合框中選擇“frmstud”,然后運(yùn)行工程。這時(shí)窗體如圖9.10所示,可以通過(guò)命令按鈕執(zhí)行相應(yīng)的數(shù)據(jù)表操作。圖9.10運(yùn)行后的數(shù)據(jù)窗體(5)單擊“工程”菜單中的“工程1屬性”菜單項(xiàng),出現(xiàn)“工程屬30 我們可以對(duì)生成的窗體進(jìn)行修改,使之更美觀,操作更方便,如圖9.11所示,是對(duì)上面自動(dòng)生成的窗體進(jìn)行修改的結(jié)果,其中將“性別”文本框和“民族”文本框改為組合框,便于數(shù)據(jù)輸入。圖9.11改進(jìn)后的數(shù)據(jù)窗體 我們可以對(duì)生成的窗體進(jìn)行修改,使之更美觀,操作更方便,如圖319.3數(shù)據(jù)控件的使用9.3.1數(shù)據(jù)控件常用屬性 1.Connect屬性 Connect屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫(kù)類(lèi)型。 VisualBasic6.0提供了7種可訪問(wèn)的數(shù)據(jù)庫(kù)類(lèi)型,VisualBasic可識(shí)別的數(shù)據(jù)庫(kù)有: 1)MicrosoftAccess的MDB文件(缺省值); 2)BorlanddBASE、MicrosoftFoxpro的DBF文件; 3)BorlandParadox的DB文件;9.3數(shù)據(jù)控件的使用9.3.1數(shù)據(jù)控件常用屬性 1.Co32 4)NovellBtrieve的DDF文件; 5)MicrosoftExcel的XLS文件; 6)Lotus的WKS文件; 7)OpenDataBaseConnectivity(ODBC)數(shù)據(jù)庫(kù)。 2.DatabaseName屬性 DatabaseName屬性指定具體使用數(shù)據(jù)庫(kù)的名稱(chēng),包括所有的路徑名。 如果連接的是單表數(shù)據(jù)庫(kù),則DatabaseName屬性應(yīng)設(shè)置為數(shù)據(jù)庫(kù)文件所在的子目錄名,而具體文件名放在RecordSource屬性中。 如果在“屬性”窗口中單擊DatabaseName屬性右邊的按鈕,會(huì)出現(xiàn)一個(gè)公用對(duì)話框用于選擇相應(yīng)的數(shù)據(jù)庫(kù)。VB與數(shù)據(jù)庫(kù)課件33 例如,下面語(yǔ)句設(shè)置了可訪問(wèn)的數(shù)據(jù)庫(kù)名稱(chēng): 如果連接一個(gè)MicrosoftAccess的數(shù)據(jù)庫(kù)C:\職員檔案.mdb,則Data1.DatabaseName=”C:\職員檔案.mdb”;如果連接一個(gè)Foxpro數(shù)據(jù)庫(kù)C:\yang\職員檔案1.dbf,因?yàn)镕oxpro數(shù)據(jù)庫(kù)只含有一個(gè)表,則Data1.DatabaseName=”C:\yang”,RecordSource=”職員檔案1.dbf”。 如果未寫(xiě)數(shù)據(jù)庫(kù)文件的擴(kuò)展名,則缺省情況下為使用以.mdb為擴(kuò)展名的數(shù)據(jù)庫(kù)文件。VB與數(shù)據(jù)庫(kù)課件34 3)RecordSource屬性 RecordSource屬性確定具體可訪問(wèn)的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對(duì)象Recordset。 4)RecordsetType屬性 RecordsetType屬性確定記錄集類(lèi)型。 5)ReadOnly屬性 在對(duì)數(shù)據(jù)庫(kù)只查看不修改時(shí),通常將ReadOnly屬性設(shè)置為T(mén)rue,而在運(yùn)行時(shí)根據(jù)一定的條件,響應(yīng)一定的指令后,才將它設(shè)置為False。 6)Exclusive屬性 Exclusive屬性值設(shè)置為T(mén)rue時(shí),則在通過(guò)關(guān)閉數(shù)據(jù)庫(kù)撤消這個(gè)設(shè)置前,其他任何人不能對(duì)數(shù)據(jù)庫(kù)訪問(wèn)。這個(gè)屬性的缺省值是False。 3)RecordSource屬性359.3.2數(shù)據(jù)綁定控件常用屬性 要使文本等控件與數(shù)據(jù)控件捆綁在一起,成為數(shù)據(jù)控件的綁定控件。并且能夠受到數(shù)據(jù)庫(kù)約束,必須在運(yùn)行時(shí)對(duì)這些控件的兩個(gè)屬性進(jìn)行設(shè)置: 1)DataSource屬性 DataSource屬性用來(lái)將一個(gè)有效的數(shù)據(jù)控件與一個(gè)數(shù)據(jù)庫(kù)連接。 2)DataField屬性 DataField屬性設(shè)置數(shù)據(jù)庫(kù)有效的字段與綁定控件建立聯(lián)系。圖9.12綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫(kù)三者的關(guān)系9.3.2數(shù)據(jù)綁定控件常用屬性 要使文本等控件與數(shù)據(jù)控件捆綁369.3.3使用數(shù)據(jù)控件操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)

象屬

性設(shè)

置dataNameDatabasenameConnectRecordsetsourceData1E:\VB書(shū)\student.mdbaccessstudentTextBoxNamedatafielddatasourcetext1學(xué)號(hào)data1TextBoxNamedatafielddatasourcetext2姓名data1TextBoxNamedatafielddatasourcetext3性別data1TextBoxNamedatafielddatasourcetext4出生年月data1表9.1窗體屬性表 例9.1、設(shè)計(jì)一窗體,在窗體內(nèi)通過(guò)文本框等綁定控件顯示學(xué)生情況表內(nèi)的記錄。9.3.3使用數(shù)據(jù)控件操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象屬性設(shè)37 不需編寫(xiě)任何代碼,就可瀏覽表中的內(nèi)容。單擊運(yùn)行按鈕就可出現(xiàn)如圖9.13所示4個(gè)文本框分別顯示學(xué)號(hào),姓名,性別,和出生年月的內(nèi)容。圖9.13學(xué)生情況表顯示界面 不需編寫(xiě)任何代碼,就可瀏覽表中的內(nèi)容。單擊運(yùn)行按鈕就可出現(xiàn)38 使用數(shù)據(jù)控件對(duì)象的4個(gè)箭頭可遍歷整個(gè)記錄集中的記錄。 通過(guò)DBList控件和DBCombo控件瀏覽學(xué)生情況表內(nèi)的記錄時(shí),DBList控件和DBCombo控件不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開(kāi)發(fā)環(huán)境中選擇“工程”|“部件”菜單命令,并在隨即出現(xiàn)的對(duì)話框中選擇MicrosoftDataBoundListControls選項(xiàng),將它們添加到工具箱中。 使用數(shù)據(jù)控件對(duì)象的4個(gè)箭頭可遍歷整個(gè)記錄集中的記錄。39例9.2:設(shè)計(jì)一個(gè)窗體,通過(guò)數(shù)據(jù)網(wǎng)格控件瀏覽學(xué)生情況表內(nèi)的記錄。參見(jiàn)圖9.14所示。 使用DATA數(shù)據(jù)控件時(shí)可使用MsflexGrid網(wǎng)格控件或VB5.0提供的數(shù)據(jù)網(wǎng)格控件DBGrid。MsflexGrid控件與DBGrid控件都不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開(kāi)發(fā)環(huán)境中選擇“工程”主菜單中的“添加部件”命令,并在隨即出現(xiàn)的對(duì)話框中選擇MicrosoftFlexGridControl6.0或MicrosoftDataBoundControl5.0,將其添加到工具箱中。例9.2:設(shè)計(jì)一個(gè)窗體,通過(guò)數(shù)據(jù)網(wǎng)格控件瀏覽學(xué)生情況表內(nèi)的記40對(duì)

設(shè)

置DataNamedata1Data1.Caption學(xué)生信息DatabasenameD:\Vb書(shū)\student.mdbRecordsource學(xué)生情況圖9.14通過(guò)數(shù)據(jù)網(wǎng)格控件瀏覽學(xué)生情況表表9.2窗體屬性表對(duì)象屬性41 數(shù)據(jù)控件是依靠數(shù)據(jù)對(duì)象來(lái)獲取對(duì)數(shù)據(jù)訪問(wèn)的,與其相關(guān)的數(shù)據(jù)對(duì)象有: 1Database對(duì)象 Database對(duì)象是物理數(shù)據(jù)庫(kù)的邏輯表示。數(shù)據(jù)控件通過(guò)DatabaseName屬性連接到一個(gè)具體的數(shù)據(jù)庫(kù),并通過(guò)它的Database對(duì)象表現(xiàn)出來(lái)。 除了數(shù)據(jù)控件獲取Database對(duì)象之外,還可以在程序中定義Database對(duì)象,并通過(guò)OpenDatabase()函數(shù)實(shí)現(xiàn)對(duì)物理數(shù)據(jù)庫(kù)的連接;或者將數(shù)據(jù)控件的Database對(duì)象傳遞給被定義的Database對(duì)象。9.3.4數(shù)據(jù)控件上的對(duì)象 數(shù)據(jù)控件是依靠數(shù)據(jù)對(duì)象來(lái)獲取對(duì)數(shù)據(jù)訪問(wèn)的,與其相關(guān)的數(shù)據(jù)對(duì)42 例如以下語(yǔ)句: DimDs1AsDatabase‘定義數(shù)據(jù)對(duì)象 DimDs2AsDatabase SetDs1=OpenDatabase(“e:\VB\class.mdb)‘使Ds1獲取物理數(shù)據(jù)庫(kù) SetDs2=Me.data1.Database‘將數(shù)據(jù)控件的Database對(duì)象傳遞給Ds2 例如以下語(yǔ)句:43 2Recordset對(duì)象 Recordset對(duì)象代表一組與數(shù)據(jù)庫(kù)相關(guān)的邏輯記錄集合。它所對(duì)應(yīng)的數(shù)據(jù)來(lái)源可以是數(shù)據(jù)表,也可以是和SQL語(yǔ)言中查詢(xún)語(yǔ)句(SELECT)有關(guān)的查詢(xún)結(jié)果。 Recordset對(duì)象有三種類(lèi)型:

Table類(lèi)型:記錄集為表集,可以顯示、添加、刪除和修改,具有較好的更新性能。 Dynaset類(lèi)型:記錄集為動(dòng)態(tài)集,可以顯示、添加、刪除和修改,并具有較大的操作靈活性。 Snapshot類(lèi)型:記錄集為快照集,只能顯示,具有較好的顯示速度。 2Recordset對(duì)象44 除了Data控件獲取Recordset對(duì)象之外,還可以在程序中定義Recordset對(duì)象,并通過(guò)函數(shù)獲得數(shù)據(jù)。 DimDsAsDatabase‘定義數(shù)據(jù)對(duì)象 DimRsAsRecorderset‘定義記錄對(duì)象 SetDs=OpenDatabase(“e:\VB|class.mdb)‘使Ds獲取物理數(shù)據(jù)庫(kù) SetRs=Me.data1.Database.OpenRecordset(“SElECT*FROM學(xué)生情況”,dbOpenDynaset)‘以動(dòng)態(tài)集方式打開(kāi)從“學(xué)生情況”數(shù)據(jù)表取得的SQL查詢(xún),傳給Rs對(duì)象 SetMe.data1.Recorderset=.Rs 除了Data控件獲取Recordset對(duì)象之外,還可以在程459.3.5數(shù)據(jù)控件的常用方法 1Refresh方法 如果在設(shè)計(jì)狀態(tài)沒(méi)有為打開(kāi)數(shù)據(jù)控件的有關(guān)屬性全部賦值,或當(dāng)RecordSource在運(yùn)行時(shí)被改變后,必須使用激活數(shù)據(jù)控件的Refresh方法激活這些變化。 2UpdateCountrols方法 UpdateCountrols方法可以將數(shù)據(jù)從數(shù)據(jù)庫(kù)中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。使用UpdateCountrols方法終止用戶對(duì)綁定內(nèi)控件的修改。 3UpdateRecord方法 當(dāng)對(duì)綁定內(nèi)的控件修改后,數(shù)據(jù)控件需要移動(dòng)記錄集的指針才能保存修改,如果使用UpdateRecord方法可強(qiáng)制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中而不再觸發(fā)Validate事件。在代碼中用該方法修改。9.3.5數(shù)據(jù)控件的常用方法 1Refresh方法469.3.6數(shù)據(jù)控件的事件 1Reposition事件 Reposition事件發(fā)生在一條記錄成為當(dāng)前記錄后。只要改變記錄集的指針使其從一條記錄移到另一條記錄。會(huì)產(chǎn)生Reposition事件,可以在該事件過(guò)程中建立程序,可反映出記錄位置、記錄總數(shù)等。 2Validate事件 當(dāng)要移動(dòng)記錄指針前,修改與刪除記錄前或卸載含有數(shù)據(jù)控件的窗體時(shí)觸發(fā)Validate事件。Validate事件檢查被數(shù)據(jù)控件綁定的控件內(nèi)的數(shù)據(jù)是否發(fā)生變化。它通過(guò)save參數(shù)(True或False)判斷是否有數(shù)據(jù)發(fā)生變化,Action參數(shù)判斷哪一種操作觸發(fā)了Validate事件。Action參數(shù)可為表9.3中的值:9.3.6數(shù)據(jù)控件的事件 1Reposition事件47表9.3Validate事件的Action參數(shù)表Action值描述0取消對(duì)數(shù)據(jù)控件的操作1MoveFirst2MovePrevious3MoveNext4MoveLast5Addnew6Updata7Delete8Find9設(shè)置BookMark10Close11卸載窗體表9.3Validate事件的Action參數(shù)表Actio48 對(duì)記錄的操作能夠通過(guò)Recordset對(duì)象的方法實(shí)現(xiàn)。其常用方法有: 1)AddNew方法 加入一條新記錄到記錄集內(nèi)存緩沖區(qū)。 例如:Rs.AddNew 2)Edit方法 允許對(duì)當(dāng)前記錄進(jìn)行修改。 3)Delete方法 用于刪除當(dāng)前記錄。4)Update方法把內(nèi)存緩沖區(qū)的內(nèi)容寫(xiě)進(jìn)數(shù)據(jù)庫(kù)文件,保存對(duì)數(shù)據(jù)庫(kù)所作的改動(dòng)。9.3.7數(shù)據(jù)庫(kù)記錄的增刪改操作 對(duì)記錄的操作能夠通過(guò)Recordset對(duì)象的方法實(shí)現(xiàn)。其常49 5)Close方法 關(guān)閉記錄集和數(shù)據(jù)庫(kù)。該方法也能用在數(shù)據(jù)庫(kù)對(duì)象上,將數(shù)據(jù)庫(kù)關(guān)閉。 Rs.Close'關(guān)閉記錄集 Ds.Close‘關(guān)閉數(shù)據(jù)庫(kù)6)Move方法使用Move方法可代替對(duì)數(shù)據(jù)庫(kù)控件對(duì)象的4個(gè)箭頭的操作遍歷整個(gè)記錄幾種的記錄。5種Move方法是: (1)MoveFirst方法移至第一條記錄 (2)MoveLast方法移至最后一條記錄 (3)MoveNext方法移至下一條記錄 (4)MovePrevious方法移至上一條記錄 (5)Move[n]方法向前或向后移動(dòng)n條記錄,n為指定的數(shù)值。 5)Close方法50 例9.3:在窗體上用4個(gè)命令按鈕代替例9.1數(shù)據(jù)控件對(duì)象的4個(gè)箭頭的操作。 窗體屬性設(shè)置如下:在窗體上增加4個(gè)命令按鈕,將數(shù)據(jù)控件的Visible屬性設(shè)置為False.。通過(guò)對(duì)4個(gè)按鈕的編程代替數(shù)據(jù)控件的4個(gè)箭頭。窗體如圖9.15所示。圖9.15用按鈕代替數(shù)據(jù)控件 例9.3:在窗體上用4個(gè)命令按鈕代替例9.1數(shù)據(jù)控件對(duì)象的51上一條和下一條按鈕的代碼需要考慮Recordset對(duì)象的邊界,可用Bof和Eof屬性檢測(cè)記錄集的首尾,如越界,則用指令定位到第一條或最后一條記錄。程序代碼如下:PrivateSubCommand1_Click()Data1.Recordset.MoveFirstEndSubPrivateSubCommand2_Click()Data1.Recordset.MovePreviousIfData1.Recordset.BOFThen Data1.Recordset.MoveFirstEndSub上一條和下一條按鈕的代碼需要考慮Recordset對(duì)象的邊界52PrivateSubCommand3_Click()Data1.Recordset.MoveNextIfData1.Recordset.EOFThen Data1.Recordset.MoveLastEndSubPrivateSubCommand4_Click()Data1.Recordset.MoveLastEndSubPrivateSubCommand3_Click()539.4ADOData控件 ADOData控件(有時(shí)簡(jiǎn)稱(chēng)為ADO控件)與VB固有的Data控件相似。使用ADOData控件,可以利用MicrosoftActiveXDataObjects(ADO)快速建立數(shù)據(jù)綁定控件和數(shù)據(jù)提供者之間的連接。 ADOData控件可以實(shí)現(xiàn)以下功能:·連接一個(gè)本地?cái)?shù)據(jù)庫(kù)或遠(yuǎn)程數(shù)據(jù)庫(kù)?!ご蜷_(kāi)一個(gè)指定的數(shù)據(jù)庫(kù)表,或定義一個(gè)基于結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)的查詢(xún)、存儲(chǔ)過(guò)程或該數(shù)據(jù)庫(kù)中的表的視圖的記錄集合?!?shù)據(jù)字段的數(shù)值傳遞給數(shù)據(jù)綁定控件,可以在這些控件中顯示或更改這些數(shù)值。·添加新的記錄,或根據(jù)更改顯示在綁定的控件中的數(shù)據(jù)來(lái)更新一個(gè)數(shù)據(jù)庫(kù)。9.4ADOData控件54

要使用ADOData控件,單擊“工程”菜單上的“部件”選項(xiàng),并在“部件”對(duì)話框中選擇“MicrosoftADODataControl6.0”,如圖9.18所示。單擊“確定”按鈕,就可以在VB中的控件工具箱內(nèi)看見(jiàn)它。通過(guò)數(shù)據(jù)控件可以直接對(duì)記錄集進(jìn)行訪問(wèn),移動(dòng)記錄指針,不需要編寫(xiě)代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。圖9.16“工程”菜單的“部件”對(duì)話框 要使用ADOData控件,單擊“工程”菜單上的“部件”選559.4.1ADOData控件的屬性ADOData控件的常用屬性如下:1.Align屬性用來(lái)把數(shù)據(jù)控件擺放在窗體的特定位置,有5個(gè)可選的位置?!bAlignNone可以用鼠標(biāo)指針拖動(dòng)控件到窗口的任何位置?!bAlignTop將控件放到窗口的頂端?!bAlignBottom將控件放到窗口的底部?!bAlignLeft將控件放到窗口的最左邊?!bAlignRight將控件放到窗口的最右邊。9.4.1ADOData控件的屬性562.BOFAction和EOFAction屬性 當(dāng)移動(dòng)數(shù)據(jù)庫(kù)記錄指針時(shí),如果記錄指針移動(dòng)到BOF或EOF位置后,再向前或向后移動(dòng)記錄指針將發(fā)生錯(cuò)誤。 BOFAction和EOFAction屬性指定當(dāng)發(fā)生上述錯(cuò)誤時(shí),數(shù)據(jù)控件采取什么樣的操作。BOFAction屬性有兩個(gè)可選常量:·adDoMoveFirst:移動(dòng)記錄指針到第一個(gè)記錄?!dStayBOF:移動(dòng)記錄指針到記錄的開(kāi)始。記錄指針移動(dòng)到記錄的開(kāi)始位置時(shí)將引發(fā)數(shù)據(jù)控件的Validate事件和Reposition事件,這時(shí)可編寫(xiě)程序代碼確定要執(zhí)行的操作。

2.BOFAction和EOFAction屬性57 EOFAction屬性有三個(gè)可選常量:·adDoMoveLast:移動(dòng)記錄指針到最后一個(gè)記錄?!dStayEOF:移動(dòng)記錄指針到記錄的結(jié)尾,同樣可利用它所引發(fā)的事件編寫(xiě)程序代碼?!dDoAddNew:當(dāng)記錄指針移動(dòng)到文件尾部時(shí),引發(fā)數(shù)據(jù)控件的Validate事件,然后自動(dòng)執(zhí)行AddNew方法添加新記錄,并在新記錄上引發(fā)Reposition事件。VB與數(shù)據(jù)庫(kù)課件583.ConnectionString屬性 ConnectionString屬性用來(lái)建立到數(shù)據(jù)源的連接的信息。由于VB的ADO對(duì)象模型可以鏈接不同類(lèi)型的數(shù)據(jù)庫(kù),所以在使用ADOData控件時(shí)也能夠通過(guò)ConnectionString屬性來(lái)設(shè)置要鏈接的數(shù)據(jù)庫(kù)。在設(shè)計(jì)時(shí),可以首先將ConnectionString屬性設(shè)置為一個(gè)有效的連接字符串,也可以將ConnectionString屬性設(shè)置為定義連接的文件名。該文件是由“數(shù)據(jù)鏈接”對(duì)話框產(chǎn)生的。設(shè)置ConnectionString屬性的步驟如下:(1)單擊ADOData控件,并在“屬性”窗口中單擊ConnectionString屬性的“...”按鈕,出現(xiàn)如圖9.17所示的“屬性頁(yè)”對(duì)話框。

3.ConnectionString屬性59圖9.17“屬性頁(yè)”對(duì)話框圖9.17“屬性頁(yè)”對(duì)話框60(2)如果已經(jīng)創(chuàng)建了一個(gè)Microsoft數(shù)據(jù)鏈接文件(.UDL),選擇“使用DataLink文件”單選按鈕,并單擊“瀏覽”按鈕,以找到計(jì)算機(jī)上的文件。(3)如果使用DSN,則單擊“使用ODBC數(shù)據(jù)源名”連接,并從框中選擇一個(gè)DSN,或單擊“新建”按鈕創(chuàng)建一個(gè)。(4)如果想創(chuàng)建一個(gè)連接字符串,選擇“使用連接字符串”單選按鈕,單擊“生成”按鈕,然后在如圖9.18所示的“數(shù)據(jù)鏈接屬性”對(duì)話框創(chuàng)建一個(gè)連接。(2)如果已經(jīng)創(chuàng)建了一個(gè)Microsoft數(shù)據(jù)鏈接文件(.U61圖9.18“數(shù)據(jù)鏈接屬性”的“連接”選項(xiàng)卡圖9.18“數(shù)據(jù)鏈接屬性”的“連接”選項(xiàng)卡62(5)在創(chuàng)建連接字符串后,單擊“確定”按鈕。ConnectionString屬性將使用一個(gè)類(lèi)似于下面一行的字符串來(lái)填充:drive=[SQLServer];server=bigsmile;uid=sa;pwd=pwd;database=pubs 在運(yùn)行時(shí),可以動(dòng)態(tài)地設(shè)置ConnectionString更改數(shù)據(jù)庫(kù)。4.RecordSource屬性 RecordSource屬性設(shè)置要鏈接的表或者SQL查詢(xún)語(yǔ)句??梢栽凇皩傩浴贝翱谥袑ⅰ坝涗浽础睂傩栽O(shè)置為一個(gè)SQL語(yǔ)句。例如:SELECT*FROMstudentWHEREsex="男"(5)在創(chuàng)建連接字符串后,單擊“確定”按鈕。Connecti635.CommandType屬性 CommandType屬性用于指定RecordSource屬性的取值類(lèi)型??芍苯釉趯傩源翱谥蠧ommandType屬性框右邊的下拉列表中選擇需要的類(lèi)型,其取值如下:·adCmdUnknown:默認(rèn)值。CommandText屬性中的命令類(lèi)型未知?!dCmdTable:將CommandText作為其列全部由內(nèi)部生成的SQL查詢(xún)返回的表格的名稱(chēng)進(jìn)行計(jì)算?!dCmdText:將CommandText作為命令或存儲(chǔ)過(guò)程調(diào)用的文本化定義進(jìn)行計(jì)算?!dCmdStoreProc:將CommandText作為存儲(chǔ)過(guò)程名進(jìn)行計(jì)算。5.CommandType屬性646.UserName屬性 UserName屬性指定用戶的名稱(chēng),當(dāng)數(shù)據(jù)庫(kù)受密碼保護(hù)時(shí),需要指定該屬性。該屬性可以在ConnectionString中指定。如果同時(shí)提供一個(gè)ConnectionString屬性以及一個(gè)UserName屬性,則ConnectionString中的值將覆蓋UserName屬性的值。7.Password屬性 Password屬性指定密碼,在訪問(wèn)一個(gè)受保護(hù)的數(shù)據(jù)庫(kù)時(shí)指定密碼是必需的。和Provider屬性與UserName屬性類(lèi)似,如果在ConnectionString屬性中指定了密碼,則將覆蓋在該屬性中指定的值。8.ConnectionTimeout屬性 該屬性設(shè)置等待建立一個(gè)連接的時(shí)間,以秒為單位。如果連接超時(shí),則返回一個(gè)錯(cuò)誤。6.UserName屬性659.4.2ADOData控件的方法ADOData控件的常用方法如下:1.UpdateControls方法 該方法用于更新綁定控件的內(nèi)容。綁定控件是通過(guò)設(shè)置控件的DataSource屬性和DataField屬性,從而將該控件與ADOData控件的某個(gè)字段綁定到一起的。使用綁定控件,可以讓該控件的內(nèi)容自動(dòng)更新,取回記錄集當(dāng)前記錄的內(nèi)容或者將更新的內(nèi)容保存到記錄集中。2.AddNew方法 用于在ADOData控件的記錄集中添加一條新記錄。其使用語(yǔ)法如下:Adodc1.Recordset.AddNew 其中Adodc1是一個(gè)ADOData控件的名字。在添加語(yǔ)句之后,應(yīng)該給相應(yīng)的各個(gè)字段賦值,然后調(diào)用UpdateBatch方法保存記錄,或者調(diào)用CancelUpdate方法取消保存。9.4.2ADOData控件的方法663.Delete方法 用于在ADOData控件的記錄集中刪除當(dāng)前記錄。其使用語(yǔ)法如下:Adodc1.Recordset.Delete4.MoveFirst,MoveLast,MoveNext和MovePrevious方法 用于在ADOData控件的記錄集中移動(dòng)記錄。MoveFirst,MoveLast,MoveNext和MovePrevious方法分別移到第一個(gè)記錄、最后一個(gè)記錄、下一個(gè)記錄和上一個(gè)記錄。其使用語(yǔ)法如下:Adodc1.Recordset.MoveFirstAdodc1.Recordset.MoveLastAdodc1.Recordset.MoveNextAdodc1.Recordset.MovePreviousVB與數(shù)據(jù)庫(kù)課件675.CancelUpdate方法 用于取消ADOData控件的記錄集中添加或編輯操作,恢復(fù)修改前的狀態(tài)。其使用語(yǔ)法如下:Adodc1.Recordset.CancelUpdate6.UpdateBatch方法 用于保存ADOData控件的記錄集中添加或編輯操作。其使用語(yǔ)法如下:Adodc1.Recordset.UpdateBatch5.CancelUpdate方法689.4.3ADOData控件的事件ADOData控件的常用事件如下:1.WillMove和MoveComplete事件 WillMove事件在當(dāng)前記錄的位置即將發(fā)生變化時(shí)觸發(fā),如使用ADOData控件上的按鈕移動(dòng)記錄位置時(shí)。WillComplete事件在位置改變完成時(shí)觸發(fā)。2.WillChangeField和FieldChangeComplete事件 WillChangeField事件是當(dāng)前記錄集中當(dāng)前記錄的一個(gè)或多個(gè)字段發(fā)生變化時(shí)觸發(fā)。而FieldChangeComplete事件則是當(dāng)字段的值發(fā)生變化后觸發(fā)。3.WillChangeRecord和RecordChangeComplete事件 WillChangeRecord事件是當(dāng)記錄集中的一個(gè)或多個(gè)記錄發(fā)生變化前產(chǎn)生的。而RecordChangeComplete事件則是當(dāng)記錄已經(jīng)完成后觸發(fā)。9.4.3ADOData控件的事件69作業(yè):1在VB中可以訪問(wèn)哪些類(lèi)型的數(shù)據(jù)庫(kù)?2利用Data控件說(shuō)明如何將一個(gè)表中的字段綁定到一個(gè)文本框中?3簡(jiǎn)述將ADO控件連接到數(shù)據(jù)源的步驟。作業(yè):70第九章VB與數(shù)據(jù)庫(kù)基本內(nèi)容:

介紹了VB中Data控件、DBGrid控件、ADOData控件的使用方法。教學(xué)要求:

掌握相關(guān)控件的屬性、方法和事件。重點(diǎn):

掌握數(shù)據(jù)控件的使用。第九章VB與數(shù)據(jù)庫(kù)基本內(nèi)容:71 在VB中,可用的數(shù)據(jù)訪問(wèn)接口有3種:ActiveX數(shù)據(jù)對(duì)象(ADO)、遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)和數(shù)據(jù)訪問(wèn)對(duì)象(DAO)。數(shù)據(jù)訪問(wèn)接口是一個(gè)對(duì)象模型,它代表了訪問(wèn)數(shù)據(jù)的各個(gè)方面??梢栽谌魏螒?yīng)用程序中通過(guò)編程控制連接、語(yǔ)句生成器和供使用的返回?cái)?shù)據(jù)。 為什么在VB中有3種數(shù)據(jù)訪問(wèn)接口呢?因?yàn)閿?shù)據(jù)訪問(wèn)技術(shù)總是不斷進(jìn)步,而這3種接口的每一種都分別代表了該技術(shù)的不同發(fā)展階段。最新的是ADO,它比RDO和DAO更加簡(jiǎn)單,而且是更加靈活的對(duì)象模型。對(duì)于新工程,應(yīng)該使用ADO作為數(shù)據(jù)訪問(wèn)接口。 ADO控件是VB6.0中文版提供的一個(gè)ActiveX控件,與舊版的Data控件相似。 在VB中,可用的數(shù)據(jù)訪問(wèn)接口有3種:ActiveX數(shù)據(jù)對(duì)象729.1ODBC和數(shù)據(jù)源

ODBC的全稱(chēng)為OpenDatabaseConnection,即開(kāi)放式數(shù)據(jù)庫(kù)連接,是Microsoft公司在1989年推出的連接外部數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)。ODBC的優(yōu)點(diǎn)是:·ODBC提供了一個(gè)能訪問(wèn)大量數(shù)據(jù)庫(kù)的單一接口。·ODBC使客戶應(yīng)用程序的開(kāi)發(fā)可以獨(dú)立于后端服務(wù)器。ODBC由以下部分組成,如圖9.1所示。 9.1ODBC和數(shù)據(jù)源73圖9.1ODBC體系結(jié)構(gòu)圖9.1ODBC體系結(jié)構(gòu)74·應(yīng)用程序:是為了訪問(wèn)數(shù)據(jù)庫(kù)而開(kāi)發(fā)的前端,它通過(guò)ODBC的API來(lái)建立與數(shù)據(jù)庫(kù)的連接,并使用SQL命令操縱數(shù)據(jù)庫(kù)?!?shù)據(jù)源:用于描述數(shù)據(jù)庫(kù)管理系統(tǒng)、遠(yuǎn)程操縱系統(tǒng)和網(wǎng)絡(luò)之間的組合方式,其中遠(yuǎn)程操作系統(tǒng)和網(wǎng)絡(luò)并不是必需的。·驅(qū)動(dòng)程序管理器:是應(yīng)用程序和用戶訪問(wèn)一個(gè)特定數(shù)據(jù)庫(kù)所必需的驅(qū)動(dòng)程序之間的一個(gè)中介?!を?qū)動(dòng)程序:為遷移一個(gè)特定的數(shù)據(jù)庫(kù)管理系統(tǒng)真正實(shí)現(xiàn)ODBCAPI。它建立與服務(wù)器的連接,提交SQL查詢(xún),然后向應(yīng)用程序返回結(jié)果集或出錯(cuò)信息。 ·應(yīng)用程序:是為了訪問(wèn)數(shù)據(jù)庫(kù)而開(kāi)發(fā)的前端,它通過(guò)ODBC的75 一旦有了ODBC驅(qū)動(dòng)程序,就可以創(chuàng)建應(yīng)用程序需要的數(shù)據(jù)源。數(shù)據(jù)源的信息包括用于訪問(wèn)的驅(qū)動(dòng)程序和數(shù)據(jù)庫(kù)的名字,還要為數(shù)據(jù)源提供一個(gè)名字,以便在應(yīng)用程序中引用它。 為了創(chuàng)建一個(gè)ODBC數(shù)據(jù)源,選擇WindowsXP系統(tǒng)的“開(kāi)始”|“設(shè)置”|“控制面板”,雙擊選中“ODBC數(shù)據(jù)源”出現(xiàn)ODBC數(shù)據(jù)源管理對(duì)話框。 一旦有了ODBC驅(qū)動(dòng)程序,就可以創(chuàng)建應(yīng)用程序需要的數(shù)據(jù)源。76 例如,為了建立Access的ODBC數(shù)據(jù)源,選擇不同的DSN類(lèi)型。單擊“添加”,彈出選擇數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序?qū)υ捒?,從“選定您需要的驅(qū)動(dòng)程序來(lái)安裝數(shù)據(jù)庫(kù)”的列表框中選擇“MicrosoftAccessDriver(*.mdb)”,單擊“完成”,出現(xiàn)如圖9.2所示的對(duì)話框。在該對(duì)話框中輸入數(shù)據(jù)源名“newstudent”,單擊“選取”,選擇數(shù)據(jù)庫(kù)“E:\vb\student.mdb”。單擊“確定”。這時(shí)返回ODBC數(shù)據(jù)源管理對(duì)話框,看到新添加的“newstudent”數(shù)據(jù)源,如圖9.3所示。這樣以后就可以在應(yīng)用程序中使用該數(shù)據(jù)源了。 VB與數(shù)據(jù)庫(kù)課件77圖9.2“ODBCMicrosoftAccess安裝”對(duì)話框圖9.2“ODBCMicrosoftAccess安裝78圖9.3“ODBC數(shù)據(jù)源管理器”窗口圖9.3“ODBC數(shù)據(jù)源管理器”窗口799.2使用數(shù)據(jù)庫(kù)管理器 VB提供了一個(gè)非常實(shí)用的工具程序,即可視化數(shù)據(jù)管理器(VisualDataManager),使用它可以方便地建立數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)查詢(xún)。可以說(shuō),凡是有關(guān)數(shù)據(jù)庫(kù)的操作,都能使用它來(lái)完成,并且由于它提供了可視化的操作界面,因此很容易掌握。 圖9.4可視數(shù)據(jù)庫(kù)管理器9.2使用數(shù)據(jù)庫(kù)管理器圖9.4可視數(shù)據(jù)庫(kù)管理器809.2.1建立一個(gè)數(shù)據(jù)庫(kù)1.啟動(dòng)數(shù)據(jù)庫(kù)管理器 在VB集成環(huán)境中,單擊“外接程序”菜單下的“可視化數(shù)據(jù)庫(kù)管理器”命令,即可打開(kāi)可視化數(shù)據(jù)庫(kù)管理器“VisData”窗口,如圖9.4所示。“數(shù)據(jù)庫(kù)管理器”窗口由菜單欄、工具欄、子窗口區(qū)和狀態(tài)條組成,啟動(dòng)完成時(shí),其子窗口區(qū)為空。2.建立Jet數(shù)據(jù)庫(kù) 建立Jet數(shù)據(jù)庫(kù)的步驟如下: 9.2.1建立一個(gè)數(shù)據(jù)庫(kù)81 (1)選擇“文件”菜單中的“新建”項(xiàng),出現(xiàn)一個(gè)子菜單,列出如下可選的數(shù)據(jù)庫(kù)類(lèi)型:MicrosoftAccess:MicrosoftAccess(Version2.0或7.0).mdb。Dbase:Dbase(Version5.0,Ⅳ或Ⅱ)數(shù)據(jù)庫(kù)。FoxPro:FoxPro(Version3.0,2.6,2.5或2.0)數(shù)據(jù)庫(kù)。Paradox:Paradox(Version5.0,4.x或3.x)數(shù)據(jù)庫(kù)。ODBC:新的ODBC數(shù)據(jù)源。TextFiles:存儲(chǔ)表文件的目錄。 在其中選擇一項(xiàng),如“MicrosoftAccess”。若再出現(xiàn)下級(jí)子菜單,則再選一項(xiàng),如“Version7.0MDB”。VB與數(shù)據(jù)庫(kù)課件82 (2)出現(xiàn)創(chuàng)建數(shù)據(jù)庫(kù)對(duì)話框,在該對(duì)話框中選擇保存數(shù)據(jù)庫(kù)的路徑和庫(kù)文件名,如輸入數(shù)據(jù)庫(kù)文件名為“student”,保存文件夾為“e:\vb”。 (3)單擊“保存”按鈕后,在VisData多文檔窗口中將出現(xiàn)“數(shù)據(jù)庫(kù)窗口”和“SQL語(yǔ)句”兩個(gè)子窗口。在“數(shù)據(jù)庫(kù)窗口”中單擊“+”號(hào),將列出新建數(shù)據(jù)庫(kù)的常用屬性,如圖9.5所示。VB與數(shù)據(jù)庫(kù)課件83圖9.5新建數(shù)據(jù)庫(kù)的屬性圖9.5新建數(shù)據(jù)庫(kù)的屬性849.2.2添加數(shù)據(jù)表

利用可視化數(shù)據(jù)管理器建立數(shù)據(jù)庫(kù)后,就可以向該數(shù)據(jù)庫(kù)中添加數(shù)據(jù)表,下面以添加Access表為例介紹添加和建立表的方法。1.建立數(shù)據(jù)表結(jié)構(gòu)建立數(shù)據(jù)表結(jié)構(gòu)的步驟如下:(1)打開(kāi)已經(jīng)建立的Access數(shù)據(jù)庫(kù),如“student.mdb”.9.2.2添加數(shù)據(jù)表85(2)用鼠標(biāo)右鍵單擊數(shù)據(jù)庫(kù)窗口,在出現(xiàn)的快捷菜單中選擇“新建表”,此時(shí)將打開(kāi)“表結(jié)構(gòu)”對(duì)話框。 在“表結(jié)構(gòu)”對(duì)話框中,“表名稱(chēng)”必須輸入,即數(shù)據(jù)表必須有一個(gè)名字,如“學(xué)生表”。“字段列表”顯示表中的字段名,通過(guò)“添加字段”和“刪除字段”按鈕進(jìn)行字段的添加和刪除。有索引關(guān)鍵字的可向“索引列表”中添加或刪除索引。(3)單擊“添加字段”按鈕打開(kāi)“添加字段”對(duì)話框。在“名稱(chēng)”文本框中輸入一個(gè)字段名,在“類(lèi)型”下拉列表中選擇相應(yīng)的數(shù)據(jù)類(lèi)型,在“大小”框中輸入字段長(zhǎng)度,選擇字段是“固定字段”還是“可變字段”,以及“允許零長(zhǎng)度”和“必要的”。還可以定義驗(yàn)證規(guī)則來(lái)對(duì)取值進(jìn)行限制,可以指定插入記錄時(shí)字段的默認(rèn)值。 一個(gè)字段完成后,單擊“確定”按鈕,該對(duì)話框中的內(nèi)容將變?yōu)榭瞻祝衫^續(xù)添加該表中的其他字段。當(dāng)所有字段添加完畢后,單擊該對(duì)話框中的“關(guān)閉”按鈕,將返回“表結(jié)構(gòu)”對(duì)話框。(2)用鼠標(biāo)右鍵單擊數(shù)據(jù)庫(kù)窗口,在出現(xiàn)的快捷菜單中選擇“新建86(4)單擊“表結(jié)構(gòu)”對(duì)話框中的“添加索引”按鈕,打開(kāi)“添加索引”對(duì)話框。在“名稱(chēng)”框中輸入索引名,每個(gè)索引都要有一個(gè)名稱(chēng)。在“可用字段”中選擇建立索引的字段名。一個(gè)索引可以由一個(gè)字段建立,也可以用多個(gè)字段建立。 如果要使某個(gè)字段或幾個(gè)字段的值不重復(fù),可以建立索引,并使索引為惟一的,否則一定不要選中“惟一的”。(5)建立好“學(xué)生表”的表結(jié)構(gòu),如圖9.6所示。在“表結(jié)構(gòu)”對(duì)話框中,單擊“生成表”按鈕生成表,關(guān)閉表結(jié)構(gòu)對(duì)話框,在數(shù)據(jù)庫(kù)窗口中可以看到生成的表。

VB與數(shù)據(jù)庫(kù)課件87圖9.6“表結(jié)構(gòu)”對(duì)話框圖9.6“表結(jié)構(gòu)”對(duì)話框882.修改數(shù)據(jù)庫(kù)結(jié)構(gòu) 在可視化數(shù)據(jù)管理器中,可以修改數(shù)據(jù)庫(kù)中已經(jīng)建立的數(shù)據(jù)表的結(jié)構(gòu)。操作如下:(1)打開(kāi)要修改的數(shù)據(jù)表的數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)窗口中用鼠標(biāo)右鍵單擊要修改表結(jié)構(gòu)的數(shù)據(jù)表的表名,出現(xiàn)快捷菜單,如圖9.7所示。(2)在快捷菜單中選擇“設(shè)計(jì)”選項(xiàng),將打開(kāi)“表結(jié)構(gòu)”。此時(shí)的“表結(jié)構(gòu)”對(duì)話框與建立表時(shí)的對(duì)話框不完全相同。在該對(duì)話框中可以做的修改工作包括:修改表名稱(chēng)、修改字段名、添加與刪除字段、修改索引、添加與刪除索引、修改驗(yàn)證和默認(rèn)值等。單擊“打印結(jié)構(gòu)”按鈕可打印表結(jié)構(gòu),單擊“關(guān)閉”按鈕完成修改。

2.修改數(shù)據(jù)庫(kù)結(jié)構(gòu)89圖9.7“數(shù)據(jù)庫(kù)窗口”中的快捷菜單圖9.7“數(shù)據(jù)庫(kù)窗口”中的快捷菜單909.2.3數(shù)據(jù)表中數(shù)據(jù)的編輯1.“數(shù)據(jù)管理器”的工具欄 可視化數(shù)據(jù)管理器的工具欄由“記錄集類(lèi)型按鈕組”、“數(shù)據(jù)顯示按鈕組”和“事務(wù)方式按鈕組”三部分組成。(1)記錄集類(lèi)型按鈕組 記錄集類(lèi)型按鈕組為開(kāi)頭的三個(gè)按鈕,它們的說(shuō)明如下:表類(lèi)型記錄集:在以這種方式打開(kāi)數(shù)據(jù)表中數(shù)據(jù)時(shí),所進(jìn)行的增、刪、改等操作都將直接更新數(shù)據(jù)表中的數(shù)據(jù)。動(dòng)態(tài)集類(lèi)型記錄集:以這種方式可以打開(kāi)數(shù)據(jù)表或由查詢(xún)返回的數(shù)據(jù),所進(jìn)行的增、刪、改及查詢(xún)等操作都先在內(nèi)存中進(jìn)行,速度快。快照類(lèi)型記錄集:以這種方式打開(kāi)的數(shù)據(jù)表或由查詢(xún)返回的數(shù)據(jù)僅供讀取而不能更改,適用于進(jìn)行查詢(xún)工作。9.2.3數(shù)據(jù)表中數(shù)據(jù)的編輯91(2)數(shù)據(jù)顯示按鈕組 在記錄集類(lèi)型按鈕組的右邊三個(gè)按鈕構(gòu)成了數(shù)據(jù)顯示按鈕組,它們的說(shuō)明如下:在窗體上使用Data控件:在顯示數(shù)據(jù)表的窗口中使用Data控件來(lái)控制記錄的滾動(dòng)。在窗體上不使用Data控件:在顯示數(shù)據(jù)表的窗口中不使用Data控件,而是使用水平滾動(dòng)條來(lái)控制記錄的滾動(dòng)。在窗體上使用DBGrid控件:在顯示數(shù)據(jù)表的窗口中使用DBGrid控件。(3)事務(wù)方式按鈕組 在數(shù)據(jù)顯示按鈕組的右邊三個(gè)按鈕構(gòu)成了事務(wù)方式按鈕組,它們的說(shuō)明如下:開(kāi)始事務(wù):開(kāi)始將數(shù)據(jù)寫(xiě)入內(nèi)存數(shù)據(jù)表中?;貪L當(dāng)前事務(wù):取消由“開(kāi)始事務(wù)”的寫(xiě)入操作。提交當(dāng)前事務(wù):確認(rèn)數(shù)據(jù)寫(xiě)入的操作,將數(shù)據(jù)表數(shù)據(jù)更新,原有數(shù)據(jù)將不能恢復(fù)。(2)數(shù)據(jù)顯示按鈕組922.數(shù)據(jù)記錄的輸入、修改與刪除 在“數(shù)據(jù)管理器”的工具欄中選擇“表類(lèi)型記錄集”、“在窗體上使用Data控件”和“開(kāi)始事務(wù)”選項(xiàng),然后在如圖9.4所示的快捷菜單中選擇“打開(kāi)”選項(xiàng),即可打開(kāi)數(shù)據(jù)表記錄處理窗口,如圖9.8所示。 在該窗口中有6個(gè)按鈕用于記錄操作,它們的作用分別為:添加/取消:向表中添加新記錄或取消添加的記錄。更新:保存窗口中的當(dāng)前記錄。刪除:刪除窗口中的當(dāng)前記錄。查找:根據(jù)指定條件查找滿足條件的記錄。刷新:用于記錄刷新,這僅對(duì)多用戶應(yīng)用程序才是需要的。關(guān)閉:關(guān)閉表處理窗口。2.數(shù)據(jù)記錄的輸入、修改與刪除93圖9.8數(shù)據(jù)記錄處理窗口圖9.8數(shù)據(jù)記錄處理窗口949.2.4使用“數(shù)據(jù)窗體設(shè)計(jì)器” “數(shù)據(jù)窗體設(shè)計(jì)器”可以創(chuàng)建數(shù)據(jù)窗體,并把它們添加到當(dāng)前的VB工程中。使用這個(gè)工具,不必編寫(xiě)任何代碼,就能創(chuàng)建用于瀏覽、修改和查詢(xún)數(shù)據(jù)的應(yīng)用程序。“數(shù)據(jù)窗體設(shè)計(jì)器”菜單項(xiàng)在“實(shí)用程序”菜單中,只有打開(kāi)一個(gè)數(shù)據(jù)庫(kù)后,該菜單項(xiàng)才有效。數(shù)據(jù)窗體設(shè)計(jì)器的使用步驟如下:(1)首先執(zhí)行“文件”菜單中的“打開(kāi)數(shù)據(jù)庫(kù)”菜單項(xiàng),打開(kāi)前面建立的“student.MDB”數(shù)據(jù)庫(kù),這時(shí)在“實(shí)用程序”菜單中的“數(shù)據(jù)窗體設(shè)計(jì)器”菜單項(xiàng)變?yōu)榭捎玫摹?.2.4使用“數(shù)據(jù)窗體設(shè)計(jì)器”95(2)執(zhí)行“實(shí)用程序”菜單中的“數(shù)據(jù)窗體設(shè)計(jì)器”菜單項(xiàng),出現(xiàn)“數(shù)據(jù)窗體設(shè)計(jì)器”對(duì)話框。在“窗體名稱(chēng)(不帶擴(kuò)展名)”框中輸入“stud”,在“記錄源”組合框中選擇“學(xué)生表”,這時(shí)“可用的字段”列表框中列出學(xué)生表的所有字段,單擊“>>”按鈕將其全部移到“包括的字段”列表框中。(3)單擊“生成窗體”按鈕,當(dāng)所有字段消失后,數(shù)據(jù)窗體被加入到當(dāng)前的工程中。(4)單擊“關(guān)閉”按鈕,關(guān)閉“數(shù)據(jù)窗體設(shè)計(jì)器”對(duì)話框。此時(shí)在工程中生成的數(shù)據(jù)窗體如圖9.9所示。以“frmstud”文件名保存該窗體。該窗體如圖9.9所示。

VB與數(shù)據(jù)庫(kù)課件96圖9.9自動(dòng)生成的窗體圖9.9自動(dòng)生成的窗體97 實(shí)際上,該窗體是VB自動(dòng)生成的,其中包括5個(gè)標(biāo)簽(分別為對(duì)應(yīng)字段的字段名)、5個(gè)文本框(分別用于輸入各字段的值)、5個(gè)命令按鈕(標(biāo)題分別為“添加”、“刪除”、“刷新”、“更新”和“關(guān)閉”,對(duì)應(yīng)的命令按鈕名字分別是cmdAdd,cmdDelete,cmdRefresh,cmdUpdate和cmdClose)和一個(gè)Data控件(名字為Data1,Data控件在下節(jié)中介紹)。在這些命令按鈕上分別設(shè)計(jì)以下Click事件過(guò)程:

實(shí)際上,該窗體是VB自動(dòng)生成的,其中包括5個(gè)標(biāo)簽(分別為對(duì)98PrivateSubcmdAdd_Click()Data1.Recordset.AddNewEndSubPrivateSubcmdDelete_Click()'如果刪除記錄集的最后一條記錄'記錄或記錄集中唯一的記錄Data1.Recordset.DeleteData1.Recordset.MoveNextEndSubPrivateSubcmdRefresh_Click()'這僅對(duì)多用戶應(yīng)用程序才是需要的Data1.RefreshEndSubPrivateSubcmdUpdate_Click()Data1.UpdateRecordData1.Recordset.Bookmark=Data1.Recordset.LastModifiedEndSubPrivateSubcmdClose_Click()UnloadMeEndSubPrivateSubcmdAdd_Click()99(5)單擊“工程”菜單中的“工程1屬性”菜單項(xiàng),出現(xiàn)“工程屬性”對(duì)話框。在“啟動(dòng)對(duì)象”組合框中選擇“frmstud”,然后運(yùn)行工程。這時(shí)窗體如圖9.10所示,可以通過(guò)命令按鈕執(zhí)行相應(yīng)的數(shù)據(jù)表操作。圖9.10運(yùn)行后的數(shù)據(jù)窗體(5)單擊“工程”菜單中的“工程1屬性”菜單項(xiàng),出現(xiàn)“工程屬100 我們可以對(duì)生成的窗體進(jìn)行修改,使之更美觀,操作更方便,如圖9.11所示,是對(duì)上面自動(dòng)生成的窗體進(jìn)行修改的結(jié)果,其中將“性別”文本框和“民族”文本框改為組合框,便于數(shù)據(jù)輸入。圖9.11改進(jìn)后的數(shù)據(jù)窗體 我們可以對(duì)生成的窗體進(jìn)行修改,使之更美觀,操作更方便,如圖1019.3數(shù)據(jù)控件的使用9.3.1數(shù)據(jù)控件常用屬性 1.Connect屬性 Connect屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫(kù)類(lèi)型。 VisualBasic6.0提供了7種可訪問(wèn)的數(shù)據(jù)庫(kù)類(lèi)型,VisualBasic可識(shí)別的數(shù)據(jù)庫(kù)有: 1)MicrosoftAccess的MDB文件(缺省值); 2)BorlanddBASE、MicrosoftFoxpro的DBF文件; 3)BorlandParadox的DB文件;9.3數(shù)據(jù)控件的使用9.3.1數(shù)據(jù)控件常用屬性 1.Co102 4)NovellBtrieve的DDF文件; 5)MicrosoftExcel的XLS文件; 6)Lotus的WKS文件; 7)OpenDataBaseConnectivity(ODBC)數(shù)據(jù)庫(kù)。 2.DatabaseName屬性 DatabaseName屬性指定具體使用數(shù)據(jù)庫(kù)的名稱(chēng),包括所有的路徑名。 如果連接的是單表數(shù)據(jù)庫(kù),則DatabaseName屬性應(yīng)設(shè)置為數(shù)據(jù)庫(kù)文件所在的子目錄名,而具體文件名放在RecordSource屬性中。 如果在“屬性”窗口中單擊DatabaseName屬性右邊的按鈕,會(huì)出現(xiàn)一個(gè)公用對(duì)話框用于選擇相應(yīng)的數(shù)據(jù)庫(kù)。VB與數(shù)據(jù)庫(kù)課件103 例如,下面語(yǔ)句設(shè)置了可訪問(wèn)的數(shù)據(jù)庫(kù)名稱(chēng): 如果連接一個(gè)MicrosoftAccess的數(shù)據(jù)庫(kù)C:\職員檔案.mdb,則Data1.DatabaseName=”C:\職員檔案.mdb”;如果連接一個(gè)Foxpro數(shù)據(jù)庫(kù)C:\yang\職員檔案1.dbf,因?yàn)镕oxpro數(shù)據(jù)庫(kù)只含有一個(gè)表,則Data1.DatabaseName=”C:\yang”,RecordSource=”職員檔案1.dbf”。 如果未寫(xiě)數(shù)據(jù)庫(kù)文件的擴(kuò)展名,則缺省情況下為使用以.mdb為擴(kuò)展名的數(shù)據(jù)庫(kù)文件。VB與數(shù)據(jù)庫(kù)課件104 3)RecordSource屬性 RecordSource屬性確定具體可訪問(wèn)的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對(duì)象Recordset。 4)RecordsetType屬性 RecordsetType屬性確定記錄集類(lèi)型。 5)ReadOnly屬性 在對(duì)數(shù)據(jù)庫(kù)只查看不修改時(shí),通常將ReadOnly屬性設(shè)置為T(mén)rue,而在運(yùn)行時(shí)根據(jù)一定的條件,響應(yīng)一定的指令后,才將它設(shè)置為False。 6)Exclusive屬性 Exclusive屬性值設(shè)置為T(mén)rue時(shí),則在通過(guò)關(guān)閉數(shù)據(jù)庫(kù)撤消這個(gè)設(shè)置前,其他任何人不能對(duì)數(shù)據(jù)庫(kù)訪問(wèn)。這個(gè)屬性的缺省值是False。 3)RecordSource屬性1059.3.2數(shù)據(jù)綁定控件常用屬性 要使文本等控件與數(shù)據(jù)控件捆綁在一起,成為數(shù)據(jù)控件的綁定控件。并且能夠受到數(shù)據(jù)庫(kù)約束,必須在運(yùn)行時(shí)對(duì)這些控件的兩個(gè)屬性進(jìn)行設(shè)置: 1)DataSource屬性 DataSource屬性用來(lái)將一個(gè)有效的數(shù)據(jù)控件與一個(gè)數(shù)據(jù)庫(kù)連接。 2)DataField屬性 DataField屬性設(shè)置數(shù)據(jù)庫(kù)有效的字段與綁定控件建立聯(lián)系。圖9.12綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫(kù)三者的關(guān)系9.3.2數(shù)據(jù)綁定控件常用屬性 要使文本等控件與數(shù)據(jù)控件捆綁1069.3.3使用數(shù)據(jù)控件操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)

象屬

性設(shè)

置dataNameDatabasenameConnectRecordsetsourceData1E:\VB書(shū)\student.mdbaccessstudentTextBoxNamedatafielddatasourcetext1學(xué)號(hào)data1TextBoxNamedatafielddatasourcetext2姓名data1TextBoxNamedatafielddatasourcetext3性別data1TextBoxNamedatafielddatasourcetext4出生年月data1表9.1窗體屬性表 例9.1、設(shè)計(jì)一窗體,在窗體內(nèi)通過(guò)文本框等綁定控件顯示學(xué)生情況表內(nèi)的記錄。9.3.3使用數(shù)據(jù)控件操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象屬性設(shè)107 不需編寫(xiě)任何代碼,就可瀏覽表中的內(nèi)容。單擊運(yùn)行按鈕就可出現(xiàn)如圖9.13所示4個(gè)文本框分別顯示學(xué)號(hào),姓名,性別,和出生年月的內(nèi)容。圖9.13學(xué)生情況表顯示界面 不需編寫(xiě)任何代碼,就可瀏覽表中的內(nèi)容。單擊運(yùn)行按鈕就可出現(xiàn)108 使用數(shù)據(jù)控件對(duì)象的4個(gè)箭頭可遍歷整個(gè)記錄集中的記錄。 通過(guò)DBList控件和DBCombo控件瀏覽學(xué)生情況表內(nèi)的記錄時(shí),DBList控件和DBCombo控件不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開(kāi)發(fā)環(huán)境中選擇“工程”|“部件”菜單命令,并在隨即出現(xiàn)的對(duì)話框中選擇MicrosoftDataBoundListControls選項(xiàng),將它們添加到工具箱中。 使用數(shù)據(jù)控件對(duì)象的4個(gè)箭頭可遍歷整個(gè)記錄集中的記錄。109例9.2:設(shè)計(jì)一個(gè)窗體,通過(guò)數(shù)據(jù)網(wǎng)格控件瀏覽學(xué)生情況表內(nèi)的記錄。參見(jiàn)圖9.14所示。 使用DATA數(shù)據(jù)控件時(shí)可使用MsflexGrid網(wǎng)格控件或VB5.0提供的數(shù)據(jù)網(wǎng)格控件DBGrid。MsflexGrid控件與DBGrid控件都不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開(kāi)發(fā)環(huán)境中選擇“工程”主菜單中的“添加部件”命令,并在隨即出現(xiàn)的對(duì)話框中選擇MicrosoftFlexGridControl6.0或MicrosoftDataBoundControl5.0,將其添加到工具箱中。例9.2:設(shè)計(jì)一個(gè)窗體,通過(guò)數(shù)據(jù)網(wǎng)格控件瀏覽學(xué)生情況表內(nèi)的記110對(duì)

設(shè)

置DataNamedata1Data1.Caption學(xué)生信息DatabasenameD:\Vb書(shū)\student.mdbRecordsource學(xué)生情況圖9.14通過(guò)數(shù)據(jù)網(wǎng)格控件瀏覽學(xué)生情況表表9.2窗體屬性表對(duì)象屬性111 數(shù)據(jù)控件是依靠數(shù)據(jù)對(duì)象來(lái)獲取對(duì)數(shù)據(jù)訪問(wèn)的,與其相關(guān)的數(shù)據(jù)對(duì)象有: 1Database對(duì)象 Database對(duì)象是物理數(shù)據(jù)庫(kù)的邏輯表示。數(shù)據(jù)控件通過(guò)DatabaseName屬性連接到一個(gè)具體的數(shù)據(jù)庫(kù),并通過(guò)它的Database對(duì)象表現(xiàn)出來(lái)。 除了數(shù)據(jù)控件獲取Database對(duì)象之外,還可以在程序中定義Database對(duì)象,并通過(guò)OpenDatabase()函數(shù)實(shí)現(xiàn)對(duì)物理數(shù)據(jù)庫(kù)的連接;或者將數(shù)據(jù)控件的Database對(duì)象傳遞給被定義的Database對(duì)象。9.3.4數(shù)據(jù)控件上的對(duì)象 數(shù)據(jù)控件是依靠數(shù)據(jù)對(duì)象來(lái)獲取對(duì)數(shù)據(jù)訪問(wèn)的,與其相關(guān)的數(shù)據(jù)對(duì)112 例如以下語(yǔ)句: DimDs1AsDatabase‘定義數(shù)據(jù)對(duì)象 DimDs2AsDatabase SetDs1=OpenDatabase(“e:\VB\class.mdb)‘使Ds1獲取物理數(shù)據(jù)庫(kù) SetDs2=Me.data1.Database‘將數(shù)據(jù)控件的Database對(duì)象傳遞給Ds2 例如以下語(yǔ)句:113 2Recordset對(duì)象 Recordset對(duì)象代表一組與數(shù)據(jù)庫(kù)相關(guān)的邏輯記錄集合。它所對(duì)應(yīng)的數(shù)據(jù)來(lái)源可以是數(shù)據(jù)表,也可以是和SQL語(yǔ)言中查詢(xún)語(yǔ)句(SELECT)有關(guān)的查詢(xún)結(jié)果。 Recordset對(duì)象有三種類(lèi)型:

Table類(lèi)型:記錄集為表集,可以顯示、添加、刪除和修改,具有較好的更新性能。 Dynaset類(lèi)型:記錄集為動(dòng)態(tài)集,可以顯示、添加、刪除和修改,并具有較大的操作靈活性。 Snapshot類(lèi)型:記錄集為快照集,只能顯示,具有較好的顯示速度。 2Recordset對(duì)象114 除了Data控件獲取Recordset對(duì)象之外,還可以在程序中定義Recordset對(duì)象,并通過(guò)函數(shù)獲得數(shù)據(jù)。 DimDsAsDatabase‘定義數(shù)據(jù)對(duì)象 DimRsAsRecorderset‘定義記錄對(duì)象 SetDs=OpenDatabase(“e:\VB|class.mdb)‘使Ds獲取物理數(shù)據(jù)庫(kù) SetRs=Me.data1.Database.OpenRecordset(“SElECT*FROM學(xué)生情況”,dbOpenDynaset)‘以動(dòng)態(tài)集方式打開(kāi)從“學(xué)生情況”數(shù)據(jù)表取得的SQL查詢(xún),傳給Rs對(duì)象 SetMe.data1.Recorderset=.Rs 除了Data控件獲取Recordset對(duì)象之外,還可以在程1159.3.5數(shù)據(jù)控件的常用方法 1Refresh方法 如果在設(shè)計(jì)狀態(tài)沒(méi)有為打開(kāi)數(shù)據(jù)控件的有關(guān)屬性全部賦值,或當(dāng)RecordSource在運(yùn)行時(shí)被改變后,必須使用激活數(shù)據(jù)控件的Refresh方法激活這些變化。 2UpdateCountrols方法 UpdateCountrols方法可以將數(shù)據(jù)從數(shù)據(jù)庫(kù)中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。使用UpdateCountrols方法終止用戶對(duì)綁定內(nèi)控件的修改。 3UpdateRecord方法 當(dāng)對(duì)綁定內(nèi)的控件修改后,數(shù)據(jù)控件需要移動(dòng)記錄集的指針才能保存修改,如果使用UpdateRecord方法可強(qiáng)制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中而不再觸發(fā)Validate事件。在代碼中用該方法修改。9.3.5數(shù)據(jù)控件的常用方法 1Refresh方法1169.3.6數(shù)據(jù)控件的事件 1Reposition事件 Reposition事件發(fā)生在一條記錄成為當(dāng)前記錄后。只要改變記錄集的指針使其從一條記錄移到另一條記錄。會(huì)產(chǎn)生Reposition事件,可以在該事件過(guò)程中建立程序,可反映出記錄位置、記錄總數(shù)等。 2Validate事件 當(dāng)要移動(dòng)記錄指針前,修改與刪除記錄前或卸載含有數(shù)據(jù)控件的窗體時(shí)觸發(fā)Validate事件。Validate事件檢查被數(shù)據(jù)控件綁定的控件內(nèi)的數(shù)據(jù)是否發(fā)生變化。它通過(guò)save參數(shù)(True或False)判斷是否有數(shù)據(jù)發(fā)生變化

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論