• ベストアンサー

ado フィルタで 含まない とするには?

含むなら rs.Filter = "文字列 like '*A*'" でいけるのですが rs.Filter = "文字列 not like '*A*'" だと 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。 rs.Filter = "文字列 not like '%A%" でもダメでした。 NOTの位置がおかしいのでしょうか?

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

普段レコードセットのFilterは使わないので、今更ながら気が付きました。 ヘルプによれば "演算子" は、<、>、<=、>=、<>、=、または LIKE である必要があります となっていて、NOT そのものが無いですね。 NOTの代わりに <> like '*A*' も無駄な足掻きでした。 DAOのRecordsetやフォームのFilter なら、NOT も有効なのですけどねぇ。 #1 さんのリンク先の様にSQLで求めるのがベストかな。 Sub FilterTestDAO() Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot) rs.Filter = "文字列 not like '*A*'" Set rs = rs.OpenRecordset() rs.MoveLast Debug.Print rs.RecordCount End Sub

PTKIJNDIFUMG
質問者

お礼

adoでフィルタを使うことは諦めます。 daoでやったらできました。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

既、回答例ですが http://okwave.jp/qa/q5263578.html のようですね。

PTKIJNDIFUMG
質問者

お礼

無理なようですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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 シングルコーテーションを含む抽出

    テーブルに例えば、 「I's」という文字があり、これをADOを抽出する際は、フィルタでどういう文字列を作ればよろしいでしょうか? rs.Filter = "フィールド1 = 'I'''s'" rs.Filter = "フィールド1 = 'I's'" rs.Filter = "フィールド1 = 'I" '"s'" ’コメントになってしまう 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 が発生します。 よろしくお願いします。

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

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

  • 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 は使えないのでしょうか?

  • access Ado フィルタ 含むができない

    バージョン2007です テーブル名:テーブル1 フィールド名:ファイル名 レコードには色々なファイル名が入っていて、テキストファイルだけを抽出したいのですが Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & CurrentProject.FullName rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "ファイル名 like '%.txt'" MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これをすると 実行時エラー 3001  引数が間違った型、許容範囲外、又は競合しています。なります。 しかもなぜかヘルプファイルが開けません。(画像をご参照ください) rs.Filter = "ファイル名 like '*.txt'" これに変えてもおなじです。 「含む」と言う条件で抽出したい場合はどうすればいいでしょうか? ご教授よろしくお願いします。

  • 一度変数に格納すればフィルタができるのですが

    Set cn = CurrentProject.Connection rs.Open "Qクエリ", cn, adOpenKeyset, adLockOptimistic myStr = "(数 = 0) And (名 = 'test') " rs.Filter = myStr なら問題なくフィルタができるのですが、 rs.Filter = "(数 = 0) And (名 = 'test') " とすると、 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。 なぜか一度変数に格納すればフィルタができるのですが そんなことありますか? 変数を介さないとエラーになるなんてありますか? エラーの原因は変数を介さない事なのでしょうか? アクセスです。

  • ADOでアポストロフィー入りの値をフィルタしたい

    例えばレコードの値が「あああ'ああ」だった場合、 ----------------------------------------------------- Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'あああ'ああ'" MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ----------------------------------------------------- とすると 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になってしまいます。 ADOでアポストロフィー入りの値をフィルタする方法を教えてください。

  • 実行時エラー3001「引数が間違った型、許容範囲外

    VBAのADOです。 このフィルタの文字列、どう改善すればいいか教えてください。 名前フィールドが「test」か「共通」でなおかつ、 対象外フィールドが0のみ抽出したいのですが 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。 対象外フィールドのデータ型はYes/No型です。 rs.Filter = "名前 = 'test' or 名前 = '共通' and 対象外 = " & 0 rs.Filter = "名前 = 'test' or 名前 = '共通' and 対象外 = 0" どちらもダメでした。

  • access ADO Between

    str年月="16年09月" dtm月初日 = str年月 & "01日" dtm月末日 = DateSerial(Year(dtm月初日), Month(dtm月初日) + 1, 0) rs.CursorLocation = adUseClient rs.Open "Ttest", cn, adOpenStatic, adLockPessimistic rs.Sort = "日付 DESC" rs.Filter = "日付 Between #" & dtm月初日 & "# And #" & dtm月末日 & "#" を実行すると 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 と言うエラーになります。 ADOのフィルタでBetween andは使えないのでしょうか? もしくはどこかにシングルコーテーションを入れれば良いのでしょうか?

  • VBA ADO 複数条件のフィルタ

    エクセルからアクセスヘADOで接続し、レコードをエクセルに書き出しています。 アクセスのTPWIDには、 「URL」フィールド(テキスト型) 「終了」フィールド(YesNo型) があります。 (主キーは他のフィールド) エクセルVBAで --------------------------------------------------------- Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\テーブルのみ.mdb" RS.Open "SELECT * FROM TPWID", CN, adOpenStatic, adLockOptimistic RS.Filter = "終了 = " & False RS.Close: Set RS = Nothing End Sub --------------------------------------------------------- とする分には問題なくできますが、実際行いたい行為は下記なのですが RS.Filter の部分で、 「実行時エラー 3001 引数が間違った型、許容範囲外、又は競合しています」 と言うエラーになってしまいます。 --------------------------------------------------------- Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\テーブルのみ.mdb" RS.Open "SELECT * FROM TPWID", CN, adOpenStatic, adLockOptimistic RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' or URL = '" & "www.google.co.jp" & "' And 終了 = " & False RS.Close: Set RS = Nothing End Sub --------------------------------------------------------- RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' or URL = '" & "www.google.co.jp" & "' And 終了 = " & False を RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' and URL = '" & "www.google.co.jp" & "' And 終了 = " & False にすれば、エラーは発生しませんが その次のコードを実行しようとすると 「実行時エラー'3021' BOFとEOFのいずれかTRUEになっていか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。」 となってしまいます。 MsgBox RS.RecordCount で件数を取得したら0件なので、それでエラーになります。 条件としては、 URLフォールドでは ・www.yahoo.co.jp ・www.google.co.jp のどちらかの文字列を含み、なおかつ 終了フィールドにチェックがついてない(値は0) です。 ご教授よろしくお願いします。

専門家に質問してみよう