dポイントプレゼントキャンペーン実施中!

下記のような記述でクエリーより件数を取得したいのですがうまくいきません。
rstBufの指定が悪いのだとは思い、調べてはいるのですがうまくいかない状態です。
どなたかご助言をお願い致します。


Dim rstBuf As DAO.Recordset
Dim qryBuf As DAO.QueryDef

strSQL=select xx from xx
Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL)
Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset)

If rstBuf.EOF = False Then
rstBuf.MoveLast
count = rstBuf.RecordCount
End If
rstBuf.Close
Set rstBuf = Nothing

A 回答 (4件)

> Set rstBuf = qryBuf.OpenRecordset(dbOpenDynaset)にselect文を指定してデータ件数を取得できるのでしょうか?



指定する必要はありません。
Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL)
は、
Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT)
qryBuf.SQL = strSQL
と等価です。
qryBuf に SQL文が存在する訳ですから、更に指定する必要はないですね。
 OpenRecordset メソッドの対象が
 Database の場合とQueryDef の場合の構文の違いをヘルプでご確認ください。

なお、MoveLast で最終レコードに移動する方法は
データの件数によっては重くなります。
●サブクエリを使用する方法
 strSQL2 = "Select Count('*') FROM [" & strSQL & "]. AS T"
 Set rstBuf = CurrentDb.OpenRecordset(strsql2, dbOpenDynaset)
 Count = rstBuf(0)
 これなら、1件もない場合に ゼロが返ります。
●定義域関数を使用する方法(既存のクエリの場合のみ)
 Count = DCount("*","クエリ名")
 これは、CreateQueryDef でクエリを作成した直後では失敗するかも知れません。
    • good
    • 0

> Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset)


Set rstBuf = qryBuf.OpenRecordset(dbOpenDynaset)
でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Set rstBuf = qryBuf.OpenRecordset(dbOpenDynaset)にselect文を指定してデータ件数を取得できるのでしょうか?

お礼日時:2007/02/20 02:24

Private Sub コマンド0_Click()


  Dim dbsCurrent As DAO.Database
  Dim rstPerform As DAO.Recordset
  
  Set dbsCurrent = CurrentDb
  Set rstPerform = dbsCurrent.OpenRecordset("SELECT * FROM A")
  If Not rstPerform.BOF Then
    rstPerform.MoveLast
    Debug.Print rstPerform.RecordCount
  End If
  rstPerform.Close
  dbsCurrent.Close
End Sub

Private Sub コマンド0_Click()
  Dim rstPerform As DAO.Recordset
  
  Set rstPerform = CurrentDb.OpenRecordset("SELECT * FROM A")
  If Not rstPerform.BOF Then
    rstPerform.MoveLast
    Debug.Print rstPerform.RecordCount
  End If
  rstPerform.Close
End Sub

どちらでもOKです。
    • good
    • 0

どこでどのようにつまづいてますか?


f8キーによるステップ実行で結果を教えてください。


> strSQL=select xx from xx
とは
strSQL="select xx from xx"
ですよね?
    • good
    • 0
この回答へのお礼

Husky2007さん、bin-chanさん有難うございます。
訳ありでクエリーをつくったソースの形式で件数を取得したいのです。

Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL)
でQ_RPTにstrSQLを指定し中身を取ってこれるのですが
件数だけ別に取得したいのです。

・・意味が通じなかったらすみません

お礼日時:2007/02/19 19:51

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