Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Trigger verbessern ? (https://www.delphipraxis.net/43072-trigger-verbessern.html)

Gruber_Hans_12345 28. Mär 2005 18:22

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBConsole

Trigger verbessern ?
 
DA ich mit Triggern noch nicht viel Erfahrung habe, möchte ich wissen, ob man folgenden Trigger noch besser machen kann :
SQL-Code:
SET TERM ^ ;
ALTER TRIGGER LB_INSERT
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE ART_EK_PREIS DOUBLE PRECISION;
BEGIN
  IF (NEW.ARTIKELID > 0) THEN BEGIN
    SELECT EK_PREIS FROM ARTIKEL WHERE ID = NEW.ARTIKELID INTO :ART_EK_PREIS;
    UPDATE ARTIKEL SET NEED_RECALC = 1 WHERE ID = NEW.ARTIKELID;
    NEW.EK_PREIS = :ART_EK_PREIS;
  END
END
^
COMMIT WORK ^
SET TERM ;^
Machen soll er folgendes : Beim Einfügen in die Lagerbuchungszeile soll aus der Artikel Tabelle der aktuelle Preis geholt werden und in die Spalte EK_PREIS gespeichert werden und im Artikel Stamm das Feld NEED_RECALC auf ein setzten.

3_of_8 28. Mär 2005 19:59

Re: Trigger verbessern ?
 
Um ehrlich zu sein, ich habe noch nie etwas von Triggern gehört. Was ist das?

Hansa 28. Mär 2005 20:14

Re: Trigger verbessern ?
 
Zitat:

Zitat von 3_of_8
Um ehrlich zu sein, ich habe noch nie etwas von Triggern gehört. Was ist das?

Neue Frage neuer Thread. :mrgreen:

Und zu der Frage hier : wie sieht das Create Trigger Statement denn aus ?

Auf Anhieb fällt mir folgendes auf : du verwendest Double Precison. Ist das beim EK und Lagerbestand oder überhaupt nötig ? Was ist need_recalc ? Das hängt irgendwie in der Luft rum. Was soll das machen ?

Robert_G 28. Mär 2005 20:25

Re: Trigger verbessern ?
 
Zitat:

Zitat von Hansa
du verwendest Double Precison. Ist das beim EK und Lagerbestand oder überhaupt nötig ?

Bezweifle ich auch. ;)
Zitat:

Zitat von Hansa
Was ist need_recalc ? Das hängt irgendwie in der Luft rum. Was soll das machen ?

Das sollte durch den Namen und die Situation, an der es gesetzt wird eigentlich klar sein. ;)

aabeer: Den ganzen Sinn kapiere ich überhaupt nicht. Warum muss hier ein Trigger laufen? Warum muss hier ein berecheter Wert abgelegt werden?
Artikel kostet X € -> Abfrage auf den Artikel gibt dir X €. Basta!
Wenn du jetzt die X € noch irgendwo rankopierst entfernst du dich gefährlich weit von jeglicher Normalform. ;)

3_of_8 28. Mär 2005 20:30

Re: Trigger verbessern ?
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von 3_of_8
Um ehrlich zu sein, ich habe noch nie etwas von Triggern gehört. Was ist das?

Neue Frage neuer Thread. :mrgreen:

Und zu der Frage hier : wie sieht das Create Trigger Statement denn aus ?

Auf Anhieb fällt mir folgendes auf : du verwendest Double Precison. Ist das beim EK und Lagerbestand oder überhaupt nötig ? Was ist need_recalc ? Das hängt irgendwie in der Luft rum. Was soll das machen ?

In anderen Foren wird das nicht so streng gesehen.

Robert_G 28. Mär 2005 20:36

Re: Trigger verbessern ?
 
Zitat:

Zitat von 3_of_8
In anderen Foren wird das nicht so streng gesehen.

In anderen Foren gates auch drunter und drüber. ;)

Airblader 28. Mär 2005 20:37

Re: Trigger verbessern ?
 
Zitat:

Zitat von Robert_G
Zitat:

Zitat von 3_of_8
In anderen Foren wird das nicht so streng gesehen.

In anderen Foren gates auch drunter und drüber. ;)

In anderen Foren ist nicht hier.
In anderen Foren gibts auch keine Osterhasi :mrgreen:

Hansa 28. Mär 2005 21:04

Re: Trigger verbessern ?
 
Von 7 Antworten (inkl. dieser) sind nur 2 auf das Thema gemünzt. D.h. 5 waren überflüssig. Und diese Quote ist sehr sehr schlecht und muß nicht sein. Andere Foren hin oder her. Warum soll ich denn überhaupt Antworten geben, wenn dauernd einer das eigentliche Thema kaputt redet. :evil:

Gruber_Hans_12345 29. Mär 2005 07:05

Re: Trigger verbessern ?
 
@Hansa:
NEED_RECALC gibt an, das sich die Menge am LAger geändert hat, und das sich der Durchschnitts EK_PREIS geändert hat.

Mein Create Trigger sieht eigentlich ganz gleich aus, habe nur den letzten ALTER TRIGGER reingeschrieben, den ich auch selbst verwendet habe.
SQL-Code:
SET TERM ^ ;

CREATE TRIGGER "LB_INSERT" FOR "LAGER_BUCHUNG"
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE ART_EK_PREIS DOUBLE PRECISION;
BEGIN
  IF (NEW.ARTIKELID > 0) THEN BEGIN
    SELECT EK_PREIS FROM ARTIKEL WHERE ID = NEW.ARTIKELID INTO :ART_EK_PREIS;
    UPDATE ARTIKEL SET NEED_RECALC = 1 WHERE ID = NEW.ARTIKELID;
    NEW.EK_PREIS = :ART_EK_PREIS;
  END
END
 ^

COMMIT WORK ^
SET TERM ;^
@Robert_G:
LagerStand muß (sollte) zumindest DOUBLE PRECISION da müssen relativ große Werte abgelegt werden (in Millionen Stückzahlen) aber auch Werte die mit einer Genauigkeit von 0.00001 (aber nicht beides gemeinsam)
EK_PREIS habe ich aus folgendem Punkt auch noch DP, da ich alle meine Float Felder als DP abgelegt habe, da ich sonst einfach öfters so schöne Werte wie 1.5623246E-129 anstatt von 0 bekomme (mit DP nicht)

aabeer:
Dein aabeer versteh ich nicht ganz, Bei mir ist in EK_PREIS der Druchschnittspreis der letzten Artikel die ins Lager gebucht wurden drinnen. Der ändert sich dann öfters (bei jeder zu und abbuchung vom Lager).


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