0

レコードセットを使用してテーブルから読み取ると、すべてが正常に機能し、recordcount 関数は正しい量を表示しますが、この単純なクエリまたは任意のクエリを使用すると、レコードカウントとして常に 1 を取得します。

これが機能しているものです

Option Compare Database
Option Explicit

Public Sub LoadQ2()

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("test")'test is the name of my table which contains 13 rows

With rs
    Debug.Print .RecordCount
   .Close
End With


Set db = Nothing
Set rs = Nothing

End Sub

そして、これが機能していないものです

Option Compare Database
Option Explicit

Public Sub LoadQ2()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String

strSQL = "SELECT test.number_id FROM test"


Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)

With rs
    Debug.Print .RecordCount
   .Close
End With


Set db = Nothing
Set rs = Nothing

End Sub

両方のrecordcountで同じ結果が得られるはずですよね?? また、デバッグ ウィンドウでレコードセットの内容を印刷することは可能ですか?

4

3 に答える 3

1

レコードセットの内容を印刷するには、次の 2 つのオプションのいずれかを実行できます。

debug.print rs.fields(0) & ", " & rs.fields(1)

また

debug.print rs("ColumnNameHere") & ", " & rs("AnotherColumnName")
于 2013-07-29T15:24:43.023 に答える
0

....答えを見つけました

Debug.Print .RecourdCount を実行する前に、.MoveLast を追加し、正しい数のレコード数を取得しました

recordcount のように見えます

于 2013-07-29T15:18:40.873 に答える
0

すでに自分で答えを見つけたので、補足するだけです:)

ダイナセット データ型 (DAO レコードセットの既定値) は、すべてのレコードを処理するまで完全には入力されません。これは、実際のレコード数を確認する前に .MoveLast を実行する必要があるためです。

DAO は、レコードセットが空かどうか (例: recordcount > 0) を事前に確認する簡単な方法として、recordcount に対して 1 を返すだけで、レコード間を移動する手間をかけずに済むと思います。

于 2013-07-29T22:24:39.867 に答える