Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datum wird falsch in der Tabelle gespeichert (https://www.delphipraxis.net/171176-datum-wird-falsch-der-tabelle-gespeichert.html)

Captnemo 24. Okt 2012 14:09

Datenbank: MSSQL Express Edition • Version: 2005 • Zugriff über: ADO

Datum wird falsch in der Tabelle gespeichert
 
Hi,

Ich habe folgende Szenario:

MSSQL 2005 Express Edition, XE2 und Datenzugriff über dbGo-ADOConnection.

Eine Tabelle namens "Rechnung" und darin mehrere Fehlder, unter anderem das Feld "Rechnungsdatum" vom Typ datetime.

Ich speichere die Daten über ein ADOQuery.

Delphi-Quellcode:
ADOQuery.SQL.Text='Update Rechnung SET rechnungsdatum=:datum where Rechnungsnummer=:renr';
ADOQuery.Parameter.ParseSQL(ADOQuery.SQL.Text, True);
ADOQuery.Parameter.ParamValue['datum']:=now;
ADOQuery.Parameter.ParamValue['renr']:='RE12345678';
ADOQuery.ExecSQL;
Funktioniert soweit, bis auf das Datum.
Wenn ich jetzt das ganze ausführe, also mit dem Datum 24.10.2012, dann steht hinterher in der DB 26.10.2012. Die Uhrzeit stimmt erstaunlicherweise.
Woran könnte das liegen?

Gollum 24. Okt 2012 14:29

AW: Datum wird falsch in der Tabelle gespeichert
 
Hallo,

warum nimmst Du zum Speichern/Updaten der Daten kein ADOCommand. Dieses ist eigentlich dafür gedacht.

Ich mache es eigentlich immer so und hatte bis dato keine Probleme.

Delphi-Quellcode:
  ADOCommand.CommandText:='Update Rechnung SET rechnungsdatum=:datum where Rechnungsnummer=:renr';
  ADOCommand.Parameters.ParamByName('datum').Value:=Date();
  ADOCommand.Parameters.ParamByName('renr').Value:='RE12345678';
  ADOCommand.Execute();

mkinzler 24. Okt 2012 14:31

AW: Datum wird falsch in der Tabelle gespeichert
 
Stimmt das Datum am Server?

Popov 24. Okt 2012 14:45

AW: Datum wird falsch in der Tabelle gespeichert
 
@Captnemo

Das mit Datum und Now ist so eine Sache. Man weiß nie ob der Server mit den Datumsformat des Clients etwas anfangen kann. Erfahrungsgemäß funktioniert es sogar sehr oft, aber eher nur zufällig.

Bummi 24. Okt 2012 14:45

AW: Datum wird falsch in der Tabelle gespeichert
 
Das Datum in basiert auf 0=30.12.1899, beim SQLServer 0=1900-01-01 00:00:00.000
Caption := DateTimeToStr(0);
Select Cast(0 as dateTime)

Scheinbar wird Dein Parametertyp interpretiert als

ADOQuery1.Parameters.ParamByName('datum').DataType := ftFloat;

versuch mal was passiert wenn Du ihn setzt:

ADOQuery1.Parameters.ParamByName('datum').DataType := ftDateTime;

Delphi-Quellcode:

ADOQuery1.SQL.Text:='Update Adressen SET geboren=:datum where ID=:ID';
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, True);
ADOQuery1.Parameters.ParamByName('datum').DataType := ftFloat; // 2 Tage Fehler
ADOQuery1.Parameters.ParamByName('datum').DataType := ftdateTime; // kein Fehler
ADOQuery1.Parameters.ParamByName('datum').Value:=now;
ADOQuery1.Parameters.ParamByName('ID').Value:=2876;
ADOQuery1.ExecSQL;

Captnemo 24. Okt 2012 14:57

AW: Datum wird falsch in der Tabelle gespeichert
 
Bummi hat's gelöst ;-)

Zumindest hat mein erster Test erfolgreich funktioniert.

Danke an alle.


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