![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: ZEOS
Unix Timestamp als Integer und WHERE Bedingung bei SQLIte
Hallo zusammen,
bin noch recht neu im Bereich Programmieren und arbeite mit Lazarus 1.8.4 Zur Zeit versuche ich als Übung eine Art Stundenzettel mit Speicherung der Daten in einer DB zu programmieren. Habe auch mittlerweile vieles hinbekommen. Aber im Moment scheitere ich an einer WHERE Klausel und finde einfach meinen Fehler nicht. Nach langem lesen und einigem Ausprobieren habe ich mich entschieden mit dem Unix Timestamp in einer Integer Spalte zu arbeiten. Hab vor ewigen Zeiten mal einiges fürs Internet gescripted und kam damit immer am besten klar. Nun versuche ich einfach alle Einträge auszugeben, die in einem bestimmten Zeitraum liegen. Prinzip: SELECT * FROM tabelle WHERE spalte BETWEEN anfangTS AND endeTS Aber irgendwie habe ich immer ein leeres Resultat. Kopiere ich diese Abfrage in den SQLite DB Browser, bekomme ich brav angezeigt was ich suche. Query - Verbindung zur SQLite über TZConection und TZQuery Memo1 - ein einfaches Memo Feld zur Ausgabe. Im Debugger wird die WHILE Schleife immer übersprungen. EOF steht auf TRUE
Delphi-Quellcode:
Aufbau der Tabelle:
Query.sql.Clear;
Query.Params.CreateParam( ftInteger, 'anfang', ptInputOutput); Query.Params.CreateParam( ftInteger, 'ende', ptInputOutput); Query.SQL.Text := 'SELECT * FROM dailyreport WHERE day BETWEEN :anfang AND :ende'; Query.Params.ParamByName( 'anfang' ).AsInteger := 1551398400; Query.Params.ParamByName( 'ende' ).AsInteger:=1551484800; Query.Open; While not Query.EOF do begin Memo1.Lines.Add( Query.fieldByName('day').AsString ); Memo1.Lines.Add( Query.fieldByName('id').AsString ); Query.Next end; Query.Close;
Delphi-Quellcode:
Testinhalt der Tabelle:
CREATE TABLE "dailyreport" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT, "hour" INTEGER, "personal_number" INTEGER, "id_order" INTEGER, "id_key" INTEGER, "day" INTEGER, "remark" TEXT )
|
AW: Unix Timestamp als Integer und WHERE Bedingung bei SQLIte
Hallo,
AsInteger := 1551398400; Ist das nicht zu gross für einen Integer? Gibt es vielleicht ein AsInt64? Siehe auch hier ![]() |
AW: Unix Timestamp als Integer und WHERE Bedingung bei SQLIte
Wenn es nicht unbedingt der Unix Timestamp sein muss dann nimm doch den Feldtyp TDateTime. Den könntest du auch in Delphi zu einem Unixtimestamp hin- und herkonvertieren wenn es denn sein muss. Dazu ist der Feldtyp TDateTime ja gedacht :)
|
AW: Unix Timestamp als Integer und WHERE Bedingung bei SQLIte
Zitat:
Damit klappt's dann auch. Vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 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