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では、OLEDBのProviderとData Sourceを設定して変数strConnectionに保存しています。行26では、ado.mdbの商品テーブルからすべてのレコードを抽出するSQLを作成して変数strSQLに保存しています。このSQLのフィールド名に”*”が指定されていますので、商品テーブルのすべてのフィールドが抽出されます。また、ORDER BY句が指定されていますのでレコードセットは商品コード順に並べ替えられます。行28では、ConnectionのOpenメソッドで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では、Recordset、Connectionオブジェクトを解放しています。
49: set rs = nothing
50: set cnn = nothing
Tip
|
GetRowsメソッドで取得した二次元の配列をfor…nextで処理するには: GetRowsメソッドで取得した配列をfor…nextで処理するには、VBScriptのLBound()関数と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で取得した二次元の配列から特定のフィールド値を取得するには: 二次元の配列から特定のフィールド値を取得するには、VBScriptのConstステートメントでフィールドの要素番号を定義しておくと便利です。 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) |