將 VC++6.0 專案原使用 Oracle 9i 的資料庫連接改為 Access 2007,採用 ADO (ActiveX Data Objects) 配合 COM 介面操作。
CoInitialize(NULL)。#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename("EOF", "adoEOF")。Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的.mdb路徑(Access 2007 亦可用 Microsoft.ACE.OLEDB.12.0)。_ConnectionPtr、_RecordsetPtr 智慧指標管理資源,執行 SQL 查詢並遍歷結果集。#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename("EOF", "adoEOF")
using namespace ADODB;
BOOL ADOConnect(CString strDBFile) {
_ConnectionPtr pConnection;
if (FAILED(pConnection.CreateInstance(__uuidof(Connection)))) return FALSE;
CString strConnect;
strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), strDBFile);
if (FAILED(pConnection->Open(_bstr_t(strConnect), "", "", adModeUnknown))) {
return FALSE;
}
_RecordsetPtr pRecordset;
if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset)))) {
pConnection->Close();
return FALSE;
}
CString strSql = _T("SELECT * FROM info");
HRESULT hr = pRecordset->Open(_bstr_t(strSql), _variant_t((IDispatch*)pConnection, TRUE),
adOpenUnspecified, adLockUnspecified, adCmdUnknown);
if (FAILED(hr)) {
pConnection->Close();
return FALSE;
}
_variant_t vt;
pRecordset->MoveFirst();
while (!pRecordset->adoEOF) {
vt = pRecordset->Fields->GetItem(_T("姓名"))->Value;
// 處理 vt...
pRecordset->MoveNext();
}
pConnection->Close();
return TRUE;
}
Microsoft.ACE.OLEDB.12.0 Provider。_com_error 捕獲 COM 異常。CoUninitialize()。