- ベストアンサー
アクセスでIF関数を使用する際の改良方法について
- アクセスでIF関数を使用して仕入伝票入力を行っていますが、最近不便さを感じています。
- 特に仕入先ごとに異なる商品CDを探すのが手間です。
- 改良方法として、商品マスターテーブルに仕入先ごとの商品CD項目を追加し、仕入先CDによって商品CDの参照を変える方法が考えられます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
今までの「商品マスタ」は ・商品CD ・商品名 ・仕入れ値とかその他 のフィールドで構成されていたはず。 それを ・商品CD ・仕入先CD ・商品名 ・仕入れ値とかその他 に変えましょう。 で、メインフォームの仕入先CDを参照して、それに一致する物だけを抽出するクエリを「商品マスタ2」として作ります。 今まで商品マスタを参照していた入力枠を、商品マスタ2を参照するようにすれば解決します。 ・具体的なテーブルの内容の例 仕入先マスタの「仕入先CD」と「仕入先名」 001 鈴木原料 002 佐藤商事 003 田中物産 商品マスタの「商品CD」「仕入先CD」「商品名」「仕入価格」「商品価格」 00024 001 りんご 100 120 1240B 002 りんご 90 120 55100 003 りんご 105 120 00025 001 みかん 44 50 1240C 002 みかん 42 50 55101 003 みかん 40 50 00026 001 ぶどう 230 250 55102 003 ぶどう 221 250 01054 001 なし 89 105 2120D 002 なし 88 105 80201 003 なし 88 105 上記のような場合、メインフォームの「仕入先CD」を「佐藤商事」にした場合、クエリ「商品マスタ2」は、仕入先CDが「002」のレコードだけ抽出されます。 クエリ「商品マスタ2」の抽出結果 1240B 002 りんご 90 120 1240C 002 みかん 42 50 2120D 002 なし 88 105 あとは、サブフォームの商品CDの入力枠の内容に従って、仕入価格、商品価格を表示するだけです(それは今までと同じ)
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
同じ商品の管理が複数になる仕組みはしないこと。 何のための商品マスタか考えてみる。 同じ商品を複数の仕入先からというのはしてないですね?。 機能的にでなくて実作業、あるべき構成に基づいているか見直した方がいいでしょう。
お礼
ありがとうございます。同じ商品を複数の仕入先から仕入れています。というか、ここがポイントです。 多く提案意見をいただきありがとうございます。自分の質問に補足する場所がわからないのでこの場をお借りします。 仕入伝票にはその仕入先独自の商品コードにつづいて商品名、単価云々と記載されています。例えば、 A123456 アサヒスーパードライ 350ml缶 24入 1ケース ¥○○○○ 自分の仕入れデータ入力(アクセスで作った)に上のA123456と入力することで登録。また翌日、別の仕入先から同じ商品を仕入れ例えば 98765 アサヒスーパードライ 350ml缶 24入 1ケース ¥△△△△ これを入力する時には98765を入力することで同一商品の仕入が登録されるという感じにしたいのです。ちなみに主キーはJANコードです。また、私のオリジナルの自店の商品コードも作成しています。現在は仕入れ伝票のコードでなく商品名、容量から自店のコード番号を探し入力しているのですが時間がかかります。
- MRT1452
- ベストアンサー率42% (1391/3293)
ざっと見る限り、単に商品コードをプライマリキーに出来そうな気がしますが。 何の為にマスタを持つのかよく考えてください。 コードが違うからと無意味にフィールドを増やすのは良くないです。 商品コードをキーに商品情報を持ってくるのですから、それを行うクエリ(SQL)を組めば良いだけのはず。 コード・商品名 001・商品A 002・商品B ABCD・商品1 ZZ・商品c というマスタが会ったとして、コードに対する商品名を取るなら、 Select 商品名 from マスタ Where コード='###' (###は検索するコード) というようなSQLを組んで、マクロ上で###に対象の商品コードをセットするようにしてSQLを発行すれば、 該当の情報は取得できます。 Select 商品名 from マスタ Where コード='ABCD' とすれば、商品名として"商品1"が取得されるので、それを単にフォームにセットしてやるだけ。 ループでぐるぐる回してIF判定するならワザワザデータベースにする必要も無いし。 コード毎にマスタのフィールド追加してたら、商品が膨大になったときテーブル自体が無駄に膨大化することになるし。 データベースを使うならデータを引っ掛けるための検索キーという考え方が基本。 商品コードとかバーコードとか検索キーにするにはうってつけの物なわけで。 コードが商品毎に違うということは、そのコードを指定すれば、その商品であるということを特定できる情報なわけで。 そういう情報がプライマリキー(一意に情報を特定できるキー)となります。 そういった情報を使いこなす事でデータベースは活きてきます。 SQL関係の情報はネットにも書籍にも沢山あるので探してみてください。 アクセスでシステムを構築する場合はクエリとマクロを上手く組み合わせることがコツです。
お礼
ありがとうございます。補足をNO4のお礼欄に掲載させていただきました。よろしくお願いします。
- layy
- ベストアンサー率23% (292/1222)
仕入先毎違いがあってもどんな商品になるかはわかるのでは?。 商品分類を決めて絞り込み、選択画面を用意するのはどうですか。
お礼
ありがとうございます。一応コンボボックスで選択もできるようにしてあるのですが、同じ分類の商品が結構多くて選択するのに時間がかかるので、、
お礼
ありがとうございます。この方法だと、同じ商品名をコードの数だけ登録しなければいけないかと考え、長い商品名だと大変かと思いましたが、フィールドをつくり、仕入先CDで抽出したクエリで可能ですね。参考させていただきます。