Hi,
ich möchte mit Delphi6, ADO und MSSQLServer 2005 Express eine Stored procedure aufrufen, die einen Wert zurückliefert aber nicht als result set, sondern als ouptput parameter.
Beispiel:
SQL-Anweisung
1: 2: 3: 4:
| CREATE PROCEDURE TestProc(@Value1 INT, @Value2 INT OUTPUT) AS BEGIN SET @Value2 = @Value1 + 1; END |
Mit SQL abgefragt
SQL-Anweisung
1: 2: 3: 4: 5: 6:
| DECLARE @v1 INT; DECLARE @v2 INT; SET @v1=100; SET @v2=200; EXEC TestProc @v1, @v2 OUTPUT; SELECT @v2; |
liefert mir die Abfrage das richtige Ergebnis 101
Mein Problem: Ich möchte das mit einer ADO-Komponente machen (TADOStoredProc). Ich habe die Komponente die Parameterliste ermitteln lassen und in der DFM-Datei sieht sie so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| object ADOStoredProc1: TADOStoredProc Connection = ADOConnection1 CursorType = ctStatic ExecuteOptions = [eoExecuteNoRecords] ProcedureName = 'TestProc;1' Parameters = < item Name = '@RETURN_VALUE' DataType = ftInteger Direction = pdReturnValue Precision = 10 end item Name = '@Value1' Attributes = [paNullable] DataType = ftInteger Precision = 10 Value = 100 end item Name = '@Value2' Attributes = [paNullable] DataType = ftInteger Direction = pdInputOutput Precision = 10 end> |
Wenn ich das Teil Active := true setze, meldet es mir
"Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind unvereinbar"
Wenn ich die Stored Procedure so formuliere, dass sie mir mit SELECT @Value2 das Ergebnis liefert und ich die ADO-Komponente die Treffermenge abholen lasse gehts. Dann liefert sie sogar den Rückgabewert mit dem OUTPUT-Parameter.
Kann es sein, das TADOStoredProc nicht mit Stored Procedures ohne Ergebnismenge umgehen kann?
Wenn ja, wie kann ich das sonst machen (ohne mit RecordSet hantieren zu müssen nur wegen eines simplen wertes)?
Moderiert von
Martok: Delphi-Tags gesetzt