我有一段代碼可以從表中讀取信息並將其插入帶有主鍵的表中。第一個表是用戶通過許多不同的人進入,二是表我想清理VBA錯誤處理RESUME
爲了讓你發生了什麼僞代碼的想法下面應該幫助
- 記錄被讀入然後陣列
- 記錄被插入到表與來自陣列上的唯一標識符的主鍵
- 如果所述唯一標識符在表中已經存在的錯誤是由數據庫(未Access數據庫)
- 拋出錯誤信息被困在wi中試圖插入的記錄。違規的記錄,現在放入一個錯誤表以後的審查
- 簡歷,其中拋出的錯誤信息
的問題是,該代碼就會恢復在循環的開始而不是在那裏被執行查詢再次在這種情況下,在線路設置RS = cmdSQLData.Execute() 實際上這句話的意思是永遠試圖插入相同的記錄
在我的錯誤處理程序,我遞增環路上的一個記錄,以便它現在試圖插入下一條記錄。不幸的是,不被視爲在下次簡歷
什麼,我想在實踐中環路由1中的錯誤處理程序遞增,然後循環試圖插入下一條記錄
僞代碼
intNumberRows = UBound(myArray, 2) + 1 ' number of records/rows in the array
rowcounter = 0
' Append the Rows of local Table to the temp table
For rowcounter = rowcounter To intNumberRows - 1
' Values X Y Z in this case records contained with the array being looped and inserted
AppendQuery = "INSERT INTO TABLE VALUES(X,Z etc....)
cmdSQLData.CommandText = AppendQuery
cmdSQLData.CommandType = adCmdText
cmdSQLData.CommandTimeout = 60
Set rs = cmdSQLData.Execute()
Next
僞錯誤處理代碼
ErrorHandler:
If (Len(Err.Description) > 0) Then
Debug.Print Err.Description
End If
Debug.Print Err.Number
Debug.Print AppendQuery
' Create Error Table For Upload and resume Inserting of records
If (Err.Number = -2147217900) Then
runfunc = CreateErrorTable(variables)
If runfunc = True Then
rowcounter = rowcounter + 1
Else:
GoTo EndFunction
End If
End If
EndFunction:
cn.Close
Set cn = Nothing
Set rs = Nothing
Set cmdSQLData = Nothing
嗨迪克,非常感謝您的建議,非常感謝。我有一個與代碼中的錯誤處理有關的小問題。恢復下一次執行的時間到底是什麼時候?它是否搭乘ErrorHandler? –
當程序到達該行時(或者我沒有得到該問題),執行'On Error Resume Next'行。 '在錯誤恢復下一步「*是錯誤處理程序。 「繼續下一步」後遇到的任何錯誤都將被忽略。然後,一旦到達「GoTo ErrorHandler」,任何錯誤都將被重定向到ErrorHandler標籤。基本上有三種類型的錯誤處理:GoTo Label,Resume Next和Go to 0。最後一個關閉錯誤處理,任何錯誤都會暫停程序執行。 –
嗨迪克...我已經添加了代碼恢復似乎取代GoTo ErrorHandler,所以當我得到第二個ID是相同的恢復,但它完全忽略瞭如果Err.Number = -2147217900代碼段。我debug.print和錯誤代碼和數字是正確的,只是沒有被拾起If語句 –