"Class does not support Automation or does not support expected interface"數據庫連接錯誤問題分析與解決


 

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

 

以上文章,特別是最后一篇,指出,

  1. 在Windows 7和早期版本的Windows中,_Connection IID是00000550-0000-0010-8000-00AA006D2EA4。
  2. 在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位、無補丁包。否則,可能出現系統組件的調用故障。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM