天天看點

DAO簡介(MFC) .

1 DAO簡介

       DAO(資料通路對象)是一種應用程式程式設計接口(API),存在于微軟的Visual Basic中,它允許程式員請求對微軟的Access資料庫的通路。DAO是微軟的第一個面向對象的資料庫接口。DAO對象封閉了Access的Jet函數。通過Jet函數,它還可以通路其他的結構化查詢語言(SQL)資料庫。在VC中,它是從Visual C++4.0版開始引入的。

2 DAO和ODBC的比較

2.1 相似點

MFC的DAO類和ODBC類有很多相似之處,主要有兩點:

1) 都支援對各種ODBC資料源的通路。

2) 提供了功能相似的MFC類。例如DAO的CDaoDatabase類對應于ODBC的CDatabase類,DAO的CDaoRecordset類對應于ODBC的CRecordset類等。這些類所提供的程式函數大部分也相同。

2.2 不同點

盡管兩者非常相似,但通路資料庫的機制完全不同。ODBC的工作依賴于資料庫制造商提供的驅動程式,而DAO直接利用Microsoft Jet引擎提供的資料庫通路對象集進行工作。

3 DAO主要類

      CDaoDatabase、CDaoRecordset、 CDaoTableDefInfo、CDaoFieldInfo、COleVariant 是使用MFC進行DAO程式設計的最基本和最常用的類。

使用MFC進行DAO程式設計,首先要為每一個打開的資料庫檔案提供一個資料庫對象──CDaoDatabase,由這個對象管理資料庫的連接配接。然生成記錄集對象──CDaoRecordset,通過它來進行查詢、操作、更新等等的工作。如果需要在程式中管理資料庫的結構,則需要使用DAO當中的表結構資訊對象CDaoTableInfo及字段定義對象 CDaoFieldInfo來進行獲得或者改變資料庫表結構的工作。

3.1 CDaoDatabase

    類CDaoDatabase代表了一個資料庫連接配接。使用它可以操縱資料庫中的資料。在一個給定工作區(由CDaoWorspace對象代表)中,同時可以有多個活動的CDaoDatabase對象。工作區維護了一組開放資料庫對象——資料庫連接配接。

      MFC DAO資料庫類與那些基于ODBC的MFC資料庫類是不同的。所有的DAO資料庫類的名字都有CDao字首。類CDaoDatabase提供了一個類似于ODBC類CDabase的接口。二者主要的不同在于:CDatabse是通過ODBC和ODBC驅動程式存取資料庫的,而CDaoDatabase則是通過資料存取對象(Data Acess Object,DAO)存取資料庫的。DAO基于Microsoft Jet資料庫引擎。一般說來,基于DAO的MFC類比基于ODBC的類處理能力更強。基于DAO的類可以通過ODBC驅動也可以經由自己的資料庫引擎存取資料。基于DAO的類也支援資料定義操作(DDL),比如不用直接調用DAO而通過類建立表。

     建立一個新的Microft Jet資料庫(.MDB),要構造一個CDaoDatabase對象并且調用它的成員函數Create。 在調用Create之後不要再調用Open。打開一個現有的資料庫,要構造一個CDaoDatabase對象并且調用它的成員函數Open。上面的這些方法都把DAO資料庫對象添加到工作區的Databases集合中,并在資料上建立一個連接配接。以後需要構造CDaoRecordset,CDaoTableDef或CDaoQueryDef來操縱連接配接上的資料庫,要向它們的構造函數傳送CDaoDatabase對象的指針。使用完連接配接之後,要調用成員函數Close并撤消CDaoDatabase對象。Close會關閉所有沒有關閉的記錄集。

3.2 CDaoRecordset

     一個CDaoRecordset對象表示從資料源中選擇的一組記錄。作為“記錄集”,CDaoRecordset對象在以下三種窗體中有效:

3.2.1 表型記錄集表示一個基本表,可以用它從單個資料庫表中檢查、添加、改變或删除記錄。

3.2.2 動态集型記錄是一個查詢的結果,可以包含可更新的記錄。這個資料集是一組記錄,可以用它從一個或多個基本資料庫表中檢查、添加、改變或删除記錄。動态集型記錄集包含來自一個資料庫中一個或多個表的字段。

3.2.3 快照型記錄集是一組記錄的一個靜态拷貝,可以用它查找資料或生成報表。這些記錄集可以包含來自一個資料庫中一個或多個表的字段,不過不可更新。

3.3 CDaoTableDefInfo

COleVariant 這個類封裝了WIN32提供的VARIANT這個結構以及對它的操作。這個類當中可以存儲多種類型的資料。需要注意的是這種包容能力是通過C語言當中的UNION提供的,就是說一個COleVariant 對象隻能儲存一種類型的資料。我們先把字段的值裝入OLE變體對象,再使用這個變體對象對記錄中的字段進行指派。VT_BSTRT參數的作用是在生成OLE變體對象的時候訓示将要封入的資料的類型為字元串。當對所有的字段都結束指派後,調用Update 函數來儲存剛才的修改。