DoCmd.SetWarnings和CurrentDB.Execute之间有什么区别

Jim*_*ena 13 sql error-handling ms-access vba access-vba

在对这个答案的评论中,Remou写道

CurrentDB.Execute "insert sql here"

比...更好

DoCmd.SetWarnings = 0
DoCmd.RunSQL "insert sql here"

由于Access产生的内置警告.我试图了解其中的差异.

如果它们都掩盖了错误,为什么第一个优先于第二个呢?这里有最好的做法吗?

Fio*_*ala 18

它们不会掩盖错误.DoCmd.SetWarnings掩盖错误并且是系统范围的,不限于您正在使用的单个应用程序.DoCmd.SetWarnings False没有相应的 DoCmd.SetWarnings True意味着操作查询将在PC上的任何Access应用程序中没有任何提示的情况下运行.

执行会抛出警告,您需要的警告,例如查询无法执行,但不会发出您可能不需要的警告,例如"您确定要运行此查询".

在这个帖子中,访问MVP的Allen Browne表示他没有使用Set Warnings.

顺便说一句,我通常建议使用CurrentDB的实例,因为这将允许您返回记录计数,以及其他内容:

Set db = CurrentDB
db.Execute sSQL, dbFailOnError
Run Code Online (Sandbox Code Playgroud)

  • 解决这个问题的另一种方法是从`RunSql`开始.它首先要求用户确认她想要执行操作查询,然后显示有关之后受影响的记录数的消息.人们使用`SetWarnings = False'来抑制这些消息.但是`[database] .Execute`不会出现这些消息,所以没有动机将'SetWarnings`关闭.Remou已经说了这么多.我正在使用不同的词语,它可能会对某人有所帮助,同时也给自己另一个机会说不要把'SetWarnings'关掉! (3认同)
  • 说的越多越好.要向人们传达致命的SetWarnings是多么困难. (2认同)