Access - Problema con deshacer campo en un formulario

 
Vista:

Problema con deshacer campo en un formulario

Publicado por Carlos Andrés (18 intervenciones) el 09/08/2006 21:47:25
Hola, amigos:

Tengo un serio problema en el evento BeforeUpdate de los campos de un subformulario.
Resulta que algunos campos tiene validaciones para escribir en ellos. Al no cumplirse alguna condición, valido el campo en el evento beforeUpdate con un código similar al sgte:

private sub <campo>_BeforeUpdate(cancel As Integer)
If <condicion de validacion> Then
msgbox ("Error de validación")
Cancel = True
End If
End Sub

La linea Cancel=True me permite obligar al usuario que escriba el valor correcto.

En condiciones normales, al hundir la tecla Escape vuelve el campo a su condición anterior o lo deja en blanco si estaba vacío.

El problema es que en mi formulario, luego de mostrar el mensaje de error personalizado "Error de validación", me muestra otro mensaje de error pero este es propio del Access que dice "El valor del campo o registro infringe la regla de validación para el registro o campo". Le doy click en Aceptar, le doy Escape y el campo NO vuelve a su valor anterior, deja el erroneo y permite seguir con la digitación de los demás campos.

Yo no tengo definida ninguna regla de validación o algo que se le parezca.

Si sirve de algo, en este caso entra al evento Form_Error y pone el parámetro DataErr en 2116. En una situación normal no entra a este evento.
Además, trabajo con conexión ODBC a un motor de base de datos SQL Server 2000.

Qué podrá ser?

Agradezco la ayuda que me puedan dar.
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

RE:Problema con deshacer campo en un formulario

Publicado por JavoteBlas (1 intervención) el 10/08/2006 10:21:39
Parece que se salta la línea de código Cancel = True cuando entra en el evento Form_Error y ya no la ejecuta nunca, pero es algo raro. He probado a hacer un ejemplo y a mi me funciona correctamente. ¿Tendrá que ver con el formato que tiene ese campo?

Sólo se me ocurre escribir Cancel = True si se pulsa Esc, también en el evento Keypress .
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

Nueva pista sobre el caso

Publicado por Carlos Andrés (18 intervenciones) el 10/08/2006 21:02:53
JavoteBlas:

Al mencionar el formato, hice de nuevo pruebas y descubrí que el error que te menciono sólo pasa con campos de tipo texto.
En los campos de tipo numerico funciona bien. Es decir, en campos numéricos la línea Cancel=True se ejecuta y no entra al evento Form_Error con el DataErr en 2116, como mencioné.
En los campos de tipo texto sigue fallando. muestra mi error personalizado peri además muestra el estandar de Access "El valor del campo o registro infringe la regla de validación para el registro o campo" y no deshace el vamor digitado.
Espero que esta pista sirva de algo.
A propósito, la línea Cancel=True no es posible ponerla en el evento KeyPress pues Cancel no está definida como parámetro y saca error de que no reconoce la variable.
Te agradezco el aporte que me diste.
Y para todos espero que les sirva la observación y me colaboren.

Carlos Andrés
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

RE:Nueva pista sobre el caso

Publicado por JavoteBlas (3 intervenciones) el 11/08/2006 11:31:55
¿Has probado con código del estilo de éste?

Private Sub Form_Error(DataErr As Integer, Response As Integer)

Dim strMsg As String

If DataErr = 2116 Then
Response = acDataErrContinue
strMsg = "No vale lo que has escrito"
MsgBox strMsg
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
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