- ベストアンサー
Accessの計算について
いつもお世話になっております。 Access2002で、以下のような計算って出来るのでしょうか? <材料テーブル> ID|材料名|単価 1|木 |200 2|紙 |100 というテーブルがあり、コンボボックスで選んだ場合に材料テーブルのIDの値をmasterテーブルに以下のように格納させたいと思ってます。 <master> ID|数量| 1| 1| 2| 1| すなわち、masterテーブルには材料テーブルで選択したIDの値が挿入されるのですが、masterテーブルに挿入されたIDを元に、材料テーブルの単価を参照させて計算させると言うことです。 すなわち計算式は、ファームで合計欄という非連結のテキストボックスを作って、その中に、計算式を入れて計算させるということです。 合計=単価*数量 って具合です。実際は、masterテーブルに入っている値はIDなので、それをどうにかして、masterに入っているIDを元に単価を参照させて、フォーム上で計算させたいという風にしたいのですが・・・ よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
コンボボックスでIDと材料名・単価を表示するようになっていれば簡単です。 単価を格納するテキストボックスを作ってコンボボックスの表示から単価を 取得すれば良いと思います。 例えばコンボボックスをコンボ1としてコンボボックスの更新後処理に ID・材料名・単価の順に並んでいるとすれば Private Sub コンボ1_AfterUpdate() 単価 = コンボ1.Column(2) End Sub で単価フィールドにレコードを取り込みますのでその単価を使ってフォーム上で 計算できます。
その他の回答 (3)
- ats8181oyaji
- ベストアンサー率38% (94/244)
No2の補足に対してです >masterの方には材料テーブルのIDをいくつ入れてもいいように、 >あらかじめ15個くらいのレコードの幅を設けています。 ということは、数量も15個あるのですね。しかも1レコードに。。。 こういう案はどうでしょう。masterテーブルの情報を二つに分割します (いわゆるヘッダーとボディ) 案件の不変な部分をヘッダーテーブルに 材料の部分をボディテーブルとして ヘッダーのキーとボディのキーを同一にして ボディの方はキーと材料数の枝番を付けます。 最大が15個なら、画面にも15行の材料登録のための コンボを設けます。 ちょっと難しくなりますが、プログラムを組むよりは簡単かと 思います。
お礼
何度もありがとうございました(^^ いろいろな考え方もでき大変参考になっております。 今回は急な対応を迫られているためより私の分かりやすい方で対処させていただきました。ats8181oyajiさんのご解答も組んでみてこれからに役立てようと思ってます。これからもよろしくお願いいたします。
- ats8181oyaji
- ベストアンサー率38% (94/244)
こんにちは さっきの回答の追加です。 すでに、masterには材料テーブルのIDが格納されているので 後は、クエリで、二つのテーブルのIDを結合させれば 材料テーブルの単価を持ってくることができます。 合計:[材料テーブル]![単価]*[masterテーブル]![数量] こんな感じです 頑張ってください。
補足
さっそくのご解答ありがとうございます。 二つのIDの結合についてですけど、masterの方には材料テーブルのIDをいくつ入れてもいいように、あらかじめ15個くらいのレコードの幅を設けています。すなわち、材料は一つの案件につきいくつも使うと考えれるためにmasterテーブルの方には15個設けたのですが。。。。 その場合はどのように結合させたらよろしいのでしょうか? よろしくお願いいたします。
- ats8181oyaji
- ベストアンサー率38% (94/244)
こんにちは コンボボックスのプロパティの値集合ソースの使い方はご存知ですか? 値集合ソースが SELECT DISTINCTROW ID,材料名 FROM 材料テーブル; 列数が2 列幅を0cm;2cm 連結列を1 で コントロールソースを masterのIDにすれば 画面からの入力した材料テーブルのIDの値を masterテーブルに格納できます。
お礼
ありがとうございます。できました(^^ 単価=コンボ1.Column(2)っていうのを使えるんですね(^^; まだまだ、勉強不足っていいますか、なんといいますか 汗 これからも、よろしくお願いいたします。