El error de validación en la consulta no produce ningún error, macro de MS Access 2003

He heredado un script que ejecuta e inserta registros de una base de datos en otra base de datos.

Todo parecía funcionar bien hasta hace unos días, cuando la gente se quejó de que no se extraía un registro de un sistema a otro.

Miré la macro que estaba configurada para ejecutarse con una tarea programada en Windows Server 2003. La macro envía su salida registrada a SQL Server, así que fui allí y busqué las declaraciones de registro apropiadas que decían que un empleado había sido insertado en la base de datos. Sin embargo, al pasar al otro sistema, el empleado que supuestamente fue trasladado e insertado, no se encontraba.

Luego de una inspección adicional, extrajo solo los campos que se estaban seleccionando de una base de datos, a la declaración de inserción que los agregó a la otra base de datos.

Cuando traté de insertar estos valores manualmente, recibí un error de SQL que no permitía que los campos fueran NULL o una cadena de longitud cero. Sin embargo, a pesar de la verificación de errores en el script,

Function SomeFunc
   On Error GoTo The_Err

   DoCmd.SetWarnings False ' This statement seems a bit suspect to me...maybe fields being
                           ' null or a zero length are just warnings?  Seems wrong because
                           ' I don't want a warning when my record will not be inserted, 
                           ' I want an error.

   ....

   DoCmd.OpenQuery "qryAddNewEmp_S1toS2", acViewNormal, acAdd ' This is the statement that
                                                              ' selects from the one db
                                                              ' and inserts into the other db

...

The_Exit:

    Exit Function

The_Err:
    ' MsgBox Error$ ' You can turn this on and off.
    dmsg = "Error AUCP"
    RunCheck dmsg, errArea, 0, 0
    DoCmd.SetWarnings True
    Resume The_Exit

End Function

¿Están desactivadas las advertencias de DoCmd.SetWarnings False evitar que se registren los errores? ¿También debería estar haciendo la validación en el código en su lugar, verificando cada uno de los valores? No me parece correcto, parece que eso es algo que debería ser responsabilidad de la base de datos, ya que la base de datos tiene eso incorporado.

preguntado el 28 de agosto de 12 a las 13:08

Por qué no debe establecer advertencias: stackoverflow.com/questions/11213892/… -

¿Que mas puedo decir? Este es un ejemplo típico de lo que no se debe hacer. -

1 Respuestas

En lugar de DoCmd.OpenQuery, utilice un enfoque como este ...

Dim db As DAO.Database
Set db = CurrentDb
db.Execute "qryAddNewEmp_S1toS2", dbFailOnError
Set db = Nothing

Entonces no tendrás por qué volverte. SetWarnings apagado (False). Y un INSERT el error será capturado por el código del controlador de errores y el error se registrará (suponiendo que RunCheck es un procedimiento personalizado que realiza el registro).

Respondido el 29 de diciembre de 12 a las 19:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.