具有多个记录集的单个ADO连接

时间:2019-12-18 22:47:16

标签: excel vba

我一直试图遍历数组,在同一连接的工作簿中打开多个记录集。

第一次迭代很好,但是在随后的迭代中,记录集建立在先前的记录集上。

我尝试删除数据数组,关闭记录集,设置新记录集,将记录集设置为空,甚至关闭连接并打开新记录。

它仍然是累积的。

Dim connection As New ADODB.connection
Dim rs As New ADODB.Recordset

strPath = "path"
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=Yes;"";"
connection.Open strConn

Dim tarArr As Variant, tarElm As Variant, recsetElm as Variant
tarArr = Array("CW", "NW")

For Each tarElm In tarArr
    If tarElm = "CW" Then
        distroSht = "Capital Warfare"
    ElseIf tarElm = "NW" Then
        distroSht = "Northwest Pacific"
    End If

    strQuery = "SELECT Address FROM [" & distroSht & "$]"

    Set rs = New ADODB.Recordset
    rs.Open strQuery, connection
    recset = rs.GetRows

    For Each recsetElm In recset
        mailTo = mailTo & recsetElm & "; "
    Next recsetElm

    Erase recset
    rs.Close
    Set rs = Nothing
Next tarElm

1 个答案:

答案 0 :(得分:1)

只需在循环内的记录集上移动创建的内容,以便在每次迭代进行plac时,都会在循环结束时创建并删除记录集。

赞:

Dim connection As New ADODB.connection
Dim rs As ADODB.Recordset

strPath = "path"
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=Yes;"";"
connection.Open strConn

Dim tarArr As Variant, tarElm As Variant, recsetElm as Variant
tarArr = Array("CW", "NW")

For Each tarElm In tarArr

    If tarElm = "CW" Then
        distroSht = "Capital Warfare"
    ElseIf tarElm = "NW" Then
        distroSht = "Northwest Pacific"
    End If

    strQuery = "SELECT Address FROM [" & distroSht & "$]"

    Set rs = ADODB.Recordset
    rs.Open strQuery, connection
    recset = rs.GetRows

    For Each recsetElm In recset
        mailTo = mailTo & recsetElm & "; "
    Next recsetElm

    Erase recset
    rs.Close
    Set rs = Nothing
    mailTo = vbNullString

Next tarElm