本文介紹了在 C++Builder 5環境下新增的ADO控件的使用方法,並給出了一個簡單的實例。
一、ADO概述
ADO(Active Data Object) 是微軟公司基於OLE DB的數據庫模型。它實現了一系列COM接口,通過數據提供者(Data Provider)和數據使用者( Data Consumer)來實現廣義的數據存取。ADO模型一方面簡化了數據存取,例如使用Jet OLE DB Provider可以實現Access數據庫的無DSN連接;另一方面,在ASP等Internet應用中也得到了廣泛的使用。
在C++Builder 5/Delphi 5中諸多新增特性中,ADO數據控件的引入是比較引人注目的,它使ADO編程和在Visual Basic 6中一樣容易。由於VCL類庫對ADO的封裝更加合理,舊的數據控件可以很容易地升級到ADO支持,而不象在VB中某些DAO或RDO控件無法兼容ADO。
二、使用ADO控件
在C++Builder 5中,ADO控件實質上是一種數據訪問組件。如果讀者有過C++Builder先前版本的數據庫開發經驗,就會發現與數據訪問組件相連的數據源組件(TdataSource) 和數據感知組件(如TDBGrid)的使用方法和以前一樣,只需把 TdataSource 連到ADO控件上即可。
如果要實現簡單的表操作或查詢,可以使用TADOTable或TADOQuery。更一般地,可以使用TADODataSet控件,其基本屬性的設置方法如下:
(1)ConnectionString屬性:點擊屬性欄中的省略號,出現配置窗口,選"Use Connection String",按Build按鈕。在接下來的窗口中選擇數據提供者,以微軟的Northwind示例Access數據庫為例,選Microsoft Jet 4.0 OLE DB Provider, 按Next按鈕,選擇數據庫的路徑和文件名。點擊Test Connection按鈕可以測試數據庫連接。點擊"確定"。
(2)CommandText屬性:可以使用CommandText Editor生成SQL語句或Shape語句。
注意,TADODataSet不支持不返回結果集的DML語句,如DELETE,INSERT,UPDATE。如果要使用這些語句,選擇TADOCommand或TADOQuery。
這些ADO控件自身已能實現數據庫連接,也可以設置其Connection屬性為一個TADOConnection控件名,而在 TADOConnection控件中設置 ConnectionString屬性。所有屬性也可以用代碼在運行期間設置。
三、一個Master/Detail實例
下面以一個簡單的實例說明ADO控件的應用。這裡我們用Shape語句實現Master/Detail關系。關於Shape語句的詳細解釋,請參考MSDN文檔。
1. 新建一個項目,並在窗體中放置下列控件(帶省略號的屬性值先不設置):
名稱 控件類型 屬性 屬性值
ADOConnection1 TADOConnection ConnectionString …
ADODataSet1 TADODataSet Connection ADOConnection1 CommandText…
DataSource1 TDataSource DataSet ADODataSet1
DBGrid1 TDBGrid DataSource DataSource1
ADODataSet2 TADODataSet DataSetField …
DataSource2 TDataSource DataSet ADODataSet2
DBGrid2 TDBGrid DataSource DataSource2
2. 設置 ADOConnection1的ConnectionString值
選擇Data Provider為MSDataShape,並設置Northwind數據庫的路徑和名稱。
3. 設置 ADODataSet1的CommandText值如下:
SHAPE {select * from Orders}
APPEND ({select * from [Order Details]} AS Details
RELATE OrderID TO OrderID)
這裡定義了主表Orders和子表Order Details通過OrderID的連接。
4. 在ADODataSet1控件上右擊,選Fields Editor…->右擊->選Add fields… 或Add all fields,務必選中"Details"項,這是我們在Shape語句中定義的用於子表連接主表的數據集。
5. 設置
ADODataSet2的DataSetField值,這時可供選擇的值為ADODataSet1Details,選中它,表明與ADODataSet1的Details列相連。
6. 出現在 DBGrid1中的 Details 列,其每個記錄都是DataSet類型的。可以在DBGrid1中隱藏 Details列的顯示:選擇 DBGrid1的Columns屬性,在彈出窗口的工具條上點擊 Add all Fields,選中 Details,點擊Delete Selected.
7. 運行該程序,當數據指針在主表Orders中移動時,子表Order Details自動更新以顯示不同訂單的明細條目。
從以上實例看出, C++Builder 5完全具備開發復雜的ADO應用程序的能力,其強大的VCL控件使開發者能集中注意力於數據庫的邏輯與功能設計,而不必關心繁復的常規代碼和操作。