(1) 将 ADO 结果集转换为二维数组的最佳方法是使用.GetRows方法。然后你的问题就消失了。
(2) VBScript中有两种数组。Fixed数组是通过指定其 UBounds 来声明的:
Dim aFix(2, 3)
它们无法调整大小。Dynamic数组可以通过以下方式更改ReDim [Preserve]
。创建此类数组的最佳方法是
ReDim aDyn(2, 3)
如果您知道起始尺寸,或者
Dim aDyn : aDyn = Array()
如果你想从一个空的开始。问题 22 是:您只能对最后一个维度使用 Preserve。
(3) Your
Dim data2()
是一个令人厌恶的东西——一个没有大小的固定数组。可惜‘编译器’太愚蠢了,无法捕捉到VBScript无法正常处理的野兽:
>> Dim data2()
>> WScript.Echo UBound(data2)
>>
Error Number: 9
Error Description: Subscript out of range
的肮脏程度Dim a()
声明被后来的事实所掩盖ReDim
将存储一个适当的dynamic数组到该变量中:
>> 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
更新 jmbpiano 的评论:
(1) 我提供了证据表明你无法获得用 () 变暗的变量的 UBound,所以我坚持我的主张,即这种野兽是可憎的。只需看一下问题(或this one) 看到使用 () 会给你带来麻烦。
(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)
output:
cscript 19888987.vbs
qed