Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

Stored Procedure via Zeos auf mySQL

  Alt 4. Mai 2010, 11:00
Datenbank: mySQL • Version: 5.0.27 • Zugriff über: Zeos Lib 6.6.6
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
  Mit Zitat antworten Zitat