2013-01-01 117 views
1

我已经编写了以下代码,以从Oracle DB中获取表中的数据,并使用VBA宏将数据转储到Excel表。
它从DB中的表中检索数据并将其转储到Excel表中。在Excel中,它重复显示第一行。对于一个实例,如果在DB中返回了45个不同的行,在Excel表中,返回了45行,但是在Excel中的所有45行都与第一行是DB相同。如何从数据库中获取精确的行到excel?使用Excel中的宏VBA从Oracle表检索数据到Excel

子结果()

Dim SQL As String 
Dim OraDynaSet As Object 
Dim i As Integer 

SQL = "Select * from Employee where EmpID=20" 
Set OraDynaSet = objDataBase.DBCreateDynaset(SQL, 0&) 

    If OraDynaSet.RecordCount > 0 Then 
    'There were records retrieved 

     OraDynaSet.MoveFirst 


     For ICOLS = 0 To OraDynaSet.Fields.Count - 1 
      .Cells(1, ICOLS + 1).Value = OraDynaSet.Fields(ICOLS).Name 
     Next ICOLS 


     'Loop the recordset for returned rows 
     For i = 0 To OraDynaSet.RecordCount - 1 

      For j = 0 To ICOLS - 1 
      .Cells(2 + i, j + 1) = OraDynaSet.Fields(j).Value 

      Next j 
     Next i 


    Else 
     MsgBox "No Matching records found" 
    End If 
    End Sub 
+1

得到的答案..........我应该给 “OraDynaSet.MoveNext” “下一步J” 之后...... .....当这种变化发生时,它可以正常工作。 – tester

回答

0
Dim SQL As String 
Dim OraDynaSet As Object 
Dim i As Integer 

SQL = "Select * from Employee where EmpID=20" 
Set OraDynaSet = objDataBase.DBCreateDynaset(SQL, 0&) 

If OraDynaSet.RecordCount > 0 Then 
'There were records retrieved 

    OraDynaSet.MoveFirst 


    For ICOLS = 0 To OraDynaSet.Fields.Count - 1 
     .Cells(1, ICOLS + 1).Value = OraDynaSet.Fields(ICOLS).Name 
    Next ICOLS 


    'Loop the recordset for returned rows 
    For i = 0 To OraDynaSet.RecordCount - 1 

     For j = 0 To ICOLS - 1 
     .Cells(2 + i, j + 1) = OraDynaSet.Fields(j).Value 

     Next j 
     OraDynaSet.Movenext 
    Next i 


Else 
    MsgBox "No Matching records found" 
End If 
End Sub