
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も見ています
-
Access を×ボタンで閉じる時、レコード保存したくない。
Visual Basic(VBA)
-
アクセスのファイルが勝手に保存されるのはなぜ?
Access(アクセス)
-
アクセスの自動保存解除はできるか?
Access(アクセス)
-
-
4
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
5
Access 更新キャンセルするには?
Access(アクセス)
-
6
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
7
Accessのリンクされたテーブルでリンク先ではデータを変更出来ないようにするには?
Access(アクセス)
-
8
Accessでレコードの保存をせずにフォームを閉じたい
Access(アクセス)
-
9
アクセスのフォームのビューが表示されないのですが、
その他(データベース)
-
10
どこにもフォーカスを当てたくない
Access(アクセス)
-
11
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
12
親・子リンクフィールドの設定は、どうすればよいのでしょうか。
その他(Microsoft Office)
-
13
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
14
新規レコード行を非表示にしたい
Access(アクセス)
-
15
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
16
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
17
Access サブフォームでの選択行の取得
その他(データベース)
-
18
Accessレポートのチェックボックスを大きくする方法
Access(アクセス)
-
19
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
20
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのフォームからデータの...
-
アクセスでテーブルの変更内容...
-
ADOでRecordsetオブジェクトを...
-
アクセスのフォームのビューが...
-
Access 別フォームへの再クエ...
-
選択したチェックボックスのみ...
-
Accessのフォーム画面について
-
テキストボックスの値をテーブ...
-
ACCESS フォームにデータ入力で...
-
ACCESSで入力フォームをHTMLフ...
-
「メソッドまたはデータメンバ...
-
ACCESSフォームでのレコード数...
-
Accessのフォーム上にレコード...
-
Accessのフォームで作業領域を...
-
アクセスでのチェックリスト
-
アクセスでの項目追加について...
-
Accessフォームのテキストボッ...
-
「バインド」、「ドッキング」...
-
Access2002 フォームを閉じるた...
-
ACCESS初心者です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフォーム上にレコード...
-
選択したチェックボックスのみ...
-
ACCESSのフォームからデータの...
-
アクセスでテーブルの変更内容...
-
accessの自動更新処理をできな...
-
Access 別フォームへの再クエ...
-
アクセスのフォームのビューが...
-
アクセスでの項目追加について...
-
「メソッドまたはデータメンバ...
-
テキストボックスの値をテーブ...
-
Accessのハイパーリンクのパス...
-
Accessフォームのテキストボッ...
-
アクセス非連結フォームのテキ...
-
アクセス 0以外をカウントす...
-
ADOでRecordsetオブジェクトを...
-
Accessのフォームで作業領域を...
-
Access フォーム上でコンボボッ...
-
Accessのフォームに表示...
-
[至急]accessクエリ結果を入力...
-
Access2002 フォームを閉じるた...
おすすめ情報