Ich rufe eine gespeicherte Prozedur mit einem Befehl auf. Ich erhalte das Ergebnis in einem Datensatz. Jetzt muss ich einige Berechnungen durchführen und muss daher die Anzahl der Datensätze wissen, die zurückgegeben wurden. RecordSet.RecordCount sollte mir das geben, aber nur -1 zurückgeben. Ich habe verschiedene Werte von CursorType und CursorLocation ausprobiert, versuchte MoveLast. Nichts hilft.VBA RecordSet.RecordCount = -1 bei Verwendung der gespeicherten Prozedur und Befehl
Ich machte eine temporäre Lösung, indem ich eine feste Anzahl für die Anzahl der Datensätze angenommen.
Es gibt viele Threads hier über RecordCount, und auch Artikel, die ich lese, aber nichts scheint zu helfen. Ist das Problem, dass ich einen Befehl verwende? Die meisten Beispiele, die ich sehe, benutzen keine Befehle.
Ich bin ein erfahrener Programmierer, aber nicht so an SQL und VBA gewöhnt. Wer kann mir helfen?
Mit besten Grüßen, Wolfgang
Sub CallStoredProcedure()
Dim Conn As ADODB.Connection, RecordSet As ADODB.RecordSet
Dim Command As ADODB.Command
Dim ConnectionString As String, StoredProcName As String
Dim LoginID As ADODB.Parameter, Entity_Id As ADODB.Parameter
Application.ScreenUpdating = False
Set Conn = New ADODB.Connection
Set RecordSet = New ADODB.RecordSet
Set Command = New ADODB.Command
'w
RecordSet.CursorType = adOpenStatic
RecordSet.CursorLocation = adUseClient
ConnectionString = "Provider=SQLOLEDB;Data Source=HIQARBL218\SQLEXPRESS;Initial Catalog=SweSalaryStore;Trusted_Connection=yes;"
On Error GoTo CloseConnection
Conn.Open ConnectionString
StoredProcName = "dbo.getInfoFromSQLDB"
With Command
.ActiveConnection = Conn
.CommandType = adCmdStoredProc
.CommandText = StoredProcName
End With
Set EMPNR = Command.CreateParameter("@EMPNR", adVarChar, adParamInput, 100, "107")
Command.Parameters.Append EMPNR
Set PERNR = Command.CreateParameter("@PERNR", adVarChar, adParamInput, 100, "1111110008")
Command.Parameters.Append PERNR
Set CMPNR = Command.CreateParameter("@CMPNR", adVarChar, adParamInput, 100, "5612")
Command.Parameters.Append CMPNR
Set PERIODFROM = Command.CreateParameter("@PERIODFROM", adVarChar, adParamInput, 100, "1001")
Command.Parameters.Append PERIODFROM
Set PERIODTO = Command.CreateParameter("@PERIODTO", adVarChar, adParamInput, 100, "1701")
Command.Parameters.Append PERIODTO
Set RecordSet = Command.Execute
Sheets("Sheet1").Range("A5").CopyFromRecordset RecordSet
'loop to get column headings.
For i = 0 To RecordSet.Fields.Count - 1
Sheets("Sheet1").Cells(1, i + 1).Value = RecordSet.Fields(i).Name
Next i
'Calculate last row in RecordSet
Dim lastRow As Integer
lastRow = 2000
'lastRow = RecordSet.RecordCount 'NOT WORKING!!!
'Average OB
Dim AvgOB As Double
AvgOB = Excel.WorksheetFunction.Average(Range(Sheets("Sheet1").Cells(5, 2), Sheets("Sheet1").Cells(lastRow, 2)))
AvgOB = Excel.WorksheetFunction.Round(AvgOB, 2)
Sheets("Sheet1").Cells(2, 2).Value = AvgOB
Sheets("Sheet1").Cells(3, 2).Value = AvgOB * 12
RecordSet.Close
Conn.Close
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub
CloseConnection:
Application.ScreenUpdating = True
MsgBox "SQL Stored Procedure Did Not Execute Sucessfully!", vbCritical, "SQL Error"
Conn.Close
End Sub