天天看點

使用VC連接配接Access資料庫的兩種方法

  一、使用odbc接口,在這裡我們使用mfc的cdatabase類,該類是對sqlconnect等odbc的api的封裝。需要包含afxdb.h

bool odbcconnect(cstring strdbfile)

{

cstring strconnect;

strconnect.format(_t("odbc;driver={microsoft access driver (*.mdb)};uid=sa;pwd=;dbq=%s"), strdbfile);

cdatabase db;

if(db.open(null, false, false, strconnect))

//連接配接資料庫成功

crecordset rs(&db);

cstring strsql;

strsql = _t("select * from info");                                //sql語句

if(rs.isopen())

cdbvariant variant;

rs.movefirst();

while(!rs.iseof())

//讀取記錄

rs.getfieldvalue(_t("姓名"), variant);

rs.movenext();

}

db.close();

return true;

return false;

 二、使用ado連接配接資料庫,因為要使用com,需要初始化(coinitialize).然後就可以生成接口的對象操作,代碼如下:

#import "c:program files/common files/system/ado/msado15.dll" rename("eof", "adoeof")    //生成c++類,改變eof函數的名稱

using namespace adodb;

bool adoconnect(cstring strdbfile)

_connectionptr pconnection;

if(pconnection.createinstance(__uuidof(connection)) != s_ok)

strconnect.format(_t("provider=microsoft.jet.oledb.4.0;data source=%s"), strdbfile);

if(pconnection->open(_bstr_t(strconnect), "", "", admodeunknown) == s_ok)

_recordsetptr precordset;

if(precordset.createinstance(__uuidof(recordset)) != s_ok)

pconnection->close();

strsql = _t("select * from info");

hresult hr = precordset->open(_bstr_t(strsql), _variant_t((idispatch*)pconnection, true), adopenunspecified, adlockunspecified, adcmdunknown);

if(hr != s_ok)

_variant_t vt;

precordset->movefirst();

while(!precordset->adoeof)

vt = precordset->fields->getitem("姓名")->value;

precordset->movenext();

最新内容請見作者的github頁:http://qaseven.github.io/