2016-03-01 2 views
0

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

Что @trincotsays is correct, чтобы исправить проблему пробегает через 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 
2

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

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

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

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

    ' do something with value 
    ' 
    objRecordSet.MoveNext 
Loop 

 Смежные вопросы

  • Нет связанных вопросов^_^