2024年問題分析總結範文

在套用mfc odbc類進行資料庫套用的開發的過程中遇到了好多問題,曾搞得我焦頭爛額^_^,項目開發完成後,對開發過程中關於odbc報錯問題解決方法做個小結。

報錯一: “不支持動態記錄集”

問題分析:使用cdatabase類的open()成員函式時,最後一個參數默認是載入動態游標庫。因此,出現“不支持動態記錄集”的錯誤,就是由此而來。

我遇到的例子a:使用open(默認dynaset)時,當訪問時間之類的欄位時會出現"不支持動態記錄集",此時需改為snapshot)

ctime m_tmborrow;

if(this-isopen())

{

this-close();

}

this-open(crecordset::snapshot,_t("select * from tbborrow where readerid = '"+readerid+"'"));

m_tmborrow = this-m_borrowtime;

。。。。。。

報錯二:“檢索記錄出錯”

問題分析:在用vc的類嚮導新建一個基類為crecordset的數據集類時要注意類嚮導在綁定欄位時使用的成員類量的數據類型是否與你的資料庫欄位類型一至。因為發現類嚮導並不是根據欄位本身的數據類型來定義綁定變數的數據類型的。常常會把一個資料庫常用的id或編號一類欄位按long型處理,而實際上這樣的欄位往往是字元型的。在此時不會有錯誤發生,錯誤只會在你執行sql查詢時跳出來。 執行sql查詢時,如果出現“非法描述器索引”和“檢索記錄出錯”這兩個錯誤,那多半就是因為資料庫欄位與綁定變數的數據類型不相符導至的。前者一般靜態數據集(snapshot)引起,而後者一般由動態數據集(dynaset)引起。

我遇到的例子b:修改accesse資料庫欄位名稱(該欄位數據類型為日期/時間或者文本類型,其中文本類型的掩碼修改為日期/時間格式),在vc的crecordset派生類中重新綁定資料庫表,導致運行程式時報告“檢索記錄出錯”。解決辦法則是很簡單,把crecordset的派生類從工程中刪除掉,然後再重建一個同樣的crecordset的派生類問題就解決了(不要問我原因,我也搞不清)。

報錯三:“非法描述器索引”

問題分析:同上

我遇到的例子c:每一個資料庫裡面難免要有幾個表,需要對每個表進行添加記錄操作(把資料庫里的所有表都添加到crecordset的派生類中,並且每個表的欄位都綁定相應的變數)。結果每次添加記錄時都會有“非法描述器索引”出現,解決方法,每個表都用一個crecordset的派生類來操作,ok搞定了!

報錯四:“參數不足,期待是1”

問題分析:這個問題通常是sql語句錯誤造成的,通常是sql語句中的欄位數據類型不匹配,或者欄位數據個數不匹配造成的,例如:執行insert into table(name,password) values("aa") 就會造成參數不足。

報錯五:“記錄集是唯讀”

問題分析:這個問題通常是因為沒打開要操作的表,但也可能是操作表的欄位設定不合理。