2015-05-30 4 views
0

Я не уверен, как подойти к этой петле. Я видел разные способы и пробовал If Not (rs.EOF And rs.BOF) Then по-разному, но он проходит только через кодировку. Этот код должен пересекать таблицу Intake, которая соответствует критериям запроса SELECT. Есть определенно несколько записей, которые отвечают этому запросу, поэтому он должен зацикливаться более одного раза. Этот код работает в первый раз и предоставляет окно сообщения, но затем просто заканчивается. Спасибо :)Не Looping MS Access

Set db = CurrentDb 

i = Me.searchlat 

strSQL = "SELECT IntakeID, Program, applicationdate From Intake 
WHERE Status Not Like 'Approved' And Status Not Like 'Denied' And Status 
Not Like 'Withdrawn' And Status Not Like 'Incomplete Application' And Status 
Not Like 'No Show' AND workerid = '" & i & "'" 
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 

While Not rs.EOF 

If Me.Program = "CF" And Me.applicationdate < Date - "25" Then 
MsgBox ("The following cases are nearing 30 days pending:" & " " & Me.caseid) 
rs.MoveNext 
End If 
Wend 
+0

использование в то время (не rs.EOF) ... WEND – Tim3880

+0

Привет @ Tim3880 Я использовал направиться, но он не сделал петлю через кодирование снова, я не уверен, если я не размещал его в нужном месте, но он пропустил strSQL. – Lilly

+1

Извините, я не понял ваш вопрос, и я удалю ответ. Если вы хотите перебрать набор данных (Me) и выполнить разные запросы, вы должны поместить «Set rs = ...» в свой цикл. – Tim3880

ответ

1

В вашем запросе на выборку вы не выбираете в caseid. измените ваш запрос на выбор как

"SELECT IntakeID, Program, applicationdate,caseid From Intake....... 

и проверьте.

strSQL = "SELECT IntakeID, Program, 
applicationdate, caseid From Intake WHERE Status Not Like 'Approved' 
And Status Not Like 'Denied' And Status Not Like 'Withdrawn' 
And Status Not Like 'Incomplete Application' And Status 
Not Like 'No Show' AND workerid = '" & i & "'" 
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
    While Not rs.EOF 


If Me.Program = "CF" And Me.applicationdate < Date - "25" Then 
    MsgBox ("The following cases are nearing 30 days pending:" & " " & rs!caseid) 
End If 
rs.MoveNext 

Wend 
2

Просто переместите rs.MoveNext вне заявление, если, но все еще в петле.

В настоящее время код входит в цикл и где условие if не применяется, завершает цикл (поскольку он не видит команду для перехода к следующей записи).

Кроме того, иногда это помогает, перед While/Wend цикла добавить следующее, чтобы убедиться записей располагается в самом начале:

rs.MoveLast 
rs.MoveFirst 
+0

Я сделал две вещи, и она все еще не выбирает следующую запись. Он правильно зациклирует число раз, но в 'msg' для' & "" & Me.caseid) ', и это должен быть новый регистр caseid. – Lilly