クエリフォームからのレコード追加方法とは?

このQ&Aのポイント
  • クエリフォームからのレコード追加についてビジネスアプリケーションでよく使用される機能の一つに、クエリフォームからのレコード追加があります。
  • 具体的な例として、仕入マスタと商品マスタという二つのマスタがあり、品番でリレーションして「仕入マスタのフィールド(from仕入マスタ)+商品名(from商品マスタ)」を出すだけの単純なクエリがある場合、クエリフォームで新規レコードを追加する際に、品番を入力すると商品マスタから商品名が参照され表示されるフォームを作成することができます。
  • 具体的な手続きとして、クエリフォームの「新規」ボタンにプロシージャを登録し、該当のテーブルに新しいレコードを追加するようにします。
回答を見る
  • ベストアンサー

クエリフォームからのレコード追加について

お世話になります。 タイトルとして、「クエリフォームからのレコード追加」とすべきか 「フォーム上でのテーブル参照」とすべきか迷うところなのですが 仕入マスタ(ID、品番、仕入日、仕入数) 商品マスタ(ID、品番、商品名) という二つのマスタと、 品番でリレーションして「仕入マスタのフィールド(from仕入マスタ)+商品名(from商品マスタ)」を出すだけの単純なクエリがあります。 今、仕入マスタに新規レコードをフォームから追加する際、 品番を入れたら商品マスタから商品名が参照され表示される、というフォームを作成したいのですが、どうしたら実現可能でしょうか。 (絶対やりかたがあると思ったのですが、うまく探せず質問させていただきます) 当初、新規レコード追加時には、品名を表示させようとしていなかったため、普通に「仕入マスタのフォーム」で「新規」ボタンに下記プロシージャを登録していたのですが。。 「仕入マスタのフォーム」を「仕入クエリのフォーム」に変更して、下記プロシージャを少々修正するだけで実現できるでしょうか。 (素人考えでいくつか試してみたのですが、この場合★の部分に何を指定すればいいのかわかりません。) Private Sub 新規_Click() Me.AllowEdits = False Me.AllowAdditions = True DoCmd.GoToRecord acDataForm, "仕入マスタ", acNewRec '★ End Sub わかりにくい説明で申し訳ございません。 何卒お力添え宜しくお願い致します。

noname#105246
noname#105246

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> 仕入マスタに新規レコードをフォームから追加する際、 > 品番を入れたら商品マスタから商品名が参照され表示される、というフォーム 以下は、追加の時だけ表示するものではなく、常に表示されるものになります。 (商品マスタの品番には、重複がないものとします) 「仕入マスタのフォーム」が既にあるようですので、「品番」の横にでもコンボボックスを追加します。 ラベル部分は要らないと思うので、ラベルは削除しておきます。 コンボボックス名を「cbx品番」としたとします。 プロパティで以下を変更していきます。 コントロールソース: 品番 列数: 2 列幅: 0cm;4cm  (1列目を非表示に、2列目の幅は適当に) 値集合ソース: SELECT 品番, 商品名 FROM 商品マスタ;   (並び順があるのなら追加で指定します) 連結列: 1 タブストップ: いいえ これにより、「品番」テキストボックスの値を変えると、コンボボックスの表示も変わります。 また、コンボボックスを変更すると、「品番」テキストボックスの値が変わります。 新規ボタンが、「仕入マスタのフォーム」にあるのなら、以下のような書き方でいけると思います。 Private Sub 新規_Click()   Me.AllowEdits = True   Me.AllowAdditions = True   DoCmd.GoToRecord , , acNewRec End Sub Private Sub Form_Current()   If (Not Me.NewRecord) Then     If (Me.AllowEdits) Then Me.AllowEdits = False     If (Me.AllowAdditions) Then Me.AllowAdditions = False   End If End Sub ※ 新規ボタンを押すまでは、編集/追加できないようにする、という前提で。 ※ 新規ボタン押したけど、何もせずに他へ移動しても大丈夫なように。   (レコード移動時に新規でなければ、Falseへ、重複設定を避けるように True の時のみ) ※ 新規の時のみコンボボックスを表示するのなら、上記タイミングで Visible を設定すればよいと思います。

noname#105246
質問者

お礼

>30246kikuさま ありがとうございました。 「仕入マスタ」でできました。 本当にいつもありがとうございます。 助かります。

noname#105246
質問者

補足

>30246kikuさま いつもいつもありがとうございます(><) ところでこのフォームのレコードソースは 「仕入マスタ」でしょうか それとも 「仕入クエリ」でしょうか。 宜しければお教えください。

関連するQ&A

  • Accessでフォームからレコードの追加について

    Access2016をWindows10で利用しています。 あるテーブルの単票形式のフォームをフォームウィザードから作成しました。 入力規則などがテーブルの各列の設定に沿って作成されていてとても便利なのですが、フォームにいくつか値を入れた時点でレコードが新規追加されてしまいます。 レコードの追加を、すべての入力が終わって「新規追加」ボタン(あとから自分で作成)を押してから行いたいです。 レコードウィザードを使わずにフォームを作成し、フォームの値とクエリを結び付けてボタン押下時にクエリを実行する、というフォームにすれば実現できると思うのですが、それはなかなか手間がかかってしまうので出来るだけ簡便に実現できたらと考えています。 細かい話なので参考ページ、あるいはヒントになる検索キーワードを教えていただけないでしょうか m(‗ ‗)m ?

  • Accessフォームの新規レコードについて

    いつもお世話になっています。 Access2000でフォーム作成をしているときにちょっと詰まってしまいました。 クエリからフォームの作成を行うと、フォームの新規レコードの追加ができないんです! テーブルからフォームを作成する場合は新規レコードの追加は可能でした。 クエリがあるとどうしても新規レコードの追加ができなくなってしまいます。 クエリからフォームを作成して、新規レコードの追加を行えるようにすればどうしたらいいんでしょうか? よろしくお願いします。

  • フォームのレコードソース

    Access2003でAccessプロジェクト(MSDE)のシステムを作っています。 フォームのレコードソースにテーブルまたはストアドプロシージャが選択できますが、どちらにするのがよいのでしょうか?ちなみにフォームでは商品マスタなどを入力、編集します。

  • アクセスのクエリの組み方を教えてください

    アクセスで、クエリを組みたいのですがうまくできません。 添付画像をご覧ください。 テーブル1の中の「仕入コード1」フィールドと「仕入コード2」フィールドと 仕入コードマスタの「仕入コード」フィールドとの掛け合わせを行いたいです。 その結果、 (1)「仕入コード1」フィールドに存在して、「仕入コード」フィールドに存在しない、 (2)「仕入コード2」フィールドに存在して、「仕入コード」フィールドに存在しない レコードを一度に抽出したいです。 今回の場合であれば、品番222(含むAB)と品番333(含むAD)の2レコードを抽出したいです。 クエリを組みましたが、うまくそのようにできませんでした。 クエリのどこがおかしいのか?ご指摘頂けませんでしょうか。よろしくお願いいたします。

  • 【ACCESS】フォームのレコードソースのクエリを動的に書き直したときの、フォームの再描画

    ACCESS2002 帳票フォームのレコードソースにクエリを指定しています。 フォーム上のコマンドボタンを押したイベントで、その レコードソースとしているクエリのSQLを書き直しています。 問題は、その書き直したクエリをもとにして画面をもう一度 表示させなおしたい(リフレッシュさせたい)ということです。   docmd.close acForm,"フォーム名"   docmd.open "フォーム名" とすると、書き直したクエリの内容でフォームが表示されます。 フォームを閉じる→フォームを開くとしないで、フォームを リフレッシュさせる方法はないのでしょうか?

  • アクセス2003 クエリについて

    いつもお世話になっています。 商品管理用にデータを作っています。 商品マスターテーブルでIDや商品名と共に、わかる範囲で定価と過去の仕入値を入力しています。 クエリで<商品マスター>を下記のようにまとめた<参考仕入価格クエリ>を作りました。 商品ID…商品マスターより 商品名…商品マスターより 参考仕入価格…CCur(IIf([過去の仕入値]>0,[過去の仕入値],[定価]*0.6)) さらに<参考仕入価格クエリ>と<仕入記録クエリ>を使って<仕入価格クエリ>を作ろうとしています。 <仕入記録クエリ>は、<商品マスターテーブル>と<仕入記録テーブル>を組み合わせ、仕入れのなかった商品はNz関数で仕入額が0円になるようにしています。 <仕入価格クエリ>のデザインビューで参考仕入価格をフィールドに入れてみたところ、<参考仕入価格クエリ>では×0.6で表示された定価が、0.6かけない状態で表示されてしまいました。 この場合×0.6の状態で反映させるにはどうしたらよいのでしょうか? よろしくお願いします。

  • クエリを基にしたフォームでテーブルにレコードを追加したい

    よろしくご教授ください。 商品の在庫場所の検索システムを作成しています。 テーブルは「T商品(商品コード、商品名、在庫場所)」と「T在庫場所(在庫場所ID、在庫場所)」があり、それを基にクエリ「Q商品在庫場所(商品コード、商品名、在庫場所)」を作成しました。  エクセルデータからなんとか先の2つのテーブルを作成したのですが、将来新しい商品が入ってきたり、在庫場所変更に備えて、フォームにて追加・編集できる方法を考えています。何とか「Q商品在庫場所」を基に「F商品在庫場所」を作ってはみたのですが、入力しようとしても何も入力できません。編集ロックがかかっている様子もありません。リレーションが問題なのでしょうか?  「Q商品在庫」で入力したデータを、2つのテーブルのそれぞれのレコードとして蓄積することは可能なのでしょうか?  クエリのデザインビューでは『「T在庫場所」1→∞「T商品」』となっています。  よろしくお願いします。

  • 抽出条件のあるクエリにADOで新規にレコードを追加

    抽出条件のあるクエリにADOで新規にレコードを追加する事は不可能でしょうか? フォーム1にテキスト0を配置し SELECT テーブル1.色 FROM テーブル1 WHERE (((テーブル1.色)=[Forms]![フォーム1]![テキスト0])); というクエリを作成しました。 テーブル1のデータは 色 黄 黒 青 赤 です。 ADOでクエリにデータを追加したいのですが Public Sub Exsample() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM クエリ1" ここの時点で 「実行時エラー:'-2147217904 (80040e10)': 1つ以上の必要なパラメータの値が設定されていません。」 と表示されてしまいます。 「クエリ1」を「テーブル1」にしたらうまくいきます。 だったらテーブルに追加したら?と思われると思いますが 今回は例であり、実際はクエリに追加したいです。 回避方法があれば教えてください。 よろしくお願い致します。 (ヴァージョンはアクセス2003です)

  • access フォーム上で複数行のレコードを追加したい。

    宜しくお願いします。 仕様環境:WinXP access2002 フォーム上にコマンドボタンで空白のレコードを 追加したいのですが、一行だけなら「値の代入」マクロで 追加できるのですが、複数行だとやり方がわかりません。 「追加クエリ」を作ってコマンドボタンにマクロで乗せてみたのですが、 テーブル上では複数の空白レコードが追加されてますが、 フォーム上には反映してくれません。 「値の代入」マクロを使って、複数行のレコードをフォーム上に追加するか、 「追加クエリ」を使って、複数行のレコードをフォーム上に反映させるか したいのですが教えてください。 ※ ちなみにこのフォームはサブフォームです。   また5行追加しようとしています。   この方法では無理でしたらご指導お願いします。 宜しくお願いします。

  • access クエリ レコードの追加ボタン?

    クエリのデータシートビュー時の 最下部に現在の位置やレコード総数などを表示する場所がありますよね?そこに「一番下のレコードに移動する」ボタンがありますよね? (「>*」のような記号のボタンです。) このボタンを有効/無効にする設定はどこでできますか? このクエリは1つのテーブルから作っているので、普通に作成すれば、レコードの追加も、内容の変更も出来ます。 実は、偶然にも無効にしてしまっているで有効に直したいのです。 フォームでいうところの「追加の許可」みたいな「新規レコードの追加はできる/できない」みたいな機能です。 よろしくおねがいします。