最好多次ReDim数组还是重新打开记录集?

时间:2015-12-14 21:13:29

标签: arrays vbscript recordset

我在VBscript中编写代码,打开一个记录集对象,然后加载一个包含每个记录数据的对象的数组。我的记录集类型不支持rs.RecordCount属性,所以我需要在循环记录集时ReDim Preserve数组,或者我需要在执行计数循环后重新打开记录集,因为使用{{1计数循环后似乎不起作用......哪个会更快?记录集对象中最多只有7条记录,所以最多我需要多次ReDim。

这是我尝试的一种方式,但rs.MoveFirst似乎无法正常工作,请参阅注释:

rs.MoveFirst

此方法有效,但我必须不断地重新调整数组:

Function LoadData(filter_val)
   Dim arr
   Dim rs
   'Calls function that opens the rs and returns it
   Set rs = GetRS(filter_val)

   Dim counter
   counter = 0
   Do Until rs.EOF
      counter = counter + 1
      rs.MoveNext
   Loop

   ReDim arr(counter)

   rs.MoveFirst

   For i = 0 To counter
      Set arr(i) = New obj
      'attempt to load values into the object from the recordset, but get an
      'error saying 'either BOF or EOF is true, or the current record has been deleted'
      'I tried adding If statements with MsgBox print outs checking for rs.EOF or rs.BOF
      'being true right after rs.MoveFirst, but neither evaluates to true...
   Next
End Function

2 个答案:

答案 0 :(得分:3)

重新规划数组的效果非常好,所以我选择ReDim。增加数组大小的一般方法是将其初始化为空数组:

ReDim arr(-1)

然后在添加内容之前每次迭代将上边界增加一个:

Do Until rs.EOF
  ReDim Preserve arr(UBound(arr)+1)
  Set arr(UBound(arr)) = New obj

  'load data from rs into object

  rs.MoveNext
Loop

这样你就不需要计数器变量来跟踪数组大小。

答案 1 :(得分:-1)

从MSDN

看起来更容易
  

GetRows方法(ADO)

     

将Recordset对象的多个记录检索到数组中。

     

<强>语法

           

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

     

返回值

           

返回一个Variant,其值为二维数组。

     

<强>参数

           

<强>行   可选的。 GetRowsOptionEnum值,指示要检索的记录数。默认值为adGetRowsRest。    的开始   可选的。一个String值或Variant,其值为GetRows操作应从其开始的记录的书签。您还可以使用BookmarkEnum值。    的字段   可选的。 Variant,表示单个字段名称或序号位置,或字段名称或序号位置编号的数组。 ADO仅返回这些字段中的数据。

如果max为7,也只需将数组调暗为7.