2011-03-29 52 views
4

我正在嘗試移動網絡服務器。我們的應用程序(善良)在1998年寫回(我認爲)在VB6中。我已經在我們的新服務器上工作了(Windows Server 2008 R2 64位)。但是,當我在我的機器上獲取源代碼(Windows 7 64位)並將該exe文件傳輸到服務器時,應用程序在嘗試連接到具有以下錯誤的數據庫時崩潰:「Error 430(Class does not support自動化或不支持預期的接口)「VB6應用程序在重新編譯後無法在Server 2008上運行

該項目引用Microsoft Activex數據對象2.8庫。錯誤是

Set conn = New adodb.Connection 

所以,它並不是實際嘗試連接到數據庫,而是試圖創建對象時純粹爆炸。

任何人都有這種錯誤的經驗嗎?或者對我有什麼建議?谷歌有幾種可能性,但沒有一種可能。他們大多數都與公共控制和使用「項目兼容性」 - 但我的應用程序運行「無人蔘與執行」,所以我不能選擇(它在項目屬性中完全禁用)。

+0

您是否嘗試製作崩潰的最小項目示例?你如何聲明'conn'? – MicSim 2011-03-29 06:33:59

+0

對不起MicSim - 今晚我回家時我會試試這個(我的9-5工作不是問題,所以代碼只在我的家用機器上)。但我相對肯定conn被聲明爲Dim conn ADODB.Connection(早期綁定,不遲到,今晚我會嘗試晚期綁定)。 – 2011-03-29 14:21:18

+0

延遲綁定確實解決了這個問題。就編碼而言,它並不是最優的,但是,嘿,至少它是有效的。 – 2011-04-01 15:36:16

回答

4

這是一個突破了Microsoft在SP1中引入的MDAC更改。看看這個MSDN Forum Thread。它提供了一些關於解決方法的建議。到目前爲止,微軟還沒有修復。

我在32位Windows 7上遇到了這個問題,最終回滾了SP1。

其中一個建議是從一個未服務包裝機更換更新(破)MDAC一個DLL:

  1. 打開註冊表編輯器,找到關鍵HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C}

  2. 點擊右鍵,權限,高級,所有者,所有者更改爲管理員,點擊OK,OK

  3. 運行C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12 -u "%CommonProgramFiles(x86)%\system\ado\msado28.tlb"

  4. 從Win7 RTM/Win2008R2 RTM複製msado28.tlb到本地機器,請注意下一步的文件夾。

  5. 運行C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12 "{path}\msado28.tlb"

這些步驟是對64位的窗口。對於路徑調整應該是32位的。

+0

謝謝你。我在昨天的研究中沒有遇到那個線索。今晚我會試試這些建議。 – 2011-03-29 14:21:58

+0

我確實嘗試過這種解決方案,要麼我做得不對,要麼不適用於我的特定問題。但是,該文章確實提到了後期綁定,並且DID解決了我的問題,所以非常感謝您的鏈接。 – 2011-04-01 15:36:55

相關問題