Access - Error en campo vacío con regla de validación

   
Vista:

Error en campo vacío con regla de validación

Publicado por daniwolf (2 intervenciones) el 17/07/2014 11:22:44
Hola, tengo el siguiente problema en Access 2007:

He hecho un formulario independiente para dar de alta en la tabla correspondiente. Se meten todos los datos y después se inserta con un INSERT INTO. Algunos campos tienen regla de validación en el diseño de la tabla. Por ejemplo, el campo CODIGO POSTAL tiene puesto like "#####" , para obligar a introducir 5 cifras. En la tabla esa regla funciona correctamente. La porpiedad "Requerido" está a "No" y la propiedad "Permitir longitud cero" está a "Sí".
Al ejecutar la instrucción INSERT INTO, no da problema si se introducen datos en todos los campos. Pero si se deja vacío un campo de los que tienen regla de validación, entonces da el error:

Microsoft Access no puede anexar todos los registros de la consulta de datos anexados.

Microsoft Access ha establecido 0 campos en Nulo debido a un error en la conversión de tipos, y no ha agregado 0 registros a la tabla debido a infracciones de claves, 0 registros debido a infracciones de bloqueos y 1 registros debido a infracciones de reglas de validación.

--
Si quito todas las reglas de validación de los campos entonces funciona perfectamente.
He probado con y sin máscara de entrada en el Textbox correspondiente del formulario y da igual.
Tengo otro formulario identico pero dependiente, que inserta con un DoCmd.RunCommand acCmdSaveRecord y este no da ningún problema dejando los campos vacíos. Tampoco da problema dejándolos vacíos en la edición directa de la tabla.

Esta es la instrucción INSERT:

DoCmd.RunSQL "INSERT INTO Socios (N_SOCIO, [FECHA ALTA], NOMBRE, APELLIDOS, " & _
"DIRECCION, [CODIGO POSTAL], MUNICIPIO, EMAIL, TELEFONO1, TELEFONO2, EMPRESA, [DIRECCION EMPRESA], OBSERVACIONES) VALUES " & _
"ESTADO) VALUES ('" & Me.N_SOCIO & "', '" & Me.[FECHA ALTA] & "', '" & _
Me.NOMBRE & "', '" & Me.APELLIDOS & "', '" & Me.DIRECCION & "', '" & Me.[CODIGO POSTAL] & "', '" & _
Me.MUNICIPIO & "', '" & Me.EMAIL & "', '" & Me.TELEFONO1 & "', '" & Me.TELEFONO2 & "', '" & _
Me.EMPRESA & "', '" & Me.[DIRECCION EMPRESA] & "', '" & Me.OBSERVACIONES & "')"

(Las cajas de texto se llaman igual que los campos de la tabla)
Pido ayuda.

Muchas gracias.
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
Imágen de perfil de Neckkito

Error en campo vacío con regla de validación

Publicado por Neckkito (1104 intervenciones) el 22/07/2014 23:48:06
Hola!

Hasta donde yo sé lo que te está pasando es normal. El problema que tienes es que estás intentando trabajar con Access con un sistema B como si fuera un sistema A. Me explico:

El sistema A sería el "ortodoxo" de Access: tu creas tu tabla, configuras sus propiedades, te creas el formulario sobre la tabla y el usuario trabaja sobre ese formulario.

Con el sistema A digamos que Access "entiende" que si un campo se deja vacío es porque el usuario, conscientemente, lo quiere así. Por eso no te actúa la regla de validación.

Con el sistema B estás atacando a la tabla a través de una SQL de inserción de datos. Y en ese caso Access "entiende" que no se están añadiendo datos de manera "normal". Y es cuando cruza cables y dice: si no es "normal", ¿cómo puedo saber yo si los campos se han dejado vacíos a propósito? ¿O es un "error" de la Sql? Y, ante disyuntiva, tira por el camino de la prudencia, y dice: si hay regla de validación pues probablemente es porque debe haber datos. Si no los hay... pues error.

Evidentemente lo anterior es un poco metafórico (bueno, un poco mucho). En resumen, lo que debes tener claro es que si quieres utilizar el sistema A debes seguir unas reglas, y si quieres seguir el sistema B debes seguir otras. Y si quieres utilizar el sistema B, que es un sistema indirecto, no puedes configurar las propiedades de la tabla con reglas de validación, sino que ese trabajo lo tienes que programar tú en el formulario independiente y validar todos los datos que necesites ANTES de la ejecución de la SQL.

Son dos maneras de trabajar que, en algunos puntos, pues son incompatibles.

Por cierto, y como curiosidad, estás utilizando el método docmd.runsql. Eso hace que te salten los warnings de Access. Si no quieres que te salten esos warnings (cuando lo tengas todo adaptado al sistema definitivo con el que quieras trabajar) o bien utilizas:
...
docmd.setwarnings false
docmd.runsql ...
docmd.setwarnings true
....

o bien cambias de método, utilizando directamente:

currentdb.execute("laSql")

A ver si he conseguido aclarar algunas dudas ;)

Saludos,

http://neckkito.siliconproject.com.ar
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

Error en campo vacío con regla de validación

Publicado por daniwolf (2 intervenciones) el 23/07/2014 10:42:21
Muchisimas gracias Neckkito por tu respuesta. Ahora entiendo el funcionamiento en la mezcla de los dos sistemas. Pensaba que algo no funcionaba bien, y ahora veo que es que el SQL y el Access no se entienden "a la perfección".
Controlaré todos los campos en el formulario independiente.

Saludos !!!!!
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