![]() |
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:
Als Anzeige im Grid bekomme ich aber angezeigt "07.07.2022 00:00:00"
TDateTimeField(grdKasse.Columns[7].Field).DisplayFormat:= 'dd.mm.yyyy hh:nn:ss';
In der Tabelle sind unterschiedliche Zeiten enthalten. Nur das DBGrid zeigt es als 00:00:00 an. Definiert wurde die Tabelle mit:
Code:
Könnt ihr mir da einen Tip geben was ich falsch mache?
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; |
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. |
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. |
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
![]() |
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. |
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"? |
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:
![]() 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; |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Liste der Anhänge anzeigen (Anzahl: 1)
|
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Liste der Anhänge anzeigen (Anzahl: 1)
|
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; |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Zitat:
Zitat:
|
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Gespeichert wird das Datum schon richtig mit Zeit, wie man im SQLiteSpy sieht, dort werden die Datumsangaben mit der richtigen Zeit angezeigt.
Etwas anderes noch mit der Formatangabe. Die Minuten werden mal mit mm und mal mit nn angegeben. Selbst in DelphiBasics ![]() nn = Minute number as 2 digits LongTimeFormat = hh:mm:ss Was ist denn nun richtig ? |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Zitat:
Zitat:
|
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Was sagt denn FieldType/DataType?
Und gibt es bei FireDAC nicht auch irgendwo die inneren TypInfos, also das was das DBMS/Treiber dem FD für einen Typ nennt? |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Danke Uwe für die klare Erklärung beim Timeformat.
Mit dem Casten im SQL habe ich etwas gefunden aber noch nicht richtig die Anwendung verstanden. Eventuell auch convert verwenden, da blick ich aber noch weniger durch. So würde ich es machen nach dem was ich gelesen habe:
Code:
Hier bekomme ich aber die Meldung: ungültige Typumwandlung.
qKasse.SQL.Text := 'Select Nr,Name,EPreis,Menge,Frei,Rabatt,Summe, cast(Datum AS DateTime) AS Datum, Bemerkung from Kasse order by Datum Asc';
Kann da jemand helfen wie man das Datum als DateTime richtig casted im SQL Select ? |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Liste der Anhänge anzeigen (Anzahl: 2)
@himitsu
ich habe im FDConnection und Query folgendes gesetzt, das wirkt sich aber nicht aus. |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Ich habe jetzt einen SQL String gefunden der mir Datum und Zeit anzeigt, aber im englischen format 2022-07-07 14:02:05.
Nachformatieren im GridInit bringt einen Typumwandlungsfehler.
Code:
qKasse.SQL.Text := 'Select Nr,Name,EPreis,Menge,Frei,Rabatt,Summe, '+
'Datetime(Datum) AS Datum ,Bemerkung '+ 'from Kasse order by Datum Asc'; |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
![]() Eventuell sowas?
SQL-Code:
select strftime('%d.%m.%y %H:%M:%S', Datum) as Datum from tabelle
|
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Danke Delphi.Narium für den Hinweis und den Link mit der hilfreichen Erklärung.
Aber ich weiß nicht wie ich strftime in meinen String einbinden soll. Dies hier funktioniert nicht wegen der Hochkommas:
Code:
Mit
qKasse.SQL.Text := 'Select Nr,Name,EPreis,Menge,Frei,Rabatt,Summe, '+
'strftime('%d.%m.%y %H:%M:%S', Datum) as Datum ,Bemerkung '+ 'from Kasse order by Datum Asc';
Code:
funktioniert das noch da hier keine Hochkommas verwendet werden.
qKasse.SQL.Text := 'Select Nr,Name,EPreis,Menge,Frei,Rabatt,Summe, '+
'Datetime(Datum) AS Datum ,Bemerkung '+ 'from Kasse order by Datum Asc'; Ansonsten wäre strftime Ideal für mich um eine beliebige Formatierung des DateTime Strings hinzubekommen. |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Delphi-Quellcode:
qKasse.SQL.Text := 'Select Nr, Name, EPreis, Menge, Frei, Rabatt, Summe, ' +
'strftime(''%d.%m.%y %H:%M:%S'', Datum) as Datum, Bemerkung ' + 'from Kasse order by Datum Asc'; |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Ich hatte es mit Anführungszeichen (Shift-2) probiert, das hat nicht funktioniert, mit 2 einfachen Anführungszeichen nimmt der Compiler das.
Diese Syntax lässt sich compilieren, es wird aber kein Wert im Grid angezeigt, das Datumsfeld ist leer. Mit dem DateTime-Befehl funktioniert es nur lässt sich da nichts formatieren. |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Zitat:
Im SQLite-Editor "SQLite Expert Personal" kann man als internes Format für Datumsfelder explizit angeben "Borland TDateTime", aber halt auch andere Optionen. SQLiteSpy hat die "Delphi-Brille" hingegen permanent auf, deswegen fällt eventuell hintenüber, dass es auch anders geht. |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Liste der Anhänge anzeigen (Anzahl: 1)
Verstehe ich etwas falsch?
Ich habe gerade ein neues Projekt angelegt. - FDconnection, FDQuery, DataSource + DBGrid auf ein Formular. - FDConnection an eine SQLite-DB. Diese hat eine Tabelle und ein Feld mit dem Typ DATETIME - Das Feld persistent eingebunden und es wurde korrekt als TDateTimeField erkannt. Selbst im Designer kann ich das DisplayFormat ändern und es wird auch korrekt angezeigt. Getestet mit Delphi 10.4 |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Zitat:
|
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Liste der Anhänge anzeigen (Anzahl: 2)
Bei mir sieht das alles anders, im ObjectInspector, aus.
Ich habe mal ein Bild von dem pesistenten Feld Datum gemacht und ein Bild des Ergebnisgrids, wenn ich nur "Select * from Kasse" mache. |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Kannst du das an einem minimalen Beispiel-Projekt reproduzieren? Damit könnten wir bestimmt was anfangen.
|
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
So Leute ich habe es hinbekommen, weiß nur nicht wo die Ursache genau liegt.
Es war irgendetwas in der Query. Uwe hatte recht mit seiner Aussage: " Das Problem ist also kein generelles sondern eher lokal, wobei da viele Ursachen in Frage kommen. " Ich habe die Query komplett gelöscht und neu hinzugefügt, danach hat es funktioniert. Im Objectinspector wird das persistente Feld jetzt auch als TDateTime Field und nicht mehr als TDate Field angezeigt. Viel Wind um nichts. Sorry Leute dass ich euch so viel Arbeit gemacht habe. |
AW: DateTime Anzeige in DBGrid ist bei der Zeit 00:00:00
Hallöle...8-)
qKasse TDateField (siehe Screenshot) statt TDateTimeField ...könnt ihr mich auch mal was schreiben lassen. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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 by Thomas Breitkreuz