• ベストアンサー

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'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

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

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.2

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)

flowergoo
質問者

お礼

ご回答いただきありがとうございます。 DAOのレコードセットは確かに最後まで移動させないと総レコード数が出ない場合がありますね。 OpenRecorssetはうまくいきました。 重ねましてありがとうございます。

その他の回答 (2)

  • nackfive
  • ベストアンサー率32% (21/64)
回答No.3

Access2003なら Dim db As DAO.Database Dim rs As DAO.Recordset とすれば 出来ます。

flowergoo
質問者

お礼

Access2003ではDAOを付けた方が良いのですね。 ありがとうございます。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

dbOpenTable は ヘルプによると テーブル タイプの Recordset オブジェクトを開きます ということですから、クエリは開けません。 dbOpenDynaset など、他の Type を指定してください。 なお、レコード数を取得するだけならレコードセットを使わなくても  cnt = DCount("*", "該当顧客リストクエリ") で、取得できます。

flowergoo
質問者

補足

ご回答いただきありがとうございます。 Dcountはうまくいきました。 OpenRecordsetの方は次のようにした所、「実行エラー'3061'パラメータが少なすぎます。1を指定して下さい」と出てしまいました。 Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenDynaset, dbAppendOnly, dbPessimistic) 構文が違うのでしょうか。

関連するQ&A