![]() |
Probleme mit Stored Procs, ZEOS und Firebird embedded
Moin,
Ich weiß, dass das Thema ![]() Gegeben sei : D7 Pro, Firebird embedded 1.5.2, Zeos 6.1.5 stable (hab’s auch mit der 6.5.1 alpha probiert, ändert aber nichts). Ich versuche einfach eine Stored Procedure auszuführen (mit ExecProc) und hätte gerne den Rückgabewert. Das funktioniert soweit auch ganz gut beim ersten Durchlauf. Wenn ich aber die Stored Procedure ein zweites Mal aufrufe (oder wenn ich die Verbindung zu Firebird schließe) bekomme ich einen Fehler -901 (SQL Error : Invalid Statement handle…). Das Problem bei mehrfachem Ausführen der Stored Procedure kann ich umgehen, wenn ich die Komponente vor jedem ausführen dynamisch erstelle und hinterher wieder freigebe (etwas umständlich, aber was soll’s). Bleibt das Problem beim Schließen der Verbindung zur DB. Hat jemand eine Lösung für das Problem ? Tschüss, Lutz |
Re: Probleme mit Stored Procs, ZEOS und Firebird embedded
Hi,
ich hab mal versucht, deinen Fehler nachzuvollziehen:
SQL-Code:
CREATE PROCEDURE TEST_5
RETURNS (Result INTEGER) AS BEGIN Result = 5; SUSPEND; END
Delphi-Quellcode:
Kein Problem - auch bei mehrfachem Aufrufen.
ZStoredProc.StoredProcName := 'Test_5';
ZStoredProc.ExecProc; ShowMessage(ZStoredProc.ParamByName('Result').AsString); Allerdings tritt der von dir genannte Fehler beim Schließen der Connection auf. Eine Möglichkeit, diesen Fehler zu umgehen, wäre:
Delphi-Quellcode:
MfG
try
ZConnection.Disconnect; except on E: Exception do; end; Stevie |
Re: Probleme mit Stored Procs, ZEOS und Firebird embedded
Hi Stevie,
erst mal danke für die Antwort. Hab vergessen zu erwähnen, dass meine Stored Proc auch Eingabewerte hat, die ich vor jedem Ausführen mit
Delphi-Quellcode:
setze.
ZStoredProc.ParamByName('Param1').AsString := 'abc';
ZStoredProc.ParamByName('Param2').AsInteger := 12; Ausserdem ist mein Rückgabewert vom Typen Integer. Ob's daran liegt werde ich später im Büro prüfen, denn davon abgesehen, sieht mein Quellcode dem von Dir angegebenen sehr ähnlich. Tschüss, Lutz |
Re: Probleme mit Stored Procs, ZEOS und Firebird embedded
Hi Lutz,
ich hab nochmal genau geguckt und festgestellt, dass man zwischen Proceduren mit und ohne Rückgabe-Parameter unterscheiden muss. Auf der ![]() Dort wird auch erklärt, wie man TZStoredProc benutzt und was dabei zu beachten ist. MfG Stevie |
Re: Probleme mit Stored Procs, ZEOS und Firebird embedded
Hi Stevie,
Danke für den Link zu dem Zeos Tuto. Ich hatte mir das Firebird embedded Tuto von Domo Sokrat angesehen (wurde igrendwo auf der DP darauf hingewiesen), hatte den zweiten Teil (bezüglich ZEOS) allerdings übersehen. Mal sehen, ob ich damit meine Probleme lösen kann. Trotzdem noch mal kurz zum Problem : Ich hab's noch mal durchgetestet und der Fehler bei wiederholtem Aufruf einer Stored Proc tritt tatsächlich nur dann auf, wenn man der Stored Proc vorher einen Wert übergibt. Z.B. folgende SP :
SQL-Code:
In Delphi :
CREATE PROCEDURE TEST2_PROC (
INVALUE INTEGER) RETURNS ( RESULT INTEGER) AS BEGIN result = :INVALUE; SUSPEND; END
Delphi-Quellcode:
funktioniert, während
ZStoredProc.ExecProc;
MessageDlg(IntToStr(ZStoredProc.ParamByName('RESULT').Value),mtInformation,[mbOK],0); ZStoredProc.ExecProc; MessageDlg(IntToStr(ZStoredProc.ParamByName('RESULT').Value),mtInformation,[mbOK],0);
Delphi-Quellcode:
beim zweiten ExecProc nicht mehr funktioniert.
ZStoredProc.ParamByName('INVALUE').Value := 1;
ZStoredProc.ExecProc; MessageDlg(IntToStr(ZStoredProc.ParamByName('RESULT').Value),mtInformation,[mbOK],0); ZStoredProc.ExecProc; MessageDlg(IntToStr(ZStoredProc.ParamByName('RESULT').Value),mtInformation,[mbOK],0); Schon komisch. Tschüss, Lutz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz