ADOフィルタのBetween andの使い方について

このQ&Aのポイント
  • ADOのフィルタでBetween andは使えないのでしょうか?
  • 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」と言うエラーが発生します。
  • シングルコーテーションを入れる必要があるかもしれません。
回答を見る
  • ベストアンサー

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は使えないのでしょうか? もしくはどこかにシングルコーテーションを入れれば良いのでしょうか?

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

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

Filter プロパティ https://msdn.microsoft.com/ja-jp/library/cc426691.aspx?f=255&MSPPError=-2147217396 上記のよると、 「演算子」には次の中から 1 つを選択して使用します。<、>、<=、>=、<>、=、または LIKE。 との記述がありますので、Between and は使えないのでは。 不等号とANDで代用すればいいでしょう。 rs.Filter = "日付 >= #" & dtm月初日 & "# And 日付 <= #" & dtm月末日 & "#" ただ、Filter を使うよりOpenするときに、Where句で抽出条件を設定したほうが高速らしいです。それなら、Between and も使えます。 rs.Open "SELECT * FROM Ttest WHERE 日付 Between #" & dtm月初日 & "# And #" & dtm月末日 & "#", cn, adOpenStatic, adLockPessimistic

PIHLXCITYI
質問者

お礼

回答ありがとうございました。

関連するQ&A

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

  • アクセス ADO

    Tテーブルと言うファイルは存在するのに、 Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "Tテーブル", cn, adOpenStatic, adLockPessimistic rs.Sort = "順番 ASC" を実行すると 「実行時エラー-2147217900(80040e14) SQLステートメントが正しくありません Delete、Insert、Procedure、SelectまたはUpdateを使用して下さい。」 が発生します。 rs.CursorLocation = adUseClient は問題なく通過する為、 Tテーブルと言うオブジェクトが存在しない為のエラーなのかなと思いましたが Tテーブルは存在します。 http://www.accessclub.jp/bbs2/0128/beginter38279.html を見たのですが 私の場合はクエリではなくテーブルなので パラメーターは関係ないと思っています。

  • アクセスのADO

    アクセスのADOで ウォッチ式にrsを登録してみていると rs.CursorLocation = adUseClient rs.Open "テーブル1", cn, adOpenStatic, adLockOptimistic を通過後は、 RecordCountには、20と数字が入るのですが、 rs.CursorLocation = adUseClient rs.Open "テーブル2", cn, adOpenStatic, adLockOptimistic にすると RecordCount : <データ プロバイダーまたはほかのサービスが E_FAIL 状態を返しました。> となってしまいます。 テーブルの中身が原因だと思うのですが どういう条件なら、 <データ プロバイダーまたはほかのサービスが E_FAIL 状態を返しました。> になるのでしょうか? rs.CursorLocation = adUseClient を使う理由は、 rs.Sort = "日付 DESC" とソートする為です。 参照設定はMicrosoft Activex Data Objects 2.8 Library にしています。 Access2010・32bitです。

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

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

  • 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 並べ替えが適用できない

    アクセスでADOを使っているのですが、 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "SELECT * FROM Q1", cn, adOpenStatic, adLockPessimistic rs.Sort = "受付日 DESC" For i = 1 To rs.RecordCount ・ ・ ・ このようなコードを作っていますが、 rs.Sortの部分で、「並べ替えを適用できません」になります。 レコード数は、15000件くらいです。 なぜ並べ替えができないのでしょうか? しょうがないからクエリで最初から並べ替えしておきますが、原因を教えてください。

  • アクセス ADO 並べ替え

    Public rsMain As New ADODB.Recordset Public cn As New ADODB.Connection Private Sub cmd_実行_Click() Set cn = CurrentProject.Connection rsMain.CursorLocation = adUseClient rsMain.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rsMain.Filter = "実行フラグ =-1" rsMain.Sort = "順番 ASC" としたときに 実行時エラー -2147217824 並べ替えを適用できません。 となります。 実際QクエリはデザインビューでIFF関数で作った列を 並べ替え:昇順にしているのですが ADOで取得した際はその並べ替え通りにはならないので rsMain.Sortで並べ替えをしようと思ったのですがエラーになります。 どういう原因でこの実行時エラーが発生するのでしょうか?

  • Access BetweenとLikeの組み合わせ方

    Access2000(初心者) フォームで Between(指定日~指定日)の中でLike(チェック)を含まないレコードを検索削除したいです。 下記コードの場合 実行時エラー'3061': パラメータが少なすぎます。1を指定してください。 のエラーが出てしまいます。 どこを直せば良いでしょうか?宜しくお願いします。 CurrentDb.Execute "DELETE * FROM テーブル名 WHERE ([テーブル名].[日付] Between #2009/01/01# And #2009/02/02#) AND ((([テーブル名].[チェックボックス]) Like 'No')); "

  • ADO 複数条件のフィルタが出来ない

    カテゴリ サイズ 牡蠣 大 牡蠣 小 牡蠣 小 のようなクエリ(Qクエリ)があります。 --------------------------------------------------------------------- strカテゴリ="牡蠣" strサイズ="大" Set cn = CurrentProject.Connection rs.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rs.Filter = "カテゴリ = '" & strカテゴリ & "' And サイズ = '" & strサイズ & "'" Debug.Print rs.RecordCount --------------------------------------------------------------------- とすると、 大は1レコードなのに3が返ります。 更に、 strサイズ="小"にすると0がかります。 ウォッチウインドウで見たら、「大」の時は --------------------------------------------------------------------- : Filter : "カテゴリ = '牡蠣' And サイズ = '大'" : Variant/String : : RecordCount : 3 : Long : --------------------------------------------------------------------- になっています。 どうしてこのような現象が起きるのでしょうか? レコードの「小」がADOだと「大」と読んでいます。 アクセス2010です。

  • 数値のMAXの値を取得したい ADO VBA

    アクセスです。 ADOで該当のフィールドの数値のMAXの値を取得するにはどうすればいいですか? テーブルの番号フィールドには、 1 2 3 4 5 と入っているのですが、 この場合、一番大きい値は5なので MAX関数のようなもので5を返したいのですが ADOにそのようなプロパティはありますか? オブジェクトブラウザーでRecordsetを見てみましたが 見つけられませんでした。 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "SELECT * FROM T_test", cn, adOpenStatic, adLockPessimistic rs.Sort = "番号 DESC" Debug.Print rs("番号").Value rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これで同じような動きは出来ますが、 もっとシンプルにできませんか?

専門家に質問してみよう