我继承了一个脚本,该脚本运行并将记录从一个数据库插入另一个数据库。
几天前,当人们抱怨记录没有从一个系统被拉到另一个系统时,一切似乎都运转良好。
我查看了设置为在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
关闭,以防止记录错误?我也应该只是在代码中进行验证,检查每个值?这对我来说似乎不对,似乎这应该是数据库的责任,因为数据库已内置。
答案 0 :(得分:0)
而不是DoCmd.OpenQuery
,请使用这样的方法......
Dim db As DAO.Database
Set db = CurrentDb
db.Execute "qryAddNewEmp_S1toS2", dbFailOnError
Set db = Nothing
然后您没有理由关闭SetWarnings
(False
)。并且错误处理程序代码将捕获INSERT
失败,并将记录错误(假设RunCheck
是执行日志记录的自定义过程。)