![]() |
Datumsformat in DB ändern von 04 nach 20004
Hallo Wissende,
ich habe eine Datenbank, in der ich früher das Datumsformat so eintrug: dd.mm.yy Ich habe in der Zwischenzeit das Format auf dd.mm.yyyy umgestellt. Allerdings muss ich nun die alten in der DB verbleibenden Datensätze ändern, damit es passt, wenn ich damit was anstellen will. Das hier ist mein bisheriger Code. Allerdings erhalte ich nur utopschie Daten:
Delphi-Quellcode:
Es war wohl gut, dass ich mir erstmal nur die Mesaagebox habe anzeigen lassen und nicht gleich zurück in die DB geschrieben habe. Was mache ich falsche, oder was fehlt da noch?
procedure TForm1.btn_set_dateClick(Sender: TObject);
var datum:TDateTime; begin with Table1 do begin while not Eof do begin Datum := Trunc(FieldValues['date']); ShowMessage(FormatDateTime('dd.mm.yyyy',Datum)); Next; end end end; |
Re: Datumsformat in DB ändern von 04 nach 20004
Das Problem war oder ist, dass ich damals ein anderes Datumsformat auf dem System eingrichtet hatte. Viel Schwerer wiegt der Fehler, dass das Feld vom Typ her String ist. Mit diesem Code habe ich es zumindestens inhaltlich erstmal gelöst.
Delphi-Quellcode:
procedure TForm1.btn_set_dateClick(Sender: TObject);
var datum:TDateTime; begin with Table1 do begin while not Eof do begin edit; Datum := StrToDate(FieldValues['date']); FieldValues['date'] := Datum; post; Next; end end end; |
Re: Datumsformat in DB ändern von 04 nach 20004
Wenn dein Datumfeld "date" ein String, so wird dies vermutlich fehlschlagen, weil Datum vom Typ TDateTime ist.
Delphi-Quellcode:
Es bleibt Dir also nichts anderes übrig, als weiterhin mit Strings zu arbeiten... Aber vielleicht gehts auch in einem Ruck, wenn du mir verräts, um welche Datenbank es sich hierbei handelt.
FieldValues['date'] := Datum;
(Und wie kommt man auf die Idee, ein Datumsfeld als String zu speichern :gruebel: ) |
Re: Datumsformat in DB ändern von 04 nach 20004
Hallo Tom und Tom,
Zitat:
Grüße vom marabu |
Re: Datumsformat in DB ändern von 04 nach 20004
Ach ja ich weiss. Ich war damals noch dümmer als ich es noch immer zu sein scheine. Es handelte sich um ein dbf-Datei. Also was nettes mit der BDE. Klar kann ich das ändern, aber das Problem ist, dass ich dann eines der Programme, die darauf zugrifen auch wieder neu kompolieren muss, und dies ist etwas tricky, da das nur auf Arbeit geht und ich dort derzeit absolut keine Zeit habe, leider.
Ich kam blos in die Verlegenheit diese DB nun zu benutzen, weil das FA bei mir anfragte, wie es mal mit ner Ust.-Erklärung wäre. Hm und da die anscheinend alle sganz genau wissen wollen, wollte ich eben mal ne Routine über die DB jage, damit die mir alle verkauften Lizenzen von 2005 ausspuckt. Es ging dann über SQL mit fixer Angabe der ID´s (von - bis). Vielmehr Kopfschmerzen macht mir das Thema FA, weil ich da nicht wirklich die grosse Ahnung habe und die vom FA sich weigerten mir ne nette Auskunft zu geben. Is wohl aber was für nen eigenen Thread... @Jelly, es klappte aber trotzdem. Vermutlich lag es einfach daran, dass es sich bei der Übergabe dann um einen Variant handelte!? Egal, das Thema ist vorerst durch... |
Re: Datumsformat in DB ändern von 04 nach 20004
Also bei DBase ist glaub ich nicht viel mit einem direktem SQL Befehl um die besagte Spalte zu verändern. Rezentere DB Systeme bieten auch Stringbehandlungsroutinen mit, damit wärs einfacher. So bleibt dir wohl nix anderes übrig, also das Datensatz für Datensatz zu lösen. Wichtig dabei ist aber, dass du lediglich mit Strings arbeitest, weil Du ja nicht auf TimeStamp umsteigen kannst.
Hier mal ein Schnippsel, allerdings ungetestet:
Delphi-Quellcode:
procedure TForm1.btn_set_dateClick(Sender: TObject);
var oldDate, newDate : string ; begin with Table1 do First ; begin while not Eof do begin edit; oldDate := FieldByName('date').AsString ; try dd := StrToInt(copy(oldDate,1,2)) ; mm := StrToInt(copy(oldDate,4,2)) ; yy := StrToInt(copy(oldDate,7,2)) ; except raise exception.create (oldDate + ' konnte nicht ins neue Format konvertiert werden') ; end ; if yy >= 70 // ab 1970 berücksichtigt. Älter wird als 2069 interpretiert then yy := 1900 + y else yy := 2000 + y ; FieldValues['date'] := FormatDateTime ('dd.mm.yyyy',EncodeDate (yy,mm,dd)) ; post; Next; end end end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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-2025 by Thomas Breitkreuz