隨便幾句

看見別人都些Blog,從中吸取了許多有用的東東,自己也想寫點,一是可以記錄一些或許有價值的東西,另一方面遇到問題也可以發出來,讓網上的衆多高手幫忙解決。

今天將做的系統拿到企業實施,首先是小範圍的,遇到的問題也不少,設置了主機,安裝了數據庫,將開發的系統安裝到客戶端,第一個就出現了問題,還好後面的沒有問題,要不然真要Game Over了,查了一下,程序在XP下運行沒問題,但在2000客戶機上運行就出現程序中斷的問題。上網查,終於搜到相同的症狀,原來是這樣的:

//////////////////////////////////////////////////////////////////////////////////////////

現象: 在開發機器上編譯如下代碼: #pragma warning(push)           // Needs to be done in order to suppress warning message #pragma warning(disable:4146)   // caused by bug in ADO (MS Knowledge Base article Q253317) #import "C:/Program Files/Common Files/system/ado/msado15.dll" /   no_namespace rename("EOF","adoEOF") #pragma warning(pop) ..... _CommandPtr pCmd = NULL; HRESULT hr = pCmd.CreateInstance("ADODB.Command"); 但是在客戶的一臺正常的Windows2000上卻發生錯誤: Command指針創建失敗,錯誤號:0x80004002,錯誤描述:沒有此接口。 ·原因: 我們的開發機器上一般都裝有MDAC2.7,這可能是因爲裝了SQL Server,也可能是WinXP自帶的。 而客戶機器上只有MDAC2.5。 由於微軟的ADO開發小組習慣上總把ADO的最新版本命名爲默認接口,如ADO2.5時將_Command25命名爲_Command。 這樣當你在MDAC2.7下編譯VC代碼,綁定的_Command的InterfaceID可能就是_Command2.7的接口ID。而在客戶的MDAC2.5環境中 ,可能不存在這個接口ID,它的_Command的接口ID還是2.5的,和你的機器上的_Command接口ID肯定不一樣。 所以以VC的方式創建_CommandPtr指針,是無法創建出來的。但是由於VB並不是綁定InterfaceID,所以VB中還可以正常創建ADO接口指針。 ·解決方法: 第一種:只在MDAC2.5環境下編譯,併發布到MDAC2.5以上的客戶環境中,但是WindXP就沒有辦法了; 第二種:強迫客戶環境升級MDAC; 第三種:在MDAC2.7環境下編譯,但是我們只明確表示創建Command25指針,如下所示: ADODB::Command25Ptr pCmdChange  = NULL; HRESULT hResult = pCmdChange.CreateInstance(__uuidof(ADODB::Command)); 第四種:選擇使用OLEDB;

///////////////////////////////////////////////////////////////////////////

看了上面的一砣,知道了原因,但是解決起來覺得麻煩呀!

還好,小李子找到了更好的解決辦法:

將原來的#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF") 改成#import "c:/program files/common files/system/ado/msado20.tlb" no_namespace rename("EOF","adoEOF")

問題解決了 哈哈 。。。。

發佈了24 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章