アプリ版:「スタンプのみでお礼する」機能のリリースについて

【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にも新規レコードができるのでしょうか?

よろしくお願いします。

A 回答 (2件)

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



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

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

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

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

お礼日時:2014/12/16 11:45

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


その方がシンプルになると思います。

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

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

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

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

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

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

この回答への補足

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

よろしくお願いします。

補足日時:2014/12/16 10:43
    • good
    • 0

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