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

时间:2011-05-31 17:02:01

标签: ms-access ms-access-2007

我有一个Access ADP文件。我将后端数据库升级为指向SQL 2005服务器而不是SQL 2000服务器,并相应地更改了数据库连接信息。该文件在我自己的系统上运行完全正常,运行Windows 7(64位)和Access 2007.在运行Windows XP和Access 2007的目标系统上,数据库的主要功能几乎立即爆发,出现“运行时错误” '13':输入不匹配“错误。

起初我以为我遇到了与in this question over here描述的问题相同的问题,其中连接的默认定义是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

任何人都可以对这个问题有所了解吗?现在我很难过。

5 个答案:

答案 0 :(得分:6)

这是我最终发现的似乎相关的内容:

在64位Windows 7 Pro上,Microsoft MDAC组件检查器工具告诉我,我正在运行MDAC版本“UNKNOWN”,文件版本为6.1.7600.16385或6.1.7601.17514(通过奇怪的巧合匹配)与Windows版本号密切相关)。另一方面,在32位Windows XP上,Component Checker说我正在运行版本“MDAC 2.8 SP1 ON WINDOWS XP SP3”,文件版本为2.81.1132.0或2.81.3012.0,看起来像是正确的MDAC版本号。

如果我在XP上更改“损坏”代码并因此强制重新编译,则产生运行时错误的完全相同的代码(上面提到的类型不匹配13错误或运行时错误) 430)将开始工作(并在我将其复制到其他XP盒或我的Windows 7盒子时继续工作)。如果我更改了我的Windows 7框中的代码并将其重新分发到XP框,它会中断,尽管引用列表中的每个引用都具有相同的名称,并且指向相同磁盘位置中的相同文件。

编辑: 显然这个版本编号是由于Windows Vista / 7使用“WDAC”而不是“MDAC”,并且在低级操作系统上运行时在Win7 SP1上编译的代码的特定问题是已知问题,在support.microsoft.com kb article 2517589引用在this post on technet。切换到后期绑定,在下层系统上安装KB修复程序,或在“反向兼容”版本的ADO中进行链接是建议的修复。

编辑2: 我现在解决的问题是继续在我的Win7SP1盒子上进行所有开发工作(使用早期绑定),然后在将其部署到我的用户之前在WinXP盒上重新编译整个应用程序。

答案 1 :(得分:1)

最好只完成ADO Connection对象并以这种方式连接到SQL Server。设置连接对象的ConnectionString属性并将其打开。不要打扰使用CurrentProject.Connection。在这种情况下,您要做的就是为已存在的连接声明连接。只需完全声明ADO连接并使用它,因为它将使用ADO从VB或C ++应用程序中使用。

答案 2 :(得分:0)

您是否在工具中声明了相应的Micorsoft ActiveX数据对象库?在写下“ADODB。”时,您是否在代码编辑器中获得了任何弹出窗口,并且组合框中列出了所有ADODB方法,对象和属性?

在您发表评论之后,问题是db期望ADODB.connection对象而currentProject.connection来自另一个对象类型!真的很奇怪,不是吗?

请您使用typeOf\typeName命令进行一些调试,并检查currentProject.connection的确切性质。在我的测试中,我在调试窗口中得到以下结果:

? typeOf currentproject.Connection is ADODB.Connection
True

? typeName(currentproject.Connection)
Connection

这是合乎逻辑的,我没有得到你的错误......

答案 3 :(得分:0)

尝试更换:

rst.open sql, db, adopenkeyset, adlockoptimistic

使用:

rst.open sql, currentproject.connection, adopenkeyset,adlockoptimistic

答案 4 :(得分:0)

在VBA编辑器中,转到“工具” - “首选项”,然后禁用“MS ActiveX Data Objects 2.8 Library”,然后启用“MS ActiveX Data Objects 2.7 Library”。对我来说,至少是工作。