Como ejecutar un doble recordset en un bucle do while

Que difícil es encontrarte activo... Me ha hecho falta tu ayuda :^) me imagino que te cansa tanto locura que preguntamos los principiantes.

Desde la ves que me enseñaste he mejorado un poco con lo de recorset, me falta mucho pero ahí voy despacio.

Ahora tengo un código con recorset que verifica si monto de un Cheque es igual al total detallado de los gastos, la tabla es detalleChq1 y detalleChq2, te imaginaras que la primera es el principal y el segundo el secundario, así también los formularios. Hice un bucle que revisa un recorset para ver si hay "balance entre el monto del cheque y la suma de los detalles del cheque.

Private Sub btnCerrarPdaChqs_Click()
Dim rstPdaChq As Recordset, rstActMayor As Recordset '1e y 2do recordset
Dim Mensaje As String
Set rstPdaChq = CurrentDb.OpenRecordset("qryVerificaPdaChq", dbOpenSnapshot)
Do While Not rstPdaChq.EOF
If rstPdaChq("Balance") <> 0 Then
Mensaje = Mensaje & rstPdaChq("idNumPda") & "-----" & rstPdaChq("NumChq") & vbCrLf
End If
rstPdaChq.MoveNext
Loop
MsgBox "Partidas de cheques sin balance " & vbCrLf & "Pda# Chq#" & vbCrLf & Mensaje, vbCritical, "ERROR"
rstPdaChq.Close
Set rstPdaChq = Nothing
End Sub

El "qryVericaPdaChq" es una consulta donde el cambo Balance calcula la diferencia entre el monto del cheque y la suma de los detalles del cheque. Esto lo hace bien, al terminar el bucle me presenta un mensaje con los cheques que no tienen balance.

Bueno ahora quiero que si los registros tienen balance 0, me ejecute el segundo recordset para actualizar una 3er tabla que lleva el control de los registros.

No se donde ponerlo en el bucle o si es que tengo que hacer un nuevo buble.

1 Respuesta

Respuesta
1

la estructura If...Then...End If te sirve para ejecutar parte de código si se da una determinada condición (la que sigue a If). Si a esta estructura le añades un Else (If..Then...Else...End If) puedes programar dos condiciones. Además, aún lo puedes complicar todavía más con un ElseIf (If ...Then...ElseIf...Then ....Else...End If)

En tu caso, puedes poner el segundo recordset dentro del If Then, pues tus dos condiciones para ejecutar el código son balance=0 (actualizas 3ª tabla con recordset) o balance<>0 (construyes el mensaje):

...

If rstPdaChq("Balance") <> 0 Then
Mensaje = Mensaje & rstPdaChq("idNumPda") & "-----" & rstPdaChq("NumChq") & vbCrLf

Else

Set rstActMayor ....

'resto código actualización
End If
rstPdaChq.MoveNext
Loop

...

También lo podrías hacer sin problema con otro bucle, pero sería algo más lento:

....

rstPdaChq.MoveNext
Loop 'Aquí finaliza el primer bucle que ya tienes

rstPdaChq.MoveFirst 'Vuelves al primer registro

If rstPdaChq("Balance") =0 Then

Set rstActMayor ....
'resto código actualización
End If
rstPdaChq.MoveNext
Loop

...

Yo te recomendaría que intentaras la primera opción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas