
accesで顧客データベースを作成しています。
「顧客リスト」テーブルを作り、そのテーブルを閲覧しやすいように「顧客リスト」フォームを作成しました。
また、フォーム上でデータの修正をした際、その修正内容を保存する為のコマンドボタンを取り付けました。
しかし、現在の状態では、そのコマンドボタンを押さなくても×印をクリックして閉じると自動的にデータの更新内容がテーブルに反映されてしまいます。
データを修正した際、保存用のコマンドボタンを押した場合にのみ、その修正内容がテーブルに反映されるようにするのにはどうしたら良いのでしょうか??
説明足らずかもしれませんが、ご存知の方教えてください。
ご回答宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
Access2000迄しかさわってないので、ヴァージョンによっては違ってくるかもしれませんが・・・
フォームでレコードソース・コントロールソースを指定している場合は、テーブルが直接編集可能です。なので、リンクしなければいいだけなのですが、その場合は、レコードの移動時に自力でフォームへ値を設定する必要があったり、テーブルとフォームに設定されている入力規則が同期が取れていない場合は、テーブルへ追加時にエラーが出たり(逆に2重にチェックが掛かったり)します。
また、非リンク時は入力途中でフォームやアクセス事態を閉じてしまった場合に、履歴が残っておらず、再度入力しなければならない状態になったりしますので、ダミーテーブルに入力し、コマンドボタンクリックで入力内容を反映さすような作りが無難かと思います。
この場合ですと、入力済みのデータ編集は、別フォームが必要になりますが^^;
1.「顧客リスト」テーブルを「顧客入力」テーブルという名前でコピーする。
2.「顧客入力」テーブルへ追加済みというフィールドを作成
3.「顧客リスト」フォームのレコードソースを「顧客リスト」テーブルから「顧客入力」テーブルへ変更
4.「顧客入力」テーブルから「顧客リスト」テーブルへデータを反映させる為のコマンドボタンを作成し、追加クエリ(入力からリストへ)・更新クエリ(追加済みフィールドを更新)を実行するように記述。入力履歴が必要ない場合は、削除クエリでも可(この場合は2.は必要なし)
他には、フォーム上で編集しても他のレコードに移動したり、閉じたりしない間はテーブルに移動されていませんので、レコード移動時や閉じる時のイベントで、編集をキャンセルする処理を書いてもいいかも・・・
どうもありがとうございます!
教えてくださったとおりに「顧客入力」テーブルを作成し、「顧客入力」テーブルから「顧客リスト」テーブルへデータを追加する追加クエリを作成しました。そして、「顧客入力」テーブルから「顧客リスト」テーブルへデータを反映させる為のコマンドボタンを作成しました。新規の顧客を登録する際には、これで大丈夫なのですが、既存のデータに修正をかける時にはどうしたら良いのでしょうか?既存データ修正用のフォームを別に作成したのですが、「顧客リスト」テーブルと非連結のフォームにすると既存のデータを抽出することができませんし、「顧客リスト」テーブルと非連結にしないと、閉じた時に自動的にデータが保存されてしまいます。VBAの知識がないのですが、VBAを使わない方法はありますか?また、もしVBAでなければできないのなら、どのようなコードをどこに書けば良いのでしょう?

No.4
- 回答日時:
VBAの知識は少し必要ですが、
フォーム1をコピぺし、フォーム2とする
フォーム2のレコードソースを消す。
フォーム2の各テキストボックスのデータを非連結にする。
フォーム2のインデックス(ID)が入っている所の編集ロックをかけておく。
フォーム1のコマンドボタンを押したときのイベントに
DoCmd.OpenForm "フォーム2"
Forms![フォーム2]![id] = Forms![フォーム1]![id]
Forms![フォーム2]![氏名] = Forms![フォーム1]![氏名]
Forms![フォーム2]![住所] = Forms![フォーム1]![住所]
と書いておくと
フォーム2をひらき、フォーム2の id,氏名,住所 と名前のついたテキストボックスにフォーム1の同じ名前のテキストボックスの値を入れます。 フィールドがたくさんあるときはループを使うこともできますが、割愛(省略)します。
フォーム2のレコードセレクタなどは非表示にしておくとうるさくなくて良いです。
詳しく教えてくださって、本当にどうもありがとうございました!!
早速試してみます。試行錯誤しながら作成していたのですが、これでできそうです!

No.3
- 回答日時:
いろんなやり方があると思いますが、一番手っ取り早いのが、
フォームの「更新の許可」「削除の許可」「追加の許可」を「いいえ」にしておく。
更新の際は、コマンドボタンなどで
別のフォーム(非連結)を開き、インデックス(レコードの識別情報)
と更新する可能性のあるフィールドの情報を渡す。
このフォームの内容を元テーブルに更新させるクエリを作り、コマンドボタンを押下したときに実行させるようにする。
別フォームについては原則的に最初のフォームをコピーしたものでかまわないが、
・非連結にする。
・インデックスを渡すテキストボックスは「編集ロック」をかけておかなくてはいけない。
・見た目で最初のフォームと違うようにしておくと、間違いがおきにくいと思う。
どうもありがとうございます!
フォームのプロパティで「更新の許可」「削除の許可」「追加の許可」を「いいえ」にしました。これで既存データへの入力を防ぐことができるようになりました。
「更新の際は、コマンドボタンなどで別のフォーム(非連結)を開き、インデックス(レコードの識別情報)と更新する可能性のあるフィールドの情報を渡す。」と教えてくださいましたが、「インデックス(レコードの識別情報)と更新する可能性のあるフィールドの情報を渡す」には具体的にどうしたら良いのでしょうか?教えてくださると嬉しいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Accessでレコードの保存をせずにフォームを閉じたい
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
アクセスの自動保存解除はできるか?
Access(アクセス)
-
4
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
5
アクセスVBAのMe!と[ ]
Access(アクセス)
-
6
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
7
Access を×ボタンで閉じる時、レコード保存したくない。
Visual Basic(VBA)
-
8
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
9
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
10
アクセスのファイルが勝手に保存されるのはなぜ?
Access(アクセス)
-
11
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
12
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
13
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
14
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
15
ACCESSでコントロールソースの変更
Access(アクセス)
-
16
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
17
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
18
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
19
ACCESS フォームをそのまま印刷について
その他(データベース)
-
20
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
accessの自動更新処理をできな...
-
5
アクセスのフォームのビューが...
-
6
Accessフォームのファイル名を...
-
7
Accessのフォームに表示...
-
8
アクセスでテーブルの変更内容...
-
9
ACCESSフォームでのレコード数...
-
10
Accessのフォームで作業領域を...
-
11
ACCESS レポートへの表示・非表示
-
12
写真入りデータベースの作成
-
13
Access フォーム上でコンボボッ...
-
14
Accessのフォーム上にレコード...
-
15
選択したチェックボックスのみ...
-
16
Accessが不良です
-
17
アクセス:フォームを閉じずに...
-
18
アクセス 0以外をカウントす...
-
19
他フォームのチェックボックス...
-
20
ACCESSで、フォームのレコード...
おすすめ情報
公式facebook
公式twitter