Seite 1 von 2

Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mo 26. Jan 2015, 18:45
von Freischreiber
Hallo,

in einer Auftragstabelle würde ich gerne ein automatisches Datumsfeld einrichten, das das aktuelle Tagesdatum erhält, wenn sich nur ein bestimmtes Feld eines schon bestehenden Datensatzes ändert.

Der Datensatz existiert also bereits, mit

Code: Alles auswählen

ALTER table ... alter column "Anlegedatum" set DEFAULT CURRENT_DATE
wird auch das Anlegedatum des Auftrags automatisch ausgefüllt bei Erstellung der Zeile, aber wie kann ich das mit dem Beendigungsdatum in der schon existierenden Auftragszeile schaffen?

Gruß
Freischreiber

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mo 26. Jan 2015, 19:35
von RobertG
Hallo Freischreiber,

geht nicht über SQL. Alle dort festgelegten Default-Werte gelten bei der Erstellung des Datensatzes, nicht bei einer Änderung.

Schau einmal (noch) in meinem Ordner zur Weiterentwicklung des Handbuchs nach. Da ist eine Datenbank zu Defaultdatum und Defaultzeit dabei. Die ist auch in "Base_Beispiel_V44" erklärt.

Gruß

Robert

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mo 26. Jan 2015, 20:06
von F3K Total
Hallo Freischreiber,
wir hatten bereits ein ähnliches Thema, hier.
Wenn Du deine Datenbank bereits getrennt hast, kannst du einen Trigger verwenden.
BSP:
Wenn sich in Tabelle T1 in Spalte N2 etwas ändert, wird in TS der aktuelle Timestamp eingetragen

Code: Alles auswählen

CREATE TRIGGER INSERT_DATE
    BEFORE UPDATE ON T1
    REFERENCING OLD ROW AS OLDROW NEW ROW AS NEWROW
    FOR EACH ROW WHEN (OLDROW.N2 <> NEWROW.N2)
        BEGIN ATOMIC
           SET NEWROW.TS = CURRENT_TIMESTAMP;
        END
Habe ich gerade ausprobiert, funktioniert einwandfrei.
EDIT: Wenn du noch eine Spalte U hinzufügst, trägt dieser TRIGGER zusätzlich noch den aktuellen User in Spalte U ein:

Code: Alles auswählen

CREATE TRIGGER INSERT_DATE_USER
    BEFORE UPDATE ON T1
    REFERENCING OLD ROW AS OLDROW NEW ROW AS NEWROW
    FOR EACH ROW WHEN (OLDROW.N2 <> NEWROW.N2)
        BEGIN ATOMIC
           SET NEWROW.TS = CURRENT_TIMESTAMP;
           SET NEWROW.U = CURRENT_USER;
        END
Gruß R

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 11:29
von Freischreiber
Hallo allerseits,

@RobertG:
:roll: Ertappt, dein Datum-Aktuell-Makro läuft bei mir ja schon lange, für Änderungen in der Kundentabelle...
Hier könnte ich es an das Ereignis "Text modifiziert" des betreffenden Felds koppeln, oder?

@F3K Total:
Den Trigger habe ich angepaßt und ausprobiert, nämlich so:

Code: Alles auswählen

CREATE TRIGGER ABLAGEDATUM
    BEFORE UPDATE ON "t-auftraege"
    REFERENCING OLD ROW AS OLDROW NEW ROW AS NEWROW
    FOR EACH ROW WHEN (OLDROW."Offen" <> NEWROW."Offen")
        BEGIN ATOMIC
           SET NEWROW."Enddatum" = CURRENT_DATE;
        END
Das wäre mir, weil es unabhängig vom Formular geht, auch lieber als ein Makro, aber es gibt keine Reaktion in meiner Tabelle...
Kann man so einen einmal angelegten Triggger eigentlich auch ändern oder löschen?

Gruß
Freischreiber

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 16:40
von F3K Total
Hi,
nur Löschen und neu anlegen

Code: Alles auswählen

Drop Trigger <Triggername>
R

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 16:57
von Freischreiber
Hi,

okay, hab gelöscht und neu angelegt, mal ohne Anführungszeichen (geht nicht), mal mit CURRENT_TIMESTAMP statt CURRENT_DATE, aber keine Reaktion.
In meinem Feld erscheint kein Datum...

Weiß du, an was das liegen könnte?

Gruß
Freischreiber

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 16:59
von F3K Total
HSQLDB 2.3.2?
Ist Enddate ein DATE Field?

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 17:06
von Freischreiber
Hi!

Ja und ja, 2.3.2 und Datum [DATE]...

Gruß
Freischreiber

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 17:11
von F3K Total
... und es passiert, wenn du direkt in der Tabelle "t-auftraege"
in der Spalte "Offen" etwas änderst, dann speichern drückst, nix in Spalte "Enddatum"?
Unglaublich.
Welchen Typ hat "Offen"?

Re: Default Current Date, wenn Datensatz schon existiert?

Verfasst: Mi 28. Jan 2015, 17:15
von Freischreiber
Auweia, peinlich... ich hab mich mit der Tabulaturtaste durch den letzten Datensatz bewegt...
mit der Speichern-Taste ohne Anspringen des Datumsfelds gehts :oops:

Danke!