みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

本テーブルに変更内容を反映する方法

【Access 2013 VBA】

今、Workテーブルメイン、Workテーブルサブがあり、それをレコードソースにしたメインフォームとそのサブフォームがあります。
この画面で、サブの帳票のレコードを編集し、また、新規入力したものから
本になるテーブルのメインとサブに更新をする処理を作っています。

その更新先のレコードセットのSQLは以下のとおりです。
SQL = "SELECT "
SQL = SQL & "[SubTable].*, "
SQL = SQL & "[MainTable].* "
SQL = SQL & "FROM [SubTable] "
SQL = SQL & "LEFT JOIN [MainTable] ON "
SQL = SQL & "[SubTable].[ID] = [MainTable].[ID]"

この時、Recのフィールドの値を行進する時はいいのですが、
SubTableに新規レコードを追加する場合、
どのようにすれば良いのかわかりません。
普通にRec.AddNewとすると
上のMainTableにも新規レコードができるのでしょうか?

よろしくお願いします。

投稿日時 - 2014-12-15 15:44:37

QNo.8859210

すぐに回答ほしいです

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

> その場合には、更新されたかどうかを何らかの方法でフォームに持たせることは可能でしょうか?

本テーブルと比較するか、ワークテーブルに更新チェック用のフィールドを持たせるかですね。

ただ、面倒だし、それほどパフォーマンスには影響しないと思いますので(逆に遅くなる可能性もあり)、上書きでいいとおもいます。

投稿日時 - 2014-12-16 11:28:11

お礼

hatenaさん、いつもありがとうございます。

今、この質問と関連して、サブフォームでレコードを削除した場合について、別に質問をあげています。もし、可能でしたらアトバイスの方よろしくおねがいします。

投稿日時 - 2014-12-16 11:45:22

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

メインテーブルとサブテーブルを連結したものを更新するのではなく、それぞれ処理を分けましょう。
その方がシンプルになると思います。

まず、Workテーブルメインに更新があったら、MainTableを更新クエリかレコードセットを利用して更新します。

次に、WorkテーブルサブとSubTableを結合した更新クエリで、Workテーブルサブの更新をSubTableに反映させます。

さらに、WorkテーブルサブとSubTableの不一致クエリでWorkテーブルサブのみに存在するレコードを抽出して追加クエリにして、SubTableに追加します。

もし、Workテーブルサブで削除したレコードがあるなら、上記と逆の不一致クエリでSubTableのみに存在するレコードを抽出して、削除クエリにして削除します。

更新クエリ、追加クエリ、削除クエリではなく、レコードセットを利用して同様の処理をすることも可能です。

自分が得意の方で処理を作成すればいいでしょう。

投稿日時 - 2014-12-15 16:18:12

補足

ご回答ありがとうございます。
レコード数がそれほど多くないので、サブフォームの全レコードを本テーブルに上書きしてもいいのですが、念のため、変更されたフィールドだけを更新するという処理も考えています。その場合には、更新されたかどうかを何らかの方法でフォームに持たせることは可能でしょうか?

よろしくお願いします。

投稿日時 - 2014-12-16 10:43:30

あなたにオススメの質問