数据库到数组
Database to Array
我正在尝试编写一个 VBScript UFT 测试,它从 table 中获取一组数据(它将是 100 条记录)。正如您从下面的查询中看到的那样,我只转到 select 一栏。
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
我假设循环遍历返回的记录是可行的。
你的循环只会执行一次,因为你不是在记录上迭代,而是在列(字段)上迭代,而你只有一个。当您随后检索该列的值时,您将获得当前(即第一条)记录的值。
由于没有更多的列,循环结束。
以下是您如何遍历记录:
Do While Not objRecordSet.EOF
value = objRecordSet("l_Name")
' do something with value
'
objRecordSet.MoveNext
Loop
什么 @trincot 可以解决循环遍历 ADODB.Recordset
的问题,但是如果您想获取记录集并放入 Array
中,则有一种更简单的方法。
Dim data
'... (Recordset connection and execution code omitted)
If Not objRecordset.EOF Then data = objRecordset.GetRows()
GetRows()
returns 二维数组。第一个元素包含列,第二个元素包含行,因此例如要使用上面的 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
我正在尝试编写一个 VBScript UFT 测试,它从 table 中获取一组数据(它将是 100 条记录)。正如您从下面的查询中看到的那样,我只转到 select 一栏。
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
我假设循环遍历返回的记录是可行的。
你的循环只会执行一次,因为你不是在记录上迭代,而是在列(字段)上迭代,而你只有一个。当您随后检索该列的值时,您将获得当前(即第一条)记录的值。
由于没有更多的列,循环结束。
以下是您如何遍历记录:
Do While Not objRecordSet.EOF
value = objRecordSet("l_Name")
' do something with value
'
objRecordSet.MoveNext
Loop
什么 @trincot ADODB.Recordset
的问题,但是如果您想获取记录集并放入 Array
中,则有一种更简单的方法。
Dim data
'... (Recordset connection and execution code omitted)
If Not objRecordset.EOF Then data = objRecordset.GetRows()
GetRows()
returns 二维数组。第一个元素包含列,第二个元素包含行,因此例如要使用上面的 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