ADO編程常見問題及解決辦法

來源:文萃谷 3.13W

(一)使用ADO編程判斷一個表是否存在

ADO編程常見問題及解決辦法

(1)、同樣判斷一個表是否存在,也可以用是否成功地打開它來判斷,十分方便,例如: try{ m_pRecordset->Open(_variant_t("mytable"), _variant_t((IDispatch *)m_pConnection,true), adOpenKeyset, adLockOptimistic, adCmdTable); } catch (_com_error &e) { ::MessageBox(NULL,"該表不存在。","提示",MB_OK │ MB_ICONWARNING); } (2)、要不然可以採用麻煩一點的辦法,就是在MS-SQL服務器上的每個數據庫中都有一個名為sysobjects的表,查看此表的內容即知指定的表是否在該數據庫中。 (3)、同樣,每個數據庫中都有一個名為TABLES的視圖(View),查看此視圖的內容即知指定的表是否在該數據庫中。

(二)ADO編程使用AppendChunk的問題

當用AddNew方法剛剛向記錄集內添加一個新記錄之後,不能首先向一個長數據字段(image類型)寫入數據,必須先向其他字段寫入過數據之後,才能調用AppendChunk寫該字段,否則出錯。也就是説,AppendChunk不能緊接在AddNew之後。另外,寫入其他字段後還必須緊接着調用AppendChunk,而不能調用記錄集的Update方法後,才調用AppendChunk,否則調用AppendChunk時也會出錯。換句話説,就是必須AppendChunk在前,Update在後。因而這個時候就不能使用帶參數的AddNew了,因為帶參數的AddNew會自動調用記錄集的Update,所以AppendChunk就跑到Update的後面了,就只有出錯了!因此,這時應該用不帶參數的AddNew。我推測這可能是MS SQL 7.0的問題,在MS SQL 2000中則不存在這些問題,但是AppendChunk仍然不能在Update之後。

(三)使用ADO編程綁定字符串型字段問題

如果要綁定的字段是字符串類型,則對應的`字符數組的元素個數一定要比字段長度大2(比如m_szau_fname[22],其綁定的字段au_fname的長度實際是20),不這樣綁定就會失敗。

(四)使用ADO編程重複使用命令對象問題

一個命令對象如果要重複使用多次(尤其是帶參數的命令),則在第一次執行之前,應將它的Prepared屬性設置為TRUE。這樣會使第一次執行減慢,但卻可以使以後的執行全部加快。

(五)使用ADO編程SafeArray問題

在初學使用中,我曾遇到一個傷腦筋的問題,一定要注意: 在定義了SAFEARRAY的指針後,如果打算重複使用多次,則在中間可以調用::SafeArrayDestroyData釋放數據,但決不能調用::SafeArrayDestroyDescriptor,否則必然出錯,即使調用SafeArrayCreate也不行。例如: SAFEARRAY *psa; ...... //When the data are no longer to be used: ::SafeArrayDestroyData( psa); 我分析在定義psa指針時,一個SAFEARRAY的實例(也就是SAFEARRAY描述符)也同時被自動建立了。但是隻要一調用::SafeArrayDestroyDescriptor,描述符就被銷燬了。 所以我認為::SafeArrayDestroyDescriptor可以根本就不調用,即使調用也必須在最後調用。

(六)ADO編程打開記錄集時的問題

在打開記錄集時,在調用Recordset的Open方法時,其最後一個參數裏一定不能包含adAsyncExecute,否則將因為是異步操作,在讀取數據時無法讀到數據。

熱門標籤