繁体   English   中英

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

[英]Validation Error in Query yields no error, MS Access 2003 macro

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

直到几天前,当人们抱怨没有将记录从一个系统拉到另一个系统时,一切似乎都工作正常。

我查看了设置为在Windows Server 2003上与计划任务一起运行的宏。该宏将其记录的输出发送到SQL Server,因此我去了那里,寻找了适当的日志语句,该语句读取了一名员工已插入数据库。 但是,当转到另一个系统时,据报告已转移并插入的员工不在那儿。

经过进一步检查,仅将从一个数据库中选择的字段拉到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

这样您就没有理由关闭SetWarningsFalse )。 并且您的错误处理程序代码将捕获INSERT故障,并将记录错误(假设RunCheck是执行记录的自定义过程)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM