AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabellenfeld DATE Problem (BC, nur Jahreszahl..)
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

Ein Thema von NoGAD · begonnen am 10. Apr 2021 · letzter Beitrag vom 11. Apr 2021
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von NoGAD
NoGAD

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

Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 03:55
Datenbank: ABS_Database • Version: 7.92 • Zugriff über: ABSTable/ABSQuery
Hallo,

ich habe wieder einmal eine Frage. Wenn ich eine Tabelle anlege, möchte ich auch (wurde mir angeraten) Datum in einem DATE-Field speichern.

Nun ist es aber so, dass nicht jeder Autor (in meinem Fall) auch einem direkten Datum zugeordnet werden kann. Es gibt also teilweise nur Jahreszahlen. Dann meckert aber die Datenbank herum.

Was anderes ist z.B., wenn eine Datum VOR dem Jahre Null eingegeben werden möchte.


Wie geht man mit diesen beiden Problemen denn bitte um?


LG Mathias
Mathias
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 10:54
Ganz einfach: Wenn es kein Datum gibt, kann man es nicht als Datum speichern.

Alternative ist also dann doch wieder der String. Ist es ein vollständiges Datum dann ist das so, ist es nur eine Jahreszahl, dann ist das auch so.

Schwierig wird es, wenn man dann auch noch danach sortieren will. Dann wird es eher strubbelig.

Man könnte also hergehen und das Datum einfach so, wie es ist, als String speichern und zusätzlich noch ein "künstliches" Datum generieren, was man ebenfalls (in einem zweiten Feld vom Typ Integer) speichert, dabei erhalten die Autoren vor dem Jahr Null einen negativen Wert.

Dort baut man sich dann ein passendes Datum zusammen, z. B. sowas:
AutorDatumSortierdatumVorChristi
Ernst Jünger29.03.1895189503290
Pythagoras570-057000001
Jacob Abbott1803180300000

Sortieren könnte man dann in der Art: select Autor, Datum from tabelle order by Sortierdatum, Autor Damit hätte man dann alle Autoren aufsteigend nach Datum vom "Anbeginn der Zeit" bis in die "unabsehbare Zukunft" sortiert. Die Autoren, die über kein vollständiges Datum verfügen, befinden sich dabei immer am Anfang der Autoren eines Jahres. Möchte man diese an das Jahresende "verbannen" dann muss man halt die vier Nullen, die momentan den Jahresanfang "symbolisieren", durch z. B. vier Neunen ersetzen. Damit sind sie immer die "Letzten" im entsprechenden Jahr. Vor dem Jahr Null verhält es sich genau umgekehrt.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 11:15
Das klingt phantastisch. Diese Idee gefällt mir gut, ich werde das so übernehmen

Lieben Dank und ein schönes Wochenende!

Mathias
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 12:27
Und wenn Du dann diesen Unterschied auch noch eliminieren willst, "verschiebst" Du den Integerwert des künstlichen Datums noch um X Jahre nach "hinten". Umrechnen musst Du eventuell für die Darstellung sowieso, sparst Dir aber eine unterschiedliche Behandlung (und das Tabellenfeld) von "vor und nach Christus".
Für den Offset X reichen vermutlich ungefähr 1000 aus. Für schriftliche Quellen sind mir keine älteren Daten bekannt. (Archäologen mögen mich korrigieren)
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#5

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 13:01
Und wenn Du dann diesen Unterschied auch noch eliminieren willst, "verschiebst" Du den Integerwert des künstlichen Datums noch um X Jahre nach "hinten". Umrechnen musst Du eventuell für die Darstellung sowieso, sparst Dir aber eine unterschiedliche Behandlung (und das Tabellenfeld) von "vor und nach Christus".
Für den Offset X reichen vermutlich ungefähr 1000 aus. Für schriftliche Quellen sind mir keine älteren Daten bekannt. (Archäologen mögen mich korrigieren)
Das Feld "vor und nach Christus" ist in meinem Beispiel nur zur Verdeutlichung, es wird nicht benötigt.
Die Darstellung kommt aus dem Feld Datum, da kann beliebige Prosa drinne stehe, eben auch ein Datum in gewohnter Formatierung. Das ist aber kein muss.

Beim ollen Pythagoras könnte da auch 570 BC oder 570 v. Chr. oder ca. 570 v. Chr. oder vermutlich um 570 v. Chr. drinne stehen, dass hat auf die Sortierung per Sortierdatum keinerlei Einfluss. Und bei Zahlen, die größer oder kleiner als Null sein können, finde ich es einfach naheliegend, mit positiven und negativen Zahlen zu arbeiten, da braucht mein keinen Offset oder irgendeine Umrechnung oder Vermutungen, welcher Offset nach momentanem Kenntnisstand ausreichend sein könnte ...
Vom Urknall bis, wer weiß, was die Zukunft bringen wird, kann man halt auf einer Zeitachse jedes Jahr, egal von welchem Planeten man das Jahr als Maßstab nimmt, von minus ∞ bis plus ∞ darstellen (allenfalls könnte Integer da ein bisserl zu klein für sein ). Nix anderes passiert bei meinem Vorschlag.

Geändert von Delphi.Narium (10. Apr 2021 um 23:49 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 15:51
Moin...

UnixDatetime = ganzzahlig = jede Sekunde seit 01.01.1970
https://www.delphipraxis.net/26033-u...tdatetime.html
https://www.delphipraxis.net/196625-...zurueck-2.html

Für die Daten ohne Datum einen beliebigen Wert definieren (erste Sekunde oder letzte Sekunde oder Time <> 0 z.B.). Damit kann man in einer Funktion unterscheiden ob Datum oder Jahreswert...

fertsch...

PS:

Geändert von haentschman (10. Apr 2021 um 15:59 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#7

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 16:14
UnixDatetime hat den Nachteil, dass man damit keine Datumswerte von vor Christi Geburt abbilden kann. 1970 beginnt bereits für Christi Geburt ca. 1970 Jahre zu spät oder ca. 62.125.920.000 Sekunden (ohne Berücksichtigung von Schaltjahren und der Kalenderreformierung von 1542). Für das Geburtsdatum des Herrn Pythagoras wären das dann schon etwa 80.101.440.000 Sekunden, also grob pro Einwohner der Bundesrepublik eine Sekunde. Gut, eine Sekunde pro Einwohner klingt jetzt nicht unbedingt viel, aber für den lieben Pythagoras ist das doch schon 'ne ganze Menge

Das Problem in der Aufgabenstellung ist nun mal, dass man unvollständige Datumsangaben nicht als vollständige Datumsangaben abbilden kann, da ist es egal ob UnixDateTime ab dem 01.01.1970 in Sekunden oder TDateTime ab 30.12.1899 in Tagen nicht funktioniert.

Man braucht halt 'ne funktionierende Alternative Und die scheint mir mit beliebigen Datumstypen nicht realisierbar. Alle haben eins gemein: Sie können unvollständige Datumswerte nicht unvollständig abbilden. Man muss die unvollständigen Datumswerte immer zu vollständigen Datumswerten ergänzen, mit der Folge, dass die unvollständigen und die vollständigen Datumswerte nicht mehr übereinstimmen

Geändert von Delphi.Narium (10. Apr 2021 um 23:46 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 10. Apr 2021, 23:03
Vielen Dank euch allen

Ich schließe mich gedanklich an Delphi.Narium an.
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 11. Apr 2021, 01:30
Alternative ist also dann doch wieder der String.

Huhu, eine kleine Rückfrage noch.

Meine Umwandlung eines Datums führt mich zu folgendem Code:

Delphi-Quellcode:
    Dummy_Date_Random := RandomDate; // Ergibt ein valides Datum als TDate
    DecodeDate(Dummy_Date_Random, Dummy_Year, Dummy_Month, Dummy_Day); // Umwandlung in Word
    Dummy_String := Dummy_Year.ToString + Dummy_Month.ToString + Dummy_Day.ToString; // String zusammensetzen
Ist das von mir zu umständlich gemacht, oder geht das nicht anders?

LG Mathias
Mathias
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#10

AW: Tabellenfeld DATE Problem (BC, nur Jahreszahl..)

  Alt 11. Apr 2021, 09:57
Viele Wege führen nach Rom, meiner sähe so aus: Dummy_String := FormatDateTime('yyyymmdd', RandomDate);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:28 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