pcfjkg
Goto Top

Argumentübergabe und Rückgabe eine gespeicherten Prozedur

MS-Access 2000, MS SQL-SERVER 2000, VBA ruft mittels *.adp eine gespeicherte Prozedur.
Fehler: Zu viele Argumente übergeben.

Ein *.adp Projekt unter MS-Access 2000 ruft eine gespeicherte Prozedur auf einem MS-SQL 2000 Server auf. (Das Textfeld eines Übungsformulars: hier TF_Param soll nur zum Testen der Übergabe verschiedener Werte dienen.)
I
Private Sub TF_Param_AfterUpdate()

Dim Param As ADODB.Parameter
Dim Com As ADODB.Command
'Neues Befehlsobjekt erstellen
Set Com = New ADODB.Command

'Eingabeparameter erstellen
Set Param = Com.CreateParameter("LB", adVarChar, adParamInput, 4)
Param.Value = Me.TF_Param.Value
Com.Parameters.Append Param

'Rückgabeparameter erstellen
Set Param = Com.CreateParameter("Return", adVarChar, adParamReturnValue, 20)
Com.Parameters.Append Param

Com.CommandType = adCmdStoredProc
Com.CommandText = "Meine_Procedure"

'Auslösen
Com.ActiveConnection = CurrentProject.Connection
Com.Execute

'Ergebnisse anzeigen
MsgBox Com.Parameters(0).Value & " " & Com.Parameters(1).Value
end sub

Die TestProzedur lautet:

CREATE Procedure Meine_Procedure
(
@lb varchar(4)
)
As
SET nocount on
DECLARE @rückgabe char(2)
Set @rückgabe = 'xx'
RETURN @rückgabe

Fehlermeldung: Für die Prozedur ' Meine_Procedure' wurden zu viele Argumente angegeben.
Wenn ich den Rückgabeparameter nicht erstelle, gibt es keine Fehlermeldung. Ich kann so aber nicht testen, ob die Übergabe der Werte und die Rückgabe sauber funktioniert.
Kennt jemand eine Lösung ?

Content-Key: 100313

Url: https://administrator.de/contentid/100313

Printed on: April 23, 2024 at 13:04 o'clock

Member: Logan000
Logan000 Oct 27, 2008 at 08:41:58 (UTC)
Goto Top
Moin Moin

Meine Kenntnisse in VBA und SoreProc Programmierung sind zwar schon etwas eingerostet, aber so wie ich das sehe verwechselst du Rockgabecode und Rückgabeparameter.

Der Rückgabecode ist immer INT und wird mit RETURN gesetzt wie in deinem Bsp.
Rückgabeparameter mussen in der StoreProc deklariert werden, z.B.

CREATE Procedure Meine_Procedure(
@LB varchar(4),
@Ret varchar(4) OUTPUT )
As
SET nocount on
Set @Ret= 'xx'  

Gruß L.
Member: PCFJKG
PCFJKG Oct 27, 2008 at 10:40:12 (UTC)
Goto Top
Hallo Logan000,

genau das war es (Nix mit eingerostet: war genau richtig, schnell, effektiv und hat geholfen).

Vielen Dank, PCFJKG