- ベストアンサー
ACCESS レコードセットの更新方法とレコードの切り離し方
- 非連結フォーム(frm_B)のOPEN時にADOレコードセットでデータを表示させ、更新ボタンを押すと、追加クエリでそのフォーム上で表示されたデータをテーブル(tbl_B)に新規登録させ、さらにその非連結フォームには別のフォームの内容を表示させるVBAを書きましたが、最後に別のフォームの内容で非連結フォームにデータをセットしたとき?にテーブルのデータも更新されてしまいます。
- フォームfrm_BをOPENすると、ADOレコードセットを使用してテーブルtbl_Bのデータを表示します。更新ボタンをクリックすると、追加クエリを実行して、そのフォーム上で表示されたデータをテーブルtbl_Bに新規登録します。さらに、別のフォームの内容を非連結フォームに表示します。しかし、別のフォームの内容で非連結フォームにデータをセットすると、テーブルのデータも更新されてしまいます。
- フォームfrm_BのOPEN時にADOレコードセットを使用して、テーブルtbl_Bのデータを表示します。更新ボタンを押すと、追加クエリを実行し、フォーム上のデータをテーブルtbl_Bに新規登録します。さらに、非連結フォームには別のフォームの内容を表示させます。ただし、別のフォームの内容で非連結フォームにデータをセットすると、テーブルのデータも更新されてしまいます。どうすればテーブルのデータと切り離すことができるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 補足欄について。 そもそも、なぜフォームを非連結にしているのでしょうか? いちいちフォームAの条件で絞った結果をフォームBのレコードソースにせずに、フィルタをかければいいのでは? そして、連結しておいて、追加処理を、 DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 で行えばいいのでは? その後で、新規レコードに移動して、フォームBの各コントロールに、フォームAの値をセットすればいいと思います。 セットしただけでは、まだ更新されていないので、ここで上記のコードを再び実行すれば、新規データとして登録されます。
その他の回答 (1)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 つまり、1つのフォームで複数のテーブルのデータ処理をしたいということでしょうか? それなら、各コントロールのControlSourceに設定せずに、非連結のままにしておき、クエリでテーブルに書き込んではどうでしょうか? それか、フォームを2つ用意して、それぞれのテーブルと連結しておくとか。 そして、更新ボタンクリックで、別のフォームを表示して、元のフォームを閉じればいいでしょう。
補足
ありがとうございます。1つのフォーム(frm_B)で1つのテーブル(tbl_B)ということなんです。最初にレコードセットでレコードをフォームに表示させ、それでテーブルを1件追加処理(tbl_B)して、次に別のフォーム(frm_A)に表示されているデータをフォームに表示させて(frm_B)、テーブル(tbl_B)に別レコードとして登録しているんですが、最初に追加したレコードも一緒に更新されてしまうんです。私のレコードセットの解釈が間違っているんだとおもうんですが、煮詰まってしまいました。
お礼
できました!そうか新規レコードに移動する処理をすればよかったんですね。 あとフィルターもレコードセットでSQL記述するよりずっと楽でした。今まで使った事がなかったので気づきませんでした。どうもありがとうございました。