Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Benutzung von Sum() in SQL (https://www.delphipraxis.net/45934-benutzung-von-sum-sql.html)

Smiley 14. Mai 2005 22:16

Datenbank: Access • Zugriff über: ADO

Benutzung von Sum() in SQL
 
Nachdem ich nun alle Beiträge zur Summenbildung in SQL hier durchgelesen habe und die SQL Syntax eigentlich auch richtig sein müsste, wende ich mich nun doch mal an Euch, da ich nicht mehr weiter weiß.

Ich habe eine Datenbank Belege mit den Feldern Nr,Datum,Betrag(Float) und möchte gerne wissen wie hoch die Summe aller Beträge in
meiner Datenbank ist.

Dazu habe ich folgendes programmiert:

Delphi-Quellcode:
    FBelege.ADOQBelege.active:=False;
    FBelege.ADOQBelege.SQL.Add('Select Sum(Betrag) As Summe From Belege');
    FBelege.ADOQBelege.active:=true;
    Gesamt:=FBelege.ADOQBelege.FieldByName('Summe').ASFloat;
    FBelege.ADOQBelege.active:=False;
sobald ich active auf True setze kommt die Fehlermeldung:

ADOQBelege: Das Feld Nr wurde nicht gefunden

Was mache ich falsch ?

Hansa 15. Mai 2005 00:29

Re: SQL Summe berechnen
 
Ist ja auch kein Wunder. Die Fehlermeldung besagt, daß das Feld Nr. nicht vorhanden ist ? Tja, so sieht es aus. Was erwartestt Du denn ? 8)

Christian Seehase 15. Mai 2005 01:00

Re: SQL Summe berechnen
 
Moin Hansa,

Zitat:

Zitat von Hansa
Die Fehlermeldung besagt, daß das Feld Nr. nicht vorhanden ist ? Tja, so sieht es aus. Was erwartestt Du denn ?

Vielleicht die Anwort darauf, warum sich die Fehlermeldung auf ein Feld bezieht, das überhaupt nicht angesprochen wird? :roll:

Union 15. Mai 2005 01:29

Re: SQL Summe berechnen
 
Zitat:

Zitat von Christian Seehase
Moin Hansa,

Zitat:

Zitat von Hansa
Die Fehlermeldung besagt, daß das Feld Nr. nicht vorhanden ist ? Tja, so sieht es aus. Was erwartestt Du denn ?

Vielleicht die Anwort darauf, warum sich die Fehlermeldung auf ein Feld bezieht, das überhaupt nicht angesprochen wird? :roll:

Ich schätze Du hast in der Query noch ein Überbleibsel von altem SQL zu stehen. Wie wär's damit:

Delphi-Quellcode:
with FBelege.ADOQBelege do
begin
   Active := False;
   SQL.Clear;      // <------
   SQL.Add('Select Sum(Betrag) As Summe From Belege');
   Active := True;
   Gesamt := FieldByName('Summe').AsFloat;
   Active := False;
end;

Sharky 15. Mai 2005 04:49

Re: SQL Summe berechnen
 
Zitat:

Zitat von Union
... Ich schätze Du hast in der Query noch ein Überbleibsel von altem SQL zu stehen. ....

Oder Du hast im Feldeditor (rechter Mausklick auf die Querykomponente - Feld-Editor) etwas eingetragen.
Wenn dort Felder angegeben wurden erwartet die Query-Komponente das diese auch bei jedem .Open vorhanden sind.

P.S.: Es wäre gut wenn Du den Titel der Frage ändern würdest. Der Fehler hat ja nichts mit dem SUM() zu tun.

Smiley 15. Mai 2005 11:45

Re: SQL Summe berechnen
 
@Union das mit dem SQL.clear hab ich natürlich vorher schon gemacht, habs nur nicht mit in das Listing reingenommen.

Sharky hat warscheinlich recht ich habe in meinem Grid den Feldeditor benutzt, habe die Felder dort zum testen aber schon mal rausgenommen, da ich das auch schon vermutet hatte. Möglicherweise habe ich aber in einem anderen Feld auch den Feldeditor benutzt und habe das übersehen. Danke für den Tip, werde gleich mal nachsehen.

Den Feldeditor habe ich benutzt um die Einstellungen der einzelnen Spalten im Grid anzupassen. Geht das auch ohne den Feldeditor ?

Wie kann ich den Titel ändern ?
Habe noch nie einen Artikel verändert und finde hier keinen Button dafür.
Oder Wo kann ich das nachlesen ?

Danke für Eure Mühe.

Sharky 15. Mai 2005 11:49

Re: SQL Summe berechnen
 
Zitat:

Zitat von Smiley
... Wie kann ich den Titel ändern ? ....

Hai,

einfach in deinem ersten Posting in diesem Thread auf Edit klicken (rechts in der Titelleiste).

Hansa 15. Mai 2005 11:54

Re: SQL Summe berechnen
 
Also gut, Du brauchst irgendwo noch die NR. Diese wird aber nicht so ohne weiteres geliefert. 8)

Delphi-Quellcode:
SQL.Add('Select NR,Sum(Betrag) As Summe From Belege');

Sharky 15. Mai 2005 12:05

Re: SQL Summe berechnen
 
Zitat:

Zitat von Smiley
... Den Feldeditor habe ich benutzt um die Einstellungen der einzelnen Spalten im Grid anzupassen. Geht das auch ohne den Feldeditor ?....

Was genau passst Du denn an?

Es gibt zwei Möglichkeiten. Entweder Du arbeitest für deine Summenberechnung mit einem zur Laufzeit erzeugten Query:
Delphi-Quellcode:
function GetSumFromTable (aConnection : TADOConnection;aFieldName , aTableName : String) : Real;
begin
  with TADOQuery.Create(nil) do
  begin
    Connection := aConnection;
    SQL.Text := 'SELECT SUM(' + aFieldName + ') AS summe FROM ' + aTableName;
    Open;
    Result := FieldByName('Summe').AsFloat;
    Close;
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Gesamt : Real;
begin
  Gesamt := GetSumFromTable(ADOConnection1,'betragt','belege');
end;
Oder Du arbeites nur mit einem Query. Dann musst Du zur Laufzeit die Formatierungseinstellunge von Hand vornehmen.
Schaue Dir mal dieses Posting an ;-)

Smiley 15. Mai 2005 12:09

Re: SQL Summe berechnen
 
Delphi-Quellcode:
SQL.Add('Select NR,Sum(Betrag) As Summe From Belege');
Diese Idee hatte ich auch schon Hansa, wollte sogar schon alle Felder angeben, leider kommt bei diesem SQL-Befehl die folgende Meldung:

Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Nr' nicht als Teil der Agregatfunktion einschließt.

Mit diese Meldung kann ich noch viel weniger anfangen.
Das Feld Nr ist übrigens mein Primärindex, falls das von Bedeutung ist.

Weitere Komponenten mit Feldeditor außer dem Grid habe ich nicht gefunden.
Habe sonst nur Editfelder einen Navigator und eine BrowserComponente im Formular.
Die Felder im Feldeditor habe ich rausgelöscht, es kommt aber immer noch die Frage nach dem Feld Nr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.
Seite 1 von 2  1 2      

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