MS Access: Por que o ADODB.Recordset.BatchUpdate é muito mais lento que o Application.ImportXML?
Estou tentando executar o código abaixo para inserir muitos registros (de um arquivo com um formato de arquivo estranho) no meu banco de dados do Access 2003 do VBA. Após muitas e muitas experiências, esse código é o mais rápido que consegui: ele grava 10000 registros em cerca de 15 segundos na minha máquina. Pelo menos 14,5 desses segundos (ou seja, quase o tempo todo) estão na chamada única para o UpdateBatch.
Eu li em outro lugar que o mecanismo JET não suporta UpdateBatch. Talvez haja uma maneira melhor de fazer isso.
Agora, eu acho que o mecanismo JET é muito lento, mas não pode ser isso. Depois de gerar a tabela 'irritante' com o código abaixo, cliquei com o botão direito do mouse, escolhi Exportar e salvei como XML. Em seguida, cliquei com o botão direito, escolhi Importar e recarreguei o XML. Tempo total para importar o arquivo XML? Menos de um segundo, ie. pelo menos 15x mais rápido.
Certamente há uma maneira eficiente de inserir dados no Access que não exija a gravação de um arquivo temporário?
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
Eu gostaria de recorrer ao C / C ++ se houver alguma API que me permita inserir inserções rápidas dessa maneira. Mas parece que não consigo encontrá-lo. Não é possível que o Application.ImportXML esteja usando APIs não documentadas, pode?