2015-10-02 1 views
1

Le code ci-dessous exporte correctement les données, mais ma ligne debug.print indique toujours -1. Je voudrais récupérer le nombre de lignes dans l'instruction debug.print. S'il vous plaît suggérer ce qui ne va pas.La propriété ADODB RecordSet.RecordCount renvoie toujours -1

Sub TEST() 

     Dim rs As Object 
     Dim iCols As Integer 
     Set rs = CreateObject("ADODB.Recordset") 
     On Error GoTo ERR 
     Dim SQLSTR As String, MYVAL As String 
     MYVAL = InputBox("Enter Query") 
     SQLSTR = " " & MYVAL & "" 
     CONNECT_TO_DWHS 
     rs.Open SQLSTR, PERSONALDBCONT 

      For iCols = 0 To rs.Fields.Count - 1 
       ActiveSheet.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name 
      Next 
     Debug.Print rs.RecordCount 
     ActiveSheet.Cells(2, 1).CopyFromRecordset rs 
     ActiveSheet.Cells(1, 1).Select 

     CLOSE_CONNECTION_TO_SQL 

      With ActiveWindow 
       .SplitColumn = 0 
       .SplitRow = 1 
       .FreezePanes = True 
      End With 

     Exit Sub 

    ERR: 
     CLOSE_CONNECTION_TO_SQL 
     MsgBox "There was an error" 

    End Sub 
+0

Je * pense * que c'est à cause de la décrémentation qui a lieu dans l'opération FOR. Pour que la boucle s'arrête, la dernière opération exécutée est une décrémentation par 1 de la valeur 'rs.Fields.Count', qui devient -1 pour que la boucle se termine. Pour cette raison, * je pense * que 'print' vous montrera toujours -1. (* mais ce n'est qu'une idée et ce n'est pas du tout le type de réponse d'un programmeur, qui devrait être précis *). Pour vérifier cela, je vous suggère de déplacer le 'print' dans la boucle .. ou peut-être même d'imprimer le nombre d'enregistrements avant la boucle .. –

Répondre

1

Essayez de spécifier l'emplacement du curseur. Spécifiez l'emplacement du curseur avant d'ouvrir la connexion.

rs.CursorLocation = adUseClient 
rs.Open SQLSTR, PERSONALDBCONT 
For iCols = 0 To rs.Fields.Count - 1 
    ActiveSheet.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name 
Next 
Debug.Print rs.RecordCount 

S'il vous plaît lire cet article: http://www.geeksengine.com/article/recordcount-ado-recordset-vba.html

0

Lorsque vous ouvrez un RecordSet comme ForwardOnly (par défaut si vous ne déclarez pas explicitement le type de curseur) les rendements de propriété RecordCount -1.

Pour plus d'informations, consultez here.