ADOの方が早い

何の話かと言うと、ACCESSのテーブルにレコードを追加する処理速度をSQLと比較した場合の事なんです。

前回作成したSQLをコレクションに入れて複数処理する自作関数を使用して2~3件のデータで追加処理のテストをしていたのですが、開始から終了までどうも一呼吸入る感じがして気になってたんです。

で、調べたらADOでAddNewメソッドが速いらしい。

試しに実装してみたらこちらの方が体感で格段に速く感じるんですね。

なので、AddNewを使用した方の自作関数に替えました。

何事も方法は1つじゃないって事ですね。 ^^

以下はその自作関数。

 

Function CompletionProcess(ByVal ws As Worksheet, ByVal tableName As String) As Boolean
    Dim i As Long
    
    DataBaseConnect
    
    On Error GoTo errorHandler
    
    Set adoRs = New ADODB.Recordset
    
    adoRs.Open tableName, adoCn, adOpenKeyset, adLockOptimistic
    
    adoCn.BeginTrans
    
    For i = 2 To ws.Cells(Rows.Count, "A").End(xlUp).Row
        If ws.Cells(i, "M").Value = 1 Then
            adoRs.AddNew Array(ws.Cells(1, "A").Value, ws.Cells(1, "B").Value, ws.Cells(1, "D").Value, _
                                ws.Cells(1, "F").Value, ws.Cells(1, "M").Value), _
                        Array(ws.Cells(i, "A").Value, ws.Cells(i, "B").Value, ws.Cells(i, "D").Value, _
                                ws.Cells(i, "F").Value, ws.Cells(i, "M").Value)
            
            adoRs.Update
        End If
    Next i
    
    adoCn.CommitTrans
    
    CompletionProcess = True
    DataBaseOut
    Exit Function
    
errorHandler:
    adoCn.RollbackTrans
    DataBaseOut
    CompletionProcess = False
    ErrorDisplay
End Function