我正在尝试运行下面的代码以将大量记录(来自具有奇怪文件格式的文件)从 VBA 插入到我的 Access 2003 数据库中。经过无数次的实验,这段代码是我能想到的最快的:它在我的机器上大约 15 秒内完成了 10000 条记录。这些秒中至少有 14.5 秒(即几乎所有时间)在对 UpdateBatch 的单次调用中。
我在别处读到 JET 引擎不支持 UpdateBatch。所以也许有更好的方法来做到这一点。
现在,我只是认为 JET 引擎很慢,但事实并非如此。使用下面的代码生成“testy”表后,我右键单击它,选择导出,并将其保存为 XML。然后我右键单击,选择 Import,然后重新加载 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
如果有一些 API 可以让我以这种方式快速插入,我愿意求助于 C/C++。但我似乎找不到它。不可能是 Application.ImportXML 正在使用未记录的 API,可以吗?