Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Poller
Beiträge: 6
Registriert: Do, 07.09.2017 07:27

Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von Poller »

Hallo zusammen,

bitte um Hilfe !!!

Habe (fast) fertige Datenbank erstellt und nun stelle ich fest, daß das Datum in der Tabellenansicht (Feldtyp Integer) 2 Tage weniger anzeigt, als in Formular eingegeben. Also 07.08.17 in Formular eingegeben, erscheint in Tabelle die Zahl 42945. Diese Zahl umformatiert in Datum ergibt 05.08.17.

Nun hab ich schon alles probiert....
-ein neues Datumsfeld angelegt im Formular und eine neue Datumsspalte in der Tabelle - Problem bleibt..
-habe auch schon eine komplett neue Datenbank angelegt mit ID und Datum und entsprechendem Formular....Problem bleibt.
-habe auch das Datum in der Tabelle umgewandelt von Integer nach Date (dann stimmt Datum mit Datum im Formular überein) und erhalte
anschließend über Abfrage DATEDIFF( 'DD', '1899-12-30', [RGDATUM] ) den Integer-Wert des Datums. Diesen benötige ich um Berechnungen
anstellen zu können.
Nur: - die Abfrage macht das Programm total langsam und der Datumswert ist, obwohl in der Abfrage richtig, im Formular dann um 2 Tage zu
hoch.

Kann man den Integer-Wert in der Tabelle mit z.B. update "Tabelle" set "Datum" = date_add( "DATUM", intervall 2 days) oder Ähnlichem anpassen, oder hat bitte irgendwer eine Idee ???

Datenbank ist HSQL in open office base 4.1.3 und windows10

Vielen Dank schon mal für die Hilfe....
Poller

**Moderatorenhinweis:
Verschoben in Forum Base / SQL
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von Toxitom »

Hey Poller,

Hmm, kann Deine Aussagen nicht bestätigen. Hab allerdings getestet mit LibreOffice 5.4 und der HsQLDB

1. Eingabe in ein Formular- Integer-Feld: 07.08.2017 -> Anzeige: 42954!
2. Darunterliegende Tabelle in Base aufgerufen, Spaltenwert: 42954 -> Spalte als "Datum" formatiert: Anzeige 07.08.17

Also alles wie erwartet.

Kannst höchstens mal prüfen: Calc-Dokument öffnen, Extras - Einstellungen -> OOo Calc - Berechnen -> Datum sollte dort auf dem 30.12.1899 stehen als Startdatum!

Im Übrigen ist mir überhaupt nicht klar, warum Du ein Integer-Feld für das Datum verwendest und solche "Klimmzüge" überhaupt machst? Gibt doch auch in der HSQLDB ein "Datumsfeld". Wäre das nicht viel einfacher?

VG Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von RobertG »

Hallo Tom, hallo Poller,

das ist https://bugs.documentfoundation.org/sho ... i?id=96190. Funktioniert weder in LO noch in AOO korrekt. Ist vermutlich schon lange vorher falsch gelaufen.

Was vor allem sehr verwirrend ist: Wenn jemand in ein Integerfeld der Tabelle ohne Datumsformatierung einfach ein Datum schreibt, dann wird das korrekt in die entsprechende Integer-Zahl umgewandelt. Lasse ich anschließend die Spalte als Datum formatieren, so ist das Datum wie eingegeben.
Schreibe ich hingegen anschließend in das mit einem Datumsformat versehene Feld, so wird der intern abgespeicherte Wert um 2 vermindert.

Der Bug steckt in den Formatierungsbedingungen des formatierbaren Feldes (bzw. des Tabellenfeldes). Wenn das Integer-Feld durch ein Datumsfeld beschrieben wird, dann stimmt das Datum anschließend scheinbar, weil dieses Feld wohl dem Bug einfach angepasst wurde ...

Den Klimmzug mit Integer-Werten an dieser Stelle machen vermutlich viele, weil sie so eine Funktion wie DATEADD nachstellen können, die es für die interne HSQLDB nicht gibt.

Ich habe mir früher damit geholfen, dass ich für meine Berechnungen einfach eine Tabelle mit Integer-Zahlen und Datum aus Calc nach Base transportiert habe. Ausgangsdatum in der Base-Tabelle anschließend gesucht, zu dem passenden Integer-Wert z.B. 14 (für 14 Tage) addiert und dann das passende Zieldatum gefunden. Ging für eine Bibliothek ganz gut.

Gruß

Robert
Poller
Beiträge: 6
Registriert: Do, 07.09.2017 07:27

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von Poller »

Hallo Tom,

Datum in open office calc steht auf 30.12.99.
Datum mit Feldtyp Integer brauche ich zum Berechnen. Ich habe aber auch schon auf Feldtyp date umgestellt, dann erhalte ich aber im Formular wieder 2 Tage zuviel...d.h. egal, wie ich es mache, ich habe im Formular immer 2 Tage mehr als in der Tabelle..

Hab aber noch etwas festgestellt.
Wenn ich in der Tabelle Datum als Wert 0 eingebe, dann erscheint im entsprechendem Formularfeld das Datum 01.01.1900.
In der Tabelle HEUTE muss ich aber als Abfrage DATEDIFF( 'DD', '1899-12-30', CURRENT_DATE ) eingeben, um das aktuelle Datum zu erhalten.

Ich bin am verzweifeln...
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von RobertG »

Hallo Poller,

das ist genau der Bug, den Du beschreibst. Was möchtest Du denn konkret lösen?

Schau Dir gegebenenfalls einmal im Handbuch das Kapitel
Datenbankaufgaben > Codeschnipsel > Tage zu Datumswerten addieren
an.

Gruß

Robert
Poller
Beiträge: 6
Registriert: Do, 07.09.2017 07:27

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von Poller »

Hallo Robert,

vielen Dank für deine ausführliche und zutreffende Beschreibung des Problems. Ebenso für die Datenbank mit Anleitung.
Dieses Beispiel stellt den Sachverhalt genau dar und hat mir geholfen, zumindest die Zusammenhänge zu verstehen.

In der Tabellenansicht ist der 0-Wert für das Datum der 30.12.1899, in der Formularansicht der 01.01.1900. Dadurch die 2 Tage Differenz.
(..nun könnte jemand sagen, ändere doch den 0-Wert für das Datum in der Tabellenansicht auch nach 01.01.1900...ja, aber dann stimmt mein "V_Heute" nicht mehr und gibt für den 08.09.17 den 06.09.17 aus..)

Perfekt wäre es, könnte man den 0-Wert für das Datum im Formular nach 30.12.1899 ändern !!

Nun aber muss ich wohl damit leben und arbeite mit einer Abfrage, anhand welcher ich meine Berechnungen anstelle und die fehlenden 2 Tage hinzu addiere...

Vielen Dank nochmal für die Unterstützung, auch an Tom....,
Poller
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von RobertG »

Hallo Poller,

ich habe einmal so eine Datenbank zusammengebaut, bei der Du zu Datumswerten auch Tage addieren kannst und wieder echte Datumswerte erhältst. Funktioniert eben nicht mit den Integer-Varianten (wegen der dortigen Fehler) sondern mit einer Ansicht, die Datum und laufende Nummerierung nebeneinander führt. Wird allerdings recht langsam, wenn Du den Bereich für die eingeschlossenen Jahre allzu weit herauf setzt.

Gruß

Robert
Dateianhänge
DateAdd.odb
Dateadd mit interner HSQLDB und Hilfstabelle
(13.33 KiB) 204-mal heruntergeladen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von RobertG »

Hallo *,

ich habe noch einmal etwas weiter probiert und jetzt eine Abfrage zusammengebaut, die ohne eine Zusatztabelle mit Datumswerten und laufenden Zahlenwerten hoffentlich korrekt eine Addition von Tagen zu einem Datum vornimmt und daraus wieder ein Datum erstellt. Die Abfrage benötigt lediglich die Eingabe eine Wertes für die zu addierenden Tage in einer Filtertabelle.

Achtung! Das Ganze funktioniert nicht korrekt vor 1901, da das Jahr 1900 kein Schaltjahr war, bei der Abfrage aber grundsätzlich als ein Schaltjahr behandelt wird (Anzahl der Tage durch 365,25 dividiert ergibt abgerundet die Jahreszahl ...).

Bitte die Abfrage vor Gebrauch genau testen - zumindest der 2-Tage-Fehler taucht so nicht mehr auf und das Ergebnis ist keine Integer-Zahl, sondern ein Datum.

-----
Nachtrag: Die Berechnung hat noch Fehler. Vor allem habe ich bei den Monaten z.B. statt Januar <= 31 Januar < 31 stehen. Korrektur kommt noch - mit richtigen Schaltjahren.
-----

Gruß

Robert
Dateianhänge
DateAdd.odb
Variante mit Abfrage - ermittelt das Zieldatum direkt als Datum
(14 KiB) 173-mal heruntergeladen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von RobertG »

Hallo *,

hier jetzt die Korrektur.
Ich habe noch versucht, die Abfrage dahingehend zu erweitern, dass auch für Jahre außerhalb von 1901-2100 korrekte Ergebnisse kommen. Wegen der unterschiedlichen Schaltjahre (alle Hunderter sind kein Schaltjahr, aber alle Vierhunderter sehr wohl) springt die Rechnung um einen Tag, wenn der Hunderter ein Schaltjahr ist. Das ist hoffentlich für Werte von 1900 an abwärts und für Werte über 2100 in der Abfrage aufgefangen. Allerdings zeigt sich, dass das Ganze doch arg langsam geht. Eine Datenbank mit echter DateADD-Funktion (oder ein Makro) sind da sicher besser.

Gruß

Robert
Dateianhänge
DateAdd.odb
Monatszählung angepasst, gültige Datumsberechnung bis 2200
(14.07 KiB) 162-mal heruntergeladen
Poller
Beiträge: 6
Registriert: Do, 07.09.2017 07:27

Re: Datum in Tabellenansicht (Feldtyp Int.) gibt 2 Tage weniger aus als im Formular

Beitrag von Poller »

Hallo Robert,

Tausend Dank für deine Bemühungen.
ich habe soweit alles ausgetestet, bin aber schließlich doch bei der Lösung geendet, die fehlenden Tage in den jeweiligen Abfragen zu addieren (+2).
DateAdd wäre natürlich die eleganteste Lösung, macht aber die ganze Datenbank unendlich langsam und ist somit in der Praxis nicht brauchbar.

Nochmals vielen Dank,
Poller
Antworten