“ODBC驅動程序不支持動態記錄集”錯誤的解決辦法

我納悶在哪裏出了問題。我想唯一有可能的是連接數據庫時出現了問題。於是我找到連接數據庫的代碼:

m_pdatabase->Open(NULL,FALSE,FALSE,"ODBC;DSN=libraryMIS;UID=txm;PWD=txm");

其中m_pdatabase是一個CDatabase類的指針。於是我查msdn,找到CDatabaseOpen函數。CDatabase::Open

virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = “ODBC;”, BOOL bUseCursorLib = TRUE );
throw( CDBException, CMemoryException );

   我猜到問題可能出在哪兒了,我在BOOL bUseCursorLib設置了默認值TRUE。我得先看看bUseCursorLib表示什麼意義。bUseCursorLib

 

TRUE if you want the ODBC Cursor Library DLL to be loaded. The cursor library masks some functionality of the underlying ODBC driver, effectively preventing the use of dynasets (if the driver supports them). The only cursors supported if the cursor library is loaded are static snapshots and forward-only cursors. The default value is TRUE. If you plan to create a recordset object directly from CRecordset without deriving from it, you should not load the cursor library.

大意是說假如bUseCursorLibTRUE時,ODBC光標庫將被加載。光標庫會覆蓋ODBC驅動程序的一些功能,有效地阻止動態記錄集的使用(假如ODBC驅動程序支持動態記錄集的使用的話)。假如光標庫被加載唯一的光標支持的是靜態快照集和唯一向前的光標。參數默認值是TRUE。假如你直接創建一個CRecordset類對象而不是繼承自它,你不應該裝載光標庫。

   因此問題的解決辦法是將bUseCursorLib的值設爲FALSE。當我這樣做了,問題解決了。

還要注意的是,當你更新數據庫某條記錄的時間,一定要判斷這條記錄是否存在 ,我這裏也吃過虧,一直報錯,就是更新不了, 才發現數據庫沒這條數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章