Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1208 / 2272 ツリー ←次へ | 前へ→

【8224】SQLでの検索 まっきん 06/7/12(水) 15:04 質問[未読]
【8243】Re:SQLでの検索 飛ばない豚 06/7/14(金) 10:36 回答[未読]
【8253】Re:SQLでの検索 小僧 06/7/14(金) 15:16 発言[未読]
【8260】Re:SQLでの検索 飛ばない豚 06/7/14(金) 16:55 発言[未読]

【8224】SQLでの検索
質問  まっきん  - 06/7/12(水) 15:04 -

引用なし
パスワード
   '-----------------------------------------------
'絞込み検索のときに検索キーワードが
'スペースで区切られて入力されたとき
'-----------------------------------------------

'--- キーワードの例(スペースで区切られている) ---
keyword = "サンプル ダウンロード"

'--- 全角スペースを半角スペースに変換 ---
keyword = Replace(keyword," "," ")

'--- キーワードを半角スペースで分割 ---
SplitKeyword = Split(keyword," ")

'--- SQL作成 ---
StrSQL = " select * from table1 where 0 = 0"

'--- 分割されたキーワードをSQLステートメントに反映 ---
For i = 0 to UBound(SplitKeyword)
StrSQL = StrSQL & " and field1 like '%" & SplitKeyword(i) & "%'"
Next

上記のようにフォームの検索文字をスペースをあけることで
絞込み検索をしたいのですが、その検索範囲をfield1〜field10まで
にすることができません・・・

どうすればいいのでしょうか?お願いします。

【8243】Re:SQLでの検索
回答  飛ばない豚  - 06/7/14(金) 10:36 -

引用なし
パスワード
   ▼まっきん さん:

もっと簡単な方法があるかもしれませんが、
回答付かないようなので、とりあえず、

>'--- 分割されたキーワードをSQLステートメントに反映 ---
>For i = 0 to UBound(SplitKeyword)
>StrSQL = StrSQL & " and field1 like '%" & SplitKeyword(i) & "%'"
>Next
この部分を、以下に変更します。

>==============================================================
'変数を一つ作ります。
Dim StrTMP AS String

StrSQL = StrSQL & " AND (" '----- フィールド毎に OR で区切る為

'-----------------------------(1)
StrTMP=""
For i = 0 to UBound(SplitKeyword)
    StrTMP = StrTMP & " and field1 like '%" & SplitKeyword(i) & "%'"
Next
StrTMP = Mid$(StrTMP, 6)

StrSQL = StrSQL & " (" & StrTMP & ) "
'-----------------------------(1)

'-----------------------------(2)
StrTMP=""
For i = 0 to UBound(SplitKeyword)
    StrTMP = StrTMP & " and field2 like '%" & SplitKeyword(i) & "%'"
Next
StrTMP = Mid$(StrTMP, 6)

StrSQL = StrSQL & " OR (" & StrTMP & ) "
'-----------------------------(2)

'〜〜以下、field10まで、繰り返し。(2)以下は、OR をつける事に注意。
'フィールド名がループ化できる、あるいは配列変数に代入してループ化すると省略可能

StrSQL = StrSQL & " )" '--------- 最後に括弧とじ
>==============================================================

以上です。
検索値がNullや空白の場合は考慮してません。

【8253】Re:SQLでの検索
発言  小僧  - 06/7/14(金) 15:16 -

引用なし
パスワード
   ▼まっきん さん、飛ばない豚さん
こんにちは。

> その検索範囲をfield1〜field10までにすることができません・・・

field1 に「サンプル」が含まれている OR
field2 に「サンプル」が含まれている OR
field3 に「サンプル」が含まれている OR

field10 に「サンプル」が含まれている

という条件でレコードを検索する、という事は

[field1] & [field2] & [field3] … & [field10]
に「サンプル」が含まれている

と同意になりませんか?

ただし、

field1「サン」
field2「プル」

などの場合もありますので、絶対に使わなそうな
区切り文字を入れてあげても良いかもしれません。

[field1] & "@@@" & [field2] & "@@@" & [field3] … Like '%[サンプル]%'
 

【8260】Re:SQLでの検索
発言  飛ばない豚  - 06/7/14(金) 16:55 -

引用なし
パスワード
   ▼小僧 さん
こんにちは。

> [field1] & [field2] & [field3] … & [field10]
> に「サンプル」が含まれている
>
> と同意になりませんか?

私も考えました。
検索値が一つだと、同意だと思いますが、複数になると、
少し意味が違ってくると思います。

field1「サンプル」
field2「ダウンロード」

のとき、検索値が「サン」「ロード」だった場合、ヒットするのかしないのか。

まっきんさんの最初のコードを見る限り、ヒットさせない方が良いような、
でも、普通に考えると、ヒットさせた方が良いような。。。。

と、いうことで、混乱してきたのもあり、まっきんさんのコードを生かし、
ヒットさせない方法にしました。(^_^;;


一応、参考、ということで。。。。。

1208 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078227
(SS)C-BOARD v3.8 is Free