• 締切済み

アクセスVBAで検索条件にFormatは使えませんか?

前に同じような質問をしたのですが解決できないので再度お願いします。 アクセス2000で、あるテーブルの日付型フィールドデータを検索条件に抽出する方法なのですが、 rs.find "Format([売上日付],'yyyymm')='200309'" とするとエラー(引数の型が  になります。 Formatを使ったこのような書き方はできないのでしょうか? rs.Open "売上TB", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst rs.Filter = "Format([売上日付],'yyyymm')='200309'" とFilterを使っても駄目なんです

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

rs.Find "[売上日付] >= #2003/09/01# AND [売上日付] < #2003/10/01#" では駄目なのでしょうか? やりようによってはFormatもできるんじゃないかとは思いますが(試してないです(^^;)、インデックスが使えない、 データ全件に対してFormat関数を適用してしまう、などにより、パフォーマンスが滅茶苦茶遅くなると思いますよ。

mehiro2
質問者

お礼

お返事ありがとうございます。 日を無視した年月だけで抽出したかったものですから Formatを利用できればと思ったのです。 format関数は速度が落ちるのですか? それでしたら、やはり考え方を変えるのが良いですね そうゆう書き方ができるのかどうかで悩んでいました。 大変勉強になりました

関連するQ&A

  • 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フィールドで、#で始まるレコードを抽出したいです。

  • ADOのFilterで検索文字列を「含む」レコードを検索したい

    エクセル2003を使用しています。 派遣社員名="田中" rs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic rs.Filter = "件名 = " & "'" & "*" & 派遣社員名 & "*" & "'" 数 = rs.RecordCount のように、 件名フィールドに「田中」が含まれているレコードを抽出したいのですが 結果は0件になっていしまいます。 (件名フィールドには、「田中太郎」など「田中」を含む文字はあります。) どうすればいいでしょうか? よろしくお願い致します。

  • ADOでアクセスのレコードに複数のフィルタをかけるには?

    Sub ADO() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("フィールド1 = " & "'" & 変数1 & "'") rs.Filter = ("フィールド2 = " & "'" & 変数2 & "'") Debug.Print rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub だと最終的にはフィールド2のフィルタ後の個数しか取得できません。 rs.Filter = ("案件CD = " & "'" & 案件CD & "'" And "プロセス = " & "'" & プロセス & "'") だと「型が一致しません」になります。 どうすれば変数1と変数2のフィルタ後のレコードの個数を取得できるのでしょうか? ご教授よろしくお願い致します。

  • 【ACCESS2000】 VBAの更新処理に条件を加えたい。

    下記のような更新処理のVBAを組みました。 これにIDが5のものを更新するというのを加えるには どうすればよいでしょうか。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "tbl_D_売上", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect rs("入金方法") = 2 rs("入金方法名称") = "分割" rs.Update rs.Close Set rs = Nothing cn.Close Set cn = Nothing

  • 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'" これに変えてもおなじです。 「含む」と言う条件で抽出したい場合はどうすればいいでしょうか? ご教授よろしくお願いします。

  • ADOでNULLのレコードを抽出したい

    ADOでNULLのレコードを抽出したいのですがうまくできません。 Q全てクエリには、登録日フィールドや登録数フィールドがあります。 登録数フィールドは数値です。 その登録数フィールドがnullのレコードを抽出したいです。 RS.CursorLocation = adUseClient RS.Open "Q全て", cn, adOpenKeyset, adLockOptimistic RS.Sort = "登録日 DESC" RS.Filter = "[登録数] = NULL" RS.Filter = "IsNull(登録数) = True" RS.Filter = "登録数 Is Null" ↑これどれをやってもエラーになります。 対策をお願いします。

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

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

  • accessのADOの記述について。

    表題についてなのですが、初心者のため宜しくお願いいたします。 T_顧客というテーブルをつくり、そこに名字のフィールド、氏名のフィールドがあり、その中からある人物だけ名字の後ろに"さん"という文字をつけようとしています。 そこで下記のように記述しました。 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim ipt As String rs.Open "T_顧客", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst ipt = InputBox("どの人を変更する?") rs.Find "[名字]='" & ipt & "'" If rs.EOF Then MsgBox "そんな人いないよ!" Else rs![名字] = rs![名字] & "さん" End If rs.Close cn.Close End Sub ・・・・と記述したのですが、実行すると、rs.Close の ところで「実行時エラー'3219' このコンテキストで操作は許可されていません。」とでます。これはいったい どういうことなのでしょうか。宜しくアドバイスお願い致します。

  • 【ADO】「Filter」を使うか「WHERE」を使うか

    こんばんは。 アクセス2003です。 「Filter」を使うか「WHERE」を使うかべきかわからないので教えてください。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Sub test1() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル WHERE 'フィールド1'='りんご", cn, adOpenKeyset, adLockOptimistic rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub Sub test2() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'" & "りんご" & "'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上のふたつのステートメントは Tテーブルのフィールド1にりんごの文字が入力されているレコート゛を抽出します。 いくつかこのような動作をするプログラムを書くのですが どちらのほうがコート゛として適していますか? WHEREを使うtest1の方がコート゛が短くなるからいいのでしょうか? というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。 よろしくお願い致します。

  • フォームの従業員番号と日付から該当レコードを

    フォームの従業員番号と日付から該当レコードを検索したいのですができません。 おそらくFilterの文法が間違えているのではと思いましたが、色々試した結果 自力ではダメでした。何卒よろしくお願いします Private Sub テスト() Dim CN As ADODB.Connection: Set CN = CurrentProject.Connection Dim RS As ADODB.Recordset: Set RS = New ADODB.Recordset RS.Open "勤怠表", CN, adOpenKeyset, adLockOptimistic RS.Filter = "従業員番号 = " & Me.TB_StaffID & " and 日付 = #" & Format(Me.TB_Date, "yyyy/mm/dd") & "#" If RS.RecordCount = 0 Then Debug.Print "ありません" Else Do Until RS.EOF Debug.Print RS!勤怠番号 RS.MoveNext Loop End If RS.Close: Set RS = Nothing CN.Close: Set CN = Nothing End Sub

専門家に質問してみよう