VB數(shù)據(jù)庫(kù)編程技術(shù)實(shí)例_第1頁(yè)
VB數(shù)據(jù)庫(kù)編程技術(shù)實(shí)例_第2頁(yè)
VB數(shù)據(jù)庫(kù)編程技術(shù)實(shí)例_第3頁(yè)
已閱讀5頁(yè),還剩17頁(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)介

1、VB數(shù)據(jù)庫(kù)編程技術(shù)一ODBC概述在傳統(tǒng)的數(shù)據(jù)庫(kù)管理系統(tǒng)中,每個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)都有自己的應(yīng)用程序開(kāi)發(fā)接口(API),為了解決此問(wèn)題,微軟公司開(kāi)發(fā)了ODBC(OpenDataBaseConnectivity,即開(kāi)放數(shù)據(jù)庫(kù)互連)。ODBC是一套開(kāi)放數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用程序接口規(guī)范,目前它已成為一種工業(yè)標(biāo)準(zhǔn),它提供了統(tǒng)一的數(shù)據(jù)庫(kù)應(yīng)用編程接口(API),為應(yīng)用程序提供了一套高層調(diào)用接口規(guī)范和基于動(dòng)態(tài)連接庫(kù)的運(yùn)行支持環(huán)境。使用ODBC開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用時(shí),應(yīng)用程序調(diào)用的是標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語(yǔ)句,屏蔽了DBMS之間的差異,數(shù)據(jù)庫(kù)底層操作由各個(gè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序完成。因此應(yīng)用程序有很好的適應(yīng)性和可移植性,并且具備

2、了同時(shí)訪問(wèn)多種數(shù)據(jù)庫(kù)管理系統(tǒng)的能力,從而徹底克服了傳統(tǒng)數(shù)據(jù)庫(kù)應(yīng)用程序的缺陷。主要任務(wù)包括:建立與數(shù)據(jù)源的連接;向數(shù)據(jù)源發(fā)送SQL請(qǐng)求;斷開(kāi)與數(shù)據(jù)源的連接數(shù)據(jù)源數(shù)據(jù)源是指任一種可以通過(guò)ODBC連接的數(shù)據(jù)庫(kù)管理系統(tǒng),它包括要訪問(wèn)的數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)的運(yùn)行平臺(tái)。數(shù)據(jù)源名掩蓋了數(shù)據(jù)庫(kù)服務(wù)器或數(shù)據(jù)庫(kù)文件間的差別,通過(guò)定義多個(gè)數(shù)據(jù)源,每個(gè)數(shù)據(jù)源指向一個(gè)服務(wù)器名,就可在應(yīng)用程序中實(shí)現(xiàn)同時(shí)訪問(wèn)多個(gè)DBMS的目的。數(shù)據(jù)源(DataSourceName,簡(jiǎn)稱DSN)是驅(qū)動(dòng)程序與DBS連接的橋梁,數(shù)據(jù)源不是DBS,而是用于表達(dá)一個(gè)ODBC驅(qū)動(dòng)程序和DBMS特殊連接的命名。在連接中,用數(shù)據(jù)源名來(lái)代表用戶名、服務(wù)器名、所連

3、接的數(shù)據(jù)庫(kù)名等,可以將數(shù)據(jù)源名看成是與一個(gè)具體數(shù)據(jù)庫(kù)建立的連接。數(shù)據(jù)源分為以下三類:(1) 用戶數(shù)據(jù)源:用戶創(chuàng)建的數(shù)據(jù)源,稱為用戶數(shù)據(jù)源”。此時(shí)只有創(chuàng)建者才能使用,并且只能在所定義的機(jī)器上運(yùn)行。任何用戶都不能使用其他用戶創(chuàng)建的用戶數(shù)據(jù)源。(2) 系統(tǒng)數(shù)據(jù)源:所有用戶和在WindowsNT下以服務(wù)方式運(yùn)行的應(yīng)用程序均可使用系統(tǒng)數(shù)據(jù)源。文件數(shù)據(jù)源:文件數(shù)據(jù)源是ODBC3.0以上版本增加的一種數(shù)據(jù)源,可用于企業(yè)用戶,ODB®動(dòng)程序也安裝在用戶的計(jì)算機(jī)上。(與機(jī)器無(wú)關(guān)):、SQL語(yǔ)言基礎(chǔ)創(chuàng)建表格SQL語(yǔ)言中的createtable語(yǔ)句被用來(lái)建立新的數(shù)據(jù)庫(kù)表格。Createtable語(yǔ)句的使用

4、格式如下:createtabletablename(column1datatype,column2datatype,column3datatype);如果用戶希望在建立新表格時(shí)規(guī)定列的限制條件,可以使用可選的條件選項(xiàng):createtabletablename(column1datatypeconstraint,column2datatypeconstraint,column3datatypeconstraint);舉例如下:createtableemployee(firstnamevarchar(15),lastnamevarchar(20),agenumber(3),addressvarch

5、ar(30),cityvarchar(20);簡(jiǎn)單來(lái)說(shuō),創(chuàng)建新表格時(shí),在關(guān)鍵詞createtable后面加入所要建立的表格的名稱,然后在括號(hào)內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的SQL語(yǔ)句在結(jié)尾處都要使用“;”符號(hào)。使用SQL語(yǔ)句創(chuàng)建的數(shù)據(jù)庫(kù)表格和表格中列的名稱必須以字母開(kāi)頭,后面可以使用字母,數(shù)字或下劃線,名稱的長(zhǎng)度不能超過(guò)30個(gè)字符。注意,用戶在選擇表格名稱時(shí)不要使用SQL語(yǔ)言中的保留關(guān)鍵詞,如select,create,insert等,作為表格或列的名稱。數(shù)據(jù)類型用來(lái)設(shè)定某一個(gè)具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采用varchar或char的數(shù)據(jù)類型,而不

6、能使用number的數(shù)據(jù)類型。SQL語(yǔ)言中較為常用的數(shù)據(jù)類型為:char(size):固定長(zhǎng)度字符串,其中括號(hào)中的size用來(lái)設(shè)定字符串的最大長(zhǎng)度。Char類型的最大長(zhǎng)度為255字節(jié)。varchar(size):可變長(zhǎng)度字符串,最大長(zhǎng)度由size設(shè)定。number(size):數(shù)字類型,其中數(shù)字的最大位數(shù)由size設(shè)定。Date:日期類型。number(size,d):數(shù)字類型,size決定該數(shù)字總的最大位數(shù),而d則用于設(shè)定該數(shù)字在小數(shù)點(diǎn)后的位數(shù)。最后,在創(chuàng)建新表格時(shí)需要注意的一點(diǎn)就是表格中列的限制條件。所謂限制條件就是當(dāng)向特定列輸入數(shù)據(jù)時(shí)所必須遵守的規(guī)則。例如,unique這一限制條件要求某

7、一列中不能存在兩個(gè)值相同的記錄,所有記錄的值都必須是唯一的。除unique之夕卜,較為常用的列的限制條件還包括notnull和primarykey等。Notnull用來(lái)規(guī)定表格中某一列的值不能為空。Primarykey則為表格中的所有記錄規(guī)定了唯一的標(biāo)識(shí)符。查詢簡(jiǎn)單的SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說(shuō)明所查詢列、查詢的表或視圖、以及搜索條件等。完整結(jié)構(gòu):SelectAll/Distinct<目標(biāo)表達(dá)式><目標(biāo)表達(dá)式>-From表名>,表名>-Where條件表達(dá)式>Groupby列名1>Having條件表達(dá)式>

8、Orderby列名2>Asc/DescGroupby:按列名1的值進(jìn)行分組,屬性值相等的為一個(gè)組,如果帶Having短句,表示只有滿足指定條件的才輸出。例如,下面的語(yǔ)句查詢testtable表中姓名為張三"的nickname字段和email字段。SELECTnickname,emailFROMtesttableWHEREname='張三'選擇列表選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號(hào)、表達(dá)式、變量(包括局部變量和全局變量)等構(gòu)成。1、選擇所有列例如,下面語(yǔ)句顯示testtable表中所有列的數(shù)據(jù):SELECT*FROMtest

9、table2、選擇部分列并指定它們的顯示次序查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:SELECTnickname,emailFROMtesttable3、更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)題=列名列名列標(biāo)題如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語(yǔ)句使用漢字顯示列標(biāo)題:SELECT昵稱=nickname,電子郵件=emailFROMtesttable4、刪除重復(fù)行SELECT語(yǔ)句中使用ALL或DISTINCT選項(xiàng)來(lái)顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為ALL。使用DISTINCT選項(xiàng)時(shí),對(duì)于所有

10、重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用TOPnPERCENT選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOPn說(shuō)明返回n行,而TOPnPERCENT時(shí),說(shuō)明n是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECTTOP2*FROMtesttableSELECTTOP20PERCENT*FROMtesttable(二)FROM子句FROM子句指定SELECT語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,它們之間用逗號(hào)分隔。在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。例如

11、在usertable和citytable表中同時(shí)存在cityid列,在查詢兩個(gè)表中的cityid時(shí)應(yīng)使用下面語(yǔ)句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名as別名表名別名(二)FROM子句FROM子句指定SELECT語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,它們之間用逗號(hào)分隔。在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)

12、象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢兩個(gè)表中的cityid時(shí)應(yīng)使用下面語(yǔ)句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名as別名表名別名例如上面語(yǔ)句可用表的別名格式表示為:SELECTusername,b.cityidFROMusertablea,citytablebWHEREa.cityid=b.cityidSELE

13、CT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語(yǔ)句所返回的結(jié)果集合中查詢數(shù)據(jù)。例如:SELECTa.au_fname+a.au_lnameFROMauthorsa,titleauthorta(SELECTtitle_id,titleFROMtitlesWHEREytd_sales10000)AStWHEREa.au_id=ta.au_idANDta.title_id=t.title_id此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再?gòu)闹袡z索數(shù)據(jù)。(三)使用WHERE子句設(shè)置查詢條件WHERE子句設(shè)置查詢條件,過(guò)濾掉不需要的數(shù)據(jù)行。例如下面語(yǔ)句查詢年齡大于20的數(shù)據(jù):SELECT*

14、FROMusertableWHEREage20WHERE子句可包括各種條件運(yùn)算符:比較運(yùn)算符(大小比較):、=、=、=、!、!范圍運(yùn)算符(表達(dá)式值是否在指定的范圍):BETWEENANSNOTBETWEEN-AND列表運(yùn)算符(判斷表達(dá)式是否為列表中的指定項(xiàng)):IN(項(xiàng)1,項(xiàng)2)NOTIN(項(xiàng)1,項(xiàng)2)模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOTLIKE空值判斷符(判斷表達(dá)式是否為空):ISNULL、NOTISNULL邏輯運(yùn)算符(用于多條件的邏輯連接):NOT、AND、OR1、范圍運(yùn)算符例:ageBETWEEN10AND30相當(dāng)于age=10ANDage=302、列表運(yùn)算符

15、例:countryIN('Germany','China')3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har、varchar、text、ntext、datetime和smalldatetime等類型查詢??墒褂靡韵峦ㄅ渥址喊俜痔?hào):可匹配任意類型和長(zhǎng)度的字符,如果是中文,請(qǐng)使用兩個(gè)百分號(hào)即%。下劃線:匹配單個(gè)任意字符,它常用來(lái)限制表達(dá)式的字符長(zhǎng)度。方括號(hào):指定一個(gè)字符、字符串或范圍,要求所匹配對(duì)象為它們中的任一個(gè)。人:其取值也相同,但它要求所匹配對(duì)象為指定字符以外的任一個(gè)字符。例如:限制以Publishing結(jié)尾,使用LI

16、KE'%Publishing'限制以A開(kāi)頭:LIKE'A%'限制以A開(kāi)頭外:LIKE'AA%'4、空值判斷符例WHEREageISNULL5、邏輯運(yùn)算符:優(yōu)先級(jí)為NOT、AND、OR查詢結(jié)果排序使用ORDERBY子句對(duì)查詢返回的結(jié)果按一列或多列排序。ORDERBY子句的語(yǔ)法格式為:ORDERBYcolumn_nameASC|DESC,-n其中ASC表示升序,為默認(rèn)值,DESC為降序。ORDERBY不能按ntext、text和image數(shù)據(jù)類型進(jìn)行排序。例如:SELECT*FROMusertableORDERBYagedesc,useridASC另

17、外,可以根據(jù)表達(dá)式進(jìn)行排序。向表格中插入數(shù)據(jù)SQL語(yǔ)言使用insert語(yǔ)句向數(shù)據(jù)庫(kù)表格中插入或添加新的數(shù)據(jù)行。Insert語(yǔ)句的使用格式如下:insertintotablename(first_column,.last_column)values(first_value,.last_value);例如:insertintoemployee(firstname,lastname,age,address,city)values(Li',Ming',45,No.77ChanganRoad',Beijing");簡(jiǎn)單來(lái)說(shuō),當(dāng)向數(shù)據(jù)庫(kù)表格中添加新記錄時(shí),在關(guān)鍵詞inse

18、rtinto后面輸入所要添加的表格名稱,然后在括號(hào)中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞values的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。更新記錄SQL語(yǔ)言使用update語(yǔ)句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。Update語(yǔ)句的格式為:updatetablenamesetcolumnname=newvalue,nextcolumn=newvalue2.wherecolumnnameOPERATORvalueand|orcolumnOPERATORvalue;例如:updateemployeesetage=age+1wherefirst_name=Mary'an

19、dlast_name=Williams'使用update語(yǔ)句時(shí),關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的where條件從句。刪除記錄SQL語(yǔ)言使用delete語(yǔ)句刪除數(shù)據(jù)庫(kù)表格中的行或記錄。Delete語(yǔ)句的格式為:deletefromtablenamewherecolumnnameOPERATORvalueand|orcolumnOPERATORvalue;例如:deletefromemployeewherelastname=May;簡(jiǎn)單來(lái)說(shuō),當(dāng)需要?jiǎng)h除某一行或某個(gè)記錄時(shí),在deletefrom關(guān)鍵詞之后輸入表格名稱,然后在where從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用del

20、ete語(yǔ)句時(shí)不設(shè)定where從句,則表格中的所有記錄將全部被刪除。刪除數(shù)據(jù)庫(kù)表格在SQL語(yǔ)言中使用droptable命令刪除某個(gè)表格以及該表格中的所有記錄。Droptable命令的使用格式為:droptabletablename;例如:droptableemployee;如果用戶希望將某個(gè)數(shù)據(jù)庫(kù)表格完全刪除,只需要在droptable命令后輸入希望刪除的表格名稱即可。Droptable命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會(huì)改變。而使用droptable命令則會(huì)將整個(gè)數(shù)據(jù)庫(kù)表格的所有信息全部刪除。1.1 三、數(shù)據(jù)控件1、ADO數(shù)據(jù)控

21、件ADO對(duì)象模型ADO(ActiveXDataObject)數(shù)據(jù)訪問(wèn)接口是Microsoft處理數(shù)據(jù)庫(kù)信息的最新技術(shù)。它是一種ActiveX對(duì)象,采用了被稱為OLEDB的數(shù)據(jù)訪問(wèn)模式,是數(shù)據(jù)訪問(wèn)對(duì)象DAO、遠(yuǎn)程數(shù)據(jù)對(duì)象RDO和開(kāi)放數(shù)據(jù)庫(kù)互連ODBC三種方式的擴(kuò)展。ADO對(duì)象模型定義了一個(gè)可編程的分層對(duì)象集合,主要由三個(gè)對(duì)象成員Connection、Command和Recordset對(duì)象,以及幾個(gè)集合對(duì)象Errors、Parameters和Fields等所組成。圖9.13示意了這些對(duì)象之間的關(guān)系。表9.6是對(duì)這些對(duì)象的分工描述。圖9.13ADO對(duì)象模型表9.6ADO對(duì)象描述對(duì)象名描述Connec

22、tion連接數(shù)據(jù)來(lái)源Command從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息Recordset所獲得的一組記錄組成的記錄集Error在訪問(wèn)數(shù)據(jù)時(shí),由數(shù)據(jù)源所返回的錯(cuò)誤信息Parameter與命令對(duì)象有關(guān)的參數(shù)Field包含了記錄集中某個(gè)字段的信息要想在程序中使用ADO對(duì)象,必須先為當(dāng)前工程引用ADO的對(duì)象庫(kù)。引用方式是執(zhí)行工程”菜單的引用"命令,啟動(dòng)引用對(duì)話框,在清單中選取aMicrosoftActiveXDataObjects2.0Library選項(xiàng)。1.2使用ADO數(shù)據(jù)控件在使用ADO數(shù)據(jù)控件前,必須先通過(guò)攵程|部件”菜單命令選擇"MicrosoftADODataControl6.

23、0(OLEDB)”選項(xiàng),將ADO數(shù)據(jù)控件添加到工具箱。ADO數(shù)據(jù)控件與VisualBasic的內(nèi)部Data控件很相似,它允許使用ADO數(shù)據(jù)控件的基本屬性快速地創(chuàng)建與數(shù)據(jù)庫(kù)的連接。1.ADCa據(jù)控件的基本屬性(1) ConnectionString屬性ADO控件沒(méi)有DatabaseName屬性,它使用Connectionstring屬性與數(shù)據(jù)庫(kù)建立連接。該屬性包含了用于與數(shù)據(jù)源建立連接的相關(guān)信息,Connectionstring屬性帶有4個(gè)參數(shù),如表9.7所示。(2) RecordSource屬性RecordSource確定具體可訪問(wèn)的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對(duì)象Recordset。該屬性值可以

24、是數(shù)據(jù)庫(kù)中的單個(gè)表名,一個(gè)存儲(chǔ)查詢,也可以是使用SQL查詢語(yǔ)言的一個(gè)查詢字符串。表9.7Connectionstring屬性參數(shù)參數(shù)描述Provide指定數(shù)據(jù)源的名稱指定數(shù)據(jù)源所對(duì)應(yīng)的文件名RemoteProvide在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開(kāi)一個(gè)客戶端時(shí)所用的數(shù)據(jù)源名稱RemoteServer在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開(kāi)一個(gè)主機(jī)端時(shí)所用的數(shù)據(jù)源名稱(3) ConnectionTimeout屬性用于數(shù)據(jù)連接的超時(shí)設(shè)置,若在指定時(shí)間內(nèi)連接不成功顯示超時(shí)信息。(4) MaxRecords屬性定義從一個(gè)查詢中最多能返回的記錄數(shù)。2. ADO數(shù)據(jù)控件的方法和事件ADO數(shù)據(jù)控件的方法和事件與Data控件的方法和事件完全

25、一樣。3.設(shè)置ADO數(shù)據(jù)控件的屬性下面通過(guò)使用ADO數(shù)據(jù)控件連接Student.mdb數(shù)據(jù)庫(kù)來(lái)說(shuō)明ADO數(shù)據(jù)控件屬性的設(shè)置。步驟1:在窗體上放置ADO數(shù)據(jù)控件,控件名采用默認(rèn)名“Adodcl?!辈襟E2:單擊ADO控件屬性窗口中的ConnectionString屬性右邊的“'按鈕,彈出屬性頁(yè)”對(duì)話框。在該對(duì)話框中允許通過(guò)三種不同的方式連接數(shù)據(jù)源:使用連接字符串”只需要單擊生成”按鈕,通過(guò)選項(xiàng)設(shè)置自動(dòng)產(chǎn)生連接字符串。使用DataLink文件”表示通過(guò)一個(gè)連接文件來(lái)完成。使用ODBC數(shù)據(jù)資源名稱”可以通過(guò)下拉式列表框,選擇某個(gè)創(chuàng)建好的數(shù)據(jù)源名稱(DSN),作為數(shù)據(jù)來(lái)源對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行控制。步

26、驟3:采用使用連接字符串”方式連接數(shù)據(jù)源。單擊生成”按鈕,打開(kāi)數(shù)據(jù)鏈接屬性”對(duì)話框。在提供者"選項(xiàng)卡內(nèi)選擇一個(gè)合適的OLEDB數(shù)據(jù)源,Student.mdb是Access數(shù)據(jù)庫(kù),選擇aMicrosoftJet3.51OLEDBProvider選項(xiàng)。然后單擊下一步”按鈕或打開(kāi)連接”選項(xiàng)卡,在對(duì)話框內(nèi)指定數(shù)據(jù)庫(kù)文件,這里為Student.mdbo為保證連接有效,可單擊連接”選項(xiàng)卡右下方的測(cè)試連接”按鈕,如果測(cè)試成功則關(guān)閉ConnectionString屬性頁(yè)。步驟4:?jiǎn)螕鬉DO控件屬性窗口中的RecordSource屬性右邊的“按鈕,彈出記錄源屬性頁(yè)對(duì)話框。在命令類型”下拉式列表框中選擇

27、"2adCmdTable選項(xiàng),在表或存儲(chǔ)過(guò)程名稱”下拉式列表框中選擇Student.mdb數(shù)據(jù)庫(kù)中的基本情況”表,關(guān)閉記錄源屬性頁(yè)。此時(shí),已完成了ADO數(shù)據(jù)控件的連接工作。由于ADO數(shù)據(jù)控件是一個(gè)ActiveX控件,也可以用鼠標(biāo)右鍵單擊ADO數(shù)據(jù)控件,在彈出的快捷菜單中選擇“ADODC屬性”菜單命令,打開(kāi)ADO數(shù)據(jù)控件屬性頁(yè)對(duì)話框,一次完成步驟1步驟4的全部設(shè)置。1.3ADO數(shù)據(jù)控件上新增綁定控件的使用隨著ADO對(duì)象模型的引入,VisualBasic6.0除了保留以往的一些綁定控件外,又提供了一些新的成員來(lái)連接不同數(shù)據(jù)類型的數(shù)據(jù)。這些新成員主要有DataGrid、DataCombo、

28、DataList>DataReport、MSHFlexGrid、MSChart控件和MonthView等控件。這些新增綁定控件必須使用ADO數(shù)據(jù)控件進(jìn)行綁定。VisualBasic6.0在綁定控件上不僅對(duì)DataSource和DataField屬性在連接功能上作了改進(jìn),又增加了DataMember與DataFormat屬性使數(shù)據(jù)訪問(wèn)的隊(duì)列更加完整。DataMember屬性允許處理多個(gè)數(shù)據(jù)集,DataFormat屬性用于指定數(shù)據(jù)內(nèi)容的顯示格式。例9.6使用ADO數(shù)據(jù)控件和DataGrid數(shù)據(jù)網(wǎng)格控件瀏覽數(shù)據(jù)庫(kù)Student.mdb,并使之具有編輯功能。在窗體上放置ADO數(shù)據(jù)控件,并按前面介

29、紹的ADO數(shù)據(jù)控件屬性設(shè)置過(guò)程連接數(shù)據(jù)庫(kù)Student.mdb中的基本情況表。DataGrid控件允許用戶同時(shí)瀏覽或修改多個(gè)記錄的數(shù)據(jù)。在使用DataGrid控件前也必須先通過(guò)工程|部件”菜單命令選擇“MicrosoftDataGridControl6.0(OLEDB)”選項(xiàng),將DataGrid控件添加到工具箱,再將DataGrid控件放置到窗體上。設(shè)置DataGrid網(wǎng)格控件的DataSource屬性為Adodc1,就可將DataGrid1綁定到數(shù)據(jù)控件Adodc1上。顯示在DataGrid網(wǎng)格內(nèi)的記錄集,可以通過(guò)DataGrid控件的AllowAddNew、AllowDelete和Allo

30、wUpdate屬性設(shè)置控制增,刪、改操作。如果要改變DataGrid網(wǎng)格上顯示的字段,可用鼠標(biāo)右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇檢索字段”選項(xiàng)。VisualBasic提示是否替換現(xiàn)有的網(wǎng)格布局,單擊是”按鈕就可將表中的字段裝載到DataGrid控件中。再次用鼠標(biāo)右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇編輯”選項(xiàng),進(jìn)入數(shù)據(jù)網(wǎng)格字段布局的編輯狀態(tài),此時(shí),當(dāng)鼠標(biāo)指在字段名上時(shí),鼠標(biāo)指針變成黑色向下箭頭。用鼠標(biāo)右鍵單擊需要修改的字段名,在彈出的快捷菜單中選擇刪除”選項(xiàng),就可從DataGrid控件中刪除該字段,也可選擇屬性”選項(xiàng)修改字段的顯示寬度或字段標(biāo)題。圖9.14所示為

31、具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定。標(biāo)有號(hào)的記錄行表示允許增加新記錄。圖9.14具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定2、Data控件Data控件是VisualBasic訪問(wèn)數(shù)據(jù)庫(kù)的一種利器,它能夠利用三種Recordset對(duì)象來(lái)訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)控件提供有限的不需編程而能訪問(wèn)現(xiàn)存數(shù)據(jù)庫(kù)的功能,允許將VisualBasic的窗體與數(shù)據(jù)庫(kù)方便地進(jìn)行連接。要利用數(shù)據(jù)控件返回?cái)?shù)據(jù)庫(kù)中記錄的集合,應(yīng)先在窗體上畫(huà)出控件,再通過(guò)它的三個(gè)基本屬性Connect、DatabaseName和RecordSource設(shè)置要訪問(wèn)的數(shù)據(jù)資源。2.1 Data控件屬性1. Connect屬性Connect屬性指定數(shù)據(jù)控件

32、所要連接的數(shù)據(jù)庫(kù)類型,VisualBasic默認(rèn)的數(shù)據(jù)庫(kù)是Access的MDB文件,此外,也可連接DBF、XLS、ODBC等類型的數(shù)據(jù)庫(kù)。2. DatabaseName屬性DatabaseName屬性指定具體使用的數(shù)據(jù)庫(kù)文件名,包括所有的路徑名。如果連接的是單表數(shù)據(jù)庫(kù),則DatabaseName屬性應(yīng)設(shè)置為數(shù)據(jù)庫(kù)文件所在的子目錄名,而具體文件名放在RecordSource屬性中。例如,要連接一個(gè)MicrosoftAccess的數(shù)據(jù)庫(kù)C:Student.mdb,則設(shè)置DatabaseName'CStudent.mdb",Access數(shù)據(jù)庫(kù)的所有表都包含在一個(gè)MDB文件中。如果連

33、接一個(gè)FoxPro數(shù)據(jù)庫(kù)如C:VB6stu_fox.dbf,則DatabaseName=C:VB6,RecordSource="stu_fox.dbf,"stu_fox數(shù)據(jù)庫(kù)只含有一個(gè)表。3. RecordSource屬性RecordSource確定具體可訪問(wèn)的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對(duì)象Recordset。該屬性值可以是數(shù)據(jù)庫(kù)中的單個(gè)表名,一個(gè)存儲(chǔ)查詢,也可以是使用SQL查詢語(yǔ)言的一個(gè)查詢字符串。例如,要指定Student.mdb數(shù)據(jù)庫(kù)中的基本情況表,則RecordSource="基本情況”。而RecordSource="SelecFrom基本情況Wh

34、ere專業(yè)='物理,”則表示要訪問(wèn)基本情況表中所有物理系學(xué)生的數(shù)據(jù)。4. RecordType屬性RecordType屬性確定記錄集類型。5. EofAction和BofAction屬性當(dāng)記錄指針指向Recordset對(duì)象的開(kāi)始(第一個(gè)記錄前)或結(jié)束(最后一個(gè)記錄后)時(shí),數(shù)據(jù)控件的EofAction和BofAction屬性的設(shè)置或返回值決定了數(shù)據(jù)控件要采取的操作。屬性的取值如表9.1所示。表9.1EofAction和BofAction屬性屬性取值操作BofAction0控件重定位到第一個(gè)記錄1移過(guò)記錄集開(kāi)始位,定位到一個(gè)無(wú)效記錄,觸發(fā)數(shù)據(jù)控件對(duì)第一個(gè)記錄的無(wú)效事件ValidateEof

35、Action0控件重定位到最后一個(gè)記錄1移過(guò)記錄集結(jié)束位,定位到一個(gè)無(wú)效記錄,觸發(fā)數(shù)據(jù)控件對(duì)最后一個(gè)記錄的無(wú)效事件Validate2向記錄集加入新的空記錄,可以對(duì)新記錄進(jìn)行編輯,移動(dòng)記錄指針,新記錄寫(xiě)入數(shù)據(jù)庫(kù)在VisualBasic中,數(shù)據(jù)控件本身不能直接顯示記錄集中的數(shù)據(jù),必須通過(guò)能與它綁定的控件來(lái)實(shí)現(xiàn)??膳c數(shù)據(jù)控件綁定的控件對(duì)象有文本框、標(biāo)簽、圖像框、圖形框、列表框、組合框、復(fù)選框、網(wǎng)格、DB列表框、DB組合框、DB網(wǎng)格和OLE容器等控件。要使綁定控件能被數(shù)據(jù)庫(kù)約束,必需在設(shè)計(jì)或運(yùn)行時(shí)對(duì)這些控件的兩個(gè)屬性進(jìn)行設(shè)置:(1) DataSource屬性DataSource屬性通過(guò)指定一個(gè)有效的數(shù)

36、據(jù)控件連接到一個(gè)數(shù)據(jù)庫(kù)上。(2) DataField屬性DataField屬性設(shè)置數(shù)據(jù)庫(kù)有效的字段與綁定控件建立聯(lián)系。綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫(kù)三者的關(guān)系如圖9.7所示。綁定控件圖9.7綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫(kù)三者的關(guān)系當(dāng)上述控件與數(shù)據(jù)控件綁定后,VisualBasic將當(dāng)前記錄的字段值賦給控件。如果修改了綁定控件內(nèi)的數(shù)據(jù),只要移動(dòng)記錄指針,修改后的數(shù)據(jù)會(huì)自動(dòng)寫(xiě)入數(shù)據(jù)庫(kù)。數(shù)據(jù)控件在裝入數(shù)據(jù)庫(kù)時(shí),它把記錄集的第一個(gè)記錄作為當(dāng)前記錄。當(dāng)數(shù)據(jù)控件的BofAction屬性值設(shè)置為2時(shí),當(dāng)記錄指針移過(guò)記錄集結(jié)束位,數(shù)據(jù)控件會(huì)自動(dòng)向記錄集加入新的空記錄。例9.1建立student.mdb數(shù)據(jù)庫(kù),它包含兩

37、個(gè)表:基本情況"表和學(xué)生成績(jī)表”。參見(jiàn)表9.2和表9.3。表9.2學(xué)生基本情況表結(jié)構(gòu)字段名類型寬度學(xué)號(hào)Text6姓名Text10性別Text2專業(yè)Text10出生年月Date8照片Binary0表9.3學(xué)生成績(jī)表結(jié)構(gòu)字段名類型寬度學(xué)號(hào)Text6課程Text10成績(jī)Long4學(xué)期Text2用可視化數(shù)據(jù)管理器建立以上設(shè)計(jì)的數(shù)據(jù)庫(kù)及其表,表中數(shù)據(jù)可自行錄入。例9.2設(shè)計(jì)一個(gè)窗體用以顯示建立的student.mdb數(shù)據(jù)庫(kù)中基本情況表的內(nèi)容?;厩闆r表包含了6個(gè)字段,故需要用6個(gè)綁定控件與之對(duì)應(yīng)。這里用一個(gè)圖形框顯示照片和5個(gè)文本框顯示學(xué)號(hào)、姓名等數(shù)據(jù)。本例中不需要編寫(xiě)任何代碼,具體操作步驟如

38、下:參考如圖9.8所示窗體,在窗體上放置1個(gè)數(shù)據(jù)控件,一個(gè)圖形框、5個(gè)文本框和5個(gè)標(biāo)簽控件。5個(gè)標(biāo)簽控件分別給出相關(guān)的提示說(shuō)明。圖9.8顯示Student.mdb基本情況表的數(shù)據(jù)(1) 將數(shù)據(jù)控件Datal的Connect屬性指定為Access類型,DatabaseName屬性連接數(shù)據(jù)庫(kù)Student.mdb,RecordSource屬性設(shè)置為基本情況"表。圖形框和5個(gè)文本框控件Text1Text5的DataSource屬性都設(shè)置成Data1。通過(guò)單擊這些綁定控件的DataField屬性上的“'按鈕,將下拉出基本情況表所含的全部字段,分別選擇與其對(duì)應(yīng)的字段照片、學(xué)號(hào)、姓名、性

39、別、專業(yè)和出生年月,使之建立約束關(guān)系。運(yùn)行該工程即可出現(xiàn)圖9.8所示效果。5個(gè)文本框分別顯示基本情況表內(nèi)的字段:學(xué)號(hào)、姓名、性別、專業(yè)和出生年月的內(nèi)容,圖形框顯示每個(gè)學(xué)生的照片。使用數(shù)據(jù)控件對(duì)象的4個(gè)箭頭按鈕可遍歷整個(gè)記錄集中的記錄。單擊最左邊的按鈕顯示第l條記錄;單擊其旁邊的按鈕顯示上一條記錄;單擊最右邊的按鈕顯示最后一條記錄;單擊其旁邊的按鈕顯示下一條記錄。數(shù)據(jù)控件除了可以瀏覽Recordset對(duì)象中的記錄外,同時(shí)還可以編輯數(shù)據(jù)。如果改變了某個(gè)字段的值,只要移動(dòng)記錄,這時(shí)所作的改變存入數(shù)據(jù)庫(kù)中。VisualBasic6.0提供了幾個(gè)比較復(fù)雜的網(wǎng)格控件,幾乎不用編寫(xiě)代碼就可以實(shí)現(xiàn)多條記錄數(shù)據(jù)

40、顯示。當(dāng)把數(shù)據(jù)網(wǎng)格控件的DataSource屬性設(shè)置為一個(gè)Data控件時(shí),網(wǎng)格控件會(huì)被自動(dòng)地填充,并且其列標(biāo)題會(huì)用Data控件的記錄集里的數(shù)據(jù)自動(dòng)地設(shè)置。2.2 data控件與MsFlexGrid控件結(jié)合顯示數(shù)據(jù)庫(kù)中信息例9.3用數(shù)據(jù)網(wǎng)格控件MsFlexGrid顯示Student.mdb數(shù)據(jù)庫(kù)中基本情況表的內(nèi)容。MsFlexGrid控件不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開(kāi)發(fā)環(huán)境中選擇工程|部件”菜單命令,并在隨即出現(xiàn)的對(duì)話框中選擇"MicrosoftFlexGridControl6.0選項(xiàng),將其添加到工具箱中。本例所用控件的屬性設(shè)置如表9.4所示。請(qǐng)讀者自行比較不可

41、卷動(dòng)列屬性FixedCols=0與FixedCols=1的區(qū)別。Form啟動(dòng)后自動(dòng)顯示如圖9.9所示窗口。表9.4控件屬性默認(rèn)控件名其它屬性設(shè)置Data1DatabaseName="cstudent.mdb”RecordsetType=0RecordSource=基本情況”MSFlexGrid1DataSource=Data1FixCols=0Jn|2d學(xué)號(hào)性別出生年月010001李姓狒1983-12-23010010010014丁保民19337-14格II格蜉定到數(shù)搖庠020011林敏紅女機(jī)電1993-10-111nninn?*iqno-1-R1982-12-30020003n&#

42、177;n圖9.9使用數(shù)據(jù)網(wǎng)格控件2.3數(shù)據(jù)控件的常用方法數(shù)據(jù)控件的內(nèi)置功能很多,可以在代碼中用數(shù)據(jù)控件的方法訪問(wèn)這些屬性。1. Refresh方法如果在設(shè)計(jì)狀態(tài)沒(méi)有為打開(kāi)數(shù)據(jù)庫(kù)控件的有關(guān)屬性全部賦值,或當(dāng)RecordSource在運(yùn)行時(shí)被改變后,必須使用數(shù)據(jù)控件的Refresh方法激活這些變化。在多用戶環(huán)境下,當(dāng)其他用戶同時(shí)訪問(wèn)同一數(shù)據(jù)庫(kù)和表時(shí),Refresh方法將使各用戶對(duì)數(shù)據(jù)庫(kù)的操作有效。例如:將例9.2的設(shè)計(jì)參數(shù)改用代碼實(shí)現(xiàn),使所連接數(shù)據(jù)庫(kù)所在的文件夾可隨程序而變化:PrivateSubForm_Load()DimmpathAsStringMpath=App.Path'獲取當(dāng)前

43、路徑IfRight(mpath,1)<>"/"Thenmpath=mpath+"/"Data1.DatabaseName=mpath+"Student.mdb"'連接數(shù)據(jù)庫(kù)Data1.RecordSource=基本情況”'構(gòu)成記錄集對(duì)象Data1.Refresh'激活數(shù)據(jù)控件EndSub2. UpdateControls方法UpdateControls方法可以將數(shù)據(jù)從數(shù)據(jù)庫(kù)中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用UpdateControls方法終止用戶對(duì)綁定控件內(nèi)數(shù)據(jù)的修改。例如:將代碼Da

44、ta1.UpdateControts放在一個(gè)命令按鈕的Click事件中,就可以實(shí)現(xiàn)對(duì)記錄修改的功能。3. UpdateRecord方法當(dāng)對(duì)綁定控件內(nèi)的數(shù)據(jù)修改后,數(shù)據(jù)控件需要移動(dòng)記錄集的指針才能保存修改。如果使用UpdateRecord方法,可強(qiáng)制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中,而不再觸發(fā)Validate事件。在代碼中可以用該方法來(lái)確認(rèn)修改。2.4記錄集的屬性與方法由RecordSource確定的具體可訪問(wèn)的數(shù)據(jù)構(gòu)成的記錄集Recordset也是一個(gè)對(duì)象,因而,它和其他對(duì)象一樣具有屬性和方法。下面列出記錄集常用的屬性和方法。1. AbsolutePosition屬性AbsoluteP

45、osition返回當(dāng)前指針值,如果是第1條記錄,其值為0,該屬性為只讀屬性。2. Bof和Eof的屬性Bof判定記錄指針是否在首記錄之前,若Bof為T(mén)rue,則當(dāng)前位置位于記錄集的第1條記錄之前。與此類似,Eof判定記錄指針是否在末記錄之后。3. Bookmark屬性Bookmark屬性的值采用字符串類型,用于設(shè)置或返回當(dāng)前指針的標(biāo)簽。在程序中可以使用Bookmark屬性重定位記錄集的指針,但不能使用AbsolutePostion屬性。4. Nomatch屬性在記錄集中進(jìn)行查找時(shí),如果找到相匹配的記錄,則Recordset的NoMatch屬性為False,否則為T(mén)rue。該屬性常與Bookma

46、rk屬性一起使用。5. RecordCount屬性RecordCount屬性對(duì)Recordset對(duì)象中的記錄計(jì)數(shù),該屬性為只讀屬性。在多用戶環(huán)境下,RecordCount屬性值可能不準(zhǔn)確,為了獲得準(zhǔn)確值,在讀取RecordCount屬性值之前,可使用MoveLast方法將記錄指針移至最后一條記錄上。6. Move方法使用Move方法可代替對(duì)數(shù)據(jù)控件對(duì)象的4個(gè)箭頭按鈕的操作遍歷整個(gè)記錄集。5種Move方法是:(1) MoveFirst方法:移至第1條記錄。(2) MoveLast方法:移至最后一條記錄。(3) MoveNext方法:移至下一條記錄。(4) MovePrevious方法:移至上一條

47、記錄。(5) Moven方法:向前或向后移n條記錄,n為指定的數(shù)值。例9.4在窗體上用4個(gè)命令按鈕代替例9.2數(shù)據(jù)控件對(duì)象的4個(gè)箭頭按鈕的操作。在例9.2的基礎(chǔ)上,窗體上增加4個(gè)命令按鈕,將數(shù)據(jù)控件的Visible屬性設(shè)置為False,如圖9.10所示。通過(guò)對(duì)4個(gè)命令按鈕的編程代替對(duì)數(shù)據(jù)控件對(duì)象的4個(gè)箭頭按鈕的操作。圖9.10用按鈕代替數(shù)據(jù)控件對(duì)象的箭頭按鈕命令按鈕Command1_Click事件移至第1條記錄,代碼如下:PrivateSubCommand1_Click()Datal.Recordset.MoveFirstEndSub命令按鈕Command4_Click事件移至最后一條記錄,代

48、碼如下:PrivateSubCommand4_Click()Data1.Recordset.MoveLastEndSub另外兩個(gè)按鈕的代碼需要考慮Recordset對(duì)象的邊界的首尾,如果越界,則用MoveFirst方法定位到第1條記錄或用MoveLast方法定位到最后一條記錄。程序代碼如下:PrivateSubCommand2_Click()Data1.Recordset.MovePreviousIfData1.Recordset.BOFThenData1.Recordset.MoveFirstEndSubPrivateSubCommand3_Click()Data1.Recordset.Mo

49、veNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub7. Find方法使用Find方法可在指定的Dynaset或Snapshot類型的Recordset對(duì)象中查找與指定條件相符的一條記錄,并使之成為當(dāng)前記錄。4種Find方法是:(1) FindFirst方法:從記錄集的開(kāi)始查找滿足條件的第1條記錄。(2) FindLast方法:從記錄集的尾部向前查找滿足條件的第l條記錄。(3) FindNext方法:從當(dāng)前記錄開(kāi)始查找滿足條件的下一條記錄。(4) FindPrevious方法:從當(dāng)前記錄開(kāi)始查找滿足條件的上一條記錄。4種Fi

50、nd方法的語(yǔ)法格式相同:數(shù)據(jù)集合.Find方法條件搜索條件是一個(gè)指定字段與常量關(guān)系的字符串表達(dá)式。在構(gòu)造表達(dá)式時(shí),除了用普通的關(guān)系運(yùn)算外,還可以用Like運(yùn)算符。例如:語(yǔ)句"Data1.Recordset.FindFirst專業(yè)='物理表示在由Data1數(shù)據(jù)控件所連接的數(shù)據(jù)庫(kù)Student.mdb的記錄集內(nèi)查找專業(yè)為物理"的第l條記錄。這里,專業(yè)"為數(shù)據(jù)庫(kù)Student記錄集中的字段名,在該字段中存放專業(yè)名稱信息。要想查找下一條符合條件的記錄,可繼續(xù)使用語(yǔ)句:"Data1.Recordset.FindNext專業(yè)='物理':

51、9;又例如:要在記錄集內(nèi)查找專業(yè)名稱中帶有建”字的專業(yè):Data1.Recordset.FindFirst專業(yè)Like'建*"字符串“建*”匹配字段專業(yè)中帶有建”字字樣的所有專業(yè)名稱字符串。需要指出的是Find方法在找不到相匹配的記錄時(shí),當(dāng)前記錄保持在查找的始發(fā)處,NoMatch屬性為T(mén)rue。如果Find方法找到相匹配的記錄,則記錄定位到該記錄,Recordset的NoMatch屬性為False。8. Seek方法使用Seek方法必須打開(kāi)表的索引,它在Table表中查找與指定索引規(guī)則相符的第1條記錄,并使之成為當(dāng)前記錄。其語(yǔ)法格式為:數(shù)據(jù)表對(duì)象.seekcomparison

52、,keyl,key2-Seek允許接受多個(gè)參數(shù),第1個(gè)是比較運(yùn)算符comparison,Seek方法中可用的比較運(yùn)算符有=、=、=等。在使用Seek方法定位記錄時(shí),必須通過(guò)Index屬性設(shè)置索引。若在記錄集中多次使用同樣的法(參數(shù)相同),那么找到的總是同一條記錄。例如:假設(shè)數(shù)據(jù)庫(kù)Student內(nèi)基本情況表的索引字段為學(xué)號(hào),滿足學(xué)號(hào)字段值大于等于條記錄可使用以下程序代碼:<>、Seek方110001的第1'設(shè)置記錄集類型為T(mén)able'打開(kāi)基本情況表單'打開(kāi)名稱為jbqk_no的索引Datal.RecordsetType=0Data1.RecordSource=

53、"基本情況"Data1.RefreshData1.Recordset.Index="jbqk_no"Data1.Recordset.Seek">=","110001"2.5數(shù)據(jù)庫(kù)記錄的增、刪、改操作Data控件是瀏覽表格并編輯表格的好工具,但怎么輸入新信息或刪除現(xiàn)有記錄呢?這需要編寫(xiě)幾行代碼,否則無(wú)法在Data控件上完成數(shù)據(jù)輸入。數(shù)據(jù)庫(kù)記錄的增、刪、改操作需要使用AddNew、Delete、Edit、Update和Refresh方法。它們的語(yǔ)法格式為:數(shù)據(jù)控件.記錄集.方法名1. 增加記錄AddNew方法在記

54、錄集中增加新記錄。增加記錄的步驟為:(1) 調(diào)用AddNew方法。(2) 給各字段賦值。給字段賦值格式為:Recordset.Fields(字段答")值。(3) 調(diào)用Update方法,確定所做的添加,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。注意:如果使用AddNew方法添加新的記錄,但是沒(méi)有使用Update方法而移動(dòng)到其他記錄,或者關(guān)閉記錄集,那么所做的輸入將全部丟失,而且沒(méi)有任何警告。當(dāng)調(diào)用Update方法寫(xiě)入記錄后,記錄指針自動(dòng)返回到添加新記錄前的位置上,而不顯示新記錄。為此,可在調(diào)用Update方法后,使用MoveLast方法將記錄指針再次移到新記錄上。2. 刪除記錄要從記錄集中刪除記錄的

55、操作分為三步:(1) 定位被刪除的記錄使之成為當(dāng)前記錄。(2) 調(diào)用Delete方法。(3) 移動(dòng)記錄指針。注意:在使用Delete方法時(shí),當(dāng)前記錄立即刪除,不加任何的警告或者提示。刪除一條記錄后,被數(shù)據(jù)庫(kù)所約束的綁定控件仍舊顯示該記錄的內(nèi)容。因此,你必須移動(dòng)記錄指針?biāo)⑿陆壎丶话悴捎靡浦料乱挥涗浀奶幚矸椒?。在移?dòng)記錄指針后,應(yīng)該檢查Eof屬性。3. 編輯記錄數(shù)據(jù)控件自動(dòng)提供了修改現(xiàn)有記錄的能力,當(dāng)直接改變被數(shù)據(jù)庫(kù)所約束的綁定控件的內(nèi)容后,需單擊數(shù)據(jù)控件對(duì)象的任一箭頭按鈕來(lái)改變當(dāng)前記錄,確定所做的修改。也可通過(guò)程序代碼來(lái)修改記錄,使用程序代碼修改當(dāng)前記錄的步驟為:(1) 調(diào)用Edit方法。

56、(2) 給各字段賦值。(3) 調(diào)用Update方法,確定所做的修改。注意:如果要放棄對(duì)數(shù)據(jù)的所有修改,可用Refresh方法,重讀數(shù)據(jù)庫(kù),沒(méi)有調(diào)用Update方法,數(shù)據(jù)的修改沒(méi)有寫(xiě)入數(shù)據(jù)庫(kù),所以這樣的記錄會(huì)在刷新記錄集時(shí)丟失。例9.5在例9.2的基礎(chǔ)上加入新增”、刪除”、修改”、放棄”和查找”鈕,通過(guò)對(duì)5個(gè)按紐的編程建立增、刪、改、查功能,如圖9.11所示。圖9.11編程建立增、刪、改、查功能Command1_Click事件的功能根據(jù)按鈕提示文字調(diào)用AddNew方法或Update方法,并且控制具他4個(gè)按鈕的可用性。當(dāng)按鈕提示為新增”時(shí)調(diào)用AddNew方法,并將提示文字改為確認(rèn)”,同時(shí)使刪除”按

57、鈕Command2、修改”按鈕Command3和查找"按鈕Command5不可用,而使放棄"按鈕Command4可用。新增記錄后,需再次單擊Command1調(diào)用Update方法確認(rèn)添加的記錄,再將提示文字再改為新增”,并使刪除"、修改”和查找"按鈕可用,而使放棄"按鈕不可用。程序中出現(xiàn)的OnErrorResumeNext語(yǔ)句是VisualBasic提供的錯(cuò)誤捕獲語(yǔ)句。該語(yǔ)句表示在程序運(yùn)行時(shí)發(fā)生錯(cuò)誤,忽略錯(cuò)誤行,繼續(xù)執(zhí)行下一語(yǔ)句。PrivateSubCommand1_Click()OnErrorResumeNextCommand2.Enabled

58、=NotCommand2.EnabledCommand3.Enabled=NotCommand3.EnabledCommand4.Enabled=NotCommand4.EnabledCommand5.Enabled=NotCommand5.EnabledIfCommand1.Caption="新增"ThenCommand1.Caption="確認(rèn)"Data1.Recordset.AddNewText1.SetFocusElseCommand1.Caption="新增"Data1.Recordset.UpdateData1.Recordset.MoveLastEndIfEndSub命令按鈕Command2_Click事件調(diào)用方法刪除當(dāng)前記錄。當(dāng)記錄集中的記錄全部被刪除后,再執(zhí)行Move語(yǔ)句將發(fā)生錯(cuò)誤,這時(shí)由OnErrorResumeNext語(yǔ)句處理錯(cuò)誤。PrivateSubCommand2_Click()OnErrorResumeNextData1.Recordset.DeleteData1.Recordset.MoveNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub命令按鈕Command

溫馨提示

  • 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)論