Access 2007升级DAO引用冲突

时间:2010-07-21 17:21:23

标签: ms-access ms-access-2007 ado access-vba dao

我正在将具有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。任何建议都会非常感激。

1 个答案:

答案 0 :(得分:0)

  

如果您在A2007中运行,则需要使用ADE参考(其中   只是DAO的下一个版本 - 看看你的DLL名称   不相信它。如果你仍然遇到编译错误   检查,然后这意味着它没有注册(你可以   使用regsvr32手动注册它,或者您有不同的参考   问题。请张贴您的参考列表。我的赌注是几个   他们完全没必要。此外,如果你正在运行多个   Access的版本,你需要让每个人完成注册   (即安装)在打开任何文件之前。

- David-W-Fenton 2010年8月5日20:13