ADOでBetweenは使えないのでしょうか?
- 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 は使えないのでしょうか?
- KSGIHOCVBSSYH
- お礼率89% (42/47)
- オフィス系ソフト
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足: 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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17068)
http://okwave.jp/qa/q8322811.html http://soudan1.biglobe.ne.jp/qa8322811.html に似た(同類の)質問・回答があるのでは。 Googleで「ADO filter Between」で照会すれば出てくる。 この頃はWEB記事もOKWAVE(過去質問)も充実してきて、同じ(同類)質問があると思ったほうがよさそうだよ。
お礼
ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
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
お礼
ありがとうございました。
関連する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は使えないのでしょうか? もしくはどこかにシングルコーテーションを入れれば良いのでしょうか?
- ベストアンサー
- その他MS Office製品
- 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゛ = 'あ'" とするのでは、 どちらの方が処理速度が速いですか?
- ベストアンサー
- その他MS Office製品
- ADO WHERE句でエラーになる
アクセス2003です。 ADOを使ってテーブル1の済「 (Yes/No型) 」に rs.Open "テーブル1 WHERE 済=True", cn, adOpenStatic, adLockPessimistic と言う風にフィルタをかけたいのですが 「キーワードWHERE''付近意不適切な構文があります。」 というエラーがでてしまいます。 どこか文法がおかしいでしょうか?よろしくお願いします。
- ベストアンサー
- Visual Basic
- 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です。
- ベストアンサー
- その他MS Office製品
- 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 のせいではないと思うのですが 原因がわかりません。 ご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございました。