一、 TADOConnection組件
該組件用于建立數(shù)據(jù)庫的連接。ADO的數(shù)據(jù)源組件和命令組件可以通過該組件運(yùn)行命令及數(shù)據(jù)庫中提取數(shù)據(jù)等。
該組件用于建立數(shù)據(jù)庫的連接,該連接可被多個(gè)數(shù)據(jù)集所共享,但是并不是應(yīng)用程序中必須的,因?yàn)锳DO數(shù)據(jù)集及命令組件通過設(shè)置其ConnectionString屬性,可以直接連接到數(shù)據(jù)庫。但是如果多個(gè)數(shù)據(jù)集使用相同的數(shù)據(jù)庫連接時(shí),則使用TADOConnection就有一定的優(yōu)勢,因?yàn)椴槐貫槊總(gè)數(shù)據(jù)集都單獨(dú)建立數(shù)據(jù)庫的連接,同時(shí)也減少了資源的消耗,并且可以建立跨越多個(gè)數(shù)據(jù)集的事務(wù)。一個(gè)事務(wù)(transaction)是數(shù)據(jù)庫操作的一個(gè)階段,用戶對數(shù)據(jù)庫的修改都保存在本地計(jì)算機(jī)的內(nèi)存中,只有提交一個(gè)事務(wù)后,才能將修改的內(nèi)容提交到數(shù)據(jù)庫中。如果選擇了回滾事務(wù),則所有的修改將被取消,而不會提交到數(shù)據(jù)庫中。
? TADOConnection組件提供如下功能:
v 控件數(shù)據(jù)庫的連接
v 控制服務(wù)器的注冊
v 管理事務(wù)
v 為關(guān)聯(lián)的數(shù)據(jù)集提供數(shù)據(jù)庫連接
v 將SQL命令發(fā)送到數(shù)據(jù)庫中
v 獲得數(shù)據(jù)庫的原數(shù)據(jù)(metadata)
TADOConnection的常用屬性
1) Attributes
此屬性用于設(shè)置連接的數(shù)據(jù)庫的自動處理的行為,它是TxactAttributes
類型的集合,包括兩個(gè)集合元素:
I. XaCommitRetaining:提交一個(gè)事務(wù)后自動開始一個(gè)新的事務(wù)。
II. XaAbortRetaining: 回退一個(gè)事務(wù)的同時(shí)將開始一個(gè)新的事務(wù)。
2) CommandTimeout
連接超時(shí)屬性,用于設(shè)置一個(gè)命令執(zhí)行時(shí)所能等待的最大時(shí)間值。以秒為計(jì)量單位。缺省值為30秒,即連接命令等待了30秒之后還沒有被執(zhí)行,系統(tǒng)就放棄這個(gè)命令。
3) Connected
標(biāo)識和數(shù)據(jù)庫的連接是否處于激活狀態(tài)。
用戶可以查詢Connected屬性的值來判斷數(shù)據(jù)庫的連接狀態(tài)。如果該屬性為true,則表明數(shù)據(jù)庫處于連接狀態(tài);為false,則當(dāng)前數(shù)據(jù)庫連接關(guān)閉。
4) ConnectionString
連字符串用于指定數(shù)據(jù)庫的連接信息。連字符串的標(biāo)準(zhǔn)調(diào)用方為:ADOConnection1.ConnectionString:='Provider=ProviderRet;Remote Server=ServerRet';
其中,連接串支持的常用參數(shù)如下:
數(shù)據(jù)庫連接參數(shù)及說明
參數(shù) 說明
Provider 數(shù)據(jù)提供者名稱,例如MSDASQL.1
Password 登錄數(shù)據(jù)庫的口令
參數(shù) 說明
Persist Security 支持安全登錄
User ID 登錄數(shù)據(jù)庫用戶
DataSource 數(shù)據(jù)源名稱、數(shù)據(jù)源的設(shè)置需要額外的操作
設(shè)置成功之后,用戶就可以將屬性Connected設(shè)置為True,如果沒有任何提示信息,說明數(shù)據(jù)庫已經(jīng)成功連接,此時(shí),屬性DefaultPatabase就被賦值為連接所指定的數(shù)據(jù)庫的路徑。
5) ConnectOptions
指定數(shù)據(jù)庫連接是按照同步方式還是異步方式。類型Tconnectoption包含兩個(gè)值:
v coConnectUnspecified:數(shù)據(jù)庫連接采用同步方式連接。
v coAsyncConnect:異步方式連接數(shù)據(jù)庫。當(dāng)服務(wù)器負(fù)載很重的時(shí)候,這種連接方式很有用。引用這種連接方式,在第一次建立連接的時(shí)候,應(yīng)用程序不能獲得全部的數(shù)據(jù)。
6) CursorLocation
指定數(shù)據(jù)庫指針是指向客戶端還是服務(wù)器端。類型TcursorLocation包含兩個(gè)值:
v cluseServer:使用服務(wù)器端的數(shù)據(jù)庫指針,適用于數(shù)據(jù)量大的數(shù)據(jù)集。
v cluseClient:使用客戶端的數(shù)據(jù)指針的時(shí)候,數(shù)據(jù)將被下載到本地計(jì)算機(jī)上,并在本地進(jìn)行操作。
7) DefaultDatabase
表明數(shù)據(jù)源成功連接后,這是由數(shù)據(jù)源自動賦值的。
8) IsoLationLevel
指定不同事務(wù)之間的相互獨(dú)立的級別,事務(wù)實(shí)際上是對數(shù)據(jù)庫的一系列操作的集合。事務(wù)具有整體性,如果事務(wù)中的某一個(gè)步驟不能正確執(zhí)行,則整個(gè)事務(wù)都不會執(zhí)行。由于數(shù)據(jù)庫服務(wù)器可以同時(shí)支持多個(gè)連接,來自不同連接的事務(wù)有可能在同一時(shí)刻對同一個(gè)數(shù)據(jù)進(jìn)行操作,這就有可能造成數(shù)據(jù)不一致性。為防止這種情況出現(xiàn),ADO引入了事務(wù)獨(dú)立級來確定不同事務(wù)之間的相互關(guān)系。設(shè)定事務(wù)獨(dú)立級之后并調(diào)用BeginTrans方法后,新的事務(wù)獨(dú)立級別將生效。
TISolationLevel共包含9種常量值:如下:
TISolationLevel常量及說明
常量參數(shù) 說明
ilUnspecified 使用默認(rèn)的獨(dú)立級別,沒有其它的獨(dú)立級別
ilChaos 來自更高獨(dú)立級別的事務(wù)對數(shù)據(jù)的改變不能被當(dāng)前的事務(wù)覆蓋
ilReadUncommitled 當(dāng)前事務(wù)可以讀取其他事務(wù)未提交的數(shù)據(jù)
ilBrowse 當(dāng)前事務(wù)可以讀取其他事務(wù)未提交的數(shù)據(jù)
ilcursorStability 事務(wù)提交后數(shù)據(jù)才能被讀取
ilReadCommitled 事務(wù)提交后數(shù)據(jù)才能被讀取
ilRepeatableRead 不能讀取其它事務(wù)的數(shù)據(jù),執(zhí)行Requery操作可以獲得這些數(shù)據(jù)
ilSerializable 從其他事務(wù)中獲取事務(wù)的獨(dú)立級別
ilIsolated 從其他事務(wù)中獲取事務(wù)的獨(dú)立級別
這些常量的定義在Microsoft Da
9) KeepConnection
指定如果在沒有打開數(shù)據(jù)集的情況下是否仍然保持?jǐn)?shù)據(jù)的連接。
瀕繁地打開和關(guān)閉數(shù)據(jù)庫的操作將會影響系統(tǒng)的性能,特別在網(wǎng)絡(luò)上,會在一定程度上增加網(wǎng)絡(luò)的負(fù)載。這個(gè)屬性設(shè)置數(shù)據(jù)源始終處于連接狀態(tài),可以顯著提高程序的性能。
10) LoginPrompt
指定在每次建立連接時(shí)是否彈出登錄對話框提示用戶登錄。如果設(shè)為False,則必須在ConnectionString中指定登錄數(shù)據(jù)庫的用戶和密碼。
11) Mode
指定連接對數(shù)據(jù)庫的操作權(quán)限,這種連接模式的值如下:
連接模式參數(shù)及說明
參數(shù) 說明
cmUnknown 未指定數(shù)據(jù)庫操作權(quán)限或無法確定
cmRead 對數(shù)據(jù)庫只能讀操作
cmWrite 對數(shù)據(jù)庫只能寫操作
cmReadWrite 對數(shù)據(jù)庫可讀寫操作
cmShareDenyRead 禁止其他用戶對數(shù)據(jù)庫讀操作
cmShareDenyWrite 禁止其他用戶對數(shù)據(jù)庫寫操作
cmShareExclusive 禁止其他用戶對打開數(shù)據(jù)連接
cmShareDengNone 禁止其他用戶對數(shù)據(jù)庫任何操作
ADOConnection的主要方法:
1) BeginTrans
開始啟動一個(gè)新的事務(wù),必須保證數(shù)據(jù)連接處于激活狀態(tài)。
2) Cancel
關(guān)閉于數(shù)據(jù)庫的連接。
3) CommitTrans
向數(shù)據(jù)庫提交一個(gè)事務(wù)。提交成功后,再事務(wù)中對數(shù)據(jù)庫所作的修改則寫入數(shù)據(jù)庫中,同時(shí)一個(gè)事務(wù)也結(jié)束。
4) Execute(constCommandText:Widestring;VarRecordsAffected;Executeoptions:TexcuteOptions=[eoExecuteNoRecords]);
執(zhí)行一個(gè)CommandText類型的SQL命令,其中,CommandText是指定的SQL命令;ReardsAffected指定該命令設(shè)計(jì)的記錄數(shù)目;ExecuteOptions指定命令特征如下:
ExecuteOption的值及說明
參數(shù) 說明
eoAsyncExecute 異步執(zhí)行命令
eoAsyncFetch 給定了Cache屬性的值后,在異步地去數(shù)據(jù)
eoAsyncFetchNonBlocking 非阻塞式線程執(zhí)行
eoExecuteNoRecords 沒有返回記錄
5) GetProcedureNames(List:Tstring);
獲取數(shù)據(jù)庫服務(wù)器上的存儲過程名稱,獲取的存儲過程名稱在List參數(shù)中。
6) GetTableNames(List:Tstring;SystemTables:Boolean=False);
獲取數(shù)據(jù)庫中的數(shù)據(jù)表,獲取的表名存放在List參數(shù)中SystemTables參數(shù)指示是否獲取數(shù)據(jù)庫系統(tǒng)表的名稱。數(shù)據(jù)庫系統(tǒng)表是指在數(shù)據(jù)庫中關(guān)于數(shù)據(jù)庫數(shù)據(jù)類型定義和用戶信息的數(shù)據(jù)表,這種系統(tǒng)表是數(shù)據(jù)庫本身自動生成的。
7) Open(const UserID:widestring;constPassword:widestring)
打開一個(gè)連接,參數(shù)UserID是數(shù)據(jù)庫用戶的用戶名。Password是用戶登錄數(shù)據(jù)庫的密碼。
8) RollbackTrams
撤回一個(gè)沒有全部執(zhí)行的事務(wù)。事務(wù)撤回之后,事務(wù)中所作的任何修改都不會寫入數(shù)據(jù)庫。
ADOConnection的主要事件
事件 說明
AfterConnect 發(fā)生在一個(gè)連接建立之后
AfterDisconnect 發(fā)生在斷開連接之后
BeforeConnect 發(fā)生在連接建立前
BeforeDisconnect 發(fā)生在斷開連接前
On
On
On
On
On
On
On
On
On
On