- 締切済み
アクセスのフォーム作成について
例えば、商品区分A、B、Cがあり、商品区分Aは商品a,b,c Bはd,e,f Cはh,i,jがあるとします。フォームを作成するときに商品区分Aを入力したら商品名のリストボックスにはa,b,cしか表示されないようにするためには、商品テーブルを商品区分A,B,C分と3つ作っておく以外方法はありませんか? うまく質問できませんが、お願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- O_cyan
- ベストアンサー率59% (745/1260)
受注フォームのテキストボックスをText商品区分、コンボボックスをCmb商品名とします。 Cmb商品名の値集合ソースにSQLスタートメントで SELECT 商品テーブル.商品名 FROM 商品テーブル WHERE (((商品テーブル.商品区分)=[Forms]![受注フォーム]![商品区分])); と記述します。 Text商品区分の更新後処理に Private Sub Text商品区分_AfterUpdate() Me!Cmb商品名.Requery End Sub と記述します。 これで受注フォームのText商品区分に入力された区分によりCmb商品名の表示が商品区分により変わります。
- imogasi
- ベストアンサー率27% (4737/17069)
文章で説明すると長く、難しいですね。 丁寧に書いたつもりですのでよろしく。 1.テーブルの作成 商品テーブル ID 商品 商品区分 1 a A 2 b A 3 c A 4 d B 5 e B 6 f B 7 g C とします。 商品区分がAAA、BBBと集まっている必要はありません。 2.クエリの作成 クエリ 新規作成 選択クエリウイザード OK テーブル/クエリに「商品」テーブルを選択 商品・商品区分のフィールドを選択 次へ クエリ名を「商品クエリ1」とする 「クエリのデザインを編集する」をチェックON 完了 表示 「SQLビュー」で下記が出る。 SELECT 商品.商品, 商品.商品区分 FROM 商品; それを SELECT DISTINCT 商品.商品区分 FROM 商品; に改める。DISTINCTがポイント。 実行(!)するとクエリの結果はA,B、Cが出るはず。 3.フォームの作成 (1)フォームにコンボボックスを2つ貼り付ける。 コンボ0とコンボ4となったとする。 (2)1つ目のコンボの「プロパティ」の「値集合ソース」に「商品クエリ1」を指定する。 これでコンボの▼をクリックするとA,B,Cが出るはず。 また1つめのコンボの「プロパティ」ウインドウの「更新後処理」(イベント) にマクロ(「マクロ1」という名になったとする)を設定し「再クエリ」を選び、対象コントロールを 「コンボ4」(2つめのコンボ)を設定する。 1つめのコンボの選択が変わると2つめのコンボのクエリをやり直すようにするもの。 (3)2つめのコンボの「値集合ソース」に SELECT 商品.商品 FROM 商品 WHERE 商品.商品区分=[コンボ0]; を設定する。 クエリにして、名前をつけて指定することもできる。 (下記3の名前) 3.クエリの作成 同じく商品テーブルから選択クエリを作成し 商品区分の抽出条件に[コンボ0]を指定し、商品区分は表示しないにする。 ’----- これで1つ目のコンボを、Aを選ぶとa,b,c 2つめを選ぶとd,e,fが出るはず。 質問は2つめはリストボックスのようですが適当に修正してください
- O_cyan
- ベストアンサー率59% (745/1260)
>商品テーブルを商品区分A,B,C分と3つ作っておく・・ 分かりずらいのですが・・商品テーブルのフィールドとして商品区分A・商品区分B・商品区分Cを作るということなのでしょうか? 通常では商品テーブルの商品区分は1つで商品を登録する際にその商品区分にAかBかCを入力するようにするのですが。 フォームで表示するときに商品区分がAならその商品区分にAで登録されている商品a・b・cを抽出し表示するようにします。 質問の内容と違ったらゴメンなさい。
テーブル名「商品テーブル」 フィールド名「商品区分」、「商品名」 フォーム名「商品フォーム」 とします。 まずフォームにテキストボックス(商品区分)とリストボックス(商品名)を配置します。 リストボックスの値集合ソースに SELECT [商品名] FROM 商品テーブル WHERE 商品区分=[forms]!商品フォーム!商品区分; を入力します。 テキストボックスの更新後処理のイベントプロシージャに Me!商品名.Requery と入力すればできます。 説明が下手ですみません。
補足
実際には商品フォームではなく、受注フォームです。受注内容を入力するときに、商品区分を入力すればその商品区分に属する商品名だけをコンボボックスに表示したいのです。tamackyさんの回答をもとに、 SELECT [商品名] FROM 商品テーブル WHERE 商品区分=[forms]!受注フォーム!商品区分; と内容を少し変えてしてみましたが、うまくいきません。原因が分かりますでしょうか?