AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Verwendung einer Stored Procedure

Verwendung einer Stored Procedure

Ein Thema von onkelthom · begonnen am 28. Apr 2010 · letzter Beitrag vom 28. Apr 2010
Antwort Antwort
onkelthom

Registriert seit: 5. Mär 2009
Ort: Schwalmtal
16 Beiträge
 
#1

Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 15:48
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBObjects
Hallo zusammen,

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

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 ...

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

Viele Grüße
Thomas
Thomas
Nicht reden - Machen ! Geht nicht gibt´s nicht...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 15:52
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
onkelthom

Registriert seit: 5. Mär 2009
Ort: Schwalmtal
16 Beiträge
 
#3

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 15:55
das war´s
Für mich bist Du heute der Größte !!

Viele Grüße
Thomas
Thomas
Nicht reden - Machen ! Geht nicht gibt´s nicht...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 15:56
Oder als normalen Select:
select <Felder> from <SP_Name>(<InputParameter>) where <Bedingung>;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 15:59
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 16:58
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
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 17:01
Ich weiß nicht, wie das bei IBO ist, aber wäre statt ParamByName nicht FieldByName für den Rückgabewert angebrachter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 18:12
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Verwendung einer Stored Procedure

  Alt 28. Apr 2010, 18:56
Bei UIB komm ich da auch über die Felder ran, aber was soll' s.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:45 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