午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

VB和數(shù)據(jù)庫(kù)

 nxhujiee 2010-09-08

11.1 數(shù)據(jù)庫(kù)(DateBase)的基本概念

一、概念與術(shù)語(yǔ)

目 前幾乎所有的應(yīng)用程序都需要存放大量的數(shù)據(jù),這些大量數(shù)據(jù)一般都需要經(jīng)過(guò)數(shù)據(jù)收集、分析后,整理成一定的組織結(jié)構(gòu),通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)進(jìn)行管理。數(shù)據(jù)庫(kù) 管理系統(tǒng)提供了數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)存放方式的管理能力,使程序設(shè)計(jì)人員在使用數(shù)據(jù)庫(kù)時(shí)不需要考慮數(shù)據(jù)的具體操作及數(shù)據(jù)之間的關(guān)系。

數(shù)據(jù)庫(kù)是一組排列成易于處理和讀取的相關(guān)信息的集合。數(shù)據(jù)庫(kù)按其模型結(jié)構(gòu)可分為層次數(shù)據(jù)庫(kù)、網(wǎng)狀數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)。其中關(guān)系數(shù)據(jù)庫(kù)的理論發(fā)展最為完備,因此到目前為止關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用最為廣泛。

Visual Basic默認(rèn)的數(shù)據(jù)庫(kù)為微軟的Access數(shù)據(jù)庫(kù),可在Visual Basic中利用數(shù)據(jù)庫(kù)管理器直接創(chuàng)建,數(shù)據(jù)庫(kù)文件的擴(kuò)展名為.MDB。除此之外,Visual Basic還可以處理各種外部數(shù)據(jù)庫(kù),如dBASE、FoxPro、Paradox、Btrieve、Microsoft Excel、Lotus1-2-3、Text等格式的數(shù)據(jù)庫(kù),甚至其它非關(guān)系的數(shù)據(jù)庫(kù),VB在調(diào)用這些數(shù)據(jù)時(shí),都會(huì)自動(dòng)將其轉(zhuǎn)換為關(guān)系型的數(shù)據(jù)庫(kù)來(lái)操作。

1. 數(shù)據(jù)表(Table)

數(shù)據(jù)表是一組相關(guān)聯(lián)的按行與列排列的邏輯數(shù)據(jù)的集合,簡(jiǎn)稱(chēng)為表。在數(shù)據(jù)庫(kù)理論中常用來(lái)表示一個(gè)實(shí)體,每個(gè)數(shù)據(jù)表必須有一個(gè)表名,一個(gè)數(shù)據(jù)庫(kù)一般由多個(gè)數(shù)據(jù)表組成,各個(gè)數(shù)據(jù)表之間一般應(yīng)存在某種關(guān)系。

2. 字段(Field)

數(shù)據(jù)表中的每一列稱(chēng)為一個(gè)字段。數(shù)據(jù)表是由其包含的所有字段構(gòu)成的,每個(gè)字段用來(lái)描述它包含的數(shù)據(jù)。在創(chuàng)建數(shù)據(jù)表時(shí),必須為每個(gè)字段起一個(gè)名稱(chēng)一般稱(chēng)為字段名,同時(shí)需要為每個(gè)字段分配一個(gè)數(shù)據(jù)類(lèi)型、最大長(zhǎng)度和其它屬性。

3. 記錄(Record)

數(shù)據(jù)表中的每一行稱(chēng)為一條記錄。記錄是字段值的集合,所有用戶(hù)對(duì)數(shù)據(jù)的訪問(wèn)對(duì)象是記錄,因此,如果想對(duì)某個(gè)數(shù)據(jù)項(xiàng)進(jìn)行訪問(wèn),必須首先進(jìn)行記錄定位,嚴(yán)格的說(shuō),在一個(gè)數(shù)據(jù)表中不允許存在兩條完全相同的記錄。

4. 關(guān)鍵字(Keyword)

    如果數(shù)據(jù)表中某個(gè)字段值或若干個(gè)字段值的集合能唯一確定一條記錄,則稱(chēng)該字段或字段的集合為該數(shù)據(jù)表的關(guān)鍵字。在一個(gè)數(shù)據(jù)表中,關(guān)鍵字可能存在多個(gè),但需選定其中一個(gè)作為主關(guān)鍵字。對(duì)于數(shù)據(jù)表中的每條記錄來(lái)說(shuō),主關(guān)鍵字的值必須唯一。

5. 索引(Index)

為了提高訪問(wèn)數(shù)據(jù)庫(kù)的速度,大多數(shù)數(shù)據(jù)庫(kù)都使用索引。索引即對(duì)數(shù)據(jù)表中的某個(gè)或幾個(gè)字段的值按某種特定的順序進(jìn)行排列。在VB中利用索引可以加快數(shù)據(jù)檢索速度。

6. 結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)

SQL(Structure Query Language)是結(jié)構(gòu)化查詢(xún)語(yǔ)言的縮寫(xiě),是數(shù)據(jù)庫(kù)中通用的數(shù)據(jù)查詢(xún)編程語(yǔ)言,它是我們?cè)L問(wèn)數(shù)據(jù)庫(kù)的一種利器。在Visual Basic 中訪問(wèn)數(shù)據(jù)庫(kù)時(shí),就可以利用SQL同數(shù)據(jù)庫(kù)進(jìn)行通訊。

二、數(shù)據(jù)庫(kù)的設(shè)計(jì)

數(shù)據(jù)庫(kù)的設(shè)計(jì)一般需要借助E- R圖進(jìn)行數(shù)據(jù)建模,然后把整個(gè)E-R圖中的每個(gè)實(shí)體和有關(guān)的聯(lián)系,都轉(zhuǎn)化為關(guān)系。對(duì)每個(gè)關(guān)系再進(jìn)行規(guī)范化,最后給出各個(gè)數(shù)據(jù)表完成數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì),對(duì)每 個(gè)關(guān)系來(lái)說(shuō),在選定的數(shù)據(jù)庫(kù)管理系統(tǒng)下,創(chuàng)建數(shù)據(jù)庫(kù)、數(shù)據(jù)表以及它們之間的關(guān)系,并輸入數(shù)據(jù)進(jìn)行測(cè)試,完成數(shù)據(jù)庫(kù)的物理設(shè)計(jì)。具體內(nèi)容請(qǐng)讀者參考相關(guān)的數(shù) 據(jù)庫(kù)理論方面的書(shū)籍。

11.2 Visual Basic的可視數(shù)據(jù)管理器

Visual Basic 所支持的不同類(lèi)型的數(shù)據(jù)庫(kù)大都可以通過(guò)相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)建立,如在MS Access中可以建立.MDB的數(shù)據(jù)庫(kù)。也可以使用Visual Basic下的數(shù)據(jù)庫(kù)管理器來(lái)管理數(shù)據(jù)庫(kù)。

啟動(dòng)數(shù)據(jù)庫(kù)管理器有兩種方法:

(1)在Visual Basic集成環(huán)境中,單擊“外接程序”菜單下的“可視化數(shù)據(jù)管理器”命令,即可打開(kāi)可視化數(shù)據(jù)管理器“VisData”窗口,如圖11-1所示。

(2)直接運(yùn)行Visual Basic系統(tǒng)目錄中的VisData.exe程序文件來(lái)啟動(dòng)可視化數(shù)據(jù)管理器。

VisData窗口由菜單欄、工具欄、工作區(qū)窗口與狀態(tài)欄組成,剛啟動(dòng)時(shí)其工作區(qū)窗口為空。

11.2-1  可視化數(shù)據(jù)管理器窗口

一、可視數(shù)據(jù)管理器的使用

使用開(kāi)可視化數(shù)據(jù)管理器建立默認(rèn)數(shù)據(jù)庫(kù)――Access數(shù)據(jù)庫(kù)的步驟如下:

1.單擊“文件”菜單下的“新建”菜單項(xiàng),將出現(xiàn)如圖12-2所示的選擇。單擊數(shù)據(jù)庫(kù)類(lèi)型菜單中的Access將出現(xiàn)版本子菜單,在版本菜單中選擇要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)版本后,出現(xiàn)如圖11-3所示的窗口。

    圖11.2-2 “文件”菜單下的“新建”子菜單

 

 

 

 

 

 

 

 

 

  圖11.2-3 創(chuàng)建數(shù)據(jù)庫(kù)窗口

2.單擊“保存”按鈕后,將會(huì)出現(xiàn)如圖11.2-4所示的窗口。

 

 

 

 

 

 

 

 

 

 

 

11.2-4 數(shù)據(jù)庫(kù)窗口與SQL語(yǔ)句窗口

3.右擊數(shù)據(jù)庫(kù)窗口,出現(xiàn)如圖1.2-5所示的窗口。

 

 

 

 

 

 

11-5 數(shù)據(jù)庫(kù)窗口

4.單擊“新建表”按鈕,即可打開(kāi)如圖11.2-6所示窗口。即可新建表。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11.2-6 表結(jié)構(gòu)窗口

5.然后單擊“添加字段”按鈕,可建立各個(gè)字段的屬性,最后單擊“新建表”按鈕,即可建立起表結(jié)構(gòu)。有了表結(jié)構(gòu)后就可對(duì)表進(jìn)行數(shù)據(jù)的添加、修改和刪除等操作。

11.3 ADO數(shù)據(jù)控件

一、編寫(xiě)一個(gè)簡(jiǎn)單數(shù)據(jù)庫(kù)程序

首先介紹Visual Basic所提供的兩個(gè)控件ADO Data Control(簡(jiǎn)稱(chēng)ADODC)和DataGrid處理數(shù)據(jù)庫(kù)程序的方法。ADO Data Control和DataGrid都屬于ActiveX控件,它們?cè)谑褂们靶枰葘⑵涮砑拥焦ぞ呦渲?,以便在工程中使用。單?#8220;工程/部件”菜單項(xiàng),打開(kāi)“部件”對(duì)話框,選定所需要的控件并確定,即可將其添加的工具箱中,如圖11.3-1所示。

11.3-1 添加ADODC與DataGrid控件到工具箱

在窗體上添加ADODC與DataGrid控件,如圖11-8所示,然后右擊ADODC控件,選擇其快捷菜單下“ADODC屬性”則打開(kāi)如圖11-9所示的界面。

   圖11.3-2 窗體窗口

     圖11.3-3 屬性頁(yè)窗口

在上圖中,單擊生成“按鈕”,則打開(kāi)如圖11.3-4所示的數(shù)據(jù)鏈接屬性窗口。

    圖11.3-4  數(shù)據(jù)鏈接屬性窗口

在圖11.3-4中選中“Microsoft Jet 3.51 OLE DB Provider”,單擊下一步按鈕,進(jìn)入如圖11.3-5所示的數(shù)據(jù)鏈接屬性窗口。

【注】Microsoft Jet 3.51 OLE DB Provider只能打開(kāi)Access97下的數(shù)據(jù)庫(kù),不能打開(kāi)Access2000及以上版本的數(shù)據(jù)庫(kù),如要打開(kāi)Access2000下的數(shù)據(jù)庫(kù),則必須選用Jet 4.0,否則系統(tǒng)會(huì)出錯(cuò)。

    圖11.3-5  數(shù)據(jù)鏈接屬性窗口

在圖11.3-5中,單擊“…”按鈕,選擇所要打開(kāi)的數(shù)據(jù)庫(kù)文件后確定,即可單擊“測(cè)試連接”按鈕,測(cè)試是否連接成功。如果測(cè)試連接成功,則單擊“確定”按鈕后,返回圖11.3-2。

【注】如果數(shù)據(jù)庫(kù)文件與工程文件保存在同一個(gè)文件夾下,則可把上圖所示的文件xjgl.mdb前的字符刪除,這樣生成的程序,在復(fù)制到其它計(jì)算機(jī)上后不需重新對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接即可運(yùn)行。

通過(guò)以上步驟,我們只是完成了ADODC控件的ConnectionString屬性設(shè)置,其值如下:Provider=Microsoft.Jet.OLEDB.3.51;Data Source=e:\xjgl\xjgl.mdb;Persist Security Info=False

該屬性由三個(gè)參數(shù)組成:

然后把ADODC 控件的CommandType屬性設(shè)置為adCmdTable,接著單擊RecordSource屬性,可以看到數(shù)據(jù)庫(kù)xjgl.mdb下的所有數(shù)據(jù)表, 單擊“基本情況表”。再選定DataGrid控件,只需把DataSource設(shè)置為ADODC控件即可,完成程序設(shè)計(jì)。運(yùn)行該程序即可對(duì)數(shù)據(jù)庫(kù) xjgl.mdb下的“基本情況表”進(jìn)行瀏覽。然后把DataGrid控件的AllowAddNew屬性設(shè)置為T(mén)rue、AllowDelete屬性設(shè)置 為T(mén)rue、AllowUpdate屬性設(shè)置為T(mén)rue,再次運(yùn)行該程序,即可對(duì)“基本情況表”進(jìn)行添加、刪除與修改數(shù)據(jù)操作,到目前為止沒(méi)有書(shū)寫(xiě)一行代 碼,就已完成程序設(shè)計(jì)。

二、數(shù)據(jù)庫(kù)文件與ADODC、DataGrid的關(guān)系

1.ADODC與數(shù)據(jù)庫(kù)文件的關(guān)系

數(shù)據(jù)庫(kù)文件是一種格式十分復(fù)雜的文件,對(duì)任何一個(gè)程序員來(lái)說(shuō),如果想自行解析文件格式進(jìn)而存取數(shù)據(jù)庫(kù)中的內(nèi)容,都是一件十分困難的事情。因此VB提供了ADODC控件,其功能是進(jìn)行數(shù)據(jù)庫(kù)文件結(jié)構(gòu)分析,并且根據(jù)程序?qū)?lái)可能操作數(shù)據(jù)庫(kù)(如:讀取、寫(xiě)入、新增、刪除等),建立必要的操作接口(包含屬性、方法和事件),然后封裝成為一個(gè)控件。

對(duì)數(shù)據(jù)庫(kù)程序而言,如果通過(guò)ADODC控件來(lái)存取數(shù)據(jù),則不必了解數(shù)據(jù)庫(kù)文件格式,只要通過(guò)ADODC所提供的操作接口,即可達(dá)到存取數(shù)據(jù)庫(kù)的目的。數(shù)據(jù)庫(kù)程序、ADODC控件與數(shù)據(jù)庫(kù)文件三者之間的關(guān)系用下圖表示:

                         ADODC

 

 

 

 

 

 

 

 


              圖11.3-6  數(shù)據(jù)庫(kù)文件與ADODC控件的關(guān)系

2.DataGrid與ADODC之間的關(guān)系

雖然ADODC控件具有存取數(shù)據(jù)庫(kù)數(shù)據(jù)的能力,但卻沒(méi)有提供顯示數(shù)據(jù)的功能,如果想要顯示數(shù)據(jù)庫(kù)的內(nèi)容,除了利用ADODC來(lái)讀取數(shù)據(jù)之外,還得編寫(xiě)顯示數(shù)據(jù)的程序。

1)利用DataGrid來(lái)顯示數(shù)據(jù)

要使用DataGrid 來(lái)顯示數(shù)據(jù)庫(kù)內(nèi)容必須設(shè)置好它的DataSource屬性,這個(gè)屬性的作用是讓DataGrid控件與ADODC控件產(chǎn)生連接關(guān)系,也就是告訴 DataGrid控件它所存取的是哪一個(gè)ADODC所打開(kāi)的數(shù)據(jù)庫(kù),接著DataGrid就會(huì)自動(dòng)使用ADODC的接口,將數(shù)據(jù)庫(kù)的內(nèi)容顯示出來(lái)。其關(guān)系 如圖11.3-7:

數(shù)據(jù)庫(kù)程序

 

   

 

 

 

 

 

          圖11.3-7 DataGrid與ADODC控件的關(guān)系

2)關(guān)鍵屬性和參數(shù)總結(jié)

ADODC控件的屬性及參數(shù):

(1)ConnectionString(連接字符串)屬性:該屬性有兩個(gè)重要參數(shù)Provider和Data Source。

Provider參數(shù):Provider是OLE DB Provider的簡(jiǎn)稱(chēng),其主要用途在于指定存取數(shù)據(jù)庫(kù)所使用的OLE DB驅(qū)動(dòng)程序。如“Microsoft Jet 3.51 OLE DB Provider”。

Data Source(數(shù)據(jù)源)參數(shù):此參數(shù)通常用來(lái)指定數(shù)據(jù)庫(kù)文件的完整路徑和文件名。有了此參數(shù),ADODC控件才能打開(kāi)指定的數(shù)據(jù)庫(kù)文件。

(2)CommandType(命令類(lèi)型)屬性:共有四個(gè)值:adCmdTable(數(shù)據(jù)表)、adCmdText(指令)、adCmdStoredProc(存儲(chǔ)過(guò)程)、adCmdUnknown(未定義)。

(3)RocordSoure(記錄源)屬性:指定確定的表。

DataGrid控件的屬性:

(1)DataSource(數(shù)據(jù)源)屬性:由于DataGrid控件并不直接存取數(shù)據(jù)庫(kù)中的數(shù)據(jù),因此必須將其屬性設(shè)置成某一個(gè)ADODC控件,DataGrid控件才能具備存取數(shù)據(jù)庫(kù)的能力。

(2)AllowAddNew(允許新增)屬性:若允許用戶(hù)新增數(shù)據(jù),須將此屬性設(shè)置為T(mén)rue。

(3)AllowDelete(允許刪除)屬性:若允許用戶(hù)新增數(shù)據(jù),須將此屬性設(shè)置為T(mén)rue。

(4)AllowUpdate(允許更新)屬性:此屬性的默認(rèn)值為T(mén)rue。

三、Visual Basic中與數(shù)據(jù)庫(kù)中相關(guān)的對(duì)象

就像數(shù)據(jù)庫(kù)是有組織結(jié)構(gòu)的一樣,VB所提供的數(shù)據(jù)庫(kù)對(duì)象也是有組織的,而且與數(shù)據(jù)庫(kù)的組織結(jié)構(gòu)有著很好的對(duì)應(yīng)關(guān)系。

1.Field對(duì)象與字段

字段是數(shù)據(jù)庫(kù)中最小的數(shù)據(jù)單位。在VB所提供的對(duì)象中,與字段對(duì)應(yīng)的對(duì)象是Field,我們從Field對(duì)象的以下屬性可以得知字段的相關(guān)信息:

Name屬性:字段的名稱(chēng)

Value屬性:字段的數(shù)據(jù)

       Name屬性    Field對(duì)象

 


學(xué)號(hào)

姓名

年齡

1001

張三

18

 

 

 

 Value屬性

2.Fields集合對(duì)象與數(shù)據(jù)記錄

對(duì)VB所提供的對(duì)象而言,F(xiàn)ield對(duì)象的集合構(gòu)成Fields集合對(duì)象,所以Fields集合對(duì)象可以視為與數(shù)據(jù)庫(kù)記錄對(duì)應(yīng)的對(duì)象。

Fields對(duì)象編號(hào):0       1        2

學(xué)號(hào)

姓名

年齡

1001

張三

18

                                       

                                                                              

                                                                  

Fields(0)  Fields(1)  Fields(2)

 共同構(gòu)成Fields集合對(duì)象

由于Fields是一個(gè)集合對(duì)象,所以可以利用Count屬性得知某一個(gè)Fields集合對(duì)象中的Field對(duì)象的數(shù)目,并可利用下面的方法顯示集合中的Field對(duì)象的內(nèi)容,如:

For i=0 to fds.Count-1         ‘fds為一個(gè)Fields集合對(duì)象

Debug.Print fds(i).Name      ‘顯示字段名稱(chēng)

Debug.Print fds(i).Value      ‘顯示字段數(shù)據(jù)內(nèi)容

Next

3.Recordset對(duì)象與數(shù)據(jù)記錄集合

Visual Basic中與數(shù)據(jù)表對(duì)應(yīng)的對(duì)象稱(chēng)為Recordset對(duì)象,先介紹“當(dāng)前數(shù)據(jù)記錄”的概念。

1)由于數(shù)據(jù)庫(kù)無(wú)法將整個(gè)數(shù)據(jù)表完全裝入到內(nèi)存中,因此便規(guī)定程序每次只能存取一條記錄,此記錄數(shù)據(jù)就稱(chēng)為“當(dāng)前記錄數(shù)據(jù)”。

注:雖然程序每次只能存取當(dāng)前記錄數(shù)據(jù),但并不表示數(shù)據(jù)庫(kù)每次只裝入一條記錄數(shù)據(jù),為了提高執(zhí)行效率,數(shù)據(jù)庫(kù)每次會(huì)裝入一大段記錄數(shù)據(jù),但程序存取的動(dòng)作還是以一條為單位。

2)利用Recordset對(duì)象改變當(dāng)前記錄數(shù)據(jù)的方法

程序運(yùn)行后當(dāng)前記錄數(shù)據(jù),將定位于第一條記錄。若要改變當(dāng)前記錄,程序必須調(diào)用Recoedset對(duì)象的方法改變當(dāng)前數(shù)據(jù)記錄,方可存取每一條數(shù)據(jù)記錄,進(jìn)而達(dá)到存取整個(gè)數(shù)據(jù)表的功能。下表為Recoedset對(duì)象的幾個(gè)常用方法。

 

方法

說(shuō)明

MoveNext

將當(dāng)前數(shù)據(jù)記錄移到下一條

MovePrevious

將當(dāng)前數(shù)據(jù)記錄移到上一條

MoveFirst

將當(dāng)前數(shù)據(jù)記錄移到第一條

MoveLast

將當(dāng)前數(shù)據(jù)記錄移到末一條

EOF

當(dāng)前數(shù)據(jù)記錄是否在最后一條之后

BOF

當(dāng)前數(shù)據(jù)記錄是否在第一條之前

如圖11.3-8為Visual Basic中幾個(gè)對(duì)象間的關(guān)系。

 

 

 

 

 

 

 

 


11.3-8  ADODC、Recordset、Fields、Field幾個(gè)對(duì)象關(guān)系圖

在上圖中位于下方的稱(chēng)為上方對(duì)象的子對(duì)象。若要存取某一個(gè)對(duì)象,必須從最上層的父對(duì)象向下指定對(duì)象的路徑。如:

Adodc1.Recordset

Adodc1.Recordset.Fields

Adodc1.Recordset.Fields(i)

 

11.4 Recordset對(duì)象

Recordset 對(duì)象是數(shù)據(jù)記錄的集合,而數(shù)據(jù)記錄又是字段的集合,因此利用Recordset對(duì)象,在程序中就可以存取所有數(shù)據(jù)記錄的每一個(gè)字段的數(shù)據(jù)了,所以說(shuō) Recordset對(duì)象是存取數(shù)據(jù)庫(kù)數(shù)據(jù)最重要的源頭。在數(shù)據(jù)庫(kù)的程序設(shè)計(jì)中,Recordset對(duì)象是最為重要的對(duì)象。

一、Recordset與數(shù)據(jù)表的存取

前面介紹幾個(gè)改變Recordset對(duì)象的當(dāng)前數(shù)據(jù)記錄的方法――MoveNext、MovePrevious、MoveFirst、MoveLast方法,通過(guò)這幾個(gè)方法就可以存取整個(gè)數(shù)據(jù)表的數(shù)據(jù)。其關(guān)系可用圖11-15來(lái)表示。

MoveFirst

MovePrevious

MoveNext

MoveLast

 
Recordset對(duì)象                                                      數(shù)據(jù)表

 

 

 

 

 

 

 

 

 

當(dāng)前記錄

 

 


Recordset.Fields來(lái)存取

 

 


                   圖11.4-1  Recordset對(duì)象與數(shù)據(jù)表之間的關(guān)系

如程序:

for I=0 to Adodc1.Recordset.Fields.Count-1

Debug.Print Adodc1.Recordset.Fields(i).Value

Next

1.避免沒(méi)有當(dāng)前數(shù)據(jù)記錄的錯(cuò)誤

利用MovePrevious、MoveNext移到記錄指針時(shí),應(yīng)注意移過(guò)頭現(xiàn)象發(fā)生。所謂移過(guò)頭是指:

指針位于第一天記錄時(shí),調(diào)用MovePrevious方法。

指針位于最后一條記錄時(shí),調(diào)用Monenext方法。

我們可以利用Recordset對(duì)象的EOF或BOF屬性,來(lái)加以判斷。

BOF及EOB屬性的應(yīng)用:

Adodc1.Recordset.MoveFirst

While Not Adodc1.Recordset.Eof

s=””

For I=0 to Adodc1.Recordset.Fields.Count-1

s=s & Adodc1.Recordset.Fields(i).Value & vbTab

Next

List1.Additem s

Adodc1.Recordset.MoveNext

Wend

 

Adodc1.Recordset.MoveNext

While Not Adodc1.Recordset.Bof

s=””

For I=0 to Adodc1.Recordset.Fields.Count-1

s=s & Adodc1.Recordset.Fields(i).Value & vbTab

Next

List1.Additem s

Adodc1.Recordset.MovePrevious

Wend

2.  存取字段數(shù)據(jù)的幾種各數(shù)

1)Adodc1.Recordset.Fields(i).Value         如:Adodc1.Recordset.Fields(0).Value

2)Adodc1.Recordset.Fields(字段名稱(chēng)).Value  如:Adodc1.Recordset.Fields(“學(xué)號(hào)”).Value

3.省略.Value的語(yǔ)句   如:Adodc1.Recordset.Fields(“股票代號(hào)”)

4.省略.Fields的語(yǔ)句   如:Adodc1.Recordset(“股票代號(hào)”)

5.Recordset![字段名稱(chēng)]   字段名稱(chēng)不能加引號(hào)

【注】Recordset(“字段名稱(chēng)”)最容易書(shū)寫(xiě)。

二、Recordset與數(shù)據(jù)記錄的增刪修改

在前面我們使用DataGrid控件的AllowAdd屬性和AllowDelete屬性設(shè)置為T(mén)rue,使它具有修改、增加和刪除數(shù)據(jù)的功能。但大批數(shù)據(jù)的處理使用該方法不方便,下面介紹Recordset對(duì)象修改、增加和刪除數(shù)據(jù)的方法。

1.  刪除數(shù)據(jù)記錄

首先要將欲刪除的記錄置為當(dāng)前記錄,然后調(diào)用Recordset.Delete方法進(jìn)行刪除。如:

Adodc1.Recordset.MoveLast

Adodc1.Recordset.Delete

刪除多條記錄時(shí),在Delete方法后加上DoEvents語(yǔ)句。

2.  修改數(shù)據(jù)記錄

修改數(shù)據(jù)記錄分兩步走,先把數(shù)據(jù)寫(xiě)到緩沖區(qū),然后再寫(xiě)入數(shù)據(jù)庫(kù)。數(shù)據(jù)寫(xiě)入可調(diào)用Recordset.Update方法和使用Move…方法。其具體過(guò)程如下:

方法一:

Adodc1.Recordset(“字段名稱(chēng)1”)=字段新值

Adodc1.Recordset(“字段名稱(chēng)2”)=字段新值

Adodc1.Recordset.Update

方法二:

Adodc1.Recordset(“字段名稱(chēng)1”)=字段新值

Adodc1.Recordset(“字段名稱(chēng)2”)=字段新值

Adodc1.Recordset.MoveNext

CancelUpdate方法:取消更新的數(shù)據(jù)

除了調(diào)用Update方法或改變當(dāng)前數(shù)據(jù)記錄的位置來(lái)使要更新的數(shù)據(jù)立即寫(xiě)入到數(shù)據(jù)庫(kù)中之外,Recordset對(duì)象也允許在修改數(shù)據(jù)記錄之后,數(shù)據(jù)尚未寫(xiě)入數(shù)據(jù)庫(kù)之前,將更新的數(shù)據(jù)撤消,讓表中的數(shù)據(jù)恢復(fù)原狀,此時(shí)調(diào)用的方法是CancelUpdate方法。

3.  新增數(shù)據(jù)記錄

新增數(shù)據(jù)記錄是先建立一個(gè)緩沖區(qū),并將此緩沖區(qū)設(shè)置為當(dāng)前記錄,然后就可以像修改記錄的數(shù)據(jù)一樣,修改當(dāng)前記錄的內(nèi)容。最后,如果確定要新增該條記錄數(shù)據(jù),就調(diào)用Update方法或移動(dòng)當(dāng)前數(shù)據(jù)記錄將數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中;如果要取消新增的記錄數(shù)據(jù)的操作,就調(diào)用CancelUpdate方法,其新增記錄數(shù)據(jù)的語(yǔ)句大致如下:

Adodc1.Recordset.AddNew

Adodc1.Recordser(“字段名稱(chēng)1”)= “新的字段值1”

Adodc1.Recordser(“字段名稱(chēng)2”)= “新的字段值2”

Adodc1.Recordset.Update 或Adodc1.Recordset.CancelUpdate

三、Recordset與數(shù)據(jù)記錄的檢索

1.檢索數(shù)據(jù)記錄的方法

1)Find方法

格式:Recordset.Find Criteria,SkipRows,SearchDirection,Start

參數(shù)1:Criteria:檢索記錄數(shù)據(jù)的表達(dá)式。如:“語(yǔ)文>85”。該參數(shù)的變化相當(dāng)多,稍后進(jìn)一步說(shuō)明。

參數(shù)2:SkipRows:跳過(guò)幾條記錄開(kāi)始檢索??墒÷裕羰÷云淠J(rèn)值為0,表示從第一條記錄開(kāi)始。

參數(shù)3:SearchDirection:檢索的方向??梢允莂dSearchForward或adSearchBackward,可以省略,若省略表示向下檢索。

參數(shù)4:Start:開(kāi)始檢索的位置??墒÷?,若省略表示從當(dāng)前數(shù)據(jù)記錄開(kāi)始檢索。

2)檢索結(jié)果與當(dāng)前記錄

如果調(diào)用Find方法后找到符合要求的記錄數(shù)據(jù),則當(dāng)前記錄將移至被找到的記錄,否則當(dāng)前記錄數(shù)據(jù)變成不存在??衫肦ecordset對(duì)象的BOF、EOF屬性進(jìn)行判斷。

2.  檢索數(shù)據(jù)記錄的表達(dá)式

Find方法的參數(shù)中,變化最多的是Criteria參數(shù),在此作進(jìn)一步的討論。

1)表達(dá)式的基本格式

“字段名稱(chēng)  比較運(yùn)算符  比較的數(shù)據(jù)”

2)表達(dá)式的字段名稱(chēng)

表達(dá)式=字段名稱(chēng)  比較符號(hào)  比較的數(shù)據(jù)

(1)表達(dá)式中的“字段名稱(chēng)”必須是數(shù)據(jù)表中已存在的字段名稱(chēng)。

(2)如果字段名稱(chēng)中含有空格字符,則字段名稱(chēng)前后必須加[ ]。

3)表達(dá)式之“比較的數(shù)據(jù)”

表達(dá)式=字段名稱(chēng)  比較符號(hào)  比較的數(shù)據(jù)

(1)比較的數(shù)據(jù)是常量

比較的數(shù)據(jù)按數(shù)據(jù)類(lèi)型可分為“數(shù)值”、“日期時(shí)間”和“字符串”三種類(lèi)型。

數(shù)據(jù)類(lèi)型

表達(dá)式

數(shù)值

“語(yǔ)文>85”

字符串

“姓名=‘張三’”

日期數(shù)據(jù)

“出生日期>#1975/7/1#”

(2)比較的數(shù)據(jù)是變量

設(shè)v為數(shù)值:   “字段名稱(chēng)比較符號(hào)>” & v

v為日期數(shù)據(jù):“字段名稱(chēng)比較符號(hào) #” & v & “#”

v為字符串:  “字段名稱(chēng)比較符號(hào) ‘” & v “’”

4)表達(dá)式之“比較符號(hào)”

表達(dá)式=字段名稱(chēng)  比較符號(hào)  比較的數(shù)據(jù)

VB程序中的比較符號(hào)包含=、<>、>、<、>=、<=均可用于記錄數(shù)據(jù)的比較。此外,Like比符號(hào)也可用于比較表達(dá)式中。其格式:

字段名稱(chēng)  Like 比較的字符串

該表達(dá)式用于字符串?dāng)?shù)據(jù)的“近似”(Like)比較,其中“比較的字符串”部分可以包含“%”、“*”或“_”(下劃線)通配符。如:

“姓名 Like‘張%’”

11.5 Data-Aware(數(shù)據(jù)識(shí)別)控件

前面介紹了兩種存取數(shù)據(jù)的方法:使用Recordset對(duì)象和DataGrid控件。經(jīng)過(guò)比較容易發(fā)現(xiàn)DataGrid控件比Recordset對(duì)象簡(jiǎn)便得多。。

DataGrid 控件一樣具有自動(dòng)顯示和更新數(shù)據(jù)功能的控件,稱(chēng)為Data-Aware(數(shù)據(jù)識(shí)別)控件(簡(jiǎn)稱(chēng)數(shù)據(jù)識(shí)別控件)。在Visual Basic中,除了DataGrid控件外,數(shù)據(jù)識(shí)別還有Label、TextBox、CheckBox、ListBox、ComboBox、 Image、PictureBox、MonthView、DTPicker、DataList、DataCombo等控件。如能充分運(yùn)用,就可在數(shù)據(jù)庫(kù)程 序的設(shè)計(jì)中游刃有余了。

一、數(shù)據(jù)識(shí)別控件的基本概念

數(shù)據(jù)識(shí)別控件分為兩類(lèi):表格式和單欄式。

表格式DataGrid控件。

單欄式是指每次只能存取當(dāng)前數(shù)據(jù)記錄的某個(gè)字段的數(shù)據(jù)。單欄式控件必須設(shè)置兩個(gè)屬性:DataSource屬性設(shè)置為ADODC控件的名稱(chēng)和DataField(數(shù)據(jù)字段)屬性設(shè)置為某一個(gè)字段名。

二、數(shù)據(jù)識(shí)別控件的選擇

數(shù)據(jù)識(shí)別控件

適應(yīng)的數(shù)據(jù)字段

Label

只讀的文本字段

TextBox

一般性文字字段,包含文本。數(shù)值

CheckBox

Boolean字段,如“是否”、“真假”等

ComboBox、ListBox

列表式的字段

Image、PictureBox

圖片字段

DTPicker、MonthView

日期類(lèi)型字段

三、舉例-DTPicker控件的使用

單擊“工程/ 部件”打開(kāi)部件對(duì)話框,選定Microsoft ADO Data Control6.0(OLEDB)和Microsoft Windows Common Controls-2 6.0,把ADODC和DTPicker控件添加到工具箱,布置窗體如圖11-11所示,把ADODC控件連接到xjgl.mdb下的“基本情況表”,把 Text1-Text5依次學(xué)號(hào)、姓名、性別、成分和籍貫字段進(jìn)行綁定,DTPicker控件與出生日期字段進(jìn)行綁定,運(yùn)行該程序并單擊DTPicker 控件即出現(xiàn)圖11-16界面,即可對(duì)出生日期字段的值進(jìn)行修改。

11.5-1 DTPicker控件的使用

 

11.6 結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)

一、 SQL簡(jiǎn)介

1.SQL概念

SQL(Structured Query Language,結(jié)構(gòu)化查詢(xún)語(yǔ)言)是要求數(shù)據(jù)庫(kù)操作其數(shù)據(jù)的語(yǔ)句,它是專(zhuān)門(mén)為數(shù)據(jù)庫(kù)設(shè)計(jì)出來(lái)的語(yǔ)言,比一般的程序語(yǔ)言簡(jiǎn)單。SQL語(yǔ)言主要分成兩部分:DDL(Data Definition)和DML(Data Manipulation Language)。其中DDL是建立數(shù)據(jù)表和字段的語(yǔ)句集,而DML則是操作記錄數(shù)據(jù)的語(yǔ)句集。

2.SQL基本格式

Select…From…

Select 學(xué)號(hào),姓名,籍貫 From 基本情況

3.利用VB下達(dá)Select語(yǔ)句

CommandType屬性:1-adCmdText

RecordSource(記錄源)屬性:Select 學(xué)號(hào),姓名,籍貫 From 基本情況表

使用SQL顯示xjgl.mdb下“基本情況表”的步驟:

1)  添加Microsoft ADO Data Control6.0(OLEDB)和Microsoft DataGrid Control6.0

(OLEDB)到窗體,將ADODC連接到數(shù)據(jù)庫(kù)xjgl.mdb。

2)設(shè)置ADODC控件的RecordSource屬性,如圖11.6-1所示。單擊確定按鈕。

3)將DataGrid控件的DataSource屬性設(shè)置為ADODC控件。

運(yùn)行程序,即可得到如圖11.6-2所示的結(jié)果。

11.6-1  SQL的使用

11.6-2  SQL運(yùn)行結(jié)果

二、Select語(yǔ)法簡(jiǎn)介

1.基本語(yǔ)法一:Select字段列表 From 數(shù)據(jù)表

1)字段列表的變化一

(1)“*”語(yǔ)法

如果字段列表涵蓋數(shù)據(jù)表中的所有字段,則可用“*”代表。如:

select * from 基本情況

(2)as語(yǔ)法

字段列表還可以是別名。如:字段名1 as 別名1,字段名2 as 別名2

2)字段列表的變化二

除了字段名可以成為Select語(yǔ)句的字段列表外,用字段名稱(chēng)組合出的表達(dá)式,也可成為字段列表成員。如:

select 學(xué)號(hào),姓名,語(yǔ)文,英語(yǔ),數(shù)學(xué),語(yǔ)文+英語(yǔ)+數(shù)學(xué) as 總分 from 成績(jī)

3)字段列表的變化三

Select中只要是符合VB規(guī)則的表達(dá)式都可以用來(lái)定義新字段。如:

select right(學(xué)號(hào),2) as 編號(hào),姓名,數(shù)學(xué) from 成績(jī)

2.基本語(yǔ)法二:select…from…where篩選表達(dá)式

如果只想篩選出部分?jǐn)?shù)據(jù),就可增加Where表達(dá)式。

1)篩選表達(dá)式的變化

篩選表達(dá)式中可使用=、>、<、<>、>=、<=等運(yùn)算符,也可使用and、or、not邏輯運(yùn)算符和Like近似比較運(yùn)算符。

(1)字符串的近似(Like)選取

select * from 成績(jī) where 姓名 like ‘王%’

(2)%與_的區(qū)別

2)其它的where篩選表達(dá)式

除使用以上運(yùn)算符外,還可使用以下一些運(yùn)算符:

(1)where 字段名稱(chēng) between 值1 and 值2

where 字段名稱(chēng) not between 值1 and 值2

(2)where 字段名稱(chēng) in(值1,值2,…)集合運(yùn)算

(3)where 字段名稱(chēng) is Null與where 字段名稱(chēng) is not Null

如果某一筆記錄的某一字段并未輸入任何數(shù)據(jù),那么該字段就為Null字段。上面的篩選表達(dá)式可以挑出某一字段為Null或非Null的記錄數(shù)據(jù)。

3)VB函數(shù)的使用

其實(shí)VB函數(shù)也可用于where篩選表達(dá)式,如:

select * from 成績(jī)單 where mid(姓名,2,1)=‘小’

3.基本語(yǔ)法三:select…from…order by 字段列表

1)單字段排序

Order By子句主要對(duì)最終輸出結(jié)果進(jìn)行排序,這有助于數(shù)據(jù)的瀏覽與查閱。如:

Select * from 成績(jī) order by 語(yǔ)文

2)多字段排序

如:Select * from 成績(jī) order by 語(yǔ)文,英語(yǔ),數(shù)學(xué)

3)排序方式

asc(默認(rèn))升序   deac降序

4)select top:限定選取數(shù)據(jù)記錄的條數(shù)

如:select * from 成績(jī) order by 語(yǔ)文+英語(yǔ)+數(shù)學(xué) desc

select top 10 * from 成績(jī) order by 語(yǔ)文+英語(yǔ)+數(shù)學(xué) desc  `取前十條

select top 10 percent * from 成績(jī) order by 語(yǔ)文+英語(yǔ)+數(shù)學(xué) `desc 取百分比

三、動(dòng)態(tài)執(zhí)行Select語(yǔ)句的技巧

前面已經(jīng)介紹利用Recordset 對(duì)象的Find方法進(jìn)行數(shù)據(jù)的查找。對(duì)SQL而言,“where 篩選表達(dá)式”中的“篩選表達(dá)式”,與Find方法的“搜尋數(shù)據(jù)的表達(dá)式”在功能上十分類(lèi)似。但Find方法對(duì)數(shù)據(jù)進(jìn)行逐條比較,數(shù)據(jù)量較大時(shí),效率很低。 因此,可先用SQL語(yǔ)句篩選符號(hào)條件的記錄,然后再進(jìn)行Find方法查找。

1.動(dòng)態(tài)執(zhí)行Select語(yǔ)句的技巧

要想動(dòng)態(tài)執(zhí)行某一Select語(yǔ)句,程序必須如下:

Adodc1.CommandType=adCmdText

Adodc1.RecordSource=Select語(yǔ)句

Adodc1.Refresh

2.動(dòng)態(tài)組合SQL語(yǔ)句的注意事項(xiàng)

字符型數(shù)據(jù):select * from 數(shù)據(jù)表 where 字段名稱(chēng)=’” & Text1.Text & “’”

日期型數(shù)據(jù):select * from 數(shù)據(jù)表 where 字段名稱(chēng)= ” & Text1.Text & “ ”

數(shù)值型數(shù)據(jù):select * from 數(shù)據(jù)表 where 字段名稱(chēng)=” & Text1.Text

3.Where篩選表達(dá)式與Find表達(dá)式的差異

1.Where篩選表達(dá)式可使用邏輯運(yùn)算符and、or、not,F(xiàn)ind表達(dá)式不能使用邏輯運(yùn)算符。

2.Where篩選表達(dá)式中的Between…And和Is Null/Is Not Null均無(wú)法在Find中使用。

3.Where篩選表達(dá)式中可以使用VB函數(shù),而Find表達(dá)式中是不能使用的。

 

11.7  ADO(Active Data Objects)對(duì)象模型

我們前面一直使用ADODC和其它數(shù)據(jù)識(shí)別控件來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)程序。為了打好數(shù)據(jù)庫(kù)基礎(chǔ),Visual Basic數(shù)據(jù)庫(kù)最核心的對(duì)象群-- Active Data Objects(簡(jiǎn)稱(chēng)ADO)就是我們必須要掌握的,如圖11-19。

 

 

 

 

 

 

 

 

 

 

 

 


11.7-1   ADO對(duì)象結(jié)構(gòu)圖

一、ADO的首次使用

對(duì)比圖11.3-8中可以看出ADO比 ADODC控件復(fù)雜一點(diǎn),實(shí)際上它們的概念是一致的。在ADO對(duì)象結(jié)構(gòu)圖中可以發(fā)現(xiàn)一個(gè)熟悉的名字—Recordset,它與我們前面使用的Recordset(ADODC的屬性)是相同的對(duì)象。

先看一個(gè)ADO打開(kāi)數(shù)據(jù)庫(kù)的例子:

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Private Sub Form_Load()

Dim ConnStr As String

ConnStr = "Provider=Microsoft.Jet.OLEDB.3.51;" & _

"Data Source=f:\xjgl\xjgl.mdb"

conn.Open ConnStr

rs.CursorLocation = adUseClient

rs.Open "基本情況表", conn, adOpenKeyset, adLockPessimistic

End Sub

 

Private Sub Command1_Click() ' 顯示 Recordset 的所有記錄數(shù)據(jù)

Dim S As String, i As Integer

rs.MoveFirst

List1.Clear

While Not rs.EOF

S=""

For i = 0 To rs.Fields.Count - 1

S=S & rs.Fields(i).Value & vbTab

Next

List1.AddItem S

rs.MoveNext

Wend

End Sub

在以上程序中,使用了MoveFirst、EOF、MoveNext方法和Fields子對(duì)象,使用這些方法和Fields子對(duì)象的對(duì)象不再是Adodc1.Recordset對(duì)象,而是rs對(duì)象。

1.打開(kāi)數(shù)據(jù)庫(kù)(表)

我們?cè)倏匆幌律厦娲蜷_(kāi)數(shù)據(jù)庫(kù)的語(yǔ)句:

ConnStr = "Provider=Microsoft.Jet.OLEDB.3.51;" & _

"Data Source=e:\xjgl\xjgl.mdb"

conn.Open ConnStr

rs.CursorLocation = adUseClient

rs.Open "基本情況表",conn,adOpenKeyset,adLockPessimistic

其主要由三部分組成:

Provider參數(shù):用來(lái)指定OLE DB驅(qū)動(dòng)程序。

DataSource參數(shù):用來(lái)指定數(shù)據(jù)庫(kù)的來(lái)源,它與Provider參數(shù)合起來(lái)構(gòu)成“連接字符串”。

股票行情表:出現(xiàn)在rs.Open方法的參數(shù),用來(lái)指定想要打開(kāi)的數(shù)據(jù)表。

結(jié)論:通過(guò)比較我們發(fā)現(xiàn)前面兩個(gè)例子打開(kāi)數(shù)據(jù)庫(kù)的方法幾乎是一樣的,ADODC控件仍調(diào)用ADO所提供的方法來(lái)打開(kāi)數(shù)據(jù)庫(kù)(表)。

2.使用ADO對(duì)象之前

在使用ADO對(duì)象之前,必須先利用VB菜單的“工程/引用”來(lái)引用“Microsoft Active Data Objects 2.0 Library”,如圖11-20所示,然后ADO對(duì)象群中Connection、Recordset、Command、Fields等對(duì)象才會(huì)成為可以引用的對(duì)象。否則,類(lèi)似下面的語(yǔ)句:

dim conn as new ADODB.Connection

dim rs as New ADODB.Recordset

都會(huì)產(chǎn)生“用戶(hù)定義類(lèi)型未定義”的錯(cuò)誤,因?yàn)?#8220;Connection”和“Recordset”都是定義在“Microsoft Active Data Objects 2.0 Library”中的。如果沒(méi)有事先將其引用的話,VB將無(wú)法辨識(shí)它們。

11.7-2  Microsoft Active Data Objects 2.0 Library的引用

3.使用ADO的基本概念

從以上例子中我們可以看到,使用ADODC比使用ADO要簡(jiǎn)單得多,但使用ADO比使用ADODC專(zhuān)業(yè)的多。

“對(duì)象類(lèi)別”的引用及表示法:

語(yǔ)句格式:dim rs as ADODB.Recordset

其中,rs稱(chēng)為“對(duì)象變量”,Recordset稱(chēng)為“對(duì)象類(lèi)別名稱(chēng)”,ADODB則稱(chēng)為“對(duì)象類(lèi)別模塊”,整個(gè)語(yǔ)句被解釋為“建立一個(gè)Recordset類(lèi)別的對(duì)象變量、而Recordset對(duì)象類(lèi)型是來(lái)自ADODB對(duì)象類(lèi)別模塊的”。

注意:ADODB正是“Microsoft Active Data Objects 2.0 Library”在程序設(shè)計(jì)中的簡(jiǎn)稱(chēng)。

二、Connection對(duì)象:操作數(shù)據(jù)庫(kù)的源頭

ADO對(duì)象群以Connection對(duì)象為源頭,通過(guò)Connection對(duì)象才可以打開(kāi)其下面的Recordset及Command對(duì)象,進(jìn)而對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。

1.Connection對(duì)象的建立及打開(kāi)

1)Connection對(duì)象的建立

要使用某一對(duì)象時(shí),必須經(jīng)過(guò)“定義”和“建立”兩個(gè)步驟。即:

Dim conn as ADODB.Connection  ‘定義一個(gè)Connection類(lèi)別的對(duì)象變量

Set conn=New ADODB.Connection  ‘建立對(duì)象,并指定給conn對(duì)象變量

也可合二為一:

Dim conn as New ADODB.Connection

2)Connection對(duì)象的打開(kāi)

以上語(yǔ)句只是建立了Connection對(duì)象,還無(wú)法使用。要想使用Connection對(duì)象,就必須指定OLE DB Provider和Data Source兩個(gè)參數(shù),然后再調(diào)用Open方法。如:

Connstr=“Provider=Microsoft.Jet.OLEDB3.51;” & “Data Source=f:\xjgl\xjgl.mdb”

Conn.Open Connstr

2.?dāng)?shù)據(jù)表的打開(kāi)與Connection對(duì)象

打開(kāi)數(shù)據(jù)表可用以下語(yǔ)句

Dim conn as New ADODB.Connection

Connstr=“Provider=Microsoft.Jet.OLEDB3.51;” & “Data Source= f:\xjgl\xjgl.mdb”

Conn.Open Connstr

 

Rs.CursorLocation=adUseClient

Rs.Open “基本情況”,conn,adOpenKeyset,adLockPessimistic

3.Connection對(duì)象的關(guān)閉及釋放

當(dāng)程序不再使用數(shù)據(jù)庫(kù)時(shí),可以調(diào)用Connection對(duì)象的Close方法將其關(guān)閉。

1)Connection對(duì)象的關(guān)閉

Dim conn as New ADODB.Connection

Connstr=“Provider=Microsoft.Jet.OLEDB3.51;” & “Data Source= f:\xjgl\xjgl.mdb”

Conn.Open Connstr

Rs.CursorLocation=adUseClient

Rs.Open “基本情況”,conn,adOpenKeyset,adLockPessimistic

conn.Close

2.Connection對(duì)象的歸還

Connection對(duì)象一經(jīng)關(guān)閉,Connection對(duì)象和Recordset對(duì)象就不可使用,但Connection對(duì)象仍然存在,還會(huì)占有一定的系統(tǒng)資源,如果想完全釋放,則必須調(diào)用以下語(yǔ)句:

Set conn=Nothing

總結(jié):Connection對(duì)象的建立、打開(kāi)數(shù)據(jù)庫(kù)、打開(kāi)數(shù)據(jù)表、關(guān)閉數(shù)據(jù)庫(kù)到歸還Connection對(duì)象所占有的系統(tǒng)資源,其完整過(guò)程如下:

步驟一:建立Connection對(duì)象

dim conn as New ADODB.Connection

‘步驟二:打開(kāi)數(shù)據(jù)庫(kù)

conn.Open ConnStr

‘步驟三:打開(kāi)數(shù)據(jù)表

Rs.CursorLocation=adUseClient

Rs.Open “基本情況”,conn,adOpenKeyset,adLockPessimistic

‘步驟四:關(guān)閉數(shù)據(jù)庫(kù)

conn.Close

‘步驟五:歸還Connection對(duì)象所占用的系統(tǒng)資源

Set conn=Nothing

一般會(huì)省略第四步和第五步,因?yàn)槌绦蜿P(guān)閉時(shí),該程序所打開(kāi)的數(shù)據(jù)庫(kù)會(huì)自動(dòng)關(guān)閉,而Connection對(duì)象所占用的系統(tǒng)資源也會(huì)自動(dòng)釋放給系統(tǒng)。

三、Command對(duì)象與SQL語(yǔ)句的執(zhí)行

Command對(duì)象也是ADO對(duì)象群的一員。Command對(duì)象主要是專(zhuān)門(mén)用來(lái)執(zhí)行SQL語(yǔ)句的。

我們先來(lái)回憶一下前面介紹的SQL語(yǔ)句的執(zhí)行過(guò)程:

‘使用ADODC

Adodc1.RecordSource=SQL語(yǔ)句

Adodc1.CommandType=adCmdText

Adodc1.Refresh

 

‘使用Recordset.Open方法執(zhí)行SQL語(yǔ)句

rs.Open SQL語(yǔ)句,conn,adopenDynamic,adLockOptimistic

顯然,上面兩種方法都沒(méi)有使用Command對(duì)象,但一樣執(zhí)行SQL語(yǔ)句。

1.Command對(duì)象執(zhí)行SQL語(yǔ)句

Dim conn As New ADODB.Connection

Dim cmd As New ADODB.Command

Dim rs As New ADODB.Recordset

 

Set cmd.ActiveConnection = conn

SQL = "Select * From 基本情況表Where 姓名 Like '李%'"

cmd.CommandText = SQL

Set rs = cmd.Execute

 

做一個(gè)對(duì)比:               SQL語(yǔ)句

Recordset對(duì)象 rs.Open SQL,conn        Connection對(duì)象

Command對(duì)象   Set Cmd.ActiveConnection=conn

               Cmd.CommandText=SQL              Connection對(duì)象

               Set rs=Cmd.Execute     SQL語(yǔ)句

通過(guò)以上比較發(fā)現(xiàn),兩種方法其實(shí)是同樣的。

2.帶參數(shù)的SQL語(yǔ)句

其實(shí)Command對(duì)象最大的妙用在于執(zhí)行“帶參數(shù)的SQL語(yǔ)句”。如:

Select * from 成績(jī) where 語(yǔ)文 between [low] and [high]

            between 60 and 90

3.執(zhí)行帶參數(shù)的SQL語(yǔ)句

如何執(zhí)行帶參數(shù)的SQL語(yǔ)句?如下:

Set cmd.ActiveConnection = conn

SQL="Select * From 成績(jī)表 Where 語(yǔ)文 Between [low] And [high]"

cmd.CommandText = SQL

 

Dim param(1) ' 定義兩個(gè)含有兩個(gè)元素的數(shù)組陣列

param(0) = Val(Text1.Text)

param(1) = Val(Text2.Text)

Set rs = cmd.Execute(, param)

以上cmd.Execute語(yǔ)句多了兩個(gè)參數(shù),其意義如下:

參數(shù)1:返回?cái)?shù)據(jù)記錄的條數(shù),若省略,就表示返回所有的數(shù)據(jù)記錄。

參數(shù)2:用來(lái)指定SQL語(yǔ)句的參數(shù)值,應(yīng)該傳人一個(gè)一維數(shù)組。如上例。

帶有參數(shù)的SQL語(yǔ)句的變形:

Select * From 成績(jī) Where 語(yǔ)文 Between [low] And [high]

Select * From 成績(jī) Where 語(yǔ)文 Between ?And ?

 

 

11.8 數(shù)據(jù)環(huán)境與報(bào)表設(shè)計(jì)器

通過(guò)前面的學(xué)習(xí),我們了解到存取數(shù)據(jù)庫(kù)的首要任務(wù),是建立Recordset對(duì)象,然而建立Recordset對(duì)象的方法有許多變化,變化之多,常令初學(xué)者不知所措,而Data Envionment的主要功能就是把這些讓人眼花繚亂的內(nèi)容集成在一起,一方面提供給用戶(hù)容易操作的可視化環(huán)境,另一方面也提供給數(shù)據(jù)庫(kù)程序一致的界面。

一、 Data Envionment使用

1.Data Envionment的添加與設(shè)置

利用Data Environment打開(kāi)xjgl.mdb的“基本情況表”,那么操作過(guò)程如下:

1)選取Visual Basic菜單的“工程/更多ActiveX設(shè)計(jì)器”,再單擊“Data Environment”,添加一個(gè)Data Environment到工程中,此時(shí)Data Environment所顯示的窗口如圖11.8-1。Data Environment默認(rèn)名稱(chēng)為DataEnvironment1,已包含一個(gè)連接對(duì)象Connection1。

2)在Connection1對(duì)象上單擊鼠標(biāo)右鍵,選擇其快捷菜單下的“屬性”命令,接下來(lái)會(huì)出現(xiàn)“數(shù)據(jù)連接屬性”對(duì)話框,然后選取“Provider”選項(xiàng)卡下的“Microsoft Jet 3.51 OLE DB Provider”,在“連接”選項(xiàng)卡中選“xjgl.mdb”,當(dāng)設(shè)置完成后,單擊“確定”按鈕返回到Data Environment窗口中。(此設(shè)置過(guò)程與ADODC控件的設(shè)計(jì)界面是相同的)。

3) 在Connection1對(duì)象上單擊鼠標(biāo)右鍵,選擇其快捷菜單下的“添加命令”命令,如圖11.8-2所示,在Connection1下面會(huì)添加一個(gè)Command對(duì)象,其默認(rèn)名稱(chēng)為Command1。

4)在Command1對(duì)象上單擊鼠標(biāo)右鍵,選擇其快捷菜單下的“屬性”命令,接著會(huì)出現(xiàn)“Command1屬性”對(duì)話框,在“通用”選項(xiàng)卡中選取“數(shù)據(jù)庫(kù)對(duì)象”下拉列表中的“表”選項(xiàng),在“對(duì)象名稱(chēng)” 下拉列表中的“基本情況表”,如圖11.8-3所示。

11.8-1  Data Environment窗口

11.8-2 添加命令窗口

11.8-3  Command1屬性窗口

經(jīng)過(guò)以上四個(gè)步驟之后,我們其實(shí)就是建立了一個(gè)Connection對(duì)象和一個(gè)Command對(duì)象,具體設(shè)置如下:

對(duì)象

屬性或參數(shù)

設(shè)置值

Connection

Provider

Microsoft Jet 3.51 OLE DB

Data Source

xjgl.mdb

Command

CommandType

AdCmdTable

CommandText

基本情況表

如果我們不使用Data Environment,而使用ADO來(lái)建立這兩個(gè)對(duì)象,則程序如下:

Dim Connection1 As New ADODC.

Dim Command1 As New ADODC.Command

ConnStr=“Provider=Microsoft.Jet.OLEDB.3.51;Data Source=xjgl.mdb”

Connection1.Open ConnStr

Set Command1.ActiveConnection=Connection1

Command1.CommandType=adCmdTable

Command1.CommandText=“基本情況表”

就像ADODC不具備顯示數(shù)據(jù)的能力一樣,Data Envionment也不具備顯示數(shù)據(jù)的能力,如要顯示數(shù)據(jù),就必須使用數(shù)據(jù)識(shí)別控件。以DataGrid為例:

DataGrid屬性

設(shè)置值

說(shuō)明

DataSource

DataEnvironment1

這是Data Envionment名稱(chēng)

DataMember

Command1

這是Command對(duì)象的名稱(chēng)

運(yùn)行該程序,DataGrid就會(huì)顯示出來(lái)自DataEnvionment1/Command1的數(shù)據(jù)了。

2.多數(shù)據(jù)來(lái)源與DataMember屬性

若與ADODC相比,在設(shè)置過(guò)程中數(shù)據(jù)識(shí)別控件與Data Envionment連接所需要的屬性比ADODC的連接多了一個(gè)DataMember屬性。

其實(shí)DataMember在Data Envionment中十分重要,因?yàn)樵谕粋€(gè)Data Envionment下可以建立多個(gè)Connection對(duì)象,而同一個(gè)Connection對(duì)象下又可以建立多個(gè)Command對(duì)象,通過(guò)Command對(duì)象可以存取不同的數(shù)據(jù)源。下面接著上面的例子來(lái)說(shuō)明。

1)在Connection1對(duì)象上單擊鼠標(biāo)右鍵,選擇其快捷菜單下的“添加命令”命令,在Connection1下面會(huì)添加一個(gè)Command對(duì)象,其默認(rèn)名稱(chēng)為Command2。

2) 在Command2對(duì)象上單擊鼠標(biāo)右鍵,選擇其快捷菜單下的“屬性”命令,接著會(huì)出現(xiàn)“Command2屬性”對(duì)話框,在“通用”選項(xiàng)卡中選取“數(shù)據(jù)庫(kù)對(duì)象”下拉列表中的“表”選項(xiàng),在“對(duì)象名稱(chēng)” 下拉列表中的“成績(jī)表”。

3)先選取DataGrid對(duì)象,然后單擊其DataMember屬性,這時(shí)可以看到可選擇的屬性值多了一個(gè)Command2,如圖11-24。如果將DataGrid的DataMember屬性設(shè)置為Command2,那么程序運(yùn)行后,DataGrid將會(huì)顯示“成績(jī)表”的內(nèi)容。

11.8-4 屬性窗口

其實(shí),除了可以添加Command 對(duì)象外,也可添加Connection對(duì)象,添加方法是在DataEnvionment1上單擊鼠標(biāo)右鍵,選擇快捷菜單下的“添加連接”命令,即可添加另 一個(gè)Connection對(duì)象,其默認(rèn)名稱(chēng)為Connection2,這樣Connection2下又可以添加多個(gè)Command對(duì)象用于分別連接不同的 數(shù)據(jù)表。

二、報(bào)表設(shè)計(jì)器

Data Envionment的另一個(gè)重要用途是為“報(bào)表設(shè)計(jì)器”提供數(shù)據(jù)源。VB6所提供的報(bào)表設(shè)計(jì)器稱(chēng)為Data Report,但必須在專(zhuān)業(yè)版或企業(yè)版中才有這個(gè)控件。新建工程后,選取VB菜單的“工程/添加Data Report”命令,即可添加Data Report至工程中。

我們把xjgl.mdb數(shù)據(jù)庫(kù)下的“基本情況表”輸出成報(bào)表,下面介紹報(bào)表制作過(guò)程:

1)首先添加一個(gè)Data Envionment到工程中,并連接好xjgl.mdb數(shù)據(jù)庫(kù)下的“基本情況表”。

2)添加一個(gè)Data Report到工程中,Data Report的結(jié)構(gòu)如圖11-25所示,含有報(bào)表標(biāo)頭、頁(yè)標(biāo)頭、細(xì)節(jié)、頁(yè)注腳和報(bào)表注腳五個(gè)帶區(qū),在屬性窗口可以發(fā)現(xiàn)除Data Report是一個(gè)對(duì)象外,Data Report上面的每一個(gè)帶區(qū)也各是一個(gè)對(duì)象。

     圖11.8-5 Data Report對(duì)象窗口

3)利用屬性窗口設(shè)置Data Report對(duì)象的DataSource屬性值為DataEnvionment1,DataMember屬性值為Command1。

4)從Data Envionment中拖動(dòng)對(duì)象Command1到Data Report的細(xì)節(jié)帶區(qū),出現(xiàn)如圖11-26所示結(jié)果。

11.8-6  Data Report的細(xì)節(jié)帶區(qū)窗口

5)在窗體上放置一個(gè)命令按鈕,并在其Click事件中輸入如下代碼:

DataReport1.Show

執(zhí)行該程序并單擊命令按鈕,則會(huì)出現(xiàn)Data Report的報(bào)表預(yù)覽窗口。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多