Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datum/Uhrzeit speichen und sortieren.. (https://www.delphipraxis.net/192885-datum-uhrzeit-speichen-und-sortieren.html)

erich.wanker 30. Mai 2017 14:37

Datenbank: Firebird • Version: 2.5 • Zugriff über: ZeosLib

Datum/Uhrzeit speichen und sortieren..
 
Hallo Leute,

Ich hole via Indy Mails von einem Pop3-server ab ..

dann speichere ich das Maildatum:
MAILDATENBANK.FieldByName('DATUM').AsDateTime:=Msg .Date; -> In der Datenbank kommt dann z-B. "30.05.2017" an ..

Wie kann ich die Uhrzeit der Mail auch noch abspeichern .. UND wie kann ich dann die Mails "order by Datum & Uhrzeit" anzeigen lassen ?

Vielen Dank für Hinweise

Bernhard Geyer 30. Mai 2017 14:46

AW: Datum/Uhrzeit speichen und sortieren..
 
Erweitere dein Feld DATUM zu einem Feld das Datum und Uhrzeit speichern kann.

erich.wanker 30. Mai 2017 15:05

AW: Datum/Uhrzeit speichen und sortieren..
 
hi ...

msg.Date ist ja ein Extended .. Kann ich den Wert via "AsSQLTimeStamp" in ein TIMESTAMP Feld speichern?

mkinzler 30. Mai 2017 15:13

AW: Datum/Uhrzeit speichen und sortieren..
 
Im Extended steckt schon beides. Im Ganzzahlbereich das Datum und im Nachkommabereich die Zeit.

Luckie 30. Mai 2017 19:30

AW: Datum/Uhrzeit speichen und sortieren..
 
Ich würde Datum und Uhrzeit als Timestamp abspeichern und nicht formatiert.

DeddyH 30. Mai 2017 19:35

AW: Datum/Uhrzeit speichen und sortieren..
 
Ein DateTime-Feld ist ja nicht formatiert, das ist nur die Darstellung. Wie das intern gespeichert wird, hängt AFAIK vom DBMS ab.

Luckie 30. Mai 2017 19:42

AW: Datum/Uhrzeit speichen und sortieren..
 
Hm.
Zitat:

In der Datenbank kommt dann z-B. "30.05.2017" an
Das habe ich so interpretiert, dass es formatiert in der DB steht.

DeddyH 30. Mai 2017 19:48

AW: Datum/Uhrzeit speichen und sortieren..
 
So sieht das aus, wenn man mit einem Admin-Tool wie IBExpert oder FlameRobin reinschaut.

himitsu 30. Mai 2017 19:58

AW: Datum/Uhrzeit speichen und sortieren..
 
Zugewiesen wurde es erstmal "unformatiert" als TDateTime, also als Float.

Was in der DB an kommt, hängt erstmal von dem Feld ab.
* Wie ist die Spalte/Tabelle definiert?

Und dann auch von der Zugriffskomponente und dem DBMS, falls der Wert konvertiert werden muß.

Zitat:

In der Datenbank kommt dann z-B. "30.05.2017" an
Wenn das wirklich als VARCHAR/TEXT/... in der DB steht, dann ist dort schonmal der erste Fehler.

Man kann Datums-/Zeit-Werte als Integer (Sekunden/Millisekunden/... seit Tag X speichern), oder als Float (TDateTime ist z.B. Tage seit Tag X), als String oder sonstwie.

Alle Integer-/Float-Werte kann man problemlos sortieren, genauso wie normale Zahlen.
Und bei einem String wird Zeichen für Zeichen verglichem, also wenn man soeinen Mist bat, dann sollte das auch mit festen Längen und von Groß nach Klein gespeichert sein, um "richtig" verglichen werden zu können. (YYYY-MM-DD HH:MM:SS.zzz)

p80286 30. Mai 2017 21:50

AW: Datum/Uhrzeit speichen und sortieren..
 
Tip am Rande, stell das Datumsformat von Windows auf YYYY-MM-DD um.
Bei jedem Datum, das nicht diesem Format folgt, kannst Du sicher sein, das da jemand seine Finger im (Format-)Spiel hat.

Gruß
K-H

Luckie 31. Mai 2017 00:00

AW: Datum/Uhrzeit speichen und sortieren..
 
Hä? wie kann man denn an dem Datumsformat fest machen, dass da jemand seine Finger im Spiel hatte, was auch immer das in diesem Zusammenhang heißen soll? Und was ist, wenn der Anwender ein anderes Datumsformat bevorzugt?

nahpets 31. Mai 2017 00:10

AW: Datum/Uhrzeit speichen und sortieren..
 
Wenn MSG vom Typ TIdMessage ist, dann enthält Date das Datum und die Uhrzeit, da es vom Typ TDateTime ist.

Mit AsDateTime wird dem Datenbankfeld also auch Datum mit Uhrzeit zugewiesen.

Wie ist denn Datum in der Datenbank definiert?
Als Datumstyp?
Dann sollte das eigentlich passen.

Und wenn man in der Datenbank einen Datumstypen hat, der auch die Uhrzeit enthält, dann reicht ein Order by Datum für die Sortierung nach Datum und Uhrzeit aus.

Das Datumsformat ist hierbei irrelevant.

p80286 31. Mai 2017 08:33

AW: Datum/Uhrzeit speichen und sortieren..
 
Zitat:

Zitat von Luckie (Beitrag 1373027)
Hä? wie kann man denn an dem Datumsformat fest machen, dass da jemand seine Finger im Spiel hatte, was auch immer das in diesem Zusammenhang heißen soll?

Die meisten Datumsformate die genutzt werden sind DD.MM.YY(YY) (was ist hier das richtige Datum? 10.11.12) Irgendwie ist das den Leuten nicht abzugewöhnen, Normung hin oder her.
Wenn Du also das WindowsDatumsformat auf das ISO-Format umstellst, wird bei jeder Software die dieses Format, das Windowsformat, nutzt, YYYY-MM-DD angezeigt. Ist das nicht der Fall, z.B. bei der Ausgabe einer Query, dann wurde entweder ein String abgelegt oder schon ein Ausgabeformat definiert.

Zitat:

Zitat von Luckie (Beitrag 1373027)
Und was ist, wenn der Anwender ein anderes Datumsformat bevorzugt?

Dann gibt es so Äusserungen wie
Zitat:

Zitat von Luckie (Beitrag 1373017)
Hm.
Zitat:

In der Datenbank kommt dann z-B. "30.05.2017" an
Das habe ich so interpretiert, dass es formatiert in der DB steht.

Gruß
K-H

erich.wanker 31. Mai 2017 09:13

AW: Datum/Uhrzeit speichen und sortieren..
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo und VIELEN DANK :-)

Funktioniert jetzt..

habe folgende Felder:
Code:
          ASQL := 'ALTER TABLE "MAILDATENBANK" add "S_DATUM" CHAR(10)';ZConnection1.ExecuteDirect( ASQL );
          ASQL := 'ALTER TABLE "MAILDATENBANK" add "S_UHRZEIT" CHAR(10)';ZConnection1.ExecuteDirect( ASQL );
          ASQL := 'ALTER TABLE "MAILDATENBANK" add "DATUM_ZAHL" FLOAT';ZConnection1.ExecuteDirect( ASQL );
          ASQL := 'ALTER TABLE "MAILDATENBANK" add "ZEITSTEMPEL" TIMESTAMP';ZConnection1.ExecuteDirect( ASQL );
Befüllt via:
Code:
            MAILDATENBANK.FieldByName('DATUM').AsDateTime:=Msg.Date;
            MAILDATENBANK.FieldByName('S_DATUM').AsString:= DateToStr(msg.Date);
            MAILDATENBANK.FieldByName('S_UHRZEIT').AsString:=TimeToStr(msg.Date);
            MAILDATENBANK.FieldByName('ZEITSTEMPEL').AsExtended:=Msg.Date;

Danke und LiGrü
Erich


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 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