Я пытаюсь запустить все записи в таблице доступа с помощью вложенных do ... while циклов.Вложенные do .... while петли в доступе vba
Существуют разные критерии для каждого цикла, поэтому я запускаю несколько наборов записей, прежде чем запускать циклы.
Когда я запускаю код, он работает так, как должен, однако проблема заключается в том, что при 1 наборе записей нет записей, весь процесс завершается с ошибкой.
Вот немного кода для вложенных циклов.
Dim rst1, rst2, rst3, rst4, rst5, rst6 As Recordset
Dim sqlSt1, sqlSt2, sqlSt3, sqlSt4, sqlSt5, sqlSt6 As String
Dim rcdCount, a, b, c, d, e, f As Double
Set dbs = CurrentDb
sqlSt1 = "SELECT * FROM [Rune List - Optimizer List] WHERE [Rune Slot]= 1"
sqlSt2 = "SELECT * FROM [Rune List - Optimizer List] WHERE [Rune Slot]= 2"
sqlSt3 = "SELECT * FROM [Rune List - Optimizer List] WHERE [Rune Slot]= 3"
sqlSt4 = "SELECT * FROM [Rune List - Optimizer List] WHERE [Rune Slot]= 4"
sqlSt5 = "SELECT * FROM [Rune List - Optimizer List] WHERE [Rune Slot]= 5"
sqlSt6 = "SELECT * FROM [Rune List - Optimizer List] WHERE [Rune Slot]= 6"
Set rst1 = dbs.OpenRecordset(sqlSt1)
Set rst2 = dbs.OpenRecordset(sqlSt2)
Set rst3 = dbs.OpenRecordset(sqlSt3)
Set rst4 = dbs.OpenRecordset(sqlSt4)
Set rst5 = dbs.OpenRecordset(sqlSt5)
Set rst6 = dbs.OpenRecordset(sqlSt6)
startTime = Time
rcdCount = rst1.recordCount
SysCmd acSysCmdInitMeter, "Processing: ", rcdCount
Debug.Print "4: " & rst4.recordCount
Debug.Print "6: " & rst6.recordCount
Do While Not rst1.EOF And Not rst1.BOF
Do While Not rst2.EOF And Not rst2.BOF
Do While Not rst3.EOF And Not rst3.BOF
Do While Not rst4.EOF And Not rst4.BOF
Do While Not rst5.EOF And Not rst5.BOF
Do While Not rst6.EOF And Not rst6.BOF
f = f + 1
rst6.MoveNext
Loop
e = e + 1
rst6.MoveFirst
rst5.MoveNext
Loop
d = d + 1
rst5.MoveFirst
rst4.MoveNext
Loop
c = c + 1
rst4.MoveFirst
rst3.MoveNext
Loop
b = b + 1
rst3.MoveFirst
rst2.MoveNext
Loop
a = a + 1
SysCmd acSysCmdUpdateMeter, a
DoEvents
rst2.MoveFirst
rst1.MoveNext
Loop
rst1.Close
rst2.Close
rst3.Close
rst4.Close
rst5.Close
rst6.Close
SysCmd acSysCmdRemoveMeter
endTime = Time
tmDuration = DateDiff("s", CDate(startTime), CDate(endTime))
tm = Format(Int([tmDuration]/3600), "00") & ":" & Format(Int(([tmDuration] - (Int([tmDuration]/3600) * 3600))/60), "00") & ":" & Format((([tmDuration] Mod 60)), "00")
Debug.Print a
Debug.Print b
Debug.Print c
Debug.Print d
Debug.Print e
Debug.Print f
Debug.Print "-----------------"
Debug.Print tm
Есть ли простой способ проверить пустые записи и пропустить те, которые вызовут проблемы?
Спасибо за любую помощь
K
«Пустые записи» Я предполагаю, что вы имеете в виду пустые записи. Убедитесь, что rst # .eof = false. Я бы реорганизовал это, чтобы они не все были вложенными. Если вы разместите больше своего кода, возможно, кто-то может предложить лучшую логику. – MatthewD
«Весь процесс не проходит» ничего не говорит нам. Скажите нам, что на самом деле неправильно. Кроме того, покажите нам фактический код, который терпит неудачу, так как приведенное выше выглядит правильным. – RBarryYoung
Когда это не удается, таблица действительно существует в наборе записей? –