Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Pro : Microsoft 365)
連鎖削除を設定したリレーションシップ
投稿日時: 25/10/21 10:45:51
投稿者: kazz

お世話になります。
 
あるテーブル間のリレーションシップで参照整合性と連鎖削除に
チェックを入れています。
 
フォーム上で親レコードを削除しようとすると、下記のメッセージが表示されます。
「このリレーションシップには参照整合性の連鎖削除が設定されているため〜」
 
このメッセージを表示させず、MsgBoxでオリジナルのメッセージを
表示することは可能ですか?
 
ご教示お願い致します。

回答
投稿日時: 25/10/21 14:23:10
投稿者: sk

引用:
フォーム上で親レコードを削除しようとすると、下記のメッセージが表示されます。
「このリレーションシップには参照整合性の連鎖削除が設定されているため〜」

とりあえず「レコードセレクタによって連結フォームのカレントレコード全体を選択し、
Delete キーのクリック、または[削除]コマンドの呼び出しといった操作によって
そのレコードを削除しようとしている」と仮定した場合、
 
引用:
このメッセージを表示させず、MsgBoxでオリジナルのメッセージを
表示することは可能ですか?

そのフォームの BeforeDelConfirm イベントの発生時に
第 2 引数 Response に定数 acDataErrContinue (値 0 )を
渡した上、任意の確認ダイアログを表示させる MsgBox 関数を呼び出し、
その戻り値に応じて第 1 引数 Cancel に True を渡すよう、
適宜フロー制御を行なえばよろしいでしょう。
 
Microsoft Learn より:
https://learn.microsoft.com/ja-jp/office/vba/api/access.form.beforedelconfirm(even)
 
moug 即効テクニックより:
https://www.moug.net/tech/acvba/0110018.html

投稿日時: 25/10/22 13:45:06
投稿者: kazz

skさん、ありがとうございます。
下記でオリジナルメッセージボックスを表示することができました。
 
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Dim strMsg As String
    Dim intMsgbox As Integer
 
    Response = False
    strMsg = "削除?"
    intMsgbox = MsgBox(strMsg, vbYesNo)
 
    If intMsgbox = vbNo Then
        Cancel = True
    End If
End Sub
 
ついでの質問になってしまうのですが、
メッセージボックスで削除?と表示された時に、削除の対象フォームのレコードに
#deleted と表示されます。表示させない方法はありますか?
よろしくお願いします。

トピックに返信