VC6 0中使用ADO操作Access資料庫

2021-04-13 07:18:15 字數 3442 閱讀 4534

由於我的程式只是簡單的儲存**和標題,access小而簡單,所以就選擇access作為本小軟體的資料庫,並採用ado訪問資料庫。

以下資料庫內容摘自孫鑫老師的」vc20講第20課資料庫訪問的ppt」

資料庫訪問技術

1. odbc(open database connectivity),開放資料庫互連。odbc是上個世紀八十年代末九十年代初出現的技術,它為編寫關聯式資料庫的客戶軟體提供了一種統一的介面。 odbc提供乙個單一的api,可用於處理不同資料庫的客戶應用程式。使用odbc api的應用程式可以與任何具有odbc驅動程式的關聯式資料庫進行通訊。

2. dao(data access object),資料訪問物件。dao就是一組microsoft access/jet資料庫引擎的com自動化介面。 dao不像odbc那樣是面向c/c++程式設計師的,它是微軟提供給visual basic開發人員的一種簡單的資料訪問方法,用於操縱access資料庫。

3. rdo(remote data object),遠端資料物件。由於rdo直接呼叫odbc api(而不是像dao那樣通過jet引擎),所以,可以為使用關聯式資料庫的應用程式提供更好的效能。

4. ole db,物件鏈結與嵌入資料庫。 ole db在兩個方面對odbc進行了擴充套件。首先, ole db提供了乙個資料庫程式設計的com介面;第二, ole db提供了乙個可用於關係型和非關係型資料來源的介面。 ole db的兩個基本結構是ole db提供程式(provider)和ole db使用者程式(consumer)。

5. ado(activex data object),activex資料物件,它建立在ole db之上。ado是乙個ole db使用者程式。使用ado的應用程式都要間接地使用ole db。ado簡化了ole db,提供了對自動化的支援,使得像vbscript這樣的指令碼語言也能夠使用ado訪問資料庫。

ado的三個核心物件

1.connection物件

connection物件表示了到資料庫的連線,它管理應用程式和資料庫之間的通訊。 recordset和command物件都有乙個activeconnection屬性,該屬性用來引用connection物件。

2.command物件

command物件被用來處理重複執行的查詢,或處理需要檢查在儲存過程呼叫中的輸出或返回引數的值的查詢。

3.recordset物件

recordset物件被用來獲取資料。 recordset物件存放查詢的結果,這些結果由資料的行(稱為記錄)和列(稱為字段)組成。每一列都存放在recordset的fields集合中的乙個field物件中。

用vc連線access的方法如下:

1.將msado15.dll動態庫拷貝到你應用程式所在的資料夾,msado15.dll一般放在c:/program files/common files/system/ado目錄下,你也可以通過windows的收搜功能進行收搜。

在標頭檔案stdafx.h中加上#import "msado15.dll" no_namespace rename ("eof", "adoeof")

因為記錄集的結尾是eof,而檔案的結尾也是eof,所以這裡為了避免衝突,將其重新命名為adoeof。編譯程式,這時在你的debug目錄下多出現兩 個檔案:msado15.tlh和msado15.tli,這是msado15.dll在編譯時自動生成的,有時候可以幫助你了解一些函式、常數的含義。

2.初始化ado並連線資料庫

ado實際上是乙個com元件,所以我們在使用它之前要進行初始化,結束後要解除安裝。

加上乙個成員變數 _connectionptr m_pconnection; //連線資料庫的智慧型指標

// 初始化—連線資料庫

// 初始化ole/com庫環境

::coinitialize(null);

……hr=m_pconnection.createinstance(__uuidof(connection)); //例項化連線物件

……m_pconnection->connectionstring= "provider=microsoft.jet.oledb.4.0;data source=helper.mdb"; //連線資料庫

//如果access資料庫中設定了密碼,那麼此句應為

//m_pconnection->connectionstring="provider=microsoft.jet.oledb.4.0;data source=helper.mdb;persist security info=false;jet oledb:database password=123456";

還有這裡涉及乙個字串過長的問題,該字串在一行中寫不下去,需多行輸出。

如cstring str=」123456789」; 分兩行寫為:

str=」123456」/ //為清楚末尾加 / 在vc中不加也可以,但不要有分號

「789」;

……m_pconnection->connectiontimeout=10; //設定等待連線開啟的時間為10秒

hr=m_pconnection->open("","","",adconnectunspecified);//開啟連線

……(失敗、異常處理)

3.資料庫讀取、修改、刪除

……cstring strsql=」select * from stock」;

_recordsetptr pqueryrecordset;

……hr=pqueryrecordset.createinstance(__uuidof(recordset));

……pqueryrecordset->open(_variant_t(strsql),m_pconnection.getinte***ceptr(),

adopendynamic,adlockoptimistic,adcmdtext); //開啟資料庫

……if((pqueryrecordset->bof)&&(pqueryrecordset->adoeof))//記錄集沒有記錄

else}……

修改recordset->putcollect("visit", (lpctstr)visit );

recordset->update();

增加recordset->addnew();

recordset->putcollect("visit", (lpctstr)visit );

recordset->update();

刪除表strsql=」delete from stock」;

recordset->open(_variant_t(strsql),_variant_t((idispatch*)m_pconnection,true),

adopenstatic,adlockoptimistic,adcmdtext);

4.撤消資料庫連線,解除安裝ado

m_pconnection->close(); // 釋放環境

::couninitialize();

另外,由於access會對你的資料進行排序,所以你讀出的資料次序不一定會跟你寫進access時一致。

VC6 0中使用ADO操作Access資料庫

ado提供了一組非常簡單,將一般通用的資料訪問細節進行封裝的物件。由於odbc資料來源也提供了一般的ole db privider,所以ado不僅可以應用自身的ole db privider,而且還可以應用所有的odbc驅動程式。關於ole db和ado的其它詳細情況,讀者可以自行查閱相關書籍或ms...

VC6 0中使用ADO操作Access資料庫

這個版本比原先發的要更加全面一些,以下的 均經過驗證。準備 1 引入ado類 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2 初始化com 在mfc中可以用afxo...

VC6 0中使用64位整型

vc6.0通常用於編寫32位的程式,但是偶爾也需要用到64位整型以實現更精確的計算,在vc6.0中64位整型是用 int64定義的,如下為使用該型別資料計算階乘求和的乙個例子。需要注意的是printf要輸出64位整型數,引數應為 i64u。include int main printf i64u n...