数据库到数组

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