Autor Beitrag
salsatigre
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 20.06.03 16:42 
Hy Leute,

weiß jemand, wieso der MS SQL-Server 2000 einen steten Fehler von 2 Tagen produziert, wenn er einmal ein Datum per String '19.12.2002' oder als Float 37609,0 bekommt ?
Excel und Delphi wandeln das Datum jeweils in die 37609 um. In der DB steht ab dann 21.012.2002 wenn 's über die Float geschrieben wird.

Also, was macht denn dieser SQL Server? Ist sein Tag NULL der 30.12.1899 ?? :roll:

_________________
programmers doesn't die
they only gosub ..... aaaargh

PS: Version Delphi 6 SP 1
Neuromancer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
BeitragVerfasst: Fr 20.06.03 16:56 
salsatigre hat folgendes geschrieben:
Also, was macht denn dieser SQL Server? Ist sein Tag NULL der 30.12.1899 ?? :roll:


Genau das ist scheinbar das Problem. Für den SQL-Server 2000 ist der erste Tag 0 eben nicht der 30.12.1899, sondern der 01.01.1900. Das zeigt mir jedenfalls folgendes Beispiel:
ausblenden Quelltext
1:
SELECT CAST(0 as datetime) AS Origin					


Gruß
Neuromancer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
BeitragVerfasst: Fr 20.06.03 17:39 
Das gilt übrigens nicht nur für die Version 2000, sondern auch schon für die Version 7.0.
Auch hier liefert der Server den 01.01.1900.

Delphi hingegen liefert mir bei folgender Abfrage
ausblenden Delphi-Quelltext
1:
ShowMessage(DateTimeToStr(FloatToDateTime(0)));					


den 30.12.1899.

Gruß
Neuromancer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
BeitragVerfasst: Fr 20.06.03 18:02 
Noch was:

Unter Excel XP SB ist das Datum 0 nicht der 01.01.1900, sondern der 00.01.1900 (???)
1 ist der 01.01.1900
-1 -> Fehler

Delphi: 1 ist der 31.12.1899

Excel: 37609: 19.12.2002
Delphi: 37609 : 19.12.2002

:?: :?: :?:

Wie kann das sein? Eigentlich müsste Excel doch in Bezug auf Delphi einen Tag "vorgehen"...

Gruß
Neuromancer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinNT 4.0 SP6a, WIN 2k Prof SP3, Win XP Prof SP1
D5 Ent, D6 Ent
BeitragVerfasst: Fr 20.06.03 18:26 
Aha!

Fehler gefunden! Es handelt sich dabei scheinbar um einen Bug in Excel. Denn in Excel ist das Jahr 1900 ein Schaltjahr, wikipedia schreibt aber, dass Jahreszahlen, die durch 100 teilbar sind, keine Schaltjahre sind, es sei denn, die Jahreszahl ist durch 400 teilbar, somit ist 2000 zwar ein Schaltjahr, 1900 aber keins...

Micro$oft vs. Borland: 0 : 1!

Gruß
salsatigre Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 23.06.03 10:48 
Titel: hochinteressant
hab gerade gelesen, was Du herausgefunden hast.
Ist doch echt nervig, wenn man blind dem system (microschuft) vertraut.

Haben mittlerweile den SQL-Server nochmal aufgesetzt ... und Wunder geschehen!
Auf einmal nimmt der SQL-Server wieder Strings an und konvertiert Sie wie vorgeschrieben in ein DATE um.

D.h. die Routinen darf ich wieder zurückumschreiben.

Der Ausflug über [Float] das Datum in die DB zu schreiben war ein Schuß in den Ofen!!

PS: und das mit dem 00.01.1900 is ja echt kewl
Thanks @neuromancer :D

_________________
programmers doesn't die
they only gosub ..... aaaargh

PS: Version Delphi 6 SP 1