Access + Webのホームへ戻る

RecordsetオブジェクトのGetRowsメソッドの使い方

 

RecordsetオブジェクトのGetRowsメソッドの使い方を説明します。GetRowsメソッドを使用するとレコードセットのデータを二次元の配列変数に格納してfor…nextで処理することができます。

 

array = recordset.GetRows( Rows, Start, Fields )

 

arrayには、二次元の配列が返されます。配列の要素1にはフィールド、要素2にはレコードが格納されます。要素番号は0から始まります。Rowsには、取得するレコード数を指定します。adGetRowsRest(-1)を指定するとカレントレコードまたはStartで指定した位置から残りのレコードを返します。この引数はオプションです。Startには、開始位置を指定します。adBookmarkCurrent(0), adBookmarkFirst(1), adBookmarkLast(2)を指定するとカレントレコード、先頭レコード、最終レコードから開始します。この引数はオプションです。Fieldsには、取得するフィールド名を指定します。この引数はオプションです。

 

avarRecord = rs.GetRows

Response.Write avarRecord(0,0)    ‘ Field1 of Record1

Response.Write avarRecord(1,0)    ‘ Field2 of Record1

Response.Write avarRecord(2,0)    ‘ Field3 of Record1

Response.Write avarRecord(0,1)    ‘ Field1 of Record2

Response.Write avarRecord(1,1)    ‘ Field2 of Record2

Response.Write avarRecord(2,1)    ‘ Field3 of Record2

 

 

図 RecordsetオブジェクトのGetRowsメソッドを利用したサンプル

 

Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「GetRowsメソッドを利用したサンプル」をクリックしてください。Internet Explorerの左側のフレームには、ASPのサンプルが表示されます。右側のフレームには、実行結果が表示されます。

 

図の行24-28では、Access 2000のデータベースado.mdbを接続するための処理を行っています。行24-25では、OLEDBProviderData Sourceを設定して変数strConnectionに保存しています。行26では、ado.mdb商品テーブルからすべてのレコードを抽出するSQLを作成して変数strSQLに保存しています。このSQLのフィールド名にが指定されていますので、商品テーブルのすべてのフィールドが抽出されます。また、ORDER BY句が指定されていますのでレコードセットは商品コード順に並べ替えられます。行28では、ConnectionOpenメソッドでado.mdbを接続しています。

 

24: strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _

25:   & "Data Source=" & server.MapPath("webdb/ado.mdb")

26: strSQL = "Select * From 商品 Order by 商品コード;"

27: set cnn = server.CreateObject("adodb.connection")

28: cnn.open strConnection

 

29では、ConnectionオブジェクトのExecuteメソッドでstrSQLに保存されているSQLのレコードセットを作成します。行30では、RecordsetオブジェクトのGetRowsメソッドで商品テーブルのすべてのレコードを二次元の配列変数avarProdに格納します。GetRowsメソッドの引数を省略したときは、カレントレコードの位置から残りのすべてのレコードを返します。

 

29: set rs = cnn.Execute(strSQL)

30: avarProd = rs.GetRows

 

35-37では、先頭レコードのフィールド1、2、3の内容をResponse.Writeでブラウザに送信しています。

 

35: response.Write "Field1: " & avarProd(0,0) & "<br>"

è Field1: 1

36: response.Write "Field2: " & avarProd(1,0) & "<br>"

è Field2: カジュウ100パーセント オレンジ

37: response.Write "Field3: " & avarProd(2,0) & "<br>"

è Field3: 果汁100% オレンジ

 

43-45では、レコード1、2、3の商品名をResponse.Writeでブラウザに送信しています。

 

43: response.Write "Record1: " & avarProd(2,0) & "<br>"

è Record1: 果汁100% オレンジ

44: response.Write "Record2: " & avarProd(2,1) & "<br>"

è Record2: 果汁100% グレープ

45: response.Write "Record3: " & avarProd(2,2) & "<br>"

è Record3: 果汁100% レモン

 

47では、レコードセットを閉じています。行48では、データベースを切断しています。

 

47: rs.Close

48: cnn.Close

 

49-50では、RecordsetConnectionオブジェクトを解放しています。

 

49: set rs = nothing

50: set cnn = nothing

 

 

Tip

GetRowsメソッドで取得した二次元の配列をfor…nextで処理するには:

 

GetRowsメソッドで取得した配列をfor…nextで処理するには、VBScriptLBound()関数とUBound()関数を使用します。外側のfor intRow…nextでは、レコードの要素番号を更新しています。内側のfor intFld…nextでは、フィールドの要素番号を更新しています。Response.Writeメソッドでは、レコードのすべてのフィールドを全件ブラウザに送信します。

 

for intRow = LBound(avarProd,2) to UBound(avarProd,2)

  for intFld = LBound(avarProd,1) to UBound(avarProd,1)

     response.Write avarProd(intFld,intRow) & vbTab

  next

  response.Write "<br>"

next

 

 

 

Tip

GetRowsで取得した二次元の配列から特定のフィールド値を取得するには:

 

二次元の配列から特定のフィールド値を取得するには、VBScriptConstステートメントでフィールドの要素番号を定義しておくと便利です。

 

const conProdID = 0

const conKana = 1

const conProdName = 2

const conVendorID = 3

const conCategoryID = 4

const conUnit = 5

const conPrice = 6

 

たとえば、商品テーブルが格納されている二次元の配列avarProdから商品名、単位、単価を取得するには、以下のように記述します。intRowには、レコード番号を設定します。

 

response.Write avarProd(conProdName,intRow)

response.Write avarProd(conUnit,intRow)

response.Write avarProd(conPrice,intRow)

 

 

Access + Webのホームへ戻る