Access 2007:打开ADO连接时类型不匹配

| 我有一个Access ADP文件。我升级了后端数据库,使其指向SQL 2005服务器而不是SQL 2000服务器,并适当地更改了数据库连接信息。该文件在运行Windows 7(64位)和Access 2007的我自己的系统上运行得非常好。在运行Windows XP和Access 2007的目标系统上,数据库的主要功能几乎立即被“运行时”炸毁。错误\ '13 \':类型不匹配\“错误。 起初,我以为我遇到了与该问题相同的问题,其中连接的默认定义是DAO,但数据库使用的是ADO对象。但是,在查看代码时,连接的每个实例都特别声明为\“ ADODB.Connection \”。 有问题的导致错误的代码是这样的:
Public Sub Tools()
dim db as ADODB.Connection
dim sql as String

sql = \"Select SSPatch from tblPlastech\"
set db = CurrentProject.Connection           \' THIS LINE CAUSES THE TYPE MISMATCH ERROR
dim rst as ADODB.RecordSet
set rst = New ADODB.RecordSet

rst.open sql, db, adOpenKeyset, adLockOptimistic
gsSSpath = rst!sspath
QUOTES = Chr(34)
rst.Close
set rst = Nothing
db.Close
set db = Nothing

End Sub
谁能在这个问题上阐明一点?现在我很困惑。     
已邀请:
        这是我最终发现似乎相关的内容: 在64位Windows 7 Pro上,Microsoft MDAC Component Checker工具告诉我我正在运行MDAC版本\“ UNKNOWN \”,文件版本为6.1.7600.16385或6.1.7601.17514(这很奇怪,巧合与Windows版本号紧密相关)。另一方面,在32位Windows XP上,Component Checker表示我正在运行版本“ Windows XP SP3上的MDAC 2.8 SP1”,文件版本为2.81.1132.0或2.81.3012.0,看起来像是正确的MDAC。版本号。 如果我在XP上时更改了“ broken”代码,从而强制重新编译,则产生运行时错误的代码完全相同(上述类型不匹配13错误或运行时错误) 430)将开始工作(并在我将其复制到其他XP盒或Windows 7盒时继续工作)。如果我更改Windows 7框上的代码并将其重新分配给XP框,则尽管引用列表中的每个引用都具有相同的名称,但它仍会中断,并且指向同一磁盘位置中的同一文件。 编辑: 显然,此版本编号是由于Windows Vista / 7使用\“ WDAC \”而不是\“ MDAC \”,并且在下层OS上运行时,Win7 SP1上编译的代码的特定问题是一个已知问题,请参阅支持.microsoft.com知识库文章2517589,以及Technet上的此帖子。建议的修补程序是切换到后期绑定,在下层系统上安装KB修补程序或链接到“向后兼容”版本的ADO。 编辑2: 我现在确定的解决方法是继续在Win7SP1框上进行所有开发工作(带有早期绑定),然后在WinXP框上重新编译整个应用程序,然后再将其部署到我的用户上。     
        您最好只完成ADO Connection对象并以这种方式连接到SQL Server。设置连接对象的ConnectionString属性并打开它。不要打扰使用CurrentProject.Connection。在这种情况下,您要做的就是为一个已经存在的连接声明一个连接。只需完全声明ADO连接并使用它即可,就像使用ADO的VB或C ++应用程序所使用的那样。     
        您的工具中是否声明了相应的Micorsoft ActiveX数据对象库?写下\'ADODB。\'时,在代码编辑器中是否出现任何弹出窗口,并且组合框中列出了所有ADODB方法,对象和属性? 发表您的评论之后,问题就出在db期待一个ADODB.connection对象,而currentProject.connection来自另一个对象类型!真的很奇怪,不是吗? 您能否使用typeOf \\ typeName命令进行一些调试,并检查currentProject.connection的确切性质。在测试中,我在调试窗口中得到以下结果:
? typeOf currentproject.Connection is ADODB.Connection
True

? typeName(currentproject.Connection)
Connection
这是合乎逻辑的,并且我没有收到您的错误....     
        尝试更换:
rst.open sql, db, adopenkeyset, adlockoptimistic
与:
rst.open sql, currentproject.connection, adopenkeyset,adlockoptimistic
?     
        在VBA编辑器中,转到“工具-首选项”,然后禁用“ MS ActiveX数据对象2.8库”,然后启用“ MS ActiveX数据对象2.7库”工作。至少对我来说工作。     

要回复问题请先登录注册