我正在将具有VBA代码的Access 97 DB更新到Access 2007.当我转换db文件时,VBA代码使用Access 2007引用的DAO对象(首先是97到2002,然后是2007)。我的问题具体是两个引用:“Microsoft DAO 3.6对象库”和“Microsoft Office 12.0 Access数据库引擎对象库”。我在网上看到的东西说ADE 12.0应该取代DAO 3.6参考,只需检查ADE 12.0盒就可以了。由于它们都为同名对象提供引用,因此无法同时检查这两个引用。但是,当检查DAO 3.6框并且未选中ADE 12.0框时,Access无法找到存在的“frmLogin”表单。如果我取消选中DAO 3.6框并检查ADE 12.0框,我得到一个运行时错误13:“类型不匹配”的Visual Basic“Err”对象:
Public Function basGetString(ByVal lngStringID As Long, ParamArray varStringArgs() _
As Variant) As String
Dim intTokenCount As Integer
Dim strResString As String
On Error GoTo err_basGetString
strResString = basLoadString(lngStringID)
If Not IsMissing(varStringArgs) Then
intTokenCount = 0
Do While intTokenCount <= UBound(varStringArgs)
strResString = basReplaceToken(strResString, _
m_cstrArgToken, varStringArgs (LBound(varStringArgs) + intTokenCount),_
1, 1)
intTokenCount = intTokenCount + 1
Loop
End If
strResString = basReplaceToken(strResString, m_cstrVBCRLFToken, vbCrLf, -1, 1)
basGetString = strResString
exit_basGetString:
Exit Function
err_basGetString:
Err.Raise Err.Number, "basGetString", Err.Description
End Function
调试器指向倒数第二行:
Err.Raise Err.Number, "basGetString", Err.Description
我成功消除了记录集对象的歧义,它解决了代码中的许多其他引用冲突:Dim rs As DAO.Recordset or Dim rs As ADODB.Recordset
,但这对Err对象无效。 - 也就是说,我试图将Err对象重写为DAO Error对象。我也无法在VB编辑器中找到解决此引用错误的另一个引用,但也不会与其他ADE 12.0引用冲突。所以,我不明白为什么检查ADE 12.0框并不能解决我的所有问题。而且我无法弄清楚如何重写代码,以便它引用ADE 12.0库。最后,ADE 12.0引用实际上指向以下文件夹中的ACEDAO.DLL:C:\ Program Files \ Common Files \ Microsoft Shared \ OFFICE12。任何建议都会非常感激。
答案 0 :(得分:0)
如果您在A2007中运行,则需要使用ADE参考(其中 只是DAO的下一个版本 - 看看你的DLL名称 不相信它。如果你仍然遇到编译错误 检查,然后这意味着它没有注册(你可以 使用regsvr32手动注册它,或者您有不同的参考 问题。请张贴您的参考列表。我的赌注是几个 他们完全没必要。此外,如果你正在运行多个 Access的版本,你需要让每个人完成注册 (即安装)在打开任何文件之前。
- David-W-Fenton 2010年8月5日20:13