MS Access: почему ADODB.Recordset.BatchUpdate намного медленнее, чем Application.ImportXML?

Я пытаюсь запустить приведенный ниже код для вставки большого количества записей (из файла со странным форматом файла) в мою базу данных Access 2003 из VBA. После многих, многих экспериментов этот код является самым быстрым, который я смог придумать: он делает 10000 записей за 15 секунд на моей машине. По крайней мере 14,5 из этих секунд (т. Е. Почти все время) находится в одном вызове UpdateBatch.

В другом месте я читал, что движок JET не поддерживает UpdateBatch. Так что, возможно, есть лучший способ сделать это.

Я бы просто подумал, что движок JET довольно медленный, но этого не может быть. После создания таблицы 'testy' с приведенным ниже кодом, я щелкнул правой кнопкой мыши по ней, выбрал Экспорт и сохранил его в формате XML. Затем я щелкнул правой кнопкой мыши, выбрал Импорт и перезагрузил XML. Общее время для импорта файла XML? Менее одной секунды, т.е. по крайней мере, в 15 раз быстрее.

Конечно, есть эффективный способ вставки данных в Access, который не требует записи временного файла?

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

Я был бы готов прибегнуть к C / C ++, если бы был какой-то API, который позволил бы мне делать быстрые вставки таким образом. Но я не могу найти это. Не может быть, что Application.ImportXML использует недокументированные API, не так ли?

Ответы на вопрос(1)

Ваш ответ на вопрос