我试图运行下面的代码来将一个文件中的大量记录(从一个具有奇怪文件格式的文件)插入到我的Access 2003数据库中。在进行了许多实验之后,我发现这段代码是我能想到的最快的:它可以在我的机器上在大约15秒内处理10000条记录。其中至少14.5秒(即几乎所有时间)都用于单个UpdateBatch调用。
我在其他地方读到JET引擎不支持UpdateBatch。所以可能有更好的方法来做到这一点。
现在,我只认为JET引擎很慢,但这不可能是原因。在使用下面的代码生成“testy”表之后,我右键单击它,选择导出,并将其保存为XML。然后我右键单击,选择导入,并重新加载XML。导入XML文件的总时间?不到一秒钟,即至少快15倍。
肯定有一种有效的方法可以将数据插入到Access中,而不需要编写临时文件吧?
我在其他地方读到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
如果有一些API可以让我以这种方式进行快速插入,我愿意使用C / C ++。但我似乎找不到它。 Application.ImportXML难道是使用了未经记录的API吗?