Betreft Delphi7 / MS SQL 2000, en ik wil via een ADOcommand graag de return-value van een Stored Procedure opvragen.
Bijv:
En dan krijg ik als reactie:
EDatabaseError: Parameter 'Return' not found
Dan voeg ik de uitgecommentariseerde regel weer toe met als direction: pdReturnValue, dan krijg ik als reactie:
EOleException: Procedure or function Test has too many arguments specified'
PS: de SQL-profiler geeft als uitgevoerd commando: exec Test 'JR', '0000'
Op internet is er heel erg weinig te vinden over de "Returnvalue"van SQL. Heeft er hier iemand ervaring mee?
PS: deze verschrikkelijk lelijke oplossing werkt, maar wil ik liever niet gebruiken:
Bijv:
code:
1
2
3
4
5
6
| CREATE PROCEDURE Test @Initiaal CHAR(4), @Pincode VARCHAR(4) AS RETURN 5 GO |
code:
1
2
3
| declare @Return int execute @Return=Test @Initiaal='A',@Pincode='0000' select @Return |
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
| with TADOCommand.Create(NIL) do begin Connection:=ADOConnection1; CommandType:=cmdStoredProc; CommandText:='Test'; Parameters.CreateParameter('Initiaal',ftString,pdInput,4,'JR'); Parameters.CreateParameter('Pincode',ftString,pdInput,4,'0000'); // Parameters.CreateParameter('Return',ftInteger,pdreturnValue,4,0); Execute; memo1.lines.add(Parameters.ParamValues['Return']); Free; end; |
En dan krijg ik als reactie:
EDatabaseError: Parameter 'Return' not found
Dan voeg ik de uitgecommentariseerde regel weer toe met als direction: pdReturnValue, dan krijg ik als reactie:
EOleException: Procedure or function Test has too many arguments specified'
PS: de SQL-profiler geeft als uitgevoerd commando: exec Test 'JR', '0000'
Op internet is er heel erg weinig te vinden over de "Returnvalue"van SQL. Heeft er hier iemand ervaring mee?
PS: deze verschrikkelijk lelijke oplossing werkt, maar wil ik liever niet gebruiken:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| with TADOCommand.Create(NIL) do begin Connection:=ADOConnection1; CommandType:=cmdText; CommandText:= 'declare @Return int;'; CommandText:=CommandText+'execute @Return=Test @Initiaal='#39'A'#39', @Pincode='#39'0000'#39';'; CommandText:=CommandText+'select @Return'; with TADODataSet.Create(NIL) do begin Recordset:=Execute; memo1.lines.add(recordset.Fields.Item[0].Value); Free; end; Free; end; |
[ Voor 40% gewijzigd door jvdmeer op 14-09-2003 20:43 ]