No.1ベストアンサー
- 回答日時:
×ボタンでフォームやアクセス本体を閉じる時、まず、未保存の更新があると、フォームに関連付けたレコードセットに対して更新がかかります。
閉じる処理からレコードセットの更新ルーチンが呼ばれ、レコードセットの更新ルーチンからフォームのForm_BeforeUpdateが呼ばれます。ここでCancel=Trueにすると、更新がキャンセルされます。
フォームのForm_BeforeUpdateからキャンセルが返ると、レコードセットの更新ルーチンは「未保存の更新がある」と言うフラグをクリアしません。
「未保存の更新がある」と言うフラグが付いたまま閉じる処理に戻って来ると、閉じる瞬間に「レコードを保存することはできません」との警告が出てしまいます。
ですので「フォームのForm_BeforeUpdateが呼ばれる前に、フォームに関連付けたレコードセットに対してUndoを行って更新そのものが無かった事にして、未保存の更新があるフラグをクリアする」と言う事が必要です。
但し、この処理を入れると「最後の1レコード分のデータ入力を行ってから、レコードの更新をせず、レコードを移動せず、更新ボタンも押さず、いきなりフォームを閉じると、最後のデータ入力が全部パーになり消える」ので注意が必要です。Undoは「最後のデータ入力を全部パーにする命令」なので当然の話なのですが。
「フォームを閉じる際に、フォームのForm_BeforeUpdateで更新に対してキャンセルを返す」のが根本の原因ですので「フォームを閉じる際だけは、フォームのForm_BeforeUpdateで更新に対してキャンセルをしない」と言うのが「警告を出させない正しい方法」です。
この回答への補足
うーん、やってみたのですが、うまくいかなかったです。確かにUndoは機能しているのですが、Undoをした後でも同じメッセージがでました。
ありがとうざいます。
No.2
- 回答日時:
Cancel=True
というコードそのものを書かないことです。
私は、AfterUpdate() 等でチェックしています。
この場合、不具合レコードが発生することもあるでしょう。
そんな時は、Form_Close() に不具合レコードを削除するコードを書いたらどうですか?
CnnExecute "DELETE FROM XXXX WHERE XXXXXX"
なお、CnnExecute は自作関数です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) accessについて(超初心者です) 1 2023/02/11 11:18
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Access(アクセス) access レポート 請求書について 2 2022/07/04 22:52
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(ソフトウェア) YahooのIDがロックされてしまいました 1 2022/11/25 19:49
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
アクセス レコードセットを更新できません
その他(データベース)
-
-
4
ACCESSキャンセル時の確認メッセージを非表示に
Visual Basic(VBA)
-
5
accessの自動更新処理をできないようにするにはどうすれば良いですか?
その他(データベース)
-
6
Accessレコードの追加や変更が出来ません。
その他(データベース)
-
7
ACCESSフォーム入力後の確定
Access(アクセス)
-
8
アクセスでレコードの内容が変更されたかどうかを調べるには
Access(アクセス)
-
9
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
10
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
11
Accessでレコードの保存をせずにフォームを閉じたい
Access(アクセス)
-
12
「RunSQL」と「Execute」の違い
Access(アクセス)
-
13
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
14
フィルタ後のフォームの件数の取得の仕方
Access(アクセス)
-
15
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
-
16
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
17
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
18
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
19
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
20
Returnに対するGoSubがありません
Access(アクセス)
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードを保存するコード ア...
-
ACCESSでフォームを使って、テ...
-
Accessでレコードの保存をせず...
-
フィルタ後のフォームの件数の...
-
Accessで上の行を自動でコピー...
-
access2010 カウントアップマクロ
-
新規レコード行を非表示にしたい
-
アクセスでフォームビューがみ...
-
レコードをダブルクリックする...
-
アクセスでの警告について教え...
-
Access サブフォームにフィルタ...
-
Accessで新しいレコードに規定...
-
Access データのないフォーム...
-
レコードの移動
-
Access2010、値を入力したら自...
-
アクセス 前レコード内容を、...
-
accessのクエリで、該当するデ...
-
Access レコード移動時イベント...
-
AccessVBA RecordSourceのリセ...
-
Access2002_メソッドまたはデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードを保存するコード ア...
-
ACCESSでフォームを使って、テ...
-
アクセスでフォームビューがみ...
-
新規レコード行を非表示にしたい
-
フィルタ後のフォームの件数の...
-
アクセスの自動保存解除はでき...
-
Accessで上の行を自動でコピー...
-
Accessでレコードの保存をせず...
-
AccessVBA RecordSourceのリセ...
-
ACCESS起動時に所定フォームを...
-
レコード削除時に(サブ)フォー...
-
Access2010、値を入力したら自...
-
Accessで一件の新規レコードの...
-
Accessでフォーム上に 直前の...
-
ACCESSフォームのリストボック...
-
Access サブフォームにフィルタ...
-
Accessで新しいレコードに規定...
-
Accessでのデータ消滅に...
-
Access:フォームプロパティ「...
-
Access レコード移動時イベント...
おすすめ情報