VBA ADODB foreach行和列

时间:2016-08-23 12:15:42

标签: excel vba excel-vba foreach adodb

我如何foreach ADODB.Resultset返回的行?是否可以按列名获取值(例如,如果我想从第3行的列“name”获取值到单元格A1)?

这是我当前没有任何循环的代码:

Dim oConn As ADODB.Connection
Set oConn = New ADODB.Connection

oConn.Open "Driver={MySQL ODBC 5.2 Unicode Driver};Server=****;Database=****;Uid=****;Pwd=****;"

Dim oRS As ADODB.Recordset
Set oRS = New ADODB.Recordset

oRS.Open "SELECT * FROM report_access", oConn, adOpenStatic

With oRS
    Cells(1, 1).CopyFromRecordset oRS
End With

提前致谢。

3 个答案:

答案 0 :(得分:0)

Try this for iteration 

  while not (ors.EOF Or ors.BOF)

    for each x in ors.Fields
       'Assign cell content

    next
  ors.MoveNext

wend

答案 1 :(得分:0)

您可以使用' GetRows'将查询到的数据移动到数组中。并根据需要从数组中获取值

例如

arr = oRS.GetRows

i = 0
If Not (oRS.EOF And oRS.BOF) Then
oRS.MoveFirst
    Do Until oRS.EOF = True
        MsgBox arr(0, i)
        i = i + 1
        oRS.MoveNext
    Loop
Else
    MsgBox "There are no records in the recordset."
End If

这将警告第一列值

注意:这里arr(3,2)表示第3列和第2行

答案 2 :(得分:0)

不直接。您可以使用3 oRS.MoveNext

移至第3行
while not oRS.EOF And oRS.AbsolutePosition < 2
    oRS.MoveNext
wend
[A1] = oRS.Fields("name")

或者您可以找到“名称”字段的索引并使用oRS.GetRows

Dim nameIndex As Integer

For nameIndex = 0 To oRS.Fields.Count - 1
    If oRS.Fields(nameIndex).Name = "name" Then Exit For
Next 

arr = oRS.GetRows

[a1] = arr(2, nameIndex)

<强>更新

您可以使用oRS.Move

oRS.Move 2
[A1] = oRS.Fields("name")