【发布时间】:2015-11-21 03:31:38
【问题描述】:
我有一个在 Excel 中用 VBA 编写的旧式业务应用程序。它使用 VBA DAO 库(安装在 c:\program files (x86)\Common Files\Microsoft Shared\DAO\dao360.dll)和类 Workspace、Database、DBEngine、Connection)通过 ODBC 连接到 SQL 数据库。
在 Windows 7 之前它可以正常工作,但在 Windows 8 /Server 2012 上,它在第一次调用 DAO 时不起作用:
Set ws = DBEngine.CreateWorkspace(wsName, "", "", dbUseODBC)
引发运行时错误号 3633 描述 "Cannot load DLL: 'msrdo20.dll'"。这发生在类库的 DBEngine.Errors 和常规 VBA Err 对象中。
无论文件msrdo20.dll是否存在,都会发生此错误。
我发现 https://support.microsoft.com/en-us/kb/260369 它说包括 ODBCDirect,但这似乎不相关。
我发现 http://www.xtremevbtalk.com/archive/index.php/t-172385.html 这建议从引用中删除 Microsoft DAO 3.6 并切换到 DAO 3.5 - 但这样做会更糟,我收到运行时错误 429,“ActiveX 组件无法创建对象”。
这是 Windows Server 2012、Excel 2013。
【问题讨论】:
-
您是否在不同的操作系统上使用相同的架构?你也是通过 Tools->References 加载 dll 还是使用
Declare? -
加载DLL的不是我的代码;它是从 DAO 包 (dao360.dll) 中动态加载的。它似乎是一个需要注册的 COM DLL。
标签: excel vba windows-8 odbc dao