- 締切済み
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
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- bonaron
- ベストアンサー率64% (482/745)
> 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)
> Set rstBuf = qryBuf.OpenRecordset(strSQL,dbOpenDynaset) Set rstBuf = qryBuf.OpenRecordset(dbOpenDynaset) でしょう。
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)
どこでどのようにつまづいてますか? f8キーによるステップ実行で結果を教えてください。 > strSQL=select xx from xx とは strSQL="select xx from xx" ですよね?
お礼
Husky2007さん、bin-chanさん有難うございます。 訳ありでクエリーをつくったソースの形式で件数を取得したいのです。 Set qryBuf = CurrentDb.CreateQueryDef(Q_RPT, strSQL) でQ_RPTにstrSQLを指定し中身を取ってこれるのですが 件数だけ別に取得したいのです。 ・・意味が通じなかったらすみません
お礼
ありがとうございます。 Set rstBuf = qryBuf.OpenRecordset(dbOpenDynaset)にselect文を指定してデータ件数を取得できるのでしょうか?