Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00 (https://www.delphipraxis.net/210984-datetime-anzeige-dbgrid-ist-bei-der-zeit-00-00-00-a.html)

Smiley 9. Jul 2022 14:17

Datenbank: SQLite • Version: D10.4 • Zugriff über: FireDAC

DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Ich habe in einer SQLite Datenbank eine Tabelle mit einem DateTime Wert.
Diesen zeige ich in einem DBGrid an.
Im GridInit habe ich explizit noch eingetragen:

Code:
TDateTimeField(grdKasse.Columns[7].Field).DisplayFormat:= 'dd.mm.yyyy hh:nn:ss';
Als Anzeige im Grid bekomme ich aber angezeigt "07.07.2022 00:00:00"
In der Tabelle sind unterschiedliche Zeiten enthalten. Nur das DBGrid zeigt es als 00:00:00 an.
Definiert wurde die Tabelle mit:

Code:
  qKasse.SQL.Text := 'Create Table If Not Exists Kasse ' +
    '(Nr INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +
    ' Name VARCHAR(100), EPreis Real, Menge Integer,Frei VARCHAR(1), ' +
    'Rabatt VARCHAR(1), Summe Real,Datum datetime, Bemerkung VARCHAR(200))';
  qKasse.ExecSQL;
Könnt ihr mir da einen Tip geben was ich falsch mache?

hoika 9. Jul 2022 19:14

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Hallo,
mal dd.mm.yy probiert?

Zum Test, ob das DisplayFormat überhaupt funktioniert.

Papaschlumpf73 10. Jul 2022 08:52

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Du schießt hier ein bisschen von hinten durch die Brust.

Das TDateTimeField gehört zum Dataset und hat eigentlich nichts mit dem Grid tun. So kann man es zwar auch machen; es ist jedoch sehr fehleranfällig. Sobald sich die Column-ID der Datumsspalte ändert, läuft das schon auf einen Fehler hinaus.

Beispiel unter der Annahme, dass das Dataset qKasseTbl heißt:

Wenn du die Felder persistent dem Dataset hinzugefügt hast, kannst du die DisplayFormat-Eigenschaft gleich im Objektinspektor setzen, oder im Code per qKasseTblDatum.DisplayFormat:='xyz'. Ansonsten geht auch qKasseTbl.FieldbyName('Datum').DisplayFormat:='xyz '

Wenn die Felder nicht persistent sind, geht's eigentlich nur über qKasseTbl.FieldbyName('Datum').DisplayFormat:='xyz ' - aber erst nachdem die Tabelle z.B. mit qKasseTbl.Open geöffnet wurde. Davor sind die Felder ja noch nicht verfügbar.

Uwe Raabe 10. Jul 2022 09:54

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Seit einigen Delphi-Versionen kann man ja auch persistente und nicht-persistente Felder nebeneinander im DataSet haben (siehe TFieldsAutoCreationMode). Dann legt man sich die eben persistent an, bei denen man bestimmte Einstellungen oder Events haben will und die anderen lässt man automatisch erzeugen.

Smiley 10. Jul 2022 12:30

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Kann es sein dass wir hier von verschiedenen Sprachen sprechen?

Bei "qKasse.FieldbyName('Datum')." gibt es keine DisplayFormat Eigenschaft.
In den Persistenten Feldern finde ich weder im Query noch im Grid eine Eigenschaft Display Format.

Es gibt in der Query unter FormatOptions die Eigenschaft FmtDisplayDateTime, diese habe ich auch auf "dd.mm.yyyy hh:nn:ss" gesetzt.

Uwe Raabe 10. Jul 2022 12:53

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
TField kennt kein DisplayFormat, TDateTimeField aber schon.

Wenn du bei deiner Query persistente Felder hast, welchen Typ hat dann das Feld für "Datum"?

Smiley 10. Jul 2022 13:10

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Query sieht so aus, wenn ich ein doppelklick auf die Query mache:
https://www.delphipraxis.net/attachm...1&d=1657454877

Dort steht nur "Date" als Typ.
Kann SQLite kein DateTime ? ich habe es aber im Create als DateTime angelegt.
Code:
  qKasse.SQL.Text := 'Create Table If Not Exists Kasse ' +
    '(Nr INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +
    ' Name VARCHAR(100), EPreis Real, Menge Integer,Frei VARCHAR(1), ' +
    'Rabatt VARCHAR(1), Summe Real,Datum datetime, Bemerkung VARCHAR(200))';
  qKasse.ExecSQL;

Smiley 10. Jul 2022 13:14

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier noch ein Bild von den Feldern im DBGrid
https://www.delphipraxis.net/attachm...1&d=1657455266

Smiley 10. Jul 2022 13:20

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Liste der Anhänge anzeigen (Anzahl: 1)
So sieht es im SQLiteSpy aus:
https://www.delphipraxis.net/attachm...1&d=1657455639

Smiley 10. Jul 2022 13:50

AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
 
Hier der Inhalt des Formulars frmKasse:

Code:
procedure TfrmKasse.FormActivate(Sender: TObject);
begin
  grdKasse.DataSource:=DM.dsKasse;
  GridKasseInit;
end;

procedure TfrmKasse.GridKasseInit;
begin
  grdKasse.Columns[0].Width := 30;
  grdKasse.Columns[1].Width := 120; // Name
  grdKasse.Columns[2].Width := 50; // Prei
  grdKasse.Columns[3].Width := 50; // Menge
  grdKasse.Columns[4].Width := 40; // Frei
  grdKasse.Columns[5].Width := 40; // Rabatt
  grdKasse.Columns[6].Width := 50; // Summe
  grdKasse.Columns[7].Width := 180; // Datum
  grdKasse.Columns[8].Width := 300; // Bemerkung
  (DM.qKasse.FieldByName('Datum') as Tdatetimefield).DisplayFormat := 'dd.mm.yyyy hh:nn:ss';
//  TDateTimeField(grdKasse.Columns[7].Field).DisplayFormat:= 'dd.mm.yyyy hh:nn:ss';
  TCurrencyField(grdKasse.Columns[2].Field).DisplayFormat:= '###0.00';
  TCurrencyField(grdKasse.Columns[3].Field).DisplayFormat:= '###0.00';
  TCurrencyField(grdKasse.Columns[6].Field).DisplayFormat:= '###0.00';
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Seite 1 von 3  1 23      

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