• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:お知恵をお貸しください。)

フォーム上で製品を選択し、ケース数を入力したら、数量が自動的に変更になる方法は?

このQ&Aのポイント
  • accessで製品テーブルを作成し、発注書テーブルを作成していますが、フォーム上で製品を選択し、ケース数を入力すると、製品番号を入数と勘違いして数量が間違って出力されます。
  • 製品番号 001の製品コード0005であるTキャップの入数は3000です。例えばケース数を20と入力した時、クエリ上では数量60000と計算されますが、フォーム上では数量3000となってしまいます。
  • フォーム上で製品を選択し、ケース数を入力したら、数量が自動的に変更される方法はありますか?

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

テーブルのルックアップウィザードについて簡単に説明します。 例えば、製品テーブルに製品番号(主キー)、製品名、入数の項目があって、発注書テーブルに製品テーブルの製品名と入数の項目をルックアップウィザードで作成し、この状態で、発注書テーブルのデータを登録したとします。 このとき、発注書テーブルの製品名と入数の欄には製品テーブルから参照した製品名や入数が登録されているのではなく、製品番号(主キー)が登録されています。 したがって、発注書テーブルの製品名や入数の項目の内容を見ても製品名や入数は分かりません。製品番号(主キー)が分かるだけです。 テーブルの表示やクエリの実行のときに製品名や入数が表示されるのは、実行時に製品テーブルを検索して表示しているだけなのです。 その証拠に、製品テーブルの製品名を変えるだけで発注書テーブルの製品名も変わります。これは発注書テーブルに製品名を持っていないから可能なのです。(発注書テーブルに製品名が登録されていると発注書テーブルの変更処理が必要になります) ルックアップウィザードは便利なようですが、仕組みを分かってないととんでもないことになります。 使うときは充分注意してください。 話を戻して、数量を表示する方法ですが、 発注書テーブルクエリを作成するときに、発注書テーブルと製品テーブルを製品番号で結合してから、 「数量:製品テーブル.入数*発注書テーブル.ケース数」の項目を作成してください。 これで発注書テーブルクエリに数量が表示できます。 フォームは、発注書テーブルクエリをレコードソースにして、上記の数量の項目をフォームに貼り付ければ表示できます。 別の方法として、テキストボックスに式を設定する場合は、DLookUp関数で製品テーブルを直接参照すれば数量を計算することができます。 =CCur([ケース数]*DLookUp("入数","製品テーブル","製品番号 = " & [製品番号]))

t-seisan
質問者

補足

nag0720 さん、色々ご協力を下さいまして、ありがとうございます。 ご返信が遅くなり申し訳ございません。 今の状態から、言われる様に行ったのですが、なぜか上手く出来ません。もう一度、テーブルから見直して作り直したいと思います。 もし、お暇があればざっくりとで結構ですので、全体の概要のアドバイスを頂ければ助かります。

その他の回答 (3)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.3

疑問2の「なぜ[製品番号1]なのか?」 は「1」のことじゃなくて、なぜ「製品番号」なのかという意味です。 数量=入数*ケース数 ですが、なぜ「入数」とは関係ない「製品番号」にしているのですか? これでは正しい計算ができないのは当然です。 ただし、計算式を「=CCur([入数]*[ケース数1])」としたとしてもたぶんエラーになるでしょう。 それより、発注書クエリをフォームのレコードソースにしているのなら、なぜ発注書クエリの中の「数量:入数*ケース数」の項目をフォームに配置しないのですか?(クエリで「数量:入数*ケース数」を表示しているのなら、その項目はありますよね) 新たにテキストボックスを作って意味不明な計算式を設定する必要はないと思うのですが。

t-seisan
質問者

補足

何度も申し訳ございません。 前回の指摘にて、発注書クエリのレコードソースの数量1を配置しているのですが、クエリ上の正確な数量は表示されましたが、やはりフォーム上で製品を選びなおすと、間違った数量になります。 なぜ[製品番号1]になるかと言いますと、テーブル作成時に、製品名のデータ項目でルックアップウィザードで製品登録テーブルを参照しています。製品コード、製品名、入数を指定すると、項目名が主キーで設定している[製品番号]になります。 後はテーブルのデータ項目でルックアップタブから、表示ができる様に 表示指定をしています。 この状態で、クエリを作った所、クエリ上では計算が正確に出来たので、フォーム上でも出来る物と思っていましたが、上手くいかず途中で計算式(=CCur)を入れたりしていました。 長々となりましたが、わからないので全部書いてみました。 根本的にテーブルの作成が悪いのでしょうか。 何度もすみませんが、ご協力をお願い致します。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

補足拝見しました。 まだよく分からない点があるのですが・・・ 発注書テーブルには製品番号とケース数があって、 製品番号はコンボボックスからの選択でいいんですよね。 発注書クエリは、さらに数量のフィールドを追加していて、 製品テーブル.入数*発注書テーブル.ケース数 の計算になっていて、このクエリの実行は問題なくできるのですよね。 (このときの製品番号欄には正しい製品番号が表示されていますか?) 問題はフォームのときですが、 疑問1 フォームのレコードソースは発注書クエリですかそれとも発注書テーブルですか? レコードソースが発注書テーブルの場合、選択した製品の入数は参照できません。DLookup関数で検索する必要があります。 レコードソースが発注書クエリなら、クエリの項目をフォームに配置するだけでクエリの実行と同じ状態になるはずです。 疑問2 =CCur([製品番号1]*[ケース数1]) とありますが、なぜ[製品番号1]なのですか? 以上の点を検討してみてはどうでしょうか。

t-seisan
質問者

補足

nag0720様 ありがとうございます。 疑問1回答  レコードソースは発注書クエリです。 疑問2回答  [製品番号1]ですが、発注書手テーブルには1つの会社に5製品同時 に発注が出来る様に1~5まで分けています。  ですから、あまり1の意味はありません。 「このときの製品番号欄には正しい製品番号が表示されていますか?」 ですが、クエリ上では表示されています。 (発注書テーブルの製品番号項目のルックアップの集合体ソースが SELECT [ta製品登録].[製品番号], [ta製品登録].[製品コード], [ta製品登録].[製品名], [ta製品登録].[入数] FROM ta製品登録; で、連結列 4 列数 4 列幅 0:0:2.5:2.5 に設定し、テーブル・クエリの実行ビュー上では項目を製品名にしています。 製品番号欄は使用していません。(あくまで主キー設定の為の番号にしていますので) 若干状況が変化したので追記します。 クエリ上で製品を選択し、ケース数を指定し、正確な数量表示させた状態で、フォームと印刷レポートを表示させた所、製品コード・製品名・入数は表示されませんが、数量は正確な数量が表示されていました。 しかし、フォーム上で製品を変更すると、製品コード・製品名・入数はフォーム・レポート上では表示されるのですが、数量が以前の様に製品コード×ケース数になってしまいます。  ややこしい話で申し訳ございませんが、どうか宜しくお願い致します。  

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

補足お願いします。 数量=入数*ケース数 と計算していると思いますが、 クエリを実行するときの、製品の選択方法とケース数の入力方法をどのようにしていますか? その部分のクエリのフィールド内容や抽出条件を示してください。 また、フォームのレコードソースを上記のクエリにしていると思いますが、フォームを表示したときの製品の選択方法、ケース数の入力方法はどうなってますか? (フォーム上にテキストボックスのような入力域を設定しているのか、実行時に入力窓が表示されてそこに入力しているのか)

t-seisan
質問者

補足

ご協力下さいまして、ありがとうございます。 クエリ上では、テーブルをルックアップウィザードを使用していますので、コンボボックス形式で選択し、ケース数を入力すると数量が自動計算されています。当然、コンボボックスの内容を変更すると、すぐに数量計算がされ反映されています。 フォーム上では、製品項目はコンボボックスで製品を指定し、ケース数項目はテキストボックスにしています。数量項目もテキストボックスで、=CCur([製品番号1]*[ケース数1]) で指定しています。 使い方は、すべてフォーム上で入力になり、製品を選択し、ケース数を入力すると、間違った数量が表示され、製品を変更するとまた間違った数量で表示されます。 こんな補足で宜しかったでしょうか?

関連するQ&A