![]() |
Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Hallo zusammen,
gibt es eine Möglichkeit, das Datums-Format meiner Anwendung möglichst zentral so einzustellen, dass es in allen dbComponents im gleichen Format angezeigt wird? Keinenfalls soll das Format des PC's geändert werden. Trotzdem soll die Anwendung nur im ISO-Format anzeigen "YYYY-MM-DD HH:MM:SS". Es muss verhindert werden, dass man bei einem Report oder PrintScreen nicht weiß ob mit 10\05\2021 Mai oder Oktober gemeint ist. Ich weiß, dass ich das Format z.B. per
Delphi-Quellcode:
oder im Object Inspector einstellen kann. Dann müsste ich aber jedes Feld vorab definieren. Bei manchen Querys werden aber je nach Fall andere Felder zurück geliefert.
TDateTimeField(DataSet.FieldByName('MeinFeldname')).DisplayFormat := 'YYYY-MM-DD HH:MM:SS';
Ich verwende Delphi XE mit TAdoConnection und TAdoQuery, TAdoDataSet Danke für die Unterstützung Gerd |
AW: Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Dem Ereignis AfterOpen der TADOQuery ... ein Ereignis zuweisen und in dem dann ungefähr sowas:
Delphi-Quellcode:
ungetestet hingedaddelt
for i := 0 to ADOQuery.Fields.Count - 1 do begin
case ADOQuery.Fields[i].DataType of ftDateTime : ADOQuery.Fields[i].DisplayFormat := 'YYYY-MM-DD HH:MM:SS'; ftDate : ADOQuery.Fields[i].DisplayFormat := 'HH:MM:SS'; ftTime : ADOQuery.Fields[i].DisplayFormat := 'YYYY-MM-DD'; end; end; |
AW: Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Ja, aber auch das müsste ich auf jeder TAdoQuery machen und davon gibt es in den unterschiedlichsten Forms 269 Stück. Dann noch 110 TADoDatasets und zum Überfluss auch noch 114 TADOTables
Gibt es nichts auf höherer Ebene? |
AW: Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Hast Du denn schon AfterOpen-Ereignisse?
Wenn nein, dann eine Routine schreiben und die allen entsprechenden Komponenten zuweisen.
Delphi-Quellcode:
auch wieder nur hingedaddelt.
procedure TForm1.ADOQryAfterOpen(DataSet: TDataSet);
var i : Integer; begin for i := 0 to DataSet.Fields.Count - 1 do begin case DataSet.Fields[i].DataType of ftDateTime : DataSet.Fields[i].DisplayFormat := 'YYYY-MM-DD HH:MM:SS'; ftDate : DataSet.Fields[i].DisplayFormat := 'HH:MM:SS'; ftTime : DataSet.Fields[i].DisplayFormat := 'YYYY-MM-DD'; end; end; end; // Irgendwo zentral z. B. sowas in der Art: procedure TForm1.SetAfterOpen; var i : Integer; begin for i := 0 to ComponentCount do begin if Components[i] is TDataSet then TDataSet(Components[i]).AfterOpen := ADOQryAfterOpen; end; end; |
AW: Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Die Idee ist natürlich gut. Aber die Querys verteilen sich auf 60 Forms und noch ein paat Datamoduls. Ich müsste durch alle durch und prüfen ob schon irgendwo das AfterOpen benutzt wird. Natürlich bräuchten gar nicht alle diese Formatierung aber auch das müsste ich von Fall zu Fall prüfen. Drum hatte ich gehofft man könnte so eine Formatierung z.B. schon der TConnection mitgeben
Trotzdem Danke für die Anregung Wenn nicht noch ein super Tip rein kommt, werde ich durch alle Forms und die Queries die zum Anzeigen genutzt werden mit deinem Tip zentral "formatieren" |
AW: Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Wenn's Datum grundsätzlich im Programm im Format 'YYYY-MM-DD HH:MM:SS' sein soll / kann und nicht nur bei der Anzeige der Daten aus Querys ..., dann schau bitte mal nach TFormatSettings. Damit kannst Du das Datumsformat programmweit verändern, ohne dass das Auswirkungen auf das Systemdatum des PCs hat.
Eventuell reicht das ja dann schon aus. |
AW: Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige
Das war genau das was ich gesucht habe. Hätte meine Anfrage vielleicht nicht auf die DB beschränken sollen, aber 99% der Datums kommen aus der DB.
Nachdem ich das im OnCreate des Main-Forms implementiert habe, kommt (zumindest dort wo ich es auf die Schnelle kontrolliert habe) das Datum im gewünschten Format
Delphi-Quellcode:
In den DLL habe ich das selbe im Source der DLL implementiert. Da tritt beim Kompilieren aber die Warnung auf
FormatSettings.DateSeparator := '-';
FormatSettings.DecimalSeparator := '.'; FormatSettings.TimeSeparator := ':'; FormatSettings.ShortTimeFormat := 'hh:nn:ss.zzz'; FormatSettings.ShortDateFormat := 'yyyy-mm-dd'; Application.UpdateFormatSettings := false;
Code:
Ich könnte die Warnung abschalten, lieber wäre es mir aber zu wissen, warum sie in der DLL kommt
[DCC Warning] Hamilton.dpr(61): W1048 Unsafe typecast of 'string' to 'TFormatSettings'
[DCC Warning] Hamilton.dpr(62): W1048 Unsafe typecast of 'string' to 'TFormatSettings' [DCC Warning] Hamilton.dpr(63): W1048 Unsafe typecast of 'string' to 'TFormatSettings' [DCC Warning] Hamilton.dpr(64): W1048 Unsafe typecast of 'string' to 'TFormatSettings' [DCC Warning] Hamilton.dpr(65): W1048 Unsafe typecast of 'string' to 'TFormatSettings' In der DLL dient es vor allem dazu Daten die in Text-Dateien geloggt werden korrekt zu formatieren. Dort wäre es also auch nicht der riesen Aufwand die paar Stellen explizit zu formatieren. WÜrde nur gerne wissen, ob ich da was besonders beachten sollte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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