• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS レコードセット)

ACCESS レコードセットの更新方法とレコードの切り離し方

このQ&Aのポイント
  • 非連結フォーム(frm_B)のOPEN時にADOレコードセットでデータを表示させ、更新ボタンを押すと、追加クエリでそのフォーム上で表示されたデータをテーブル(tbl_B)に新規登録させ、さらにその非連結フォームには別のフォームの内容を表示させるVBAを書きましたが、最後に別のフォームの内容で非連結フォームにデータをセットしたとき?にテーブルのデータも更新されてしまいます。
  • フォームfrm_BをOPENすると、ADOレコードセットを使用してテーブルtbl_Bのデータを表示します。更新ボタンをクリックすると、追加クエリを実行して、そのフォーム上で表示されたデータをテーブルtbl_Bに新規登録します。さらに、別のフォームの内容を非連結フォームに表示します。しかし、別のフォームの内容で非連結フォームにデータをセットすると、テーブルのデータも更新されてしまいます。
  • フォームfrm_BのOPEN時にADOレコードセットを使用して、テーブルtbl_Bのデータを表示します。更新ボタンを押すと、追加クエリを実行し、フォーム上のデータをテーブルtbl_Bに新規登録します。さらに、非連結フォームには別のフォームの内容を表示させます。ただし、別のフォームの内容で非連結フォームにデータをセットすると、テーブルのデータも更新されてしまいます。どうすればテーブルのデータと切り離すことができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

No.1です。 補足欄について。 そもそも、なぜフォームを非連結にしているのでしょうか? いちいちフォームAの条件で絞った結果をフォームBのレコードソースにせずに、フィルタをかければいいのでは? そして、連結しておいて、追加処理を、 DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 で行えばいいのでは? その後で、新規レコードに移動して、フォームBの各コントロールに、フォームAの値をセットすればいいと思います。 セットしただけでは、まだ更新されていないので、ここで上記のコードを再び実行すれば、新規データとして登録されます。

ranarana
質問者

お礼

できました!そうか新規レコードに移動する処理をすればよかったんですね。 あとフィルターもレコードセットでSQL記述するよりずっと楽でした。今まで使った事がなかったので気づきませんでした。どうもありがとうございました。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 つまり、1つのフォームで複数のテーブルのデータ処理をしたいということでしょうか? それなら、各コントロールのControlSourceに設定せずに、非連結のままにしておき、クエリでテーブルに書き込んではどうでしょうか? それか、フォームを2つ用意して、それぞれのテーブルと連結しておくとか。 そして、更新ボタンクリックで、別のフォームを表示して、元のフォームを閉じればいいでしょう。

ranarana
質問者

補足

ありがとうございます。1つのフォーム(frm_B)で1つのテーブル(tbl_B)ということなんです。最初にレコードセットでレコードをフォームに表示させ、それでテーブルを1件追加処理(tbl_B)して、次に別のフォーム(frm_A)に表示されているデータをフォームに表示させて(frm_B)、テーブル(tbl_B)に別レコードとして登録しているんですが、最初に追加したレコードも一緒に更新されてしまうんです。私のレコードセットの解釈が間違っているんだとおもうんですが、煮詰まってしまいました。

関連するQ&A