版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
*第11章VB與數(shù)據(jù)庫(kù)11.1數(shù)據(jù)庫(kù)概述
11.2ADO概述
11.3ADO編程實(shí)例
11.1數(shù)?據(jù)?庫(kù)?概?述
11.1.1關(guān)系數(shù)據(jù)庫(kù)的基本概念
VB本身使用的數(shù)據(jù)庫(kù)是Access數(shù)據(jù)庫(kù),可以在VB中直接創(chuàng)建,也可以通過(guò)Office中的Access數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)創(chuàng)建。文件的擴(kuò)展名為MDB,下面介紹關(guān)系數(shù)據(jù)庫(kù)的基本
術(shù)語(yǔ)。
1.表(Table)、字段(Field)、記錄(Record)
表是一張二維表格,是構(gòu)成關(guān)系數(shù)據(jù)庫(kù)的基本元素,它以行列方式組織和存儲(chǔ)數(shù)據(jù)。表具有直觀、方便和簡(jiǎn)單的特點(diǎn)。表11-1是描述學(xué)生基本情況的二維表格。表11-1學(xué)生基本情況表
2.數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)管理系統(tǒng)
數(shù)據(jù)庫(kù)是若干表、相關(guān)對(duì)象和數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)也有名稱(chēng)。數(shù)據(jù)庫(kù)管理系統(tǒng)是一組相關(guān)的軟件,用來(lái)對(duì)數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)對(duì)象進(jìn)行定義、操作和維護(hù)。
3.主鍵(PrimaryKey)
在數(shù)據(jù)表中,如果表中的某個(gè)字段或字段組合能夠唯一確定表中的每一條記錄,且不為空值,則稱(chēng)該字段或字段組合為主鍵。如上面的“學(xué)生情況表”中,可以將“學(xué)號(hào)”作為主鍵,因?yàn)椴煌膶W(xué)生其“學(xué)號(hào)”是唯一的,不會(huì)相同也不會(huì)出現(xiàn)空值。
4.索引(Index)
索引是建立在表上的單獨(dú)的物理數(shù)據(jù)結(jié)構(gòu),基于索引的查詢(xún)使獲取數(shù)據(jù)更為快捷。索引關(guān)鍵字是表中的一個(gè)或多個(gè)字段,索引可以是唯一的,也可以是不唯一的,這主要是看這些字段是否允許重復(fù)。主索引是表中的一個(gè)字段或多字段的組合,作為表中記錄的唯一標(biāo)識(shí)。
5.聯(lián)系(Relation)
在數(shù)據(jù)庫(kù)中,聯(lián)系是指兩個(gè)表之間的關(guān)聯(lián)關(guān)系,表間的關(guān)聯(lián)關(guān)系是根據(jù)表共有的字段來(lái)建立的。以關(guān)系的形式表示表與表之間的關(guān)聯(lián),可使數(shù)據(jù)的處理和表達(dá)具有更大的靈活性。表間關(guān)系分為三種,即一對(duì)一關(guān)系、一對(duì)多關(guān)系和多對(duì)多關(guān)系。11.1.2可視化數(shù)據(jù)庫(kù)管理器
VB提供了一個(gè)非常實(shí)用的工具程序,即可視化數(shù)據(jù)管理器,使用它可以方便地建立數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)查詢(xún)。可以說(shuō),凡是有關(guān)數(shù)據(jù)庫(kù)的操作,使用可視化數(shù)據(jù)管理器均能完成,并且由于它提供了可視化的操作界面,因此很容易掌握。
1.建立數(shù)據(jù)庫(kù)
1)啟動(dòng)數(shù)據(jù)庫(kù)管理器
在VB集成環(huán)境中,單擊“外接程序”菜單下的“可視化數(shù)據(jù)庫(kù)管理器”功能項(xiàng),即可打開(kāi)可視化數(shù)據(jù)庫(kù)管理器“VisData”窗口,如圖11-1所示。圖11-1可視化數(shù)據(jù)管理器窗口
2)建立Access數(shù)據(jù)庫(kù)
在數(shù)據(jù)庫(kù)管理器窗口,按照下述步驟建立Access數(shù)據(jù)庫(kù)。
(1)選擇“文件”菜單中的“新建”項(xiàng),將出現(xiàn)圖11-2所示的界面。在“新建”子菜單中選擇數(shù)據(jù)庫(kù)類(lèi)型(如“MicrosoftAccess”),在出現(xiàn)的下級(jí)子菜單中選擇“Version7.0MDB”,出現(xiàn)創(chuàng)建數(shù)據(jù)庫(kù)對(duì)話框。圖11-2新建“Access”類(lèi)型的數(shù)據(jù)庫(kù)
(2)在創(chuàng)建數(shù)據(jù)庫(kù)對(duì)話框中選擇保存數(shù)據(jù)庫(kù)的路徑,輸入庫(kù)文件名,如輸入數(shù)據(jù)庫(kù)文件名為“student”,保存文件夾為“vbjc”,如圖11-3所示。
(3)單擊“保存”按鈕后,在VisData多文檔窗口中將出現(xiàn)“數(shù)據(jù)庫(kù)窗口”和“SQL語(yǔ)句”兩個(gè)子窗口。在“數(shù)據(jù)庫(kù)窗口”中單擊“Properties”前的“?+?”號(hào),將列出新建數(shù)據(jù)庫(kù)的常用屬性。圖11-3創(chuàng)建數(shù)據(jù)庫(kù)并保存
2.創(chuàng)建數(shù)據(jù)表
利用可視化數(shù)據(jù)管理器建立數(shù)據(jù)庫(kù)后,就可以向該數(shù)據(jù)庫(kù)中添加數(shù)據(jù)表。下面以添加Access表為例介紹添加和建立表的方法。
1)建立數(shù)據(jù)表的結(jié)構(gòu)
建立數(shù)據(jù)表結(jié)構(gòu)的步驟如下:
(1)打開(kāi)已經(jīng)建立的Access數(shù)據(jù)庫(kù),如“student.mdb”。
(2)用鼠標(biāo)右鍵單擊數(shù)據(jù)庫(kù)窗口,在出現(xiàn)的快捷菜單中選擇“新建表”,此時(shí)將打開(kāi)“表結(jié)構(gòu)”對(duì)話框,如圖11-4所示。圖11-4“表結(jié)構(gòu)”對(duì)話框
(3)單擊“添加字段”按鈕打開(kāi)圖11-5所示“添加字段”對(duì)話框。在“名稱(chēng)”文本框中輸入一個(gè)字段名,在“類(lèi)型”下拉列表中選擇相應(yīng)的數(shù)據(jù)類(lèi)型,在“大小”框中輸入字段長(zhǎng)度,選擇字段是“固定字段”還是“可變字段”,以及“允許零長(zhǎng)度”和“必要的”,還可以定義“驗(yàn)證規(guī)則”來(lái)對(duì)取值進(jìn)行限制,可以指定插入記錄時(shí)字段的“缺省值”。圖11-5“添加字段”對(duì)話框
(4)建立好“學(xué)生表”的表結(jié)構(gòu),在“表結(jié)構(gòu)”對(duì)話框中,單擊“生成表”按鈕生成表。關(guān)閉“表結(jié)構(gòu)”對(duì)話框,在數(shù)據(jù)庫(kù)窗中可以看到生成的表。
若要建立索引,在第(3)步完成后可按照下述步驟完成:?jiǎn)螕簟疤砑铀饕卑粹o,打開(kāi)“添加索引”對(duì)話框;在“名稱(chēng)”框中輸入索引名,每個(gè)索引都要有一個(gè)名稱(chēng);在“可用字段”中選擇建立索引的字段名,一個(gè)索引可以由一個(gè)字段建立,也可以用多個(gè)字段建立,如果要使某個(gè)字段或幾個(gè)字段的值不重復(fù),可以建立唯一性索引,否則一定不要選中“唯一的”。完成上述操作以后,再單擊“生成表”按鈕生成表。
2)修改表結(jié)構(gòu)
在可視化數(shù)據(jù)管理器中,可以修改數(shù)據(jù)庫(kù)中已經(jīng)建立的數(shù)據(jù)表的結(jié)構(gòu),步驟如下:
(1)打開(kāi)要修改數(shù)據(jù)表的數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)窗口中用鼠標(biāo)右鍵單擊要修改表結(jié)構(gòu)的數(shù)據(jù)表的表名,彈出快捷菜單。
(2)在快捷菜單中選擇“設(shè)計(jì)”功能項(xiàng),即可打開(kāi)“表結(jié)構(gòu)”對(duì)話框。此時(shí)的“表結(jié)構(gòu)”對(duì)話框與建立時(shí)的對(duì)話框不完全相同。在該對(duì)話框中可以進(jìn)行修改表名稱(chēng)、修改字段名、添加與刪除字段、修改索引、添加與刪除索引、修改驗(yàn)證和默認(rèn)值等操作。
3.數(shù)據(jù)表中數(shù)據(jù)的編輯
表結(jié)構(gòu)設(shè)計(jì)好后,可將所需的數(shù)據(jù)添加到數(shù)據(jù)表中,也可對(duì)表中的數(shù)據(jù)進(jìn)行修改、刪除等操作。
向數(shù)據(jù)表中添加數(shù)據(jù)的步驟如下:
(1)打開(kāi)數(shù)據(jù)表處理窗口。在數(shù)據(jù)庫(kù)窗口中,用鼠標(biāo)右擊要操作的數(shù)據(jù)表,在彈出的菜單中選擇“打開(kāi)”菜單項(xiàng),或用鼠標(biāo)雙擊要操作的數(shù)據(jù)表,即可打開(kāi)數(shù)據(jù)表處理窗口,如圖11-6所示。圖11-6數(shù)據(jù)表處理窗口
(2)打開(kāi)添加記錄窗口。單擊“添加”按鈕,打開(kāi)添加記錄窗口,如圖11-7所示。
(3)添加記錄。在各個(gè)記錄的對(duì)應(yīng)的文本框中輸入相應(yīng)的數(shù)據(jù),單擊“更新”按鈕,即向當(dāng)前數(shù)據(jù)表中添加了一條記錄數(shù)據(jù),同時(shí)返回?cái)?shù)據(jù)表處理窗口。
重復(fù)(2)、(3)步驟,依次向表中添加所有數(shù)據(jù)。
若要對(duì)表中的數(shù)據(jù)進(jìn)行其他處理,可在數(shù)據(jù)表處理窗口中進(jìn)行如下操作:?jiǎn)螕簟熬庉嫛卑粹o修改數(shù)據(jù);單擊“刪除”按鈕刪除數(shù)據(jù);單擊“排序”按鈕對(duì)表中的數(shù)據(jù)進(jìn)行排序操作。圖11-7添加記錄窗口11.1.3結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)
SQL是一種結(jié)構(gòu)化的查詢(xún)語(yǔ)言,它提供了一系列的命令來(lái)對(duì)數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作,如添加記錄、刪除記錄、修改記錄及創(chuàng)建、刪除、修改表結(jié)構(gòu)等。如何使用SQL的SELECT語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)庫(kù)的查詢(xún)操作,便是本節(jié)要講述的問(wèn)題。
1.SELECT語(yǔ)句
SELECT語(yǔ)句用來(lái)從一個(gè)表中獲取記錄,從而生成一個(gè)查詢(xún)結(jié)果記錄集。SELECT語(yǔ)句最基本的格式如下:
SELECT字段列表FROM表名
2.WHERE子句
WHERE子句放在SELECT中,可以用來(lái)在獲取記錄時(shí)指定記錄的獲取條件。其格式如下:
SELECT字段列表FROM表名WHERE條件
其中,“條件”用來(lái)指定選擇標(biāo)準(zhǔn),其一般格式如下:
字段名比較運(yùn)算符值
3.組合查詢(xún)
WHERE子句中的條件是一個(gè)布爾表達(dá)式,因此可以通過(guò)邏輯運(yùn)算符“And”、“Or”和“Not”來(lái)設(shè)置組合條件。11.1.4數(shù)據(jù)訪問(wèn)對(duì)象模型
在VB中,可用的數(shù)據(jù)訪問(wèn)接口有三種:ActiveX數(shù)據(jù)對(duì)象(ADO)、遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)和數(shù)據(jù)訪問(wèn)對(duì)象(DAO)。這三種接口分別代表了數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的不同發(fā)展階段。目前,常用的ADO是微軟提供的用于訪問(wèn)數(shù)據(jù)庫(kù)的一個(gè)ActiveX控件,它比RDO和DAO簡(jiǎn)單,而且更具靈活性,與舊版的Data控件相似。 11.2ADO概述
11.2.1ADO簡(jiǎn)介
ActiveXDataObject(ADO)是微軟最新的數(shù)據(jù)訪問(wèn)技術(shù)。它被設(shè)計(jì)用來(lái)同OLEDBProvider一起協(xié)同工作,以提供通用數(shù)據(jù)訪問(wèn)(UniversalDataAccess)。OLEDB是一個(gè)底層的數(shù)據(jù)訪問(wèn)接口,通過(guò)它可以訪問(wèn)各種數(shù)據(jù)源,包括傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),以及電子郵件系統(tǒng)及自定義的商業(yè)對(duì)象。
ADO向VB程序員提供了很多好處,包括易于使用、熟悉的界面,高速度以及較低的內(nèi)存占用。同傳統(tǒng)的數(shù)據(jù)對(duì)象層次(DAO和RDO)不同,ADO可以獨(dú)立創(chuàng)建。因此,用戶(hù)可以只創(chuàng)建一個(gè)“Connection”對(duì)象,但是可以有多個(gè)獨(dú)立的“RecordSet”對(duì)象來(lái)使用它。ADO針對(duì)客戶(hù)機(jī)/服務(wù)器以及WEB應(yīng)用程序作了優(yōu)化。
通過(guò)ADO對(duì)象,VB應(yīng)用程序可以訪問(wèn)Oracle、Sybase、MicrosoftSQLServer、Access等各種支持ODBC或OLEDB的數(shù)據(jù)庫(kù)。VB應(yīng)用程序、ADO、OLEDB及各種數(shù)據(jù)庫(kù)之間的關(guān)系如圖11-8所示。圖11-8VB應(yīng)用程序和底層數(shù)據(jù)庫(kù)的關(guān)系11.2.2ADO對(duì)象模型
從圖11-8我們也看到了ADO實(shí)際上是OLEDB的應(yīng)用層接口,這種結(jié)構(gòu)也為一致的數(shù)據(jù)訪問(wèn)接口提供了很好的擴(kuò)展性,而不再局限于特定的數(shù)據(jù)源,因此,ADO可以處理各種OLEDB支持的數(shù)據(jù)源。
ADO模型是非常簡(jiǎn)單的,在ADO模型中只有三個(gè)關(guān)鍵的對(duì)象:
(1)?Connection對(duì)象:代表了實(shí)際的數(shù)據(jù)庫(kù)連接。
(2)?Command對(duì)象:用于在數(shù)據(jù)連接中執(zhí)行查詢(xún)。
(3)?RecordSet對(duì)象:代表了從數(shù)據(jù)庫(kù)查詢(xún)出來(lái)的記錄的集合。除了這三個(gè)主要對(duì)象之外,其他四個(gè)集合對(duì)象Errors、Properties、Parameters和Fields分別對(duì)應(yīng)Error、Property、Parameter和Field對(duì)象,整個(gè)ADO對(duì)象模型由這些對(duì)象組成。圖11-9是ADO對(duì)象模型圖。圖11-9ADO對(duì)象模型圖在Connection、Command和RecordSet三個(gè)對(duì)象中,Command對(duì)象是個(gè)可選對(duì)象,它是否有效取決于OLEDB數(shù)據(jù)提供者是否實(shí)現(xiàn)了ICommand接口。由于OLEDB可提供關(guān)系型數(shù)據(jù)源也可以提供非關(guān)系型數(shù)據(jù)源,所以在非關(guān)系型數(shù)據(jù)源上使用傳統(tǒng)的SQL命令查詢(xún)數(shù)據(jù)有可能無(wú)效,甚至Command對(duì)象也不能使用。
從結(jié)構(gòu)上看,ADO模型非常簡(jiǎn)單,但使用上非常靈活,下面我們先從單個(gè)對(duì)象的角度進(jìn)行討論。
1.Connection對(duì)象
Connection對(duì)象代表與數(shù)據(jù)源之間的一個(gè)連接,ADO的Connection對(duì)象封裝了OLEDB的數(shù)據(jù)源對(duì)象和會(huì)話對(duì)象。根據(jù)OLEDB提供者的不同性能,Connection對(duì)象的特性也有所不同,所以Connection對(duì)象的方法和屬性不一定都可以使用。利用Connection對(duì)象,我們可以完成以下一些基本設(shè)置操作:
(1)通過(guò)ConnectionString、ConnectionTimeOut和Mode屬性設(shè)置連接串、超時(shí)信息、訪問(wèn)模式。
(2)可以設(shè)置CursorLocation屬性指定使用客戶(hù)端游標(biāo),以便在客戶(hù)程序中使用批處理修改方式。
(3)設(shè)置連接的缺省數(shù)據(jù)庫(kù)屬性DefaultDatabase。
(4)設(shè)置OLEDB提供者的屬性Provider。
(5)通過(guò)Open和Close控制Connection對(duì)象與物理數(shù)據(jù)源的連接。
(6)通過(guò)Execute方法執(zhí)行命令。
(7)提供事務(wù)機(jī)制,通過(guò)BeginTrans、CommitTrans和RollbackTrans方法實(shí)現(xiàn)事務(wù)控制。
(8)通過(guò)Errors集合屬性檢查數(shù)據(jù)源的錯(cuò)誤信息。
(9)通過(guò)OpenSchema方法獲取數(shù)據(jù)庫(kù)的表信息。
Connection對(duì)象是ADO的基本對(duì)象之一,它獨(dú)立于所有其他的對(duì)象。如果要對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)操作,既可以使用Connection的Execute方法,也可以使用Command對(duì)象。使用Execute方法比較簡(jiǎn)便,但用Command對(duì)象可以保存命令的信息,以便多次查詢(xún)。
2.Command對(duì)象
Command對(duì)象代表一個(gè)命令,可以通過(guò)該命令執(zhí)行針對(duì)數(shù)據(jù)源的有關(guān)操作,比如查詢(xún)、修改等。
Command對(duì)象的用法如下:
(1)通過(guò)CommandText屬性設(shè)置命令串(如SQL語(yǔ)句)。
(2)通過(guò)Parameters集合屬性和Parameter對(duì)象定義參數(shù)化查詢(xún)或存儲(chǔ)過(guò)程的參數(shù)。
(3)通過(guò)Execute方法執(zhí)行命令,可能的話,返回RecordSet對(duì)象。
(4)在執(zhí)行命令之前,可通過(guò)設(shè)置CommandType屬性以便優(yōu)化性能。
(5)可以通過(guò)Prepared屬性指示底層的提供者為當(dāng)前命令準(zhǔn)備一個(gè)編譯過(guò)的版本,以后再執(zhí)行時(shí)速度會(huì)大大加快。
(6)通過(guò)CommandTimeOut屬性設(shè)置命令執(zhí)行的超時(shí)值(以秒為單位)。
(7)可以設(shè)置ActiveConnection屬性,為命令指定連接串,Command對(duì)象將在內(nèi)部創(chuàng)建Connection對(duì)象。
(8)可以設(shè)置Name屬性,這樣以后可以在相應(yīng)的Connection對(duì)象上按Name屬性指定的方法名執(zhí)行。
Command對(duì)象執(zhí)行時(shí),既可以通過(guò)ActiveConnection屬性指定相連的Connection對(duì)象,也可以獨(dú)立于Connection對(duì)象,直接指定連接串,即使連接串與Connection對(duì)象的連接串相同,Command對(duì)象仍然使用其內(nèi)部的數(shù)據(jù)源連接。
3.RecordSet對(duì)象
RecordSet對(duì)象代表一個(gè)表的記錄集或者命令執(zhí)行的結(jié)果。在記錄集中,總是有一個(gè)當(dāng)前的記錄。記錄集是ADO管理數(shù)據(jù)的基本對(duì)象,所有的RecordSet對(duì)象都按照行列方式的表狀結(jié)構(gòu)進(jìn)行管理,每一行對(duì)應(yīng)一個(gè)記錄(Record),每一列對(duì)應(yīng)一個(gè)字段(Field)。RecordSet對(duì)象也通過(guò)游標(biāo)對(duì)記錄進(jìn)行訪問(wèn)。
在ADO中,利用CursorType屬性可設(shè)置四種游標(biāo)類(lèi)型:
(1)靜態(tài)游標(biāo):提供對(duì)數(shù)據(jù)集的一個(gè)靜態(tài)拷貝,允許各種移動(dòng)操作,包括前移、后移等,但其他用戶(hù)所做的操作反映不出來(lái)。
(2)動(dòng)態(tài)游標(biāo):允許各種移動(dòng)操作,包括前移、后移等,并且其他用戶(hù)所做的操作也可以直接反映出來(lái)。
(3)前向游標(biāo):允許各種前向移動(dòng)操作,不能向后移動(dòng),并且其他用戶(hù)所做的操作也可以直接反映出來(lái)。
(4)鍵集(Keyset)游標(biāo):類(lèi)似于動(dòng)態(tài)游標(biāo),也能夠看到其他用戶(hù)所做的數(shù)據(jù)修改,但不能看到其他用戶(hù)新加的記錄,也不能訪問(wèn)其他用戶(hù)刪除的記錄。
RecordSet對(duì)象的用法如下:
(1)通過(guò)Open方法打開(kāi)記錄集數(shù)據(jù),既可以在Open之前對(duì)ActiveConnection屬性賦值,指定RecordSet對(duì)象使用的連接對(duì)象。也可以直接在Open方法中指定連接串參數(shù),則ADO將創(chuàng)建一個(gè)內(nèi)部連接,即使連接串與外部的連接對(duì)象相同,它也使用新的連接對(duì)象。
(2)當(dāng)RecordSet對(duì)象剛打開(kāi)時(shí),當(dāng)前記錄被定位在首條記錄,并且Bof和Eof標(biāo)志屬性為False。如果當(dāng)前記錄集為空記錄集,則Bof和Eof標(biāo)志屬性為T(mén)rue。
(3)通過(guò)MoveFirst、MoveLast、MoveNext和MovePrevious方法可以對(duì)記錄集的游標(biāo)進(jìn)行移動(dòng)操作。如果OLEDB提供者支持相關(guān)的功能的話,可以使用AbsolutePosition、AbsolutePage和Filter屬性對(duì)當(dāng)前記錄重新定位。11.2.3ADO對(duì)象的常用屬性
1.連接串(ConnectionString)
ADO模型使用ConnectionString屬性來(lái)指明用于連接數(shù)據(jù)庫(kù)的OLEDB供應(yīng)者和完成數(shù)據(jù)庫(kù)連接所需的全部詳細(xì)信息,它使用一系列格式為“參數(shù)=值”的語(yǔ)句,并用“?;?”連接起來(lái)。
不同類(lèi)別的數(shù)據(jù)庫(kù)具有不同的驅(qū)動(dòng)程序,相應(yīng)地具有不同的連接參數(shù)和格式。對(duì)Access2000數(shù)據(jù)庫(kù)來(lái)說(shuō),設(shè)置ConnectionString屬性的語(yǔ)法如下:
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=數(shù)據(jù)庫(kù)路徑名稱(chēng)對(duì)于MSSQLServer來(lái)說(shuō),當(dāng)身份驗(yàn)證為混合模式驗(yàn)證方式時(shí),ConnectionString屬性的格式如下:
Provider=SQLOLEDB.1;DataSource=<SQLServer數(shù)據(jù)庫(kù)服務(wù)器的別名>;_
UserID=<用戶(hù)名>;Password=<密碼>;InitialCatalog=<欲連接的數(shù)據(jù)庫(kù)>
2.命令文本(CommandText)
ADO模型的CommandText屬性是包含了實(shí)際數(shù)據(jù)查詢(xún)請(qǐng)求的屬性。?這一數(shù)據(jù)請(qǐng)求的語(yǔ)法取決于所使用的提供者。例如,下面這一條使用SQLOLEDB.1提供者的SQL語(yǔ)句是有
效的:
SELECT*FROMstudent
或直接指定數(shù)據(jù)表的名稱(chēng)student。
3.命令類(lèi)型(CommandType)
ADO的CommandType屬性用于通知ADO目前正在使用什么類(lèi)型的查詢(xún)執(zhí)行數(shù)據(jù)請(qǐng)求,默認(rèn)值是adCmdUnknown。在某些情況下,可不設(shè)置CommandType屬性。但是,如果這樣,ADO提供者可能不知道如何解釋請(qǐng)求或會(huì)以更慢的速度執(zhí)行查詢(xún)。
表11-2列出了CommandType屬性的有效的命令類(lèi)型。表11-2CommandType屬性的有效設(shè)置
4.游標(biāo)位置(CursorLocation)
ADO模型允許為記錄集請(qǐng)求客戶(hù)端或服務(wù)器端的游標(biāo)管理。在ADO中,游標(biāo)是響應(yīng)一次數(shù)據(jù)請(qǐng)求后返回的記錄的集合,可以使用ADO的CursorLocation屬性控制這個(gè)記錄集合的位置。
表11-3列出了CursorLocation屬性的有效設(shè)置。表11-3CursorLocation屬性的有效設(shè)置
5.游標(biāo)類(lèi)型(CursorType)
ADO的CursorType屬性用來(lái)指眀由數(shù)據(jù)提供者返回的記錄集的類(lèi)型。表11-4列出了CursorType屬性的四種有效設(shè)置。表11-4CursorType屬性的有效設(shè)置
6.鎖定類(lèi)型(LockType)
ADO的LockType可用于指定在對(duì)記錄集進(jìn)行編輯時(shí)處理鎖定的方式。表11-5顯示了LockType屬性的四種有效設(shè)置。表11-5LockType屬性的有效設(shè)置11.2.4ADO數(shù)據(jù)控件(ADODC)
1.?ADODC的添加
ADO數(shù)據(jù)控件不是VB的標(biāo)準(zhǔn)控件,需要用戶(hù)手工添加到VB的工具箱中才能使用。將ADO數(shù)據(jù)控件添加到工具箱中的方法如下:
(1)在VB的集成開(kāi)發(fā)環(huán)境中,單擊“工程”菜單下的“部件”命令,打開(kāi)“部件”對(duì)話框,如圖11-10所示。
(2)在控件選項(xiàng)卡上,選中“MicrosoftADODataControl6.0(SP6)”復(fù)選框,單擊“確定”按鈕關(guān)閉對(duì)話框,此時(shí)“工具箱”中就會(huì)出現(xiàn)ADO數(shù)據(jù)控件的圖標(biāo),如圖11-11所示。圖11-10VB中“部件”對(duì)話框圖11-11添加完ADODC圖標(biāo)后的工具箱圖11-12ADO控件在窗體上的形式
2.?ADO數(shù)據(jù)控件的主要屬性、方法和事件
1)?ADODC的主要屬性
(1)?ConnectionString屬性:用于建立與數(shù)據(jù)源的連接。此屬性是ADO數(shù)據(jù)控件中一個(gè)非常重要的屬性,它是一個(gè)字符串,其中所包含的參數(shù)與使用的數(shù)據(jù)訪問(wèn)接口有關(guān)。可以在ADO數(shù)據(jù)控件的“屬性頁(yè)”中設(shè)置ConnectionString屬性。打開(kāi)“屬性頁(yè)”的方法是:?jiǎn)螕鬉DO數(shù)據(jù)控件屬性頁(yè)中ConnectionString屬性后面的“”按鈕,打開(kāi)“屬性頁(yè)”對(duì)話框,如圖11-13所示。然后點(diǎn)擊“生成(U)”按鈕,依照提示即可完成該屬性的設(shè)置。具體的操作步驟參考11.3節(jié)。圖11-13ConnectionString屬性設(shè)置對(duì)話框
(2)?CommandTimeOut屬性:指定命令執(zhí)行的最長(zhǎng)時(shí)間,單位是秒(默認(rèn)為30秒)。如果超出這個(gè)時(shí)間命令還沒(méi)有執(zhí)行完,那么將放棄執(zhí)行,給用戶(hù)返回一個(gè)超時(shí)的提示信息。
(3)?CommandType屬性:指定要執(zhí)行的命令的類(lèi)型。CommandType屬性通常和RecordSource屬性配合使用,有如下4個(gè)取值:adCmdUnknown、adCmdTable、adCmdText、adCmdStoreProc。
(4)?ConnectionTimeOut屬性:用來(lái)指定連接的最長(zhǎng)時(shí)間,單位是秒(默認(rèn)為15秒)。如果在這個(gè)時(shí)間之內(nèi)還沒(méi)有連接到數(shù)據(jù)庫(kù),那么返回一個(gè)超時(shí)的錯(cuò)誤信息。
(5)?RecordSource屬性:指定要執(zhí)行的請(qǐng)求命令??梢允且粋€(gè)數(shù)據(jù)表的名稱(chēng),或一個(gè)SQL語(yǔ)句以及一個(gè)存儲(chǔ)過(guò)程,應(yīng)該和CommandType屬性相對(duì)應(yīng)。
(6)?RecordSet屬性:用于存放從數(shù)據(jù)提供者那里獲得的查詢(xún)結(jié)果。這個(gè)結(jié)果一般存放在客戶(hù)端內(nèi)存中。RecordSet屬性也稱(chēng)為記錄集或結(jié)果集,是ADO數(shù)據(jù)控件中實(shí)現(xiàn)數(shù)據(jù)記錄操作的最重要的屬性,而且這個(gè)屬性本身又是一個(gè)對(duì)象,也有自己的屬性和方法,它直接指向ADO對(duì)象模型中的RecordSet對(duì)象。
2)?ADO數(shù)據(jù)控件的主要方法
ADODC的主要方法為Refresh,它用于更新ADO數(shù)據(jù)控件屬性,使修改后的ADO數(shù)據(jù)控件屬性生效。
當(dāng)修改了ADO數(shù)據(jù)控件的ConnectionString屬性的值時(shí),使用Refresh方法會(huì)重新連接一次數(shù)據(jù)庫(kù)。
當(dāng)修改了ADO數(shù)據(jù)控件的RecordSource屬性的值時(shí),使用Refresh方法會(huì)重新執(zhí)行RecordSource屬性的內(nèi)容,重新產(chǎn)生結(jié)果集。
使用Refresh方法的格式為:
ADO數(shù)據(jù)控件名.Refresh
3)?ADO數(shù)據(jù)控件的主要事件
ADODC主要有如下事件:
(1)?WillMove:在記錄指針從一條記錄移動(dòng)到另一條記錄前發(fā)生。
(2)?MoveComplete:在記錄指針完成從一條記錄移動(dòng)到另一條記錄后發(fā)生。
(3)?EndOfRecordSet:在記錄指針移過(guò)最后一條記錄時(shí)發(fā)生。
(4)?WillChangeRecordSet:在對(duì)記錄集進(jìn)行修改之前發(fā)生,可以用這一事件來(lái)捕獲對(duì)記錄集的錯(cuò)誤的修改。
(5)?RecordChangeComplete:在對(duì)記錄集進(jìn)行修改完成之后發(fā)生,可以用這一事件來(lái)驗(yàn)證是否修改成功。
(6)?WillChangeRecord:在當(dāng)前記錄的修改提交到數(shù)據(jù)源之前發(fā)生。
(7)?RecordChangeComplete:在當(dāng)前記錄的修改被提交到數(shù)據(jù)源之后發(fā)生。
(8)?WillChangeField:在記錄集中當(dāng)前字段被修改之前發(fā)生。
(9)?FieldChangeComplete:在記錄集中當(dāng)前字段被修改之后發(fā)生。
(10)?Error:在ADO數(shù)據(jù)控件產(chǎn)生錯(cuò)誤之時(shí)發(fā)生,利用這一事件可以進(jìn)行一些錯(cuò)誤處理。
3.?RecordSet對(duì)象的主要屬性和方法
RecordSet對(duì)象是ADO對(duì)象模型中一個(gè)非常重要的對(duì)象,也是ADO數(shù)據(jù)控件的一個(gè)主要屬性。程序中對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作主要是通過(guò)RecordSet對(duì)象完成的。下面介紹RecordSet對(duì)象中的常用屬性和方法。
1)?RecordSet對(duì)象的主要屬性
(1)?Bof:布爾值。如果結(jié)果集中記錄的當(dāng)前行指針移到了第一條記錄的前邊,則此值為真,否則為假。
(2)?Eof:布爾值。如果結(jié)果集中記錄的當(dāng)前行指針移到了最后一條記錄的后邊,則此值為真,否則為假。
(3)?RecordCount:存放結(jié)果集中的記錄條數(shù)。
(4)?Sort:將結(jié)果集中的記錄按某個(gè)字段排序。
(5)?AbsolutePosition:記錄當(dāng)前行記錄在結(jié)果集中的順序號(hào),結(jié)果集記錄序號(hào)從1開(kāi)始。
(6)?ActiveCommand:結(jié)果集中創(chuàng)建的命令。
(7)?ActiveConnection:結(jié)果集中創(chuàng)建的連接。
(8)?Bookmark:結(jié)果集中當(dāng)前行記錄的標(biāo)識(shí)號(hào)。
(9)?Fields:結(jié)果集中的字段對(duì)象(Field)集合。可以通過(guò)如下方法來(lái)訪問(wèn)該集合中的指定的字段對(duì)象:
Fileds("字段名")
或
Fields(字段序號(hào))
2)?RecordSet對(duì)象的主要方法
(1)?Move方法組:
MoveFirst方法:將當(dāng)前行記錄指針移到結(jié)果集中的第一行。
MovePrevious方法:將當(dāng)前行記錄指針向前移動(dòng)一行。
MoveNext方法:將當(dāng)前行記錄指針向后移動(dòng)一行。
MoveLast方法:將當(dāng)前行記錄指針移到結(jié)果集中的最后一行。
(2)?AddNew方法:用于在結(jié)果集中添加一條新記錄。
(3)?Update方法:將新記錄緩沖區(qū)中的記錄或者對(duì)當(dāng)前記錄的修改真正寫(xiě)到數(shù)據(jù)庫(kù)中。
(4)?Delete方法:刪除結(jié)果集中當(dāng)前行記錄指針?biāo)傅挠涗?,并且這個(gè)刪除是直接對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)操作的,刪除后的數(shù)據(jù)不可恢復(fù)。
(5)?CancelUpdate方法:用于取消新添加的記錄或?qū)Ξ?dāng)前記錄所做的修改。
(6)?Find方法:用于在當(dāng)前結(jié)果集中查找滿足條件的記錄。Find方法的格式為:
ADO數(shù)據(jù)控件名.RecordSet.Find("查找條件表達(dá)式")
4.數(shù)據(jù)綁定控件
使用ADO數(shù)據(jù)控件完成了與數(shù)據(jù)源的連接,并獲得了一個(gè)結(jié)果集,但此結(jié)果集只是保存在內(nèi)存中,并不顯示在屏幕上,要將內(nèi)存結(jié)果集中的數(shù)據(jù)顯示出來(lái),必須使用相應(yīng)的賦值語(yǔ)句或使用數(shù)據(jù)綁定控件。
數(shù)據(jù)綁定實(shí)際上就是將結(jié)果集中的數(shù)據(jù)同應(yīng)用程序界面上的控件聯(lián)系起來(lái),通過(guò)這些界面上的控件將結(jié)果集中的數(shù)據(jù)顯示給用戶(hù)。能夠?qū)崿F(xiàn)將結(jié)果集中的數(shù)據(jù)顯示出來(lái)的功能的控件,就稱(chēng)為數(shù)據(jù)綁定控件。用戶(hù)不但可以使用數(shù)據(jù)綁定控件將結(jié)果集中的數(shù)據(jù)顯示出來(lái),還可以通過(guò)這些控件對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行增、刪、改等操作。
在VB6.0中,并不是所有控件都是數(shù)據(jù)綁定控件,只有那些具有DataSource屬性的控件才是數(shù)據(jù)綁定控件。
標(biāo)準(zhǔn)綁定控件:TextBox、CheckBox、ListBox、ComboBox等。
外部綁定控件:DataCombo、DataList、DataGrid、MSHFGrid、MicrosoftChart等。 1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年標(biāo)準(zhǔn)化室內(nèi)植物租賃服務(wù)協(xié)議版B版
- 2024年度智能交通系統(tǒng)專(zhuān)線接入合同2篇
- 2024年子女撫養(yǎng)及共同財(cái)產(chǎn)分割的離婚協(xié)議合同3篇
- 2024年度網(wǎng)絡(luò)課程制作合同3篇
- 基因、細(xì)胞和 RNA 療法概況報(bào)告2024 Q2 Report
- 2024年度離婚后子女撫養(yǎng)費(fèi)支付合同2篇
- 2024年版建筑工程專(zhuān)業(yè)分包協(xié)議范本版
- 2024年智能制造項(xiàng)目咨詢(xún)與服務(wù)合同3篇
- 2024版建筑材料采購(gòu)及環(huán)保評(píng)估合同2篇
- 2024全新倉(cāng)儲(chǔ)設(shè)施維護(hù)與租賃合同3篇
- 工程中間交接證書(shū)
- 中學(xué)生心理健康教育主題班會(huì)課件
- 工會(huì)主席候選人的主要表現(xiàn)
- 凈化工程質(zhì)量驗(yàn)收檢查表格
- 自主的課堂 完整版課件
- 思想道德與法治課件:第六章 第三節(jié) 維護(hù)憲法權(quán)威
- 高中地理-地形對(duì)聚落及交通線路分布的影響2課件-湘教版必修1
- TSG D7005-2018壓力管道定期檢驗(yàn)規(guī)則-工業(yè)管道
- 變電站電氣設(shè)備簡(jiǎn)介
- 腫瘤抗原的分類(lèi)、免疫機(jī)制和治療方法(英文版)
- 綠色水彩小清新工作匯報(bào)ppt模板
評(píng)論
0/150
提交評(píng)論