AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Einträge nach Datum/Zeit in eine Tabelle schreiben

Einträge nach Datum/Zeit in eine Tabelle schreiben

Ein Thema von NoGAD · begonnen am 18. Mai 2022 · letzter Beitrag vom 19. Mai 2022
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#1

Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 09:03
Hallo,

ich benötige bitte eine Hilfestellung beim Speichern von Daten in einer Tabelle.

Die Anwendung ist eine Terminverwaltung, Einträge werden pro Tag und Uhrzeit benötigt. Den Start und das Ende der Einträge pro Tag kann der Benutzer selbst festlegen.
Außerdem, das ist hier wichtig, soll es so sein, dass die Daten bei Bedarf an einen neuen Tagesrhythmus angepasst werden.

Als Beispiel:
Montag = 07:00 - 12:00, alle 15 Minuten
Dienstag = 08:00 - 12:00, alle 15 Minuten

Nun möchte der Anwender ab Datum x seinen Tagesablauf umstellen und der neue Tagesplan sähe so aus:
Montag = 08:00 - 12:00, alle 15 Minuten
Dienstag = 07:00 - 12:00, alle 15 Minuten


Reicht es hier aus, einfach per Timestamp die Einträge zu speichern?
Durch die Änderung müsste ich dann alle Tabelleneinträge neu berechnen.

Gibt es eine einfachere Möglichkeit?


LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 16:52
Ja, Du kannst ein Update auf bestehende Daten machen und die Terminslots verschieben.
Problematisch sind ggF. regellose Termine, die dazwischen funken.
Oder Terminslots die Richtung Nachtschicht gehen und original keinen Tageswechsel enthalten, nach Verschiebung aber schon. (oder umgekehrt)
Oder wenn es mehrere Wechsel gibt: Wir sind im Januar, es gilt Winterplan, dann kommt irgendwann zur Sommersaison, ab Oktober wieder Winter.

Pläne sind letztlich Schall und Rauch, solange sie nicht konkret sind. Sprich ein Slot ist ein Slot, who cares. Erst ein vereinbarter Termin ist wichtig und sollte nicht ohne weiteres verschoben werden. Man könnte also diese Slots auch einfach virtuell einblenden. Dann braucht man sie nicht zu verschieben, kommt mit keinen bestehenden Terminen in Berührung und zeigt sie einfach neu an, wenn "verschoben" wird.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 17:23
Termine einseitig zu verschieben, kann auch nett enden, wenn die andere Seite es nicht direkt mitbekommt.

Klar, du weißt ja wie jetzt der Zeitplan (Arbeitsbeginn) ist und wenn das geändert wird, dann alle Termine um diese Zeit verschieben.
Also vorher wurde 7:00 begonnen und jetzt 8:00, dann alle Termine an diesem Tag +1h.

So lange der Tag also gleich lang ist, passt es dann.
Wird aber kürzer gearbeitet und Termine ragen hinten hinaus, was passiert dann damit?



Vielleicht ist es einfacher die Termine nicht automatisch zu verschieben (außer der Nutzer sagt explizit "jetzt alles neu anordnen")
und nach Änderung des Zeitplans die Termine zu hervorheben, welche außerhalb liegen, damit sich der Nutzer darum kümmern kann,

denn wie soll man was allgemeingültig automatisch lösen?
* alle Termine verschieben
* nur die Termine verschieben, welche außerhalb liegen
* und wenn was verschoben wird, wo hin
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 18:07
Danke euch beiden für die Hinweise.


Habt ihr eventuell eine Idee, wie das besser umgesetzt werden kann?

Am Ende benötige ich ja dennoch eine Referenz auf die Termine (Datum-Uhrzeit).

Die Handhabung ist hier sehr schwierig.

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 19:18
Hai NoGAD,

nur mal so ins Blaue gedacht.

Was wäre, wenn Du die "Tagesrhythmen" in einer Tabelle speicherst und die Termine dann in einer zweiten mit Angabe der "Rythmus-ID" und auf diese bezogen.
Dann wären die Termine immer in relativ zu den Zeiten der Tagesrythmen.

Also:
Code:
Rythmus_1 : Montag = 07:00 - 12:00
Rythmus_2 : Dienstag = 08:00 - 12:00
Rythmus_3 : Montag = 08:00 - 12:00
Rythmus_4 : Dienstag = 07:00 - 12:00
Code:
Termin_1 : Bassiert auf Rythmus_1  alle 15 Minuten
Termin_2 : Bassiert auf Rythmus_3  alle 21 Minuten
Der Rest wäre dann rechnen.

Gruß
Sharky
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 19:34

Habt ihr eventuell eine Idee, wie das besser umgesetzt werden kann?

Am Ende benötige ich ja dennoch eine Referenz auf die Termine (Datum-Uhrzeit).
Ich habe es schon erwähnt, Termine die nirgendwo stehen, braucht man nicht zu verschieben.
Also wenn es sich um ein leeres Raster handelt.
Termine, die bereits vereinbart sind mit einer Gegenstelle, nennen wir sie echte Termine, sollte man vielleicht nicht ohne weiteres verschieben. Technisch wäre da irgenwas notwändig, wie es bspw. Outlook macht.

Lokal in der TerminDB Deiner Anwendung ist es m.E. nicht mehr als ein Update. Die meisten DB können ganz gut mit Datums / Zeitwerten rechnen, leider nicht ganz standardisiert. Also es geht, aber überall anders. Tageswechsel, Schaltjahr usw. wird alles berücksichtigt, egal ob + oder - 1h.
Hilfreich ist dabei, wenn die Datenhaltung in einer gemeinsamen Spalte Datum und Uhrzeit betrifft. Meist geht das seitens der DB bereits in einer Spalte vom Typ Date. Werden Datum und Zeit in getrennten Spalten gespeichert, muss man Überläufe bei der Zeit feststellen und den Tag nachziehen. Oder man rechnet davor beides zusammen, ändert den Wert gemäß Plan und teilt es wieder.

Was das Raster angeht (leere Termine):
Es besteht nur aus dem Plan, "multipliziert" mit den Vorschautagen. Dieses berechnete Raster kann aus einem View kommen, der keine gespeicherten Daten enthält. Erst wenn ein Slot aus dem Raster mit Ort, Teilnehmer, ... versehen wird, wird er wirklich in der TerminTabelle gespeichert. Und ersetzt in der Gesamtabfrage einen leeren Slot. Ob das in Summe einfacher zu handhaben ist, kann ich aus dem Stand nicht sagen, kommt mir aber so vor. Die leeren Slots sind eigentlich nur eine zunächst grafische Darstellung (eben ein Raster), das theoretisch beliebig per Klick geändert werden kann. Natürlich wird es beim Selektieren/Anlegen eines Termins übernommen.

Weiß nicht, ob das verständlich ist.
Ich habe das mal so ähnlich für Serientermine implementiert. Also nicht ein kompletes Tagesraster, sondern eben typische Wochen- oder monatliche Termine. Spätestens wenn der Anwender die Option "Laufzeit unbegrenzt" wählt, wird auch eine Motivation klar. Man erstellt nicht bis in alle Ewigkeit feste Termine als individuelle Datensätze.

Die Referenz eines echten Termins oder eines leeren Slots zeigt auf den Plan.
Wird der Plan geändert (neuer Plan), wird ab Inkrafttreten der neue Plan referenziert.

Ja, Sharkies Beitrag ist auch sowas.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 19:50
Gibt es eine einfachere Möglichkeit?
Hallo Mathias,
ich habe noch nicht so ganz verstanden was "alle 15 Minuten" bedeuten soll und ob es wirklich um absolut flexible Zeiten gehen muss oder nur eine Auswahl bestimmter Zeiten.
Meine Idee wäre es in Deiner Datenbank verschiedene Zeiten zu definieren aus denen sich ein User dann was auswählen kann anstelle das der User eine Start und Endzeit eingeben muss (alle xx Minuten)
Dass ganze dann über einen Kalendar mappen und fertig ist.

Falls es verständlich war worauf ich hinaus wollte, gern geschehen, falls ich daneben liege, mein Fehler :-]
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
325 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 18. Mai 2022, 23:17
Danke für eure Geduld, wieder einmal.

Die Idee ist schwer zu erklären. Ich denke, könnte ich sie erklären, hätte ich eine Lösung. Ich versuchte es noch einmal vorn.

1 Programmnutzer (PN) kann für jeden Tag einen Zeitraum festlegen, ebenso den Intervall innerhalb des Zeitraums.
1.1. Mein Projekt erzeugt eine Zeitliste für jeden Tag, in dieser können Termine eingetragen werden. (7:00, 7:15, 7:30 ... 12:00)
2. PN trägt nun in dieses Raster Termine ein.
2.2. Diese Termine werden in einer Tabelle abgelegt. Bisher mache ich das über einen Timestamp, der unique ist, es kann definitiv keine zwei gleichen Termine zu einem Datum+Uhrzeit geben.

... Inzwischen ist ein halbes Jahr Vorlauf entstanden ...

Jetzt möchte der PN den Intervall ändern. Alle Termine müssten angepasst werden. (Zumindest für die Zeit von jetzt bis zum letzten Termin im Vorlauf); (Ob und wie das mit den Personen, die die Termine wahrnehmen werden, abgesprochen wird, ist nicht meine Aufgabe oder die des Programms)

Meine Frage nun:

Wie lässt sich das Problem von Überschneidungen, eventueller Wegfall oder sonstiges vermeiden?

Idee 1: Alle Termine für den Tag werden weiterhin im Original angezeigt (Timestamp) und bei Überschneidungen mit dem neuen Raster werden die Termine z.B. kursiv dargestellt. Das würde so lange passieren, bis alle Termine "durch" sind.

Idee 2: Alle Termine werden auf das neue Raster umgerechnet. Hier kann es aber zu Verlust kommen, wenn der Intervall vergrößert wird.

Habt ihr so etwas schon einmal programmiert?

Anmerkung: Es gibt nur fixe Termine, keine virtuellen.

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
458 Beiträge
 
#9

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 19. Mai 2022, 13:04
Idee 1: Alle Termine für den Tag werden weiterhin im Original angezeigt (Timestamp) und bei Überschneidungen mit dem neuen Raster werden die Termine z.B. kursiv dargestellt. Das würde so lange passieren, bis alle Termine "durch" sind.
Ja, nur kursiv reicht nicht. Den Hintergrund am besten fett Rot machen.
Idee 2: Alle Termine werden auf das neue Raster umgerechnet. Hier kann es aber zu Verlust kommen, wenn der Intervall vergrößert wird.
Einen Button einbauen, mit dem der Nutzer die regelbasierte Umstellung anstoßen kann. Je nachdem, wie teuer ausgefallene Termine werden können, gegebenenfalls für jeden Tag einzeln. Überschneidungen nach der Umstellung wieder deutlich hervorheben. Einen Gesamtbericht erstellen, bei dem die Überschneidungen gruppiert nach Datum aufgelistet werden. Damit überträgst du die Verantwortung an den Nutzer.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
614 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Einträge nach Datum/Zeit in eine Tabelle schreiben

  Alt 19. Mai 2022, 13:45
Hallo,

eventuell habe ich das überlesen. Die Termine bestehen aus zwei Datum+Zeit Werten (Start bis Ende) oder aus Datum+Zeit als Start und eine Laufzeit in Sekunden oder einem anderen Zeit-slot Format?

Zum Verschieben und speichern von Terminen ist es schön nur den Startwert und die Laufzeit zu haben. Lässt sich besser verwalten.
Berechnen von Überschneidungen mat sich mit zwei Zeit Werten besser.

Eigentlich ist egal wie du das Datum bisher gespeichert hast. Zum Umrechnen musst du nur dafür sorgen dass das du einen Zwischenwert hast der feingliedrig genug ist um damit umrechnen zu können. Beide Slotgrößen müssen sich damit eindeutig darstellen lassen. Mit Sekunden zum Beispiel.
Überschneidungen kannst du nicht verhindern wenn nach der Änderung weniger Slots vorhanden sind.
Das solltest du auch dem Anwender überlassen diese Termine dann anzupassen.
Was du machen könntest wäre ein Trockenlauf. Also ermitteln wo es Probleme geben wird und diese dem Anwender vorher anzeigen.

Grüße nach Weimar, oh du ferne Heimat.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz