Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Berechnung eines Feldes - zu welchem Zeitpunkt? (https://www.delphipraxis.net/37769-berechnung-eines-feldes-zu-welchem-zeitpunkt.html)

Matt 10. Jan 2005 02:14


Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Guten Morgen DPler,

mache den ganzen Abend einen Gedankenfehler und wollte Euch jetzt mal nach Eurer Meinung fragen.

Ich habe vier DB-Tabellen:

T1 / T2 / T3 / S1

T1 ist die Master von T2 und T3 ist eine Zusammensetzung von T2 und T1.
Wenn ich in T2 etwas hinzufüge (Zahlen), wird aus Werten von T1 und T2 ein DS in T3 generiert (die Zahl aus T2 und der Vorgang aus T1).

In S1 habe ich ein Feld das die Summe aller Zahlen (- und + Werte) aus T3 zu einem BESTIMMTEN Vorgang anzeigen soll.

Wann oder wie ist es nun sinvoll das Feld in S1 zu berechnen und den Wert zu hinterlegen?

OnCalcFields? <- es sind mächtig VIELE Zahlen (>5000)
AfterPost? <- was ist dann aber beim löschen und aktualisieren von T2 (DS wird auch in T3 gelöscht)?
oder AfterInsert, AfterDelete ????

:wall: Ich komm nicht auf die beste Lösung, um alles zu berücksichtigen (Insert/Delete/Update) und dabei so selten wie möglich das Feld neu zu berechnen (da VIELE Zahlen).

Ist übrigens mySQL, sowas wie Trigger, StoredProc, etc. gibbet nicht!

Ich bin wie immer für jeden Tipp, Ratschlag DANKBAR!

Beste Grüße
Matt

Jelly 10. Jan 2005 08:52

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Ohne jetzt den genauen Ablauf verstehen zu müssen, kann ich prinzipiell sagen, daß es ne sehr riskante Sache ist, irgendwelche berechneten Felder in der Datenbank zu speichern. Da wirst du immer damit zu kämpfen haben, wenn irgendwelche Datensätze gelöscht/hinzugeflickt/geändert werden, damit du immer auf dem richtigen Stand bist. Berechne deine Felder nach Möglichkeit immer bei deinen Abfragen neu aus, dann bist du sicher daß der Wert auch stimmt.

bundy 10. Jan 2005 09:03

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Hallo

Das ist aber nicht immer korrekt.

Wenn du z.B. Rechnungen erstellst, und die Buchungszeile aus deiner Rechnung gesteht aus der MENGE * Artikelpreis. Wenn sich der Artikelpreis ändert dann dürfen sich aber nicht deine bereits erstellten Rechnungen ändern, das heisst der Buchungswert ist in der DB gespeichert. :zwinker:

mfg
Bundy

Jelly 10. Jan 2005 09:17

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Zitat:

Zitat von bundy
Das ist aber nicht immer korrekt.

Wenn du z.B. Rechnungen erstellst, und die Buchungszeile aus deiner Rechnung gesteht aus der MENGE * Artikelpreis. Wenn sich der Artikelpreis ändert dann dürfen sich aber nicht deine bereits erstellten Rechnungen ändern, das heisst der Buchungswert ist in der DB gespeichert. :zwinker:

Natürlich ist der Artikelpreis an jede einzelne Rechnung gebunden. Das sind dann aber immer noch keine berechneten Felder, sondern rohe Daten in deiner Rechnungstabelle. Und den Betrag kannst du immer wieder über SQL berechnen lassen. Es macht keinen Sinn Menge*Artikelpreis zu speichern, wenn du die Informationen schon getrennt hast. Auch den gesamten Rechnungsbetrag wird nirgend gespeichert, denn der setzt sich aus Sum(Menge*Artikelpreis) zusammen, bezogen auf jede einzelne Rechunngsnummer.

bundy 10. Jan 2005 09:23

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Sorry Denkfehler :wall: du hast natürlich recht. Die Summen werden zur Laufzeit berechnet. :oops:

Matt 10. Jan 2005 13:09

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Wenn ich Euch richtig verstehe soll ich das Summen Feld in S1 immer dann automatisch berechnen, wenn ich den Datensatz anzeigen lasse? Also z.B. bei OnChange? Dann dauert der Datensatzwechsel einige Sekunden, bei sovielen Einträgen, die er zusammenrechnen muss, das kann ich ich eigentlich keinem zumuten.

Da Ihr das Beispiel Menge * Artikelpreis genannt habt bleiben wir mal dabei und tun so als würde ich die Artikelbestände berechnen wollen (Summe Wareneingänge - Summe Warenausgänge). Wie wäre es denn in solchem Fall am betsen zu realisieren?

Gruß Matt

Jelly 10. Jan 2005 13:32

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
Ich würds gar nicht über Delphi machen, sondern mir gleich ne entsprechende SQL Abfrage basteln, so daß dir der MySQL Server gleich die gewünschten Ergebnisse liefert.

Matt 11. Jan 2005 13:31

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?
 
OK, danke Jelly, ich werde mal schauen, wie ich das am betsen hinbekomme!

Gruß Matt


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