ADO (ActiveX Data Objects) 是 Windows 平台上存取關聯式資料庫的主流 COM 元件介面。本文示範在 VC++ 6.0 中透過 #import 導入 ADO/ADOX 型別庫,利用 ADOX::Catalog 動態建立 .mdb 檔案與資料表結構。
stdafx.h 中加入:#pragma warning(disable: 4146)
#import "C:\\Program Files\\Common Files\\System\\ado\\msadox.dll" no_namespace
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF", "EndOfFile")
#pragma warning(default: 4146)
路徑請依實際安裝位置調整;rename 避免 EOF 與標準庫衝突。
InitInstance 或執行緒進入點呼叫 CoInitialize(NULL);結束時呼叫 CoUninitialize()。HRESULT hr = S_OK;
CString strConn = _T("Provider=Microsoft.JET.OLEDB.4.0;Data Source=D:\\Test.mdb;");
try {
ADOX::_CatalogPtr pCatalog = NULL;
hr = pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
if (FAILED(hr)) throw _com_error(hr);
// Create 檔案:傳入連接字串,ADOX 會自動建立空 .mdb
pCatalog->Create(_bstr_t(strConn));
// 此時檔案已存在,可進一步建立資料表
}
catch (_com_error &e) {
// 錯誤處理
CString msg; msg.Format(_T("ADO 錯誤: %s"), e.ErrorMessage());
AfxMessageBox(msg);
}
取得有效 _ConnectionPtr 後,直接執行 SQL DDL:
_ConnectionPtr pConn = pCatalog->GetActiveConnection(); // 取得內建連線
// 或自行 pConn.CreateInstance(__uuidof(Connection)); pConn->Open(strConn, "", "", adConnectUnspecified);
CString sql = _T("CREATE TABLE Test ( \
Name TEXT(20) WITH COMPRESSION NOT NULL, \
Score DECIMAL(12,4) NOT NULL DEFAULT 0, \
ID SMALLINT NOT NULL DEFAULT 0, \
Birthday DATE, \
Sex CHAR(1), \
CONSTRAINT CK_Sex CHECK (Sex IN ('M','F')), \
CONSTRAINT PK_ID PRIMARY KEY (ID) \
);");
pConn->Execute(_bstr_t(sql), NULL, adExecuteNoRecords);
_bstr_t bstrConn(strConn);
try {
ADOX::_CatalogPtr cat; cat.CreateInstance(__uuidof(ADOX::Catalog));
cat->Create(bstrConn); // 建檔
_ConnectionPtr conn = cat->GetActiveConnection();
conn->Execute(_bstr_t(sql), NULL, adExecuteNoRecords); // 建表
AfxMessageBox(_T("資料庫與資料表建立成功!"));
}
catch (_com_error &e) {
CString err; err.Format(_T("HRESULT: 0x%08X\n%s"), e.Error(), e.ErrorMessage());
AfxMessageBox(err);
}
.accdb 請改用 Microsoft.ACE.OLEDB.12.0 並安裝 Access Database Engine。_CatalogPtr、_ConnectionPtr 等皆為 _com_ptr_t 封裝,離開作用域自動 Release,無需手動管理。_bstr_t 或 _variant_t 封裝 CString。ADO/ADOX 提供了極簡潔的程式化資料庫建構能力,適合安裝程式自動建立本地資料庫、單元測試環境初始化、離線資料快取等場景。掌握 #import + 智慧指標 + COM 錯誤處理的標準範式,能顯著提升 VC++ 資料庫開發效率。