• ベストアンサー

質問:textボックスに"手入力"して検索【(2)】

こんにちは。お世話になりまくっていますtanabaです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1089885 で、良回答をいただいたのですが、その後確認したところ…動きませんでした。 これで、できる!と思い込み、良回答のボタンを押してしまいはやまってしまいました。反省しています。 現在、[Microsoft][ODBC Microsoft Access Driver] クエリ式 'id AND shuppan1 between and' の 構文エラー : 演算子がありません。 というエラーが出ており、どこを修正したらいいのかわからない現状です・・・。 【(1)】 http://riss.narc.affrc.go.jp/kssys/test/encode.asp?file=query URL(1)を参考に(ほぼ同じですが…)、検索スクリプトを作っています。 当方、個人ホームページで"書籍を検索"できるようなものを作成したいと思っています。そして、この検索に追加したい機能というのが 【(2)】 http://kototoi.dl.itc.u-tokyo.ac.jp/opac/help/expart-help.html (2)のURLの"1990年から1995年に出版された資料に限定する。"という 検索方法です。 <input type="text" name="syuppan1">年~<input type="text" name="syuppan2">年 という感じです。 それで、【(1)】のURLと同様の方法で、【(2)】の検索方法をくっつけたい(追加したい)のですが 追加するのに必要な部分をどうしたらよいのかおしえていただけないでしょうか? ※データの保存はmdbで、syuppan1とsyuppan2の下限と上限のデータはmdbの「year」に格納されています。 当方初心者なものでじゅうぶんに理解できておらず申し訳ない気持ちでいっぱいです。 データベースをいじるので自分で作成してみよう!と思い、手を出したのですが、全然理解できず・・。 外注に出しておけばよかったかもしれません・・・。 お時間のある方、おわかりになる方よろしくお願い申し上げます。

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

  • ベストアンサー
回答No.9

こんにちは。 ようやく解決しそうですね・・・多分。 エラーの原因 1.の場合 MDB側のYEARのカラムのデータ型と、条件で入力したデータ型が一致していない。 例えばYEARがDATE型で、条件がNUMBERなど。 この場合、検索条件を型変換する必要がある。 2.の場合 このSQLの場合、何も入れなければこけてしまうのは当然。 入れない可能性があるのなら、SQLの構文を作り変える必要がある。 後は大丈夫ですよね? (^^ゞ

tanaba
質問者

お礼

まさか型変換とは考えもつきませんでした…(汗) mdbを少し変更するだけで完了できました。 こんなに長いレス、お付き合いいただき誠に有り難うございます! 心より感謝いたします。12月にホームページ公開間に合いそうです。 ホッ。

その他の回答 (8)

回答No.8

こんにちは。 BETWEENと"の間にスペース(半角)がないのが原因です。 WHERE句の後は正確に、 WHERE year BETWEEN " & shuppan1 & " AND " & shuppan2 となってますか?(スペースが肝要) (^^ゞ

tanaba
質問者

補足

はい、教えていただいたように半角スペースも入っております。。。悩 SQL = "SELECT * FROM mdbの名前 WHERE year BETWEEN " & shuppan1 & " AND " & shuppan2 すべて上記の記述で検索した場合に発生するエラーを記してみました。 ----------------- 1.【BETWEEN後に半角スペース有りの場合】 [Microsoft][ODBC Microsoft Access Driver] 抽出条件でデータ型が一致しません。 2.【手入力するテキストボックスに何も入れないで検索した場合】 クエリ式 'year BETWEEN AND' の 構文エラー : 演算子がありません。

回答No.7

こんにちは。 syuppan1に値が入っていない(値が取得できてない)のが原因です。 テキストボックス側は「syuppan1」なので、 変数名 = Request.QueryString("syuppan1") でいいはずなんですが・・・。 生成前のSQLには問題がないので、値さえ取れれば動くはずです。 蛇足ですが、&shuppan1 ではなく、& shuppan1 としてますよね? (^^ゞ

tanaba
質問者

お礼

SQL = "SELECT * FROM db5 WHERE year BETWEEN " & shuppan1 & " AND " & shuppan2 でやってみたところ クエリ式 'year BETWEEN123 AND 123' の 構文エラー : 演算子がありません。 と出ました。ちなみに、shuppan1に「123」、shuppan2にも「123」と入れてみました。 BETWEEN123とつながってるここが原因でしょうか・・? すいません、回答してくれていたところと違うことを書いてしまいましたね。 スペースは、キチンと入っております!

tanaba
質問者

補足

度々有り難うございます。  <input name="shuppan1" type="text" size="20"> 年~  <input name="shuppan2" type="text" size="20"> 年 となっているので、shuppan1が正解です。すいません(汗) 途中から間違えてしまっていますね・・。 mdbの、検索の対象となるフィールドが「year」です。

回答No.6

こんばんは。 >>shuppan1= Request.QueryString("year") × >>shuppan1= Request.QueryString("syuppan") × >>shuppan1= Request.QueryString("syuppan1") これが正解 (^^ゞ

tanaba
質問者

補足

SQL = "SELECT * FROM mdbの名前 WHERE year BETWEEN" &shuppan1 & " AND " & shuppan2 shuppan1= Request.QueryString("shuppan1")と、 な・・なおしました! が、[Microsoft][ODBC Microsoft Access Driver] クエリ式 year BETWEEN AND' の 構文エラー : 演算子がありません。 と、まだ出てしまいます(汗) すいません、こんなお時間までおつきあいさせてしまいまして・・。 yearで、mdbのフィールドを指定しているから間違ってはいないと思うのですが、泣

回答No.5

こんばんは。 >>shuppan1= Request.QueryString("year") これっておかしくないですか? テキストボックスは「syuppan1」なんですよね? Request.QueryString("year")には、何か入ってるの??? (^^ゞ

tanaba
質問者

補足

度々、有り難うございます。 テキストボックスですが、名前はsyuppan1です。 yearは、mdbに入っているフィールドの「検索するデータ」なのです(汗) そもそも根本的に、shuppan1= Request.QueryString("year")のyearが間違いなんでしょうか(汗) ここをshuppan1= Request.QueryString("syuppan")にしてもなおらなかったのですが(^^;;;;

noname#25230
noname#25230
回答No.4

#2さんへの補足を見ました。 「'year BETWEEN AND'」でエラー、と指摘されているということは、プログラム内部で実際に処理されようとしているSQL文が「'year BETWEEN AND' 」というようになっているのではないですか? すなわち、nen1(本来はBetweenとANDの間に入る条件)に正しく値が設定されていないので、長さゼロの文字列としてSQL文に混じってしまい、1番目の条件が抜け落ちた「Between AND ~」というSQLになっているのでは? 推測でしかありませんが、1番目の条件にきちんと文字列(年月日かな?)が設定設定されているかどうかを確認してみましょう。

tanaba
質問者

補足

Yamane-D様。 度々、有り難うございます。感謝いたします。 一番目の条件と申しますのは、SQL = "SELECT * FROM mdbの名前 WHERE year BETWEEN" &shuppan1 & " AND " & shuppan2 の、shuppan1のことでよろしいでしょうか? こんな初心者な質問で申し訳ございません・・

回答No.3

こんにちは。 エラーから判断するに、 「syuppan1」に値が入っていません。 ご記載のSQLだと、実行時「syuppan1」と「syuppan2」は必須です。 BETWEEN と AND の間がなくて、続いてしまってますね。 (^^ゞ

tanaba
質問者

補足

度々有り難うございます…。貴重なお時間いただきまして(×_×) syuppan1に値が入っていないということは、 入力フォームの内容を取得、変数に代入したときに shuppan1= Request.QueryString("year") shuppan2= Request.QueryString("shuppan2") としてしまっているからでしょうか・・? これは関係あるのでしょうか。

回答No.2

こんにちは。 エラーの部分を拝見しましたが、多分、SQLを間違えてますね・・・。 BETWEENを使う場合、基本的には、 カラム名 BETWEEN 条件1 AND 条件2 です(ほかにもありますが・・・)。 SELECT ??? FROM  ??? WHERE  ???     AND year BETWEEN syuppan1 AND syuppan2 ですか。 (^^ゞ

tanaba
質問者

補足

ご丁寧にご回答有り難うございます! SQLが間違っているんですよね…。Yamane-D様に教えていただいたやり方で、 SQL = "SELECT * FROM mdbの名前 WHERE year BETWEEN " & shuppan1 & " AND " & shuppan2 とすると、、 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'year BETWEEN AND' の 構文エラー : 演算子がありません。 と出ます。 taka451213様のAND year BETWEEN syuppan1 AND syuppan2というのは、andを追加ということでしょうか? 理解が出来なくて申し訳ございません・・(×_×)

noname#25230
noname#25230
回答No.1

元の回答にあるSQL文を作成する命令ですが、一部、文法上の抜けがあります。 SQL = "SELECT * FROM example WHERE year BETWEEN " & nen1 " AND " & nen2 Set rs = db.Execute(SQL) 上記SQL生成文の中にある 「& nen1 " AND " & nen2」 の部分、「nen1」と" AND "をつなぐ「&」が抜けていますが、これは修正されましたでしょうか? 正確には SQL = "SELECT * FROM example WHERE year BETWEEN " & nen1 & " AND " & nen2 Set rs = db.Execute(SQL) だと思います。 まずはここから確認してください。 元の回答は、ほぼ良回答だとは思いますが、ちょっとしたケアレスミスです。ま、これくらいは勘弁してあげてください。

tanaba
質問者

お礼

あ、有り難うございます!&がないことにも気づいていませんでした・・・。 ご丁寧に有り難うございます!

関連するQ&A