Accessのフォームからレコードを削除しようとすると、次のような順番でイベントが発生します。
- Delete/レコード削除時イベント
Deleteキーなどの操作によって、レコードが削除されようとしたときに発生します。
レコードが実際に削除される前に発生するもので、この時点ではまだ削除はされていません。
- BeforeDelConfirm/削除前確認イベント
削除されようとしているレコードが画面上から消えたあとで、かつ削除確認のメッセージが表示される前に発生します。
このイベントプロシージャの引数を利用することによって、削除確認のメッセージをスキップさせたり、オリジナルの確認メッセージを表示させたりすることができます。
- AfterDelConfirm/削除後確認イベント
レコードが実際に削除された後、確認メッセージ等で削除がキャンセルされたときに発生します。
このイベントプロシージャの引数を確認することによって、実際に削除されたかどうかの確認を行うことができます。
さて、このようなレコードの削除処理においては、Accessにすべてを任せて、既定の削除確認メッセージで削除するかどうかをユーザーに求めてもよいのですが、どのようなデータを削除しようとしているかもメッセージボックスに表示したい場合があります。たとえば「得意先名○○○○○のデータを削除します。よろしいですか?」といった表示をしたい場合です。
ところが、通常このようなオリジナルの確認メッセージは「BeforeDelConfirm/削除前確認」イベントプロシージャを利用しますが、その時点ではすでにそのレコードが画面から消えてバッファに格納された状態になっているため、そのレコードのフィールドのデータ内容を取得することができません。
そのようなときに使えるひとつの方法です。
次のサンプルコードでは、まず「Delete/レコード削除時」イベントプロシージャで、削除されようとしているレコードのフィールドの値を取得し、Publicな変数に代入しておきます。そして「BeforeDelConfirm/削除前確認」イベントプロシージャでは、その変数を参照することによってフィールドのデータ内容を含めた確認メッセージを表示しています。
なお、複数のレコードが範囲選択されている可能性もありますので、その場合も考慮したコードとなっています。複数レコードを削除しようとしたときには、Delete/レコード削除時イベントはそれらのレコード1つごとに複数回発生し、他の二つのイベントは1回だけ発生します。
Private pvarDelData As Variant
Private Sub Form_AfterDelConfirm(Status As Integer)
'フォームのレコード削除後確認
'次の削除操作に備えてPublic変数を初期化
pvarDelData = Null
End Sub
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
'フォームのレコード削除前確認
'既定の削除確認メッセージを表示しない
Response = acDataErrContinue
'オリジナルの削除確認メッセージを表示する
Beep
If MsgBox(pvarDelData & "のデータを削除します。よろしいですか?", _
vbYesNo + vbQuestion) = vbNo Then
Cancel = True
End If
End Sub
Private Sub Form_Delete(Cancel As Integer)
'フォームのレコード削除時
'削除レコードの得意先名をPublic変数に保存
pvarDelData = pvarDelData & Me!得意先名 & vbCrLf
End Sub
実行例:
■一つのレコードを削除する場合



■複数のレコードを削除する場合



|