2015-04-01 154 views
0

我寫了一個用於將數據插入到mysql-DB中的vba代碼,並且爲了節省時間我認爲只需要一個連接到數據庫就可以執行多個「插入」,但我很擔心關於插入命令中的可能錯誤,以便在發生錯誤時,我希望一次執行一次查詢。excel-vba嵌套錯誤處理

這使得可以執行命令沒有錯誤,但是,如果有錯誤,它會再次,我需要處理它。

要做到這一點,我認爲下面的代碼,但尋找類似的東西,我沒有找到任何東西......也許這是一個壞主意?有一個更好的方法嗎?

這是我的想法:

For i = 1 To 100 
    '...do something 

    'First error handling activation 
    On Error GoTo ErrHandle1 

    'Reset SQL String 
    SQLStr = "" 

    'Loop for making SQL string for multiple INSERT 
    For ii = 1 To 50 
     '...example instructions: 
     SQLStr = SQLStr & "INSERT INTO myTab (myField) VALUES ('" & ii/i & "'); " 
    Next ii 
    'Execute all insert at one time 
    rs.Open SQLStr, Cn, adOpenStatic 

GoNext: 
On Error GoTo 0 
Next i 

Exit Sub 

'primary error handling 
ErrHandle1: 
'No instrutions here 
'I use resume only to reset error 
Resume Handle1 
Handle1: 

'I try again INSERT loop with a connection to DB for every query 
'Second error handling activation 
On Error GoTo ErrHandle2 
For ii = 1 To 50 
    'String for only one INSERT 
    SQLStr = "INSERT INTO myTab (myField) VALUES ('" & ii/i & "'); " 
    'Single query execution 
    rs.Open SQLStr, Cn, adOpenStatic 
Next ii 
'Back to base code 
GoTo GoNext 

'secondary error handling 
ErrHandle2: 
MsgBox Err & " - " & Error(Err) 
Resume Next 

回答

1

我建議放置在錯誤的水平錯誤處理例程(與正常過程的如果假分離器)。避免轉到0萬一發生基本錯誤,它只會耗盡資源。

On Error GoTo ErrHandleri 
For i = 1 To 100 
'...do something 
    For ii =1 To 50 
    On Error GoTo ErrHandlerii 
     'do other thing 
    If False Then 
Errhandlerii: 
    'do error handling stuff 
    End If 
    Next ii 
If False Then 
ErrHandleri: 
'code, e.g. paint the whole line blue 
End If 
Next i 
+0

對不起,但這段代碼沒有做我想做的事:在替代循環中的錯誤沒有處理 – genespos 2015-04-01 14:34:55