Access2010で質問です。
フォーム上のコンボボックスで
レコードを検索・抽出したいと考えています。
以下のような事をやりたい場合、
フォームやVBAをどのように
作ればよろしいのでしょうか?
お忙しいところたいへん恐れ入りますが、
ご教授いただけますと助かります。
======テーブルの説明=====
以下の3つのテーブルがあります。
◆メインテーブル
|No|職業 |住所|年齢|名前|
--------------------------
|01|会社員|東京| 31|品川|
|02|自営業|埼玉| 30|川口|
|03|会社員|東京| 30|渋谷|
|04|自営業|埼玉| 20|戸田|
|05|自営業|埼玉| 20|熊谷|
|06|自営業|東京| 30|太田|
◆職業テーブル
|No|職名 |
-----------
|01|自営業|
|02|会社員|
|03|無職 |
◆住所テーブル
|No|地名|
---------
|01|東京|
|02|埼玉|
|03|千葉|
そして、各テーブルは
以下のようにリレーションされています。
・職業テーブルはメインテーブルの「職業」へリレーション
・住所テーブルはメインテーブルの「住所」へリレーション
=====検索方法の説明=====
検索はフォーム上で行いたいです。
フォームに以下のようなコンボボックスを2つ作成します。
コンボボックス1・・・職業が選べます
コンボボックス2・・・住所が選べます
それぞれのコンボボックスで条件を選んだ後、
「実行」ボタンを押すことで検索結果を表示させたいです。
◆両方のコンボボックスが空欄だった場合
「検索条件を選んでください」との
メッセージボックスを表示させたいです。
◆複数のレコードが抽出された場合にやりたい事
各レコードの「年齢」を比較して
値が一番小さいレコードだけが
抽出されるようにしたいです。
「年齢」が同じ値だった場合(競合した場合)は
「No」の値が小さいレコードを抽出したいです。
◆検索結果の表示方法
抽出されたレコードの「名前」だけを
フォームに表示したいです。
=====検索結果の例(やりたい事)=====
◆事例1
コンボボックス1=「会社員」
コンボボックス2=「東京」
検索結果=「渋谷」
01と03が検索にヒットしますが
「年齢」の値が小さい方(03)だけを
抽出されるようにしたいです。
◆事例2
コンボボックス=「自営業」
コンボボックス=「埼玉」
検索結果=「戸田」
まず02と04と05が検索にヒットしますが
02の「年齢」の値が大きいので除外します。
次に04と05の「年齢」の比較ですが、
同じ値になっています。
したがって「No」の値が小さい04が
抽出されるようにしたいです。
====================
以上です。
できるだけ詳細に書いたつもりですが、
不足な情報がありましたらご指摘ください。
なにとぞよろしくお願いいたします。
No.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バイトでないときが、選択していないとき、に相当します
参考になれば・・・。
フォームでの(コンボボックスなど)入力値をクエリの検索条件に使う、
この機能について検索し習得してみてください。
ありがとうございます!
おかげさまで、やりたい事ができるようになりました。
自分ではややこしいVBAのコードを考えていたのですが、
ご提案にいただいた作り方ならシンプルで簡単に実装できますね。
たいへん参考になりました。
No.1
- 回答日時:
色々やり方はあろうかと思います。
自分が思いつく事としては。
(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/access000 …
上のURLのサンプルのsSQLという変数にSQL文をセットして実行するという感じ
データ取得のところのF1とかF2とかはフィールド名(ここでは職業とか住所とか)ですね、多分。
(2)は、段階的にクエリを発行し、ワークテーブルにセットしてういく方法。
(1) メインテーブルに対し、職業で絞込みを行いワークテーブル1にその結果を書き込む。
職業が選択されていない場合は、全件ワークテーブル1に書き込む。
(2) ワークテーブル1に対し、住所で絞込みを行いワークテーブル2にその結果を書き込む。
住所が選択されていない場合は、全件ワークテーブル2に書き込む。
(3 )ワークテーブル2をNo順、年齢順に並び替え、先頭の1件だけ抜き出して表示。
(※これに関しても全く検証等はしていないので、誤っている可能性大。)
(3)は全データを自分が使いやすい形、配列とかテキストファイルとかに書き出して、アナログ的に行う。
Accessを使う意味が無いので、お勧めしない。
フォームは、
ヘッダ部に検索条件の入力部、
メイン部に結果を表示するフィールド
で良いかと。
メイン部分のレコードの扱いは、単票にするか一覧(複数件表示)にするかでレイアウトとか変わってくると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(Microsoft Office) Outlookメール 連絡先の検索について 〈 ご説明 〉 Windows PC の Outlook 1 2022/09/23 14:43
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
首吊りどこ締めるの
-
変な話しになります。尿検査で...
-
白血球が多いとどんな心配があ...
-
今朝、毎朝の習慣でオナニーし...
-
1日前の検尿
-
射精をして1週間以内に尿検査を...
-
検便についてです。 便は取れた...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
男です。昨日の午後3時くらいに...
-
EXCELで式からグラフを描くには?
-
彼女のことが好きすぎて彼女の...
-
中出しをするとお腹が痛い・・・。
-
値が入っているときだけ計算結...
-
これって喉仏ですか? 私は女性...
-
EXCELの条件付き書式で数式を空...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
中出しをするとお腹が痛い・・・。
-
麻疹風疹の抗体検査結果につい...
-
エクセルでエラーが出て困って...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
至急!尿検査前日にオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
精子が黄色?
-
小数点以下を繰り上げたものを...
-
値が入っているときだけ計算結...
-
口の中に黒い血の塊
-
健否~書類の書き方~
-
甲状腺が腫れているが血液検査...
-
はしかの抗体検査は何科の病院...
-
テスターで断線を調べる方法教...
おすすめ情報