Benutzer mit den meisten Antworten
Rückgabewert einer Gespeicherten Prozedur stimmt nicht

Frage
-
Hallo,
habe folgende SP:
... DECLARE @rc INT = -1; BEGIN TRANSACTION; BEGIN TRY Insert into tbl_Gehaeuse_Daten (Gehaeusenr, Zeit_Magnetkraft, archiv) Select I.Gehaeusenr, I.Zeit_Magnetkraft, 0 As Archiv From tbl_importGehaeuse As I Where I.Gehaeusenr Not In (Select G.Gehaeusenr From tbl_Gehaeuse As G); Insert into tbl_Gehaeuse (Gehaeusenr, Status, Erfassungsdatum, Rohmaterial) SELECT I.Gehaeusenr, I.Status, I.insertDatum, I.Rohmaterial FROM dbo.tbl_ImportGehaeuse AS I Where I.Gehaeusenr Not In (Select G.Gehaeusenr From tbl_Gehaeuse As G); SET @rc = @@ROWCOUNT; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK; RETURN -1 END CATCH Commit return @rc
Die SP führe ich im SQL-Server aus => Rückgabewert = 44 Wenn ich nun von Access diese ausführe erhalte ich als Rückgabewert = 0. Siehe nachfolgender Code:
Public Function SP_ImportGehaeuseNeu() As Long Dim strProcname As String 10 strProcname = "dbo.ImportGehaeuseNew" 20 Set cnn = OpenConnection(ConnectionStringC) 30 Set cmdObj = New ADODB.Command 40 With cmdObj 50 .ActiveConnection = cnn 60 .CommandText = strProcname 70 .CommandType = adCmdStoredProc 80 .CommandTimeout = 60 90 .Execute 100 End With 110 SP_ImportGehaeuseNeu = cmdObj.Parameters(0).Value 120 Set cmdObj = Nothing End Function
Wo habe ich da einen Fehler? Die SP wird auch über den Access-Aufruf korrekt ausgeführt, nur liefert @rc keinen Rückgabewert.
Gruß Andreas
http://www.AccessBlog.de
Antworten
-
Du musst entweder einen expliziten Rückgabeparameter anlegen oder die Parameters-Collection neu laden:
Option Compare Database Option Explicit Public Sub Test() Dim cnn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=SQLNCLI10;Server=(local);Database=tempdb;Integrated Security=SSPI;" cnn.Open Set cmd = New ADODB.Command Set cmd.ActiveConnection = cnn cmd.CommandText = "Test" cmd.CommandType = adCmdStoredProc cmd.Parameters.Refresh cmd.Execute Set cmd = Nothing cnn.Close Set cnn = Nothing End Sub
- Als Antwort markiert Andreas Vogt Montag, 29. August 2011 14:40
Alle Antworten
-
Du musst entweder einen expliziten Rückgabeparameter anlegen oder die Parameters-Collection neu laden:
Option Compare Database Option Explicit Public Sub Test() Dim cnn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=SQLNCLI10;Server=(local);Database=tempdb;Integrated Security=SSPI;" cnn.Open Set cmd = New ADODB.Command Set cmd.ActiveConnection = cnn cmd.CommandText = "Test" cmd.CommandType = adCmdStoredProc cmd.Parameters.Refresh cmd.Execute Set cmd = Nothing cnn.Close Set cnn = Nothing End Sub
- Als Antwort markiert Andreas Vogt Montag, 29. August 2011 14:40