sk
2024/03/15 (金) 13:18:28
35e04@fc3ed
今までテーブルの表示のないクエリを作成した経験がないため、こういうのは一般的なのか
「各フィールドに出力する値(リテラルや式の結果)をリストで指定して
任意のテーブルに 1 件のレコードを追加する操作」という自体は、
データベースシステムにおいてごくありふれた操作です。
多くの場合は INSERT INTO ... VALUES ... ステートメントを使用します。
INSERT INTO [00作成] ([受注品], [手配日], [現在庫数], [品番])
VALUES (False, Date(), [Forms]![F_在庫品作成依頼]![txb_現在庫数], [Forms]![F_在庫品作成依頼]![txb_品名コード]);
Access の場合は SQL ビューでこのステートメントを用いた追加クエリを
作成することができますが、デザインビューに切り替えてクエリを上書き保存すると
INSERT INTO ... SELECT ... ステートメントに置き換わってしまいます。
通報 ...
ここで問題となるのは、[txb_品名コード]と[txb_現在庫数]が
連結テキストボックスであるか、それとも非連結テキストボックスであるか、
ということです。
[txb_品名コード]のコントロールソースがテーブル[00作成]のフィールド[品番]、
[txb_現在庫数]のコントロールソースがテーブル[00作成]のフィールド[現在庫数]
であるならば、それらのテキストボックスに対して値を入力する操作は
そのままコントロールソースであるフィールドに対しての入力となります。
その際のフォームのカレントレコードが新規レコードなのであれば、
カレントレコードが保存された段階でそのレコードはテーブル[00作成]に
追加されます。
カレントレコードが既存のレコードなのであれば、参照中のレコードが
更新(上書き)されます。
「連結フォームのカレントレコードに対する入力操作」によって
テーブル[00作成]のレコードの追加/更新が成されているのであれば、
それとは別に(独自に)「追加クエリを用いたレコードの追加」という操作を
実行する必要はありません。
後者の操作を行う必要があるとすれば、それは[F_在庫品作成依頼]が
非連結フォーム(どのテーブルとも連結していない)である場合か、
「連結フォームのカレントレコードに対する入力操作」とは別に
何か特殊なレコードの追加処理を実行しなければならないような場合
ぐらいでしょう。
ごくありふれた操作なのですね。初めてだったので安心しました。
txb_品名コード、txb_現在庫数ともに非連結のテキストボックスです。
ならば[F_在庫品作成依頼]が連結フォームである必要はないのではないでしょうか。
いわゆる CRUD 機能を Access の非連結フォームに実装する場合、
「新規レコードの追加」を行う手法については、大別して次の 3 種類の方法が挙げられます。
保存済みの追加クエリを実行するマクロまたはプロシージャを呼び出す。
任意の SQL 文(この場合は INSERT INTO ... ステートメント)を実行するマクロまたはプロシージャを呼び出す。
DAO または ADO の Recordset オブジェクトによって任意のテーブルを参照し、AddNew メソッドを呼び出して新規レコードを作成し、そのレコードの各フィールドの値を編集し、Update メソッドを呼び出してそのレコードをテーブルに保存する――という一連の操作を実行するプロシージャを呼び出す。
挙げられた方法は上記 1 に該当します。