MS Access: Warum ist ADODB.Recordset.BatchUpdate so viel langsamer als Application.ImportXML?

Ich versuche, den folgenden Code auszuführen, um eine ganze Reihe von Datensätzen (aus einer Datei mit einem seltsamen Dateiformat) aus VBA in meine Access 2003-Datenbank einzufügen. Nach vielen, vielen Experimenten ist dieser Code der schnellste, den ich finden konnte: Auf meinem Computer werden in etwa 15 Sekunden 10000 Datensätze erstellt. Mindestens 14,5 dieser Sekunden (dh fast die ganze Zeit) sind im Einzelaufruf von UpdateBatch enthalten.

Ich habe an anderer Stelle gelesen, dass die JET-Engine UpdateBatch nicht unterstützt. Vielleicht gibt es dafür einen besseren Weg.

Now, ich würde nur denken, dass die JET-Engine einfach langsam ist, aber das kann es nicht sein. Nachdem ich die 'testy'-Tabelle mit dem folgenden Code erstellt hatte, klickte ich mit der rechten Maustaste darauf, wählte Export und speicherte sie als XML. Dann habe ich mit der rechten Maustaste geklickt, Import ausgewählt und das XML neu geladen. Gesamtzeit zum Importieren der XML-Datei? Weniger als eine Sekunde, dh. mindestens 15x schneller.

Gibt es eine effiziente Möglichkeit, Daten in Access einzufügen, für die keine temporäre Datei geschrieben werden muss?

Sub TestBatchUpdate()
    CurrentDb.Execute "create table testy (x int, y int)"

    Dim rs As New ADODB.Recordset
    rs.CursorLocation = adUseServer
    rs.Open "testy", CurrentProject.AccessConnection, _
        adOpenStatic, adLockBatchOptimistic, adCmdTableDirect

    Dim n, v
    n = Array(0, 1)
    v = Array(50, 55)

    Debug.Print "starting loop", Time
    For i = 1 To 10000
        rs.AddNew n, v
    Next i
    Debug.Print "done loop", Time

    rs.UpdateBatch
    Debug.Print "done update", Time

    CurrentDb.Execute "drop table testy"
End Sub

Ich wäre bereit, auf C / C ++ zurückzugreifen, wenn es eine API gibt, mit der ich schnelle Einfügungen auf diese Weise ausführen könnte. Aber ich kann es scheinbar nicht finden. Es kann nicht sein, dass Application.ImportXML undokumentierte APIs verwendet, oder?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage