MS Access数据库VBA后端检查使项目停止

时间:2016-02-17 05:51:54

标签: vba ms-access

我正在尝试查找后端数据库是否正确定位 在我运行我的代码之后,如果它返回错误,一切都很好,但是当它返回时没有错误因此它会使整个应用程序停止。 以下是我的VBA代码:

Function CheckLinkedDb()
cDBPath = Application.CurrentProject.Path
Set db = CurrentDb
Dim Relink_Tables
Dim rsCheckLink As Recordset
Relink_Tables = False
For Each tdf In db.TableDefs
      If Len(tdf.Connect) > 0 Then
        ''Linked table - test link is current
            DoCmd.SetWarnings False
            On Error Resume Next 'Do not stop script on error
            Set rsCheckLink = db.OpenRecordset(tdf.Name) ' OPEN TABLE
            DoCmd.Echo False, "Checking link for table " & tdf.Name
            DoCmd.SetWarnings True
            If Err Then ' COULD NOT OPEN TABLE
                Relink_Tables = True
                'GoTo Relink_Tables ' RECONNECT TO APPROPIATE DATABASE
            Else
                rsCheckLink.Close ' CLOSE TABLE THAT DID OPEN
                Set rsCheckLink = Nothing
        End If
    End If
Next

If Relink_Tables = True Then
    goto RelinkT....
End Function

1 个答案:

答案 0 :(得分:0)

我没有看到任何明显错误的东西,也不确定是什么"它使整个应用程序停止了#34;意味着 - 无限循环?

您应该删除DoCmd.SetWarnings False / True语句,不需要它们。

使用On Error Resume Next在可能的错误行之后立即检查错误是一个好习惯。并且:始终尽快重置它,不运行多个代码行而不进行错误处理。

所以你的代码应该是:

For Each tdf In db.TableDefs
     If Len(tdf.Connect) > 0 Then
        ''Linked table - test link is current
            DoCmd.Echo False, "Checking link for table " & tdf.Name
            On Error Resume Next 'Do not stop script on error
            Set rsCheckLink = db.OpenRecordset(tdf.Name) ' OPEN TABLE
            If Err.Number <> 0 Then ' COULD NOT OPEN TABLE
                On Error Goto 0
                Relink_Tables = True
                'GoTo Relink_Tables ' RECONNECT TO APPROPIATE DATABASE
            Else
                On Error Goto 0
                rsCheckLink.Close ' CLOSE TABLE THAT DID OPEN
                Set rsCheckLink = Nothing
            End If
    End If
Next

如果问题仍然存在,请使用:How to debug VBA code