国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VB和數(shù)據(jù)庫

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

一、概念與術(shù)語

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

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

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

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

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

2. 字段(Field)

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

3. 記錄(Record)

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

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

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

5. 索引(Index)

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

6. 結(jié)構(gòu)化查詢語言(SQL)

SQL(Structure Query Language)是結(jié)構(gòu)化查詢語言的縮寫,是數(shù)據(jù)庫中通用的數(shù)據(jù)查詢編程語言,它是我們訪問數(shù)據(jù)庫的一種利器。在VisualBasic 中訪問數(shù)據(jù)庫時(shí),就可以利用SQL同數(shù)據(jù)庫進(jìn)行通訊。

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

一、編寫一個簡單數(shù)據(jù)庫程序

首先介紹Visual Basic所提供的兩個控件ADO Data Control(簡稱ADODC)和DataGrid處理數(shù)據(jù)庫程序的方法。ADOData Control和DataGrid都屬于ActiveX控件,它們在使用前需要先將其添加到工具箱中,以便在工程中使用。單擊“工程/部件”菜單項(xiàng),打開“部件”對話框,選定所需要的控件并確定,即可將其添加的工具箱中,如圖11.3-1所示。

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

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

   圖11.3-2 窗體窗口

    圖11.3-3 屬性頁窗口

在上圖中,單擊生成“按鈕”,則打開如圖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只能打開Access97下的數(shù)據(jù)庫,不能打開Access2000及以上版本的數(shù)據(jù)庫,如要打開Access2000下的數(shù)據(jù)庫,則必須選用Jet4.0,否則系統(tǒng)會出錯。

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

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

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

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

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

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

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

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

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

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

                        ADODC

 

 

 

 

 

 

 

 


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

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

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

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

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

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

 

   

 

 

 

 

 

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

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

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

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

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

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

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

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

DataGrid控件的屬性:

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

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

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

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

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

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

1.Field對象與字段

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

Name屬性:字段的名稱

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

       Name屬性    Field對象

 


學(xué)號

姓名

年齡

1001

張三

18

 

 

 

 Value屬性

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

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

Fields對象編號:0       1        2

學(xué)號

姓名

年齡

1001

張三

18

                                      

                                                                              

                                                                  

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

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

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

For i=0 to fds.Count-1         ‘fds為一個Fields集合對象

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

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

Next

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

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

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

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

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

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

 

方法

說明

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中幾個對象間的關(guān)系。

 

 

 

 

 

 

 

 


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

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

Adodc1.Recordset

Adodc1.Recordset.Fields

Adodc1.Recordset.Fields(i)

 

11.4 Recordset對象

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

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

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

MoveFirst

MovePrevious

MoveNext

MoveLast

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

 

 

 

 

 

 

 

 

 

當(dāng)前記錄

 

 


Recordset.Fields來存取

 

 


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

如程序:

for I=0 toAdodc1.Recordset.Fields.Count-1

Debug.PrintAdodc1.Recordset.Fields(i).Value

Next

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

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

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

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

我們可以利用Recordset對象的EOF或BOF屬性,來加以判斷。

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

Adodc1.Recordset.MoveFirst

WhileNot Adodc1.Recordset.Eof

s=””

ForI=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

WhileNot Adodc1.Recordset.Bof

s=””

ForI=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(字段名稱).Value  如:Adodc1.Recordset.Fields(“學(xué)號”).Value

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

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

5.Recordset![字段名稱]  字段名稱不能加引號

【注】Recordset(“字段名稱”)最容易書寫。

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

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

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

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

Adodc1.Recordset.MoveLast

Adodc1.Recordset.Delete

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

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

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

方法一:

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

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

Adodc1.Recordset.Update

方法二:

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

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

Adodc1.Recordset.MoveNext

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

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

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

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

Adodc1.Recordset.AddNew

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

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

Adodc1.Recordset.Update或Adodc1.Recordset.CancelUpdate

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

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

1)Find方法

格式:Recordset.FindCriteria,SkipRows,SearchDirection,Start

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

參數(shù)2:SkipRows:跳過幾條記錄開始檢索??墒÷?,若省略其默認(rèn)值為0,表示從第一條記錄開始。

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

參數(shù)4:Start:開始檢索的位置??墒÷裕羰÷员硎緩漠?dāng)前數(shù)據(jù)記錄開始檢索。

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

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

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

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

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

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

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

表達(dá)式=字段名稱  比較符號  比較的數(shù)據(jù)

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

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

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

表達(dá)式=字段名稱  比較符號  比較的數(shù)據(jù)

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

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

數(shù)據(jù)類型

表達(dá)式

數(shù)值

“語文>85”

字符串

“姓名=‘張三’”

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

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

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

設(shè)v為數(shù)值:   “字段名稱比較符號>”& v

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

v為字符串:  “字段名稱比較符號 ‘”& v “’”

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

表達(dá)式=字段名稱  比較符號  比較的數(shù)據(jù)

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

字段名稱  Like 比較的字符串

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

“姓名 Like‘張%’”

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

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

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

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

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

表格式DataGrid控件。

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

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

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

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

Label

只讀的文本字段

TextBox

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

CheckBox

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

ComboBox、ListBox

列表式的字段

Image、PictureBox

圖片字段

DTPicker、MonthView

日期類型字段

三、舉例-DTPicker控件的使用

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

11.5-1 DTPicker控件的使用

 

11.6 結(jié)構(gòu)化查詢語言(SQL)

一、 SQL簡介

1.SQL概念

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

2.SQL基本格式

Select…From…

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

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

CommandType屬性:1-adCmdText

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

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

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

(OLEDB)到窗體,將ADODC連接到數(shù)據(jù)庫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語法簡介

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

1)字段列表的變化一

(1)“*”語法

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

select * from 基本情況

(2)as語法

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

2)字段列表的變化二

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

select學(xué)號,姓名,語文,英語,數(shù)學(xué),語文+英語+數(shù)學(xué) as 總分 from 成績

3)字段列表的變化三

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

selectright(學(xué)號,2) as 編號,姓名,數(shù)學(xué) from 成績

2.基本語法二: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 成績 where 姓名 like ‘王%’

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

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

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

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

where 字段名稱 not between 值1 and 值2

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

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

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

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

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

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

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

1)單字段排序

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

Select* from 成績 order by 語文

2)多字段排序

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

3)排序方式

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

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

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

selecttop 10 * from 成績 order by 語文+英語+數(shù)學(xué) desc `取前十條

selecttop 10 percent * from 成績 order by 語文+英語+數(shù)學(xué) `desc 取百分比

三、動態(tài)執(zhí)行Select語句的技巧

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

1.動態(tài)執(zhí)行Select語句的技巧

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

Adodc1.CommandType=adCmdText

Adodc1.RecordSource=Select語句

Adodc1.Refresh

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

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

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

數(shù)值型數(shù)據(jù):select * from 數(shù)據(jù)表 where 字段名稱=” & 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均無法在Find中使用。

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

 

11.7  ADO(Active Data Objects)對象模型

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

 

 

 

 

 

 

 

 

 

 

 

 


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

一、ADO的首次使用

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

先看一個ADO打開數(shù)據(jù)庫的例子:

Dim conn As NewADODB.Connection

Dim rs As NewADODB.Recordset

Private SubForm_Load()

DimConnStr As String

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

"DataSource=f:\xjgl\xjgl.mdb"

conn.OpenConnStr

rs.CursorLocation= adUseClient

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

End Sub

 

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

DimS As String, i As Integer

rs.MoveFirst

List1.Clear

WhileNot rs.EOF

S=""

Fori = 0 To rs.Fields.Count - 1

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

Next

List1.AddItemS

rs.MoveNext

Wend

End Sub

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

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

我們再看一下上面打開數(shù)據(jù)庫的語句:

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

"DataSource=e:\xjgl\xjgl.mdb"

conn.OpenConnStr

rs.CursorLocation= adUseClient

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

其主要由三部分組成:

Provider參數(shù):用來指定OLEDB驅(qū)動程序。

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

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

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

2.使用ADO對象之前

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

dimconn as new ADODB.Connection

dimrs as New ADODB.Recordset

都會產(chǎn)生“用戶定義類型未定義”的錯誤,因?yàn)?#8220;Connection”和“Recordset”都是定義在“Microsoft Active Data Objects 2.0Library”中的。如果沒有事先將其引用的話,VB將無法辨識它們。

11.7-2  Microsoft ActiveData Objects 2.0 Library的引用

3.使用ADO的基本概念

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

“對象類別”的引用及表示法:

語句格式:dim rs as ADODB.Recordset

其中,rs稱為“對象變量”,Recordset稱為“對象類別名稱”,ADODB則稱為“對象類別模塊”,整個語句被解釋為“建立一個Recordset類別的對象變量、而Recordset對象類型是來自ADODB對象類別模塊的”。

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

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

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

1.Connection對象的建立及打開

1)Connection對象的建立

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

Dimconn as ADODB.Connection  ‘定義一個Connection類別的對象變量

Setconn=New ADODB.Connection  ‘建立對象,并指定給conn對象變量

也可合二為一:

Dimconn as New ADODB.Connection

2)Connection對象的打開

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

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

Conn.OpenConnstr

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

打開數(shù)據(jù)表可用以下語句

Dimconn as New ADODB.Connection

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

Conn.OpenConnstr

 

Rs.CursorLocation=adUseClient

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

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

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

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

Dimconn as New ADODB.Connection

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

Conn.OpenConnstr

Rs.CursorLocation=adUseClient

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

conn.Close

2.Connection對象的歸還

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

Set conn=Nothing

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

步驟一:建立Connection對象

dim conn as New ADODB.Connection

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

conn.Open ConnStr

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

Rs.CursorLocation=adUseClient

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

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

conn.Close

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

Set conn=Nothing

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

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

Command對象也是ADO對象群的一員。Command對象主要是專門用來執(zhí)行SQL語句的。

我們先來回憶一下前面介紹的SQL語句的執(zhí)行過程:

‘使用ADODC

Adodc1.RecordSource=SQL語句

Adodc1.CommandType=adCmdText

Adodc1.Refresh

 

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

rs.OpenSQL語句,conn,adopenDynamic,adLockOptimistic

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

1.Command對象執(zhí)行SQL語句

Dimconn As New ADODB.Connection

Dimcmd As New ADODB.Command

Dimrs As New ADODB.Recordset

 

Setcmd.ActiveConnection = conn

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

cmd.CommandText= SQL

Setrs = cmd.Execute

 

做一個對比:              SQL語句

Recordset對象 rs.OpenSQL,conn        Connection對象

Command對象  Set Cmd.ActiveConnection=conn

              Cmd.CommandText=SQL             Connection對象

              Set rs=Cmd.Execute     SQL語句

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

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

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

Select * from 成績 where 語文 between [low] and [high]

           between 60 and 90

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

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

Set cmd.ActiveConnection = conn

SQL="Select * From 成績表 Where 語文 Between [low] And[high]"

cmd.CommandText = SQL

 

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

param(0) = Val(Text1.Text)

param(1) = Val(Text2.Text)

Set rs = cmd.Execute(, param)

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

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

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

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

Select * From 成績 Where 語文 Between [low] And [high]

Select * From 成績 Where 語文 Between ?And ?

 

 

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

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

一、 DataEnvionment使用

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

利用DataEnvironment打開xjgl.mdb的“基本情況表”,那么操作過程如下:

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

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

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

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

11.8-1 Data Environment窗口

11.8-2 添加命令窗口

11.8-3  Command1屬性窗口

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

對象

屬性或參數(shù)

設(shè)置值

Connection

Provider

Microsoft Jet 3.51 OLE DB

Data Source

xjgl.mdb

Command

CommandType

AdCmdTable

CommandText

基本情況表

如果我們不使用DataEnvironment,而使用ADO來建立這兩個對象,則程序如下:

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ù)識別控件。以DataGrid為例:

DataGrid屬性

設(shè)置值

說明

DataSource

DataEnvironment1

這是Data Envionment名稱

DataMember

Command1

這是Command對象的名稱

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

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

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

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

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

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

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

11.8-4 屬性窗口

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

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

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

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

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

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

     圖11.8-5 Data Report對象窗口

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

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

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

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

DataReport1.Show

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

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
vb數(shù)據(jù)庫之記錄集-fyjacky-我酷網(wǎng)Woku.com
《Visual Basic程序設(shè)計(jì)教程(第3版)》第12章 數(shù)據(jù)庫編程
第10章 Visual Basic數(shù)據(jù)庫編程
VB程序設(shè)計(jì)數(shù)據(jù)庫編程技術(shù)
使用ADO操作Access數(shù)據(jù)庫
字段求和
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服