none
Como hacer bucle Do while con una variable control RRS feed

  • Pregunta

  • Hola desde hace unos días he estado batallando con un bucle para aplicar un pago. Hice un recordset para determinar el saldo por cobrar y por servicio, el bucle funciona HASTA que el usuario digita una cantidad recibida mayor al saldo por cobrar, pues ya no hay registro con el que evaluar, intento evitar que el bucle se repita con BOF and EOF pero siempre se detiene con un error que dice el registro no existe.

    el bucle que quiero hacer es do While X > 0

     
    If (rstSaldosPorServicio.BOF And rstSaldosPorServicio.EOF) Then
      rstPagos.AddNew
      rstPagos("idPagos1") = Me.idPagos1
      rstPagos("idServicios") = 100
      rstPagos("ValorPagado") = vBalanceControl
      vBalanceControl = 0
      rstPagos.Update
    Else
        Do While vBalanceControl > 0
        If vBalanceControl > rstSaldosPorServicio("Saldo") Then ""->>ERROR
            rstPagos.AddNew
            rstPagos("idPagos1") = Me.idPagos1
            rstPagos("idServicios") = rstSaldosPorServicio("idServicio")
            rstPagos("ValorPagado") = rstSaldosPorServicio("Saldo")
             vBalanceControl = vBalanceControl - rstSaldosPorServicio("Saldo")
            rstPagos.Update
        ElseIf vBalanceControl <= rstSaldosPorServicio("Saldo") Then
            rstPagos.AddNew
            rstPagos("idPagos1") = Me.idPagos1
            rstPagos("idServicios") = rstSaldosPorServicio("idServicio")
            rstPagos("ValorPagado") = vBalanceControl
             vBalanceControl = vBalanceControl - vBalanceControl
            rstPagos.Update
        End If
        rstSaldosPorServicio.MoveNext
        Loop
    End If


    • Editado ATOM5800 lunes, 23 de junio de 2014 19:09 Cambio de titulo
    sábado, 21 de junio de 2014 19:02

Todas las respuestas

  • Cambia 

    If (rstSaldosPorServicio.BOF And rstSaldosPorServicio.EOF) Then 

    por

    If (rstSaldosPorServicio.BOF OR rstSaldosPorServicio.EOF) Then

    También una vez que entras en el bucle   Do While vBalanceControl > 0   estás cambiando de registro de rstSaldosPorServicio con el MoveNext pero no controlas cuando llegas a fin de fichero. Haz algo como esto:

    If (rstSaldosPorServicio.BOF OR rstSaldosPorServicio.EOF) Then
      rstPagos.AddNew
      rstPagos("idPagos1") = Me.idPagos1
      rstPagos("idServicios") = 100
      rstPagos("ValorPagado") = vBalanceControl
      vBalanceControl = 0
      rstPagos.Update
    Else
        Do While vBalanceControl > 0 and NOT rstSaldosPorServicio.EOF
        If vBalanceControl > rstSaldosPorServicio("Saldo") Then ""->>ERROR
            rstPagos.AddNew
            rstPagos("idPagos1") = Me.idPagos1
            rstPagos("idServicios") = rstSaldosPorServicio("idServicio")
            rstPagos("ValorPagado") = rstSaldosPorServicio("Saldo")
             vBalanceControl = vBalanceControl - rstSaldosPorServicio("Saldo")
            rstPagos.Update
        ElseIf vBalanceControl <= rstSaldosPorServicio("Saldo") Then
            rstPagos.AddNew
            rstPagos("idPagos1") = Me.idPagos1
            rstPagos("idServicios") = rstSaldosPorServicio("idServicio")
            rstPagos("ValorPagado") = vBalanceControl
             vBalanceControl = vBalanceControl - vBalanceControl
            rstPagos.Update
        End If
        rstSaldosPorServicio.MoveNext
        Loop
    End If


    Saludos, Javier J

    • Propuesto como respuesta Javier Jiménez miércoles, 25 de junio de 2014 8:23
    lunes, 23 de junio de 2014 11:50
  • Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Gracias!!! Funciono!!

    lunes, 23 de junio de 2014 19:08