アクションクエリーの実行の中断を On Error で検出する方法 |
対象バージョン : 97, 2000(MDB), 2002(MDB), 2003(MDB)
最終更新日 : 2005/04/25
(オリジナル作成日:1998/11/11)
概 要
プロシージャで、アクションクエリーを DoCmd.OpenQuery で開いる最中に、[Ctrl] + [Break] での中断を On Error で検出する方法です。
解 説
通常のクエリーの実行では、内部処理ルーチンが [Ctrl] + [Break] を横取りし、これらを実行しているプロシージャには届きません。
このため、内部処理ルーチンの外部へ一次的に制御を移すために、クエリーやSQLの中からプロシージャを呼び出させるようにします。
この方法として、クエリーやSQLのそのもの処理に影響が少ない Where
条件を利用します。
抽出条件でプロシージャを使用した場合、実行時の最適化により、引数のないプロシージャは返される値に変化が無いものとみなされ、初回に一回しか呼び出されなくなります。
このため、今回紹介する方法では、処理途中でも参照しやすいフォームオブジェクトを
"仮の" 引数として与えています。
クエリーを実行している時に開いているフォームがなければ、フォームを開くことによって処理に影響を及ぼさないものであれば、どのフォームでも結構です。
この処理にための専用の白紙のフォームを作っておいた方が後で分かりやすいかもしれません。
以下で示している例は、クエリーの実行中に開いているフォームが無いと仮定し、Form1 というフォームを利用する方法です。
1.簡単なプロシージャを標準モジュールに作成します。
Public Function DummyCall(argDummy) As Boolean DummyCall = True End Function
2.アクションクエリーの対応
対象のクエリーに、次のような演算フィールドを追加します。
フィールド:|式1 :DummyCall([Forms]![Form1]) 抽出条件:|True
このクエリーを呼び出す方法は、以下のとおりです。
On Error Query_Interruption DoCmd.OpenForm "Form1", , , , , acHidden DoCmd.OpenQuery "クエリー名" DoCmd.Close acForm, "Form1" ' 引き続き何らかの処理 ・・・ Exit Function Query_Interruption: MsgBox "Interrupted!" DoCmd.Close acForm, "Form1" Exit Function
補 足
改訂履歴