こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2005-05-16 10:59:58

QNo.1390599

すぐに回答ほしいです

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

パラメータがあるクエリはパラメータを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にクエリを渡します。

これでいけると思います。

投稿日時 - 2005-05-17 11:25:14

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

「パラメータが少なすぎます」というエラーメッセージから考えられるエラーはオープンしたテーブルには存在しないフィールドの内容を参照しようとしていることが考えられます。
コードをみるとDebug.Printで「ID」「登録状態」「開通年月日」というフィールドの内容を参照していますが、これらのフィールド名は[開通チェック]というクエリーテーブルに存在しますか?

投稿日時 - 2005-05-16 21:39:05

ANo.1

Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset)

Set rs = db.OpenRecordset("開通チェック", dbOpenDynaset)
にして試してください。

投稿日時 - 2005-05-16 15:53:50

補足

さっそく返答ありがとうございます。
[]をとり忘れてました。失礼しました。
O_cyanさんのいうとおり
Set rs = db.OpenRecordset("開通チェック", dbOpenDynaset)
とやったのですが、違うエラーメッセージがはかれてしまいました。
『3061:パラメータが少なすぎます。2を指定してください。』
とでてしまいました。
たぶんクエリで使用している抽出条件のことなのだろうと思うのですが指定方法がわかりません。
クエリでの抽出条件は開通年月日のフィールドに
【Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] 】
がはいっています。このフォームの日付をVBスクリプト内で指定しなければならないのでしょうか?またその指定する方法はどのようにすればよろしいのでしょうか?

投稿日時 - 2005-05-16 16:18:06

あなたにオススメの質問