Hallo Dpler,
ich versuche mich gerade an dem Thema Gespeicherte Prozeduren, dazu habe ich eine kleine Routine geschrieben.
Die eine einfache Select Abfrage ausführt und mir ein Ergebnis liefern soll, an die Routine wird ein Parameter übergeben.
SQL-Code:
DELIMITER $$
CREATE PROCEDURE `cbase2`.`GetIdentEK` (IN PoolID INT, OUT EK FLOAT)
BEGIN
SELECT Net FROM pool_order_history WHERE PID=PoolID ORDER BY Date LIMIT 1;
END$$
Jetzt habe ich versucht mit der Komponente TZStoredProc aus der Zeos Lib die Gespeicherte Prozedur aufzurufen,
jedoch gelang mir dies bisher nicht. Habe schon hier im Forum gesucht konnte aber bisher kein wirklich
funktionierendes Beispiel finden wie man eine Gespeicherte Prozedur mit Hilfe von TZStoredProc aufruft.
Bei folgendem Versuch erhalte ich immer die Fehlermeldung "Unsupported Operation". Lasse ich "StoredProc.Open"
weg bekomme ich zwar keiner Fehlermeldung, aber auch kein Ergebnis, es passiert also nichts.
Delphi-Quellcode:
procedure TfrmPool_Component.Button1Click(Sender: TObject);
var
StoredProc: TZStoredProc;
begin
StoredProc := TZStoredProc.Create(Self);
try
StoredProc.Connection := DMSQL.Con;
StoredProc.StoredProcName := 'cbase2.GetIdentEK';
StoredProc.Params.Clear;
with StoredProc.Params.CreateParam(ftInteger, 'PoolID', ptInput) do AsInteger := 0;
with StoredProc.Params.CreateParam(ftFloat, 'EK', ptOutput) do AsFloat := 0;
StoredProc.ParamByName('PoolID').AsInteger := 141;
StoredProc.Open;
if StoredProc.RecordCount > 0 then begin
ShowMessage(StoredProc.FindField('EK').AsString);
end;
finally
StoredProc.Close;
StoredProc.Free;
end;
end;
Über die
mySQL Konsole klappt ein erfolgreicher Aufruf.
Code:
mysql> CALL cbase2.GetIdentEK(141, @res);
+------+
| Net |
+------+
| 254 |
+------+
1 row in set (0.05 sec)
Query OK, 0 rows affected (0.05 sec)
Irritierend finde ich auch wieso eigentlich der Rückgabeparameter "EK" heißen soll aber im Konsolen Aufruf der Name der abgefragten Spalte auftaucht.
mfg
TUX