AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi idee für trigger gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

idee für trigger gesucht

Ein Thema von Nightfly · begonnen am 22. Apr 2004 · letzter Beitrag vom 22. Apr 2004
Antwort Antwort
Nightfly

Registriert seit: 25. Mär 2004
Ort: Dresden
118 Beiträge
 
#1

idee für trigger gesucht

  Alt 22. Apr 2004, 13:20
Es geht um Firebird 1.5, und folgende Tabelle

[sql]CREATE TABLE PLANUNG (
BEREICH INTEGER NOT NULL,
JAN NUMERIC(9,2),
FEB NUMERIC(9,2));

wenn jetzt ein wert geändert wird, soll wiefolgt aufaddiert werden:
Für jeden Bereich lässt sich mit hilfe einer zweiten tabelle eine Zielzeile nachschlagen, und alle Zeilen sollen dann in diese Zielzeile aufaddiert werden.

Beispiel:

Bereich|jan|feb
100 |10 |10
101 |5 |5
102 |5 |5

101 und 102 haben also die zielspalte 100

wenn jetzt der wert in zeile 102 für februar auf 10 geändert wird, soll der wert für februar in zeile 100 demzufolge auf 15 geändert werden (alle zeilen die als zielzeile die 100 haben aufaddiert)

Bin nicht so sicher in SQL Language und finde keinen richtigen ansatz
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: idee für trigger gesucht

  Alt 22. Apr 2004, 14:22
Das wäre nicht sehr gut

Nach 2 mal speichern wäre es dann 25, obwohl das in keinem Zusamhang mit den Daten stehen würde
Berechnete Felder werden niemals (gar nicht, nüscht, nada, niente,...) in der DB gespeichert, sondern immer nur beim Abfragen errechnet!
Willst du also wissen wieviele XYZ zur der ID vorhanden sind, brauchst du eine Abfrage, die das ganze aufsummiert.
  Mit Zitat antworten Zitat
Nightfly

Registriert seit: 25. Mär 2004
Ort: Dresden
118 Beiträge
 
#3

Re: idee für trigger gesucht

  Alt 22. Apr 2004, 14:29
Hmmm..eigentlich hast du ja recht....aber ich hätt'S trotzdem gern so
Ich könnte ja die Summenzeile jedesmal löschen und als neu berechneten Datensatz einfügen,dann wär das mit der 25 geklärt.

Der trigger soll auch nich after insert laufen,sondern after update,denn wenn ein datensatz eingefügt wird sind jan..dez IMMER 0

Ne generelle Frage: wie kann ich mit einem Trigger,wenn sich eine Zeile ändert,eine andere in der gleichen Tabelle manipulieren...
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: idee für trigger gesucht

  Alt 22. Apr 2004, 16:33
Hi,

Zitat von Nightfly:
Hmmm..eigentlich hast du ja recht....aber ich hätt'S trotzdem gern so
schön für Dich: Dennoch lege ich noch einen drauf: Sobald mehrere leute auf die Datenbank zugreifen und zufällig gleichzeitig einen Datensatz für die 100er Reihe einfügen oder bearbeiten wird nur einer gespeichert werden - alle anderen werden einen Deadlock-Fehler auf dem Bildschirm sehen, weil alle auf einen bestimmten Datensatz zugreifen und ändern wollen! Man kann das zwar über eine Hilfstabelle regeln, d.h. wenn der eigentlich zu ändernder Datensatz gesperrt ist, dann wird in die Hilfstabelle ein temporärer Eintrag gemacht, bringt aber wieder nen erhöhten Aufwand bei der Abfrage mit sich. Da muss dann nämlich nachgeschaut werden, ob in dieser Hilfstabelle Einträge drin stehen.

Es macht also schlicht keinen Sinn (wie schon gesagt wurde) berechnete WErte in einer Datenbank zu speichern.

Zudem fällt mir gerade ein: Ich denke Dein Wunsch alles in einer Tabelle zu regeln wird nicht gehen, wenn Du auch nen Update-Trigger dafür verwenden willst. Denn sobald Du den Wert für 100 per Update ändern willst, wird der feuern und einen Wert ändern wollen, was dazu führt, dass der Update-Trigger wieder feuert...., d.h. Du wirst innerhalb kürzester Zeit Deinen Server lahmlegen.... Wäre aber mal interessant zu testen, was dann passiert....

Grüße
Lemmy

P.S.: Noch was: Wenn Du den Datensazt jedesmal löschen willst kannst Du doch gleich hergehen und die Abfrage, die Du für die Aktualisierung der Spalte benötigst auch gleich zur Abfrage verwenden. Vorteil: Der Wert wird nur noch dann berechnet, sobald er benötigt wird und Du brauchst nicht unbedingt eine Konstruktion die (zumindest aus meiner Sicht) keinen Sinn ergibt! Von der Tatsache mal abgesehen, dass bei umfangreichen Arbeiten deine Datenbankdatei sehr schnell sehr groß werden wird (dauerndes delete und insert)

Grüße
Lemmy
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:23 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