rs.filterでlikeの検索ができない理由と解決法について

このQ&Aのポイント
  • rs.filterでlikeの検索ができない理由と解決法について調べました。
  • SQLのWHERE句では問題なくlikeを使って抽出できるが、rs.filterではうまくいかないことが分かりました。
  • 現在は力技でrs.filterを使用していますが、betweenも使えず、likeも機能しないため、経験のある方に解決策を教えて欲しいです。
回答を見る
  • ベストアンサー

rs.filterで、likeの検索ができません・・

こんにちは。 rs.Filterで、likeを使った検索がどうしてもできません。いろいろ調べて、ADOやACCESSVBAなどのページでは、%をワイルドカードにして問題なくできるようないことが書いてありますが・・・ SQL検索のWHEREでは問題なくLikeを使って抽出ができています。WHEREと構文は変わらないと記載してるページもありましたがうまくういきません。。。 DBのデータ型は数値です。 たとえば、20~29 までを抽出させたいので、 (R=2です。実際にはForで、2は、変化しますので。)  rs.Filter ="rest like '"&R&"%'" と記載したとします。 数値型とはいえ、Whereではこれで検索できます。 ためしに、 rs.Filter ="rest like "&R&"%" ’をとってみましたがだめでした・・・ 力技ですが、現在は  rs.Filter ="rest >= '"&R&"0' and rest < '"&R+1&"0'" (以上、未満)を使用しています。 FILTERって、betweenも使えないようだし、likeもエラーはでないものの機能しないんでしょうか・・・ どなたか経験のある方教えて下さい!

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

数値フィールドに対しては上手くないようです レコードセットに文字列フィールドを加えてその文字列フィールドに対してLike演算子を使ってみましょう rs.Open "SELECT *, CStr(rest) as sRest FROM テーブル", cnn rs.Filter = "sRest Lik '" & r & "%'" といった具合で ・・・

az_koharu
質問者

お礼

できました~! すっきりです。 SELECT *, CStr(rest) as sRest FROM テーブル SELECTの後にデータを取得するときに、フィールドのデータ形式を別のものとして取得する という操作自体を知らなかったので、大変役に立ちました。 どうもありがとうございました!

関連するQ&A

  • WHERE と Filter

    アクセスのADOで rs.Open "SELECT * FROM テーブル1 WHERE フィールド1=あ", cn, adOpenStatic, adLockOptimistic とするのと、 rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "フィールド1゛ = 'あ'" とするのでは、 どちらの方が処理速度が速いですか?

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • ワイルドカード 「Not like」

    エクセルからアクセスへADOで接続しているのですが RS.Open "Tテーブル", CN, adOpenStatic, adLockOptimistic RS.Filter = "タイトル Like '%ヒットしたくない文字%'" なら問題なく行くのですが RS.Filter = "タイトル not Like '%ヒットしたくない文字%'" や RS.Filter <> "タイトル Like '%ヒットしたくない文字%'" にするとエラーになります。 (競合しています、コンパイルエラー) どうすれば、「含まない」ができるのでしょうか? アドバイス宜しくお願い致します。

  • Access & ADOで「'」のLIKE検索

    Access2000とVB6のADO2.6でシングルコーテーションのLIKE検索をしたいのですが、 Selsect * from tbl where f1 Like ''' だとエラーが出てしまいます。 Selsect * from tbl where f1 Like '[']' も使えないようです。わかる方お願いいたします。

  • adoでBetween は使えないのでしょうか?

    ADOで期間で抽出したいのですが rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 = #2015/01/01#" は問題なく通るのですが、 rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 Between #2015/01/01# And #2015/01/31#" だと 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 と言うエラーになります。 adoでBetween は使えないのでしょうか?

  • LIKEによる検索について

    お世話になります。 id| text --+-------------- 1 |AD(LONG+LONG2+INT) --+-------------- 2 |AD(INT+LONG) --+-------------- 3 |AD(LONG2+INT) --+-------------- : | : というテーブル(sample)がありまして、 textカラムの'LONG'だけをを抽出したいのですが、うまく抽出できません(LONG2なども検索されてしまう)。 SELECT * FROM sample WHERE text LIKE '%LONG%' AND text NOT LIKE '%LONG2%' ではだめなのはわかりましたが、こういう場合、どう検索したらよいのでしょうか? よろしくお願いいたします。

  • ADOでのBetweenの使い方がわかりません。

    VBAです。 rs.Filter = "日付 Between #2016/1/1# And #" & Date & "#" これって何が間違ってますか? ADOでのBetweenの使い方がわかりません。 今年を抽出したいです。 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。

  • WHERE句だと抽出できない VBA ADO

    アクセスのADOについて質問があります。 SQL文の中でWHERE句を使ってフィルタをすると返り値が0件になるのに、 rs.Open strSQLした後に、 rs.Filterで抽出すると、適切な数値が返ります。 具体的に言うと 【1】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名 WHERE (((T_会社名.住所) Like ""*埼玉*""));" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic i = rs.RecordCount 【2】 strSQL = "SELECT T_会社名.*, T_会社名.住所 FROM T_会社名;" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic rs.Filter = "T_会社名.住所 like '%埼玉%'" i = rs.RecordCount だと、【2】が、適切な数値が返ります。 なぜ【1】はダメなのでしょうか?

  • ADOでBetweenを使ってフィルタをする時

    ADOでBetweenを使ってフィルタをする時 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になってしまいます。 rs.Filter = "取引日 = Between #2013/1/1# And #2013/1/31#" rs.Filter = "取引日 = Between '#2013/1/1# And #2013/1/31#'" rs.Filter = "取引日 Between #2013/1/1# And #2013/1/31#" 全部だめだったのですが、どこが変ですか?

  • ADOでFilter

    Access 2002ですが ADOのRecordsetにVBAでフィルターをかけようと思っています。 条件は・・・ RS.Filter = "((場所 ='キッチン') OR (場所 ='台所') OR (場所 ='居間') OR (場所='寝室')) AND (予約状況 ='予約済み')" という感じです。 キッチン、台所、居間、寝室でどれでもいいので予約済みになっている ところを抽出したいのですがエラーになります。 エラー内容を控えてくるのを忘れましたが、これは文法的に不可能でしょうか? なお、アクセスのクエリーだと動きます。

専門家に質問してみよう