●概要●
構文 GetRows(Rows, Start, Fields)
設定項目 内容
expression Recordsetオブジェクトを指定[省略不可]
Rows 取得するレコードの数を長整数型で指定[省略可能]
Start 操作開始位置を指定[省略可能]
Fields フィールドまたはフィールドの配列を指定[省略可能]
Recordsetオブジェクトの複数のレコードを配列に格納します。配列のサイズは自動的に調整されます。戻り値は2次元配列で、最初の添え字がフィールド番号、2番目の添え字がレコード番号を示します(Array(フィールド番号, レコード番号)となります)。
引数を省略すると、Recordsetオブジェクトのすべてのレコードが配列に格納されます。引数には次の定数を指定します。
・引数に指定する定数
定数 説明
adBookmarkCurrent カレントレコードから開始
adBookmarkFirst 最初のレコードから開始
adBookmarkLast 最後のレコードから開始
GetRowsメソッドを実行すると、カレントレコードはまだ読み込まれていない次のレコードになります。
次のコードは、Recordsetの2つのレコードのすべてのフィールドを配列に取得して、[イミディエイト]ウィンドウに表示しています。レコードごとに表示していますが、2番目の添え字がレコード番号を表していることに注意します。このサンプルを実行する場合は、フォルダ名やデータベース名をお使いの環境に合わせてください。
●サンプル1●
Sub ArraySample1()
Dim myCN As New ADODB.Connection
Dim myRS As New ADODB.Recordset
'配列をバリアント型で宣言
Dim myArray As Variant
Dim i As Integer
Dim j As Integer
Dim myRec As String
myCN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\AccessVBA\Sample1.mdb"
myCN.Open
'レコードセットを開く
myRS.Open "商品tbl", myCN
'2レコードを配列に格納
myArray = myRS.GetRows(2)
'レコードごとに繰り返す
For i = 0 To UBound(myArray, 2)
'フィールドごとに繰り返す
For j = 0 To UBound(myArray, 1)
'フィールドをつなぐ
myRec = myRec & myArray(j, i) & vbTab
Next
'バッファの内容を表示
Debug.Print myRec
'バッファをクリア
myRec = ""
Next
'レコードセットを閉じる
myRS.Close
myCN.Close
End Sub
●サンプル2●
次のコードは、フィールド名を配列で指定して、Recordsetのすべてのレコードから指定したフィールドを配列に取得して、[イミディエイト]ウィンドウに表示しています。
Sub ArraySample2()
Dim myCN As New ADODB.Connection
Dim myRS As New ADODB.Recordset
'配列をバリアント型で宣言
Dim myArray As Variant
Dim i As Integer
Dim j As Integer
Dim myRec As String
'配列をバリアント型で宣言
Dim myField(1) As Variant
myField(0) = "商品名"
myField(1) = "単価"
myCN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\AccessVBA\Sample1.mdb"
myCN.Open
'レコードセットを開く
myRS.Open "商品tbl", myCN
'すべてのレコードの指定フィールド
myArray = myRS.GetRows(, , myField)
'レコードごとに繰り返す
For i = 0 To UBound(myArray, 2)
'フィールドごとに繰り返す
For j = 0 To UBound(myArray, 1)
'フィールドをつなぐ
myRec = myRec & myArray(j, i) & vbTab
Next
'バッファの内容を表示
Debug.Print myRec
'バッファをクリア
myRec = ""
Next
'レコードセットを閉じる
myRS.Close
myCN.Close
End Sub
●ポイント●
GetRowsメソッドで最後のレコードまで読み込んだ場合は、RecordsetオブジェクトのEOFプロパティの値がTrueになります。