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

解決済みの質問

ACCESSの複数フィールドの検索

私がしたい事はおそらくかなり初歩的なことと類推されますので、がっくりされないようにお願いします。


「報告書」のテーブルがあります。
その報告書のフィールドは
報告日 報告者氏名 A店の感想 B店の感想 C店の感想
となっていると考えてください。

このテーブルをもとに、表形式で一覧の出るフォームを作っており、この一覧のフォームフッターにテキストボックスがあります。
このテキストボックスに例えば「D商品」と入力してエンターを押すと「A店の感想 B店の感想 C店の感想」中に「D商品」が出てくるレコードすべてが抽出されるというようにしたいと思っています。

1つのフィールドでのやり方がとあるサイトにあったので、私は
Private Sub テキスト28_AfterUpdate()
Me.Filter = "A店の感想 like'*" & Me!テキスト28 & "*'"
Me.FilterOn = True
End Sub
という式を作成しました。

これだと「A店の感想」フィールドにキーワードがあればヒットしますが、B店、C店にキーワードがあってもA店にキーワードが無ければ反応はありません。

これを3つのフィールドで出来るようにいくつか試してみましたがどれも失敗でした。
どのようにすれば、複数フィールドのキーワード検索・抽出が出来るのでしょうか。

私の取ったやり方に近いもの、別の全然違うやり方、ともに勉強になるので色々教えてください。


それと、これでも結構検索したのですが、検索ワードが不適切なのか、ありそうなニーズにも関わらずぴったりくるものを見つけられませんでした。
もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。

投稿日時 - 2005-08-31 11:29:33

QNo.1617076

困ってます

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

まだ出てない方法ということで
このテーブルを元に
クエリーをつくってそこに
ABC感想:A店の感想 & B店の感想 & C店の感想という
フィールドを作って
これを検索するようにすれば
できます。

投稿日時 - 2005-08-31 13:01:58

お礼

ありがとうございます!
取り急ぎ教えていただいた方法で解決できました。
何事も工夫すれば、手持ちの技術だけでも改善は図れるということを実感しました。何で思いつかなかったんだろ・・・。


※急に忙しくなった事もあり、#2さん、#3さんのやり方はまだ試せていません。
試す時間が出来たらやってみて、その結果報告と共にお礼を書かせていただいて締め切らせていただきます。しばらく#2さん、#3さんには失礼をいたしますがお許し下さい。

投稿日時 - 2005-09-08 09:21:17

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

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

回答(4)

ANo.3

フォームのフィルタはあまり使わないのですがORでA店・B店・C店を繋げてみてください。
="A店の感想 like'*" & Me!テキスト28 & "*'" OR "B店の感想 like'*" & Me!テキスト28 & "*'"
のように
これで行けませんでしょうか。

クエリでやるとこんな感じです。
SELECT テーブル名.A店の感想, テーブル名.B店の感想, テーブル名.C店の感想
FROM テーブル名
WHERE (((テーブル名.A店の感想) Like "*" & [Forms]![フォーム名]![テキスト28] & "*")) OR (((テーブル名.B店の感想) Like "*" & [Forms]![フォーム名]![テキスト28] & "*")) OR (((テーブル名.C店の感想) Like "*" & [Forms]![フォーム名]![テキスト28] & "*"));

投稿日時 - 2005-08-31 12:53:16

お礼

ありがとうございます。
こちらは何とかできましたが、もっとキチンとAccessそのものを学習する必要がありそうです。そうすればもっと仕事の効率化に活かせそうです。

学習の必要性を強く感じさせていただき、ありがとうございました。
お礼遅くなり申し訳ございません。

投稿日時 - 2005-10-04 14:46:56

ANo.2

1つのキーワードで複数のフィールドを調べて or で表示する。

下記を参考にしていただければ幸いです。

Private Sub コマンド89_Click()
If Me.テキスト48 <> "" Then ' ItemContent、ItemNameはフィールド名です。
selectCondition = "ItemContent like '*" & Trim(Me!テキスト48) & "*' or ItemName like '*" & Trim(Me!テキスト48) & "*'"
End If

Me.Filter = selectCondition
Me.FilterOn = True
End Sub

具体的には、テキスト48に「pass」を入れた時の、selectConditionの中身は
ItemContent like '*pass*' or Itemname like '*pass*'
です。

投稿日時 - 2005-08-31 12:33:16

お礼

ありがとうございます。
やってみましたが、もう少しAccessそのものをキチンと学習する必要がありそうです。わけが判らない状態になりました。
学習の必要性を強く感じさせていただき、ありがとうございました。
お礼遅くなり申し訳ございません。

投稿日時 - 2005-10-04 14:41:29

ANo.1

フィルタの条件に Or は使用できませんか?

> 別の全然違うやり方
ADO を使用しテーブルを検索する方法があります。検索できたレコードを直接フォームに表示するのも良いですが、一度ワークテーブルに書き込みし、そこからフォームに表示します。冗長化した方法ですので、カレントデータベースの場合はあまりオススメできません。

> もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。
コードを記述できる方ですので、その有名そうなサイトのVBAの掲示板を読むだけでも参考になることが多いと思います。

投稿日時 - 2005-08-31 12:12:30

お礼

>フィルタの条件にorを使用

#3の方の仰る形ではダメでした。
別のやり方は後でやってみようと思います。
ADOって何?っていうところから始めないとダメなレベルなので調べるところから始めます。
回答ありがとうございます。

投稿日時 - 2005-08-31 13:25:21

あなたにオススメの質問