2011-03-29 77 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

相关问题