3

我有一个使用 VBA 用 MS ACCESS 2007 编写的应用程序,连接到后端的 SQL Server。Access 和 SQL Server 都在本地运行。我的机器运行 Access 2010 和 MS SQL Server Express 2008 R2(都是 32 位,在 WinXP 上)没有问题。

我有另一台机器,Win7 64 位,运行 Access 2010 和 SQL Server 2008(不是 R2)64 位。

当我在 64 位机器上运行 Access 应用程序时,我有一个下拉框来选择保存各种数据库的 SQL Server。当我选择服务器时,几秒钟后我收到一个错误:

运行时错误“-2147024703 (800700c1)”:

自动化错误 %1 不是有效的 Win32 应用程序。

当我选择调试选项时,黄色箭头指向: Set oServer = New SQLDMO.SQLServer

下一行是: oServer.Connect ServerName, strSQLUser, strSQLPwd

在监视列表中,我可以看到ServerNamestrSQLUser和 strSQLPwd 拥有访问 SQL Server 的正确值。我已经在 sqlcmd 中测试了这些,并且成功地能够查询表。

谁能帮我解决这个问题?我不确定下一步该怎么做。

4

2 回答 2

0

好像您已经在系统上注册了一个 32 位 SQLDMO,用于连接到 64 位实例。检查您的注册表/文件系统中的 SQLDMO.dll 版本并注册正确的版本。

还要检查 MSDN“安装 SQL-DMO ”,因为 SQLDMO 计划在 SQL Server 2008 R2 之后删除:

避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

SQL Server 数据库管理对象 (SQL-DMO) 已从 SQL Server 2008 R2 Express 和 SQL Server 2008 R2 功能包中删除。SQL-DMO 也不支持 SQL Server 2000 之后引入的数据库引擎功能。我们建议您尽快修改当前使用此功能的应用程序。如果您必须支持 SQL-DMO,请从 Microsoft 下载中心安装 SQL Server 2008 功能包中的向后兼容性组件。不要在新的开发工作中使用 SQL-DMO;请改用 SQL Server 管理对象 (SMO)。您可以通过安装 SQL Server 2008 R2 联机丛书来获取 SMO 文档。

于 2012-07-30T08:53:44.013 回答
0

谢谢你。

我寻找 SQLDMO.DLL 64 位版本,但虽然使用 x64 的向后可比性包,但使用 MSI 安装并没有完成这项工作。

我必须手动提取文件并放置正确的版本(比 x86 版本大约 2MB,以指示知道哪个是 x64),然后在命令行中运行“regsvr32 sqldmo.dll”(非常重要:需要以管理员身份运行 cmd 才能成功)。

模块注册后,我的 Access 前端运行良好。

于 2012-08-01T00:15:23.997 回答