gpt4 book ai didi

excel - 将 ADODB 循环转换为 DAO

转载 作者:行者123 更新时间:2023-12-04 21:03:31 25 4
gpt4 key购买 nike

嗨,我一直在开发一个 vba 项目,这里的示例提供了很多帮助。我正在尝试从 Excel VBA Access 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”循环代替?

  • 谢谢!

    最佳答案

    DAO 可能会快一点,但不是实质性的。相反,请在 SQL 语句中使用 IN 子句,这样您只需执行一次。

    Sub test()

    Dim vaIds As Variant
    Dim sSql As String

    vaIds = Split("1 2 4 7 200 205 654", Space(1))

    sSql = "SELECT [Sales] WHERE [ID] In(" & Join(vaIds, ",") & ")" & _
    " AND [Date] >= #" & [A1].Text & "# AND [Date] <= #" & _
    [B1].Text & "#;"

    Debug.Print sSql

    End Sub

    关于excel - 将 ADODB 循环转换为 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31004177/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com