Функция VBScript для создания двумерного массива, как это делает GetRows - PullRequest
1 голос
/ 04 декабря 2009

Это классика asp, использующая VBScript, и нет, он ничего не перемещает в .net, так что даже не спрашивайте.

ОК, поэтому классический способ вывести данные из базы данных - это использовать 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.

Ответы [ 3 ]

4 голосов
/ 05 декабря 2009

Просто используйте: -

Dim MyRecords

Затем позже используйте

ReDim MyRecords(x, y)

Вам не нужно объявлять MyRecords как массив, чтобы использовать ReDim.

0 голосов
/ 07 декабря 2009

Я принял ответ Энтони, потому что это, очевидно, самый простой и лучший способ продолжить, но вот что я придумал до прочтения его ответа: используйте функцию, которая возвращает массив. То есть напишите функцию «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
0 голосов
/ 04 декабря 2009

Возможно, вы можете добавить данные формы в disconnected recordset, а затем продолжить, как для стандартного набора записей?

...