Zeitberechnung bei Termineingabe

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Moin zusammen,

ich habe jetzt aufgegeben und bitte um Eure Hilfe!
AOO417m1(Build:9800)


Folgende Situation:

Ich erstelle eine Datenbank in der ich gerne erst einmal Termine für Massagen festhalten möchte.

Jetzt habe ich mehrere Tabellen erstellt, wie z.B.: Kundenname – Mitarbeitername – Startzeit – Dauer und so weiter........
Die Daten aus den Tabellen wähle ich über ein Formular in aufklappbaren Listenfeldern aus und erstelle so einen Termin mit den oben beschriebenen Daten.

Und nun geht’s los!

Das Problem liegt bei der „Startzeit“ und bei der „Dauer“.

Die Startzeiten sind fix in der Tabelle in Viertelstunden vorgegeben (Feldtyp: Zeit; Format: 00:00).
Beispiel: 07:15; 07:30; 07:45; 08:00;..........bis 22:00
Eingabe über das Listenfeld Startzeiten.

Die Dauer (in Std.) ist ebenfalls fix in der Tabelle in Halbestunden vorgegeben, aber eben als Feldtyp Dezimal mit 2 Nachkommastellen.
Beispiel: 0,50; 1,00; 1,50; 2,00;..........bis 5,00
Eingabe über das Listenfeld Dauer.

Jetzt erstelle ich in dem Eingabeformular ein Unterformular in Form eines Tabellenkontrollfelds, wo die eingegebenen Daten mittels einer Abfrage angezeigt werden sollen.
Beispiel: Kundenname – Mitarbeitername – von – bis........
Also, die Startzeit bleibt gleich (nur eine andere Bezeichnung [von]), aber das -bis- bereitet mir Probleme. Das -bis- soll natürlich wieder als Uhrzeit angezeigt werden.

07:15 Uhr + 2,50 Std. = 09:45 Uhr

Frage 1: Wie muss die Abfrage lauten damit ich eine Uhrzeit erhalte?

Frage 2: Das Listenfeld Startzeiten zeigt leider immer nur im Format 07:15:00 an. Wie bekomme ich die Sekunden weg?


Ich hoffe, ich habe mich verständlich ausgedrückt und danke Euch schon mal!!!

Gruß
Dr. Duhn

RobertG
*******
Beiträge: 1951
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zeitberechnung bei Termineingabe

Beitrag von RobertG »

Du arbeitest mit AOO und der eingebauten HSQLDB. Damit hast Du dann natürlich Probleme. Die eingebaute HSQLDB kennt die Funktion DATEADD nicht. Wenn Du mit LibreOffice arbeiten würdest, dann hätte ich die interne Firebird-Datenbank vorgeschlagen. Die kann zu Datumswerten und Zeitwerten Zahlen addieren und dann wieder Datumswerte und Zeitwerte ausgeben.

Du kannst zu einem Trick greifen, der Dir die Uhrzeiten dann anzeigt, aber in Wirklichkeit mit Dezimalzahlen arbeitet, Voraussetzung ist, dass Du aus dem Gemenge nicht nachher die Zeit an einem bestimmten Tag auslesen willst. Der Tag sollte durch ein separates Datum bestimmt werden.

Definiere das Feld, dass Deine Uhrzeit beinhalten soll, als Dezimalzahl-Feld. 0,5 in einem Dezimalzahlfeld wird bei der Formatierung als Uhrzeit dann 12:00:00 Uhr. Du brauchst aber mindestens 6 Nachkommastellen. Du brauchst auch nicht die Genauigkeit eines Dezimalzahlfeldes. Vielleicht reicht ein DOUBLE-Feld ja aus.

Deine Auswahlfelder bestückst Du jetzt mit Listenfeldern. Die Listenfelder zeigen zeigen etwas anderes an als sie abspeichern. Steht da 1/4 Std, so speichern sie 0,010416666666667. Die Werte, die gespeichert werden sollen, ermittelst Du einfach in Calc. 1 Tag ist 1, 1 Std 1/24, 1/4 Std = 1/(24*4).

Wie gesagt, das Ganze ist eine Krücke. Für Zeiten benutzt Du besser eine Datenbank, die Befehle wie DateAdd kennt.

Gruß

Robert

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Re: Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Moin,
danke erstmal für die schnelle Antwort!

So einen ähnlichen Ansatz habe ich schon einmal mit einem Float-Feld versucht (auch hier im Forum beschrieben).
Nur da ist das selbe Problem wie mit dem Dezimalfeld jetzt.
Wenn ich im Formular ein Listenfeld erstelle zeigt mir die Auswahlliste nicht 12:00 sondern 0,5 an.

Vielleicht habe ich Dich aber auch nur nicht richtig verstanden?!?!

Es muss nicht zwingend mit Zeiten gerechnet werden, es soll im Formular nur als Zeit dargestellt (12:00) werden.

Gruß
Dr. Duhn

RobertG
*******
Beiträge: 1951
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zeitberechnung bei Termineingabe

Beitrag von RobertG »

Das Listenfeld hat in der Dateneingabe an erster Position 0,5 stehen. Diesen Wert speichert es ab.
In der Liste des Reiters "Allgemein" schreibst Du an erster Position 12:00. Das ist nur ein Text. Dieser Text wird angezeigt.

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Re: Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Jetzt habe ich es verstanden, danke!

Ich muss aber gestehen, um es einfach zu gestalten habe ich Anfangs nicht alles erwähnt.
Schande über mein Haupt!

In der Tabelle "Startzeit", von der die Daten genommen werden, habe ich noch eine BOOLEAN-Spalte eingefügt. Hier wird mit dem Haken ausgewählt welche Startzeiten Aktiv sind und somit auch im Listenfeld zur Auswahl angezeigt werden.
Im Formular realisiere ich das im Listenfeld unter dem Reiter "Daten" mit einer SQL Abfrage in der dann eben nur die Zeiten mit "WAHR" angezeigt werden.
Daher kann ich auch die besagten Einträge nicht tätigen. Ich möchte auf diese "Aktivierung" auch nicht verzichten.
Gibt es nicht irgendeine andere Möglichkeit unter AOO das zu realisieren.
Wie schon gesagt, es muss nicht zwingend mit dem Typ Zeit gerechnet werden.
Ich versuche mich gerade an CASEWHEN-Varianten, es mangelt aber auch hier an Wissen.

Hab mir mittlerweile sogar das komplette Handbuch ausgedruckt. Für Laien einfacher nachzulesen, finde ich.

RobertG
*******
Beiträge: 1951
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zeitberechnung bei Termineingabe

Beitrag von RobertG »

Vielleicht hilft Dir ein Blick auf die erste Datenbank aus dem Buch für Beispieldatenbanken. Da geht es dann aber um Zeitmessung direkt mit dem Rechner. Das, was der HSQLDB da auf dei Sprünge helfen kann, ist leider nur entsprechender Makroaufwand. Da gibt es dann auch die Funktion DateAdd.

F3K Total
********
Beiträge: 3543
Registriert: Mo, 28.02.2011 17:49

Re: Zeitberechnung bei Termineingabe

Beitrag von F3K Total »

Moin,
ich wollte es ausprobieren, mit entsprechendem SQL-Code, Zeiten als Integer funktioniert es auch ohne Makro, siehe Beispiel anbei.

Gruß R
Dateianhänge
DrDuhn.odb
(17.19 KiB) 7-mal heruntergeladen

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Re: Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Moin R,
das sieht schon sehr genial aus.
Ich komme leider erst zum WE dazu es in meiner Datenbank umzusetzen.

Vorweg auf jeden Fall schon mal ein riesiges Dankeschön an euch Beide!!!
Ich melde mich zum WE hin wieder.

Gruß
Dr. Duhn

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Re: Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Funzt wunderbar!!!

Jetzt habe ich noch eine kleine Sache.
Ich versuche die Null in der Abfrage weg zu bekommen. Wäre schöner wenn da nichts steht, wenn keine Eingaben gemacht wurden.
Mit meinen Ansätzen klappt das nur nicht so recht.

Code: Alles auswählen

SELECT "ID_T", "FK_ID_K", "FK_ID_M", "VON", "DAUER", CASEWHEN( "VON" + "DAUER" < 1, '', ( "VON" + "DAUER" ) / 1440.00000000 ) AS "BIS" FROM "TERMINE"
Was mache ich falsch?

Gruß
Dr. Duhn

RobertG
*******
Beiträge: 1951
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zeitberechnung bei Termineingabe

Beitrag von RobertG »

"Bis" ist ja ein Feld für Zahlen, oder? Dann bringt eine Umwandlung in Text durch zwei Hochkommata nicht. Das wirft nur einen Datentypsfehler aus. Ich würde da dann auch richtig NULL einbauen.

Code: Alles auswählen

SELECT "ID_T", "FK_ID_K", "FK_ID_M", "VON", "DAUER", 
CASEWHEN( "VON" + "DAUER" < 1, NULL, ( "VON" + "DAUER" ) / 1440.00000000 ) AS "BIS" 
FROM "TERMINE"

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Re: Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Moin RobertG,

es hat leider nicht die Wirkung erbracht die ich mir erhofft habe Die "0" wird weiterhin in der Abfrage angezeigt?!?!?!

RobertG
*******
Beiträge: 1951
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zeitberechnung bei Termineingabe

Beitrag von RobertG »

An welcher Stelle hast Du denn keine A Eingaben gemacht, so dass da nicht 0 stehen soll? In der Datei, die F3K da hochgeladen hat, war das nicht der Fall. Bau da doch einmal so ein Beispiel ein und lade das dann hoch.

Hiker
*****
Beiträge: 397
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Zeitberechnung bei Termineingabe

Beitrag von Hiker »

Hallo,

ohne die Dateien genauer durchgesehen zu haben stellt sich mir eine Frage:
Wann ist die Bedingung "VON" + "DAUER" < 1
überhaupt wahr?

Die Division /1440 deutet ja auf eine Minutenangabe. Dann greift die Bedingung nur für VON=0, also Mitternacht und DAUER kleiner als eine Minute ??

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)

Dr. Duhn
Beiträge: 8
Registriert: So, 07.02.2021 20:05

Re: Zeitberechnung bei Termineingabe

Beitrag von Dr. Duhn »

Moin,

ich habe die DB von F3K Total um 3 Einträge erweitert.
Die Spalten "VON" und "DAUER" bleiben leer, als Ergebnis wird die "0" ausgegeben. Und die soll weg!
Wenn in "VON" und/oder "DAUER" nichts eingegeben wird soll in "BIS" auch nichts angezeigt werden.

Mit den Bedingungen die ich bis jetzt ausprobiert habe, verfolge ich wohl einen ganz falschen Gedankenansatz :(

Danke und 'nen angenehmen Sonntag

Gruß Dr. Duhn
Dateianhänge
DrDuhn.odb
(17.26 KiB) 2-mal heruntergeladen

Hiker
*****
Beiträge: 397
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Zeitberechnung bei Termineingabe

Beitrag von Hiker »

Frage: Der Unterschied zwischen 0 und NULL in SQL ist Dir klar?

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)

Antworten