1,故障現象
本人編譯的英文版程序在本機上運行OK,換台電腦運行,發現啟動時連接數據庫出錯。
錯誤信息如下:
---------------------------
Error start database
---------------------------
database testing error, error description as
Class does not support Automation or does not support expected interface
2,問題分析
https://blog.csdn.net/woolnil/article/details/7980534
https://blog.csdn.net/chaoguodong/article/details/38442527
http://www.bkill.com/download/175356.html
以上文章,特別是最后一篇,指出,
- 在Windows 7和早期版本的Windows中,_Connection IID是00000550-0000-0010-8000-00AA006D2EA4。
- 在Windows 7 SP1中,_Connection IID是00001550-0000-0010-8000-00AA006D2EA4,並且_Connection_Deprecated的IID是00000550-0000-0010-8000-00AA006D2EA4。
如果您的應用程序使用_Connection的早期綁定,則在編譯期間新的IID將存儲在應用程序二進制文件中。當應用程序在下層操作系統上運行時,這會導致錯誤,因為IID不存在。
一些ADO API在ADO 2.7和更高版本中依賴於平台。在64位版本的Windows上,這些ADO API通過使用64位數據類型(例如LONGLONG數據類型)來處理參數。但是,使用這些API的應用程序仍使用LONG數據類型。因此,當您嘗試運行宏時收到“類型不匹配”錯誤消息。
在本人電腦中查詢,結果符合第2條。
在故障電腦中查詢,結果符合第1條。
注冊項“00001550-0000-0010-8000-00AA006D2EA4”不存在
ADO注冊項值為“00000550-0000-0010-8000-00AA006D2EA4”,與win7 SP1不一致。
3,解決方案
https://blog.csdn.net/woolnil/article/details/7980534
上文給出的解決辦法有:
1、所有客戶端安裝KB983246補丁!
2、卸載Win7 的 SP1補丁包
3、替換Win7的C:\Program Files\Common Files\System\ado下的對應ado組件為XP SP3下的對應文件。
為簡單起見,采取方案3.
如上圖,在開發環境打開工程,查看引用文件。發現工程使用了ADO2.8控件,文件位於C:\Program Files (x86)\Common Files\System\ado\msado28.tlb
將原來的msado28.tlb改名為msado28-new.tlb
然后將舊版XP的msado28.tlb復制到ado目錄。
打開VB開發環境:
è 重新添加一遍ADO控件。作用是更新IID接口。
è 重新編譯程序。
注意:Win7的ado文件夾要先設置權限,否則其中的文件無法更改。
4,測試
在本機運行,正常。
在目標電腦運行,正常。
5,總結
本問題牽涉到操作系統版本、SP補丁、KB補丁、32位/64位系統等諸多因素。
編譯環境應配置為兼容最低配置,即要兼容目標環境為XP系統、32位、無補丁包。否則,可能出現系統組件的調用故障。