- ベストアンサー
Accessのクエリの検索条件の増加に関する問題
- Access2003を使って検索フォームを作成し、複数のテキストボックスを使用した抽出条件を設定したところ、結果が予想と異なる結果となりました。
- 増やしたテキストボックスの抽出条件と既存のテキストボックスの抽出条件が異なるため、新しいテキストボックスによる抽出結果が変化してしまいました。
- おそらく、3つのテキストボックスを同じ抽出条件で扱うことができないため、結果が異なると思われます。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
SQlで入力したのですか? だったら、Orのところは括弧で囲んでください デザインビューで設定したのなら最初の解答の書き方でいいのですが SQLビューで書くときには括弧が必要です (AndのほうがORより先に処理されてしまいます) ・・・ AND (建築病理学データ.材料種 Like "*" & [forms]![建築病理学データ]![材料抽出] &"*" or [forms]![建築病理学データ]![材料抽出] is null) AND ・・・
その他の回答 (8)
- CHRONOS_0
- ベストアンサー率54% (457/838)
>全データを表示させたいのですが、どこかかえるのですか? 理屈が分からないままやっておられるのかな Like "*" & [パラメータ] "*" この書き方をした場合パラメータが未入力(Null)だと Like "**" となり、全ての文字列がヒットします つまり何もしなくても未入力なら全抽出になるのです >症状抽出と部位抽出が正確な結果が出てこなかったのですが。 どう正確にでなかったのかを書かなきゃこちらには何も分かりません 考えられる原因としてフィールドに未入力(Null)のものがありませんか というのは一番最初の回答に書きましたよ Like "**" は全ての文字列にヒットしますがNullは除外されます
補足
すみません。やっと意味がわかってきました。 この場合、フィールドに未入力があるものが 材料種、構造 です。 症状、部位、文献には未入力はありません。 ということは 材料種、構造は Like "*" & [パラメータ] &"*" or [パラメータ] is null 症状、部位、文献は Like "*" & [パラメータ] &"*" というふうに SELECT 建築病理学データ.事例番号, 建築病理学データ.建築用途, 建築病理学データ.構造, 建築病理学データ.発見時症状, 建築病理学データ.症状, 建築病理学データ.部位, 建築病理学データ.材料種, 建築病理学データ.直接原因, 建築病理学データ.間接原因, 建築病理学データ.備考, 建築病理学データ.原因, 建築病理学データ.補修策, 建築病理学データ.対応策, 建築病理学データ.関連知識, 建築病理学データ.築年数, 建築病理学データ.文献 FROM 建築病理学データ WHERE 建築病理学データ.症状 Like "*" & [forms]![建築病理学データ]![症状抽出] &"*" AND 建築病理学データ.部位 Like "*" & [forms]![建築病理学データ]![部位抽出] &"*" AND 建築病理学データ.材料種 Like "*" & [forms]![建築病理学データ]![材料抽出] &"*" or [forms]![建築病理学データ]![材料抽出] is null AND 建築病理学データ.構造 Like "*" & [forms]![建築病理学データ]![構造抽出] &"*" or [forms]![建築病理学データ]![構造抽出] is null AND 建築病理学データ.文献 Like "*" & [forms]![建築病理学データ]![文献抽出] &"*" ORDER BY 建築病理学データ.事例番号; としましたが、これでも上手くいかず、 条件を入力してもデータ全部がでてきました。 まだ考え方が違う部分、勘違いしている部分があると思うのですが、ご指摘ください。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>条件のだぶりですか?これがいけなかったのでしょうか? 関係ありません ORで同じものを繰り返すのは無駄なだけで結果には関係ありません でもデザインビューでどのような書き方をするとあんなふうになるのか想像できません 苦労してるなというのは分かりますけどね >フォームにある構造抽出、建築用途抽出、文献抽出も同じくANDで、あ >いまい条件にしたいのです。 全部で5つの条件ということ? だったら同じようにして5つ並べるだけでいいのでは SELECT 建築病理学データ.事例番号, 建築病理学データ.建築用途, 建築病理学データ.構造, 建築病理学データ.発見時症状, 建築病理学データ.症状, 建築病理学データ.部位, 建築病理学データ.材料種, 建築病理学データ.直接原因, 建築病理学データ.間接原 建築病理学データ.備考, 建築病理学データ.原因, 建築病理学データ.補修策, 建築病理学データ.対応策, 建築病理学データ.関連知識, 建築病理学データ.築年数, 建築病理学データ.文献 FROM 建築病理学データ WHERE 建築病理学データ.症状 Like "*" & [forms]![建築病理学データ]![症状抽出] & "*" AND 建築病理学データ.部位 Like "*" & [forms]![建築病理学データ]![部位抽出] & "*" AND 建築病理学データ.材料 Like "*" & [forms]![建築病理学データ]![材料抽出] & "*" AND 建築病理学データ.構造 Like "*" & [forms]![建築病理学データ]![構造抽出] & "*" AND 建築病理学データ.文献 Like "*" & [forms]![建築病理学データ]![文献抽出] & "*" ORDER BY 建築病理学データ.事例番号; 今度は逆に上のSQLをSQLビューに貼り付けてから デザインビューで表示してください 作り方がわかるはずです
補足
未入力がある場合、全データを表示させたいのですが、どこかかえるのですか? これでやってみると症状抽出と部位抽出が正確な結果が出てこなかったのですが。 何回も質問して申し訳ないです。
- CHRONOS_0
- ベストアンサー率54% (457/838)
泥沼にはまっちゃったということがよく分かるSQLですね これをメモ帳に貼り付けて適宜改行を入れて整理してみると 結構問題点が見えてきますよ(条件のだぶりが3箇所もある) で、 フォームには構造抽出や文献抽出というテキストボックスもあるみたいですが これはどう抽出条件に絡むの
補足
ほんとですか?SQLというのがわからなかったんで、見ても全然わからなかったのです。(泣)条件のだぶりですか?これがいけなかったのでしょうか? はい。フォームにある構造抽出、建築用途抽出、文献抽出も同じくANDで、あいまい条件にしたいのです。できれば文献抽出だけはテキストボックスに入れた内容から始まるものを抽出したいのですが。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>はい。抽出条件を書いても全部抽出されます。 何をしても全部抽出されるのですね >あとすみませんが、SQLとは、クエリのSQLビューに書いてあるものですか? そうです
補足
SELECT 建築病理学データ.事例番号, 建築病理学データ.建築用途, 建築病理学データ.構造, 建築病理学データ.発見時症状, 建築病理学データ.症状, 建築病理学データ.部位, 建築病理学データ.材料種, 建築病理学データ.直接原因, 建築病理学データ.間接原因, 建築病理学データ.状況, 建築病理学データ.備考, 建築病理学データ.原因, 建築病理学データ.補修策, 建築病理学データ.対応策, 建築病理学データ.関連知識, 建築病理学データ.築年数, 建築病理学データ.文献 FROM 建築病理学データ WHERE (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND ((建築病理学データ.材料種) Like "*" & [forms]![建築病理学データ]![材料抽出] & "*")) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![材料抽出]) Is Null)) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![材料抽出]) Is Null)) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![構造抽出]) Is Null)) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![文献抽出]) Is Null)) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![構造抽出]) Is Null)) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND ((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![文献抽出]) Is Null)) OR (((建築病理学データ.部位) Like "*" & [forms]![建築病理学データ]![部位抽出] & "*") AND (([forms]![建築病理学データ]![症状抽出]) Is Null)) OR (((建築病理学データ.症状) Like "*" & [forms]![建築病理学データ]![症状抽出] & "*") AND (([forms]![建築病理学データ]![部位抽出]) Is Null)) OR ((([forms]![建築病理学データ]![症状抽出]) Is Null) AND (([forms]![建築病理学データ]![部位抽出]) Is Null)) ORDER BY 建築病理学データ.事例番号; ↑一応書いてあるものを全部のせました。 最初の二つのテキストボックス名は「症状抽出」と「部位抽出」です。 3つめのテキストボックス名は「材料抽出」です。 Accessのことあまりわかってなくて大変申し訳ないです。
- CHRONOS_0
- ベストアンサー率54% (457/838)
私がやって欲しかったのは、抽出条件を書いて 何も条件を入れなかったときどうなるかというやつだったんですが 抽出条件を入れても関係なく全部抽出されるのですか? そのクエリのSQLをコピーしてここに貼り付けてくれますか?
補足
はい。抽出条件を書いても全部抽出されます。 あとすみませんが、SQLとは、クエリのSQLビューに書いてあるものですか?
- CHRONOS_0
- ベストアンサー率54% (457/838)
3つ目だけに条件を書いて 何も入力しなかったらどうなります? 全てのレコードが表示されますか?
補足
初めの二つの抽出条件を消して、3つめだけ抽出条件をいれて検索しても全データが出てきました。これは設定が間違ってるってことですかね?
- CHRONOS_0
- ベストアンサー率54% (457/838)
>[パラメーター]というのは[Forms]![フォーム名]![テキストボックス名]のことですか? そうです
補足
はじめの2つのテキストボックスの検索結果は正確な結果が出たのですが、3つ目に設定したテキストボックスを入れるとできませんでした。3つ目に設定したテキストボックスだけ入力すると全データが出てくるのですが。。
- CHRONOS_0
- ベストアンサー率54% (457/838)
3つの条件の関係は? Like "*" & [パラメータ] "*" を並べて「未入力時条件無し」とできるのはANDのときだけですよ それに、Likeはテキスト型にしか働きませんから 対象フィールドに未入力(Null)があると条件無しになってくれません Nullがある場合は Like "*" & [パラメータ] "*" or [パラメータ] is null
補足
説明不足ですみません。 3つの条件の関係は全部の条件が一致したものを結果として出したいので、ANDです。 あの・・初歩的なことですみません。 [パラメーター]というのは[Forms]![フォーム名]![テキストボックス名]のことですか?
お礼
できました!ありがとうございます! 親切に教えていただきご迷惑おかけしました。 本当にありがとうございます。