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

在这个答案的评论中,雷穆写道

CurrentDB.Execute "insert sql here"

比…更好

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

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

如果他们都掩盖了错误,为什么第一个比第二个好? 这里有最佳做法吗?

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

执行不会抛出警告,您需要的警告,如查询失败,但不会给出您可能不需要的警告,如“您确定要运行此查询”。

在这个线程中 ,Access MVP的Allen Browne说他没有使用Set Warnings。

顺便说一下,我通常会推荐使用CurrentDB的一个实例,因为这将允许您返回一个logging计数,其中包括:

 Set db = CurrentDB db.Execute sSQL, dbFailOnError