Access - Validar antes de grabar

 
Vista:

Validar antes de grabar

Publicado por Socrates Cabrera (129 intervenciones) el 19/08/2020 01:53:33
Hola amigos

Necesito de su ayuda. Tengo un formulario llamado ContabilidadCDiario y un sub formulario llamado ComprobanteContabilidad . El subformulario tiene un campo llamado Debe y otro Haber en donde se registran montos. Al pie del subformulario hice unos cuadros de control para que muestre las sumas de cada columna.

En el formulario he colocado Casillas ( Total Debe-Total haber) independientes y visibles que muestran los totales del subformulario y otra casilla que se llama Saldo la cual resta las casilla antes mencionadas a fin de que muestren el valor 0 (es decir debe cuadrar) Hasta aca todo bien.

Lo que necesito es que a los usuarios no los deje grabar los registros o les de un mensaje de error si las sumas de ambas columnas Debe y Haber no están iguales. ( es decir la casilla Saldo nunca de debe ser <> a cero).

Como puedo hacer eso?

He pasado todo el dia quebrandome la cabeza y nada.

Ayuda estimados
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

Validar antes de grabar

Publicado por Anonimo (3316 intervenciones) el 19/08/2020 12:47:02
Los formularios (normalmente) guardan sus datos al salir, exactamente en su evento actualizar evento que se produce tanto al cerrar el formulario como al cambiar de registro.

Ese evento tiene un parámetro (CANCEL) que por diseño esta a cero (false), si se le da el valor TRUE (diferente de cero) se impide que la salida del formulario.

Utiliza esa condición que exiges que se cumpla, como el testigo a evaluar para aplicarlo en ese evento a ese parámetro, quizás algo tan sencillo como esto lo logre:

1
Cancel = Me.Saldo

Si saldo = 0 ==> (false) no cancela
Si saldo <> 0 ==> (true) cancela la acción salir del formulario
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

Validar antes de grabar

Publicado por Socrates Cabrera (129 intervenciones) el 19/08/2020 16:49:52
Estimado

Coloqué este código y no me funcionó con lo que deseo

1
2
3
4
5
6
7
8
Private Sub Saldo_AfterUpdate()
Cancel = Me.Saldo
If Me!Saldo = 0 Then
Me!Saldo = False
If Me!Saldo <> 0 Then
Me!Saldo = True
End If
End Sub
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

Validar antes de grabar

Publicado por Anonimo (3316 intervenciones) el 19/08/2020 17:04:25
En el entorno que se planteo la solución, se indica (de forma explicita) que el evento es del formulario (NO de un control de un formulario)

Ese evento en un control NO TIENE el parámetro CANCEL que SI TIENE ese mismo evento en y para el formulario.

Una de las formas de utilizarlo es esta:
1
2
3
Private Sub Form_BeforeUpdate(Cancel As Integer)
Cancel = Me.Dirty
End Sub

Por lo tanto es correcto que no funcione en ese entorno y lamentable el tiempo utilizado en dar una respuesta que no se ha seguido para llegar a un final con éxito ....
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

Validar antes de grabar

Publicado por Socrates Cabrera (129 intervenciones) el 20/08/2020 01:18:07
Estimado

Ya coloque el codigo en mi formulario. Me abre un formulario nuevo pero no me deja digitar en el subformulario. al final no guarda ninguna información.

Me disculpo por las molestias. pero algo sucedio con mi correo que no aviso su respuesta. Crame que agradezco mucho la ayuda que me proporcionan en este foro y a las personas como usted que estan disponibles a ayudar a los que menos sabemos.

Mientras tanto sigo peleando por este proyecto.
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

Validar antes de grabar

Publicado por Anonimo (3316 intervenciones) el 21/08/2020 21:20:02
El código que he publicado como ejemplo tiene exactamente la finalidad de NO guardar cambios en un formulario, esto es: si se hace una modificación cualquiera (incluso en un registro nuevo) impedirá que el formulario se cierre por tener cambios sin guardar, y para guardarlos (en ese mismo formulario) hay un botón para ello.

Conclusión: si se desean guardar los cambios, se hace con el botón especifico para ello, de esa forma se evitan cambios no deseados.

Se utilizo como condición la propiedad Dirty del formulario (true si hay cambios, false si no los hay)

Solo se tendría que cambiar la condición ....

¿Qué en un determinado objeto el valor (o su origen de datos si es un campo calculado) sea igual o diferente de cero seria una posible opción a intentar?.

Los ejemplos se han de utilizar como referentes no como soluciones gratuitas, cada cual ha de hacer su trabajo y la ayuda (al menos la que intento dar) es la de enseñar a pescar.

Seguro que mas de uno intento utilizarlo sin preocuparse de saber que eseso de 'Dirty' .....
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

Validar antes de grabar

Publicado por Socrates Cabrera (129 intervenciones) el 21/08/2020 22:41:01
Gracias estimado por la molestias.

En el aprendizaje estamos.

Gracias por su apoyo

Muy agradecido
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