Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datum in dbGrid/dbEdit über TAdoQuery formatiert anzeige (https://www.delphipraxis.net/207133-datum-dbgrid-dbedit-ueber-tadoquery-formatiert-anzeige.html)

norwegen60 26. Feb 2021 14:47

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:
TDateTimeField(DataSet.FieldByName('MeinFeldname')).DisplayFormat := 'YYYY-MM-DD HH:MM:SS';
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.

Ich verwende Delphi XE mit TAdoConnection und TAdoQuery, TAdoDataSet

Danke für die Unterstützung
Gerd

Delphi.Narium 26. Feb 2021 15:07

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:
  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;
ungetestet hingedaddelt

norwegen60 26. Feb 2021 15:38

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?

Delphi.Narium 26. Feb 2021 16:15

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:
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;
auch wieder nur hingedaddelt.

norwegen60 26. Feb 2021 19:07

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"

Delphi.Narium 26. Feb 2021 20:05

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.

norwegen60 26. Feb 2021 21:41

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:
  FormatSettings.DateSeparator := '-';
  FormatSettings.DecimalSeparator := '.';
  FormatSettings.TimeSeparator := ':';
  FormatSettings.ShortTimeFormat := 'hh:nn:ss.zzz';
  FormatSettings.ShortDateFormat := 'yyyy-mm-dd';
  Application.UpdateFormatSettings := false;
In den DLL habe ich das selbe im Source der DLL implementiert. Da tritt beim Kompilieren aber die Warnung auf
Code:
[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'
Ich könnte die Warnung abschalten, lieber wäre es mir aber zu wissen, warum sie in der DLL kommt

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 03:28 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