DAO對象模型組成
DAO對象模型,也就是Data Access Object,它是一個針對Jet引擎的訪問操作。所以對於Access數據庫來說,使用DAO無疑是最佳首選。而MFC DAO是微軟提供的用於訪問Microsoft Jet數據庫文件(*.mdb)的強有力的數據庫開發工具,它通過對DAO的封裝,向程序員提供了各種輔助類,從而大大降低了DAO對象使用複雜度。DAO模型通過多個DAO對象構成一個體繫結構,在這個結構裏,各個DAO對象協同工作。對應MFC DAO的對象如下所示:
CDaoWorkspace
此對象用來管理具有用戶名、密碼保護的數據庫,大部分程序使用默認的工作區。
CDaoDatabase
通過此對象與數據庫建立連接。建立連接後,才能對數據庫採取進一步的操作。
CDaoRecordset
用來表示從數據源中查詢的數據記錄集合。
CDaoRecordView
通過一個視圖控件來顯示數據記錄。
CDaoQueryDef
對查詢定義的表述,查詢定義通常保存於數據庫當中。
CDaoTableDef
用來表示一個數據實體表或鏈接表的定義。
CDaoException
這個對象用來對DAO中產生的異常進行包裝。
CDaoFieldExchange
此對象用來對DAO的字段改變的路徑提供支持,通常不會直接使用到此對象。
其中CDaoDatabase 及CDaoRecordset 是兩個比較重要的對象,幾乎所有的DAO數據庫都有這兩個對象的身影。其他還定義了一些數據類型的類:ClongBinary、ColeCurrency、COleDateTime 、ColeVariant。分別用來處理數據二進制對象、貨幣類型、時間類型及變體類型。
同樣爲了讓同學們有個直觀的認識,我們同樣試圖通過DAO來訪問學生信息管理系統。我們看看通過DAO訪問數據庫的大概步驟。重點認識CDaoDatabase 、CDaoRecordset這兩個對象。
首先,同樣要建立對數據庫的連接,我們通過CdaoDatabase對象來完成該任務。
這樣我們就與數據庫classdat.mdb建立了連接,然後我們訪問其中的表數據。此時需要用到CDaoRecordset對象
數據表已經被打開,並被daoRs接收。我們就可以對該表進行訪問、修改、刪除操作了。
如果要訪問字段內容,可通過CDaoRecordset對象的GetFieldValue操作。
如:
就可以將第二個字段(字段索引從0開始)保存到vValue對象當中。在學生信息管理系統當中,該字段是學生姓名,所以保存的代碼如下:
當要對字段進行修改時,可以通過SetFieldValue操作。
如:
就將數據庫中的學生姓名字段更新爲strStudentName的內容了。
刪除操作則直接通過Delete函數。
daoRs.Delete();//這裏將刪除當前記錄。
同樣我們要訪問前一條記錄或後一條記錄,可以通過MovePrev和MoveNext。
至此,你已經可以通過DAO來建立你的簡單的數據庫軟件了。使用DAO操作數據庫是不是很簡單呢?
9.2.4 DAO 特點
DAO提供了一種通過程序代碼創建和操縱數據庫的機制。最大特點是對MICROSOFT JET數據庫的操作很方便,而且是操作JET數據庫時性能最好的技術接口之一。當你需要訪問Access數據庫時,不妨使用DAO對象模型來進行操作。DAO具有如下幾個顯著特點。
首先,DAO使用相對比較簡單。
我們看到DAO模型中,主要對象包括CDaoWorkspace 、CDaoDatabase 、CDaoRecordset三個,一般情況下應用後兩個對象已經能完成大部分的工作。對象的操作也比較直觀,通過函數名已經能大概知道具有的操作。加上MFC對其的封裝,更進一步降低了它的使用難度。
其次,DAO是用來訪問Jet引擎的方法,主要用來訪問Access數據庫。
可以說DAO天生是用來操作Access數據庫的,但它並不侷限於Access數據庫。通過DAO技術可以訪問從文本文件到大型後臺數據庫等多種數據格式。使用ACCESS把ODBC表添加到一個MDB文件上,我們也可以通過DAO訪問提供了ODBC驅動的數據庫。
再者,DAO是操作JET數據庫時性能最好的技術接口之一。
因爲DAO是針對JET數據庫來開發的,所以通過它來訪問Access數據庫具有高效的特點。
最後,因爲Microsoft Jet不支持多線程,因此,必須限制調用到應用程序主線程的所有DAO。也就是需要使用者自己負責同步工作。