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

下載本文檔

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

文檔簡介

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

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

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

4、言基礎創(chuàng)建表格SQL語言中的create table語句被用來建立新的數據庫表格。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)建新表格時,在關鍵詞 create table 后面加入所要建立的表格的名稱,然后在括號內順次設定各列的名稱,數據類型,以及可選的限制條件等。注意,所有的SQL語句在結尾處都要使用“ ”符號。使用SQL語句創(chuàng)建的數據庫表格和表格中列的名稱必須以字母開頭,后面可以使用字母,數字或下劃線, 名稱的長度不能超過 30個字符。注意,用戶在選擇表格名稱時不要使用SQL語言

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

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

8、 子句。它們分別說明所查詢列、查詢的 表或視圖、以及搜索條件等。完整結構:Select All/Distinct< 目標表達式 > < 目標表達式 >From<表名 >, <表名 >Where<條件表達式>Group by < 列名 1>Having< 條件表達式 >Order by < 列名 2> Asc/Desc Group by :按列名 1 的值進行分組,屬性值相等的為一個組,如果帶 Having 短句,表示只有滿足指定條 件的才輸出。例如,下面的語句查詢 testtable表中姓名為 張三

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

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

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

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

13、屬的表或視圖。例如在 usertable 和 citytable 表中同時存在 cityid 列,在查詢兩個表中的 cityid 時應 使用下面語句格式加以限定: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 不僅能從表或視圖中檢索數據,它還能夠從其它查詢語句所返回的結果集合中查詢數據。 例如: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 返回的結果集合給予一別名t ,然后再從中檢索數據。(三 ) 使用 WHERE 子句設置查詢條件WHERE

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

16、E 空值判斷符 (判斷表達式是否為空 ): IS NULL 、NOT IS NULL 邏輯運算符 (用于多條件的邏輯連接 ): NOT、AND、OR1、 范圍運算符例:age BETWEEN 10 AND 30 相當于 age>=10 AND age<=302、 列表運算符例:country IN ('Germany','China')3、 模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于char、 varchar 、 text 、 ntext 、 datetime 和 smalldatetime 等類型查詢。可使用以下通

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

18、 ORDER BY 子句對查詢返回的結果按一列或多列排序。 ORDER BY 子句的語法格式為:ORDER BY column_name ASC|DESC,n其中ASC表示升序,為默認值,DESC為降序。ORDER BY不能按ntext、text和image數據類型進行排序。例如:SELECT *FROM usertableORDER BY age desc,userid ASC 另外,可以根據表達式進行排序。向表格中插入數據SQL語言使用insert語句向數據庫表格中插入或添加新的數據行。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 ”);簡單來說,當向數據庫表格中添加新記錄時,在關鍵詞 insert into 后面輸入所要添加的表格名稱,然后 在括號中列出將要添加新值的列的名稱。最后,在關鍵詞values 的后面按照前面輸入的列的順序對應的輸入所有要添加的記錄值。更新記錄SQL語言使用

20、update語句更新或修改滿足規(guī)定條件的現有記錄。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 語句時,關鍵一點就是要設定好用于進行判斷的 where 條件從句。刪除記錄

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

50、條記錄。(4) MovePrevious方法:移至上一條記錄。(5) Move n方法向前或向后移n條記錄,n為指定的數值。例9.4 在窗體上用4個命令按鈕代替例 9.2數據控件對象的4個箭頭按鈕的操作。在例9.2的基礎上,窗體上增加4個命令按鈕,將數據控件的 Visible屬性設置為False,如圖9.10所示。通過對4個命令按鈕的編程代替對數據控件對象的4個箭頭按鈕的操作。圖 9.10 用按鈕代替數據控件對象的箭頭按鈕命令按鈕 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對象中查找與指定條件相符的一條記 錄,并使之成為當前記錄。 4 種 Find 方法是:(1) FindFirst 方法:從記錄集的開始查找滿足條件的第1 條記錄。(2) FindLast 方法:從記錄集的尾部向前查找滿足條件的第 l 條記錄。(

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

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

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

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

溫馨提示

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

評論

0/150

提交評論