VBA 将整个 ADODB.Recordset 插入表中
Posted
技术标签:
【中文标题】VBA 将整个 ADODB.Recordset 插入表中【英文标题】:VBA Insert whole ADODB.Recordset into table 【发布时间】:2016-03-23 18:06:16 【问题描述】:我正在尝试在 sql server(一些 DWH)上运行 SQL 查询,然后将结果插入到访问表中(使用 VBA)。 我是通过使用 ADODB.Connection、ADODB.Command 和 ADODB.Recordset 来完成的。此时我在 Recordset 中有我的结果,我想知道如何在不循环的情况下将它插入到表中。 我试过了:
If Not (Rs.EOF And Rs.BOF) Then
Rs.MoveFirst
Do Until Rs.EOF = True
DoCmd.RunSQL ("INSERT INTO Table (F1, F2) VALUES ( " & rs![F1] & ", " & rs[F2] & ")"
Rs.MoveNext
Loop
End If
但是 Recordset 可能有超过 100k 行。所以使用这种方法插入它需要很长时间。
另一种非常快速的方法是打开一个新的 Excel 工作簿,将其粘贴到工作表中,然后将其导入。但我想避免它。有没有其他办法?
---------已编辑----------- 对不起大家。我的错。我用 VBA 强制解决方案,而 linkin 它是完美的。谢谢 !
【问题讨论】:
为什么要在 Access 中制作副本,这样的行会变慢并死掉。如果要创建 SQL 视图,并将 Access 链接到该视图。它仍然会很慢。 几个原因:1.) 我没有在 SQL Servers 上创建视图的权限(只读) 2.) 没有 SQL 知识的用户将使用访问权限 3.) VBA 不会做其他行动取决于用户的决定 好的,然后在 SQL 中运行您的查询,在结果页面中右键单击,然后选择副本(无标题)。打开 Access 表并单击最后一行并粘贴。 1.) 它将成为没有 SQL 知识(包括软件)的用户的工具 2.) 它将经常更新。因此,手动完成既浪费时间又不方便 3.) 我的政治观点:不要做可以自动完成的事情。 为什么不直接将 SQL 表链接到 Access,然后使用所需的值进行查询?这与在功能上(但不是性能)在 SQL Server 中拥有视图相同。 【参考方案1】:我想知道是否有任何使用 Access 的快速方法 仅限资源。
如前所述,链接 SQL 表,然后创建一个简单的 append 查询,该查询从链接表中读取并写入您的 Access 表,然后您就完成了.
【讨论】:
【参考方案2】:我同意评论者的观点,即您应该尽可能链接。但我想看看能不能做到。我最终将记录集转换为逗号分隔文件并使用TransferText
附加它。
Public Sub ImportFromSQLSvr()
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim sResult As String
Dim sFile As String, lFile As Long
Const sIMPORTFILE As String = "TestImport.txt"
Set cn = New ADODB.Connection
cn.Open msCONN
Set rs = cn.Execute("SELECT SiteID, StoreNumber FROM Site")
'Add a header row, replace tabs with commas
sResult = rs.GetString
sResult = "SiteID, StoreNumber" & vbNewLine & sResult
sResult = Replace(sResult, vbTab, ",")
'Write to a text file
lFile = FreeFile
sFile = Environ("TEMP") & "\" & sIMPORTFILE
Open sFile For Output As lFile
Print #lFile, sResult
Close lFile
'Append to table dbo_Site
DoCmd.TransferText acImportDelim, , "dbo_Site", Environ("TEMP") & "\" & sIMPORTFILE, True
On Error Resume Next
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
如果您的数据中有任何逗号,则需要做一些额外的工作来正确格式化 csv。
【讨论】:
我厌倦了。 xlsx/csv 文件是我想出的最快方法。逗号的解决方案是添加正确的导入/导出规范(例如在 "MSysIMEXspecs" 中添加记录)。但我想知道是否有任何仅使用 Access 资源的快速方法。以上是关于VBA 将整个 ADODB.Recordset 插入表中的主要内容,如果未能解决你的问题,请参考以下文章
无法将“ADODB.Recordset”类型的对象转换为“MSDATASRC.DataSource”类型