2014-09-15 3 views
0

У меня проблема при переходе через набор записей; вот код:Excel VBA - Loop через набор записей

Dim query as String 
    query = "SELECT * FROM test WHERE " & filter 

    ' Declare variables' 
    Dim objMyConn As ADODB.Connection 
    Dim objMyCmd As ADODB.Command 
    Dim objMyRecordset As ADODB.Recordset 
    Dim objRst As ADODB.Recordset 

    Set objMyConn = New ADODB.Connection 
    Set objMyCmd = New ADODB.Command 
    Set objMyRecordset = New ADODB.Recordset 

    'Open Connection' 
    objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDB;User ID=test;Password=test" 
    objMyConn.Open 

    'Set and Excecute SQL Command' 
    Set objMyCmd.ActiveConnection = objMyConn 
    objMyCmd.CommandText = query 
    objMyCmd.CommandType = adCmdText 

    'Open Recordset' 
    Set objMyRecordset.Source = objMyCmd 
    objMyRecordset.CursorLocation = adUseClient 
    objMyRecordset.CursorType = adOpenStatic 
    objMyRecordset.Open 

    Dim FindRecordCount As Integer 
    If objMyRecordset.EOF Then 
     FindRecordCount = 0 
    Else 
     objMyRecordset.MoveLast 
     FindRecordCount = objMyRecordset.RecordCount ' In this case it returns 4 
    End If 

    Do Until objMyRecordset.EOF = True 
     ' Get variables 

     ... 

     ' Move to next Record 
     objMyRecordset.MoveNext 
    Loop 

Когда я проверить, сколько строк имеют записи, он возвращает 4, но идут только один раз через петлю. В этом случае он должен проходить 4 раза.

ответ

2

Вы использовали movelast перед циклом, поэтому вам нужно будет movefirst, если вы хотите на самом деле перебрать все записи.

+0

очень простая вещь. Спасибо чувак! – SparX23

1

Вам не нужно писать «EOF = True» формулу «EOF» истинно в одних и тех же ситуациях :)

Смежные вопросы