【问题标题】:Access 2007 upgrade DAO references conflictAccess 2007 升级 DAO 引用冲突
【发布时间】:2011-03-19 03:17:39
【问题描述】:

我正在将带有 VBA 代码的 Access 97 DB 更新为 Access 2007。当我转换 db 文件(首先从 97 到 2002,然后到 2007)时,VBA 代码使用 Access 2007 引用的 DAO 对象。我的问题特别是两个参考:“Microsoft DAO 3.6 对象库”和“Microsoft Office 12.0 Access 数据库引擎对象库”。我在网上读到的东西说 ADE 12.0 应该取代 DAO 3.6 参考,并且只需选中 ADE 12.0 框,一切都应该工作。由于它们都为同名对象提供引用,因此不能同时检查这两个引用。但是,检查DAO 3.6框时,并使ADE 12.0盒子未选中,访问无法找到存在的“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 错误对象。我也无法在 VB 编辑器中找到解决此引用错误的另一个引用,但也不与其他 ADE 12.0 引用冲突。所以,我不明白为什么选中 ADE 12.0 框并不能解决我的所有问题。而且我在弄清楚如何重写代码以便它引用 ADE 12.0 库时遇到了麻烦。最后,ADE 12.0 引用实际上指向以下文件夹中的 ACEDAO.DLL:C:\Program Files\Common Files\Microsoft Shared\OFFICE12。任何建议将不胜感激。

【问题讨论】:

  • 如果您在 A2007 中运行,则需要使用 ADE 引用(这只是 DAO 的下一个版本——如果您不相信,请查看 DLL 名称)。如果在检查时仍然出现编译错误,那么这意味着它没有注册(您可以使用 regsvr32 手动注册)或者您有不同的参考问题。请张贴您的参考清单。我敢打赌,其中几个是完全没有必要的。此外,如果您正在运行多个版本的 Access,则需要让每个版本都完成注册(即安装),然后再打开任何文件。
  • 如果您只检查 ADE 12.0,您的代码是否可以正确编译?
  • @David-W-Fenton 你到底为什么不把它放在答案而不是评论中?!
  • 因为它基本上是一个澄清请求,而不是一个实际的答案。
  • 这段代码没有问题,这只是 Access 的不良行为。这不是我第一次看到 Access 给出幻像编译器错误,因为它对代码中不相关部分的某些内容不满意。我希望您按小时计费!

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多