AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird Procedure liefert null
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Procedure liefert null

Ein Thema von Delix · begonnen am 3. Mai 2017 · letzter Beitrag vom 4. Mai 2017
Antwort Antwort
Seite 2 von 3     12 3      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#11

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 13:43
Wenn ich im Select die Datenmenge weiter beschränke, wird ein Wert zurückgegeben, so wie der Select jetzt steht ergibt er null. Im Protokoll ist in allen Fällen alles richtig und vollständig.
Kannst du die Beschränkung dann nicht einmal invertieren und sehen, ob dann auch null rauskommt, um so dem Übeltäter auf die Spur zu kommen?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 14:43
Also die Null-Werte können wir vergessen da   AND ar.Aktiv='J' das [CODE=] AND ar.Aktiv is not null [/CODE] impliziert, warum dann ein LEFT JOIN ist mir auch nicht klar.

das SUSPEND hat mich stutzig gemacht. Wenn ich das Handbuch richtig verstanden habe, wäre hier ein EXIT angebrachter.

was bedeutet
Zitat:
Wenn ich im Select die Datenmenge weiter beschränke
im allg. beschränkst Du nicht die Menge sondern den Inhalt??

und was steht in Deinem Protokoll?
könnte es sein, das NULL-Sätze in der Anzeige unter den Tisch fallen?

gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.379 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 14:57

das SUSPEND hat mich stutzig gemacht. Wenn ich das Handbuch richtig verstanden habe, wäre hier ein EXIT angebrachter.
und wie kommt dann das Ergebnis zum Client wenn nicht mit suspend?
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#14

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 15:59
das SUSPEND hat mich stutzig gemacht. Wenn ich das Handbuch richtig verstanden habe, wäre hier ein EXIT angebrachter.
Nein, Suspend ist korrekt, denn damit werden die Ergebnisse an den Client gesendet, wenn er es denn nach dem SELECT wirklich abruft.
Björn Reimer
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 16:42
Ich hab meine Weisheit von hier.
Zitat:
If the procedure is called from a EXECUTE PROCEDURE statement, then SUSPEND has the same effect as EXIT. This usage is legal, but not recommended.
Dann ist da wohl in der Zwischenzeit die Toleranz größer geworden?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#16

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 17:08
Ich hab meine Weisheit von hier.
Zitat:
If the procedure is called from a EXECUTE PROCEDURE statement, then SUSPEND has the same effect as EXIT. This usage is legal, but not recommended.
Dann ist da wohl in der Zwischenzeit die Toleranz größer geworden?
Deshalb wäre es wichtig zu wissen, wie der Aufruf der Proc erfolgt.

Wenn die mit SELECT * FROM PROC aufgerufen wird, ist SUSPEND nötig. Und da die Proc einen Rückgabewert hat, lässt ein aktueller Firebird keine Proc ohne Suspend mehr zu.
Björn Reimer
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.273 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 17:58
Hallo,

1.
INSERT INTO DBPROC(PROCNAME, ZEIT, WERT) VALUES ('P_GETLAGERWERT','NOW',
:LGNR||';'||:ARTNR||';'||:BESTAND||';'||:BEST_OHNE _RECHNUNG||';'||:LE_EK||';'||:ART_WERT||';'||:LGWE RT);

Kannst du das Ändern erweitern mit

if LGWERT is NULL

INSERT INTO DBPROC(PROCNAME, ZEIT, WERT) VALUES ('P_GETLAGERWERT','NOW',
:LGNR||';'||:ARTNR||';'||:BESTAND||';'||:BEST_OHNE _RECHNUNG||';'||:LE_EK||';'||:ART_WERT||';'||"NULL ")
else
das Original


Und du hast definitiv in DBProc als letzten Wert einen gültigen Wert drin?

2,
Was mich noch stutzig macht sind Deine verschiedenen Numeric(x,y)-Variablen,
probier mal komplett Double Precision.
Ab einem bestimmten Numeric(x,y) arbeitet Firebird automatisch mit Integer weiter ...

3.
es wird NULL oder 0 zurückgegeben?
Woher weisst du das?
Hast du die Query (Select * From Proc(xxx)) mal in IBExpert laufen lassen?
Heiko

Geändert von hoika ( 3. Mai 2017 um 20:01 Uhr)
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 18:09
Kurz mal durchgetestet.

LE_EK kleiner gleich 0 ist dann wird LE_EK NULL über ART_EKNETTO.

Alles andere kann ich so nicht sagen.

Reproduktion war einfach die Prozedur und alles NULL gesetzt. Erst wenn ich ART_EKNETTO auf 0 setzt wird das Ergebnis NOT NULL.

Ist nicht zwingend überraschend.



Schönen Gruß

Geändert von MichaelT ( 3. Mai 2017 um 18:12 Uhr)
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 18:46
Eine Leerzeile vermutlich.

  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.273 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Firebird Procedure liefert null

  Alt 3. Mai 2017, 20:04
Hallo,
Leerzeile?

aber mal weiter

Zitat:
Die Procedure läuft intern absolut korrekt ab. Das habe ich aus der Procedure heraus protokolliert. Die Rückgabe-Variable ist bis zum Schluss absolut korrekt berechnet! Da fallen joins's oder Nullwerte wohl aus.
Mach mal vorm Suspend ein LGWERT=21.0;
Und dahinter noch einen Protokolleintrag.

Kommt jetzt immer noch NULL raus als Ergebnis und steht die 21.0 im Log?
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

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 08:00 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