Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No24849.部分一致

タイトル部分一致
記事No: 24849
投稿日: 2004/09/07(Tue) 12:09
投稿者: りゅりゅりゅ
OS:
Access Version:

こんにちわー。
部分一致検索ができるようにしたいと考えているんですが、
LIKE演算子やワイルドカードを使えばできそうということまでは分ったのですが、
検索の仕方がちょっと難しいんで困っています。

500ある学校のデータを部分一致検索できるようにしたいと思っているのですが、
例えば、「りゅりゅ小学校」と「りゅりゅ東小学校」という2つの学校があるとします。

で、検索画面で、「りゅりゅ」と入力すれば、「りゅりゅ小学校」と「りゅりゅ東小学校」と
2つ表示され、「東」と入力されれば「りゅりゅ東小学校」のみが表示されるといったものを
作りたいと思っています。

ただ単純に*を付けていけばできるのかな?と思っているのですが、
これを500校全てに設定しようと思えば、500個分のクエリを作らなきゃいけないんでしょうか?

それとももっと簡単な方法って何かあるのでしょうか?

タイトルRe: 部分一致
記事No: 24853
投稿日: 2004/09/07(Tue) 12:47
投稿者: S.S
クエリを使うんですか?それとも ADO か DAO?
クエリなら抽出条件に「Like '*' & [Forms]![検索フォーム名]![コントロール名] & '*'」
でできますよ。

タイトルRe^2: 部分一致
記事No: 24857
投稿日: 2004/09/07(Tue) 13:19
投稿者: りゅりゅりゅ
> クエリを使うんですか?それとも ADO か DAO?
> クエリなら抽出条件に「Like '*' & [Forms]![検索フォーム名]![コントロール名] & '*'」
> でできますよ。

返信ありがとうございます。
一応クエリでやってみるつもりですが、よろしければ、ADO、DAOという
やり方もお教え願えないでしょうか?
宜しくお願いします。

タイトルRe^3: 部分一致
記事No: 24858
投稿日: 2004/09/07(Tue) 13:25
投稿者: S.S

> 一応クエリでやってみるつもりですが、よろしければ、ADO、DAOという
> やり方もお教え願えないでしょうか?

ADO です。

Dim strSQL As String
Dim Rs As ADODB.Recordset

strSQL = ""
strSQL = strSQL & " Select * From テーブル名 "
strSQL = strSQL & " Where フィールド名 Like '*'" & Forms![フォーム名]![コントロール名] & "'*'"

Set Rs = CurrentProject.Connection.Execute(strSQL)

上記でレコードセットが生成されます。

タイトルRe^4: 部分一致
記事No: 24892
投稿日: 2004/09/08(Wed) 09:34
投稿者: りゅりゅりゅ
お教えいただきありがとうございます。
無事に完成いたしました。ちなみにクエリで完成させることができました。

申し訳ないですが、引き続き教えていただきたいことがございます。

今回完成した部分一致検索の他に、学校名の五十音順検索ができるフォーム
があります。
500ある学校の一覧表から、部分一致や五十音検索で絞込をかけ、さらにそこから取り出したい
1つの学校のデータに飛べるようにコマンドボタンを配置し、マクロを組んで別のページに
飛ぶようにしております。

新しいページで表示されるのは、絞込をかけて選んだ1校のデータです。

ここで問題になってくるのですが、その新しいページのレコードソースによって
ちゃんと飛んでこれるかこれないか変化があるのです。

例えば部分一致検索に使ったクエリを新しいページのレコードソースに設定していれば
部分一致は何問題なく検索できるのですが、五十音検索は、コマンドボタンを押した時
にパラメータダイアログボックスが出てきて検索がややこしくなってしまいます。

逆に五十音検索に使っているクエリを新しいページのレコードソースに設定していれば
その逆のことが起こります。
五十音検索はうまくできるけど、部分一致検索ではパラメータダイアログボックスが出てきて
しまう。。

この新しいページのレコードソースになっているクエリをうまく設定すれば
解決するんじゃないかと思っているのですが、一体どういう設定をすれば
うまく両方とも検索ができるようになるのでしょうか?

クエリのデザインビューで、抽出条件のところに五十音検索のプロシージャを
入力し、またはのところに部分一致のプロシージャを入力してみると、
両方で2回パラメータダイアログボックスが出てきてしまいます。。

長い文章になってしまって申し訳ないです。
何か解決法があればぜひ教えて下さい。

タイトルRe^5: 部分一致
記事No: 24893
投稿日: 2004/09/08(Wed) 09:44
投稿者: S.S
やりたいことはあいまい検索で抽出したデータを表形式のフォームに表示して
さらにその中から一件を選択して別のフォームに詳細を表示したいということでしょうか?

それであるならば、もうひとつクエリを作成し、テーブルのキーになる抽出条件の部分に
Forms[表形式のフォーム名]![キーとなるコントロール名]
とすれば良いのではないでしょうか?
そのクエリをフォームに設定すればできると思いますよ。

タイトルRe^6: 部分一致
記事No: 24895
投稿日: 2004/09/08(Wed) 10:02
投稿者: りゅりゅりゅ
返信ありがとうございます。
> やりたいことはあいまい検索で抽出したデータを表形式のフォームに表示して
> さらにその中から一件を選択して別のフォームに詳細を表示したいということでしょうか?

そうです、正にそういうことです。


> それであるならば、もうひとつクエリを作成し、テーブルのキーになる抽出条件の部分に
> Forms[表形式のフォーム名]![キーとなるコントロール名]
> とすれば良いのではないでしょうか?
> そのクエリをフォームに設定すればできると思いますよ。

実は表形式のフォームが2つあります。
部分一致検索フォームと五十音検索フォームの2つです。
しかし1件を選択し、別のフォームに表示させる時は共通の1つのフォームに表示させること
になります。

その場合、新しくクエリを作成したときの抽出条件の部分に入力する
Forms[表形式のフォーム名]![キーとなるコントロール名]
という式の[表形式のフォーム名]の所が2つ必要になってくるかと思うのですが、
その場合はどういう式にすれば良いのでしょうか?

タイトルRe^7: 部分一致
記事No: 24896
投稿日: 2004/09/08(Wed) 10:22
投稿者: S.S
複数のフォームから1つのクエリを使用するということでしょうか?
と、すると一番手っ取り早いのが結果を表示するフォームに非連結のテキストボックスを貼り付けて
そのフォームを表示する前に
Forms[結果表示フォーム名]![キーとなるコントロール名] = Me.キーとなるコントロール名
として、クエリの抽出条件に
Forms[結果表示フォーム名]![キーとなるコントロール名]
としれやれば簡単かと思いますよ。

タイトルRe^8: 部分一致
記事No: 24901
投稿日: 2004/09/08(Wed) 11:11
投稿者: りゅりゅりゅ
> 複数のフォームから1つのクエリを使用するということでしょうか?

五十音検索フォームに使っているクエリと、部分一致検索に使っている
クエリはそれぞれ違うものです。

結果表示フォームのレコードソースに両方のクエリを設定することができれば
うまく解決するのかと思っていますが、2つ入力することができませんよね?

そのため、今結果表示フォームのレコードソースに使うクエリはどういったものに
すれば良いのかということで悩んでいます。


> と、すると一番手っ取り早いのが結果を表示するフォームに非連結のテキストボックスを貼り付けて
> そのフォームを表示する前に
> Forms[結果表示フォーム名]![キーとなるコントロール名] = Me.キーとなるコントロール名
> として、クエリの抽出条件に
> Forms[結果表示フォーム名]![キーとなるコントロール名]
> としれやれば簡単かと思いますよ。

Forms[結果表示フォーム名]![キーとなるコントロール名] = Me.キーとなるコントロール名
のFormsにも[]をつけて[Forms]という式にしなければならないんですよね?
五十音検索や部分一致検索フォームのことは式に含まなくても良いのでしょうか?

タイトルRe^9: 部分一致
記事No: 24903
投稿日: 2004/09/08(Wed) 11:23
投稿者: Tkwan
2つの方法が考えられます。

1.一つのフォームのレコードソース(複数クエリ)を切り替えることは可能です。
2.Filterプロパティを使えば(クエリは使わない)、部分一致と50音検索両方設定可能です。

[次頁]

 

ページの先頭へ 前ページへ戻る