2

現在、Excel スプレッドシートの各行をループ処理し、挿入クエリを使用して各行を Access テーブルに挿入しています。動作しますが、遅いです。一度にすべてのレコードを追加する 1 つのクエリを作成するにはどうすればよいですか?

これは私の現在のコードです

Sub Insert()

Dim rs As ADODB.Recordset, strSQL As String, minPrem As Double, i As Long, datetime As Date

datetime = Now()

Call DB.ConnectToDB 'Connect to the database
Set rs = New ADODB.Recordset

i = 7 'first row of data

Do While (Cells(i, 1) <> "")

    If (IsNumeric(Cells(i, 6))) Then
        minPrem = Cells(i, 6)
    Else
        minPrem = 0
    End If

    strSQL = "INSERT INTO Rates (EffectiveDate, State, Company, ClassCode, Rate, MinPremium, TimeOfEntry) VALUES " _
    & "(#" & Cells(i, 1) & "#,'" & Cells(i, 2) & "','" & Cells(i, 3) & "','" & Cells(i, 4).Text & "'," & Cells(i, 5) & "," & minPrem & ", #" & datetime & "#)"
    rs.Open strSQL, Cn

    i = i + 1
Loop

End Sub
4

1 に答える 1

1

複数のINSERT操作を Transaction にラップすると、個々の INSERT がキャッシュされてからデータベースに一度に書き込まれる (コミットされる) ため、処理速度が向上することがよくあります。cn.BeginTransループに入る前にステートメントを追加してから、ループを終了した後にステートメントを追加してみて、cn.CommitTransそれが役立つかどうかを確認してください。

また、INSERT 操作を行っているだけの場合は、別のRecordsetオブジェクトをいじる必要はありません。あなたはただ行うことができますcn.Execute strSQL

于 2013-04-11T16:19:25.350 に答える