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

下載本文檔

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

文檔簡介

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

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

3、,用數(shù)據(jù)源名來代表用戶名、服務器名、所連接的數(shù)據(jù)庫名等,可以將數(shù)據(jù)源名看成是與一個具體數(shù)據(jù)庫建立的連接。數(shù)據(jù)源分為以下三類:(1) 用戶數(shù)據(jù)源:用戶創(chuàng)建的數(shù)據(jù)源,稱為“用戶數(shù)據(jù)源 ”。此時 只有創(chuàng)建者才能使用,并且只能在所定義的機器上運行。任何用戶都不能使用其他用戶創(chuàng)建的用戶數(shù)據(jù)源。(2) 系統(tǒng)數(shù)據(jù)源:所有用戶和在Windows NT 下以服務方式運行的應用程序均可使用系統(tǒng)數(shù)據(jù)源。(3) 文件數(shù)據(jù)源:文件數(shù)據(jù)源是ODBC3.0 以上版本增加的一種數(shù)據(jù)源,可用于企業(yè)用戶,ODBC驅動程序也安裝在用戶的計算機上。(與機器無關 )二、 SQL 語言基礎創(chuàng)建表格SQL語言中的create table語

4、句被用來建立新的數(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 table employee(firstname

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

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

7、小數(shù)點后的位數(shù)。最后,在創(chuàng)建新表格時需要注意的一點就是表格中列的限制條件。所謂限制條件就是當向特定列輸入數(shù)據(jù)時所必須遵守的規(guī)則。 例如, unique 這一限制條件要求某一列中不能存在兩個值相同的記錄,所有記錄的值都必須是唯一的。 除 unique 之外,較為常用的列的限制條件還包括not null 和 primary key 等。Not null用來規(guī)定表格中某一列的值不能為空。Primary key則為表格中的所有記錄規(guī)定了唯一的標識符。查詢簡單的 SQL 查詢只包括選擇列表、FROM 子句和 WHERE 子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。完整結構:Select

8、All/Distinct< 目標表達式 > < 目標表達式 > From< 表名 > , <表名 > Where< 條件表達式 >Group by < 列名 1>Having< 條件表達式 >Order by < 列名 2> Asc/Desc Group by :按列名1 的值進行分組,屬性值相等的為一個組,如果帶Having 短句,表示只有滿足指定條件的才輸出。例如,下面的語句查詢testtable 表中姓名為 “張三 ”的 nickname 字段和 email 字段。SELECT nicknam

9、e,emailFROM testtableWHERE name=' 張三 '(一 ) 選擇列表選擇列表 (select_list) 指出所查詢列,它可以是一組列名列表、星號、表達式、變量(包括局部變-2精選文庫量和全局變量)等構成。1、選擇所有列例如,下面語句顯示testtable 表中所有列的數(shù)據(jù):SELECT *FROM testtable2、選擇部分列并指定它們的顯示次序查詢結果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:SELECT nickname,emailFROM testtable3、更改列標題在選擇列表中,可重新指定列標題。定義格式為:列標

10、題 =列名列名列標題如果指定的列標題不是標準的標識符格式時,應使用引號定界符,例如,下列語句使用漢字顯示列標題:SELECT昵稱 =nickname, 電子郵件 =emailFROM testtable4、刪除重復行SELECT 語句中使用ALL或 DISTINCT選項來顯示表中符合條件的所有行或刪除其中重復的數(shù)據(jù)行,默認為 ALL 。使用 DISTINCT選項時,對于所有重復的數(shù)據(jù)行在SELECT 返回的結果集合中只保留一行。5、限制返回的行數(shù)使用 TOP n PERCENT 選項限制返回的數(shù)據(jù)行數(shù),TOP n 說明返回 n 行,而 TOP n PERCENT 時,說明n是表示一百分數(shù),指定

11、返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECT TOP 2 *FROM testtableSELECT TOP 20 PERCENT *FROM testtable(二 )FROM 子句FROM 子句指定SELECT 語句查詢及與查詢相關的表或視圖。在FROM 子句中最多可指定256 個表或視圖,它們之間用逗號分隔。在 FROM 子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列所屬的表或視圖。例如在usertable 和 citytable 表中同時存在cityid 列,在查詢兩個表中的cityid 時應使用下面語句格式加以限定:SELECT usernam

12、e,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名表名 別名(二 ) FROM 子句-3精選文庫FROM 子句指定 SELECT 語句查詢及與查詢相關的表或視圖。在 FROM 子句中最多可指定 256 個表或視圖,它們之間用逗號分隔。在 FROM 子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列所屬的表或視圖。例如在usertable 和 citytable 表中同時存在cityi

13、d 列,在查詢兩個表中的cityid 時應使用下面語句格式加以限定:SELECT username,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名as 別名表名別名例如上面語句可用表的別名格式表示為:SELECT username,b.cityidFROM usertable a,citytable bWHERE a.cityid=b.cityidSELECT 不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結果集

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 返回的結果集合給予一別名t,然后再從中檢索數(shù)據(jù)。(三 ) 使用 WHERE 子句設置查詢條件WHERE 子句設置查詢條件,過濾掉不需要的數(shù)據(jù)行。例如下面語句查詢年齡大于20 的數(shù)據(jù):SELECT *FROM userta

15、bleWHERE age>20WHERE 子句可包括各種條件運算符:比較運算符 (大小比較 ): >、 >=、 =、<、 <=、 <>、 !> 、 !<范圍運算符 (表達式值是否在指定的范圍): BETWEENANDNOT BETWEEN AND列表運算符 (判斷表達式是否為列表中的指定項): IN ( 項 1,項 2)NOT IN ( 項 1,項 2)模式匹配符 (判斷值是否與指定的字符通配格式相符):LIKE 、NOT LIKE空值判斷符 (判斷表達式是否為空):IS NULL 、 NOT IS NULL邏輯運算符 (用于多條件的邏輯連

16、接): NOT 、AND 、 OR1、范圍運算符例:age BETWEEN 10 AND 30相當于 age>=10 AND age<=302、列表運算符例:country IN ('Germany','China')3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于 char、varchar、text 、 ntext、 datetime 和 smalldatetime 等類型查詢。-4精選文庫可使用以下通配字符:百分號 %:可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即%。下劃線 _:匹配單個任意字符,它常

17、用來限制表達式的字符長度。方括號 :指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。 :其取值也 相同,但它要求所匹配對象為指定字符以外的任一個字符。例如:限制以 Publishing 結尾,使用LIKE '%Publishing'限制以 A 開頭: LIKE 'A%'限制以 A 開頭外: LIKE 'A%'4、空值判斷符例WHERE age IS NULL5、邏輯運算符:優(yōu)先級為NOT 、 AND 、 OR(四 )查詢結果排序使用 ORDER BY 子句對查詢返回的結果按一列或多列排序。ORDER BY 子句的語法格式為:ORDER

18、 BY column_name ASC|DESC , n其中 ASC 表示升序,為默認值,DESC 為降序。 ORDER BY不能按 ntext、 text 和 image 數(shù)據(jù)類型進行排序。例如:SELECT *FROM usertableORDER BY age desc,userid ASC另外,可以根據(jù)表達式進行排序。向表格中插入數(shù)據(jù)SQL語言使用 insert 語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。Insert 語句的使用格式如下: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”);簡單來說,當向數(shù)據(jù)庫表格中添加新記錄時,在關鍵詞insert into后面輸入所要添加的表格名稱,然后在括號中列出將要添加新值的列的名稱。最后,在關鍵詞values的后面按照前面輸入的列的順序對應的輸入所有要添加的記錄值。更新記錄SQL語言使用update 語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。Update 語句的格式為:update tablenam

20、eset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value; 例如:update employee-5精選文庫set age = age+1where first_name=Maryand last_name=Williams ;使用 update 語句時,關鍵一點就是要設定好用于進行判斷的where 條件從句。刪除記錄SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete 語句的格式為:delete from t

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

22、able tablename;例如:drop table employee;如果用戶希望將某個數(shù)據(jù)庫表格完全刪除,只需要在drop table命令后輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會改變。而使用drop table命令則會將整個數(shù)據(jù)庫表格的所有信息全部刪除。三、數(shù)據(jù)控件1、 ADO 數(shù)據(jù)控件1.1 ADO對象模型ADO(ActiveXData Object) 數(shù)據(jù)訪問接口是Microsoft 處理數(shù)據(jù)庫信息的最新技術。它是一種ActiveX對象,采用了被稱為OLE DB 的數(shù)據(jù)訪

23、問模式,是數(shù)據(jù)訪問對象DAO 、遠程數(shù)據(jù)對象RDO 和開放數(shù)據(jù)庫互連 ODBC 三種方式的擴展。 ADO 對象模型定義了 個可編程的分層對象集合,主要由三個對象成員 Connection 、Command 和 Recordset 對象,以及幾個集合對象 Errors 、Parameters 和 Fields 等所組成。 圖 9.13示意了這些對象之間的關系。表9.6 是對這些對象的分工描述。-6精選文庫Connection 對象Error集合Error對象Command對象Parameter 集合Parameter 對象Recordset對象Field集合Field對象圖 9.13 ADO 對

24、象模型表9.6 ADO對象描述對象名描 述ConnectionCommandRecordsetErrorParameterField連接數(shù)據(jù)來源從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息所獲得的一組記錄組成的記錄集在訪問數(shù)據(jù)時,由數(shù)據(jù)源所返回的錯誤信息與命令對象有關的參數(shù)包含了記錄集中某個字段的信息要想在程序中使用ADO對象,必須先為當前工程引用ADO的對象庫。 引用方式是執(zhí)行“工程 ”菜單的“引用 ”命令,啟動引用對話框,在清單中選取“ MicrosoftActiveXDataObjects 2.0 Library選項”。1.2 使用 ADO 數(shù)據(jù)控件在使用 6.0(OLEDB)ADO數(shù)據(jù)控件前,必須先

25、通過“工程”選項,將ADO 數(shù)據(jù)控件添加到工具箱。|部件 ”菜單命令選擇"MicrosoftADO 數(shù)據(jù)控件與VisualBasicADO 的內(nèi)部DataDataControl 控件很相似,它允許使用ADO 數(shù)據(jù)控件的基本屬性快速地創(chuàng)建與數(shù)據(jù)庫的連接。1 ADO數(shù)據(jù)控件的基本屬性(1)ConnectionString屬性ADO 控件沒有DatabaseName 屬性,它使用ConnectionString 屬性與數(shù)據(jù)庫建立連接。該屬性包含了用于與數(shù)據(jù)源建立連接的相關信息,ConnectionString 屬性帶有4 個參數(shù),如表9.7 所示。(2)RecordSource屬性Reco

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

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

28、ata Link 文件 ”表示通過 個連接文件來完成?!笆褂?ODBC 數(shù)據(jù)資源名稱 ”可以通過下拉式列表框,選擇某個創(chuàng)建好的數(shù)據(jù)源名稱(DSN) ,作為數(shù)據(jù)來源對遠程數(shù)據(jù)庫進行控制。步驟 3:采用 “使用連接字符串”方式連接數(shù)據(jù)源。 單擊 “生成 ”按鈕,打開 “數(shù)據(jù)鏈接屬性”對話框。在 “提供者 ”選項卡內(nèi)選擇一個合適的OLE DB 數(shù)據(jù)源,Student.mdb 是 Access 數(shù)據(jù)庫,選擇 “Microsoft Jet 3.51 OLEDBProvider 選”項。然后單擊“下 步 ”按鈕或打開“連接 ”選項卡,在對話框內(nèi)指定數(shù)據(jù)庫文件,這里為Student.mdb 。為保證連接有效

29、,可單擊“連接 ”選項卡右下方的“測試連接 ”按鈕,如果測試成功則關閉ConnectionString 屬性頁。步驟 4:單擊 ADO 控件屬性窗口中的RecordSource 屬性右邊的 “”按鈕,彈出記錄源屬性頁對話框。在 “命令類型 ”下拉式列表框中選擇“2adCmdTable ”選項,在 “表或存儲過程名稱”下拉式列表框中選擇Student.mdb 數(shù)據(jù)庫中的 “基本情況 ”表,關閉記錄源屬性頁。此時,已完成了ADO 數(shù)據(jù)控件的連接工作。由于 ADO 數(shù)據(jù)控件是一個ActiveX 控件,也可以用鼠標右鍵單擊ADO 數(shù)據(jù)控件, 在彈出的快捷菜單中選擇 “ADODC 屬性 ”菜單命令, 打

30、開 ADO 數(shù)據(jù)控件屬性頁對話框,一次完成步驟1步驟 4 的全部設置。1.3ADO 數(shù)據(jù)控件上新增綁定控件的使用隨著 ADO 對象模型的引入,Visual Basic 6.0 除了保留以往的一些綁定控件外,又提供了一些新的成員來連接不同數(shù)據(jù)類型的數(shù)據(jù)。這些新成員主要有DataGrid 、 DataCombo 、 DataList 、 DataReport 、MSHFlexGrid 、MSChart 控件和 MonthView 等控件。 這些新增綁定控件必須使用ADO 數(shù)據(jù)控件進行綁定。Visual Basic 6.0 在綁定控件上不僅對DataSource 和 DataField 屬性在連接功

31、能上作了改進,又增加了DataMember 與 DataFormat 屬性使數(shù)據(jù)訪問的隊列更加完整。DataMember 屬性允許處理多個數(shù)據(jù)集,DataFormat 屬性用于指定數(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ù)據(jù)庫Student.mdb中的基本情況表。DataGrid 控件允許用戶同時瀏覽或修改多個記錄的數(shù)據(jù)。在使用DataGrid 控件前也必須先通過“工程 |部件 ”菜單命令選擇“MicrosoftDataG

32、ridControl 6.0(OLEDB)”選項,將DataGrid 控件添加到工具箱,再將 DataGrid 控件放置到窗體上。設置 DataGrid 網(wǎng)格控件的 DataSource 屬性為 Adodc1 ,就可將 DataGrid1綁定到數(shù)據(jù)控件Adodc1 上。顯示在DataGrid網(wǎng)格內(nèi)的記錄集,可以通過DataGrid控件的AllowAddNew、 AllowDelete和-8精選文庫AllowUpdate 屬性設置控制增,刪、改操作。如果要改變DataGrid 網(wǎng)格上顯示的字段,可用鼠標右鍵單擊DataGrid 控件,在彈出的快捷菜單中選擇 “檢索字段 ”選項。 Visual B

33、asic 提示是否替換現(xiàn)有的網(wǎng)格布局,單擊“是 ”按鈕就可將表中的字段裝載到DataGrid 控件中。再次用鼠標右鍵單擊 DataGrid 控件,在彈出的快捷菜單中選擇 “編輯 ”選項,進入數(shù)據(jù)網(wǎng)格字段布局的編輯狀態(tài),此時,當鼠標指在字段名上時,鼠標指針變成黑色向下箭頭。用鼠標右鍵單擊需要修改的字段名, 在彈出的快捷菜單中選擇 “刪除 ”選項, 就可從 DataGrid 控件中刪除該字段, 也可選擇 “屬性 ”選項修改字段的顯示寬度或字段標題。圖 9.14 所示為具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定。標有號的記錄行表示允許增加新記錄。圖 9.14具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定2、Data 控件D

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

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

36、fox.dbf,則 DatabaseName=”C: VB6”, RecordSource=”stu_fox.dbf ,”stu_fox 數(shù)據(jù)庫只含有一個表。3 RecordSource 屬性RecordSource 確定具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構成記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中-9精選文庫的單個表名, 個存儲查詢,也可以是使用SQL 查詢語言的一個查詢字符串。例 如 , 要 指 定Student.mdb數(shù) 據(jù) 庫 中 的 基 本 情 況 表 , 則RecordSource=”基 本 情 況 ”。 而RecordSource= ” SelectFrom 基本情況 Whe

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

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

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

40、的空記錄。例 9.1 建立 student.mdb 數(shù)據(jù)庫, 它包含兩個表: “基本情況 ”表和 “學生成績表 ”。參見表 9.2 和表 9.3。表 9.2 學生基本情況表結構字段名類型寬度學號Text6姓名Text10性別Text2-10精選文庫專業(yè)Text10出生年月Date8照片Binary0表 9.3學生成績表結構字段名類型寬度學號Text6課程Text10成績Long4學期Text2用可視化數(shù)據(jù)管理器建立以上設計的數(shù)據(jù)庫及其表,表中數(shù)據(jù)可自行錄入。例 9.2設計一個窗體用以顯示建立的student.mdb 數(shù)據(jù)庫中基本情況表的內(nèi)容。基本情況表包含了6 個字段,故需要用6 個綁定控件與

41、之對應。這里用一個圖形框顯示照片和5 個文本框顯示學號、姓名等數(shù)據(jù)。本例中不需要編寫任何代碼,具體操作步驟如下:(1)參考如圖 9.8 所示窗體,在窗體上放置 1 個數(shù)據(jù)控件,一個圖形框、 5 個文本框和 5 個標簽控件。 5 個標簽控件分別給出相關的提示說明。圖 9.8 顯示 Student.mdb 基本情況表的數(shù)據(jù)(2)將數(shù)據(jù)控件Data1 的 Connect 屬性指定為Access 類型,DatabaseName 屬性連接數(shù)據(jù)庫Student.mdb,RecordSource 屬性設置為 “基本情況 ”表。(3)圖形框和5 個文本框控件Text1 Text5 的 DataSource 屬

42、性都設置成Data1。通過單擊這些綁定控件的 DataField 屬性上的 “”按鈕, 將下拉出基本情況表所含的全部字段,分別選擇與其對應的字段照片、學號、姓名、性別、專業(yè)和出生年月,使之建立約束關系。運行該工程即可出現(xiàn)圖 9.8 所示效果。 5 個文本框分別顯示基本情況表內(nèi)的字段:學號、姓名、性別、專業(yè)和出生年月的內(nèi)容,圖形框顯示每個學生的照片。使用數(shù)據(jù)控件對象的4 個箭頭按鈕可遍歷整個記錄集中的記錄。單擊最左邊的按鈕顯示第l 條記錄;單擊其旁邊的按鈕顯示上一條記錄;單擊最右邊的按鈕顯示最后一條記錄;單擊其旁邊的按鈕顯示下 條記錄。數(shù)據(jù)控件除了可以瀏覽Recordset 對象中的記錄外,同時

43、還可以編輯數(shù)據(jù)。如果改變了某個字段的值,只要移動記錄,這時所作的改變存入數(shù)據(jù)庫中。Visual Basic 6.0 提供了幾個比較復雜的網(wǎng)格控件,幾乎不用編寫代碼就可以實現(xiàn)多條記錄數(shù)據(jù)顯示。當把數(shù)據(jù)網(wǎng)格控件的 DataSource 屬性設置為一個 Data 控件時,網(wǎng)格控件會被自動地填充,并且其列標題會用 Data 控件的記錄集里的數(shù)據(jù)自動地設置。2.2data 控件與 MsFlexGrid控件結合顯示數(shù)據(jù)庫中信息例 9.3 用數(shù)據(jù)網(wǎng)格控件 MsFlexGrid 顯示 Student.mdb 數(shù)據(jù)庫中基本情況表的內(nèi)容。MsFlexGrid 控件不是Visual Basic 工具箱內(nèi)的默認控件,

44、需要在開發(fā)環(huán)境中選擇“工程 |部件 ”菜單命令,-11精選文庫并在隨即出現(xiàn)的對話框中選擇“MicroSoft FlexGrid Control 6.0選項”,將其添加到工具箱中。本例所用控件的屬性設置如表9.4 所示。請讀者自行比較不可卷動列屬性FixedCols=0 與 FixedCols=1 的區(qū)別。 Form 啟動后自動顯示如圖9.9 所示窗口。表 9.4 控件屬性默認控件名其它屬性設置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ù)控件的方法訪問這些屬性。1 Refresh 方法如果在設計狀態(tài)沒有為打開數(shù)據(jù)庫控件的有關屬性全部賦值,或當RecordSource 在運行時被改變后,必須使用數(shù)據(jù)控件的Refresh 方法激活這些變化。在多用戶環(huán)境下,當其他用戶同時訪問同一數(shù)據(jù)庫和表時, Refresh 方法將使各用戶對數(shù)據(jù)庫的操作有效。例如:將例9.2 的設計參數(shù)改用代碼實現(xiàn),使所連接數(shù)據(jù)庫所在的文件夾可隨程序而變化:Private Sub Form_Load( )Dim mpath As StringMpath=App.

46、Path獲取當前路徑If Right(mpath,1)<>” / ” Then mpath=mpath+” / ”Data1.DatabaseName=mpath+” Student.mdb”連接數(shù)據(jù)庫Data1.RecordSource= 基本”情況 ”構成記錄集對象Data1.Refresh激活數(shù)據(jù)控件End Sub2 UpdateControls方法UpdateControls方法可以將數(shù)據(jù)從數(shù)據(jù)庫中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用UpdateControls 方法終止用戶對綁定控件內(nèi)數(shù)據(jù)的修改。例如:將代碼 Data1.UpdateControts 放在一個命

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

48、當前指針值,如果是第1 條記錄,其值為0,該屬性為只讀屬性。2 Bof 和 Eof 的屬性Bof 判定記錄指針是否在首記錄之前,若Bof 為 True,則當前位置位于記錄集的第1 條記錄之前。與此類似, Eof 判定記錄指針是否在末記錄之后。3 Bookmark 屬性Bookmark 屬性的值采用字符串類型,用于設置或返回當前指針的標簽。在程序中可以使用Bookmark屬性重定位記錄集的指針,但不能使用AbsolutePostion 屬性。4 Nomatch 屬性在記錄集中進行查找時,如果找到相匹配的記錄,則 Recordset 的 NoMatch 屬性為 False,否則為 True。該屬性常與Bookmark 屬性一起使用。5 RecordCount 屬性RecordCount 屬性對 Recordset 對象中的記錄計數(shù), 該屬

溫馨提示

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

評論

0/150

提交評論