- ベストアンサー
Access VBAでクエリーのレコード件数を取得したいのですが
Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = 0 If Not rs.EOF Then rs.MoveLast cnt = rs.RecordCount rs.MoveFirst End If このようにしたほうが、良いですよ DAOのレコードセットは展開したときには、正確なレコード件数を返しません 一旦、MoveLastメソッドで最終ポイントまで行けば正確な件数が得られます (ただし、パフォーマンスが落ちますorz) 面倒でも、「select count(*) as RecordCount from "テーブル名"」で取得したほうがいいですよ ちなみに、別件はこれで良いんじゃないですかね? Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenSnapShot)
その他の回答 (2)
- nackfive
- ベストアンサー率32% (21/64)
Access2003なら Dim db As DAO.Database Dim rs As DAO.Recordset とすれば 出来ます。
お礼
Access2003ではDAOを付けた方が良いのですね。 ありがとうございます。
- bonaron
- ベストアンサー率64% (482/745)
dbOpenTable は ヘルプによると テーブル タイプの Recordset オブジェクトを開きます ということですから、クエリは開けません。 dbOpenDynaset など、他の Type を指定してください。 なお、レコード数を取得するだけならレコードセットを使わなくても cnt = DCount("*", "該当顧客リストクエリ") で、取得できます。
補足
ご回答いただきありがとうございます。 Dcountはうまくいきました。 OpenRecordsetの方は次のようにした所、「実行エラー'3061'パラメータが少なすぎます。1を指定して下さい」と出てしまいました。 Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenDynaset, dbAppendOnly, dbPessimistic) 構文が違うのでしょうか。
お礼
ご回答いただきありがとうございます。 DAOのレコードセットは確かに最後まで移動させないと総レコード数が出ない場合がありますね。 OpenRecorssetはうまくいきました。 重ねましてありがとうございます。