通过RecordSets循环VBa对我的程序来说太慢了

时间:2017-05-11 16:55:38

标签: multithreading vba ms-access-2010

我在另一个RecordSet循环中有一个RecordSet循环。如果.OpenRecordSet运行不需要45秒,并且它打开的表有445k个寄存器。

内部循环的原因是因为我需要过滤从另一个RecordSet获得的结果,然后获得这些新结果并进行比较。

使用其他方法或其他方式会更好吗?是否有其他方法可以从表中获取特定数据(当然是更快的方式)?我应该尝试多线程吗?

由于人们可能需要我的代码:

Private Sub btnGetQ_Click()
    Dim tabEQ As DAO.Recordset: Dim tabT7 As DAO.Recordset: Dim tabPesqC As DAO.Recordset: Dim PesqCqdf As DAO.QueryDef
    Dim index As Integer: Dim qtdL As Long: Dim qtdL2 As Long
    Dim arrC() As String: Dim arrC2() As String: Dim arrC3() As String

    Set tabEQ = dbC.OpenRecordset("EQuery", dbOpenSnapshot)
    Set tabT7 = dbC.OpenRecordset("T7Query", dbOpenSnapshot)
    If Not tabEQ.EOF Then
        tabEQ.MoveFirst
        qtdL = tabEQ.RecordCount - 1
        ReDim arrC(qtdL): ReDim arrC2(qtdL)

        If Not tabT7.EOF Then
            tabT7.MoveFirst: index = 0
            Do Until tabT7.EOF
                arrC(index) = tabT7.Fields("CCO"): arrC2(index) = tabT7.Fields("CCE")

                Set PesqCqdf = dbC.QueryDefs("pesqCCO")
                PesqCqdf.Parameters("CCO") = arrC(index)
                Set tabPesqC = PesqCqdf.OpenRecordset(dbOpenSnapshot)

                qtdL2 = tabPesqConj.RecordCount - 1

                If qtdL2 > 0 Then
                   ReDim arrC3(qtdL2)

                   Dim i As Integer
                   For i = 0 To UBound(arrC3)
                       arrC3(i) = tabPesqC.Fields("CCE")
                       tabPesqC.MoveNext
                   Next
                End If

                On Error GoTo ERROR_TabT7

                index = index + 1: tabT7.MoveNext
            Loop
        End If

ERROR_TabT7:
Set tabT7 = Nothing

End If
If IsObject(tabEQ) Then Set tabEQ = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

我创建了与我想要的链接的表:/