VB數(shù)據(jù)庫編程技術(shù)實(shí)例_第1頁
VB數(shù)據(jù)庫編程技術(shù)實(shí)例_第2頁
VB數(shù)據(jù)庫編程技術(shù)實(shí)例_第3頁
VB數(shù)據(jù)庫編程技術(shù)實(shí)例_第4頁
VB數(shù)據(jù)庫編程技術(shù)實(shí)例_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、。因此應(yīng)用程序有很好的適應(yīng)性和可移植性,并且具備 了同時訪問多種數(shù)據(jù)庫管理系統(tǒng)的能力,從而徹底克服了傳統(tǒng)數(shù)據(jù)庫應(yīng)用程序的缺陷。主要任務(wù)包括:建立與數(shù)據(jù)源的連接;向數(shù)據(jù)源發(fā)送 SQL 請求;斷開與數(shù)據(jù)源的連接數(shù)據(jù)源 數(shù)據(jù)源是指任一種可以通過 ODBC 連接的數(shù)據(jù)庫管理系統(tǒng), 它包括要訪問的數(shù)據(jù)庫和數(shù)據(jù)庫的運(yùn)行平 臺。數(shù)據(jù)源名掩蓋了數(shù)據(jù)庫服務(wù)器或數(shù)據(jù)庫文件間的差別,通過定義多個數(shù)據(jù)源,每個數(shù)據(jù)源指向一個服 務(wù)器名,就可在應(yīng)用程序中實(shí)現(xiàn)同時訪問多個 DBMS 的目的。數(shù)據(jù)源(Data Source Name,簡稱DSN)是驅(qū)動程序與 DBS連接的橋梁,數(shù)據(jù)源不是 DBS,而是用于表 達(dá)一個 ODBC

3、 驅(qū)動程序和 DBMS 特殊連接的命名。在連接中,用數(shù)據(jù)源名來代表用戶名、服務(wù)器名、所 連接的數(shù)據(jù)庫名等,可以將數(shù)據(jù)源名看成是與一個具體數(shù)據(jù)庫建立的連接。數(shù)據(jù)源分為以下三類:(1) 用戶數(shù)據(jù)源:用戶創(chuàng)建的數(shù)據(jù)源,稱為 “用戶數(shù)據(jù)源 ”。此時 只有創(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ū)動程序也安裝在用戶的計算機(jī)上。 (與機(jī)器無關(guān) )SQL 語

4、言基礎(chǔ)創(chuàng)建表格SQL語言中的create table語句被用來建立新的數(shù)據(jù)庫表格。Create table 語句的使用格式如下:create table tablename(column1 data type,column2 data type,column3 data type);如果用戶希望在建立新表格時規(guī)定列的限制條件,可以使用可選的條件選項:create table tablename(column1 data type constraint,column2 data type constraint,column3 data type constraint);舉例如下:create t

5、able employee(firstname varchar(15), lastname varchar(20), age number(3), address varchar(30), city varchar(20);簡單來說,創(chuàng)建新表格時,在關(guān)鍵詞 create table 后面加入所要建立的表格的名稱,然后在括號內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的SQL語句在結(jié)尾處都要使用“ ”符號。使用SQL語句創(chuàng)建的數(shù)據(jù)庫表格和表格中列的名稱必須以字母開頭,后面可以使用字母,數(shù)字或下劃線, 名稱的長度不能超過 30個字符。注意,用戶在選擇表格名稱時不要使用SQL語言

6、中的保留關(guān)鍵詞,如select,create, insert 等,作為表格或列的名稱。數(shù)據(jù)類型用來設(shè)定某一個具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采用varchar 或 char 的數(shù)據(jù)類型,而不能使用 number 的數(shù)據(jù)類型。SQL語言中較為常用的數(shù)據(jù)類型為:char(size) :固定長度字符串,其中括號中的 size 用來設(shè)定字符串的最大長度。 Char 類型的最大長度為255 字節(jié)。varchar(size) :可變長度字符串,最大長度由 size 設(shè)定。number(size) :數(shù)字類型,其中數(shù)字的最大位數(shù)由 size 設(shè)定。Date :日期類型。number(size,d)

7、:數(shù)字類型, size 決定該數(shù)字總的最大位數(shù),而d 則用于設(shè)定該數(shù)字在小數(shù)點(diǎn)后的位數(shù)。最后,在創(chuàng)建新表格時需要注意的一點(diǎn)就是表格中列的限制條件。所謂限制條件就是當(dāng)向特定列輸入數(shù)據(jù) 時所必須遵守的規(guī)則。 例如, unique 這一限制條件要求某一列中不能存在兩個值相同的記錄,所有記錄的值都必須是唯一的。 除 unique 之外,較為常用的列的限制條件還包括 not null 和 primary key 等。 Not null 用來規(guī)定表格中某一列的值不能為空。 Primary key 則為表格中的所有記錄規(guī)定了唯一的標(biāo)識符。查詢簡單的 SQL 查詢只包括選擇列表、 FROM 子句和 WHERE

8、 子句。它們分別說明所查詢列、查詢的 表或視圖、以及搜索條件等。完整結(jié)構(gòu):Select 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)行分組,屬性值相等的為一個組,如果帶 Having 短句,表示只有滿足指定條 件的才輸出。例如,下面的語句查詢 testtable表中姓名為 張三

9、"的nickname字段和email字段。SELECT nickname,emailFROM testtableWHERE name='張三'(一) 選擇列表 選擇列表 (select_list) 指出所查詢列,它可以是一組列名列表、星號、表達(dá)式、變量(包括局部變量和全局變量 )等構(gòu)成。1、選擇所有列例如,下面語句顯示 testtable 表中所有列的數(shù)據(jù):SELECT *FROM testtable2、選擇部分列并指定它們的顯示次序 查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:SELECT nickname,emailFROM testt

10、able3、更改列標(biāo)題 在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)題 =列名列名 列標(biāo)題 如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識符格式時,應(yīng)使用引號定界符,例如,下列語句使用漢字顯示列 標(biāo)題:SELECT 昵稱 =nickname, 電子郵件 =emailFROM testtable4、刪除重復(fù)行SELECT 語句中使用 ALL 或 DISTINCT 選項來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默 認(rèn)為 ALL 。使用 DISTINCT 選項時,對于所有重復(fù)的數(shù)據(jù)行在 SELECT 返回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用TOP n PERCENT選項限制返回的數(shù)據(jù)行數(shù),TO

11、P n說明返回n行,而TOP n PERCENT時,說明n是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECT TOP 2 *FROM testtableSELECT TOP 20 PERCENT *FROM testtable(二 )FROM 子句FROM 子句指定 SELECT 語句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個表或視 圖,它們之間用逗號分隔。在 FROM 子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應(yīng)使用對象名限定這些列 所屬的表或視圖。例如在 usertable 和 citytable 表中同時存在 cityid

12、列,在查詢兩個表中的 cityid 時應(yīng) 使用下面語句格式加以限定:SELECT username,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名表名 別名(二) FROM 子句FROM 子句指定 SELECT 語句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個表或視 圖,它們之間用逗號分隔。在 FROM 子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應(yīng)使用對象名限定這些列 所

13、屬的表或視圖。例如在 usertable 和 citytable 表中同時存在 cityid 列,在查詢兩個表中的 cityid 時應(yīng) 使用下面語句格式加以限定:SELECT username,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid 在 FROM 子句中可用以下兩種格式為表或視圖指定別名: 表名 as 別名 表名 別名例如上面語句可用表的別名格式表示為:SELECT username,b.cityid FROM usertable a,citytable bWHERE a.c

14、ityid=b.cityidSELECT 不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結(jié)果集合中查詢數(shù)據(jù)。 例如:SELECT a.au_fname+a.au_lname FROM 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 ,然后再從中檢索數(shù)據(jù)。(三 ) 使用 WHERE 子句設(shè)置查詢條件WHERE

15、 子句設(shè)置查詢條件,過濾掉不需要的數(shù)據(jù)行。例如下面語句查詢年齡大于 20 的數(shù)據(jù): SELECT *FROM usertableWHERE age>20WHERE 子句可包括各種條件運(yùn)算符: 比較運(yùn)算符 (大小比較 ):>、>=、=、<、<=、<> 、!>、!< 范圍運(yùn)算符(表達(dá)式值是否在指定的范圍 ):BETWEENAND,NOT BETWEEN- AND列表運(yùn)算符(判斷表達(dá)式是否為列表中的指定項):IN (項1,項2 )NOT IN ( 項 1,項 2-) 模式匹配符 (判斷值是否與指定的字符通配格式相符 ):LIKE 、NOT LIK

16、E 空值判斷符 (判斷表達(dá)式是否為空 ): IS NULL 、NOT IS NULL 邏輯運(yùn)算符 (用于多條件的邏輯連接 ): NOT、AND、OR1、 范圍運(yùn)算符例:age BETWEEN 10 AND 30 相當(dāng)于 age>=10 AND age<=302、 列表運(yùn)算符例:country IN ('Germany','China')3、 模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har、 varchar 、 text 、 ntext 、 datetime 和 smalldatetime 等類型查詢??墒褂靡韵峦?/p>

17、配字符:百分號 %:可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即 % 。下劃線 _:匹配單個任意字符,它常用來限制表達(dá)式的字符長度。方括號 :指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。n :其取值也相同,但它要求所匹配對象為指定字符以外的任一個字符。例如:限制以 Publishing 結(jié)尾,使用 LIKE '%Publishing'限制以 A 開頭: LIKE 'A%'限制以A開頭外:LIKEA%'4、空值判斷符例 WHERE age IS NULL5、邏輯運(yùn)算符:優(yōu)先級為 NOT 、AND 、OR (四)查詢結(jié)果排序使用

18、 ORDER BY 子句對查詢返回的結(jié)果按一列或多列排序。 ORDER BY 子句的語法格式為:ORDER 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語言使用insert語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。Insert語句的使用格式如下:insert into tablename(first_column,.

19、last_column)values (first_value,.last_value);例如:insert into employee(firstname, lastname, age, address, city)values ( , Li ?, , Ming?, 45, No.77 Changan Road ?, , Beijing ”);簡單來說,當(dāng)向數(shù)據(jù)庫表格中添加新記錄時,在關(guān)鍵詞 insert into 后面輸入所要添加的表格名稱,然后 在括號中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞values 的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。更新記錄SQL語言使用

20、update語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。Update語句的格式為:update tablenameset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value;例如:update employeeset age = age+1where first_name= , Mary? and last_name= , Williams ?;使用 update 語句時,關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的 where 條件從句。刪除記錄

21、SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete語句的格式為:delete from tablenamewhere columnname OPERATOR value and|or column OPERATOR value;例如:delete from employeewhere lastname = May;簡單來說,當(dāng)需要刪除某一行或某個記錄時,在 delete from 關(guān)鍵詞之后輸入表格名稱,然后在 where 從 句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用delete 語句時不設(shè)定 where 從句,則表格中的所有記錄將全部被刪除。刪除數(shù)據(jù)庫表格在SQL

22、語言中使用drop table 命令刪除某個表格以及該表格中的所有記錄。Drop table 命令的使用格式為:drop table tablename ;例如:drop table employee;如果用戶希望將某個數(shù)據(jù)庫表格完全刪除,只需要在 drop table 命令后輸入希望刪除的表格名稱即可。 Drop table 命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而 且表格中列的信息不會改變。而使用 drop table 命令則會將整個數(shù)據(jù)庫表格的所有信息全部刪除。三、數(shù)據(jù)控件1、 ADO 數(shù)據(jù)控件1.1 ADO 對象模型ADO(ActiveX Da

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

24、描述Connection連接數(shù)據(jù)來源Command從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息Recordset所獲得的一組記錄組成的記錄集Error在訪問數(shù)據(jù)時,由數(shù)據(jù)源所返回的錯誤信息Parameter與命令對象有關(guān)的參數(shù)Field包含了記錄集中某個字段的信息要想在程序中使用 ADO對象,必須先為當(dāng)前工程引用ADO的對象庫。引用方式是執(zhí)行工程”菜單的引用"命令,啟動引用對話框,在清單中選取 “ Microsoft ActiveX Data Objects 2.0 Library 選項。1.2使用ADO數(shù)據(jù)控件在使用 ADO數(shù)據(jù)控件前,必須先通 過 工程|部件”菜單命令 選擇"Micr

25、osoft ADO Data Control 6.0QLEDB)'選項,將 ADO數(shù)據(jù)控件添加到工具箱。 ADO數(shù)據(jù)控件與 Visual Basic的內(nèi)部Data控件很 相似,它允許使用 ADO數(shù)據(jù)控件的基本屬性快速地創(chuàng)建與數(shù)據(jù)庫的連接。1 . ADO數(shù)據(jù)控件的基本屬性(1) ConnectionString 屬性ADO控件沒有 DatabaseName屬性,它使用 ConnectionString屬性與數(shù)據(jù)庫建立連接。該屬性包含了 用于與數(shù)據(jù)源建立連接的相關(guān)信息,ConnectionString屬性帶有4個參數(shù),如表9.7所示。(2) RecordSource 屬性RecordSou

26、rce確定具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中的單個表名,一個存儲查詢,也可以是使用SQL查詢語言的一個查詢字符串。表 9.7 ConnectionString 屬性參數(shù)參數(shù)描述Provide指定數(shù)據(jù)源的名稱FileName指定數(shù)據(jù)源所對應(yīng)的文件名RemoteProvide在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開一個客戶端時所用的數(shù)據(jù)源名稱7RemoteServer在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開一個主機(jī)端時所用的數(shù)據(jù)源名稱(3) ConnectionTimeout 屬性用于數(shù)據(jù)連接的超時設(shè)置,若在指定時間內(nèi)連接不成功顯示超時信息。(4) MaxRecords 屬性定義從一個查詢

27、中最多能返回的記錄數(shù)。2. ADO數(shù)據(jù)控件的方法和事件ADO數(shù)據(jù)控件的方法和事件與Data控件的方法和事件完全一樣。3 設(shè)置ADO數(shù)據(jù)控件的屬性下面通過使用 ADO數(shù)據(jù)控件連接Student.mdb數(shù)據(jù)庫來說明 ADO數(shù)據(jù)控件屬性的設(shè)置。步驟1在窗體上放置 ADO數(shù)據(jù)控件,控件名采用默認(rèn)名“ Adodcl。步驟2:單擊ADO控件屬性窗口中的 ConnectionString屬性右邊的“按鈕,彈出 屬性頁”對話框。 在該對話框中允許通過三種不同的方式連接數(shù)據(jù)源:使用連接字符串”只需要單擊 生成”按鈕,通過選項設(shè)置自動產(chǎn)生連接字符串。使用Data Link文件”表示通過一個連接文件來完成。使用OD

28、BC數(shù)據(jù)資源名稱”可以通過下拉式列表框,選擇某個創(chuàng)建好的數(shù)據(jù)源名稱(DSN),作為數(shù)據(jù)來源對遠(yuǎn)程數(shù)據(jù)庫進(jìn)行控制。步驟3:采用 使用連接字符串”方式連接數(shù)據(jù)源。單擊 生成”按鈕,打開 數(shù)據(jù)鏈接屬性”對話框。在 提 供者”選項卡內(nèi)選擇一個合適的OLE DB數(shù)據(jù)源,Student.mdb是Access數(shù)據(jù)庫,選擇“Microsoft Je 3.51 OLEDB Provider選項。然后單擊下一步”按鈕或打開 連接”選項卡,在對話框內(nèi)指定數(shù)據(jù)庫文件,這里為Student.mdb。為保證連接有效,可單擊連接”選項卡右下方的測試連接”按鈕,如果測試成功則關(guān)閉ConnectionString 屬性頁。步驟

29、4:單擊ADO控件屬性窗口中的 RecordSource屬性右邊的“按鈕,彈出記錄源屬性頁對話框。在命令類型"下拉式列表框中選擇“2adCmdTable”選項,在 表或存儲過程名稱"下拉式列表框中選擇Student.mdb數(shù)據(jù)庫中的 基本情況”表,關(guān)閉記錄源屬性頁。此時,已完成了ADO數(shù)據(jù)控件的連接工作。由于ADO數(shù)據(jù)控件是一個 ActiveX控件,也可以用鼠標(biāo)右鍵單擊ADO數(shù)據(jù)控件,在彈出的快捷菜單中選擇“ADODC屬性”菜單命令,打開ADO數(shù)據(jù)控件屬性頁對話框,一次完成步驟1步驟4的全部設(shè)置。1.3 ADO數(shù)據(jù)控件上新增綁定控件的使用隨著ADO對象模型的引入,Visua

30、l Basic 6.0除了保留以往的一些綁定控件外,又提供了一些新的成員來連接不同數(shù)據(jù)類型的數(shù)據(jù)。這些新成員主要有 DataGrid、DataCombo、DataList > DataReport、 MSHFlexGrid、MSChart控件和MonthView等控件。這些新增綁定控件必須使用ADO數(shù)據(jù)控件進(jìn)行綁定。Visual Basic 6.0在綁定控件上不僅對 DataSource和DataField屬性在連接功能上作了改進(jìn),又增加了 DataMember與 DataFormat屬性使數(shù)據(jù)訪問的隊列更加完整。DataMember屬性允許處理多個數(shù)據(jù)集,DataFormat屬性用于指

31、定數(shù)據(jù)內(nèi)容的顯示格式。例9.6使用ADO數(shù)據(jù)控件和 DataGrid數(shù)據(jù)網(wǎng)格控件瀏覽數(shù)據(jù)庫Student.mdb,并使之具有編輯功能。在窗體上放置 ADO數(shù)據(jù)控件,并按前面介紹的ADO數(shù)據(jù)控件屬性設(shè)置過程連接數(shù)據(jù)庫Student.mdb中的基本情況表。DataGrid控件允許用戶同時瀏覽或修改多個記錄的數(shù)據(jù)。在使用DataGrid控件前也必須先通過工程|部件”菜單命令選擇 “Microsoft DataGrid Control 6.0QLEDB)”選項,將 DataGrid控件添加到工具箱,再 將DataGrid控件放置到窗體上。設(shè)置DataGrid網(wǎng)格控件的 DataSource屬性為Ado

32、dc1,就可將 DataGrid1綁定到數(shù)據(jù)控件 Adodc1上。顯示在 DataGrid 網(wǎng)格內(nèi)的記錄集,可以通過 DataGrid 控件的 AllowAddNew、AllowDelete 和9AllowUpdate屬性設(shè)置控制增,刪、改操作。如果要改變 DataGrid網(wǎng)格上顯示的字段,可用鼠標(biāo)右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇檢索字段”選項。Visual Basic提示是否替換現(xiàn)有的網(wǎng)格布局,單擊是”按鈕就可將表中的字段裝載到DataGrid控件中。再次用鼠標(biāo)右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇編輯”選項,進(jìn)入數(shù)據(jù)網(wǎng)格字段布局的編輯狀態(tài),此時,當(dāng)鼠標(biāo)指在

33、字段名上時,鼠標(biāo)指針變成黑色向下箭頭。用鼠標(biāo)右鍵單擊需 要修改的字段名,在彈出的快捷菜單中選擇刪除”選項,就可從DataGrid控件中刪除該字段,也可選擇屬性”選項修改字段的顯示寬度或字段標(biāo)題。圖9.14所示為具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定。標(biāo)有“號的記錄行表示允許增加新記錄。冠ADOS件和D貳aGHd數(shù)禹網(wǎng)格學(xué)導(dǎo)姓名件別專業(yè)岀生年月亠020003陳誠剛男機(jī)電19B2-12-30020011林敏紅女機(jī)電1983-10-11110005劉云毅男計算機(jī)1382-2-21110009趙麗娜計算機(jī)1984-5-6010001李維娜數(shù)學(xué)1983-12-23米Adodc!> kl圖9.14具有增、

34、刪、改功能的數(shù)據(jù)網(wǎng)格綁定2、Data控件Data 控件是Visual Basic訪問數(shù)據(jù)庫的一種利器,它能夠利用三種Recordset對象來訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)控件提供有限的不需編程而能訪問現(xiàn)存數(shù)據(jù)庫的功能,允許將Visual Basic的窗體與數(shù)據(jù)庫方便地進(jìn)行連接。要利用數(shù)據(jù)控件返回數(shù)據(jù)庫中記錄的集合,應(yīng)先在窗體上畫出控件,再通過它的三個基本屬性Connect、DatabaseName和RecordSource設(shè)置要訪問的數(shù)據(jù)資源。2.1 Data控件屬性1. Connect 屬性Connect屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫類型,Visual Basic默認(rèn)的數(shù)據(jù)庫是 Access的M

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

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

37、基本情況表中所有物理系學(xué)生 的數(shù)據(jù)。4. RecordType 屬性RecordType屬性確定記錄集類型。5. EofAction 和 BofAction 屬性當(dāng)記錄指針指向 Recordset對象的開始(第一個記錄前)或結(jié)束(最后一個記錄后 )時,數(shù)據(jù)控件的 EofAction和BofAction屬性的設(shè)置或返回值決定了數(shù)據(jù)控件要采取的操作。屬性的取值如表9.1所示。表 9.1 EofAction 和 BofAction 屬性屬性取值操作BofAction0控件重定位到第一個記錄1移過記錄集開始位,定位到一個無效記錄,觸發(fā)數(shù)據(jù)控件對第一個記錄的無效事件 ValidateEofAction0

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

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

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

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

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

43、代碼就可以實(shí)現(xiàn)多條記錄數(shù)據(jù)顯示。 當(dāng)把數(shù)據(jù)網(wǎng)格控件的DataSource屬性設(shè)置為一個 Data控件時,網(wǎng)格控件會被自動地填充,并且其列標(biāo)題會用Data控件的記錄集里的數(shù)據(jù)自動地設(shè)置。2.2 data控件與MsFlexGrid 控件結(jié)合顯示數(shù)據(jù)庫中信息例9.3 用數(shù)據(jù)網(wǎng)格控件 MsFlexGrid顯示Student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。MsFlexGrid控件不是Visual Basic工具箱內(nèi)的默認(rèn)控件, 需要在開發(fā)環(huán)境中選擇工程|部件”菜單命令,并在隨即出現(xiàn)的對話框中選擇“Microsoft FlexGrid Control 6.0 選項,將其添加到工具箱中。本例所用控件的屬性

44、設(shè)置如表 9.4所示。請讀者自行比較不可卷動列屬性FixedCols=0與FixedCols=1的區(qū)別。Form啟動后自動顯示如圖 9.9所示窗口。表9.4 控件屬性默認(rèn)控件名其它屬性設(shè)置DatalDatabaseName=w cstudent.mdb ”RecordsetType=0RecordSource=基本情況”MSFlexGridlDataSource=Data1FixCols=0-! x|出生年月196312-23學(xué)號 姓名 |性別 |專業(yè)010001 李錐娜 吉數(shù)學(xué)010010 010U14 020003 0200111983 7141982-11-11陳誠剛林堿紅19B2-12

45、-30 19B3-10-111AR2-VF27 blH 4 iDatal圖9.9使用數(shù)據(jù)網(wǎng)格控件2.3數(shù)據(jù)控件的常用方法數(shù)據(jù)控件的內(nèi)置功能很多,可以在代碼中用數(shù)據(jù)控件的方法訪問這些屬性。1. Refresh 方法如果在設(shè)計狀態(tài)沒有為打開數(shù)據(jù)庫控件的有關(guān)屬性全部賦值,或當(dāng)RecordSource在運(yùn)行時被改變后,必須使用數(shù)據(jù)控件的Refresh方法激活這些變化。在多用戶環(huán)境下,當(dāng)其他用戶同時訪問同一數(shù)據(jù)庫和表時,Refresh方法將使各用戶對數(shù)據(jù)庫的操作有效。例如:將例9.2的設(shè)計參數(shù)改用代碼實(shí)現(xiàn),使所連接數(shù)據(jù)庫所在的文件夾可隨程序而變化:Private Sub Form_Load()Dim m

46、path As Stri ngMpath=App.Path'獲取當(dāng)前路徑If Right(mpath,1)<> ” /” Then mpath=mpath+ ” /”Data1.DatabaseName=mpath+ ” Student.mdb”'連接數(shù)據(jù)庫Data1.RecordSource=基本情況”'構(gòu)成記錄集對象Datal.Refresh'激活數(shù)據(jù)控件End Sub2. UpdateControls 方法UpdateControls方法可以將數(shù)據(jù)從數(shù)據(jù)庫中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用 UpdateControls方法終止用戶

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

48、utePosition屬性AbsolutePosition返回當(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)行查找時,如果找到相匹配的記錄,則Recordset的NoMatch屬性為

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

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

51、rstEnd Sub命令按鈕 Command4_Click 事件移至最后一條記錄,代碼如下:Private Sub Command4_Click()Data1.Recordset.MoveLastEnd Sub另外兩個按鈕的代碼需要考慮 Recordset 對象的邊界的首尾, 如果越界, 則用 MoveFirst 方法定位到第 1 條記錄或用 MoveLast 方法定位到最后一條記錄。程序代碼如下:Private Sub Command2_Click()Data1.Recordset.MovePreviousIf Data1.Recordset.BOF Then Data1.Recordset

52、.MoveFirstEnd SubPrivate Sub Command3_Click()Data1.Recordset.MoveNextIf Data1.Recordset.EOF Then Data1.Recordset.MoveLastEnd Sub7Find 方法使用Find方法可在指定的 Dynaset或Snapshot類型的Recordset對象中查找與指定條件相符的一條記 錄,并使之成為當(dāng)前記錄。 4 種 Find 方法是:(1) FindFirst 方法:從記錄集的開始查找滿足條件的第1 條記錄。(2) FindLast 方法:從記錄集的尾部向前查找滿足條件的第 l 條記錄。(

53、3) FindNext 方法:從當(dāng)前記錄開始查找滿足條件的下一條記錄。(4) FindPrevious 方法:從當(dāng)前記錄開始查找滿足條件的上一條記錄。4種Find方法的語法格式相同:數(shù)據(jù)集合 .Find 方法 條件搜索條件是一個指定字段與常量關(guān)系的字符串表達(dá)式。在構(gòu)造表達(dá)式時,除了用普通的關(guān)系運(yùn)算外, 還可以用 Like 運(yùn)算符。例如:語句“Data1.Recordset.FindFirst 專業(yè) ='物理 '”表示在由 Data1 數(shù)據(jù)控件所連接 的數(shù)據(jù)庫Student.mdb 的記錄集內(nèi)查找專業(yè)為 “物理 ”的第 l 條記錄。這里, “專業(yè)”為數(shù)據(jù)庫 Student 記錄集

54、中的字段 名,在 該字段中 存放專業(yè)名稱信息。要想查找下一條符合條件的記錄,可繼續(xù)使用語 句: ”Data1.Recordset.FindNext 專業(yè) ='物理 '?!庇掷纾阂谟涗浖瘍?nèi)查找專業(yè)名稱中帶有 “建”字的專業(yè) :Data1.Recordset.FindFirst 專業(yè) Like ”建* ”字符串 “*建*”匹配字段專業(yè)中帶有 “建”字字樣的所有專業(yè)名稱字符串。需要指出的是 Find 方法在找不到相匹配的記錄時,當(dāng)前記錄保持在查找的始發(fā)處,NoMatch 屬性為True。如果Find方法找到相匹配的記錄,則記錄定位到該記錄,Recordset的NoMatch屬性為

55、Falseo8. Seek方法使用Seek方法必須打開表的索引,它在Table表中查找與指定索引規(guī)則相符的第1條記錄,并使之成為當(dāng)前記錄。其語法格式為:數(shù)據(jù)表對象.seek comparison,keyl,key2Seek允許接受多個參數(shù),第1個是比較運(yùn)算符comparison , Seek方法中可用的比較運(yùn)算符有=、=、<>、<、 <=等。在使用 Seek 方法定位記錄時,必須通過 Index 屬性設(shè)置索引。若在記錄集中多次使用同樣的Seek 方例如:假設(shè)數(shù)據(jù)庫 條記錄可使用以下程序代碼: Data1.RecordsetType = 0 Data1.RecordSou

56、rce = " 基本情況 " Data1.Refresh Data1.Recordset.Index = "jbqk _no" Data1.Recordset.Seek ">=", "110001"法 (參數(shù)相同 ),那么找到的總是同一條記錄。110001 的第 1Student內(nèi)基本情況表的索引字段為學(xué)號,滿足學(xué)號字段值大于等于'設(shè)置記錄集類型為 Table'打開基本情況表單'打開名稱為 jbqk_no 的索引2.5 數(shù)據(jù)庫記錄的增、刪、改操作Data 控件是瀏覽表格并編輯表格的好工具,但怎么輸入新信息或刪除現(xiàn)有記錄呢?這需要編寫幾行代碼,否則無法在 Data 控件上完成數(shù)據(jù)輸入。 數(shù)據(jù)庫記錄的增、 刪、改操作需要使用 AddNew 、Delete、Edit、 Update 和 Refresh 方法。它們的語法格式為:數(shù)據(jù)控件 .記錄集 .方法名1增加記錄AddNew 方法在記錄集中增加新記錄。增加記錄的步驟為:(1) 調(diào)用 AddNew 方法。(2

溫馨提示

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

最新文檔

評論

0/150

提交評論