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

Я пытаюсь написать тест 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

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

2 ответа

Решение

То, trincot говорит 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

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

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

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

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

    ' do something with value
    '
    objRecordSet.MoveNext
Loop
Другие вопросы по тегам