• ベストアンサー

スペース区切り

If name1<>"" Then SQL = SQL & " AND name1 LIKE '%" & name1 & "%'" これで、スペース区切りでも検索できるようにするには? テキストなど見てみるとすごく長くなってしまってるんですが、 簡潔に記述できるものはないでしょうか? よろしくお願いいたします~。

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

  • ベストアンサー
  • picchio
  • ベストアンサー率100% (2/2)
回答No.6

>これは、もう何もbetweenなど範囲の指定?など >しなくてもいいのでしょうか? 出版年の上限と下限が必ず入力されるのであれば SQL = SQL & " AND 出版年 between " & shuppan1 & " and " & shuppan2 でOKです. 先の例は入力フォームで片方,あるいは両方が空白のまま送信された場合を考慮して,わざわざIf文を付けています.

tanaba
質問者

お礼

省略ですが、簡単な流れです・・ 点線で区切ってますが、すべてつながっています。 '入力フォームの内容を取得、変数に代入 pass1= Request.QueryString("pass1") shuppan11= Request.QueryString("shuppan1") shuppan2= Request.QueryString("shuppan1") '------------------------------------------------ 'データベースと接続 Set db = Server.CreateObject("ADODB.Connection") db.Open "nedandb" SQL = "SELECT * FROM nedandb WHERE id 'IDが入ってないとSQL文が発行されない '------------------------------------------------ 'MDBから抜き出してきたいフィールド名は『shuppan1』 '『shuppan11』~『shuppan2』に入力した数字を検索したい If shuppan11<>"" Then  SQL = SQL & " AND shuppan1 >=" & shuppan11 End If If shuppan2<>"" Then  SQL = SQL & " AND shuppan1 <=" & shuppan2 End If '------------------------------------------------ SQL = SQL & " ORDER BY hp_date DESC" '日付の新しい順に並べる 'SQL文を実行してレコードセットを取得 Set rs = db.Execute(SQL) %> '------------------------------------------------ '検索結果の表示  SQL : <%= SQL %><P>  検索条件 本:"<%= nedan11 %>" こんな感じの記述です。 どうも、この記述ですとSQL文が発行されないのです。 しかし、 If namae<>"" Then namaeTmp = Split(Replace(namae," "," ")," ") For i = 0 to UBound(namaeTmp) SQL = SQL & " AND namae LIKE '%" & namaeTmp(i) & "%'" Next End If namaeだけだと namae= Request.QueryString("namae") と指定しやすいのでできています。 もしかして、この変数の時に私の設定が間違えているのかと考えたのですが いろいろやっても解決されませんでした。。 長くてすいません。

tanaba
質問者

補足

なるほど…有り難うございます! > >If shuppan1<>"" Then > SQL = SQL & " AND 出版年 >=" & shuppan1 >End If > >If shuppan2<>"" Then > SQL = SQL & " AND 出版年 <=" & shuppan2 >End If でやろうと思います。 DBはMDBで、MDBの・・・出版年のフィールド名のところは、"shuppan1"という名前になっているのです…。 これでは、 If shuppan1<>"" Then SQL = SQL & " AND 出版年 >=" & shuppan1 End If の、shuppan1という名前が重なってしまってるんで"shuppan1"を"shuppan11"としました。(もちろんテキストの名前も変更しています。) が検索されません。 説明といたしましては textに入れた名前からmdbを呼びに行くのは shuppan11= Request.QueryString("shuppan1") shuppan2= Request.QueryString("shuppan1") という風に変えてやっているのですが、 クエリを呼び出す際に何も反応がおこりません。 やはり、どこか変数が間違っているということなんでしょうか? これだけで推測不可能(だと思いますが…)でしたら、何なりとお申し付けください。

その他の回答 (7)

  • picchio
  • ベストアンサー率100% (2/2)
回答No.8

# 入力フォーム側の名前とは # <input name="shuppan1" type="text">以降 # <input name="shuppan2" type="text">以前 # のことでよろしいですよね? name="名前" の形で記述した部分です. <input type="text"> がテキストボックスを表し それに名前を付けたりサイズを指定する場合は <input name="namae" type="text" size="10"> のように書きます. 最初の質問内容である絞込みの回答から 派生した質問が次々と出て来て収集が付かなくなりつつあるので,一旦この辺で区切りを付けて,新たな質問は別途改めてと言うことでいかがでしょうか?

tanaba
質問者

お礼

そうですね。 有り難うございました! 感謝いたします!!

  • picchio
  • ベストアンサー率100% (2/2)
回答No.7

>shuppan11= Request.QueryString("shuppan1") >shuppan2= Request.QueryString("shuppan1") Request.QueryStringで受け取ることが出来るのは,フォームからgetで送られた値です. postならRequest.Formになります. 入力フォームの出版年を入れるところが <input name="shuppan1" type="text">以降 <input name="shuppan2" type="text">以前 のようになっているとして shuppan1 = Request.QueryString("shuppan1") shuppan2 = Request.QueryString("shuppan2") で受け取れます. 偶然にもデータベース側の出版年がshuppan1と言う名前なのでしたら shuppan11 = Request.QueryString("shuppan1") shuppan2 = Request.QueryString("shuppan2") としても良いですが,入力フォーム側の名前がどうなっているのか確認してください.

tanaba
質問者

補足

入力フォーム側の名前とは <input name="shuppan1" type="text">以降 <input name="shuppan2" type="text">以前 のことでよろしいですよね?

  • picchio
  • ベストアンサー率100% (2/2)
回答No.5

>1990年から1995年に出版された資料に限定する。という方法も >上記のやり方で可能でしょうか? 数値の比較になるので,文字列検索のLIKEとは違いますね. 検索文字列をname1に格納したように,出版年の下限をshuppan1 上限をshuppan2とでもして If shuppan1<>"" Then  SQL = SQL & " AND 出版年 >=" & shuppan1 End If If shuppan2<>"" Then  SQL = SQL & " AND 出版年 <=" & shuppan2 End If のようにしてみてください.

tanaba
質問者

補足

ご丁寧に、 有り難うございます。ペコリ。 これは、もう何もbetweenなど範囲の指定?など しなくてもいいのでしょうか? すいません、よく理解していないもので(^^;)

  • picchio
  • ベストアンサー率100% (2/2)
回答No.4

>『半角スペース』でも、『全角スペース』でも対応するにはどうしたらいいのでしょうか? 全角スペースを半角スペースに置換してからSplitで出来ると思います. If name1<>"" Then  name1Tmp = Split(Replace(name1," "," ")," ")  For i = 0 to UBound(name1Tmp)   SQL = SQL & " AND name1 LIKE '%" & name1Tmp(i) & "%'"  Next End If

tanaba
質問者

お礼

最終形態は、そのようにしたいと考えております。 お忙しいところ、私などの質問に答えていただき本当に有り難うございます。

tanaba
質問者

補足

す・・すごいです。勉強になります有り難うございます! 心よりお礼申し上げます。 あと、最後にひとつだけ教えていただきたいところがあるのですが、、、 http://kototoi.dl.itc.u-tokyo.ac.jp/opac/help/expart-help.html ここの出版年のところの、 ← 1990年から1995年に出版された資料に限定する。という方法も 上記のやり方で可能でしょうか?

  • picchio
  • ベストアンサー率100% (2/2)
回答No.3

こんな感じでどうでしょうか? If name1<>"" Then  name1Tmp = Split(name1," ")  For i = 0 to UBound(name1Tmp)   SQL = SQL & " AND name1 LIKE '%" & name1Tmp(i) & "%'"  Next End If

tanaba
質問者

補足

うおお~!できました!有り難うございます(泣) あとおひとつ、お伺いしてもよろしいでしょうか?(汗) 『半角スペース』でも、『全角スペース』でも対応するにはどうしたらいいのでしょうか? 度重なる質問で、申し訳ございません。

回答No.2

こんにちは。 条件側が「スペース区切り」で、いわゆる「絞り込み検索」ですね。 この場合、検索条件をスペースで区切って、それぞれ変数に入れなければいけません・・・。 そして、変数が「NULL」でない場合だけ、ANDでWHERE句を足していきましょう。 "東京 お台場"と入力。 変数(または配列でも可)に、スペース区切りで代入(この時、スペースを削除する)。 それぞれの変数(または配列のN番目)がNULLでない場合のIF文で、AND条件をくっつける。 こんな感じかと思います。 なんとなくわかります? (^^ゞ

tanaba
質問者

お礼

ご丁寧に有り難うございます!

回答No.1

こんにちは。 >>これで、スペース区切りでも検索できるようにするには? データと検索条件の相関関係をもう少し具体的にお願いします。 後、「スペース区切り」とはどのような状況ですか? (^^ゞ

tanaba
質問者

補足

早速レスいただき、有り難うございます(^_^) スペース区切りですけど、 例えですけれども、"日本東京お台場"という文字があるとします。 検索をかける際に "東京 お台場"と入力しても、"東京日本お台場"が出るようにしたいのです。 ご指導よろしくお願いいたします~!

関連するQ&A