Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Stored Procedure via Zeos auf mySQL (https://www.delphipraxis.net/151048-stored-procedure-via-zeos-auf-mysql.html)

TUX_der_Pinguin 4. Mai 2010 11:00

Datenbank: mySQL • Version: 5.0.27 • Zugriff über: Zeos Lib 6.6.6

Stored Procedure via Zeos auf mySQL
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz