这是使用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。
答案 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