- 相關(guān)推薦
ADO編程常見問題及解決辦法
(一)使用ADO編程判斷一個(gè)表是否存在
(1)、同樣判斷一個(gè)表是否存在,也可以用是否成功地打開它來判斷,十分方便,例如: 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)、要不然可以采用麻煩一點(diǎn)的辦法,就是在MS-SQL服務(wù)器上的每個(gè)數(shù)據(jù)庫中都有一個(gè)名為sysobjects的表,查看此表的內(nèi)容即知指定的表是否在該數(shù)據(jù)庫中。 (3)、同樣,每個(gè)數(shù)據(jù)庫中都有一個(gè)名為TABLES的視圖(View),查看此視圖的內(nèi)容即知指定的表是否在該數(shù)據(jù)庫中。
(二)ADO編程使用AppendChunk的問題
當(dāng)用AddNew方法剛剛向記錄集內(nèi)添加一個(gè)新記錄之后,不能首先向一個(gè)長(zhǎng)數(shù)據(jù)字段(image類型)寫入數(shù)據(jù),必須先向其他字段寫入過數(shù)據(jù)之后,才能調(diào)用AppendChunk寫該字段,否則出錯(cuò)。也就是說,AppendChunk不能緊接在AddNew之后。另外,寫入其他字段后還必須緊接著調(diào)用AppendChunk,而不能調(diào)用記錄集的Update方法后,才調(diào)用AppendChunk,否則調(diào)用AppendChunk時(shí)也會(huì)出錯(cuò)。換句話說,就是必須AppendChunk在前,Update在后。因而這個(gè)時(shí)候就不能使用帶參數(shù)的AddNew了,因?yàn)閹?shù)的AddNew會(huì)自動(dòng)調(diào)用記錄集的Update,所以AppendChunk就跑到Update的后面了,就只有出錯(cuò)了!因此,這時(shí)應(yīng)該用不帶參數(shù)的AddNew。我推測(cè)這可能是MS SQL 7.0的問題,在MS SQL 2000中則不存在這些問題,但是AppendChunk仍然不能在Update之后。
(三)使用ADO編程綁定字符串型字段問題
如果要綁定的字段是字符串類型,則對(duì)應(yīng)的字符數(shù)組的元素個(gè)數(shù)一定要比字段長(zhǎng)度大2(比如m_szau_fname[22],其綁定的字段au_fname的長(zhǎng)度實(shí)際是20),不這樣綁定就會(huì)失敗。
(四)使用ADO編程重復(fù)使用命令對(duì)象問題
一個(gè)命令對(duì)象如果要重復(fù)使用多次(尤其是帶參數(shù)的命令),則在第一次執(zhí)行之前,應(yīng)將它的Prepared屬性設(shè)置為TRUE。這樣會(huì)使第一次執(zhí)行減慢,但卻可以使以后的執(zhí)行全部加快。
(五)使用ADO編程SafeArray問題
在初學(xué)使用中,我曾遇到一個(gè)傷腦筋的問題,一定要注意: 在定義了SAFEARRAY的指針后,如果打算重復(fù)使用多次,則在中間可以調(diào)用::SafeArrayDestroyData釋放數(shù)據(jù),但決不能調(diào)用::SafeArrayDestroyDescriptor,否則必然出錯(cuò),即使調(diào)用SafeArrayCreate也不行。例如: SAFEARRAY *psa; ...... //When the data are no longer to be used: ::SafeArrayDestroyData( psa); 我分析在定義psa指針時(shí),一個(gè)SAFEARRAY的實(shí)例(也就是SAFEARRAY描述符)也同時(shí)被自動(dòng)建立了。但是只要一調(diào)用::SafeArrayDestroyDescriptor,描述符就被銷毀了。 所以我認(rèn)為::SafeArrayDestroyDescriptor可以根本就不調(diào)用,即使調(diào)用也必須在最后調(diào)用。
(六)ADO編程打開記錄集時(shí)的問題
在打開記錄集時(shí),在調(diào)用Recordset的Open方法時(shí),其最后一個(gè)參數(shù)里一定不能包含adAsyncExecute,否則將因?yàn)槭钱惒讲僮,在讀取數(shù)據(jù)時(shí)無法讀到數(shù)據(jù)。
【ADO編程常見問題及解決辦法】相關(guān)文章:
有關(guān)ADO與ADO.NET的區(qū)別與介紹09-15
Java編程常見問題匯總10-05
CAD字體常見問題解決辦法09-19
vc++中的ADO的應(yīng)用08-22
2017業(yè)余選手網(wǎng)球比賽常見問題與解決辦法08-04
金蝶KIS專業(yè)版固定資產(chǎn)模塊常見問題及解決辦法12-15
鼠標(biāo)失靈的解決辦法09-29
數(shù)控編程的技巧09-10
高級(jí)數(shù)控編程:子程序調(diào)用及編程舉例06-01
CPU功耗過大的解決辦法09-19