龍騎少校

玩的就是技术。ko!!!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

RS.GETROWS使用详解

Posted on 2008-05-13 14:23  龍騎少校  阅读(1246)  评论(0编辑  收藏  举报
RS.GETROWS使用详解
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 方法且自行建立结果字串。