AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Berechnung eines Feldes - zu welchem Zeitpunkt?

Berechnung eines Feldes - zu welchem Zeitpunkt?

Ein Thema von Matt · begonnen am 10. Jan 2005 · letzter Beitrag vom 11. Jan 2005
Antwort Antwort
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#1

Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 03:14
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 ????

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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 09:52
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.
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 10:03
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.

mfg
Bundy
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 10:17
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.
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.
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 10:23
Sorry Denkfehler du hast natürlich recht. Die Summen werden zur Laufzeit berechnet.
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#6

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 14:09
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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 10. Jan 2005, 14:32
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.
  Mit Zitat antworten Zitat
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#8

Re: Berechnung eines Feldes - zu welchem Zeitpunkt?

  Alt 11. Jan 2005, 14:31
OK, danke Jelly, ich werde mal schauen, wie ich das am betsen hinbekomme!

Gruß Matt
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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