Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Konvertierungsprobleme bei datetime [MSSQL] (https://www.delphipraxis.net/51568-konvertierungsprobleme-bei-datetime-%5Bmssql%5D.html)

Madlax 15. Aug 2005 10:53

Datenbank: MSSQL • Zugriff über: ADO

Konvertierungsprobleme bei datetime [MSSQL]
 
Hallo zusammen,

ich hab ein "kleines" Konvertierungsproblem bei MSSQL.

Folgendes Statement:

SQL-Code:
select convert(datetime, '01.01.1900 13:00:00'),
       convert(float, convert(datetime, '01.01.1900 13:00:00')),
       convert(datetime, convert(float, convert(datetime, '01.01.1900 13:00:00')))
Um das Problem zu verdeutlichen, habe ich hier das Datum als String eingefügt, normalerweise wird es als Float im Programm verwendet.

Das Problem ist jetzt, dass ich nach einer Konvertierung eines Datums in Float und wieder zurück nach Datetime nicht das selbe Datum erhalte.
Also '01.01.1900 13:00:00' => 0.54166666666666663 => '01.01.1900 12:59:59.997'.
Vielleicht kennt ja jemand eine Lösung, wie ich das Datum nach Float und zurück konvertieren kann, ohne dass das Datum sich danach ändert :?:

shmia 15. Aug 2005 11:55

Re: Konvertierungsprobleme bei datetime [MSSQL]
 
Zitat:

Zitat von Madlax
ich hab ein "kleines" Konvertierungsproblem bei MSSQL.
Also '01.01.1900 13:00:00' => 0.54166666666666663 => '01.01.1900 12:59:59.997'.

Du hast ein Rundungsproblem, kein Konvertierungsproblem.
Um dieses Rundungsproblem zu umgehen gibt es eine einfache Regel:
Ein Datum(incl. Uhrzeit) bleibt solange in seinem Native-Format (also Double) bis das Datum(incl. Uhrzeit)
entweder an der Benutzeroberfläche angezeigt wird oder das Programm auf anderem Wege (wird z.B. in eine TXT-Datei geschrieben) verlässt.

Sharky 15. Aug 2005 14:41

Re: Konvertierungsprobleme bei datetime [MSSQL]
 
Hai Madlax,

warum musst Du das Datum überhaupt in einen anderen Typ konvertieren?

Madlax 15. Aug 2005 15:04

Re: Konvertierungsprobleme bei datetime [MSSQL]
 
Hi Sharky,

naja, ich wollte testen, warum der TTime-Wert - den ich als Double eintrage - sich von dem TTime-Wert unterscheidet, den ich in Delphi vorliegen hab.

Zur Erläuterung:
Ich habe in Delphi einen TTime Wert (0.54166666667) der die Zeit 13:00:00 darstellt. Als ich diesen Double Wert nun per Insert-Statement eingefügt und später wieder als DateTime (.AsDateTime) ausgelesen habe, bekam ich die Zeit 12:59:59:997 zurückgeliefert.

Naja, ich habe das Problem nun "gelöst", da ich den TTime Wert nicht mehr als Double sondern als String, also 13:00:00, einfüge. Trotzdem wundert mich die Konvertierung/Rundung in MSSQL immernoch, da ich eigentlich davon ausgegangen bin, dass ich nach obiger Konvertierung wieder das Ausgangsdatum bekomme.

Sharky 15. Aug 2005 15:32

Re: Konvertierungsprobleme bei datetime [MSSQL]
 
Hai Madlax,

das würde ich so nicht machen ;-)

Gerade bei Datums/Zeit - Werten arbeite ich nur mit Parametern um sie in die DB einzutragen.
Der große Vorteil ist das ich mich nicht um das beim Anwender eingestellte Datums/Zeit-Format kümmern muss da ich immer TDate als Typ eintrage.

Zum Beispiel:
Delphi-Quellcode:
procedure TForm1.InsertClick(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Text := 'INSERT INTO tabelle zeitfeld VALUES (:pzeitfeld)';
    Parameters.ParamByName('pzeifeld').Value := now;
    ExecSQL;
  end;
end;

Madlax 15. Aug 2005 16:31

Re: Konvertierungsprobleme bei datetime [MSSQL]
 
Ja, da hast du Recht Sharky.

Man kann aber auch vorgeben, in welchem Format das Datum formatiert werden soll, von daher denke ich mal, beide Möglichkeiten haben ihre Berechtigung ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz