「ado形式 recordcount access」
「アクセス VB ADO recordcount」
といった検索キーワードで、時折アクセスがあります。
ADOのRecordCountプロパティを使って、
レコード数・行数を取得するには、どうすればいいのかを探していらしたのでしょう。
RecordsetのCursorTypeによっては-1が返される
Recordsetオブジェクトのカーソル種別によって、RecordCountプロパティを使ってレコード数を取得できる場合と、できない場合があります。
ヘルプには、以下のような記述があります。The RecordCount property will return -1 for a forward-only cursor; the actual count for a static or keyset cursor; and either -1 or the actual count for a dynamic cursor, depending on the data source.
データソースがどの場合でも、RecrodCountプロパティでレコード数を取得するには、CursorTypeが、adOpenStatic(= 3)またはadOpenKeyset(= 1)である必要があります。
Recordsetのレコード数・行数を取得するサンプルマクロ
「ado形式 recordcount access」
「アクセス VB ADO recordcount」
とのことですが、ADOはAccessだけからしか操作できないわけではありませんから、ADOを使ってCSVファイルからデータを取得するケースを見てみましょう。
Cドライブのtempフォルダーに、sample.csvという名前のCSVファイルを準備して、ADOへの参照設定が行われているPCで、以下のSubプロシージャを実行すると、CSVファイルのフィールドの数がメッセージボックスに表示されます。
このSubプロシージャは、CSVファイルにADOを使って接続しているだけですから、ADOへ参照設定されていればAccessやExcelはもちろん、PowerPointやWordでも動きます。
Dim f_path As String: f_path = "C:\temp\"
Dim f_name As String: f_name = "sample.csv"
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & f_path & ";" & _
"Extended Properties='Text; HDR=NO'"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open _
Source:="SELECT * FROM " & f_name, _
ActiveConnection:=cn, _
CursorType:=adOpenStatic
MsgBox rs.RecordCount
rs.Close: cn.CloseSet rs = Nothing: Set cn = Nothing
End Sub
Recordsetオブジェクトのインスタンスを作るには、Connectionオブジェクト等のExecuteメソッドを使う方法と、
RecordsetオブジェクトのOpenメソッドを使う方法の
2種類が良く知られています。
CursorTypeを指定するには、Recordsetオブジェクトに用意されているOpenメソッドを使いましょう。
フィールド数・列数を取得する場合、ConnectionオブジェクトのExecuteメソッドでもOKなのとは異なります。
上記のSubプロシージャでは、Recordset.Openメソッドの引数で、
rs.Open _
Source:="SELECT * FROM " & f_name, _
ActiveConnection:=cn, _
CursorType:=adOpenStatic
カーソルタイプを指定しています。
ローカルウィンドウでRecordsetオブジェクトの中身を見ましょう
拙著『いちばんやさしいExcel VBAの教本』でも多用している、ローカルウィンドウでオブジェクト変数の中身を見ておきましょう。
Recordset.Openメソッド実行後には、下図のような状態になっています。
※上図はレコードが3件だけ存在している状態です。
最終更新日時:2018-12-11 15:06
Home » ADO(ActiveX Data Objects)の使い方 » RecordCountプロパティでレコード数・行数を取得する