0
RecordSetループが別のRecordSetループ内にあります。 .OpenRecordSetが実行されるのに45秒かかるとうまくいけば、うまくいくでしょう。そして、それが開くテーブルには445kのレジスタがあります。VBaのレコードセットによるループ処理が遅すぎる
内部ループの理由は、別の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
VBAマルチスレッドをサポートしていません。 –
SQLを使用してみてください。詳細については、より詳細な情報をご提供ください。単純化されたソースレコードセットを使用してサンプルを投稿し、そのアイデアを示すために出力することもできます。レコードセットのソースは何ですか、レコードセットの接続が解除されていますか?どのような種類のフィルタリングを適用する必要がありますか? – omegastripes
ソースはネイティブテーブルです –