2012-06-26 14 views
11
this answerのコメントで

は、RemouはDoCmd.SetWarningsとCurrentDB.Executeの違いは何

CurrentDB.Execute "insert sql here"

が良くより

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

に起因していると書いているビルトインAccessが生成する警告。私はその違いを理解しようとしています。

エラーが両方ともマスクされている場合、最初のエラーはなぜ2番目のエラーより優先されますか?ここにベストプラクティスはありますか?

答えて

17

これらは両方ともエラーをマスクしません。 DoCmd.SetWarningsは、エラーをマスクし、システム全体であり、使用している単一のアプリケーションに限定されません。対応するDoCmd.SetWarnings TrueのないDoCmd.SetWarnings Falseは、アクションクエリがPCのAccessアプリケーションでプロンプトなしで実行されることを意味します。

Executeは、クエリの実行に失敗したなどの必要な警告を表示しますが、「このクエリを実行してもよろしいですか?」などの警告は表示されません。

In this threadアレン・ブラウン(Access MVP)は、「Set Warnings」は使用していないと言います。

Set db = CurrentDB 
db.Execute sSQL, dbFailOnError 
+0

あなたのコメントから:: 'なしで実行するにはさておき、私は一般的にそう、これはあなたが他のものの中で、レコード数を返すことができるようになりますよう、CurrentDBのインスタンスを使用することをお勧めしますよう

CurrentDBのインスタンスを使用してSQL文字列をExceuteすると、 '.Execute'は警告をスローしないと信じています。 – JimmyPena

+0

上記の編集を参照してください。 – Fionnuala

+3

これにアプローチする別の方法は、 'RunSql'から始めることです。最初に、ユーザがアクションクエリを実行することを確認し、その後に影響を受けるレコードの数に関するメッセージを表示する必要があります。人々はこれらのメッセージを抑制するために 'SetWarnings = False'を使います。しかし '[データベース] .Execute'はこれらのメッセージのいずれも表示しないので、' SetWarnings'をオフにする動機はありません。 Remouはすでにそれをすべて言った。私は誰かを助けるかもしれないオフチャンスについて別の言葉を使っているし、決して 'SetWarnings'をオフにしてはいけないという別の機会を与えようとしている! – HansUp

関連する問題