- 締切済み
Accessのコンボボックスでの検索について2
コンボボックスが2つあり、cbo回線区分でAAを選択するとcbo名称にはAA条件クエリの名称フィールドの名称が表示され、名称を何か選択すると、AA条件クエリの中から一致するレコードが抽出され、またcbo回線区分でBBを選択するとcbo名称にはBB条件クエリの名称フィールドが表示されBB条件クエリの中の一致するレコードを抽出しにいくということは出来ますでしょうか? わかりにくい説明ですいませんが、コンボボックスにより検索したいクエリを切り替えることは出来るかということなんですが。。。 コンボボックス名 cbo回線区分、cbo名称 クエリ名 AAクエリ、BBクエリ 色々試してはいるんですがうまく行かないので、ご教授願います(If Else・・・を使ったんですが間違いでしょうか?)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- maruru01
- ベストアンサー率51% (1179/2272)
再びmaruru01です。 >全部で6種類の回線区分からの各月別テーブル テーブルのデザイン(フィールドの数と種類)は回線区分ごとに違うのでしょうか? また、各月別にテーブルを作っているのでしょうか。それらもやはり、テーブルのデザインは同じじゃないですか? もし、テーブルデザインが同じなら、1つのテーブルに統合した方がずっと簡単で管理し易いと思います。 そうすれば、cbo名称のリストについても、値集合ソースに、 "SELECT 名称 FROM テーブル名 WHERE 回線区分 = '" & Me!cbo回線区分.Value & "'" にすればいいですし、 新しいフォームを開いて抽出したデータを表示させるなら、そのフォームのレコードソースに、そのテーブルを設定しておき、 DoCmd.OpenForm "フォーム名", , , "回線区分 = '" & Me!cbo回線区分.Value & "' AND 名称 = '" & Me!cbo名称.Value & "'" とすればいいだけですから。(No.2にも書きましたが。) データテーブルは出来るだけ分割しない方がいいと思いますよ。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 まず、2つのコンボボックスで段階抽出するのは、 cbo回線区分のChangeイベントに、 If Me!cbo回線区分.Value = "AA" Then Me!cbo名称.RowSource = "AAクエリ" ElseIf Me!cbo回線区分.Value = "AA" Then Me!cbo名称.RowSource = "BBクエリ" End If で出来ます。 ところで、2つのクエリはぜんぜん違う内容ですか? もしかして、同じテーブルから回線区分によって条件抽出してるだけじゃないですか? それなら、もっと簡単に、cbo名称の値集合ソースに、 "SELECT 名称 FROM テーブル名 WHERE 回線区分 = '" & Me!cbo回線区分.Value & "'" とするだけでいいですが。 あと、レコードの抽出先はどこですか。 現在のフォームに表示されているデータを絞り込む(フィルタリング)のなら、 Me.RecordSource = "AAクエリ" Me.Filter = "名称 = '" & Me!cbo名称.Value & "'" Me.FilterOn = True とすればいいし、新しくフォームを開くなら、そのフォームのLoadイベントに、 Me.RecordSource = "AAクエリ" Me.Filter = "名称 = '" & Me!cbo名称.Value & "'" Me.FilterOn = True とすればいいです。 (もちろん、クエリ名はcbo回線区分によって変えられるようにします。) ただし、1つのテーブルから、回線区分と名称で抽出しているだけなら、そのフォームのレコードソースにそのテーブルを設定しておき、 DoCmd.OpenForm "フォーム名", , , "回線区分 = '" & Me!cbo回線区分.Value & "' AND 名称 = '" & Me!cbo名称.Value & "'" でフォームを開けばいいですが。
補足
回答ありがとうございます。 テーブルは月別の回線区分になっています。 3月A回線区分、4月A回線区分 3月B回線区分、4月B回線区分・・・・と全部で6種類の回線区分からの各月別テーブルです。 時間がかかってしまいますが回答頂いた方法でやってみます。またご不明な点はご教授願います。
- ats8181oyaji
- ベストアンサー率38% (94/244)
こんにちは おみうけしますに、要するに表示される結果をクエリ毎にしたい のだと思います。ですからそれぞれのクエリに対するサブフォームを 作成し表示を切り替えれば実現できるのではないでしょうか。 AAクエリ、BBクエリそれぞれをコントロールソースとする フォームを作成。 コンボボックスがあるフォームにサブフォームとして貼り付けます 可視プロパティを"いいえ"にしておきます cbo回線区分で選択された時の[イベント プロシージャ]で with AAフォーム If .Visible = True Then .Visible = False Else .Visible = True End If end with with BBフォーム If .Visible = True Then .Visible = False Else .Visible = True End If end with で表示を切り替えます これでどうでしょうか?
補足
回答ありがとうございます。 私が回線区分は6つあるですが、やなり6回IF Elseを繰り返さないといけないのでしょうか?何か簡潔な方法がありましたらご教授願います。初心者で本当にすいません
補足
大変申し訳ありません。テーブルのデザイン(フィールド数)は各回線区分によって違うのです。また相手先からいただくデータも回線別、更に月別となっているため私のほうではクエリでA回線の3月4月を合わせたクエリを作成しています。 テーブルだと簡単なんですけど、最終的にレポートで請求書を作成するのに、細かく分けての請求になるので。。。