- ベストアンサー
Access フォームのコンボボックスでの検索方法と結果の表示
- Access2010でフォーム上のコンボボックスを使用してレコードの検索・抽出をする方法について説明します。
- 具体的な検索方法や検索結果の表示方法について詳しく解説し、重要なポイントも説明します。
- テーブルの関連付けや条件抽出についても具体的に説明し、使いやすいフォームの作り方を伝授します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>◆複数のレコードが抽出された場合にやりたい事 >◆検索結果の表示方法 は SELECT TOP 1 メイン.名前 FROM メイン WHERE (((メイン.職業)="会社員") AND ((メイン.住所)="東京")) ORDER BY メイン.年齢, メイン.ID; みたいにします。 クエリデザインで左列から 名前・・・表示=ON 年齢・・・表示=OFF、並べ替えに昇順 ID・・・表示=OFF、並べ替えに昇順 職業・・・表示=OFF、抽出条件をlike文で「フォームのコンボボックスの値」に設定 住所・・・表示=OFF、抽出条件をlike文で「フォームのコンボボックスの値」に設定 先頭1件のみ表示 「Top 1」 ちなみに、 職業と住所をコード化すると以下のようになります。 |No|職業|住所|年齢|名前|職業&住所 -------------------------- |01| 02| 01| 31|品川|0201 |02| 01| 02| 30|川口|0102 |03| 01| 01| 30|渋谷|0101 |04| 02| 02| 20|戸田|0202 |05| 02| 02| 20|熊谷|0202 |06| 02| 01| 30|太田|0201 です。 ここでいう「職業&住所」が フォームでいう2つのコンボボックスで生成される検索キーと一致すればよい 検索キー=forms!フォーム名!職業コンボの選択値 & forms!フォーム名!職業コンボの選択値 検索は1項目でできることになります。 >◆両方のコンボボックスが空欄だった場合 実行ボタン押したとき、 合成した検索キーが4バイトでないときが、選択していないとき、に相当します 参考になれば・・・。 フォームでの(コンボボックスなど)入力値をクエリの検索条件に使う、 この機能について検索し習得してみてください。
その他の回答 (1)
- MRT1452
- ベストアンサー率42% (1391/3293)
色々やり方はあろうかと思います。 自分が思いつく事としては。 (1)プログラム上でSQL(クエリ)を作って発行。 (2)複数のクエリとワークテーブルを使う。 (3)一旦テーブルデータを全件読み出して、ファイルや変数上で処理する。 この2通りですかね。 (1)は、本来のプログラムの形での方法ですね。 OracleとかDB2とかで同様の事をするなら、基本的にこの方法しか無いです。 (2)は、Accessでしか使えません。 検索条件等が複雑になればなるほどゴチャゴチャしてきますし、非効率的になってきます。 (3)はもはやDBの利便性を捨てて強行策に出る場合ですね。 普通、この方法を取ることは無いでしょう。 (1)であれば、そうですね・・・。 Select Min(No) AS No, 職業, 住所, Min(年齢) AS 年齢, 年齢 From メインテーブル Where メインテーブル.職業 = (職業の選択コンボボックスの値) and メインテーブル.住所 = (住所の選択コンボボックスの値) Group by No,職業,住所,年齢,年齢 (※試してないのでSQL文が間違っている可能性大です。) というようなSQLを作成するプログラムを作成し、発行。検索結果をデータソースとして表示。 この際、コンボボックスの値の有無によってif判定をいれて、Where句(検索条件句)の内容が可変的に変わるように工夫。 http://eprostation.jpn.org/code/access/access0001.html 上のURLのサンプルのsSQLという変数にSQL文をセットして実行するという感じ データ取得のところのF1とかF2とかはフィールド名(ここでは職業とか住所とか)ですね、多分。 (2)は、段階的にクエリを発行し、ワークテーブルにセットしてういく方法。 (1) メインテーブルに対し、職業で絞込みを行いワークテーブル1にその結果を書き込む。 職業が選択されていない場合は、全件ワークテーブル1に書き込む。 (2) ワークテーブル1に対し、住所で絞込みを行いワークテーブル2にその結果を書き込む。 住所が選択されていない場合は、全件ワークテーブル2に書き込む。 (3 )ワークテーブル2をNo順、年齢順に並び替え、先頭の1件だけ抜き出して表示。 (※これに関しても全く検証等はしていないので、誤っている可能性大。) (3)は全データを自分が使いやすい形、配列とかテキストファイルとかに書き出して、アナログ的に行う。 Accessを使う意味が無いので、お勧めしない。 フォームは、 ヘッダ部に検索条件の入力部、 メイン部に結果を表示するフィールド で良いかと。 メイン部分のレコードの扱いは、単票にするか一覧(複数件表示)にするかでレイアウトとか変わってくると思います。
お礼
ありがとうございます! いろいろな方法をご教授いただきまして 勉強になりました。 特に(1)が参考になりました。
お礼
ありがとうございます! おかげさまで、やりたい事ができるようになりました。 自分ではややこしいVBAのコードを考えていたのですが、 ご提案にいただいた作り方ならシンプルで簡単に実装できますね。 たいへん参考になりました。