Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADS SUM (https://www.delphipraxis.net/66706-ads-sum.html)

Luciano 2. Apr 2006 21:56

Datenbank: ADS • Version: 5.04 • Zugriff über: ADS Komponenten (Query)

ADS SUM
 
Hallo,

ich habe da ein kleines Problem mit volgender Abfrage die so aussieht

Delphi-Quellcode:
    with Q_Preis do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(' SELECT SUM(PREIS),                     '+
              '           DATUM                       '+
              '      FROM ESSEN                       '+
              ' WHERE DATUM BETWEEN :Datum1 AND :Datum2 '+
              ' GROUP BY DATUM                         ');
      Prepared := True;
      Params.ParamByName('Datum1').Value := DateOf(MonthCalendar2.Date);
      Params.ParamByName('Datum2').Value := DateOf(MonthCalendar3.Date);
      Active := True;
    end;
Die Query sagt mir das sie das Feld "Preis" nicht finden kann... aber es steht in der Query! Oder hat ADS ein Problem mit SUM()?

Danke für die Hilfe

Greets

mkinzler 2. Apr 2006 21:58

Re: ADS SUM
 
Gibt es das Feld Presi in der Datenbanktabelle?

Luciano 2. Apr 2006 22:01

Re: ADS SUM
 
Ja das gibt es...
SQL-Code:
SELECT * FROM ESSEN
das funktioniert auch alles... nur eben nicht wenn ich das ganze mit SUM(PREIS) versuche... ADS will dann auch GROUP BY haben aber das ist weniger das Problem... ich brauche eben die Summe in der Zeitspanne...

mikhal 3. Apr 2006 05:31

Re: ADS SUM
 
Verpass deiner Abfrage für die Summe von Preis mal einen Alias, auf den du dann zugreifst, etwa so:

Delphi-Quellcode:
with Q_Preis do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(' SELECT SUM(PREIS) SUMME_PREIS,         '+ 
              '           DATUM                       '+ 
              '      FROM ESSEN                       '+ 
              ' WHERE DATUM BETWEEN :Datum1 AND :Datum2 '+ 
              ' GROUP BY DATUM                         ');
      Prepared := True;
      Params.ParamByName('Datum1').Value := DateOf(MonthCalendar2.Date);
      Params.ParamByName('Datum2').Value := DateOf(MonthCalendar3.Date);
      Active := True;
    end;
In obigem Beispiel griefst du dann nicht auf das Feld PREIS sondern auf den Alias SUMME_PREIS zu. Das ist auch kein ADS Problem, sondern gilt für alle Datenbanken: sobald du auf Aggregate zugreifen möchtest, mußt du einen Alias verwenden.

Grüße
Mikhal

mkinzler 3. Apr 2006 05:51

Re: ADS SUM
 
Hast du vielleicht persistente Zugriffsfelder für Q_PREIS angelegt?
@mikahl: Mü?te es nicht SELECT SUM(PREIS) as SUMME_PREIS heißen? Kenne mich in ADS nicht aus, aber in Standard-SQL braucht man das as.

mikhal 3. Apr 2006 06:47

Re: ADS SUM
 
@mkinzler: Da hast du wohl Recht. Ich programmiere hauptsächlich mit Oracle und MS SQL Server, und da brauchst du es nicht. Ich kenne ADS nicht so genau und deshalb weiß ich nicht ob ADS ohne "AS" auskommt.

Grüße
Mikhal

joachimd 3. Apr 2006 08:12

Re: ADS SUM
 
Zitat:

Zitat von Luciano
Delphi-Quellcode:
    with Q_Preis do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(' SELECT SUM(PREIS),                     '+
              '           DATUM                       '+
              '      FROM ESSEN                       '+
              ' WHERE DATUM BETWEEN :Datum1 AND :Datum2 '+
              ' GROUP BY DATUM                         ');
      Prepared := True;
      Params.ParamByName('Datum1').Value := DateOf(MonthCalendar2.Date);
      Params.ParamByName('Datum2').Value := DateOf(MonthCalendar3.Date);
      Active := True;
    end;
Die Query sagt mir das sie das Feld "Preis" nicht finden kann... aber es steht in der Query! Oder hat ADS ein Problem mit SUM()?

Das resultierende Feld heisst EXPR (wäre irgendwie falsch, wenn eine Berechnung denselben Feldnamen wie die Ursprungsfelder automatisch annehmen würde - oder?).
BTW: Das SQL einmal im Architect ausgeführt und Du siehst das Ergebnis (wobei - hast Du schon einen Architect bzw überhaupt SQL? - ADS hat seit Version 5.5 eine SQL Erweiterung, Du hast ja noch 5.04....Fragen über Fragen).

Luciano 3. Apr 2006 18:18

Re: ADS SUM
 
@joachimd

Da hast du vollkommen recht und ich habe wieder alles vergessen was ich mal gelernt hatte.... zu Vollständigkeit... so funzt es...

Delphi-Quellcode:
    with Q_Preis do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(' SELECT SUM(PREIS) AS SUMME_PREIS,      '+
              '           DATUM                       '+
              '      FROM ESSEN                       '+
              ' WHERE DATUM BETWEEN :Datum1 AND :Datum2 '+
              ' GROUP BY DATUM                         ');
      Prepared := True;
      Params.ParamByName('Datum1').Value := DateOf(MonthCalendar2.Date);
      Params.ParamByName('Datum2').Value := DateOf(MonthCalendar3.Date);
      Active := True;
    end;

   DBText1.DataField := 'SUMME_PREIS';
Danke für die Hilfe/Erklärung


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