AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ZStoredProc - Ergbnismenge
Thema durchsuchen
Ansicht
Themen-Optionen

ZStoredProc - Ergbnismenge

Ein Thema von Thanatos81 · begonnen am 31. Aug 2005 · letzter Beitrag vom 1. Sep 2005
Antwort Antwort
Thanatos81
(Gast)

n/a Beiträge
 
#1

ZStoredProc - Ergbnismenge

  Alt 31. Aug 2005, 11:55
Datenbank: embedded Firebird • Version: 1.5.2.4731 • Zugriff über: ZEOS
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:
  StoredProc.Close;
  StoredProc.ParamByName('VName').Value := 'Sadelfeld';
  StoredProc.ParamByName('VVorname').Value := 'Hermann';
  StoredProc.Open;
  showMessage(IntToStr(StoredProc.paramByName('VLfdNr').asInteger));
Wird mir als VLfdNr (Rückgabewert eines AutoInc per Generator) immer 0 ausgegeben, obwohl ich im DBGrid sehen kann das es nicht stimmt.

Nutze ich diese Variante
Delphi-Quellcode:
  
  StoredProc.Close;
  StoredProc.ParamByName('VName').Value := 'Sadelfeld';
  StoredProc.ParamByName('VVorname').Value := 'Hermann';
  StoredProc.ExecProc;
  showMessage(IntToStr(StoredProc.paramByName('VLfdNr').asInteger));
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.

ABER auf diese Weise zeigt er mir den richtigen Wert für VLFdNr an Kennt jemand ne Lösung für mein Problem? Muss ich bei der ersten Variante anders auf den Rückgabeparameter zugreifen?

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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: ZStoredProc - Ergbnismenge

  Alt 31. Aug 2005, 12:49
Solltest du nicht vielleicht
paramByName('VLfdNr').asInteger benutzen. Zeig mal die SP, was die liefert. Ein Recordset oder nur einen Wert als Parameter.
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#3

Re: ZStoredProc - Ergbnismenge

  Alt 31. Aug 2005, 13:04
Zitat von Jelly:
Solltest du nicht vielleicht
paramByName('VLfdNr').asInteger benutzen.
Hä? Mach ich doch. Oder meintest du "Vielleicht solltest du nicht..."? Dann wäre das aber ja eine Wiederholung meiner Frage weiter oben (Muss ich bei der ersten Variante anders auf den Rückgabeparameter zugreifen?)

Zitat von Jelly:
Zeig mal die SP, was die liefert. Ein Recordset oder nur einen Wert als Parameter.
Die liefert nur einen Integer-Wert zurück:

SQL-Code:
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
Wobei alles bis zum begin nicht sicher ist, habe die SP mit IBeasy+ angelegt, im Anhang mal ein Screenshot davon.

Wie gesagt, wenn ich ExecProc nutze, klappts mit dem Rückgabewert auch. Nur kommen dann halt die Exceptions.
Miniaturansicht angehängter Grafiken
storedproc_584.png  
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: ZStoredProc - Ergbnismenge

  Alt 31. Aug 2005, 15:45
Zitat von Thanatos81:
Zitat von Jelly:
Solltest du nicht vielleicht
paramByName('VLfdNr').asInteger benutzen.
Copy/Paste, und dann vergessen zu editieren.
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.
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#5

Re: ZStoredProc - Ergbnismenge

  Alt 31. Aug 2005, 15:57
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
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#6

Re: ZStoredProc - Ergbnismenge

  Alt 1. Sep 2005, 11:40
Juhu Habs geschafft. Und zwar funktioniert das ganze auf diese Weise:
Delphi-Quellcode:
  StoredProc.Close;
  StoredProc.ParamByName('VName').Value := 'Sadelfeld';
  StoredProc.ParamByName('VVorname').Value := 'Hermann';
  StoredProc.Open;
  showMessage(IntToStr(StoredProc.Fields[0].asInteger));
Wahrscheinlich ist es keine elegante Lösung, aber eine die im Gegensatz zu den anderen funktioniert...


//Edit: mit FieldByName hats übrigens nicht geklappt. Und Fields[0].Name gibt auch nen leeren String zurück...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:50 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