プロが教えるわが家の防犯対策術!

非連結フォーム(frm_B)のOPEN時にADOレコードセットでデータを表示させ、更新ボタンを押すと、追加クエリでそのフォーム上で表示されたデータをテーブル(tbl_B)に新規登録させ、さらにその非連結フォームには別のフォームの内容を表示させるVBAを書きましたが、最後に別のフォームの内容で非連結フォームにデータをセットしたとき?にテーブルのデータも更新されてしまいます。最初にテーブルに追加したデータとは切り離したいのですがどうすればうまくいくのでしょうか。
・フォームfrm_BをOPEN
'DAOレコードセット
Dim dbDAO As DAO.Database
Dim rsDAO As DAO.Recordset
Dim stSQL As String

stSQL = "SELECT No.,規格No.,改訂No. FROM tbl_B " _
& "WHERE 規格No. ='" & Forms![frm_A].[規格No.] & "'" _
& "AND 改訂No. =" & Forms![frm_A].[改訂No.] & ""

'DAOレコードセット
Set dbDAO = CurrentDb
Set rsDAO = dbDAO.OpenRecordset(stSQL)
Set Me.Recordset = rsDAO

Me![No.].ControlSource = "No."
Me![規格No.].ControlSource = "規格No."
Me![改訂No.].ControlSource = "改訂No."

'DAOレコードセットクローズ
Set rsDAO = Nothing
Set dbDAO = Nothing

・更新ボタンクリック
Private Sub cb_kaitei_Click()
Dim stDocName As String

  '追加クエリ
stDocName = "q_B"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Forms![frm_B].SetFocus
Me![No.] = Forms![frm_A].[No.]
Me![規格No.] = Forms![frm_A].[規格No.]
Me![改訂No.] = Forms![frm_A].[改訂No.]

このときにレコードセットで追加したレコードのほうも更新されてしまいます。これを別のレコードと判断させたいのです。よろしくお願いします。

A 回答 (2件)

No.1です。



補足欄について。
そもそも、なぜフォームを非連結にしているのでしょうか?
いちいちフォームAの条件で絞った結果をフォームBのレコードソースにせずに、フィルタをかければいいのでは?
そして、連結しておいて、追加処理を、

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

で行えばいいのでは?
その後で、新規レコードに移動して、フォームBの各コントロールに、フォームAの値をセットすればいいと思います。
セットしただけでは、まだ更新されていないので、ここで上記のコードを再び実行すれば、新規データとして登録されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/06/30 13:15

こんにちは。

maruru01です。

つまり、1つのフォームで複数のテーブルのデータ処理をしたいということでしょうか?
それなら、各コントロールのControlSourceに設定せずに、非連結のままにしておき、クエリでテーブルに書き込んではどうでしょうか?

それか、フォームを2つ用意して、それぞれのテーブルと連結しておくとか。
そして、更新ボタンクリックで、別のフォームを表示して、元のフォームを閉じればいいでしょう。

この回答への補足

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

補足日時:2004/06/30 09:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A