Microsoft Access 掲示板

フォームを閉じる際のDirty処理につきまして / 1

9 コメント
views
4 フォロー
1

これで、うっかりデータを変更しちゃってフォームを閉じちゃった際にも、
データ変更云々のメッセージを表示できるようになりました。

そもそも、これが勘違いではないでしょうか。
フォームを閉じる時に、もしレコードが更新されていたら、自動的に保存されて、Dirtyプロパティはリセットされます。
DoCmd.OpenForm "F_部品" で開いた直後、DirtyプロパティはFalseになっているはずです。

もし、「データ変更云々のメッセージを表示」のメッセージが出るなら、フォームを開く時、読み込み時、レコード移動時、、などで、レコードを更新する処理が記述されていることになります。

通報 ...
  • 2
    ゲッキョク駐車場 2020/12/25 (金) 08:57:15 修正 cb55f@f6500 >> 1

    お早いご返信、ありがとうございます。
    前に1度、部品フォームを変えてから閉じて、メインフォームを閉じようとしたら閉じれなかった
    と他の人から連絡を受けたため、このような形になっていました。
    しかし、考えてみると、確かにご指摘通りへんてこりんですね…。
    申し訳ありません。
    MSGBOXの出現も、いろいろ試したところ、フォーム開きっぱなしの時だけでした。

    部品フォームを閉じるときに、以下のようにすれば問題ないでしょうか…?

    Private Sub Form_Close()
    
      If Me.Dirty Then
        If MsgBox("データが変更されています。保存して終了しますか?", vbYesNo) = vbNo Then
          Exit Sub
    
        Else
          Me.BeforeUpdate = ""  'キャンセル無効
          DoCmd.RunCommand acCmdSaveRecord
          'DoCmd.RunCommand acCmdRefresh
          Me.BeforeUpdate = "[イベント プロシージャ]"  'キャンセル有効
    
          Call UserLog("MNFCT", "Update")
        End If
      End If
    End Sub
    

    以上、よろしくお願いいたします。