• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:<access クエリのあいまい検索>)

クエリのあいまい検索の追加方法とは?

このQ&Aのポイント
  • クエリのあいまい検索で別のフィールドでも同時に検索する方法について教えてください。
  • 住所のフィールドに「京都」が含まれていて、かつ「田中」という文字を含む人を検索する方法について教えてください。
  • 単に「田中」という文字を含む人を検索する方法について教えてください。

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

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.8

フィールドに式入れないでもできます。 出力住所:住所 テーブル並び:空白 表示:チェックあり 抽出条件:LIKE文より右そのまま、IIFからでなくて 住所がNULLならTRUE、LIKEでフォーム指定値にあうもの、抽出条件をTRUEとしていますが、上の書き方でもよくてTRUEは書きません。NULLならの式がないですがLIKE文にNULL与えても*があるので結果同じです。 それをふまえて同じように住所と氏名を用意します。

その他の回答 (7)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

テーブルのフィールドを、 住所名、名前、連絡先、会社名 として、クエリは、 SELECT 住所録.住所名, 住所録.名前, 住所録.連絡先, 住所録.会社名 FROM 住所録 WHERE (((IIf(IsNull([forms]![frm条件検索]![住所名]),True,[住所名] Like "*" & [forms]![frm条件検索]![住所名] & "*"))=True) AND ((IIf(IsNull([forms]![frm条件検索]![名前]),True,[名前] Like "*" & [forms]![frm条件検索]![名前] & "*"))=True)); としても、結果は同じです。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

>一度この設定でクエリの確認をしてみてください。 というのは、先ほど提示したクエリのことです。 クエリの設定、フォームからの呼び出しなど 確かめてみてください、ということです。

salut1977
質問者

お礼

ありがとうございます。 やってみます!!もっと勉強します! すごく詳しく教えていただきましたが、 勉強不足のわたしにはちょっと困難でした。。。 piroin654さん、お手数おかけ致しました、ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

>もう一つの回答(SELECT 住所録~)ですが、 >これは住所と名前のみのテーブルを作成するということでしょうか?? 簡単にするために住所と名前のみのテーブルにしています。 フォームにテキストボックスを二つ作り、それぞれの 名前を住所名、名前とします。 ボタンを一つ作り、そのクリック時のイベントに、 Private Sub コマンド0_Click() DoCmd.OpenQuery ("クエリ1") End Sub とします。クエリ1はクエリの仮の名前です。 設定はこれだけです。他に表示したいフィールドが あればクエリに追加すればいいのですが。 一度この設定でクエリの確認をしてみてください。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

抽出条件欄にtrueと記載するのではなくてlike文で書くことを想定しています。 クエリで「住所」フィールドや「氏名」フィールドがあると思いますが、 その各フィールドのwhere、抽出条件欄にlike文を設けます。 Like "*" & [forms]![frm条件検索]![xxx] & "*") 住所:「京都」と指示あれば「京都」を含むデータ かつ 氏名:「田中」と指示あれば「田中」を含むデータ 住所:「京都」と指示あれば「京都」を含むデータ かつ 氏名:指示なければすべてのデータ 住所:指示なければすべてのデータ かつ 氏名:「田中」と指示あれば「田中」を含むデータ こんなことができます。 この仕掛けをすれば、 全フィールドに考えられるマルチ的抽出条件を設定できます。 別途フィールドを用意していたらそれでも良いです。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

IIf(IsNull([forms]![frm条件検索]![名前]),True,[名前] Like "*" & [forms]![frm条件検索]![名前] & "*") 新しいフィールドに設定し、同様に抽出条件をTrueにします。 住所と名前だけにテーブルを設定すると以下のようなクエリ です。 SELECT 住所録.住所名, 住所録.名前 FROM 住所録 WHERE (((IIf(IsNull([forms]![frm条件検索]![住所名]),True,[住所名] Like "*" & [forms]![frm条件検索]![住所名] & "*"))=True) AND ((IIf(IsNull([forms]![frm条件検索]![名前]),True,[名前] Like "*" & [forms]![frm条件検索]![名前] & "*"))=True));

salut1977
質問者

補足

ありがとうございます! 実は回答を頂いた、『IIf(IsNull([forms]![frm条件検索]![名前]),True,[名前] Like "*" & [forms]![frm条件検索]![名前] & "*")』はやってみました。 が、フィールドが多すぎるとエラーが出てしまって… やり方が間違っているのでしょうか?? 住所のフィールドを入れている列の隣にpiroin654さんからの回答と同じものを入れたのですが。。 もう一つの回答(SELECT 住所録~)ですが、 これは住所と名前のみのテーブルを作成するということでしょうか?? あまりアクセスの勉強ができていなくて。。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

京都を抽出したクエリの結果からさらに田中を抽出するクエリを作るやり方もあります。 悩まず結果がすぐ欲しいならとりあえずこれです。 理想ではないです。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

住所に対しての抽出条件、名前に対しての抽出条件、それぞれ与えます。 京都で田中、という与え方1つでなく京都と田中の2つ、田中だけで良いときは*と田中、(*は条件であるけど全件対象になりますから結果からすると田中だけの仕掛けと同意。) 住所に設定している抽出を真似して名前にも実装します。

salut1977
質問者

補足

ありがとうございます。 でも具体的にはどのように入れるといいのでしょうか。 フィールドに直接式を入れています。 そうではなく,住所として,下の抽出条件にiif~の条件を入れ,(この場合はtrueはどこに入れたらいいのでしょうか) 隣の列に名前部分を入れていった方がいいのでしょうか。 すみません,あまりよく分かっていなくて… 教えてください!!

関連するQ&A