Home » ADO(ActiveX Data Objects)の使い方 » RecordCountプロパティでレコード数・行数を取得する

RecordCountプロパティでレコード数・行数を取得する

動作検証バージョン:Windows版Excel(バージョン1810 ビルド11001.20108)+ Microsoft ActiveX Data Objects 6.1 Library

「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でも動きます。

Sub Recordsetのレコード数を取得する()
 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.Close
 Set 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プロパティでレコード数・行数を取得する

Copyright © インストラクターのネタ帳 All Rights Reserved.

.