• 締切済み

ACCESS クエリーから件数取得

下記のような記述でクエリーより件数を取得したいのですがうまくいきません。 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

みんなの回答

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.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 でクエリを作成した直後では失敗するかも知れません。

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

> Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset) Set rstBuf = qryBuf.OpenRecordset(dbOpenDynaset) でしょう。

optimas
質問者

お礼

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

noname#140971
noname#140971
回答No.2

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です。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

どこでどのようにつまづいてますか? f8キーによるステップ実行で結果を教えてください。 > strSQL=select xx from xx とは strSQL="select xx from xx" ですよね?

optimas
質問者

お礼

Husky2007さん、bin-chanさん有難うございます。 訳ありでクエリーをつくったソースの形式で件数を取得したいのです。 Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL) でQ_RPTにstrSQLを指定し中身を取ってこれるのですが 件数だけ別に取得したいのです。 ・・意味が通じなかったらすみません