Sql 查询中的验证错误不会产生错误,MS Access 2003宏

Sql 查询中的验证错误不会产生错误,MS Access 2003宏,sql,ms-access,vba,ms-access-2003,Sql,Ms Access,Vba,Ms Access 2003,我继承了一个脚本,该脚本运行并将记录从一个数据库插入另一个数据库 直到几天前,人们抱怨没有将一张唱片从一个系统拉到另一个系统,一切似乎都很正常 我查看了设置为在Windows Server 2003上与计划任务一起运行的宏。宏将其记录的输出发送到SQL Server,因此我在那里查找了相应的日志语句,其中读取了已将一名员工插入数据库的消息。然而,当前往另一个系统时,据报被调任和插入的雇员不在那里 进一步检查后,只将从一个数据库中选择的字段拉入insert语句,insert语句将这些字段添加到另一

我继承了一个脚本,该脚本运行并将记录从一个数据库插入另一个数据库

直到几天前,人们抱怨没有将一张唱片从一个系统拉到另一个系统,一切似乎都很正常

我查看了设置为在Windows Server 2003上与计划任务一起运行的宏。宏将其记录的输出发送到SQL Server,因此我在那里查找了相应的日志语句,其中读取了已将一名员工插入数据库的消息。然而,当前往另一个系统时,据报被调任和插入的雇员不在那里

进一步检查后,只将从一个数据库中选择的字段拉入insert语句,insert语句将这些字段添加到另一个数据库中

当我试图手动插入这些值时,我收到一个SQL错误,即字段不允许为NULL或长度为零的字符串。但是,尽管在脚本中进行了错误检查

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
是否从DoCmd.SetWarnings False关闭警告,以防止记录错误?我是否应该在代码中进行验证,检查每个值?在我看来,这是不对的,这似乎是数据库应该负责的事情,因为数据库已经内置了它。

使用这样的方法代替DoCmd.OpenQuery

Dim db As DAO.Database
Set db = CurrentDb
db.Execute "qryAddNewEmp_S1toS2", dbFailOnError
Set db = Nothing
那么您就没有理由将SetWarnings关闭为False。插入失败将被错误处理程序代码捕获,并且错误将被记录,假设RunCheck是一个进行日志记录的自定义过程。

使用如下方法代替DoCmd.OpenQuery

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

那么您就没有理由将SetWarnings关闭为False。插入失败将被错误处理程序代码捕获,并且假设RunCheck是一个进行日志记录的自定义过程,则会记录错误。

为什么不应设置警告:我还能说什么?这是一个典型的不该做什么的例子。为什么不应该设置警告:我还能说什么?这是一个典型的不该做的例子。