Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verwendung einer Stored Procedure (https://www.delphipraxis.net/150836-verwendung-einer-stored-procedure.html)

onkelthom 28. Apr 2010 15:48

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBObjects

Verwendung einer Stored Procedure
 
Hallo zusammen,

ich kann kaum glauben dazu nix finden zu können, aber ich werd nicht fündig :wall:

Ich verwende TIBOStoredProc mit Zugriff auf Firebird 2.1
Die dort angesprochene Prozedur liefert im Test den gewünschten Wert zurück.
Daher muss mein Fehler irgendwo im Delphi Code liegen.

Code:
IBOStoredProc1.ParamByName('pANZAHL').asInteger;                            //Parameter den die Prodezur zum ausführen braucht
iRESULT := IBOStoredProc1.ParamByName('pRESULT').asInteger;                 //Paremeter den die Prozedur als Result zurück liefert.
IBOStoredProc1.Prepare;
IBOStoredProc1.ExecProc;
IBOStoredProc1.Close;
DM.DataModule1.IBOTransaction1.CommitRetaining;
Die Variable iRESULT bleibt immer leer ... :gruebel:

Liegt es vielleicht an der Reihenfolge der Zeilen ?
Hab´s ettliche Male gedreht, ich komm nicht drauf.

Viele Grüße
Thomas

DeddyH 28. Apr 2010 15:52

Re: Verwendung einer Stored Procedure
 
Mit IBO kenne ich mich nicht aus, aber ich kenne das so (die Syntax kann natürlich variieren):
Delphi-Quellcode:
SP.ParamByName('Param').Value := 42;
SP.Open; //nicht Exec
Variable := SP.FieldByName('Rueckgabe').Value;

onkelthom 28. Apr 2010 15:55

Re: Verwendung einer Stored Procedure
 
das war´s :bounce1: :bounce1:
Für mich bist Du heute der Größte !! :hello: :hello: :hello:

Viele Grüße
Thomas

mkinzler 28. Apr 2010 15:56

Re: Verwendung einer Stored Procedure
 
Oder als normalen Select:
SQL-Code:
select <Felder> from <SP_Name>(<InputParameter>) where <Bedingung>;

p80286 28. Apr 2010 15:59

Re: Verwendung einer Stored Procedure
 
Ich weiß auch nichts genaues (Firebird) aber bei mir sähe das so aus:

Delphi-Quellcode:
  Query.sqltext:='select Myproc from dual';
  Query.Open;
  if not Query.EOF then........
Ohne "select" kein Rückgabewert.

Gruß
K-H

borwin 28. Apr 2010 16:58

Re: Verwendung einer Stored Procedure
 
Es gibt zwei Typen von SP

Der eine Typ von SP gibt eine Ergebnissmenge zurück. Dann ist in der SP zwingend ein SUSPEND pro Datensatz notwendig.
Dann geht das was mkinzler vorgeschlagen hat
SQL-Code:
select <Felder> from <SP_Name>(<InputParameter>) where <Bedingung>;
und den Aufruf in Delphi dazu
Delphi-Quellcode:
Query.Open;
  while not Query.EOF do ........
Ist in der SP kein SUSPEND oder man bekommt genau einen Datensatz, dann muss ich einen anderen Weg in Delphi wählen.
onkelthom war schon auf dem richtigen Weg. Der Resultwert kann erst nach der Ausführung mit ExecProc abgerufen werden.
Vorher gibt es noch keinen Wert.
So sollte es funktionieren

Delphi-Quellcode:
IBOStoredProc1.ParamByName('pANZAHL').asInteger;                            //Parameter den die Prodezur zum ausführen braucht
IBOStoredProc1.Prepare;
IBOStoredProc1.ExecProc;
// Nach dem Exec
iRESULT := IBOStoredProc1.ParamByName('pRESULT').asInteger;                 // Der Rückgabewert Paremeter den die Prozedur als Result zurück liefert.
DM.DataModule1.IBOTransaction1.CommitRetaining;
Gruß Borwin

DeddyH 28. Apr 2010 17:01

Re: Verwendung einer Stored Procedure
 
Ich weiß nicht, wie das bei IBO ist, aber wäre statt ParamByName nicht FieldByName für den Rückgabewert angebrachter?

mkinzler 28. Apr 2010 18:12

Re: Verwendung einer Stored Procedure
 
Zitat:

Zitat von DeddyH
Ich weiß nicht, wie das bei IBO ist, aber wäre statt ParamByName nicht FieldByName für den Rückgabewert angebrachter?

Nur beim Select, sonst steckt die Rückgabe auch in Parametern

DeddyH 28. Apr 2010 18:56

Re: Verwendung einer Stored Procedure
 
Bei UIB komm ich da auch über die Felder ran, aber was soll' s.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 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