1

テーブルから一連のデータを取得する VBScript UFT テストを作成しようとしています (100 レコードになります)。以下のクエリからわかるように、1 つの列のみを選択します。

SELECT TOP 100 l_Name FROM lessee

最初のレコードをメッセージ ボックスに表示することができましたが、これはテストとして行っただけです。私が今しようとしているのは、各レコードを配列に追加して、後でそれらをループして WebEdit Textbox の値を変更できるようにすることです。

以下は私の現在のコードですが、これを理解するのに少し苦労しています。

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

返されたレコードをループするとうまくいくと思っていました。

4

2 に答える 2

3

@trincotの言うことは、 をループする問題を修正するのに正しいです が、レコードセットを取得して に入れたい場合は、はるかに簡単な方法があります。ADODB.RecordsetArray

Dim data
'... (Recordset connection and execution code omitted)
If Not objRecordset.EOF Then data = objRecordset.GetRows()

GetRows()二次元配列を返します。最初の要素には列が含まれ、2 番目の要素には行が含まれます。たとえば、data上記の配列を使用して 5 行目の 2 列目にアクセスするには、

If IsArray(data) Then
  value = data(1, 4)
End If

注: Array変数要素は序数として 0 から始まるため、2 列1目は 、5 行目は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
于 2016-03-01T22:59:44.423 に答える
2

レコードを反復処理するのではなく、1 つしかない列 (フィールド) を反復処理するため、ループは 1 回だけ実行されます。その後、その列の値を取得すると、現在の (つまり最初の) レコードの値が取得されます。

列がなくなるので、ループは終了します。

レコードを反復処理する方法は次のとおりです。

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

    ' do something with value
    '
    objRecordSet.MoveNext
Loop
于 2016-03-01T19:38:33.460 に答える