Какая разница между DoCmd.SetWarnings и CurrentDB.Execute

В комментариях к этому ответу Remou пишет, что

CurrentDB.Execute "insert sql here"

лучше, чем

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

из-за встроенных предупреждений, выдаваемых Access. Я пытаюсь понять разницу.

Если они оба маскируют ошибки, почему первый предпочтительнее второго? Здесь есть лучшие методы?

Ответ 1

Они не маскируют ошибки. DoCmd.SetWarnings маскирует ошибки и является системным, не ограничиваясь единственным используемым вами приложением. DoCmd.SetWarnings False без соответствующего DoCmd.SetWarnings True будет означать, что запросы действий будут выполняться без каких-либо подсказок в любом приложении Access на ПК.

Выполнение делает броски предупреждений, необходимые вам предупреждения, такие как запрос не удалось выполнить, но не дает предупреждений, которые вам могут не понадобиться, например "Вы уверены, что хотите запустить этот запрос".

В этом потоке Аллен Браун, Access MVP, говорит, что он не использует Set Warnings.

Как, в общем, я бы рекомендовал использовать экземпляр CurrentDB, так как это позволит вам вернуть число записей, среди прочего, так:

Set db = CurrentDB
db.Execute sSQL, dbFailOnError