ADO是Microsoft存取通用數據源的標准引擎。ADO通過封裝OLE DB而能夠存取不同類型的數據,讓應用程序能很方便地通過統一的接口處理各種數據庫。ADO由一組COM對象組成,每一個不同的原生ADO對象負責不同的工作。下面,向大家介紹如何使用原生ADO對象的動態屬性來實現ADO的高級功能。www.sq120.com推薦文章
ADO原生對象關系圖:
Connection
Errors→Error
Command→Parameters→Parameter
RecordSet→Fields→Field
一、存取原生ADO對象
Delphi中的ADO組件頁中的組件為我們通過ADO技術訪問數據庫提供了方便。這些組件封裝了原生的ADO對象。雖然我們利用ADO組件頁中的組件也能編寫出有效率的數據庫程序,但是ADO中的一些屬性和方法仍然是ADOExpress組件沒有封裝進去的,而此時,需要使用這些沒有封裝的屬性和方法,必須還得通過存取原生的ADO對象來使用這些屬性和方法。
在ADO組件中,每個組件都有一個屬性讓程序員通過它來存取它所封裝的原生ADO對象。下面我們用表1來說明ADO組件頁中ADO組件封裝原生ADO對象的屬性:
在程序中訪問ADO組件封裝的原生ADO對象,例如:
Var
MyRS :_RecordSet;
MyRS :=ADODataSet1.RecordSet;
以上這句就是訪問組件封裝的原生ADO對象RecordSet。tw.wiNgwiT.coM
二、存取原生ADO對象的動態屬性
當我們用ADO組件編寫針對特定數據庫的應用程序時,ADO驅動程序會將特定數據庫所能提供的功能存儲在動態屬性之中。在ADO模型中,每一個原生AD
O對象都有一組動態屬性。
注意:在Delphi中,只能通過原生的ADO對象來存取動態屬性。
原生的ADO對象的動態屬性集合存儲在名為Properties的數組結構中,Properties數組中的每一個數組元素Property就對應一個特定的動態屬性。因此,訪問原生ADO對象的動態屬性的基本步驟是:
1. 通過ADO組件的屬性訪問其封裝的原生的ADO對象;
2. 利用原生的ADO對象訪問其Properties動態屬性集合;
3. 在Properties動態屬性集合中訪問Property動態屬性;
4. 存取Property動態屬性的值,實現ADO組件未封裝的功能。
Delphi為我們訪問動態屬性集合Properties提供了幾個方便的接口函數供我們調用:
Function Get_Item(Index : OleV
ariant) :Property; SafeCall;//根據動態屬性的索引值或名稱獲取動態屬性
Property Item[Index :OleVariant
] :Property Read Get_Item;//根據動態屬性在集合中的索引值來獲取動態屬性
Delphi也提供了以下的屬性來方便地訪問動態屬性Propery的名稱和值:
Name 動態屬性的名稱
Value 動態屬性的值
為了說明這些原理,我們用一個簡單的例子來說明。這個例子中,程序運行後點擊按鈕,在Memo中就會顯示原生的ADO對象RecordSet的所有動態屬性。
1. 建立一個新的工程,保存為Project1.dpr;
2. 在主窗體上放置如下組件:
TAdoConnection、TAdDataSet、TMemo、TButton
3. 將TAdoConnection的Conne
ctionString屬性連接到SQL SERVE
R 數據庫的Pubs數據庫;
4. 設置TAdoDataSet的Connecti
on屬性為上一步中的TAdoConnecti
on組件;
5. 編寫按鈕的Button1Click事件處理函數代碼如下:
procedure TForm1.Button1Click(S
ender: TObject);
Var
i :Integer;
MyPty :Property_;
MyPties :Properties;
MyRS :_RecordSet;
begin
AdoDataSet1.Open;
MyRS :=AdoDataSet1.RecordSet; //獲取原生的ADO對象賦值給MyRS
MyPties :=MyRS.Properties; //獲取原生ADO對象的動態屬性集合Prop
erties賦值給MyPties
For i :=0 to MyPties.Count-1 do //循環取得動態屬性集合Properties中的每一個動態屬性
begin
MyPty :=MyPties.Item[i]; //動態屬性集合MyPites的Item屬性根據索引值取得每一個動態屬性賦值給MyPty
Memo1.Lines.Add(MyPty.Name); //動態屬性MyPty的Name屬性表示該動態屬性的名字,將動態屬性的名字加入到Memo1列表中。
end;
end;
From:http://tw.wingwit.com/Article/Software/201309/335.html