




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VB數(shù)據(jù)庫編程技術(shù)實例VB數(shù)據(jù)庫編程技術(shù)ODBC 概述ODBC 是一套開放數(shù)據(jù)庫系統(tǒng)應用程序接口規(guī)范, 目前它已成為一種工業(yè)標準, 它提供了統(tǒng)一的數(shù)據(jù) 庫應用編程接口 (API) ,為應用程序 提供了一套高層調(diào)用接口規(guī)范和基于動態(tài)連接庫的運行支持環(huán)境。使用ODBC 開發(fā)數(shù)據(jù)庫應用時, 應用程序調(diào)用的是標準的 ODBC 函數(shù)和 SQL 語句,屏蔽了 DBMS 之間的差 異,數(shù)據(jù)庫底層操作由各個數(shù)據(jù)庫的驅(qū)動程序完成 。因此應用程序有很好的適應性和可移植性,并且具備 了同時訪問多種數(shù)據(jù)庫管理系統(tǒng)的能力,從而徹底克服了傳統(tǒng)數(shù)據(jù)庫應用程序的缺陷。CIhNj 。主要任務(wù)包括:建立與數(shù)據(jù)源的連接;向數(shù)據(jù)源發(fā)
2、送SQL請求;斷開與數(shù)據(jù)源的連接數(shù)據(jù)源數(shù)據(jù)源是指任一種可以通過 ODBC 連接的數(shù)據(jù)庫管理系統(tǒng), 它包括要訪問的數(shù)據(jù)庫和數(shù)據(jù)庫的運行平 臺。數(shù)據(jù)源名掩蓋了數(shù)據(jù)庫服務(wù)器或數(shù)據(jù)庫文件間的差別,通過定義多個數(shù)據(jù)源,每個數(shù)據(jù)源指向一個服 務(wù)器名,就可在應用程序中實現(xiàn)同時訪問多個 DBMS 的目的。 Any6R。數(shù)據(jù)源(Data Source Name,簡稱DSN)是驅(qū)動程序與 DBS連接的橋梁,數(shù)據(jù)源不是DBS,而是用于表達一個 ODBC 驅(qū)動程序和 DBMS 特殊連接的命名。在連接中,用數(shù)據(jù)源名來代表用戶名、服務(wù)器名、所 連接的數(shù)據(jù)庫名等,可以將數(shù)據(jù)源名看成是與一個具體數(shù)據(jù)庫建立的連接。yu1kj
3、。數(shù)據(jù)源分為以下三類:(1) 用戶數(shù)據(jù)源:用戶創(chuàng)建的數(shù)據(jù)源,稱為“用戶數(shù)據(jù)源 ”。此時 只有創(chuàng)建者才能使用,并且只能在所定義的機器上運行 。任何用戶都不能使用其他用戶創(chuàng)建的用戶數(shù)據(jù)源。TqDRr。(2) 系統(tǒng)數(shù)據(jù)源:所有用戶和在 Windows NT 下以服務(wù)方式運行的應用程序均可使用系統(tǒng)數(shù)據(jù)源。(3) 文件數(shù)據(jù)源:文件數(shù)據(jù)源是ODBC3.0以上版本增加的一種數(shù)據(jù)源,可用于企業(yè)用戶,ODBC驅(qū)區(qū)動程序也安裝在用戶的計算機上。 (與機器無關(guān) )1iU9A。、 SQL 語言基礎(chǔ)創(chuàng)建表格SQL語言中的create table語句被用來建立新的數(shù)據(jù)庫表格。Create table語句的使用格式如下:c
4、reate 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 varchar(15), lastname varchar(20), ag
5、e 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語言中的保留關(guān)鍵詞,如select,create, insert 等,作為表格或列的名稱。varchar 或 char 的數(shù)據(jù)
6、類型,數(shù)據(jù)類型用來設(shè)定某一個具體列中數(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):數(shù)字類型,size決定該數(shù)字總的最大位數(shù),而d則用于設(shè)定該數(shù)字在小數(shù)點后的位數(shù)。最后,在創(chuàng)建新表格時需要注意的一點就是表格中列的限制條件
7、。所謂限制條件就是當向特定列輸入數(shù)據(jù) 時所必須遵守的規(guī)則。 例如, unique 這一限制條件要求某一列中不能存在兩個值相同的記錄,所有記錄的值都必須是唯一的。 除 unique 之外,較為常用的列的限制條件還包括 not null 和 primary key 等。 Not null 用來規(guī)定表格中某一列的值不能為空。 Primary key 則為表格中的所有記錄規(guī)定了唯一的標識符。rNy48。查詢簡單的 SQL 查詢只包括選擇列表、 FROM 子句和 WHERE 子句。它們分別說明所查詢列、查詢的 表或視圖、以及搜索條件等。 gE9Sa。完整結(jié)構(gòu):Select All/Distinct<
8、; 目標表達式 > < 目標表達式 >From<表名 >, <表名 >Where<條件表達式>Group by < 列名 1>Having< 條件表達式 >Order by < 列名 2> Asc/Desc nHWAiGroup by :按列名 1 的值進行分組,屬性值相等的為一個組,如果帶 Having 短句,表示只有滿足指定條 件的才輸出。 avEo5。例如,下面的語句查詢 testtable表中姓名為 張三"的nickname字段和email字段。SELECT nickname,email
9、FROM testtableWHERE name='張三'8iFij。(一) 選擇列表(包括局部變選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達式、變量 量和全局變量 )等構(gòu)成。 DjlTg 。1 、選擇所有列 例如,下面語句顯示 testtable 表中所有列的數(shù)據(jù):SELECT *FROM testtableZnjpB 。2、選擇部分列并指定它們的顯示次序 查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。 例如:SELECT nickname,emailFROM testtable TFfuE。3、更改列標題 在選擇列表中
10、,可重新指定列標題。定義格式為:列標題 =列名列名 列標題 如果指定的列標題不是標準的標識符格式時,應使用引號定界符,例如,下列語句使用漢字顯示列 標題:SELECT 昵稱 =nickname, 電子郵件 =emailFROM testtable BmWmo4、刪除重復行SELECT 語句中使用 ALL 或 DISTINCT 選項來顯示表中符合條件的所有行或刪除其中重復的數(shù)據(jù)行,默 認為 ALL 。使用 DISTINCT 選項時, 對于所有重復的數(shù)據(jù)行在 SELECT 返回的結(jié)果集合中只保留一行。 HGnoZ。5、限制返回的行數(shù)使用TOP n PERCENT選項限制返回的數(shù)據(jù)行數(shù),TOP n說
11、明返回n行,而TOP n PERCENT時,說明n是表示一百分數(shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECT TOP 2 *FROM testtableSELECT TOP 20 PERCENT *FROM testtable Lhvx0 。(二 )FROM 子句FROM 子句指定 SELECT 語句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個表或視 圖,它們之間用逗號分隔。在 FROM 子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使用對象名限定這些列 所屬的表或視圖。例如在usertable 和 citytable 表中同時存在 city
12、id 列,在查詢兩個表中的 cityid 時應使用下面語句格式加以限定:SELECT username,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名 表名 別名 TEIbY。(二) FROM 子句FROM 子句指定 SELECT 語句查詢及與查詢相關(guān)的表或視圖。在 FROM 子句中最多可指定 256 個表或視 圖, 它們之間用逗號分隔。在 FROM 子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應使
13、用對象名限定這些列 所屬的表或視圖。例如在usertable 和 citytable 表中同時存在 cityid 列,在查詢兩個表中的 cityid 時應使用下面語句格式加以限定:SELECT username,citytable.cityidFROM usertable,citytableWHERE usertable.cityid=citytable.cityid在 FROM 子句中可用以下兩種格式為表或視圖指定別名:表名 as 別名表名 別名 例如上面語句可用表的別名格式表示為:SELECT username,b.cityidFROM usertable a,citytable bWHE
14、RE a.cityid=b.cityidSELECT 不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結(jié)果集合中查詢數(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é)果集合給予一別名(三 ) 使用 WHERE 子句設(shè)置查詢條件WHERE 子句設(shè)置查詢條件,
15、過濾掉不需要的數(shù)據(jù)行。 SELECT *t,然后再從中檢索數(shù)據(jù)。eEDnf例如下面語句查詢年齡大于20 的數(shù)據(jù):FROM usertable WHERE age20 WHERE 子句可包括各種條件運算符: 比較運算符 (大小比較 ):、 =、 =、=、 范圍運算符(表達式值是否在指定的范圍 ):BETWEENAND-NOT BETWEEN- AND列表運算符(判斷表達式是否為列表中的指定項 ):IN (項1,項2)NOT IN (項 1,項 2-)模式匹配符 (判斷值是否與指定的字符通配格式相符):LIKE 、NOT LIKE空值判斷符 (判斷表達式是否為空 ): IS NULL 、NOT I
16、S NULL 邏輯運算符 (用于多條件的邏輯連接 ): NOT、AND 、OR1、 范圍運算符例:age BETWEEN 10 AND 30 相當于 age=10 AND age=302、 列表運算符例:country IN ('Germany','China')3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于 varchar、text、ntext、datetime 禾R smalldatetime 等類型查詢??墒褂靡韵峦ㄅ渥址喊俜痔? :可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即 下劃線 _:匹配單個任意字符
17、,它常用來限制表達式的字符長度。、<>、!>、!<char、%。方括號 :指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。F:其取值也相同,但它要求所匹配對象為指定字符以外的任一個字符。 例如:Publishing 結(jié)尾,使用 LIKE '%Publishing'A 開頭: LIKE 'A%'A 開頭外:LIKE'FA%'限制以限制以限制以4、空值判斷符例 WHERE age IS NULLNOT 、 AND 、ORORDER BY 子句的語法格式為:5、邏輯運算符:優(yōu)先級為 (四)查詢結(jié)果排序 使用 ORDE
18、R BY 子句對查詢返回的結(jié)果按一列或多列排序。ORDER BY columnname ASCQESC,n 其中 ASC 表示升序,為默認值, DESC 為降序。 ORDER BY 不能按 ntext、 text 和 image 數(shù)據(jù)類型進行排 序。例如:SELECT *FROM usertableORDER BY age desc,userid ASC 另外,可以根據(jù)表達式進行排序。Bfa4S。向表格中插入數(shù)據(jù)Insert 語句的使用格式如下:SQL語言使用insert語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。 insert into tablename (first_column,.last
19、_column)values (first_value,.last_value);例如:insert into employeeBeijing insert into values后面輸入所要添加的表格名稱,然后 的后面按照前面輸入的列的順序?qū)?firstname, lastname, age, address, city) values ( Li ', Ming', 45,No.77 Changan Road ',簡單來說,當向數(shù)據(jù)庫表格中添加新記錄時,在關(guān)鍵詞 在括號中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞 輸入所有要添加的記錄值。8kdVN。更新記錄Upd
20、ate 語句的格式為:SQL語言使用up date語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。update tablenameset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value; 例如:update employee set age = age+1 where first_name=Mary'and last_name= Williams '使用 update 語句時,關(guān)鍵一點就是要設(shè)定好用于進行判斷的 where
21、 條件從句。 qPvrb。刪除記錄SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete語句的格式為:delete from table namewhere colu mnn ame OP ERATOR value an d|or colu mn OP ERATOR value;例如:delete from empio yeewhere last name = May;簡單來說,當需要刪除某一行或某個記錄時,在delete from 關(guān)鍵詞之后輸入表格名稱,然后在 where從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用delete語句時不設(shè)定 where從句,則表格中的所
22、有記錄將全部被刪除。4R9OX刪除數(shù)據(jù)庫表格在SQL語言中使用drop table 命令刪除某個表格以及該表格中的所有記錄。為:drop table table name;例如:drop table empio yee;如果用戶希望將某個數(shù)據(jù)庫表格完全刪除,只需要在drop table命令后輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而 且表格中列的信息不會改變。而使用drop table 命令則會將整個數(shù)據(jù)庫表格的所有信息全部刪除。Drop table 命令的使用格式Mm3g。、數(shù)據(jù)控件1、ADO數(shù)據(jù)控件1.
23、1 ADO對象模型ADO(ActiveX Data Object)數(shù)據(jù)訪問接口是 Microsoft處理數(shù)據(jù)庫信息的最新技術(shù)。它是一種對象,采用了被稱為 OLE DB的數(shù)據(jù)訪問模式,是數(shù)據(jù)訪問對象DAO、遠程數(shù)據(jù)對象 RDO和開放數(shù)據(jù)庫互連ODBC三種方式的擴展。ADO對象模型定義了 一個可編程的分層對象集合,主要由三個對象成員Conn ection、Comma nd 和 Recordset 對象,以及幾個集合對象 Errors、Parameters 和 Fields 等所組成。圖 9.13 示意了這些對象之間的關(guān)系。表9.6是對這些對象的分工描述。8O8GNActiveX圖9.13 ADO對
24、象模型表9.6 ADO對象描述對象名描述Connection連接數(shù)據(jù)來源Command從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息Recordset所獲得的一組記錄組成的記錄集Error在訪問數(shù)據(jù)時,由數(shù)據(jù)源所返回的錯誤信息P arameter與命令對象有關(guān)的參數(shù)Field包含了記錄集中某個字段的信息ADO的對象庫?!?Microsoft ActiveX Data引用方式是執(zhí)行工程”菜單的Objects 2.0 Library '選項。要想在程序中使用 ADO對象,必須先為當前工程引用 引用”命令,啟動引用對話框,在清單中選取hseqy。1.2使用ADO數(shù)據(jù)控件"Microsoft ADO
25、 Data Control工程|部件”菜單命令選擇在使用 ADO數(shù)據(jù)控件前,必須先通過6.0(OLEDB) ”選項,將 ADO數(shù)據(jù)控件添加到工具箱。ADO數(shù)據(jù)控件與 Visual Basic的內(nèi)部Data控件很相似,它允許使用 ADO數(shù)據(jù)控件的基本屬性快速地創(chuàng)建與數(shù)據(jù)庫的連接。Uim1乙1 . ADO數(shù)據(jù)控件的基本屬性(1) ConnectionString 屬性ADO控件沒有DatabaseName屬性,它使用 ConnectionString屬性與數(shù)據(jù)庫建立連接。該屬性包含了用于與數(shù)據(jù)源建立連接的相關(guān)信息,ConnectionString屬性帶有4個參數(shù),如表9.7所示。g6Chf。(2)
26、 RecordSource 屬性RecordSource確定具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中的單個表名,一個存儲查詢,也可以是使用SQL查詢語言的一個查詢字符串。Uns95表 9.7 ConnectionString 屬性參數(shù)參數(shù)描述Provide指定數(shù)據(jù)源的名稱指定數(shù)據(jù)源所對應的文件名Remote Provide在遠程數(shù)據(jù)服務(wù)器打開一個客戶端時所用的數(shù)據(jù)源名稱RemoteServer在遠程數(shù)據(jù)服務(wù)器打開一個主機端時所用的數(shù)據(jù)源名稱(3)ConnectionTimeout 屬性用于數(shù)據(jù)連接的超時設(shè)置,若在指定時間內(nèi)連接不成功顯示超時信息。( 4
27、)MaxRecords 屬性定義從一個查詢中最多能返回的記錄數(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ù)控件,控件名采用默認名 “ Adodcl?!辈襟E2:單擊ADO控件屬性窗口中的 ConnectionString屬性右邊的“按鈕,彈出 屬性頁”對話框。 在該對話框中允許通過三種不同的方式連接數(shù)據(jù)源:MeYH2“使用連接字符串 ”只需要單擊 “生成 ”按鈕,通過選項
28、設(shè)置自動產(chǎn)生連接字符串?!笆褂?Data Link 文件”表示通過 個連接文件來完成。(DSN) ,作為數(shù)據(jù)“使用 ODBC 數(shù)據(jù)資源名稱 ”可以通過下拉式列表框,選擇某個創(chuàng)建好的數(shù)據(jù)源名稱 來源對遠程數(shù)據(jù)庫進行控制。ZEqhD。步驟 3:采用“使用連接字符串 ”方式連接數(shù)據(jù)源。 單擊“生成”按鈕, 打開“數(shù)據(jù)鏈接屬性 ”對話框。 在“提 供者”選項卡內(nèi)選擇一個合適的OLE DB數(shù)據(jù)源,Student.mdb是Access數(shù)據(jù)庫,選擇“Microsoft Jet 3.51 OLEDB Provider 選”項。然后單擊 “下步”按鈕或打開 “連接”選項卡,在對話框內(nèi)指定數(shù)據(jù)庫文件,這里為 St
29、udent.mdb。為保證連接有效,可單擊連接”選項卡右下方的測試連接”按鈕,如果測試成功則關(guān)閉ConnectionString 屬性頁。 lyCSF。步驟4:單擊ADO控件屬性窗口中的 Recordsource屬性右邊的“按鈕,彈出記錄源屬性頁對話框。 cP4o9。在“命令類型 ”下拉式列表框中選擇 “2adCmdTable ”選項,在 “表或存儲過程名稱 ”下拉式列表框中選擇 Student.mdb 數(shù)據(jù)庫中的 “基本情況 ”表,關(guān)閉記錄源屬性頁。此時,已完成了 ADO 數(shù)據(jù)控件的連接工作。 J1S1r。由于 ADO 數(shù)據(jù)控件是一個 ActiveX 控件, 也可以用鼠標右鍵單擊 ADO 數(shù)
30、據(jù)控件, 在彈出的快捷菜單 中選擇“ADODC屬性”菜單命令,打開ADO數(shù)據(jù)控件屬性頁對話框, 一次完成步驟1步驟4的全部設(shè)置。 cmJkh。1.3 ADO 數(shù)據(jù)控件上新增綁定控件的使用隨著 ADO 對象模型的引入, Visual Basic 6.0 除了保留以往的一些綁定控件外,又提供了一些新的成 員來連接不同數(shù)據(jù)類型的數(shù)據(jù)。這些新成員主要有DataGrid 、 DataCombo、 DataList 、 DataReport 、MSHFlexGrid 、MSChart 控件和 MonthView 等控件。 這些新增綁定控件必須使用 ADO 數(shù)據(jù)控件進行綁定。 Q8pjQ。sP8jt 。AD
31、O 數(shù)據(jù)控件和 DataGrid 數(shù)據(jù)網(wǎng)格控件瀏覽數(shù)據(jù)庫 Student.mdb ,并使之具有編輯功能。Visual Basic 6.0 在綁定控件上不僅對 DataSource 和 DataField 屬性在連接功能上作了改進,又增加了 DataMember 與 DataFormat 屬性使數(shù)據(jù)訪問的隊列更加完整。 DataMember 屬性允許處理多個數(shù)據(jù)集, DataFormat 屬性用于指定數(shù)據(jù)內(nèi)容的顯示格式。例 9.6 使用ADO 數(shù)據(jù)控件,并按前面介紹的 ADO 數(shù)據(jù)控件屬性設(shè)置過程連接數(shù)據(jù)庫 Student.mdb reIJH 。KuKva。在窗體上放置 中的基本情況表。Data
32、Grid 控件允許用戶同時瀏覽或修改多個記錄的數(shù)據(jù)。在使用 DataGrid 控件前也必須先通過 “工程 | 部件”菜單命令選擇“Microsoft DataGrid Control 6.0(OLEDB)”選項,將 DataGrid控件添加到工具箱,再將 DataGrid 控件放置到窗體上。設(shè)置 DataGrid 網(wǎng)格控件的 DataSource 屬性為 Adodc1 ,就可將 DataGrid1 綁定到數(shù)據(jù)控件 Adodc1 上。 2mL3u。顯示在 DataGrid 網(wǎng)格內(nèi)的記錄集,可以通過DataGrid 控件的 AllowAddNew、AllowDelete 和AllowUpdate屬
33、性設(shè)置控制增,刪、改操作。5uU5D如果要改變 DataGrid網(wǎng)格上顯示的字段,可用鼠標右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇檢索字段”選項。Visual Basic提示是否替換現(xiàn)有的網(wǎng)格布局,單擊是”按鈕就可將表中的字段裝載到DataGrid控件中。再次用鼠標右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇編輯”選項,進入數(shù)據(jù)網(wǎng)格字段布局的編輯狀態(tài),此時,當鼠標指在字段名上時,鼠標指針變成黑色向下箭頭。用鼠標右鍵單擊需 要修改的字段名,在彈出的快捷菜單中選擇刪除”選項,就可從DataGrid控件中刪除該字段,也可選擇 屬性”選項修改字段的顯示寬度或字段標題。6KSYG圖9
34、.14所示為具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定。標有號的記錄行表示允許增加新記錄。Jnl2sJ學昌11出生年月-020C03男機電1332-12-30 oeoon杯敏紅機電1S83-1011110C05男計算機199222110009'1S04SGcnocoi李維娜數(shù)學1933-12-23h1»廠A DO按件和數(shù)董網(wǎng)格圖9.14具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定2、Data控件Data 控件是Visual Basic訪問數(shù)據(jù)庫的一種利器,它能夠利用三種Recordset對象來訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)控件提供有限的不需編程而能訪問現(xiàn)存數(shù)據(jù)庫的功能,允許將 庫方便地進行連接。要利用數(shù)
35、據(jù)控件返回數(shù)據(jù)庫中記錄的集合,應先在窗體上畫出控件,再通過它的三個 基本屬性Connect、DatabaseName和RecordSource設(shè)置要訪問的數(shù)據(jù)資源。yZqoo。Visual Basic的窗體與數(shù)據(jù)2.1 Data控件屬性1. Connect 屬性Connect屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫類型, 此外,也可連接 DBF、XLS、ODBC等類型的數(shù)據(jù)庫。2. DatabaseName屬性DatabaseName屬性指定具體使用的數(shù)據(jù)庫文件名, DatabaseName屬性應設(shè)置為數(shù)據(jù)庫文件所在的子目錄名,Visual Basic默認的數(shù)據(jù)庫是 Access的MDB文件,Uad4
36、1。包括所有的路徑名。如果連接的是單表數(shù)據(jù)庫,則而具體文件名放在RecordSource屬性中。cGKus例如,要連接一個 Microsoft Access 的數(shù)據(jù)庫 C:Student.mdb,則設(shè)置 DatabaseName= ” 0Student.mdb", Access數(shù)據(jù)庫的所有表都包含在一個 MDB文件中。如果連接一個 Fox Pro數(shù)據(jù)庫如C: VB6 stu_fox.dbf, 則 DatabaseName= C: VB6' , RecordSource=" stu_fox.dbf, "stu_fox 數(shù)據(jù)庫只含有一個表。 kTji6。3.
37、RecordSource 屬性Recordsource確定具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中的單個表名,一個存儲查詢,也可以是使用SQL查詢語言的一個查詢字符串。jz209。例如,要指定Student.mdb數(shù)據(jù) 庫中的基本情況表,則 RecordSource=”基本情 況”。而 RecordSource= ” SelecFrom基本情況 Where專業(yè)='物理,"則表示要訪問基本情況表中所有物理系學生 的數(shù)據(jù)。0ksO3。4. RecordType 屬性RecordType屬性確定記錄集類型。5. EofAction 和 Bo
38、fAction 屬性當記錄指針指向Recordset對象的開始(第一個記錄前)或結(jié)束(最后一個記錄后)時,數(shù)據(jù)控件的EofAction和BofAction屬性的設(shè)置或返回值決定了數(shù)據(jù)控件要采取的操作。屬性的取值如表 9.1所示。sowH2表 9.1 EofAction 和 BofAction 屬性屬性取值操作BofAction0控件重定位到第一個記錄1移過記錄集開始位,定位到一個無效記錄,觸發(fā)數(shù)據(jù)控件對第一個記錄的無效事件 ValidateEofAction0控件重定位到最后一個記錄1移過記錄集結(jié)束位,定位到一個無效記錄,觸發(fā)數(shù)據(jù)控件對最后一個記錄的無效事件Validate2向記錄集加入新的空
39、記錄,可以對新記錄進行編輯,移動記錄指 針,新記錄寫入數(shù)據(jù)庫在Visual Basic中,數(shù)據(jù)控件本身不能直接顯示記錄集中的數(shù)據(jù),必須通過能與它綁定的控件來實現(xiàn)。可與數(shù)據(jù)控件綁定的控件對象有文本框、標簽、圖像框、圖形框、列表框、組合框、復選框、網(wǎng)格、DB列表框、DB組合框、DB網(wǎng)格和OLE容器等控件。要使綁定控件能被數(shù)據(jù)庫約束,必需在設(shè)計或運行時 對這些控件的兩個屬性進行設(shè)置:yUKig。(1) DataSource 屬性DataSource屬性通過指定一個有效的數(shù)據(jù)控件連接到一個數(shù)據(jù)庫上。(2) DataField 屬性DataField屬性設(shè)置數(shù)據(jù)庫有效的字段與綁定控件建立聯(lián)系。綁定控件、
40、數(shù)據(jù)控件和數(shù)據(jù)庫三者的關(guān)系如圖9.7所示。當上述控件與數(shù)據(jù)控件綁定后,Visual Basic將當前記錄的字段值賦給控件。如果修改了綁定控件內(nèi)的BofAction屬性值設(shè)置為2時,當記錄指針移過記錄集結(jié)束位,數(shù)Acsxo。它包含兩個表:基本情況”表和 學生成績表”。參見表9.2和表9.3。數(shù)據(jù),只要移動記錄指針,修改后的數(shù)據(jù)會自動寫入數(shù)據(jù)庫。數(shù)據(jù)控件在裝入數(shù)據(jù)庫時,它把記錄集的第 一個記錄作為當前記錄。當數(shù)據(jù)控件的 據(jù)控件會自動向記錄集加入新的空記錄。例9.1 建立student.mdb數(shù)據(jù)庫,YLtgu O表9.2學生基本情況表結(jié)構(gòu)字段名類型寬度學號Text6姓名Text10性別Text2專
41、業(yè)Text10出生年月Date8照片Binary0表9.3學生成績表結(jié)構(gòu)字段名類型寬度學號Text6課程Text10成績Long4學期Text2用可視化數(shù)據(jù)管理器建立以上設(shè)計的數(shù)據(jù)庫及其表,表中數(shù)據(jù)可自行錄入。例9.2設(shè)計一個窗體用以顯示建立的student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。5個文ZPOVF5個文本框和5個標簽控件。5基本情況表包含了 6個字段,故需要用 6個綁定控件與之對應。這里用一個圖形框顯示照片和 本框顯示學號、姓名等數(shù)據(jù)。本例中不需要編寫任何代碼,具體操作步驟如下:(1)參考如圖9.8所示窗體,在窗體上放置 1個數(shù)據(jù)控件,一個圖形框、個標簽控件分別給出相關(guān)的提示說明。Q
42、oeMA學號專業(yè)無顯恭表的內(nèi)容aiDDQl姓名李刪卩 性期出生日期H9S3-12-23圖9.8 顯示Student.mdb基本情況表的數(shù)據(jù)(2) 將數(shù)據(jù)控件 Data1的Connect屬性指定為 Access類型,DatabaseName屬性連接數(shù)據(jù)庫 Student.mdb, RecordSource屬性設(shè)置為基本情況"表。1dVRz(3) 圖形框和5個文本框控件 Text1Text5的DataSource屬性都設(shè)置成 Data1。通過單擊這些綁定控件的DataField屬性上的“'按鈕,將下拉出基本情況表所含的全部字段,分別選擇與其對應的字段照片、學號、姓名、性別、專業(yè)和
43、出生年月,使之建立約束關(guān)系。xZvkJ。運行該工程即可出現(xiàn)圖9.8所示效果。5個文本框分別顯示基本情況表內(nèi)的字段:學號、姓名、性別、專業(yè)和出生年月的內(nèi)容,圖形框顯示每個學生的照片。ZtTa5。使用數(shù)據(jù)控件對象的4個箭頭按鈕可遍歷整個記錄集中的記錄。單擊最左邊的按鈕顯示第I條記錄;單擊其旁邊的按鈕顯示上一條記錄;單擊最右邊的按鈕顯示最后一條記錄;單擊其旁邊的按鈕顯示下一條記錄。數(shù)據(jù)控件除了可以瀏覽Recordset對象中的記錄外,同時還可以編輯數(shù)據(jù)。如果改變了某個字段的值,只要移動記錄,這時所作的改變存入數(shù)據(jù)庫中。bxKYtoVisual Basic 6.0提供了幾個比較復雜的網(wǎng)格控件,幾乎不用
44、編寫代碼就可以實現(xiàn)多條記錄數(shù)據(jù)顯示。 當把數(shù)據(jù)網(wǎng)格控件的DataSource屬性設(shè)置為一個 Data控件時,網(wǎng)格控件會被自動地填充,并且其列標題會用Data控件的記錄集里的數(shù)據(jù)自動地設(shè)置。ZhkZO2.2 data控件與MsFlexGrid 控件結(jié)合顯示數(shù)據(jù)庫中信息例9.3用數(shù)據(jù)網(wǎng)格控件 MsFlexGrid顯示Student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。MsFlexGrid控件不是Visual Basic工具箱內(nèi)的默認控件,需要在開發(fā)環(huán)境中選擇工程|部件”菜單命令,并在隨即出現(xiàn)的對話框中選擇“MicroSoft FlexGrid Control 6.0選項,將其添加到工具箱中。本例所用控
45、件的屬性設(shè)置如表 9.4所示。請讀者自行比較不可卷動列屬性FixedCols=0與FixedCols=1的區(qū)別。Form啟動后自動顯示如圖9.9所示窗口。Yys2v。學號01000101 DOI 0I姓名 李維娜 丁保民 陸為明 陳誡血-dns性女男男男I出生年月I *1963-12-2319337-1413S2-1M11982-12-30010014020003圖9.9使用數(shù)據(jù)網(wǎng)格控件表9.4控件屬性默認控件名其它屬性設(shè)置Data1DatabaseName=” cstudent.mdb ”RecordsetT yp e=0RecordSource=基本情況”MSFlexGrid1DataSo
46、urce=Data1FixCols=0W.搐用格辭定到數(shù)S庫2.3數(shù)據(jù)控件的常用方法數(shù)據(jù)控件的內(nèi)置功能很多,可以在代碼中用數(shù)據(jù)控件的方法訪問這些屬性。1. Refresh 方法如果在設(shè)計狀態(tài)沒有為打開數(shù)據(jù)庫控件的有關(guān)屬性全部賦值,或當Recordsource在運行時被改變后,必須使用數(shù)據(jù)控件的Refresh方法激活這些變化。在多用戶環(huán)境下,當其他用戶同時訪問同一數(shù)據(jù)庫和表時,Refresh方法將使各用戶對數(shù)據(jù)庫的操作有效。zze8A例如:將例9.2的設(shè)計參數(shù)改用代碼實現(xiàn),使所連接數(shù)據(jù)庫所在的文件夾可隨程序而變化:Private Sub Form_Load()Dim mp ath As Stri
47、 ngMp ath=A pp.P ath'獲取當前路徑If Right(mpath,1)<>” /” Then mpath=mpath+” /”Data1.DatabaseName=mpath+ ” Student.mdb ” '連接數(shù)據(jù)庫 Data1.RecordSource=基本情況”'構(gòu)成記錄集對象Data1.Refresh'激活數(shù)據(jù)控件 Vt2kN°End Sub2 UpdateControls 方法UpdateControls 方法可以將數(shù)據(jù)從數(shù)據(jù)庫中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用 UpdateControls 方
48、法終止用戶對綁定控件內(nèi)數(shù)據(jù)的修改。 K12jT。例如:將代碼 Data1.UpdateControts 放在一個命令按鈕的 Click 事件中,就可以實現(xiàn)對記錄修改的功能。 gzPIH。3. UpdateRecord 方法 當對綁定控件內(nèi)的數(shù)據(jù)修改后,數(shù)據(jù)控件需要移動記錄集的指針才能保存修改。如果使 用 UpdateRecord 方法,可強制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫入到數(shù)據(jù)庫中,而不再觸發(fā)Validate 事件。在代碼中可以用該方法來確認修改。vcGD0。2.4 記錄集的屬性與方法由 RecordSource 確定的具體可訪問的數(shù)據(jù)構(gòu)成的記錄集 象一樣具有屬性和方法。下面列出記錄集常用的屬
49、性和方法。1 AbsolutePosition屬性AbsolutePosition 返回當前指針值,如果是第2 Bof 和 Eof 的屬性Bof 判定記錄指針是否在首記錄之前,若 此類似, Eof 判定記錄指針是否在末記錄之后。3 Bookmark 屬性Recordset 也是一個對象,因而,它和其他對 WLlFK。1 條記錄,Bof 為 True, FFXZE。其值為 0,該屬性為只讀屬性。則當前位置位于記錄集的第1 條記錄之前。與BookmarkBookmark 屬性的值采用字符串類型,用于設(shè)置或返回當前指針的標簽。在程序中可以使用 屬性重定位記錄集的指針,但不能使用 AbsolutePo
50、stion 屬性。 t5vib 。4 Nomatch 屬性否則為 True。在記錄集中進行查找時, 如果找到相匹配的記錄, 則 Recordset 的 NoMatch 屬性為 False, 該屬性常與 Bookmark 屬性一起使用。 K6nzA。5 RecordCount 屬性RecordCountRecordCount 屬性對 Recordset 對象中的記錄計數(shù), 該屬性為只讀屬性。 在多用戶環(huán)境下, 屬性值可能不準確, 為了獲得準確值, 在讀取 RecordCount 屬性值之前, 可使用 MoveLast 方法將記錄指針 移至最后一條記錄上。QSABt6. Move方法使用Move方
51、法可代替對數(shù)據(jù)控件對象的4個箭頭按鈕的操作遍歷整個記錄集。5種Move方法是:(1) MoveFirst 方法 :移至第 1 條記錄。(2) MoveLast 方法 :移至最后一條記錄。(3) MoveNext 方法 :移至下一條記錄。(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ù)
52、據(jù)控件對象的4個箭頭按鈕的操作。W4EmL-1 nl x學號 |01 oom苜記錄I出生日朗匣求記錄I圖9.10用按鈕代替數(shù)據(jù)控件對象的箭頭按鈕命令按鈕 Command1_ClickPrivate Sub Comma nd1_Click()Data1.Recordset.MoveFirstEnd Sub 命令按鈕 Command4_ClickPrivate Sub Comma nd4_Click()Data1.Recordset.MoveLastEnd Sub另外兩個按鈕的代碼需要考慮事件移至第1條記錄,代碼如下:事件移至最后一條記錄,代碼如下:1條記錄或用 MoveLast方法定位到最后一條
53、記錄。程序代碼如下:Private Sub Comma nd2_Click()Data1.Recordset.Move PreviousIf Data1.Recordset.BOF Then Data1.Recordset.MoveFirst T3Q0LEnd SubPrivate Sub Comma nd3_Click()Data1.Recordset.MoveNextIf Data1.Recordset.EOF Then Data1.Recordset.MoveLast 2CVii。Recordset對象的邊界的首尾,如果越界,則用MoveFirst方法定位到第tZgR5。End SubR
54、ecordset對象中查找與指定條件相符的一條記1條記錄。I條記錄。7. Find方法 使用Fi nd方法可在指定的 Dyn aset或Snap shot類型的錄,并使之成為當前記錄。4種Find方法是:1YwMs(1) FindFirst方法:從記錄集的開始查找滿足條件的第(2) FindLast方法:從記錄集的尾部向前查找滿足條件的第(3) FindNext方法:從當前記錄開始查找滿足條件的下一條記錄。(4) FindPrevious方法:從當前記錄開始查找滿足條件的上一條記錄。4種Find方法的語法格式相同: 數(shù)據(jù)集合.Find方法條件搜索條件是一個指定字段與常量關(guān)系的字符串表達式。在構(gòu)
55、造表達式時,除了用普通的關(guān)系運算外, 還可以用Like運算符。7frdP。例如:語句 “ Data1.Recordset.FindFirst專業(yè)='物理表示在由 Data1數(shù)據(jù)控件所連接的數(shù)據(jù)庫Student.mdb的記錄集內(nèi)查找專業(yè)為物理"的第I條記錄。這里,專業(yè)"為數(shù)據(jù)庫Student記錄集中的字段名,在該字段中存放專業(yè)名稱信息。要想查找下一條符合條件的記錄,可繼續(xù)使用語 句:” Data1.Recordset.FindNext 專業(yè)='物理'。 BPDfn。又例如:要在記錄集內(nèi)查找專業(yè)名稱中帶有建”字的專業(yè):Data1.Recordset.FindFirst 專業(yè) Like &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)業(yè)合伙人簽訂合同范本
- 業(yè)務(wù)轉(zhuǎn)包合同范例
- 農(nóng)家樂入股合同范本
- 產(chǎn)品會展合同范本
- 不退不換合同范本
- 助聽器合同范本
- 勞務(wù)派遣合同范本6
- 借名辦證合同范本
- 倉庫租憑合同范本
- 勞動合同范本廣州
- 《計算機安全基礎(chǔ)》課件
- 養(yǎng)老院行業(yè)現(xiàn)狀分析-2023年中國養(yǎng)老院行業(yè)市場發(fā)展前景研究報告-智研咨詢
- 住房公積金貸款申請書
- 多物理場耦合與協(xié)同仿真技術(shù)
- 監(jiān)理人員的節(jié)后復工安全培訓考試試題
- 胸腔穿刺知情同意書
- 學校物業(yè)管理機構(gòu)設(shè)置與運作方案
- 農(nóng)村住房竣工驗收記錄表
- 2020-2021學年人教版道德與法治八年級下冊全冊教材答案
- 會計崗位實訓第5版林冬梅課后參考答案
- 總承包單位對分包單位的管理制度格式版(3篇)
評論
0/150
提交評論