次の方法で共有

メインテーブルと連結しているサブテーブルの特定データを一緒にコピー(INSERT)したい

Anonymous
2020-10-04T12:34:55+00:00

登録されているマスターデータを受注データにコピーしたいです。

その際に連結している1:多のサブテーブルの情報も一緒にコピーしたいのですが

コピーしたいのですが、どうしたら良いでしょうか?

例)

メニューマスターテーブル (コピー元)

メニューID  品名    基本単価

1             クッキー   300

2             パフェ    850

3             クレープ        500

工程サブマスターテーブル (コピー元)

工程ID  メニューID  工程        標準時間

1             1              混ぜる     5

2           1              焼く              20

3             1              袋詰め          10

4             2              アイス乗せ      5

5             2              クリーム乗せ  3

6             3              生地焼く    5

7     3              クリーム乗せ     3

受注テーブル (マスターテーブルAからのコピー先)

入力されたメニューIDがマスターと一致する場合単価データをコピーしたい。

参照でなくコピーするのは販売単価はその時により変わるため。

ただし基本単価は一度コピーしたい。

オートNo

受注ID  メニューID  単価  受注日

1           2      850    2020/9/30  

2              3      450    2020/10/2

3                2                      800       2020/10/5

工程テーブル (マスタテーブルBからのコピー先)

受注入力と連結されているテーブル。

メニューIDが入力され、マスターデータがコピーされた際に一緒にサブマスターテーブルBから

紐づく工程データをコピーしたい。(このテーブルも後で時間や工程をマスターと切り離して変更する

可能性があるため参照ではなくコピーしておきたい)

オートNo

実施工程ID   受注ID  工程                    実施日    時間

1        1        アイス乗せ      

2                   1             クリーム乗せ

3                   2            生地焼く   

4                 2              クリーム乗せ   

5              3        アイス乗せ      

6                   3             クリーム乗せ 

例が分かりづらくすみません。

困っていることはInsertを使って新規受注を入れた際に、マスターの金額をコピーするところはできたのですが、

その時にInsertされた受注ID(オートナンバー)が分からず、受注IDに紐づいた工程データをマスターからInsertで

コピーする方法が分からず困っています。

ご教授のほどよろしくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2020-10-05T08:58:54+00:00

> そこでdaoを使って.AddNew → .Update → .Bookmark = .LastModified → 受注IDを取得・格納

> このとき.Bookmark=.LastModifiedは複数人で使用している場合、挿入した新規レコードと異なる場合が

> ありますでしょうか。

ありません。

(他のユーザーによるレコードの追加/変更操作の影響を受けないし、

そもそもブックマーク自体がそういう性質の情報ではない)

> DoCmd.SetWarnings False

> DoCmd.RunSQL strSQL_MK

> DoCmd.SetWarnings True

この部分に関しては、DoCmd オブジェクトの RunSQL メソッドではなく

DAO.Database オブジェクト(コード上では daoDB )の

Execute メソッドによって SQL を実行するようにされた方がよいと思います。

(トランザクション制御の必要があるのであれば)

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2020-10-05T04:23:32+00:00

> 教えていただいたクエリの場合は、工程テーブルにない受注IDを

> 受注テーブルから抽出し、そのIDを使って工程テーブルにInsertする

> という考え方で合っていますでしょうか?

  1. [受注テーブル]に新規レコードを追加する INSERT INTO 文

   (既に作成されている処理)を実行する。

  1. [受注テーブル]と[工程サブマスターテーブル]とを

   [メニューID]同士で内部結合する。

  1. 2 の結果のうち、[受注ID]の値が同じであるレコードが

   [工程テーブル]に存在していないレコードを抽出する。

  1. 3 の結果から、[受注テーブル]の[受注ID]と

   [工程サブマスターテーブル]の[工程]を取得する。

  1. 4 の結果を( INSERT INTO 文によって)[工程テーブル]に追加する。

というのが大まかな考え方です。

> もしそうであれば、実は工程テーブルに

> データが存在しない受注データがあるため

> このクエリでは難しそうです。

ここで肝心なのは、上記 1 の操作によって

[受注テーブル]に追加されたレコードと同じ値の

[メニューID]を持つレコードが**([工程テーブル]ではなく)**

[工程サブマスターテーブル]に存在しているかどうかです。

同じ[メニューID]のレコードが[工程サブマスターテーブル]に

存在していないのであれば、上記 2 の段階で

[工程テーブル]への追加対象から除外されます。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2020-10-05T01:48:23+00:00

> 困っていることはInsertを使って新規受注を入れた際に、

> マスターの金額をコピーするところはできたのですが、

> その時にInsertされた受注ID(オートナンバー)が分からず、

> 受注IDに紐づいた工程データをマスターからInsertで

> コピーする方法が分からず困っています。

(SQL ビュー)


INSERT INTO [工程テーブル]

      ([受注ID],

       [工程])

SELECT [受注テーブル].[受注ID],

       [工程サブマスターテーブル].[工程]

FROM [受注テーブル]

INNER JOIN [工程サブマスターテーブル]

ON [受注テーブル].[メニューID] = [工程サブマスターテーブル].[メニューID]

WHERE NOT EXISTS (SELECT tmp.*

                  FROM [工程テーブル] tmp

                  WHERE tmp.[受注ID] = [受注テーブル].[受注ID])

ORDER BY [受注テーブル].[受注ID],

         [工程サブマスターテーブル].[工程ID];


以上のような追加クエリ( INSERT INTO 文)を実行したい、

ということでしょうか。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2020-10-05T10:06:23+00:00

    sk.exe様

    ありがとうございます。

    おかげさまで解決することができました。

    またBookmarkの使い方、Executeについてまで教えていただきありがとうございます。

    また少しレベルアップできました。

    これからもよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません