2017-10-20 121 views
0

我正在回收舊數據庫中的代碼。如何在通過網絡複製文件時處理錯誤

對於一個人,位於全國各地的一半,我相信可能有一些連接問題。

Public Function BackUpBackend() 

    Dim Source As String 
    Dim Target As String 
    Dim retval As Integer 

    Source = "\\network\backend\accessfile.accdb" 

    Target = "\\network\backend\backup\" 
    Target = Target & Format(Date, "mm-dd") & "@" 
    Target = Target & Format(Time, "hh-mm") & ".accdb" 

    retval = 0 
    Dim objFSO As Object 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    retval = objFSO.CopyFile(Source, Target, True) 
    Set objFSO = Nothing 

End Function 

有沒有什麼辦法可以檢測這段代碼中的連接錯誤?如果有,連接是否可以重新建立,或只是在問題出現時一起停止備份過程?

+0

如果遠程工作站具有共享驅動器再複製一個大f然後讀回共享驅動器。檢查文件傳輸的速度,並檢查在往返之後是否有損壞...然後在遠程工作站上使用accessfile.accdb在工作站上運行代碼...可能會顯示一些內容 – jsotola

回答

2

在VBA中,你可以做

On Error Resume Next 

將繼續過去的錯誤。這可能是危險的,所以它往往是最好儘快在發生錯誤時處理轉換儘可能與

On Error Goto 0 

您可以自定義處理程序的錯誤,茬了,你要採取具體行動: 從VBA Reference

Sub InitializeMatrix(Var1, Var2, Var3, Var4) 
    On Error GoTo ErrorHandler 
    . . . 
    Exit Sub 
ErrorHandler: 
    . . . 
    Resume Next 
End Sub 

所以,你可能做這樣的事情:(我沒有測試)

Public Function BackUpBackend() 

    Dim Source As String 
    Dim Target As String 
    Dim retval As Integer 


    Source = "\\network\backend\accessfile.accdb" 

    Target = "\\network\backend\backup\" 
    Target = Target & Format(Date, "mm-dd") & "@" 
    Target = Target & Format(Time, "hh-mm") & ".accdb" 

    retval = 0 
    Dim objFSO As Object 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 

    On Error Goto ErrorHandler 
    retval = objFSO.CopyFile(Source, Target, True) 
    Set objFSO = Nothing 
    On Error Goto 0 

    Exit Function 

ErrorHandler: 
    MsgBox("Backup failed. If this happens often contact IT", vbExclamation) 

End Function 
+0

這很棒,我將確認這一點在星期一她回來時有效,因爲我現在沒有辦法複製它。感謝你的幫助!我仍然在努力掌握目前的「錯誤處理」 – Maldred

+0

不客氣。做一些關於錯誤和異常處理的一般性閱讀可能會有所幫助。你也可以故意通過放入一個不好的目標路徑來檢查你的代碼 – Spangen

+0

我想我可以做到這一點,但這會不同於連接損失不是嗎? – Maldred