2016-02-17 48 views
0

我試圖查找如果後端數據庫位於正確 後,我跑我的代碼,如果它與返回錯誤,一切都很好,但是當涉及沒有錯誤返回,因此它使整個應用程序停止。 以下是我的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 
+0

你有'DoCmd.Echo TRUE'某處後面的代碼? – HansUp

回答

0

我看不出有什麼明顯的錯誤,也不能確定什麼是「它使整個應用程序停止」的意思 - 一個無限循環?

您應該刪除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

+0

謝謝,一切工作正常,唯一的問題是,DB檢查後,我有'DoCmd.OpenForm「MyMainForm」'這是忽略,(如果該文件是通過雙擊打開)的命令,只有當我關閉DB從Access的主菜單中,然後從「最近的文件列表」重新打開它,那麼它會正常工作,爲什麼? –

+0

@EH:請爲此提出一個新問題。 ---如果這個問題被回答,請[接受](http://stackoverflow.com/help/someone-answers)答案,所以問題被標記爲解決。 – Andre