База данных в массив

Я пытаюсь написать тест VBScript UFT, который получает набор данных из таблицы (это будет 100 записей). Я собираюсь выбрать только один столбец, как видно из запроса ниже.

SELECT TOP 100 l_Name FROM lessee

Мне удалось получить первую запись для отображения в окне сообщения, но я сделал это только в качестве теста. Что я пытаюсь сделать сейчас, так это добавить каждую запись в массив, чтобы позже я мог просмотреть их, чтобы изменить значение текстового поля WebEdit.

Ниже приведен мой текущий код, но мне сложно это понять.

Dim DBQuery 
DBQuery = "Select top 100 l_Name from lessee"

objConnection.Open "Provider=sqloledb.1;Server=TestServer;User Id=User;Password=Test123;Database=DBTest"

objRecordSet.Open DBQuery,objConnection

' Return the Result Set  '''
For Each element In ObjRecordset.Fields.Item
    Value = objRecordSet.fields.item(element)               
    MsgBox Value
Next

' Release the Resources  '''
objRecordSet.Close        
objConnection.Close     

Set objConnection = Nothing
Set objRecordSet = Nothing

Я предполагал, что цикл по возвращенным записям сработает.


person Krazy Dev    schedule 01.03.2016    source источник


Ответы (2)


Правильно то, что @trincot , чтобы устранить проблему с циклическим переходом ADODB.Recordset, но если вы хотите взять набор записей и поместить в Array, есть гораздо более простой способ.

Dim data
'... (Recordset connection and execution code omitted)
If Not objRecordset.EOF Then data = objRecordset.GetRows()

GetRows() возвращает двумерный массив. Первый элемент содержит столбец, а второй - строку, поэтому, например, для доступа ко второму столбцу пятой строки с использованием массива data, приведенного выше, вы должны использовать

If IsArray(data) Then
  value = data(1, 4)
End If

Примечание. Array элементы переменных начинаются с нуля в качестве порядкового номера, поэтому второй столбец - это 1, а пятая строка - это 4.

Вы можете перебирать данные записи, используя цикл For, например;

Dim row, rows

If IsArray(data) Then
  rows = UBound(data, 2)
  For row = 0 To rows
    'First column of the current row
    WScript.Echo data(0, row)
    'Second column of the current row
    WScript.Echo data(1, row)
    '... etc
  Next
End If
person user692942    schedule 01.03.2016

Ваш цикл будет выполняться только один раз, потому что вы выполняете итерацию не по записям, а по столбцам (полям), из которых у вас есть только один. Когда вы затем извлекаете значение для этого столбца, вы получаете значение текущей (т.е. первой) записи.

Поскольку столбцов больше нет, цикл заканчивается.

Вот как вы перебираете записи:

Do While Not objRecordSet.EOF
    value = objRecordSet("l_Name")

    ' do something with value
    '
    objRecordSet.MoveNext
Loop
person trincot    schedule 01.03.2016