Entwickler-Ecke
Datenbanken - Rechnen mit Datenbankfeldern
Arne Danikowski - Fr 16.01.09 17:40
Titel: Rechnen mit Datenbankfeldern
Hallo,
ich habe hier so ein kleines Programm bei dem Abrechnungen zu einem bestimmten Datum eingegeben werden.
Nun soll über ein Button alle Summen eines Tabellenfeldes zusammengezählt werden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| procedure TVMain.BitBtnSummeClick(Sender: TObject); trech1,trech2:single; Var tagesdatum:String; begin Tagesdatum := DateToStr(now); DM.ADOAbrechnung.SQL.Clear; DM.ADOAbrechnung.SQL.Text := 'Select * from Abrechnung WHERE (datum like ' + QuotedStr(tagesdatum) + ')'; DM.ADOabrechnung.Open; DM.ADOTSK.Edit; DM.ADOTSK.Insert; DM.ADOTSK.FieldByName('Datum').AsDateTime :=StrToDate(tagesdatum); try DM.ADOabrechnung.First; begin while not DM.ADOAbrechnung.EOF do
begin trech1 := StrToFloat(DM.ADOAbrechnung.FieldByName('Summe').AsString); trech2 := (trech1 + trech2); DM.ADOTSK.Edit; DM.ADOTSK.FieldByName('Summe').AsString := FloatToStrF(trech2, ffnumber, 7, 2); DM.ADOTSK.Post; DM.ADOAbrechnung.Next; end;
end; finally DM.ADOTSK.Open; end; end; |
Nun passiert folgendes: Der Datensatz wird angelegt, das Datum eingetragen aber es wird kein Wert in das Feld Summe geschrieben.
Ich erhalte auch keine Fehlermeldung.
Was mach ich falsch?
Delete - Fr 16.01.09 18:50
Wieso willst Du ein berechnetes Feld in die DB schreiben? Und wieso tust Du das innerhalb der Schleife immer wieder? Und wenn das Schreiben unbedingt nötig ist, wäre das auf DB-Ebene (Stored Procedure) nicht sinnvoller?
Arne Danikowski - Fr 16.01.09 19:35
Das ist ja die Frage.
ich will ja kein berechnendes Feld in die DB schreiben, sondern ein Ergebnis.
Dieses Ergebnis setzt sich auch mehreren Datensätzen einer anderen Tabelle zusammen.
Also noch mal:
Ich erstelle Datensätze an einem bestimmten Datum. Können mehrerer sein. Die Anzahl ist verschieden.
Diese Datensätze haben ein Feld mit einer Summe X
Wenn diese Datensätze fertig eingegeben würden, möchte ich über einen Button einen sogenannten Abschluss machen.
Das Feld Summe aus X Datensätze an Tag X ergeben Summe y
Diese Summe Y möchte ich ein eine andere Tabelle schreiben. Diese Tabelle hat 2 Felder
1. Datum
2. Summe Y
Somit weiß ich, welche Gesamtsumme am Tag X eingegeben worden ist.
Delete - Fr 16.01.09 19:44
Naja, dann würde ich das aber zumindest per SQL machen und nicht per Client-Anwendung.
SQL-Anweisung
1: 2: 3: 4: 5: 6:
| INSERT INTO Summentabelle(Datum, Summe) SELECT aDatum, aSumme FROM( SELECT Datum AS aDatum, SUM(Summe) AS aSumme FROM Abrechnung WHERE (aDatum like tagesdatum) GROUP BY aDatum) x |
Sollte das nicht gehen, müsste man das eben in 2 Schritten machen: erst die Summe ermitteln, dann eintragen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!