我的VBA模块中有一个填充的ADO记录集。我在ACCESS中也有一个表,它与记录集具有完全相同的结构。
现在我使用遍历每个数据集记录的循环(这很好)来填充表格。
我想知道:有没有办法将整个记录集插入访问表? (更重要的是:这会明显加快)
这是一个基本示例(在本例中从excel运行),它说明了使用断开连接的记录集添加记录。
Sub Tester()
Dim con As ADODB.Connection, rs As ADODB.Recordset
Dim i As Long
Set con = getConn()
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient '<<<< important!
'get an empty recordset to add new records to
rs.Open "select * from Table1 where false", con, _
adOpenDynamic, adLockBatchOptimistic
'disconnect the recordset and close the connection
Set rs.ActiveConnection = Nothing
con.Close
Set con = Nothing
'add some new records to our test recordset
For i = 1 To 100
rs.AddNew
rs("UserName") = "Newuser_" & i
Next i
'reconnect to update
Set con = getConn()
Set rs.ActiveConnection = con
rs.UpdateBatch '<<< transfer to DB happens here: no loop!
rs.Close
'requery to demonstrate insert was successful
rs.Open "select * from Table1", con, _
adOpenDynamic, adLockBatchOptimistic
Do While Not rs.EOF
Debug.Print rs("ID").Value, rs("UserName").Value
rs.MoveNext
Loop
rs.Close
con.Close
End Sub
Function getConn() As ADODB.Connection
Dim rv As New ADODB.Connection
Dim strConn As String
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source = " & ThisWorkbook.Path & "\Test.accdb"
rv.Open strConn
Set getConn = rv
End Function
VBA记录集实际上存在于运行时调用的内存中,直到它们被包含到保存到硬盘的实际物理格式(即,csv,txt,xlsx,xml,数据库临时表)中。这类似于R或Python pandas,SAS数据集,PHP数组和其他数据结构中的数据框。
考虑使用CopyFromRecordset方法将ADO以这种格式导出到Excel电子表格中,以保存为csv,txt,xlsx或xml。或者,您可以使用Save方法将记录集保存为像xml这样的持久格式类型。
然后,使用其自动数据迁移功能将结果文件附加到MS Access表:
DoCmd.TransferSpreadsheet
DoCmd.TransferText
Application.ImportXML
INSERT INTO
附加SQL查询没有。没有反向等效 - 可能是SetRows
- 方法GetRows
。