[Gelöst] Datumsfeld im Formular

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

[Gelöst] Datumsfeld im Formular

Beitrag von gigabert »

Hallo ihr,

ich hab mal wieder ein kleines Problem mit meinem Formular. Und zwar hab ich zwei Datum/Uhrzeit-Felder in meiner Datenbank, eins für "Datum Person angelegt" und eins für "letzte Änderung". Bei dem Feld "letzte Änderung" habe ich in der Datenbank mit dem Zusatz "DEFAULT NOW()" bewirkt, dass immer das aktuelle Datum/Uhrzeit eingetragen wird, wenn im Formular nichts angegeben ist. Das ist ja auch prima so. Probleme bereitet mir nun eher das Feld "Datum Person angelegt". Und zwar möchte ich ja nicht das Datum immer per Hand anlegen, wenn ein neuer Datensatz mit dem Formular erzeugt wird. Das soll automatisch zugewiesen werden, wenn der Datensatz abgespeichert wird. Und auch nicht bei jeder Änderung (wie bei dem zweiten Datumsfeld), sondern nur beim Anlegen. Die Navigationsleiste habe ich ausgeblendet und ich speicher die neuen Datensätze mit einem Button ab (Aktion "Datensatz speichern"). Ich hab gesehen, dass ich dem Button auch noch Ereignisse zuweisen kann. Das Auslesen der Felder in einem Formular hab ich hinbekommen. Aber wie kann ich dem Datumsfeld einen aktuellen Wert zuweisen?

Viele Grüsse
Bert
Zuletzt geändert von gigabert am Do, 03.09.2009 10:58, insgesamt 1-mal geändert.
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Datumsfeld im Formular

Beitrag von gigabert »

Hallo,

ich bin mit meinen Timestamp-Feldern im Formular leider immer noch nicht weiter gekommen. Im Formular wurden mir für einen Timestamp-Wert aus der Datenbank zwei Formularfelder angelegt: eins fürs Datum und eins für die Zeit. Ich habe in meiner Datenbank zwei Timestamp-Werte. Und zwar ist der eine Timestamp-Wert beim Anlegen des Datensatzes und der andere bei der letzten Änderung. Wie kann ich beim Anlegen eines neuen Datensatzes den aktuellen Timestamp-Wert übergeben (am besten beim Abspeichern des Formulars)?

Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datumsfeld im Formular

Beitrag von Barlee »

Hallo gigabert,

hast Du schon versucht, das über Trigger hinzubekommen? Wäre vielleicht ein Ansatz, den man verfolgen könnte. Gerade, weil Du Ereignisse auswerten und darauf reagieren möchtest.

Gruß Barlee
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Datumsfeld im Formular

Beitrag von gigabert »

Hallo Barlee,

da hab ich mich entweder schlecht ausgedrückt, oder du hast es falsch verstanden. Mit den Ereignissen meinte ich den Button, den ich veranlassen möchte, beim Speichern den Timestamp in der Datenbank zu setzen. Ich möchte ganz einfach nur zwei Timestamp-Felder in der Datenbank füllen, mehr nicht. Eins für das Datum, wann der Datensatz angelegt wurde, und eins für die letzte Änderung am Datensatz. Ich weiss aber nicht, wie ich das über das Formular in die Datenbank bekomme. Wie schon geschrieben, hat es mir beim Anlegen des Formulars mit dem Wizard das Timstamp-Feld in zwei Formularfelder aufgeteilt (Datum und Uhrzeit). Wie kann ich jetzt beim Neuanlegen bzw. Ändern dem Datensatz sagen, dass er den aktuellen Timestamp setzen soll? Von Triggern hab ich keine Ahnung, denke aber, dass ich die dort nicht brauch. Wenn ich das direkt programmiere und mit SQL an die Datenbank schicke, dann wüsste ich, wie ich das schreiben muss. Aber mit dem Formular in Base leider nicht.

Ich hoffe, ich hab das jetzt etwas verständlicher formuliert...

Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Datumsfeld im Formular

Beitrag von Barlee »

Hallo Bert,

ich hatte Dich schon richtig verstanden.
Zwei Timestampfelder. Das erste soll den aktuellen Zeitstempel erhalten, wenn der Datensatz angelegt wird; das zweite bei einem Update. Letzteres hast Du über DEFAULT NOW() gelöst.
Soweit so gut. Mein Vorschlag ging in die Richtung, eine Lösung nicht über das Formular, sondern über Datenbankfunktionalität (einen Trigger) herbeizuführen. Dieser würde bei einer INSERT Operation ausgeführt und kann das betreffende Feld des einzufügenden Datensatzes auf CURRENT_TIMESTAMP setzen. Somit ist das Erstellungsdatum festgeschrieben.
In mySQL leistet das folgender Fünfzeiler, den Du auf Deine DB anpassen könntest:

Code: Alles auswählen

  CREATE TRIGGER triggername
    BEFORE INSERT ON Tabellenname
    FOR EACH ROW BEGIN
              SET NEW.spaltenname = CURRENT_TIMESTAMP;
    END;
Gruß Barlee
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Datumsfeld im Formular

Beitrag von gigabert »

Hallo Barlee,

sorry, du hattest natürlich recht. Ich benutze als DB PostgreSQL und bin da mit Triggern noch nicht in Berührung gekommen. Sah für mich erst mal kompliziert aus. Aber ich werde wohl nicht drum herum kommen, mir das mal genauer anzuschauen. Ich bin immer die ganze Zeit davon ausgegangen, dass das Formular den Zeitstempel aufnehmen und mit abspeichern muss. Aber Sachen, die über die DB direkt laufen können, sind wahrscheinlich besser und praktischer zu lösen.

Danke und Viele Grüsse
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
mhonline
**
Beiträge: 24
Registriert: Di, 24.04.2007 15:31

Re: [Gelöst] Datumsfeld im Formular

Beitrag von mhonline »

Nur mal so:

Kann das Formular nicht ein ja/nein-Feld haben dafür, ob der Daten-Satz NICHT-NEU ist
Wenn beim Neuen Daten-Satz wie üblich die erste Belegung des logischen nicht-neu == nein dann Datum setzen, sonst nichtsmachen ?
(und das nur im Formular, ohne Trigger!)

Martin
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: [Gelöst] Datumsfeld im Formular

Beitrag von gigabert »

Hallo Martin,

danke für deinen Vorschlag, aber ich denke, das macht die Sache auch nur noch komplizierter. Ich werde mir das mit den Triggern mal genauer anschauen. Diese Daten spielen ja eigentlich eh nur eine Rolle in der Datenbank und werden in den Formularen nur angezeigt. Und wenn sich die Datenbank dann auch noch selbst um das Anlegen der Timestamps kümmert, umso besser. Lieber direkt zum Ziel, als irgendwelche Umwege.

Aber so wie ich das jetzt sehe, muss der Timestamp mit dem DEFAULT NOW() derjenige sein, der das Datum für den neuangelegten Datensatz speichert, und der mit dem Trigger für den mit der letzten Änderung. Der erste Timestamp funktioniert so jedenfalls schonmal.

Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
mhonline
**
Beiträge: 24
Registriert: Di, 24.04.2007 15:31

Re: [Gelöst] Datumsfeld im Formular

Beitrag von mhonline »

Ich halte das nicht für einen Umweg, da die Daten ja nicht über programmierte Prozesse sondern händisch in die Datenbank kommen.
Seis drum, Deine Lösung jedenfalls wäre spezifisch, denn in OO.o ist die Standard-Datenbank HSQLDB, die keine Trigger kennt. Desterwegen der Vorschlag.

Martin
Antworten