Summenberechnung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Traugott
Beiträge: 19
Registriert: Sa 1. Jan 2011, 12:08

Summenberechnung

Beitrag von Traugott »

Hi,
nachfolgender Code habe ich aus meiner Anwendung (BorlandBuilder C++)
und funzt seit Jahren:

Code: Alles auswählen

double summe = 0;
 
Query1->First();
 
while (!Query1->Eof)
 
{summe += Query1->FieldByName("Betrag")->AsFloat;
 
Query1->Next();
 
}
 
Edit1->Text = summe;


für Lazarus habe ich ihn übersetzt wie folgt:

Code: Alles auswählen

var
summe : double;
begin
summe := o;
Query1.First;
While (!Query1.EOF)
summe +:= Query1.FieldByName('Betrag').AsFloat;
Query1.Next;
Edit1.Text := summe;
end;
in der Zeile (summe +:= Query1.FieldByName('Betrag').AsFloat;) meckert mit der Compiler bei dem Wort summe.
eine Spitzklammer ({ ) kann ich nicht setzen, das ist bei Lazarus ausgeklammert.

Was ist falsch ?????
Zuletzt geändert von Lori am Fr 7. Jan 2011, 21:48, insgesamt 1-mal geändert.
Grund: Highlighter

mr.mc.mauser
Beiträge: 33
Registriert: Di 8. Jun 2010, 19:38

Re: Summenberechnung

Beitrag von mr.mc.mauser »

Hallo,

ich weis zwar nicht ob deine Datenbank MYSQL ist, aber bei Mysql mache ich das so:

Code: Alles auswählen

Query = 'SELECT sum(Betrag) FROM Tabeller'
Da brauchst dann keine Extra Funktion, das Liefert dir einfach das ergebnis !

Gruß
Robert

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Summenberechnung

Beitrag von theo »

+:= gibt's nicht in Pascal.
Ursprünglich gibt's sowas gar nicht in Pascal, mit FPC geht aber (seit wann?) durchaus:
+=

Der ursp. Pascal Weg ist aber eig.:

summe:= summe + Query1.FieldByName('Betrag').AsFloat;

am2
Lazarusforum e. V.
Beiträge: 116
Registriert: Di 21. Dez 2010, 09:59
OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
CPU-Target: 32 Bit

Re: Summenberechnung

Beitrag von am2 »

theo hat geschrieben:mit FPC geht aber (seit wann?) durchaus:
+=
Ehrlich? Das ist ja drollig, muss ich mal ausprobieren.

Aber zur Frage: Wenn Du die Daten sowieso holen (oder beim Addieren seltsame Randbedingungen beachten) mußt, dann kannst Du sie sicher auch mit Deiner Schleife durchzählen lassen.
Anderenfalls ist es wahrscheinlich in der Tat sinnvoller, das zusammenzählen in der Datenbank machen zu lassen und lediglich die Summe zu übertragen. In der Regel sind die Datenbanken schneller UND es werden definitiv weniger Daten übertragen, was idR wichtig ist.

Liefert eine Zeile mit einer Zahl

Code: Alles auswählen

SELECT SUM(DIAET) FROM TABLE_ABGEORDNETE WHERE PARTEI='XDB'


Liefert soviele Zeilen, wie Abgeordnete

Code: Alles auswählen

SELECT DIAET FROM TABLE_ABGEORDNETE WHERE PARTEI='XDB'


Letztere Variante ist eigentlich nur sinnvoll, wenn Du, wie gesagt, sowieso alle Gehälter anzeigst und nur noch eine Summe drunterschreiben willst oder wenn die Bedingungen sich nur umständlich in SQL ausdrücken lassen, also wenn Du zum Beispiel alle Abgeordneten suchst, in deren Namen ein Doppelkonsonant vorkommt (Müller, Lehmann, Klapperstorch)

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Summenberechnung

Beitrag von theo »

am2 hat geschrieben: Ehrlich? Das ist ja drollig, muss ich mal ausprobieren.
Ich glaub schon ehrlich:
http://www.freepascal.org/docs-html/ref ... 300010.1.1" onclick="window.open(this.href);return false;

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Summenberechnung

Beitrag von MAC »

am2 hat geschrieben: Ehrlich? Das ist ja drollig, muss ich mal ausprobieren.
Das war auch das erste was dazu gedacht habe :mrgreen:

Code: Alles auswählen

Signatur := nil;

Antworten