我有一个使用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应用程序。
当我选择Debug选项时,黄色箭头指向:
Set oServer = New SQLDMO.SQLServer
下一行是:
oServer.Connect ServerName, strSQLUser, strSQLPwd
在监视列表中,我可以看到ServerName
,strSQLUser
和strSQLPwd拥有正确的值来访问SQL Server。我已经在sqlcmd中测试了这些并且成功地能够查询表。
任何人都可以帮我解决这个问题吗?我不知道下一步该做什么。
答案 0 :(得分:0)
好像您已经在系统上注册了一个32位SQLDMO,用于连接到64位实例。检查您的注册表/文件系统中的SQLDMO.dll版本并注册正确的版本。
同时检查MSDN“Installing 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 Feature Pack中的向后兼容性组件。不要在新的开发工作中使用SQL-DMO;请改用SQL Server管理对象(SMO)。您可以通过安装SQL Server 2008 R2联机丛书来获取SMO文档。
答案 1 :(得分:0)
谢谢你。
我希望找到SQLDMO.DLL 64位版本,但是虽然使用了针对x64的Backwards Comparability包,但使用MSI进行安装并不能完成这项工作。
我不得不手动提取文件并放置正确的版本(比x86版本大约2MB,以表明知道哪一个是x64),然后运行' regsvr32 sqldmo.dll&#39 ;在命令行中(非常重要:需要以管理员身份运行cmd才能成功)。
模块注册后,我的Access前端运行良好。