【发布时间】:2015-09-09 08:01:51
【问题描述】:
您好,我一直在开发一个 vba 项目,这里的示例提供了很多帮助。我正在尝试从 Excel VBA 访问 MS Access 数据库,并根据请求导入大型数据集(500-100+ 行)。
目前,以下循环使用 ADODB 工作,但是 Range("").Copyfromrecordset 行每个请求花费了大约 7 秒的时间。
Public Sub BC_Data()
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim strCon, SQL As String
Dim ID As Integer
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...\Database.accdb;"
cn.Open strCon
For i = 0 To n
ID = Range("A2").Offset(i, 0).Value
SQL = "SELECT [Sales] WHERE [ID] = " & ID & _
" AND [Date] >= #" & [A1].Text & "# AND [Date] <= #" & _
[B1].Text & "#;"
rs.Open SQL, cn
Range("C2").Offset(0, i).CopyFromRecordset rs
rs.Close
Next
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
SQL 工作正常,只是为给定的产品 ID 和时间段选择每个事务。
我使用这种循环的原因是我们一次只需要大约 20 个产品的数据,而且它们不一定按顺序排列,因此 ID 可能是 1、2、4, 7、200、205、654等
ID 存储在 A 列中,然后请求循环遍历并将每个新列粘贴到 C 列中。
我有两个问题:
使用 DAO 连接而不是 ADODB 会加速这个过程吗?如果是这样,我将如何在 DAO 中复制它?
我用来循环遍历 ID 然后请求有效的方法吗?有没有更快的方法,也许使用“For each”循环代替?
谢谢!
【问题讨论】:
标签: excel vba ms-access ado dao