Microsoft Access 掲示板

テーブル・クエリを表示しない追加クエリ / 2

5 コメント
views
4 フォロー
2

今までテーブルの表示のないクエリを作成した経験がないため、こういうのは一般的なのか

「各フィールドに出力する値(リテラルや式の結果)をリストで指定して
任意のテーブルに 1 件のレコードを追加する操作」という自体は、
データベースシステムにおいてごくありふれた操作です。

多くの場合は INSERT INTO ... VALUES ... ステートメントを使用します。

INSERT INTO [00作成] ([受注品], [手配日], [現在庫数], [品番])
VALUES (False, Date(), [Forms]![F_在庫品作成依頼]![txb_現在庫数], [Forms]![F_在庫品作成依頼]![txb_品名コード]);

Access の場合は SQL ビューでこのステートメントを用いた追加クエリを
作成することができますが、デザインビューに切り替えてクエリを上書き保存すると
INSERT INTO ... SELECT ... ステートメントに置き換わってしまいます。

通報 ...
  • 3

    F_在庫品作成依頼というフォームを作りました。
    レコードソースは00品番と00作成というテーブルを品番で繋げたものです。

    txb_品名コードの更新後処理で、品名コードでフィルターし、その製品の詳細と作成依頼の履歴(サブフォームで、レコードソースはF_在庫品作成依頼と同一)を表示する

    txb_現在庫数に、現在の在庫数を入力する

    ここで問題となるのは、[txb_品名コード]と[txb_現在庫数]が
    連結テキストボックスであるか、それとも非連結テキストボックスであるか、
    ということです。

    [txb_品名コード]のコントロールソースがテーブル[00作成]のフィールド[品番]、
    [txb_現在庫数]のコントロールソースがテーブル[00作成]のフィールド[現在庫数]
    であるならば、それらのテキストボックスに対して値を入力する操作は
    そのままコントロールソースであるフィールドに対しての入力となります。

    その際のフォームのカレントレコードが新規レコードなのであれば、
    カレントレコードが保存された段階でそのレコードはテーブル[00作成]に
    追加されます。
    カレントレコードが既存のレコードなのであれば、参照中のレコードが
    更新(上書き)されます。

    btn_作成手配ボタンを押して、F_在庫品作成依頼のテキストボックスに
    表示されている値・今日の日付を00作成という作成履歴を保存するレコードに追加する

    「連結フォームのカレントレコードに対する入力操作」によって
    テーブル[00作成]のレコードの追加/更新が成されているのであれば、
    それとは別に(独自に)「追加クエリを用いたレコードの追加」という操作を
    実行する必要はありません。

    後者の操作を行う必要があるとすれば、それは[F_在庫品作成依頼]が
    非連結フォーム(どのテーブルとも連結していない)である場合か、
    「連結フォームのカレントレコードに対する入力操作」とは別に
    何か特殊なレコードの追加処理を実行しなければならないような場合
    ぐらいでしょう。

    4
    驚天動地!前任者失踪丸 2024/03/15 (金) 15:20:32 23e8e@44ebd >> 3

    ごくありふれた操作なのですね。初めてだったので安心しました。

    txb_品名コード、txb_現在庫数ともに非連結のテキストボックスです。

    5

    txb_品名コード、txb_現在庫数ともに非連結のテキストボックスです。

    ならば[F_在庫品作成依頼]が連結フォームである必要はないのではないでしょうか。

    ごくありふれた操作なのですね。初めてだったので安心しました。

    いわゆる CRUD 機能を Access の非連結フォームに実装する場合、
    「新規レコードの追加」を行う手法については、大別して次の 3 種類の方法が挙げられます。

    1. 保存済みの追加クエリを実行するマクロまたはプロシージャを呼び出す。

    2. 任意の SQL 文(この場合は INSERT INTO ... ステートメント)を実行するマクロまたはプロシージャを呼び出す。

    3. DAO または ADO の Recordset オブジェクトによって任意のテーブルを参照し、AddNew メソッドを呼び出して新規レコードを作成し、そのレコードの各フィールドの値を編集し、Update メソッドを呼び出してそのレコードをテーブルに保存する――という一連の操作を実行するプロシージャを呼び出す。

    挙げられた方法は上記 1 に該当します。