База данных для массива
Я пытаюсь написать тест 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