VBScript函数创建一个二维数组,就像GetRows一样

时间:2009-12-04 16:02:52

标签: arrays asp-classic vbscript

这是使用VBScript的asp经典,不,它没有移动到任何东西,所以甚至不要问。

好的,所以从数据库中获取数据的经典方法是使用GetRows:

Dim MyRecords
Dim rs, conn
[...database opening stuff...]
If Not rs.EOF Then 
   MyRecords = rs.GetRows
End If
[...close database & set to Nothing...]

注意MyRecords如何不作为数组变暗;它只会在GetRows通话后成为一个。

我的问题是,如何在不使用GetRows的情况下执行类似的操作?例如,如果数据需要来自Request.Form而不是数据库? (执行类似“如果满足条件,则从数据库获取数据,否则从表单获取数据,但无论来自何处,都以相同的方式显示数据”。)

vbScript中有一个Array函数,但它只创建一维数组 - 据我所知,它有点像Split函数的限制版本。我需要两个维度。 (向后两个维度,不能少,以匹配GetRows的工作方式 - 即第一个维度是列,第二个维度是行。)

我无法使用动态数组(Dim MyRecords(),后来ReDim MyRecords(x,y)),因为GetRows会抛出错误。

有没有办法做我想做的事情,或者我必须让自己辞职两个不同的数组,一个用于数据库,另一个用于表单?或者更糟糕的是,使用Do While循环从数据库中填充数组... // shudder。

3 个答案:

答案 0 :(得分:4)

只需使用: -

Dim MyRecords

然后再使用

ReDim MyRecords(x, y)

您无需将MyRecords声明为数组即可使用ReDim。

答案 1 :(得分:0)

也许您可以将表单数据添加到disconnected recordset,然后继续执行标准记录集?

答案 2 :(得分:0)

我已经接受了安东尼的回答,因为这显然是最简单和最好的方法,但这是我在阅读他的答案之前想出的:使用一个返回数组的函数。也就是说,编写一个“GetFormData”函数,它使自己的数组变量变暗,从表单(或任何地方)填充它,然后将该数组指定为函数的值。

Dim MyRecords
If [something] Then
    MyRecords = GetFormData([...])
Else
    [...]
    MyRecords = rs.GetRows
    [...]
End If

Function GetFormData([...])
    Dim FormArray()
    [...]
    FormArray(i,j) = Request.Form(...)
    [...]
    GetFormData = FormArray
End Function