这对我来说太棒了哈哈,我几乎检查了 Google 搜索上的几乎每个页面,但我仍然不明白该怎么做。
我想在 VB 脚本中创建一个名为 data2 的多维数组。
尝试我看过的示例,但出现“下标超出范围”错误
Dim data2()
sub grabdata
SQL_query = "SELECT * FROM MSAccess_table"
Set rsData = conn.Execute(SQL_query)
Do Until rsData.EOF = True
ReDim Preserve data2(UBound(data2) + 1)
data2(UBound(data2)) = Array(rsData("id"),rsData("column_1"),rsData("column_2"),rsData("column_3"),rsData("column_4"))
rsData.moveNext
Loop
end sub
基本上我正在尝试学习如何在 VB 脚本中创建一个多维数组并用循环添加到它。有哪些基本示例适用于我的情况?
最佳答案
(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,所以我坚持我的说法,这些野兽是可憎的。只需查看问题(或 this one ),就会发现使用 () 会给您带来麻烦。
(2) 我说你应该用
ReDim a(KnownUbound)
“声明”一个已知大小的动态数组,但我没有证明这个习语的“Option Explicit”兼容性。所以 :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
关于loops - VBScript 创建一个多维数组并添加到其中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888987/