
Accessでデータベースのレコード追加を行うフォームを作成しています。
コマンドボタン(1)をクリック→新しいレコードの追加
コマンドボタン(2)をクリック→フォームを閉じる
としています。(ウィザードを使用して、埋め込みマクロ?を設定しています。)
コマンドボタン(1)でレコードが追加されるのは問題ないのですが、
コマンドボタン(2)をクリックした場合も、レコードが追加されていることに気がつきました。
一般的に入力する人は、
データを追加しようと思って入力していたけれど、
途中でやめてフォームを閉じることってありますよね?
そういう場合にレコードが追加されてしまったら問題だと思ったのです。
ですが、どうしたらレコードの追加をせずにフォームを閉じられるかがわかりません。
それって可能でしょうか?
Access初心者です。難しいVBAとかはまだよくわかりません。
何か方法、アドバイス等ありましたら
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
フォームを閉じたときに保存されるのは仕様です
それ以外にAccessを終了したとき、レコードを移動したときにも保存されます
これらを完全にカバーするには、非連結のフォームにし
ボタンクリックでデータをテーブルに書き込むようにするか
作業用のテーブルから作ったフォームで入力し
ボタンクリックで本テーブルに転記するようにします
どちらにしてVBAが必要ですね、しかもへんなレコードを書き込もうとすると
コードが止まってしまいますから
転記前にデータの整合性を完全にチェックする必要があります
という訳でかなりきちんとしたコードが書けるスキルが必要ですね
お礼がおそくなりました。
Accessがそういうものだということで、
入力する人に周知しておくのがいいような気がしてきました。
ありがとうございました。
No.1
- 回答日時:
完全な対策はVBAでないと不可能です。
全く、VBA を書かないとすれば、コマンドボタンを増やすという手があります。
もちろん、{ESC}を2度押すようにしてもいいです。
Private Sub コマンド_フォームを閉じる_Click()
On Error Resume Next
DoCmd.Close
End Sub
Private Sub コマンド_レコードを復元_Click()
On Error Resume Next
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
End Sub
Private Sub コマンド_レコードを保存_Click()
On Error Resume Next
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
End Sub
これらのコマンドボタンをウィザードで生成すればいいです。
ただ、上の例では冗長なコードを消しているだけです。
これを応用して、
Private Sub コマンド_最後に編集したレコードを保存しないでフォームを閉じる_Click()
On Error Resume Next
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
DoCmd.Close
End Sub
しかし、これもレコード移動されていたんじゃどうしようもないです。
<tbl1>
ID___fld1___fld2
1____aaa1___bbbb
2____aaa2___null
しかし、こういうnull値を持つレコードの発生を完全に阻止するには、チェックして削除するしかないです。
Private Sub Form_Close()
On Error Resume Next
DoCmd.RunSQL "DELETE FROM tab1 WHERE LEN(fld2 & '')=0"
End Sub
VBと言っても、SQLの DELETE文を書くだけです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Access を×ボタンで閉じる時、レコード保存したくない。
Visual Basic(VBA)
-
accessの自動更新処理をできないようにするにはどうすれば良いですか?
その他(データベース)
-
Accessで、フォームに情報を入力途中で、やめる(レコードに保存しない)ということは出来ますか?
Access(アクセス)
-
-
4
新規レコード行を非表示にしたい
Access(アクセス)
-
5
コンボボックスで選択したものをクリアーしたい(アクセス VBA)
Access(アクセス)
-
6
Access2002 フォームを閉じるたびに「このフォームの変更を保存しますか?」と表示される
その他(データベース)
-
7
入力途中の入力した値をすべて削除する方法
その他(データベース)
-
8
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
9
アクセスのファイルが勝手に保存されるのはなぜ?
Access(アクセス)
-
10
Access サブフォームでの選択行の取得
その他(データベース)
-
11
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
12
access2010 コマンドまたはアクション''は無効です。について
その他(ソフトウェア)
-
13
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
14
ACCESS VBA でのエラー解決の根拠がわかりません エラー「イベントプロパティに指定した式・・
Access(アクセス)
-
15
DLookupがうまく出来ません
Access(アクセス)
-
16
ACCESSで条件によってフォーム上のフィールドの色を変更
Access(アクセス)
-
17
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
18
アクセスでレコードの内容が変更されたかどうかを調べるには
Access(アクセス)
-
19
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
20
Accessのフォームのみ表示させたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスでフォームビューがみ...
-
Accessでのデータ消滅に...
-
新規レコード行を非表示にしたい
-
アクセスのフォームで立ち上げ...
-
Accessで上の行を自動でコピー...
-
Access サブフォームにフィルタ...
-
レコードを保存するコード ア...
-
Accessで新しいレコードに規定...
-
Accessで一件の新規レコードの...
-
フィルタ後のフォームの件数の...
-
ACCESSフォームのリストボック...
-
異なるフォームに属する関数間...
-
ACCESS「ンボ ボックスで選択し...
-
ACCESS起動時に所定フォームを...
-
Access レポート印刷するときに...
-
MA ACCESSデータベースに詳しい...
-
ACCESSのレポートで、指定した...
-
データベースのINT型項目にNULL...
-
ACCESS──メインフォームでサブ...
-
Access(office)のマクロの「値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードを保存するコード ア...
-
新規レコード行を非表示にしたい
-
アクセスでフォームビューがみ...
-
アクセスの自動保存解除はでき...
-
AccessVBA RecordSourceのリセ...
-
ACCESSフォームのリストボック...
-
アクセス:フォーム入力で、最...
-
レコード削除時に(サブ)フォー...
-
Access:フォームプロパティ「...
-
レコードをダブルクリックする...
-
アクセス データの競合を非表...
-
Accessでフォーム上に 直前の...
-
Accessでレコードの保存をせず...
-
フィルタ後のフォームの件数の...
-
ACCESSでフォームを使って、テ...
-
ACCESS起動時に所定フォームを...
-
Accessで上の行を自動でコピー...
-
Access レコード移動時イベント...
-
Accessでのデータ消滅に...
-
Accessでチェックボックスで抽...
おすすめ情報