《關於在MFC中使用ODBC方式連線資料庫可能出現的問題》第一篇
阿新 • • 發佈:2019-01-25
相信初學者在開放資料庫相關的內容都有遇到這些問題,所以總結常出現的問題!和節約方法!
出現:File: afxdb.inl Line:73
原因:使用CRecordset物件或者物件為基類的物件沒有開啟連線!或者沒有獲取相關資訊直接執行操作!
出現:“對於造型說明無效的字元值”或者“對資料型別限制”的提示
原因:再更改資料庫變數的同時,並沒有對其基於資料庫表的物件的資料型別進行更改!或者AFX機制並沒有有效的說明資料的先後順序!需要自己手動開啟.h和.cpp檔案對資料成員的先後順序進行更改!
出現:dbcore.cpp Line:2979
原因:因為你在繫結表和CRecordset物件時m_nFields(現有列數) != m_nFieldsBound(建表時的列數)
使用GetRecordCount()函式時應知道,雖然叫count但是並不是獲取了總數!
應使用
long nCount = 0; try { if(m_pDatabase && m_pDatabase->IsOpen()) { CString cmdSQL = _T(""); cmdSQL.Format( _T("SELECT COUNT(*) FROM %s WHERE nID=%ld AND bActive = 1"), szDefaultSQL, nID); //查詢條件 CRecordset rsCount(m_pDatabase); if(rsCount.Open(CRecordset::forwardOnly, cmdSQL, CRecordset::executeDirect)) { CString strValue = _T("0"); if (!rsCount.IsEOF()) rsCount.GetFieldValue((short)0, strValue); nCount = _ttol(strValue); rsCount.Close(); } } } catch(CDBException * e) { e->ReportError(); e->Delete(); } return nCount;
出現:File:dbcore.cpp Line:1065
原因:因沒有關閉基於CRecordset類物件 或者基於其類的物件!
出現:File:dbrfx.cpp Line:73
原因:對於資料庫中的表進行更新,自己在關於表的變數新增,但是並沒有對m_nFields的個數相應的增加和刪除!