(1) 将 ADO 结果集放入二维数组的最佳方法是使用.GetRows方法。然后你的问题就消失了。
(2) VBScript 中有两种数组。固定数组通过指定它们的 UBounds 来声明:
Dim aFix(2, 3)
它们无法调整大小。动态数组可以通过ReDim [Preserve]
. 创建这样一个数组的最佳方法是
ReDim aDyn(2, 3)
如果您知道起始尺寸,或者
Dim aDyn : aDyn = Array()
如果你想从一个空的开始。要点 22 是:您只能对最后一个维度使用 Preserve。
(3) 你的
Dim data2()
是一个可憎的 - 一个没有大小的固定数组。遗憾的是,“编译器”太愚蠢了,无法捕捉到 VBScript 无法正确处理的野兽:
>> Dim data2()
>> WScript.Echo UBound(data2)
>>
Error Number: 9
Error Description: Subscript out of range
该Dim a()
语句的肮脏之处在于稍后ReDim
会将适当的动态数组存储到该变量中这一事实:
>> Dim data2() ' <-- abomination
>> ReDim data2(1,1) ' <-- overwritten by a dynamic array
>> data2(0,0) = 0
>> ReDim Preserve data2(1,5) ' last dimension increased; 'old' data preserved
>> data2(1,5) = 1
>> WScript.Echo data2(0,0), data2(1,5)
>>
0 1
更新 wrt jmbpiano 的评论:
(1) 我提供了证据表明你不能得到一个用 () 变暗的变量的 UBound,所以我坚持我的说法,即这样的野兽是可憎的。只需看看问题(或这个问题),就会发现使用 () 会给您带来麻烦。
(2) 我说过你应该使用ReDim a(KnownUbound)
“声明”一个已知大小的动态数组,但我没有提供证据证明这个成语的“选项显式”兼容性。所以 :
Option Explicit
ReDim a(4711)
ReDim b(4,7,1,1)
a(0) = "qed"
b(0,0,0,0) = "qed"
WScript.Echo b(0,0,0,0)
输出:
cscript 19888987.vbs
qed