



下載本文檔
版權(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ā)接口題,微軟公司開(kāi)發(fā)了ODBC(Open DataBase Connectivity ,即開(kāi)放數(shù)據(jù)庫(kù)互連)。(API) ,為了解決此問(wèn)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ù)源 (Data Source Name,簡(jiǎn)稱 DSN) 是驅(qū)動(dòng)程序與DBS 連接的橋梁,數(shù)據(jù)源不是DBS,而是用于表達(dá)一個(gè) ODBC 驅(qū)動(dòng)程序和DBMS 特殊連接的命名。在連接中
3、,用數(shù)據(jù)源名來(lái)代表用戶名、服務(wù)器名、所連接的數(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ù)源:所有用戶和在Windows NT 下以服務(wù)方式運(yùn)行的應(yīng)用程序均可使用系統(tǒng)數(shù)據(jù)源。(3) 文件數(shù)據(jù)源:文件數(shù)據(jù)源是ODBC3.0 以上版本增加的一種數(shù)據(jù)源,可用于企業(yè)用戶,ODBC驅(qū)動(dòng)程序也安裝在用戶的計(jì)算機(jī)上。(與機(jī)器無(wú)關(guān) )二、 SQL 語(yǔ)言基礎(chǔ)創(chuàng)建表格SQL語(yǔ)言中的create table語(yǔ)
4、句被用來(lái)建立新的數(shù)據(jù)庫(kù)表格。Create table語(yǔ)句的使用格式如下:create table tablename(column1 data type,column2 data type,column3 data type);如果用戶希望在建立新表格時(shí)規(guī)定列的限制條件,可以使用可選的條件選項(xiàng):create table tablename(column1 data type constraint,精選文庫(kù)column2 data type constraint,column3 data type constraint);舉例如下:create table employee(firstname
5、varchar(15),lastname varchar(20),age number(3),address varchar(30),city varchar(20);簡(jiǎn)單來(lái)說(shuō),創(chuàng)建新表格時(shí),在關(guān)鍵詞create table后面加入所要建立的表格的名稱,然后在括號(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,
6、insert等,作為表格或列的名稱。數(shù)據(jù)類型用來(lái)設(shè)定某一個(gè)具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采用varchar 或 char的數(shù)據(jù)類型,而不能使用 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ù)字在
7、小數(shù)點(diǎn)后的位數(shù)。最后,在創(chuàng)建新表格時(shí)需要注意的一點(diǎn)就是表格中列的限制條件。所謂限制條件就是當(dāng)向特定列輸入數(shù)據(jù)時(shí)所必須遵守的規(guī)則。 例如, unique 這一限制條件要求某一列中不能存在兩個(gè)值相同的記錄,所有記錄的值都必須是唯一的。 除 unique 之外,較為常用的列的限制條件還包括not null 和 primary key 等。Not null用來(lái)規(guī)定表格中某一列的值不能為空。Primary key則為表格中的所有記錄規(guī)定了唯一的標(biāo)識(shí)符。查詢簡(jiǎn)單的 SQL 查詢只包括選擇列表、FROM 子句和 WHERE 子句。它們分別說(shuō)明所查詢列、查詢的表或視圖、以及搜索條件等。完整結(jié)構(gòu):Select
8、All/Distinct< 目標(biāo)表達(dá)式 > < 目標(biāo)表達(dá)式 > From< 表名 > , <表名 > Where< 條件表達(dá)式 >Group by < 列名 1>Having< 條件表達(dá)式 >Order by < 列名 2> Asc/Desc Group by :按列名1 的值進(jìn)行分組,屬性值相等的為一個(gè)組,如果帶Having 短句,表示只有滿足指定條件的才輸出。例如,下面的語(yǔ)句查詢testtable 表中姓名為 “張三 ”的 nickname 字段和 email 字段。SELECT nicknam
9、e,emailFROM testtableWHERE name=' 張三 '(一 ) 選擇列表選擇列表 (select_list) 指出所查詢列,它可以是一組列名列表、星號(hào)、表達(dá)式、變量(包括局部變-2精選文庫(kù)量和全局變量)等構(gòu)成。1、選擇所有列例如,下面語(yǔ)句顯示testtable 表中所有列的數(shù)據(jù):SELECT *FROM testtable2、選擇部分列并指定它們的顯示次序查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:SELECT nickname,emailFROM testtable3、更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)
10、題 =列名列名列標(biāo)題如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語(yǔ)句使用漢字顯示列標(biāo)題:SELECT昵稱 =nickname, 電子郵件 =emailFROM testtable4、刪除重復(fù)行SELECT 語(yǔ)句中使用ALL或 DISTINCT選項(xiàng)來(lái)顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為 ALL 。使用 DISTINCT選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在SELECT 返回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用 TOP n PERCENT 選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOP n 說(shuō)明返回 n 行,而 TOP n PERCENT 時(shí),說(shuō)明n是表示一百分?jǐn)?shù),指定
11、返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECT TOP 2 *FROM testtableSELECT TOP 20 PERCENT *FROM testtable(二 )FROM 子句FROM 子句指定SELECT 語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在FROM 子句中最多可指定256 個(gè)表或視圖,它們之間用逗號(hào)分隔。在 FROM 子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。例如在usertable 和 citytable 表中同時(shí)存在cityid 列,在查詢兩個(gè)表中的cityid 時(shí)應(yīng)使用下面語(yǔ)句格式加以限定:SELECT usernam
12、e,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名表名 別名(二 ) FROM 子句-3精選文庫(kù)FROM 子句指定 SELECT 語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個(gè)表或視圖,它們之間用逗號(hào)分隔。在 FROM 子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。例如在usertable 和 citytable 表中同時(shí)存在cityi
13、d 列,在查詢兩個(gè)表中的cityid 時(shí)應(yīng)使用下面語(yǔ)句格式加以限定:SELECT username,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名as 別名表名別名例如上面語(yǔ)句可用表的別名格式表示為:SELECT username,b.cityidFROM usertable a,citytable bWHERE a.cityid=b.cityidSELECT 不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語(yǔ)句所返回的結(jié)果集
14、合中查詢數(shù)據(jù)。例如:SELECT a.au_fname+a.au_lnameFROM authors a,titleauthor ta(SELECT title_id,titleFROM titlesWHERE ytd_sales>10000) AS tWHERE a.au_id=ta.au_idAND ta.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 *FROM userta
15、bleWHERE age>20WHERE 子句可包括各種條件運(yùn)算符:比較運(yùn)算符 (大小比較 ): >、 >=、 =、<、 <=、 <>、 !> 、 !<范圍運(yùn)算符 (表達(dá)式值是否在指定的范圍): BETWEENANDNOT BETWEEN AND列表運(yùn)算符 (判斷表達(dá)式是否為列表中的指定項(xiàng)): IN ( 項(xiàng) 1,項(xiàng) 2)NOT IN ( 項(xiàng) 1,項(xiàng) 2)模式匹配符 (判斷值是否與指定的字符通配格式相符):LIKE 、NOT LIKE空值判斷符 (判斷表達(dá)式是否為空):IS NULL 、 NOT IS NULL邏輯運(yùn)算符 (用于多條件的邏輯連
16、接): NOT 、AND 、 OR1、范圍運(yùn)算符例:age BETWEEN 10 AND 30相當(dāng)于 age>=10 AND age<=302、列表運(yùn)算符例:country IN ('Germany','China')3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于 char、varchar、text 、 ntext、 datetime 和 smalldatetime 等類型查詢。-4精選文庫(kù)可使用以下通配字符:百分號(hào) %:可匹配任意類型和長(zhǎng)度的字符,如果是中文,請(qǐng)使用兩個(gè)百分號(hào)即%。下劃線 _:匹配單個(gè)任意字符,它常
17、用來(lái)限制表達(dá)式的字符長(zhǎng)度。方括號(hào) :指定一個(gè)字符、字符串或范圍,要求所匹配對(duì)象為它們中的任一個(gè)。 :其取值也 相同,但它要求所匹配對(duì)象為指定字符以外的任一個(gè)字符。例如:限制以 Publishing 結(jié)尾,使用LIKE '%Publishing'限制以 A 開(kāi)頭: LIKE 'A%'限制以 A 開(kāi)頭外: LIKE 'A%'4、空值判斷符例WHERE age IS NULL5、邏輯運(yùn)算符:優(yōu)先級(jí)為NOT 、 AND 、 OR(四 )查詢結(jié)果排序使用 ORDER BY 子句對(duì)查詢返回的結(jié)果按一列或多列排序。ORDER BY 子句的語(yǔ)法格式為:ORDER
18、 BY column_name ASC|DESC , n其中 ASC 表示升序,為默認(rèn)值,DESC 為降序。 ORDER BY不能按 ntext、 text 和 image 數(shù)據(jù)類型進(jìn)行排序。例如:SELECT *FROM usertableORDER BY age desc,userid ASC另外,可以根據(jù)表達(dá)式進(jìn)行排序。向表格中插入數(shù)據(jù)SQL語(yǔ)言使用 insert 語(yǔ)句向數(shù)據(jù)庫(kù)表格中插入或添加新的數(shù)據(jù)行。Insert 語(yǔ)句的使用格式如下:insert into tablename(first_column,.last_column)values (first_value,.last_va
19、lue);例如:insert into employee(firstname, lastname, age, address, city)values ( Li , Ming, 45, No.77 Changan Road ,Beijing”);簡(jiǎn)單來(lái)說(shuō),當(dāng)向數(shù)據(jù)庫(kù)表格中添加新記錄時(shí),在關(guān)鍵詞insert into后面輸入所要添加的表格名稱,然后在括號(hào)中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞values的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。更新記錄SQL語(yǔ)言使用update 語(yǔ)句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。Update 語(yǔ)句的格式為:update tablenam
20、eset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value; 例如:update employee-5精選文庫(kù)set age = age+1where first_name=Maryand last_name=Williams ;使用 update 語(yǔ)句時(shí),關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的where 條件從句。刪除記錄SQL語(yǔ)言使用delete語(yǔ)句刪除數(shù)據(jù)庫(kù)表格中的行或記錄。Delete 語(yǔ)句的格式為:delete from t
21、ablenamewhere columnname OPERATOR value and|or column OPERATOR value;例如:delete from employeewhere lastname = May;簡(jiǎn)單來(lái)說(shuō),當(dāng)需要?jiǎng)h除某一行或某個(gè)記錄時(shí),在delete from關(guān)鍵詞之后輸入表格名稱,然后在where 從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用delete語(yǔ)句時(shí)不設(shè)定where 從句,則表格中的所有記錄將全部被刪除。刪除數(shù)據(jù)庫(kù)表格在 SQL語(yǔ)言中使用drop table命令刪除某個(gè)表格以及該表格中的所有記錄。Drop table命令的使用格式為:drop t
22、able tablename;例如:drop table employee;如果用戶希望將某個(gè)數(shù)據(jù)庫(kù)表格完全刪除,只需要在drop table命令后輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會(huì)改變。而使用drop table命令則會(huì)將整個(gè)數(shù)據(jù)庫(kù)表格的所有信息全部刪除。三、數(shù)據(jù)控件1、 ADO 數(shù)據(jù)控件1.1 ADO對(duì)象模型ADO(ActiveXData Object) 數(shù)據(jù)訪問(wèn)接口是Microsoft 處理數(shù)據(jù)庫(kù)信息的最新技術(shù)。它是一種ActiveX對(duì)象,采用了被稱為OLE DB 的數(shù)據(jù)訪
23、問(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ì)象的分工描述。-6精選文庫(kù)Connection 對(duì)象Error集合Error對(duì)象Command對(duì)象Parameter 集合Parameter 對(duì)象Recordset對(duì)象Field集合Field對(duì)象圖 9.13 ADO 對(duì)
24、象模型表9.6 ADO對(duì)象描述對(duì)象名描 述ConnectionCommandRecordsetErrorParameterField連接數(shù)據(jù)來(lái)源從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息所獲得的一組記錄組成的記錄集在訪問(wèn)數(shù)據(jù)時(shí),由數(shù)據(jù)源所返回的錯(cuò)誤信息與命令對(duì)象有關(guān)的參數(shù)包含了記錄集中某個(gè)字段的信息要想在程序中使用ADO對(duì)象,必須先為當(dāng)前工程引用ADO的對(duì)象庫(kù)。 引用方式是執(zhí)行“工程 ”菜單的“引用 ”命令,啟動(dòng)引用對(duì)話框,在清單中選取“ MicrosoftActiveXDataObjects 2.0 Library選項(xiàng)”。1.2 使用 ADO 數(shù)據(jù)控件在使用 6.0(OLEDB)ADO數(shù)據(jù)控件前,必須先
25、通過(guò)“工程”選項(xiàng),將ADO 數(shù)據(jù)控件添加到工具箱。|部件 ”菜單命令選擇"MicrosoftADO 數(shù)據(jù)控件與VisualBasicADO 的內(nèi)部DataDataControl 控件很相似,它允許使用ADO 數(shù)據(jù)控件的基本屬性快速地創(chuàng)建與數(shù)據(jù)庫(kù)的連接。1 ADO數(shù)據(jù)控件的基本屬性(1)ConnectionString屬性ADO 控件沒(méi)有DatabaseName 屬性,它使用ConnectionString 屬性與數(shù)據(jù)庫(kù)建立連接。該屬性包含了用于與數(shù)據(jù)源建立連接的相關(guān)信息,ConnectionString 屬性帶有4 個(gè)參數(shù),如表9.7 所示。(2)RecordSource屬性Reco
26、rdSource 確定具體可訪問(wèn)的數(shù)據(jù),的單個(gè)表名,一個(gè)存儲(chǔ)查詢,也可以是使用這些數(shù)據(jù)構(gòu)成記錄集對(duì)象Recordset。該屬性值可以是數(shù)據(jù)庫(kù)中SQL 查詢語(yǔ)言的一個(gè)查詢字符串。表9.7 ConnectionString屬性參數(shù)參數(shù)描述Provide指定數(shù)據(jù)源的名稱FileName指定數(shù)據(jù)源所對(duì)應(yīng)的文件名RemoteProvide在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開(kāi)一個(gè)客戶端時(shí)所用的數(shù)據(jù)源名稱-7精選文庫(kù)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
27、 屬性定義從一個(gè)查詢中最多能返回的記錄數(shù)。 2. ADO 數(shù)據(jù)控件的方法和事件ADO 數(shù)據(jù)控件的方法和事件與Data 控件的方法和事件完全一樣。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。”步驟 2:?jiǎn)螕?ADO 控件屬性窗口中的ConnectionString 屬性右邊的 “”按鈕,彈出 “屬性頁(yè) ”對(duì)話框。在該對(duì)話框中允許通過(guò)三種不同的方式連接數(shù)據(jù)源:“使用連接字符串”只需要單擊 “生成 ”按鈕,通過(guò)選項(xiàng)設(shè)置自動(dòng)產(chǎn)生連接字符串?!笆褂?D
28、ata Link 文件 ”表示通過(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)行控制。步驟 3:采用 “使用連接字符串”方式連接數(shù)據(jù)源。 單擊 “生成 ”按鈕,打開(kāi) “數(shù)據(jù)鏈接屬性”對(duì)話框。在 “提供者 ”選項(xiàng)卡內(nèi)選擇一個(gè)合適的OLE DB 數(shù)據(jù)源,Student.mdb 是 Access 數(shù)據(jù)庫(kù),選擇 “Microsoft Jet 3.51 OLEDBProvider 選”項(xiàng)。然后單擊“下 步 ”按鈕或打開(kāi)“連接 ”選項(xiàng)卡,在對(duì)話框內(nèi)指定數(shù)據(jù)庫(kù)文件,這里為Student.mdb 。為保證連接有效
29、,可單擊“連接 ”選項(xiàng)卡右下方的“測(cè)試連接 ”按鈕,如果測(cè)試成功則關(guān)閉ConnectionString 屬性頁(yè)。步驟 4:?jiǎn)螕?ADO 控件屬性窗口中的RecordSource 屬性右邊的 “”按鈕,彈出記錄源屬性頁(yè)對(duì)話框。在 “命令類型 ”下拉式列表框中選擇“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 屬性 ”菜單命令, 打
30、開(kāi) ADO 數(shù)據(jù)控件屬性頁(yè)對(duì)話框,一次完成步驟1步驟 4 的全部設(shè)置。1.3ADO 數(shù)據(jù)控件上新增綁定控件的使用隨著 ADO 對(duì)象模型的引入,Visual Basic 6.0 除了保留以往的一些綁定控件外,又提供了一些新的成員來(lái)連接不同數(shù)據(jù)類型的數(shù)據(jù)。這些新成員主要有DataGrid 、 DataCombo 、 DataList 、 DataReport 、MSHFlexGrid 、MSChart 控件和 MonthView 等控件。 這些新增綁定控件必須使用ADO 數(shù)據(jù)控件進(jìn)行綁定。Visual Basic 6.0 在綁定控件上不僅對(duì)DataSource 和 DataField 屬性在連接功
31、能上作了改進(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ù)控件,并按前面介紹的ADO 數(shù)據(jù)控件屬性設(shè)置過(guò)程連接數(shù)據(jù)庫(kù)Student.mdb中的基本情況表。DataGrid 控件允許用戶同時(shí)瀏覽或修改多個(gè)記錄的數(shù)據(jù)。在使用DataGrid 控件前也必須先通過(guò)“工程 |部件 ”菜單命令選擇“MicrosoftDataG
32、ridControl 6.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和-8精選文庫(kù)AllowUpdate 屬性設(shè)置控制增,刪、改操作。如果要改變DataGrid 網(wǎng)格上顯示的字段,可用鼠標(biāo)右鍵單擊DataGrid 控件,在彈出的快捷菜單中選擇 “檢索字段 ”選項(xiàng)。 Visual B
33、asic 提示是否替換現(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 所示為具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定。標(biāo)有號(hào)的記錄行表示允許增加新記錄。圖 9.14具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定2、Data 控件D
34、ata 控件 是 Visual Basic 訪問(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ù)的功能,允許將Visual Basic 的窗體與數(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.1Data 控件屬性1 Connect 屬性Connect 屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫(kù)類型,Visual Basic 默認(rèn)的數(shù)據(jù)庫(kù)是Access 的 MDB 文件,此外,
35、也可連接DBF 、 XLS 、 ODBC 等類型的數(shù)據(jù)庫(kù)。2 DatabaseName屬性DatabaseName 屬性指定具體使用的數(shù)據(jù)庫(kù)文件名,包括所有的路徑名。如果連接的是單表數(shù)據(jù)庫(kù),則DatabaseName 屬性應(yīng)設(shè)置為數(shù)據(jù)庫(kù)文件所在的子目錄名,而具體文件名放在RecordSource 屬性中。例如,要連接一個(gè) Microsoft Access 的數(shù)據(jù)庫(kù) C:Student.mdb ,則設(shè)置 DatabaseName= ” C:Student.mdb" , Access 數(shù)據(jù)庫(kù)的所有表都包含在一個(gè) MDB 文件中。如果連接一個(gè) FoxPro 數(shù)據(jù)庫(kù)如 C: VB6 stu_
36、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ù)中-9精選文庫(kù)的單個(gè)表名, 個(gè)存儲(chǔ)查詢,也可以是使用SQL 查詢語(yǔ)言的一個(gè)查詢字符串。例 如 , 要 指 定Student.mdb數(shù) 據(jù) 庫(kù) 中 的 基 本 情 況 表 , 則RecordSource=”基 本 情 況 ”。 而RecordSource= ” SelectFrom 基本情況 Whe
37、re 專業(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 所示。屬性BofActionEofAction取值0101表 9.1EofAction 和 BofAction 屬性操作控件重定位到第個(gè)記錄移過(guò)記錄集開(kāi)始位,定位到一個(gè)無(wú)效記錄,觸發(fā)數(shù)據(jù)控件對(duì)第一個(gè)記
38、錄的無(wú)效事件Validate控件重定位到最后 個(gè)記錄移過(guò)記錄集結(jié)束位,定位到一個(gè)無(wú)效記錄,觸發(fā)數(shù)據(jù)控件對(duì)最后一個(gè)記錄的無(wú)效事件Validate2 向記錄集加入新的空記錄,可以對(duì)新記錄進(jìn)行編輯,移動(dòng)記錄指針,新記錄寫(xiě)入數(shù)據(jù)庫(kù)在 Visual Basic 中,數(shù)據(jù)控件本身不能直接顯示記錄集中的數(shù)據(jù),必須通過(guò)能與它綁定的控件來(lái)實(shí)現(xiàn)??膳c數(shù)據(jù)控件綁定的控件對(duì)象有文本框、標(biāo)簽、圖像框、圖形框、列表框、組合框、復(fù)選框、網(wǎng)格、列表框、 DB 組合框、 DB 網(wǎng)格和 OLE 容器等控件。要使綁定控件能被數(shù)據(jù)庫(kù)約束,必需在設(shè)計(jì)或運(yùn)行時(shí)對(duì)這些控件的兩個(gè)屬性進(jìn)行設(shè)置:DB(1)DataSource屬性DataSou
39、rce 屬性通過(guò)指定 個(gè)有效的數(shù)據(jù)控件連接到一個(gè)數(shù)據(jù)庫(kù)上。(2)DataField 屬性DataField 屬性設(shè)置數(shù)據(jù)庫(kù)有效的字段與綁定控件建立聯(lián)系。綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫(kù)三者的關(guān)系如圖9.7 所示。綁定控件數(shù)據(jù)控件數(shù)據(jù)庫(kù)圖 9.7 綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫(kù)三者的關(guān)系當(dāng)上述控件與數(shù)據(jù)控件綁定后,Visual Basic 將當(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)向記錄集加入新
40、的空記錄。例 9.1 建立 student.mdb 數(shù)據(jù)庫(kù), 它包含兩個(gè)表: “基本情況 ”表和 “學(xué)生成績(jī)表 ”。參見(jiàn)表 9.2 和表 9.3。表 9.2 學(xué)生基本情況表結(jié)構(gòu)字段名類型寬度學(xué)號(hào)Text6姓名Text10性別Text2-10精選文庫(kù)專業(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è)綁定控件與
41、之對(duì)應(yīng)。這里用一個(gè)圖形框顯示照片和5 個(gè)文本框顯示學(xué)號(hào)、姓名等數(shù)據(jù)。本例中不需要編寫(xiě)任何代碼,具體操作步驟如下:(1)參考如圖 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ù)(2)將數(shù)據(jù)控件Data1 的 Connect 屬性指定為Access 類型,DatabaseName 屬性連接數(shù)據(jù)庫(kù)Student.mdb,RecordSource 屬性設(shè)置為 “基本情況 ”表。(3)圖形框和5 個(gè)文本框控件Text1 Text5 的 DataSource 屬
42、性都設(shè)置成Data1。通過(guò)單擊這些綁定控件的 DataField 屬性上的 “”按鈕, 將下拉出基本情況表所含的全部字段,分別選擇與其對(duì)應(yīng)的字段照片、學(xué)號(hào)、姓名、性別、專業(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í)
43、還可以編輯數(shù)據(jù)。如果改變了某個(gè)字段的值,只要移動(dòng)記錄,這時(shí)所作的改變存入數(shù)據(jù)庫(kù)中。Visual Basic 6.0 提供了幾個(gè)比較復(fù)雜的網(wǎng)格控件,幾乎不用編寫(xiě)代碼就可以實(shí)現(xiàn)多條記錄數(shù)據(jù)顯示。當(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.2data 控件與 MsFlexGrid控件結(jié)合顯示數(shù)據(jù)庫(kù)中信息例 9.3 用數(shù)據(jù)網(wǎng)格控件 MsFlexGrid 顯示 Student.mdb 數(shù)據(jù)庫(kù)中基本情況表的內(nèi)容。MsFlexGrid 控件不是Visual Basic 工具箱內(nèi)的默認(rèn)控件,
44、需要在開(kāi)發(fā)環(huán)境中選擇“工程 |部件 ”菜單命令,-11精選文庫(kù)并在隨即出現(xiàn)的對(duì)話框中選擇“MicroSoft FlexGrid Control 6.0選項(xiàng)”,將其添加到工具箱中。本例所用控件的屬性設(shè)置如表9.4 所示。請(qǐng)讀者自行比較不可卷動(dòng)列屬性FixedCols=0 與 FixedCols=1 的區(qū)別。 Form 啟動(dòng)后自動(dòng)顯示如圖9.9 所示窗口。表 9.4 控件屬性默認(rèn)控件名其它屬性設(shè)置Data1DatabaseName=” c:student.mdb”RecordsetType=0RecordSource= 基”本情況 ”MSFlexGrid1DataSource=Data1FixCo
45、ls=0圖 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ù)所在的文件夾可隨程序而變化:Private Sub Form_Load( )Dim mpath As StringMpath=App.
46、Path獲取當(dāng)前路徑If Right(mpath,1)<>” / ” Then mpath=mpath+” / ”Data1.DatabaseName=mpath+” Student.mdb”連接數(shù)據(jù)庫(kù)Data1.RecordSource= 基本”情況 ”構(gòu)成記錄集對(duì)象Data1.Refresh激活數(shù)據(jù)控件End Sub2 UpdateControls方法UpdateControls方法可以將數(shù)據(jù)從數(shù)據(jù)庫(kù)中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用UpdateControls 方法終止用戶對(duì)綁定控件內(nèi)數(shù)據(jù)的修改。例如:將代碼 Data1.UpdateControts 放在一個(gè)命
47、令按鈕的Click 事件中,就可以實(shí)現(xiàn)對(duì)記錄修改的功能。-12精選文庫(kù)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屬性AbsolutePosition 返回
48、當(dāng)前指針值,如果是第1 條記錄,其值為0,該屬性為只讀屬性。2 Bof 和 Eof 的屬性Bof 判定記錄指針是否在首記錄之前,若Bof 為 True,則當(dāng)前位置位于記錄集的第1 條記錄之前。與此類似, Eof 判定記錄指針是否在末記錄之后。3 Bookmark 屬性Bookmark 屬性的值采用字符串類型,用于設(shè)置或返回當(dāng)前指針的標(biāo)簽。在程序中可以使用Bookmark屬性重定位記錄集的指針,但不能使用AbsolutePostion 屬性。4 Nomatch 屬性在記錄集中進(jìn)行查找時(shí),如果找到相匹配的記錄,則 Recordset 的 NoMatch 屬性為 False,否則為 True。該屬性常與Bookmark 屬性一起使用。5 RecordCount 屬性RecordCount 屬性對(duì) Recordset 對(duì)象中的記錄計(jì)數(shù), 該屬
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合資飯店合同范例
- 買賣土地建筑合同范本
- 上海裝修合同范本
- 廚師飯店勞務(wù)合同范例
- 醫(yī)藥代表合同范本
- 辦低保申請(qǐng)書(shū)格式
- 單位變更注銷合同范本
- 土地分割租售合同范本
- 同城配送司機(jī)合同范本
- 凱旋門租房合同范例
- 《保密法》培訓(xùn)課件
- 期權(quán)入門基礎(chǔ)知識(shí)單選題100道及答案解析
- 2024 年江蘇高考【生物】真題及答案解析(江蘇卷)
- 中國(guó)華電校園招聘在線測(cè)評(píng)題
- 高原裝配式鋼結(jié)構(gòu)建筑技術(shù)標(biāo)準(zhǔn)DBJ540003-2018
- 盤扣支模架工程監(jiān)理細(xì)則
- 移動(dòng)商務(wù)專業(yè)教學(xué)資源庫(kù)申報(bào)書(shū)
- 人教鄂教版-科學(xué)-三年級(jí)下冊(cè)-知識(shí)點(diǎn)
- 2024年北師大版五年級(jí)數(shù)學(xué)下冊(cè)第二單元長(zhǎng)方體(一)檢測(cè)卷(提高卷)含答案
- DZ∕T 0248-2014 巖石地球化學(xué)測(cè)量技術(shù)規(guī)程(正式版)
- 四宮格兒童數(shù)獨(dú)練習(xí)60題
評(píng)論
0/150
提交評(píng)論