遍历Access数据库QueryDefs时Word / Excel崩溃

问题描述

我在Word中有一个VBA过程,用于检查Access数据库中是否存在QueryDef。直到几天前,它开始崩溃,Word才能正常工作。

问题似乎是此行:For Each qdf In db.QueryDefs。这是Word挂起然后崩溃的行。我不认为这是我的代码,因为我在一个新的Word文档中创建了一个非常基本的测试过程,该过程只是一个没有内容的循环(请参见下文),并创建了一个新的Access数据库,但是它仍然崩溃。

当我获得锁定的数据库文件时,成功建立了到数据库的连接。并且此代码将成功执行并打印到立即窗口:Debug.Print db.QueryDefs.Count

我还用Excel中的空循环测试了此基本过程,它也在那里崩溃了。我还更新了Office(我在Office 365,Office的桌面版本上)。有什么我想念的吗?

Reference to: Microsoft Office 16.0 Access Database Engine Object Library

Option Explicit


Sub test()

    Dim qdf As DAO.QueryDef
    Dim db  As DAO.Database

    Set db = OpenDatabase("DatabasePathAndFileName")  

    Debug.Print db.QueryDefs.Count

    For Each qdf In db.QueryDefs

    Next qdf

End Sub

解决方法

在逐步浏览代码时按F9键,然后发回确切错误。另外,您最近重启了机器吗?我已经看到CTRL-Breaks随着时间的流逝而累积,并引起各种怪异,但是重新启动通常可以解决所有问题。最后,自上次工作以来发生了什么变化?

尝试一下。会发生什么?

Public Sub ExecParameterQuery()

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef

    Set dbs = CurrentDb
    Set qdf = dbs.QueryDefs("myActionQuery")

    'Set the value of the QueryDef's parameter
    qdf.Parameters("Organization").Value = "Microsoft"

    'Execute the query
    qdf.Execute dbFailOnError

    'Clean up
    qdf.Close
    Set qdf = Nothing
    Set dbs = Nothing

End Sub
,

尝试逐步浏览集合以查看是否是引起问题的特定查询:

Sub Test()

    Dim qdf As DAO.QueryDef
    Dim db  As DAO.Database

    Set db = OpenDatabase("DatabasePathAndFileName") 

    If db.QueryDefs.Count > 0 Then 
        For Each qdf In db.QueryDefs
            MsgBox qdf.Name
        Next qdf
    End If

End Sub