我在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
答案 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.