需快速構建輸電線路管理系統,決定採用「拿來改」策略:下載現成 VC++ MFC 資料庫專案,修改資料庫結構與界面,快速原型驗證。
下載源碼,編譯運行確認無誤。原專案為學生管理系統,包含 MDB 資料庫與完整 CRUD 界面。
App 類連接字串修改:
CString lpszFile = sPath + _T("\\shdxl.mdb"); // 新資料庫檔名
對話框初始化綁定新表:
m_Set.Open(AFX_DB_USE_DEFAULT_TYPE, _T("xlinfo")); // 原為 "一班STUDENT"
運行報錯 參數不足,期待是 n。查閱資料發現:CRecordset 派生類必須覆寫 GetDefaultSQL() 返回正確表名,且 DoFieldExchange 中字段映射須與資料庫欄位完全一致(名稱、類型)。
專案含多個 XRecordset 類對應不同表。以 CDRecordset 為例:
CString CDRecordset::GetDefaultSQL() {
return _T("[xlinfo]"); // 對應新表名
}
void CDRecordset::DoFieldExchange(CFieldExchange* pFX) {
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Int(pFX, _T("[id]"), m_column1);
RFX_Text(pFX, _T("[name]"), m_column2);
RFX_Int(pFX, _T("[length]"), m_column3);
RFX_Text(pFX, _T("[dengji]"), m_column4);
// ... 其餘字段一一對應
}
原代碼對整數欄位統一用 int,但 MFC 的 RFX_Long 要求 long&,RFX_Single 要求 float&。需根據實際欄位類型選擇正確 RFX 宏,並調整成員變量類型。
因字段較多未完全對齊,先註釋可疑字段編譯運行,界面已能顯示資料,後續再逐一修正。
基礎源碼來源:某 VC++ 資料庫 MIS 系統源碼合集,分類索引清晰,適合二次開發參考。
CRecordset 三大虛函數正確覆寫