![]() |
Datenbank: embedded Firebird • Version: 1.5.2.4731 • Zugriff über: ZEOS
ZStoredProc - Ergbnismenge
Hi DP!
Ich hab hier ne StoredProcedure in meiner FireBird-Table. Die funzt auch super. Nun möchte ich sie über ZEOS aus Delphi ansprechen, mache ich das so:
Delphi-Quellcode:
Wird mir als VLfdNr (Rückgabewert eines AutoInc per Generator) immer 0 ausgegeben, obwohl ich im DBGrid sehen kann das es nicht stimmt.
StoredProc.Close;
StoredProc.ParamByName('VName').Value := 'Sadelfeld'; StoredProc.ParamByName('VVorname').Value := 'Hermann'; StoredProc.Open; showMessage(IntToStr(StoredProc.paramByName('VLfdNr').asInteger)); Nutze ich diese Variante
Delphi-Quellcode:
bekomme ich ab dem zweiten Aufruf die Fehlermeldung, dass die Paramter nicht stimmen. Zusätzlich gibts ne Exception beim Trennen der Verbindung. Ist ja auch logisch, AFAIK ist ExecProc ja auch nicht für Ergebnismengen gedacht. StoredProc.Close; StoredProc.ParamByName('VName').Value := 'Sadelfeld'; StoredProc.ParamByName('VVorname').Value := 'Hermann'; StoredProc.ExecProc; showMessage(IntToStr(StoredProc.paramByName('VLfdNr').asInteger)); ABER auf diese Weise zeigt er mir den richtigen Wert für VLFdNr an :wall: Kennt jemand ne Lösung für mein Problem? Muss ich bei der ersten Variante anders auf den Rückgabeparameter zugreifen? :gruebel: Schönen Gruß, Thomas P.S.: Sobald das klappt, nerv ich euch erstmal nicht mehr mit ZEOS+embedded Firebird. Dann muss ich erstmal die Grundfunktionen des eigentlich Progs basteln, und das krieg ich hin :D |
Re: ZStoredProc - Ergbnismenge
Solltest du nicht vielleicht
Delphi-Quellcode:
benutzen. Zeig mal die SP, was die liefert. Ein Recordset oder nur einen Wert als Parameter.
paramByName('VLfdNr').asInteger
|
Re: ZStoredProc - Ergbnismenge
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
SQL-Code:
Wobei alles bis zum begin nicht sicher ist, habe die SP mit IBeasy+ angelegt, im Anhang mal ein Screenshot davon.
CREATE PROCEDURE INSERT_DATA (VName VARCHAR (30), VVorname VARCHAR(30))
RETURNS (VLfdNr INTEGER) AS begin VLfdNr = GEN_ID(G$_LfdNr, 1); INSERT INTO PROCTEST ( Lfdnr, Name, Vorname) VALUES ( :VLfdNr, :VName, :VVorname); SUSPEND; end Wie gesagt, wenn ich ExecProc nutze, klappts mit dem Rückgabewert auch. Nur kommen dann halt die Exceptions. |
Re: ZStoredProc - Ergbnismenge
Zitat:
Ich meinte FieldByName.. Aber da die Proc. eh nur einen Integer zurücklefert, ist das mit dem ParamByName auch ok. Und da du keine Ergebnismenge von der Stored Procedure geliefert kriegst, sondern nur einen Parameter, ist ExecProc schon die richtige Wahl. Open verwendest du nur wenn du eine ganze Datenmengen geliefert kriegst, also das Ergebnis einer Select Abfrage. Keine Ahnung, wo jetzt direkt dein Fehler sein könnte. |
Re: ZStoredProc - Ergbnismenge
Mhh, dann werd ich nochmal weiter tüfteln, Danke erstmal.
Wenn ich was finde, dann schreib ichs mal hier rein, könnte ja auch für andere interessant sein :stupid: |
Re: ZStoredProc - Ergbnismenge
Juhu :dancer: Habs geschafft. Und zwar funktioniert das ganze auf diese Weise:
Delphi-Quellcode:
Wahrscheinlich ist es keine elegante Lösung, aber eine die im Gegensatz zu den anderen funktioniert...
StoredProc.Close;
StoredProc.ParamByName('VName').Value := 'Sadelfeld'; StoredProc.ParamByName('VVorname').Value := 'Hermann'; StoredProc.Open; showMessage(IntToStr(StoredProc.Fields[0].asInteger)); //Edit: mit FieldByName hats übrigens nicht geklappt. Und Fields[0].Name gibt auch nen leeren String zurück... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 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 by Thomas Breitkreuz