ADO也提供更有效率方法 取得 料。GetRows 方法 回一 二 的 列 ,每一行 Recordset中的一 ,且每一列 到 中的 位。此方法的 法如下:
varArray = rs.GetRows([Rows], [Start], [Fields])
Rows 是要 取 的 量;如果想要取得Recordset所有 ,可用-1或省略此 。Start 是指出第一 被 取 的 ;也可以是下列列 常 中的一 :0-adBookmarkCurrent(目前 )、1-adBookmarkFirst(第一 )、或2-adBookmarkLast(最後 )。
Fields 是可 的 位名 列,其用 限制要 取的 料量。(也可指定 一 位名 、 一 位索引、或者一 位索引 列)。 定 Rows 少於Recordset ,第一 未 取的 成 行 。若省略 Rows 或 定 -1-adGetRowsRest或大於未 取的 ,GetRows 方法 取所有 Recordset在EOF ,而不 生任何 。
理目的 列的 料 , 得 料 存方式是有 相反的感 : 列中第一 定 Recordset的 位( 料行),第二 定 Recordset的 料列。以下有 入Recordset 所有 某三 位的 例:
Dim values As Variant, fldIndex As Integer, recIndex As Integer
values = rs.GetRows(, , Array("LastName", "FirstName", "BirthDate"))
For recIndex = 0 To UBound(values, 2)
For fldIndex = 0 To UBound(values)
Print values(fldIndex, recIndex),
Next
Print
Next
GetRows 方法通常比一次 一 的 圈要 得快些,但使用 方法 ,必 定Recordset未包含太多 ;否 , 很容易以一 非常大的 列 填 所有 。基於相同的原因,得小心不要包括任何BLOB(Binary Large Object)或CLOB(Character Large Object) 位;若如此做的化, 用程式一定 爆掉,特 是 於 大的Recordset而言。最後, 住此方法 回的 列是以0 基底的; 回 的 是UBound(values,2)+1, 回 位 是UBound(value, 1)+1。
GetString 方法跟 GetRows 是 似的,不 其 回以 一字串形式存在的多重 。GetString 法如下:
GetString([Format], [NumRows], [ColDelimiter], [RowDelimiter], [NullExpr])
Format 是 果的格式。GetString 可能支援更多格式,但是目前唯一支援的格式是2- adClipString,所以 上 有任何 。NumRows 是要取得的列 。(使用-1或省略此 取所有剩下的 。)ColDelimiter 是行的分隔字元( Tab字元)。RowDelimiter 的分隔字元( 行字元)。NullExpr 是用 表示Null 位的字串( 空字串)。文件中 明只有 Format= adClipString ,最後三 才可使用,但是 警告 有多大意 ,因 (如之前所提)此格式是目前唯一支援的。以下有 例子,其透 GetString 方法 料 出成以分 分隔的文字 :
Dim i As Long
Open "datafile.txt" For Output As #1
For i = 0 To rs.Fields.Count _ 1 ' Export field names.
If i > 0 Then Print #1, ";";
Print #1, rs.Fields(i).Name;
Next
Print #1, ""
rs.MoveFirst ' Export data.
Print #1, rs.GetString(, , ";", vbCrLf); ' Don't add an extra CR-LF here.
Close #1
GetString 方法不允 只 出 位的子集合,也不允 修改 出 位的 序。如果需要 些 外的功能, 使用 GetRows 方法且自行建立 果字串。