DAO (Data Access Objects) 透過程式碼建立與操作資料庫,MFC DAO類別封裝大部分功能,專為Microsoft Jet引擎 (MDB檔案) 設計。支援四種存取模式:
CDaoDatabase db;
db.Open(_T("test.mdb"), FALSE, FALSE, _T(""));
// 參數:檔案路徑、唯讀、獨佔、連接字串
COleVariant var;
long id;
CString str;
CDaoRecordset rs(&db);
rs.Open(_T("SELECT ID, Name FROM Users"));
while (!rs.IsEOF()) {
rs.GetFieldValue(_T("ID"), var); id = V_I4(&var);
rs.GetFieldValue(_T("Name"), var); str = var.bstrVal;
// 處理資料...
rs.MoveNext();
}
rs.Close();
rs.AddNew();
rs.SetFieldValue(_T("UserName"), _T("John"));
rs.SetFieldValue(_T("PointId"), 1001);
// 日期時間需用COleDateTime與COleVariant
COleDateTime dt(2024, 1, 15, 10, 30, 0);
COleVariant varTime(dt);
rs.SetFieldValue(_T("UpdateTime"), varTime);
rs.SetFieldValue(_T("OldValue"), 123.45);
rs.SetFieldValue(_T("NewValue"), 124.56);
rs.Update();
rs.Edit();
rs.SetFieldValue(_T("ColumnName"), _T("NewValue"));
rs.Update();
rs.Delete(); // 無需呼叫Update()
// 方法1: 記錄集查詢 (需動態集)
CDaoRecordset rs(&db);
rs.Open(dbOpenDynaset, _T("SELECT COUNT(*) FROM Table"));
COleVariant var;
rs.GetFieldValue(0, var);
long count = V_I4(&var);
// 方法2: CDaoTableDef (最直接)
CDaoTableDef td(&db);
td.Open(_T("TableName"));
long count = td.GetRecordCount();
td.Close();
// 注意:不可用CDaoRecordset::GetRecordCount()
Close()釋放資源CDaoWorkspace::BeginTrans/CommitTrans/Rollback管理MFC DAO提供操作Jet資料庫的強大且簡潔介面,特別適合桌面應用處理MDB檔案。掌握Workspace/Database/Recordset三層架構、四種存取模式、動態欄位綁定與日期時間處理,即可高效開發資料庫應用。但需嚴守單執行緒限制與資源釋放原則。