1. 程式人生 > >《關於在MFC中使用ODBC方式連線資料庫可能出現的問題》第一篇

《關於在MFC中使用ODBC方式連線資料庫可能出現的問題》第一篇

相信初學者在開放資料庫相關的內容都有遇到這些問題,所以總結常出現的問題!和節約方法!

出現: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的個數相應的增加和刪除!