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

このQ&Aのポイント
  • ADOで期間での抽出をしたい場合、rs.Filterを使うことで範囲指定が可能です。
  • しかし、rs.Filterでの計上日の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 は使えないのでしょうか?

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

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

補足: Filter と日付範囲の指定 ANDを使います。 Public Function DBSelectII(ByVal strQuerySQL As String, _               ByVal strFilter As String, _              Optional strPause As String = ";") As String On Error GoTo Err_DBSelectII   Dim I      As Integer   Dim J      As Integer   Dim R      As Integer ' 行インデックス   Dim M      As Integer ' 行総数 - 1   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String ' 全てのデータを区切子で連結して格納      Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockPessimistic     If Not .BOF Then       .Filter = strFilter       M = .RecordCount - 1       .MoveFirst       For R = 0 To M         For Each fld In .Fields           With fld             strList = strList & .Value & strPause           End With         Next fld         strList = strList & Chr(13)         .MoveNext       Next R     Else       strList = ""     End If   End With Exit_DBSelectII: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelectII = IIf(Len(strList) > 0, Replace(strList & "[END]", Chr(13) & "[END]", ""), "")   Exit Function Err_DBSelectII:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelectII)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelectII End Function

KSGIHOCVBSSYH
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

http://okwave.jp/qa/q8322811.html http://soudan1.biglobe.ne.jp/qa8322811.html に似た(同類の)質問・回答があるのでは。 Googleで「ADO filter Between」で照会すれば出てくる。 この頃はWEB記事もOKWAVE(過去質問)も充実してきて、同じ(同類)質問があると思ったほうがよさそうだよ。

KSGIHOCVBSSYH
質問者

お礼

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

回答No.1

https://msdn.microsoft.com/ja-jp/library/Cc426691.aspx Microsoft の Filter に関する説明を一読されてください。 >検索文字列は、「フィールド名-演算子-値」形式の句で構成されます。 つまりは、WHERE節とは書き方が違うってことです。添付図は、WHERE節でBETWEEN句を使った結果です。なお、DBSelect()ではADOを利用しています。 Public Function DBSelect(ByVal strQuerySQL As String, _              Optional strPause As String = ";") As String On Error GoTo Err_DBSelect   Dim I      As Integer   Dim J      As Integer   Dim R      As Integer ' 行インデックス   Dim M      As Integer ' 行総数 - 1   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String ' 全てのデータを区切子で連結して格納      Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       M = .RecordCount - 1       .MoveFirst       For R = 0 To M         For Each fld In .Fields           With fld             strList = strList & .Value & strPause           End With         Next fld         strList = strList & Chr(13)         .MoveNext       Next R     Else       strList = ""     End If   End With Exit_DBSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", Chr(13) & "[END]", ""), "")   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

KSGIHOCVBSSYH
質問者

お礼

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

関連するQ&A

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

  • 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#" 全部だめだったのですが、どこが変ですか?

  • WHERE と Filter

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

  • ADO WHERE句でエラーになる

    アクセス2003です。 ADOを使ってテーブル1の済「 (Yes/No型) 」に rs.Open "テーブル1 WHERE 済=True", cn, adOpenStatic, adLockPessimistic と言う風にフィルタをかけたいのですが 「キーワードWHERE''付近意不適切な構文があります。」 というエラーがでてしまいます。 どこか文法がおかしいでしょうか?よろしくお願いします。

  • 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です。

  • ADO フィルタ 変数

    Sub test() Dim 月 As Long cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Tテーブル", cn, adOpenStatic, adLockPessimistic 月 = 5 rs.Filter = " 処理日 = '" & #"& 月 &"/29/2009# & "'" MsgBox rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub のように月に変数を入れ、フィルタをかけたいのですが 上記のコードでエラーになってしまいます。 アドバイスよろしくお願いします。

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

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

  • 「引数が間違った型、許容範囲外、または競合しています。」で考えられる原因は?

    アクセス2003です。 ADOを使用してテーブルにフィルタをかけたいのですが 「引数が間違った型、許容範囲外、または競合しています。」となってしまいます。 コードはこれです↓ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\○○\Desktop\○○.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "進捗=" & "未" rs.MoveFirst MsgBox rs("進捗") rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ・「rs.Filter = "進捗=" & "未" 」の部分でなぜか上記のエラーになります。 ・違うフィールドなら問題なくできます。 ・存在しないフィールド名なら 「実行時エラー 3265 要求された名前、または序数に対する項目がコレクションで見つかりません。」 となります。 ・テーブル1に「進捗」というフィールドは存在し、データ型はテキスト型です。 何かわかる方ご回答いただければ幸いです。

  • アクセスADO 複数のレコードがあるのに-1が返る

    アクセスのADOを作っています。 テーブルにレコードは複数あるのですが、Filterをすると必ず-1が返ります。 どうしてでしょうか? エラーになってるのでしょうか? ---------------------------------------------------- Set cn = CurrentProject.Connection myStr = "test" rs.Open "Tテーブル", cn, adOpenForwardOnly, adLockReadOnly rs.Filter = ("フィールド1=" & "'" & myStr & "'") MsgBox rs.RecordCount ’マイナス-1になる rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing ---------------------------------------------------- rs.Open の下に、MsgBox rs.RecordCountを置いても、-1になることから、Filter のせいではないと思うのですが 原因がわかりません。 ご教授よろしくお願いします。

専門家に質問してみよう