Access実践入門 TOPへ
 ■ マイクロソフトアクセス、削除選択フォームの一本化
1つの確認フォームを共通で使う
Ver1.0では削除の確認フォームをそれぞれに作っていますが、1つのフォームで処理する方法に変更します。

「fo削除選択」のデザインを開いてください。
メッセージを表示するラベルのプロパティを見てください。
[名前]が選択ラベルになっています。

次に、フォーム全体のプロパティを見てください。
[開く時]のプロシージャの見てください。

Select Case delmode
Case 1
    Me.選択ラベル.Caption = "この勤務先データを削除します"
Case 2
    Me.選択ラベル.Caption = "この住所録データを削除します"
Case 3
    Me.選択ラベル.Caption = "この進物データを削除します"
Case 4
    Me.選択ラベル.Caption = "この区分データを削除します"
Case 5
    Me.選択ラベル.Caption = "この和暦データを削除します"
End Select

delmode という変数を使っています。
プログラム全体から参照できる、変数として、モジュールの先頭で変数の宣言をしていますので、後で確認しておいてください。
次のように書いています。

 Public delmode As Integer  '削除データのチェック
                    '1=勤務先削除
                    '2=住所録削除
                    '3=進物削除
                    '4=区分削除
                    '5=和暦削除


では、[開く時]のプロシージャですが、Select Case の条件式を使っています。
Caption とは、[標題]のことです。


このフォームを呼び出す側で、変数に数値を入れてから呼び出しています。
たとえば、勤務先入力のフォームから呼び出すときに、次のように書いています。



ここでは、delmodeは1が入っていますから、ラベルの[標題]は、"この勤務先データを削除します"が入ります。


「削除する」ボタンの[クリック時]のプロシージャを見てください。

Select Case delmode
        Case 1
         DoCmd.OpenQuery "qu勤務先削除"
         DoCmd.Close
         DoCmd.ShowAllRecords
        Case 2
         If DCount("住所録番号", "ta進物", "[住所録番号]='" & Form_fo住所録入力.住所録番号 & "'") <> 0 Then
          MsgBox ("進物データが存在するので削除できません。")
          DoCmd.Close
          Exit Sub
         Else
          DoCmd.OpenQuery "qu住所録削除"
          DoCmd.Close
          DoCmd.Close
          DoCmd.ShowAllRecords
         End If
        Case 3
         DoCmd.OpenQuery "qu進物削除"
         DoCmd.Close
         DoCmd.Close
         DoCmd.ShowAllRecords
        Case 4
         DoCmd.OpenQuery "qu区分削除"
         DoCmd.Close
         DoCmd.ShowAllRecords
        Case 5
         DoCmd.OpenQuery "qu和暦削除"
         DoCmd.Close
         DoCmd.ShowAllRecords
End Select

Ver1.0では各マクロに書いてあったものを、プロシージャで書いています。
Case 2 の住所録のデータを削除するときに、1つ処理を入れてあります。
進物データにその人のデータが存在した場合に、リレーションシップが登録されているため、エラーが出て、削除できません。
エラーの画面を出さないで、事前に処理を中止させるようにしています。
DCount()関数で、テーブルのデータを検索しています。
検索結果がゼロでなければ、削除はできません。

勤務先と、区分にも住所録データで使われているかどうか調べる、このような処理を追加する必要があるでしょう。(サンプルではしていません)