Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Antworten
Simone_A43
Beiträge: 2
Registriert: Mi 16. Sep 2026, 19:31

Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von Simone_A43 »

Hallo zusammen

nach meiner Trennung habe ich plötzlich wieder Abende für mich, und statt nur Serien zu schauen, wollte ich etwas bauen, das ich selbst brauche. Herausgekommen ist die Idee für einen kleinen Terminplaner: Kurse, Verabredungen, Sport, Erinnerungen, alles lokal in einer SQLite-Datenbank, ohne Cloud und ohne Handyzwang.

Die Grundstruktur mit TListView und einer Datenbankverbindung steht, aber ich hänge an zwei Stellen. Erstens: Wie geht ihr mit wiederkehrenden Terminen um, speichert ihr jede Instanz oder eine Regel? Zweitens: Gibt es eine brauchbare Kalenderkomponente für Lazarus, die nicht nach 2003 aussieht?

Und ja, das Projekt ist auch ein bisschen Beschäftigungstherapie, aber ich sage mir, dass man mit 43 nach einer Trennung ruhig ein neues Hobby und einen neuen Terminkalender brauchen darf. Für Hinweise bin ich dankbar.

Simone

wp_xyz
Beiträge: 5495
Registriert: Fr 8. Apr 2011, 09:01

Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von wp_xyz »

Simone_A43 hat geschrieben: Mi 16. Sep 2026, 19:59 Erstens: Wie geht ihr mit wiederkehrenden Terminen um, speichert ihr jede Instanz oder eine Regel?
Als Regel
Simone_A43 hat geschrieben: Mi 16. Sep 2026, 19:59 Zweitens: Gibt es eine brauchbare Kalenderkomponente für Lazarus, die nicht nach 2003 aussieht?
Es gibt TvPlanIt. Stammt ursprünglich von TurboPower und ist aus dem letzten Jahrhundert. Aber zumindest in der Lazarus-Version kannst du eigentlich fast alles einstellen: https://wiki.freepascal.org/Turbopower_Visual_PlanIt. Du kannst das Package ganz einfach im OPM installieren.

Benutzeravatar
Zvoni
Beiträge: 740
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von Zvoni »

Zusatz: Auch wenn wp auf TvPlanit verwiesen hat:
Wirf das TListView in die Tonne. Nimm ein StringGrid (oder DBGrid)

Wiederkehrende Termine: Da bin ich zweierlei Meinung
Ja, ich verstehe, dass es einfacher sein kann als Regel, würde aber dennoch den eigenständigen (und somit redundanten) Termin bevorzugen.
Beispiel:
Ich habe jeden Mittwoch Bandprobe, und erzeuge es als wiederkehrenden Termin/Termin-Serie
Jetzt fällt aber ein Termin aus (Schlagzeuger im Urlaub)

Als Regel (so wie es Outlook macht) hab ich immer nur Ärger gehabt, weil mir dann die ganze Serie kaputtging.
Als eigenständigen eigenen redundanten Termin kann ich an jedem einzelnen Termin rumpfuschen, ohne dass es die Serie zerreisst.
Egal ob aus meinem Frontend, oder durch die Hintertür in DB-Browser for SQlite.
Um so einen redundanten Termin als Teil einer Serie zu kennzeichnen, kann man eine zusätzliche Spalte nehmen, welche dann eine eindeutige ID je Serie enthält (z.B. eine UUID)

Falls du Hilfe bei SQLite brauchst (Tipps&Tricks), kann ich helfen. Hab über 20 Jahre Erfahrung in DB-Design, und kenne auch die eher etwas "exotischeren" Tricks in SQLite.
Es gibt in SQLite die "Klassiker" die man vermeiden sollte, da sie nur unnötigen Overhead erzeugen

Übrigens: In SQLite, Termine bevorzugt als VARCHAR im Format "YYYY-MM-DD HH:NN:SS" speichern.
Die einzige vernünftige Alternative ist JulianDay, falls du DB-gebundene Controls verwenden willst

Obwohl ich ein Verfechter von "Benutze die nativen Datentypen" bin, ist SQLite eine Ausnahme davon:
Benutze VARCHAR(XX) statt TEXT für alle Strings, weil mit TEXT bekommst du das vermeiledeite "(Memo)" in DB-gebundenen Controls.
Falls keine DB-gebundenen Controls, dann natürlich TEXT verwenden
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Joh
Lazarusforum e. V.
Beiträge: 390
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von Joh »

Zvoni hat geschrieben: Do 17. Sep 2026, 08:23 Als Regel (so wie es Outlook macht) hab ich immer nur Ärger gehabt, weil mir dann die ganze Serie kaputtging.
Als eigenständigen eigenen redundanten Termin kann ich an jedem einzelnen Termin rumpfuschen, ohne dass es die Serie zerreisst.
Egal ob aus meinem Frontend, oder durch die Hintertür in DB-Browser for SQlite.
Um so einen redundanten Termin als Teil einer Serie zu kennzeichnen, kann man eine zusätzliche Spalte nehmen, welche dann eine eindeutige ID je Serie enthält (z.B. eine UUID)
Typisches Beispiel: meine Altpapiertonne: jeden 4. Montag, außer Ostermontag und am 3. Oktober; dann erst Dienstag...

Andererseits Geburtstage: fast immer am gleichen Tag... außer man hat am 29.2.
just my two Beer

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7445
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von af0815 »

Kalenderprogrammierung war für mich immer ein Buch mit 7 Siegeln. Wäre interessant da einmal mitzulesen. Weil gerade die Serientermine mit Ausnahmen für mich abstrakt sind.

Bin neugierig ob es da zu Code kommt, da würde ich gerne mitlesen (und verstehen).

BTW: An Datenbankkenntnissen wird es mir nicht unbedingt mangeln (nehme ich an) :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Zvoni
Beiträge: 740
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von Zvoni »

Joh hat geschrieben: Do 17. Sep 2026, 14:19 Typisches Beispiel: meine Altpapiertonne: jeden 4. Montag, außer Ostermontag und am 3. Oktober; dann erst Dienstag...
Was ist mit Pfingstmontag? :lol:

Mal davon abgesehen: Lustig wird es, wenn ein Monat 5 Montage hat
Setzt halt voraus, dass du jedes Jahr die Feiertage vorhälst :lol:
Andererseits Geburtstage: fast immer am gleichen Tag... außer man hat am 29.2.
Ah ja....der "Klassiker" :)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
Zvoni
Beiträge: 740
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Kleines Projekt zum Wiedereinstieg: Terminplaner für mein neues Leben

Beitrag von Zvoni »

af0815 hat geschrieben: Do 17. Sep 2026, 14:33 Kalenderprogrammierung war für mich immer ein Buch mit 7 Siegeln. Wäre interessant da einmal mitzulesen. Weil gerade die Serientermine mit Ausnahmen für mich abstrakt sind.
Habe ich gerade an der Backe im Rahmen des ERP-Umstiegs.
Bin im Migrations-Team, und mir wurde letzte Woche der Block "Betriebskalender" zugewiesen....

Prinzipiell ist so eine Kalender-Programmierung nicht weiter schwer, sofern man sich auch wirklich an die Regeln hält bzw. die Regeln vorher bekannt sind.
Bsp. Fällt ein Termin auf einen Feiertag, soll dann vorgezogen werden (auf welchen Termin?) oder nach hinten geschoben werden (auf welchen Termin?)?

Setzt natürlich voraus, dass die "Ausnahmen" in einer LUT zur Verfügung stehen.

Wenn das einmal steht, ist es im Prinzip einfache Mathematik, wo man dann nur unterscheiden muss:
Ist das Vorgabe-Kriterium ein Datum, oder ein Wochentag?

Da gibt es ja dann den ganzen Blumenstrauss (Beispiele):
1) Vorgabe: Datum --> Immer am Monats-Ersten (sind dann unterschiedliche Wochentage)
2) Vorgabe: Datum --> Immer am Monats-Letzten (sind dann unterschiedliche Wochentage)
3) Vorgabe: Datum --> Immer am 10. eines Monats (Denk mal an Bank-Daueraufträge)
4) Vorgabe: Wochentag –-> Immer der zweite Montag im Monat
usw....

Je nach Vorgabe ist die "Berechnung" der Folgetermine in der Serie unterschiedlich, zzgl. Anpassung, falls ein Termin auf einen Feiertag/Samstag/Sonntag u.ä. fällt

Prinzipiell muss man unterscheiden:
1) Ist ein Feiertag durch ein Datum festgelegt (Bsp. 01.05., 03.10., 25.12., 01.01. usw.) --> Wochentag "variabel"
2) oder durch einen Wochentag (Bsp. Karfreitag, Ostermontag usw.) --> Datum "variabel", jedoch Datum trotzdem "bekannt" und "fix" für das Jahr

Und bei unserem Betriebskalender mache ich es halt so, dass ich ALLE "Ausnahmen" (auch Samstage und Sonntage, weil da wird nicht gearbeitet. Auch z.B. die "Betriebsruhe" zwischen Weihnachten und Neujahr) in eine Lookup-Table als Datum (!!) eintrage.
Dann erzeuge ich eine komplette Zeitleiste (Reines Datum. Alle 365/366 Tage eines Jahres bzw. dynamisch auch über Jahreswechsel hinaus),
welche ich mit einen Left Join auf die LUT über das Datum verknüpfe.
Grober Algoritmus:
Laufe meine Zeitleiste ab, bis ich meinen Termin finde, schaue in die Spalte nebendran, ob diese NULL ist.
Falls Ja: "Gültiger" Tag für deinen Termin
Falls Nein (Der Join hat in der LUT was gefunden): Termin ist eine der Ausnahmen --> Wende jetzt festgelegte Regel an: vorwärts bzw. rückwärts solange bis ich eine NULL gemäss den Regeln treffe
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten