アクションクエリーの実行の中断を On Error で検出する方法 Hit Counter

対象バージョン :  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
 
 

補 足

 

改訂履歴


目次へ戻る