Microsoft Access 掲示板

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

9 コメント
views
4 フォロー
5
hiroton 2020/12/25 (金) 15:34:54 ca77e@f966d

とりあえず
フォームの状態を知るには?(T'sWareさん)

質問のコードを次のように変更すれば動作はすると思います

  DoCmd.OpenForm "F_部品"
↓
  If SysCmd(acSysCmdGetObjectState, acForm, "F_部品") <> 0 Then
(中略)
  End If

フォームが開いているかどうかをチェックし、開いているときに限りDirtyプロパティをチェックすれば良いということですね


根本的にデータ更新タイミングなどが間違っているということでしょうか

データの更新自体は様々なタイミングで発生します。フォームを閉じるというアクションを取った場合は、Closeイベントの前にBeforeUpdateイベントが発生し、BeforeUpdateイベントが終わると保存内容が決定されます
(実際にはもっと様々なイベントが発生します)

イベントは1つのアクションに対して連鎖的に複数発生する場合があるので、どのイベントで処理するか適切に判断する必要があります

Closeイベントの時点ではすでにデータが決定されてしまっているので、そこで保存するかどうかの確認や、再度データを変更・保存しなおすような処理はすべきではありません

「データの更新処理が済んでないうちはフォームを閉じる処理をしてはいけない」という意味で、修正しようとした内容よりも質問時点でのコードのほうが考え方が正しいです

通報 ...