Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit stored Procedure und group by (https://www.delphipraxis.net/52378-problem-mit-stored-procedure-und-group.html)

alex517 30. Aug 2005 21:41

Re: Problem mit stored Procedure und group by
 
Hi Hansa,

Zitat:

SQL-Code:
HAVING (SUM (UMSATZ) <> NULL)
Mit "0" geht das zwar, aber ich habe gesehen, daß da doch ziemlich viele NULL Werte drin sind. Wie grenze ich denn die jetzt noch aus ?
Wie lautet das ganze SQL-Statement? "UMSATZ" ist bisher noch nicht aufgetaucht.
Sollte es aber um die GESMENGE gehen, so kann diese NULL nicht enthalten, wenn man in der SP vor SUSPEND
SQL-Code:
    IF (GESMENGE is NULL) THEN GESMENGE = 0;
einfügt. Das kann man auch immer einfach auf ..WHERE GESMENGE>0 prüfen.

Zitat:

Aber wie greife ich denn jetzt mit Delphi darauf zu ?
wo ist den das Problem?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
{ FIBDataSet1.SQLs.SelectSQL:
    select A.NR, A.BEZ, T.GESMENGE
    from art A
    left join TESTSP_GES(:VonMonat,:BisMonat, A.ID) T on (1=1)
    @@Filter@
}
begin
  FIBDataSet1.Close;
  FIBDataSet1.ParamByName('VonMonat').AsInteger := StrToIntDef(EVon.Text, 0);
  FIBDataSet1.ParamByName('BisMonat').AsInteger := StrToIntDef(EBis.Text, 999999);
  if CBOhne0Mengen.Checked then
    FIBDataSet1.ParamByName('Filter').AsString := 'where GESMENGE>0'
  else
    FIBDataSet1.ParamByName('Filter').AsString := '';
  FIBDataSet1.open;
end;
alex

Hansa 31. Aug 2005 01:44

Re: Problem mit stored Procedure und group by
 
Vor dem Suspend das NULL auswerten ? Oh je, da hätte ich auch selber draufkommen können. 8) Nun gut, das geht natürlich jetzt auch. Aber wo zum Teufel kommen die ganzen Klammeraffen da her ? :shock: Bzw., was machen die ? Die Checkboxen kommen natürlich auch noch ins Spiel und nicht nur eine ! Aber es wird sowieso immer komplizierter. Konkret geht es um 5 SUM-Felder, eines ist das SUM (UMSATZ) und da wirds jetzt richtig kompliziert. Wie baue ich jetzt da noch eventuell eine Mwst.-SP ein, die den Brutto Umsatz errechnet ? Nur so als Vorschau. 8)

alex517 31. Aug 2005 07:31

Re: Problem mit stored Procedure und group by
 
Zitat:

Zitat von Hansa
Aber wo zum Teufel kommen die ganzen Klammeraffen da her? :shock: Bzw., was machen die ?

Sieh doch mal in der Hilfe zu FIBPlus unter Macros nach.
Damit kann man in einem FIBDataSet z.B. bequem WHERE, ORDER oder sonstige Klauseln setzen, ändern und auch wieder löschen.
Zitat:

Zitat von Hansa
Wie baue ich jetzt da noch eventuell eine Mwst.-SP ein, die den Brutto Umsatz errechnet ? Nur so als Vorschau. 8)

Etwa die SP von Letztens, mit den MwSt-Kennzeichen? :pale: Holen mich jetzt etwa meine unbedachten Äußerungen wieder ein? :wink:
alex

Hansa 31. Aug 2005 21:24

Re: Problem mit stored Procedure und group by
 
Ja, ich habe tatsächlich einige Wechselstaben verbuchtelt, oder wie das heißt. :mrgreen: Zu den Klammeraffen : da ist eine sagenhafte fast nichtssagende Seite über Macro zu finden. Wieso sind da 2 @ und hinten noch einer ? Laut dieser Seite müßte es doch reichen nur @Filter zu schreiben ? Und dann das % usw. wozu ist das gut ? Das ganze paßt irgendwie nicht so richtig in die Firebird-Syntax. Werde wohl mal den SQL-Monitor anschmeißen.

alex517 31. Aug 2005 21:54

Re: Problem mit stored Procedure und group by
 
Die Macros sind eine reine FIBPlus-Funktionalität, hat also nichts mit Firebird zu tun.
Ich gebe zu es steht nicht viel in der FibPlus53.pdf und außerdem haben ich es mir auch erklären lassen.

Das Macro fängt mit (@@) an und endet mit (@).
Hinter dem (%) kann man den Default-Wert eintragen.
Dieser kommt zu Geltung wenn das Marco nicht über ParamByName gesetzt wird.
(#) setzt man wenn der Ausdruck eigentlich in ('..') stehen muß zB. bei Strings oder Datumswerten.

where DatumVon>=@@Datum%#01.01.1980@

FibPlus macht daraus:

a) wenn Marco nicht gesetzt wird:
where DatumVon>='01.01.1980'

b) wenn Marco gesetzt wird mit FibDataSet.ParamByName('DatumVon').AsDateTime = StrToDate('25.05.2005')
where DatumVon>='25.05.2005'

Ich setze Macros aber bisher nur in der einfachen Form ein.

alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz