MFC `CRecordset` 透過 ODBC 更新 Access 資料表,欄位設為「必填」但傳入空值 → ODBC 驅動拋出例外(`CDBException`),導致更新失敗。
Access 支援 `ALTER TABLE` 修改欄位屬性。在程式啟動/安裝階段執行:
// 移除欄位 NOT NULL 限制
ALTER TABLE YourTable ALTER COLUMN YourColumn DROP NOT NULL;
// 或指定預設值,間接允許空(視業務)
ALTER TABLE YourTable ALTER COLUMN YourColumn SET DEFAULT '';
CDatabase db;
if (db.OpenEx(dsn, CDatabase::noOdbcDialog)) {
CString sql = _T("ALTER TABLE Orders ALTER COLUMN Memo DROP NOT NULL");
try {
db.ExecuteSQL(sql);
TRACE(_T("欄位 NOT NULL 限制已移除\n"));
} catch (CDBException* e) {
TRACE(_T("DDL 失敗: %s\n"), e->m_strError);
e->Delete();
}
db.Close();
}
MFC ODBC 遇 Access 必填欄位空值異常,**根治:`ALTER TABLE ... DROP NOT NULL` 移除限制**;權宜:應用層填預設值。DDL 操作建議在安裝/升級腳本執行,避免執行期權限問題。