- ベストアンサー
VBAをつかってクエリの情報を抽出するには??
ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。 クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。 クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。 VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか? また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。 以下にどのように記述しているか記します。 ------------ Public Function value() On Error GoTo ERRORRR Set db = CurrentDb Dim rs As Recordset Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset) Debug.Print rs.EOF Do Until rs.EOF Debug.Print rs!ID Debug.Print rs!登録状態 Debug.Print rs!開通年月日 rs.MoveNext Loop rs.Close: Set rs = Nothing db.Close: Set db = Nothing Exit Function ERRORRR: msgbox Err.number & ":" & Err.description End Function -------- 開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。) 使用しているACCESS Ver:ACCESS97
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。 パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。 Dim db as Database Dim qd as QueryDefs Dim rs as Recordset Dim pr1 As Date, pr2 As Date Set db = CurrentDb() pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd") pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd") Set qd = db.QueryDefs("開通チェック") qd.Parameters("pr1").Value = pr1 qd.Parameters("pr2").Value = pr2 Set rs = qd.OpenRecordSet() 'ここでRecordsetにクエリを渡します。 これでいけると思います。
その他の回答 (2)
- minami99999
- ベストアンサー率50% (4/8)
「パラメータが少なすぎます」というエラーメッセージから考えられるエラーはオープンしたテーブルには存在しないフィールドの内容を参照しようとしていることが考えられます。 コードをみるとDebug.Printで「ID」「登録状態」「開通年月日」というフィールドの内容を参照していますが、これらのフィールド名は[開通チェック]というクエリーテーブルに存在しますか?
- O_cyan
- ベストアンサー率59% (745/1260)
Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset) を Set rs = db.OpenRecordset("開通チェック", dbOpenDynaset) にして試してください。
補足
さっそく返答ありがとうございます。 []をとり忘れてました。失礼しました。 O_cyanさんのいうとおり Set rs = db.OpenRecordset("開通チェック", dbOpenDynaset) とやったのですが、違うエラーメッセージがはかれてしまいました。 『3061:パラメータが少なすぎます。2を指定してください。』 とでてしまいました。 たぶんクエリで使用している抽出条件のことなのだろうと思うのですが指定方法がわかりません。 クエリでの抽出条件は開通年月日のフィールドに 【Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] 】 がはいっています。このフォームの日付をVBスクリプト内で指定しなければならないのでしょうか?またその指定する方法はどのようにすればよろしいのでしょうか?