Seite 1 von 1

Datenbankfelder Automatisch füllen

Verfasst: Di, 25.08.2009 11:10
von NewWave
Hi,

ich habe in Base ein Tabelle erstellt in der ein Datum eingetragen werden soll und das zweite Datum soll dann automatisch Berechnet werden und eingetragen.
Wollte dies über ein Forumular realisieren, finde aber nicht passendes dazu. Makro ist im Moment für mich noch Bahnhof :D

MfG

Wave

Re: Datenbankfelder Automatisch füllen

Verfasst: Di, 25.08.2009 14:44
von komma4
Willkommen im Forum.

Warum erwähnst Du das erste Datum?
Nach welchen Regeln soll das zweite Datum berechnet werden?

Welche Datenbank-engine? Welche OOo Version?

Re: Datenbankfelder Automatisch füllen

Verfasst: Mi, 26.08.2009 09:02
von NewWave
Hi,

das erste Datum soll ja die Grundlage der Berechnung darstellen. Nach etwas such hier im Forum habe ich mich dann entschieden es beim Anzeigen des Datensatzes
durch einen SQL - Befehl berechnen zu lassen. Es sollte immer genau ein Jahr später sein. Jedoch ist noch die Frage inwiefern es möglich ist, dass das ermittelte Datum kein Samstag oder Sonntag ist.

Code: Alles auswählen

SELECT "Dletzt",
CONVERT( YEAR("Dletzt") || '-' || MONTH("Dletzt")+12 || '-' || DAY("Dletzt"), DATE) AS "Dneu"
FROM "Tabelle"
OOo Version 3.1.0.
Datenbank ist in OOo Base

MfG

Wave

Re: Datenbankfelder Automatisch füllen

Verfasst: Mi, 26.08.2009 09:42
von komma4
Wenn das zweite Datum immer berechnet wird, dann ist es im Sinne der Normalisierung völlig korrekt den Wert nicht auch noch zu speichern.


Verstehe ich Dich richtig, dass dieses Datum dann nicht auf's Wochenende fallen soll?

So etwas erreichst Du dann durch Kombination eines CASE WHEN Konstrukts und der bei HSQLDB eingebauten DAYNAME-Funktion - Beispiele für's Erstere habe ich hier schon gesehen.

Viel Erfolg!


Link zur HSQLDB-Dokumentation

Re: Datenbankfelder Automatisch füllen

Verfasst: Mi, 26.08.2009 14:35
von NewWave
Hi,

danke für den CASE WENN Tipp.

Edit: Hier nun meine Lösung:

Code: Alles auswählen

SELECT "Dletzt", 
CASE 
	When DAYNAME(CONVERT( YEAR("Dletzt") || '-' || MONTH("Dletzt") || '-' || DAY("Dletzt")+365.25, DATE)) = 'Saturday' 
		Then CONVERT( YEAR("Dletzt") || '-' || MONTH("Dletzt") || '-' || DAY("Dletzt")+367.25, DATE)
	When DAYNAME(CONVERT( YEAR("Dletzt") || '-' || MONTH("Dletzt") || '-' || DAY("Dletzt")+365.25, DATE)) = 'Sunday'
		Then CONVERT( YEAR("Dletzt") || '-' || MONTH("Dletzt") || '-' || DAY("Dletzt")+366.25, DATE)
	ELSE CONVERT( YEAR("Dletzt") || '-' || MONTH("Dletzt") || '-' || DAY("Dletzt")+365.25, DATE)
END  as "Dneu"

FROM "Begehungen"
Für Tipps zur Vereinfachung bin ich dankbar, aber erstmal froh das ich es nach vielem Suchen und Testen hinbekommen habe.

MfG