2016-08-08 24 views
1

Ich habe ein ADO-Befehlsobjekt in VBA ausgeführt und Rückgabewerte von einer gespeicherten Prozedur (in SQL Server). Um den SP und die Befehlszeilen in VBA zu überprüfen, habe ich die CopyFromRecordset-Methode verwendet, um die Daten anzuzeigen, und alles scheint in Ordnung zu sein.ADO-Recordset hat keine Recordcount mit Quelle auf ADO-Befehl (gespeicherte Prozedur)

Set ADOComm = New ADODB.Command 
With ADOComm 
    .ActiveConnection = ADOConn 
    .CommandType = adCmdStoredProc 
    .CommandText = "GenerateMasterSumIfs" 
    .Parameters.Append .CreateParameter("ImportFilePath", adVarChar, adParamInput, 100, TextFileSavePath) 
End With 

Set ADORec = New ADODB.Recordset 
Set ADORec = ADOComm.Execute 

Ich würde jetzt mit FIND oder GetRows die zurückgegebenen Datensätze zu können, wie (zum Beispiel) navigieren, aber der Re-Cord erscheint keine Daten zu haben (recordset.RecordCount gibt -1). Ich habe versucht, dies online zu recherchieren und habe gesehen, dass Verweise auf Cursortypen abhängig von der Quelle (in meinem Fall SQL Server) eingeschränkt waren, aber ich konnte keine Lösung finden, die ich verstehen und verwenden kann.

Also, meine Frage (n), insbesondere ist:

  1. Kann ich die ADO-Befehl/Cord-Kombination verwenden, um meine Daten zu sammeln dann ‚surfen‘ oder? ODER
  2. Muss ich den SP mit einer anderen Methode ausführen, um die gewünschte Navigation zu ermöglichen?

Ich bin kein Experte auf diesem Gebiet, so würde schätzen Ihre Geduld mit meinen technischen Beschreibungen und anderen Websites Etikette Fauxpas.

+0

Ist 'SET NOCOUNT ON;' in Ihrer gespeicherten Prozedur? – gofr1

+0

Es ist nicht. Ich habe versucht, das zu meinem SP hinzuzufügen, aber es machte keinen Unterschied für meine Situation. Ich habe jedoch seitdem mein Problem gelöst (siehe meine Antwort). Danke für deinen Vorschlag. –

Antwort

1

Die Lösung, die ich benötigte, war die CursorLocation-Eigenschaft des Objekts ADO Connection. Wenn ich es in adUseClient ändere, konnte ich den Cursor bewegen und Methoden wie FIND und GETROWS nach Bedarf verwenden.

Set ADOConn = New ADODB.Connection 
ADOConn.CursorLocation = adUseClient 
ADOConn.Open "Driver={SQL Server Native Client 11.0};Server=ServerName;Database=DBName;Trusted_Connection=yes;" 

Set ADOComm = New ADODB.Command 
With ADOComm 
    .ActiveConnection = ADOConn 
    .CommandType = adCmdStoredProc 
    .CommandText = "GenerateMasterSumIfs" 
    .Parameters.Append .CreateParameter("ImportFilePath", adVarChar, adParamInput, 100, TextFileSavePath) 
    .Parameters.Append .CreateParameter("MTFilePath", adVarChar, adParamInput, 100, PathToMT) 
End With 

Set ADORec = New ADODB.Recordset 
Set ADORec = ADOComm.Execute