Access - BUCLE NO RECORRE...

 
Vista:
sin imagen de perfil

BUCLE NO RECORRE...

Publicado por Andres (1 intervención) el 11/12/2022 00:18:40
Hola a todos espero puedan darme una mano POR FAVOR!!!!.
Tengo un formulario con los datos de clientes y un subformulario donde figuran las cuotas que debe. Con un botón que se llama pagar me abre el formulario donde abre un formulario para cobrar cuotas por persona que se llama:
F_selec_pago con los campos dni y apellynomb de la tabla t_cliente y dos subformularios relacionados con el formulario principal por número de dni
F_Selec_Pag_Deb (aca se ven la cuotas que debe)
y F_Selec_Pag_pag (aca se ven las cuotas que va a pagar)
El subformulario F_Selec_Pag_Deb tiene filtrados los registros que figura en el campo
Cuot_Estado = “DEBE”. Y un campo llamado selec_cuot con si/no que me permite seleccionar las cuotas que va a pagar, al tildarla me aparece en el suf formulario F_Selec_Pag_pag y cambia el campo
Cuot_Estado = “DEBE” pasa a tener el valor “A PAGAR” si le quito el tilde se revierte cambia el valor a “DEBE”.
En el subformulario F_Selec_Pag_pag tengo un botón cobrar llamado btn_cobrar que es acá donde tengo que crear el bucle para que en el caso que tenga varias cuotas me cambie el valor del campo Cuot_Estado = “PAGADO”
En el pie del subformulario tengo un cuadro de texto que se llama Suma_A_Pagar =Suma([Cuot_import]) para sumar todas la cuotas que quiera pagar.

Dim vcompruebo As String
Dim c_esta As String
Dim Cuot_Estado As String

c_esta = "a pagar" ‘ PUSE ASI PORQUE NO ME TOMA QUE Cuot_Estado =”A PAGAR”

vcompruebo = DLookup("Cuot_Estado", "T_cuota", Cuot_Estado = " & c_esta & " And Cuot_dni = " & Jug_Dni & ")

If vcompruebo Then

ElseIf MsgBox("¿Desea cobrar las cuotas seleccionadas? ", vbQuestion + vbYesNo + vbDefaultButton2, "COBRAR?") = vbNo Then

Exit Sub
Else
Set rs = CurrentDb.OpenRecordset("T_cuota", dbOpenTable)

Do Until rs.EOF

rs.Edit

Cuot_Estado = "PAGADO"

rs.Update

TotalCuotas = TotalCuotasCuotas + 1

rs.MoveNext
Loop
rs.Close

Set rs = Nothing
Me.Requery

MsgBox "COBRADO " & TotalCuotas & " CUOTAS", vbInformation,
‘ACA QUIERO QUE SALGA EL MENSAJE UD ABONO …$XXXX
Exit Sub
END SUB
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

BUCLE NO RECORRE...

Publicado por Anonimo (3314 intervenciones) el 11/12/2022 01:40:36
El total de esa suma se puede obtener de varias formas:

.- Sumándolas al igual que se cuentan, una variable de tipo moneda o double y a la vez que las cuenta, con esta suma los importes
... UD ABONO …$ & [la variable con la suma]

.- Tomar prestada la suma del pie del formulario, como es un campo calculado se le da el calculo (el contenido) en lugar del campo (el contenedor)
.... UD ABONO …$ & Suma([Cuot_import])


Hay mas métodos pero estos creo que se adaptan a lo que ya esta creado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

BUCLE NO RECORRE...

Publicado por Eduardo (316 intervenciones) el 11/12/2022 14:39:52
Puede clonar el subformulario, observe este código de una respuesta que di en todoexpertos https://www.todoexpertos.com/preguntas/cwydj5jd7a3accqp/borrar-registros-con-casilla-de-verificacion-en-verdadero


En su pregunta tiene vcompruebo como cadena y utiliza if vcompruebo then ¿Contra qué está comprobando? Si clona el subformualrio le queda fácil recorrerlo haciendo un EDIT por el registro que tenga selec_cuot igual a -1. asigna Cuot_Estado = "PAGADO" y necesita una varibla para almacenar el valor de la cuota que abona, algo como, vrcuota=vrcuota+cuota. Esta variable la utiliza para indicar cuanto abono, ya tiene el totalcuotas, asi puede indicar, usted abono totalcuotas por un valor de vrcuota.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

BUCLE NO RECORRE...

Publicado por andres (42 intervenciones) el 13/12/2022 15:28:49
Hola, gracias por tu respuesta.
Como no le estoy encontrando la vuelta te pido por favor que me digas porque me actualiza todos los registros.
Muchas gracias.

Dim rs As Recordset

Dim intActualizado As Integer


If Cuot_estado = "DEBE" Then

Exit Sub

Else

Set rs = CurrentDb.OpenRecordset("T_CUOTA", dbOpenTable)



Do Until rs.EOF

rs.Edit

rs!Cuot_estado = "PAGADO"

rs.Update

intActualizado = intActualizado + 1

rs.MoveNext


Loop

rs.Close

Set rs = Nothing

Me.Requery

MsgBox "Se actualizaron " & intActualizado & " registros", vbInformation, "Cuotas mes"

End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

BUCLE NO RECORRE...

Publicado por Anonimo (3314 intervenciones) el 13/12/2022 17:56:10
Actualizara todos los registros que contenga el recordset "T_Cuota" y cumplan las condiciones.

No tengo claro si se desea actualizar un solo registro o se actualizan como conjunto.

Para uno solo se puede utilizar la tabla, el origen de datos del subformulario (su RecordsetClone) y tambien una SQL de accion, en todos los casos se aplicaria una condicion (normalmente el ID del registro afectado) para lograr el exito.

Para hacerlo como conjunto descartaria la tabla, se utilizaria el RecordsetClone (que es un subconjunto de la tabla) y el metodo a aplicar: Editar el registro o una SQL.

Supongo que como se desea contar a los afectados se trabajara con un subconjunto y tras la selección de los datos a actualizar, se aplicaría con un click en el botón.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub btn_cobrar_Click()
Dim intActualizado As Integer
With Me.RecordsetClone
.MoveFirst
Do Until .EOF
If !selec_cuot = True Then
    intActualizado = intActualizado + 1
    .Edit
    !Cuot_estado = "PAGADO"
    !selec_cuot = 0
    ' otra accion sobre el registro
    .Update
    End If
    .MoveNext
    Loop
End With
MsgBox "Se actualizaron " & intActualizado & " registros", vbInformation, "Cuotas mes"
End Sub

Esta línea ( ' otra accion sobre el registro) es para añadir algún cambio mas en el registro activo (además de desmarcarlo y cambiar su estado a 'pagado'), si no hay nada que añadir ... a la papelera sin mas.

En principio y dado que se utiliza el RecorsetClone, no debería ser necesario refrescar nada.

Si no es lo que deseas, intenta ampliar/modificar la explicación en base a que solo tu conoces la aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

BUCLE NO RECORRE...

Publicado por andres (42 intervenciones) el 14/12/2022 12:14:30
Muchas gracias!..
Quiero que todos los registros de la tabla t_cuota del campo Cuot_estado = "a pagar" me los actualice a "pagado".
Por eso te pregunto, en el if puse que


If Cuot_estado = "DEBE" Then

Exit Sub

else....

Voy a probar a ver ... luego comento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

BUCLE NO RECORRE...

Publicado por Anonimo (3314 intervenciones) el 14/12/2022 13:16:42
No compliques lo sencillo.

Si los registros que se desean modificar están marcados (su campo 'selec_cuot' se le pone a TRUE)...
¿A que viene la segunda condición de que el campo 'Cuot_estado' tiene que tener el valor "DEBE"?.

Lo optimo es filtrar (con una, dos o veinte condiciones) los registros que se necesita tratar y una vez filtrados se actualizan, modifican, borran o duplican.

Con el código que he publicado se limita el conjunto de datos de la tabla, por eso se utiliza el RecodsetClone que por la dependencia que existe entre el formulario principal y el subformulario se genera un subconjunto.

Se parte del supuesto de que los registros a modificar se seleccionan (modificando su campo 'selec_cuot' ) y finalizada la selección se ejecuta la actualización.

Solo seria adecuado utilizar la tabla si de forma previa se actualiza el campo 'selec_cuot' a FALSE.
Tras ello se hace la selección como se desee (incluso en/por etapas y diferentes días, basta que no se ejecute otra vez la actualización del campo 'selec_cuot' a False (pues se perderían los ya marcados).
Cuando corresponda (al revisar la contabilidad, al final de mes o a capricho) se ejecuta la actualización de los marcados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

BUCLE NO RECORRE...

Publicado por andres (42 intervenciones) el 20/12/2022 14:27:56
Hola, listo ya me funcionó. Muchas gracias!!
Pasa que no puedo dedicarle tiempo y trato de hacerlo rápido.
Tengo varias preguntas.
Nuevamente muchas Muchas Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar