【发布时间】: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 中拥有视图相同。
标签: sql-server vba ms-access