Entwickler-Ecke

Datenbanken - Daten aus einer Spalte summieren


diggebaggen - Fr 31.12.04 12:23
Titel: Daten aus einer Spalte summieren
Moinsen...also folgendes Problem:

Ich habe eine Tabelle, in der verschiedene Rechnungspositionen eingetragen sind. Immer mit Datum blablabla.

Jetzt möchte ich gerne die Beträge aus den einzelnen Zeilen, (die Beträge stehen immer in der dritten Zeile 'Betrag') zusammenaddieren und in ein Edit-Feld schreiben ?

Kann mir da vielleicht jemand helfen ? Ich hab leider keine Idee wie ich das machen soll.
Danke schonmal im voraus, Gruß diggebaggen


grayfox - Fr 31.12.04 13:59

hallo diggebaggen!

gut, dass das thema 'summieren von spalten einer tabelle' hier im forum noch nie behandelt wurde, somit kann ich es mal erklären ;)

um dein problem zu lösen gibt es mehrere wege...

verwendung einer table-komponente

1) du iterierst satzweise durch die tabelle und summierst die beträge der einzelnen datensätze, welche zu deiner rechnung gehören


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
betrag:= 0;
table1.First;
while not table1.eof do begin
  if table1.FieldByName('Rechnung_ID').asInteger = aSuchID then 
    Betrag:= Betrag + table1.FieldByName('Betrag').asFloat;
  table1.Next
end;


2) du setzt einen filter und iterierst durch die selektierten datensätze


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
betrag:= 0;
FilterString:= Format('Rechnung_ID = %d',[aSuchID]);
table1.Filter:= FilterString;
table1.filtered:= true;
while not table1.eof do begin
  Betrag:= Betrag + table1.FieldByName('Betrag').asFloat;
  table1.Next
end;
table1.filtered:= false;



verwendung der komponente query


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  with query1 do begin
    clear;
    SQL.ADD('SELECT SUM(Betrag) as Summe FROM tblRechnungen ');
    SQL.ADD('WHERE (Rechnung_ID = aSuchID)');
    open;
    Betrag:= Field[0].asFloat;
  end;


alle quellcodes sind nur ins forum getippt und daher {$UNTESTED} - aber anhand von ihnen sollte die vorgehensweise klar sein.

mfg, stefan


diggebaggen - Fr 31.12.04 14:54

OK, Danke erstmal. Klingt logisch.

Hab den ersten Ansatz genommen. Einziges Problem was ich jetzt habe ist, dass er den Befehl:

aSuchID

nicht kennt. vielleicht bin ich zu blöd, aber kann das sein, dass delohi 3 den nicht kennt ? Oder stand der für irgendwas anderes, was ich da eintragen muss ?


CenBells - Fr 31.12.04 15:52

diggebaggen hat folgendes geschrieben:
OK, Danke erstmal. Klingt logisch.

Hab den ersten Ansatz genommen. Einziges Problem was ich jetzt habe ist, dass er den Befehl:

aSuchID

nicht kennt. vielleicht bin ich zu blöd, aber kann das sein, dass delohi 3 den nicht kennt ? Oder stand der für irgendwas anderes, was ich da eintragen muss ?


Hi,

aSuchID ist hier nur ein beispiel. Es ist der Name einer Variable und wird hier verwendet, um nur die in Frage kommenden Rechnungsdatensätze zu berücksichtigen. Beispielweise hast du 100 rechnungen und willst nur die beträge der positionen auf rechnung mit der nummer 42 berechnen, dann setzt du aSuchID := 42.

Wenn du einfach die gesamte summe der Rechnungsbeträge summieren willst, kannst du die Zeile mit der if-Abfrage auskommentieren und dann klappt es schon.

Gruß
Ken


grayfox - Fr 31.12.04 18:09

Zitat:
dass er den Befehl... nicht kennt.


wo sind denn da befehle? ich seh in den quelltexten keinen einzigen befehl :shock:


diggebaggen - Sa 01.01.05 01:06

Naja, bin halt nicht so der Informatik-Crack, mach eigentlich nur Musik am PC, dass brauch ich für die Schule.

Aber nun gehts, ich bedanke mich vielmals !!! :D

Ach so, könnt ihr mir auch noch schnell sagen, wie ich die real-werte auf zwei Stellen runde wenn ich sie in ein Edit-Feld schreibe ?


grayfox - Sa 01.01.05 15:52

am schnellsten geht es, wenn du die forums-suche benutzt, denn dieses thema wurde bestimmt schon mal behandelt ;)

du wirst auch bestimmt in der online-hilfe von delphi fündig werden. schau mal unter FloatToStr bzw FloatToStrF nach

mfg, stefan