こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Accessのクエリ

初めまして。Accessのクエリについての質問です。

Access2003を使っています。
検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件にあいまい条件のLike "*" & [Forms]![フォーム名]![テキストボックス名] & "*"を入れています。

今はテキストボックスが2つですが、もっと増やしていろんな条件で検索出来るようにしたいので、3つ目のテキストボックスを作り、抽出条件も同じように入れました。ですが、そうすると今までちゃんとできていた最初の2つのテキストボックスによる抽出が違った結果となりでてきました。このとき、新しく作った3つ目のテキストボックスは空欄なので最初と同じ結果が出ると思ったのですが、これは抽出条件が3つはできないということでしょうか?どなたか教えてください。

投稿日時 - 2008-01-24 16:39:09

QNo.3709663

困ってます

質問者が選んだベストアンサー

SQlで入力したのですか?
だったら、Orのところは括弧で囲んでください

デザインビューで設定したのなら最初の解答の書き方でいいのですが
SQLビューで書くときには括弧が必要です

(AndのほうがORより先に処理されてしまいます)

・・・
AND
(建築病理学データ.材料種 Like "*" & [forms]![建築病理学データ]![材料抽出] &"*" or [forms]![建築病理学データ]![材料抽出] is null)
AND
・・・

投稿日時 - 2008-01-26 16:52:15

お礼

できました!ありがとうございます!
親切に教えていただきご迷惑おかけしました。
本当にありがとうございます。

投稿日時 - 2008-01-27 23:00:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.8

>全データを表示させたいのですが、どこかかえるのですか?
理屈が分からないままやっておられるのかな

Like "*" & [パラメータ] "*"
この書き方をした場合パラメータが未入力(Null)だと

Like "**"

となり、全ての文字列がヒットします
つまり何もしなくても未入力なら全抽出になるのです

>症状抽出と部位抽出が正確な結果が出てこなかったのですが。
どう正確にでなかったのかを書かなきゃこちらには何も分かりません

考えられる原因としてフィールドに未入力(Null)のものがありませんか
というのは一番最初の回答に書きましたよ

Like "**"
は全ての文字列にヒットしますがNullは除外されます

投稿日時 - 2008-01-26 03:03:45

補足

すみません。やっと意味がわかってきました。

この場合、フィールドに未入力があるものが
材料種、構造 です。
症状、部位、文献には未入力はありません。
ということは
材料種、構造は 
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 建築病理学データ.事例番号;

としましたが、これでも上手くいかず、
条件を入力してもデータ全部がでてきました。
まだ考え方が違う部分、勘違いしている部分があると思うのですが、ご指摘ください。

投稿日時 - 2008-01-26 15:21:48

ANo.7

>条件のだぶりですか?これがいけなかったのでしょうか?
関係ありません
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ビューに貼り付けてから
デザインビューで表示してください
作り方がわかるはずです

投稿日時 - 2008-01-26 00:43:53

補足

未入力がある場合、全データを表示させたいのですが、どこかかえるのですか?

これでやってみると症状抽出と部位抽出が正確な結果が出てこなかったのですが。

何回も質問して申し訳ないです。

投稿日時 - 2008-01-26 01:30:03

ANo.6

泥沼にはまっちゃったということがよく分かるSQLですね
これをメモ帳に貼り付けて適宜改行を入れて整理してみると
結構問題点が見えてきますよ(条件のだぶりが3箇所もある)

で、
フォームには構造抽出や文献抽出というテキストボックスもあるみたいですが
これはどう抽出条件に絡むの

投稿日時 - 2008-01-25 19:14:24

補足

ほんとですか?SQLというのがわからなかったんで、見ても全然わからなかったのです。(泣)条件のだぶりですか?これがいけなかったのでしょうか?

はい。フォームにある構造抽出、建築用途抽出、文献抽出も同じくANDで、あいまい条件にしたいのです。できれば文献抽出だけはテキストボックスに入れた内容から始まるものを抽出したいのですが。

投稿日時 - 2008-01-25 23:33:27

ANo.5

>はい。抽出条件を書いても全部抽出されます。
何をしても全部抽出されるのですね

>あとすみませんが、SQLとは、クエリのSQLビューに書いてあるものですか?
そうです

投稿日時 - 2008-01-25 18:02:19

補足

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のことあまりわかってなくて大変申し訳ないです。

投稿日時 - 2008-01-25 18:15:25

ANo.4

私がやって欲しかったのは、抽出条件を書いて
何も条件を入れなかったときどうなるかというやつだったんですが

抽出条件を入れても関係なく全部抽出されるのですか?

そのクエリのSQLをコピーしてここに貼り付けてくれますか?

投稿日時 - 2008-01-25 00:26:40

補足

はい。抽出条件を書いても全部抽出されます。

あとすみませんが、SQLとは、クエリのSQLビューに書いてあるものですか?

投稿日時 - 2008-01-25 16:07:34

ANo.3

3つ目だけに条件を書いて
何も入力しなかったらどうなります?
全てのレコードが表示されますか?

投稿日時 - 2008-01-24 20:25:29

補足

初めの二つの抽出条件を消して、3つめだけ抽出条件をいれて検索しても全データが出てきました。これは設定が間違ってるってことですかね?

投稿日時 - 2008-01-24 20:30:17

ANo.2

>[パラメーター]というのは[Forms]![フォーム名]![テキストボックス名]のことですか?
そうです

投稿日時 - 2008-01-24 19:40:40

補足

はじめの2つのテキストボックスの検索結果は正確な結果が出たのですが、3つ目に設定したテキストボックスを入れるとできませんでした。3つ目に設定したテキストボックスだけ入力すると全データが出てくるのですが。。

投稿日時 - 2008-01-24 20:00:19

ANo.1

3つの条件の関係は?

Like "*" & [パラメータ] "*"

を並べて「未入力時条件無し」とできるのはANDのときだけですよ
それに、Likeはテキスト型にしか働きませんから
対象フィールドに未入力(Null)があると条件無しになってくれません

Nullがある場合は

Like "*" & [パラメータ] "*" or [パラメータ] is null

投稿日時 - 2008-01-24 19:10:01

補足

説明不足ですみません。
3つの条件の関係は全部の条件が一致したものを結果として出したいので、ANDです。

あの・・初歩的なことですみません。
[パラメーター]というのは[Forms]![フォーム名]![テキストボックス名]のことですか?

投稿日時 - 2008-01-24 19:20:40

あなたにオススメの質問