14歳の自分に衝撃の事実を告げてください

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

A 回答 (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)
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/04/09 21:06

Access2003なら


Dim db As DAO.Database
Dim rs As DAO.Recordset
とすれば 出来ます。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/04/09 21:09

dbOpenTable は ヘルプによると


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

この回答への補足

ご回答いただきありがとうございます。
Dcountはうまくいきました。

OpenRecordsetの方は次のようにした所、「実行エラー'3061'パラメータが少なすぎます。1を指定して下さい」と出てしまいました。

Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenDynaset, dbAppendOnly, dbPessimistic)

構文が違うのでしょうか。

補足日時:2007/04/09 18:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A