(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
Update WRT jmbpiano комментарий:
(1) Я дал evidenc e, что вы не можете получить UBound для переменной dimmed with(), поэтому я придерживаюсь своего утверждения, что такие звери являются мерзостями. Просто посмотрите на вопрос (или 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
«Уловка 22: вы можете использовать« Сохранять только для последнего измерения »; вы можете преодолеть это с помощью динамического массива динамических массивов, но сложнее сохранить его в своем коде и извлечь данные из: 'a = array (array (1,2,3), array (4,5) , array (6,7,8,9)) 'Теперь вы можете получить данные' a (x) (y) 'style:' a (2) (1) -> показывает 7' – AutomatedChaos
Структура массива возвращается на передний план к Javascript. Мне нужно, чтобы data2 выполнялся в javascript-функции после этого. Почему GetRows организует данные таким образом? data2 (0,1) где 0 - это элемент, а 1 - индекс –
@ Quaking-Mess - существует метод toArray (http://msdn.microsoft.com/en-us/library/8943ay3x%28v=vs .90% 29.aspx), но он теряет структуру. Вы не должны пытаться смешивать языки. –