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:

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
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
Danke!