Einzelnen Beitrag anzeigen

Beach

Registriert seit: 3. Mär 2019
Ort: Kappel
46 Beiträge
 
FreePascal / Lazarus
 
#1

Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

  Alt 3. Mär 2019, 22:35
Datenbank: SQLite • Version: 3 • Zugriff über: ZEOS
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:
  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;
Aufbau der Tabelle:
Delphi-Quellcode:
CREATE TABLE "dailyreport" (
   "id"   INTEGER PRIMARY KEY AUTOINCREMENT,
   "hour"   INTEGER,
   "personal_number"  INTEGER,
   "id_order"  INTEGER,
   "id_key"  INTEGER,
   "day"   INTEGER,
   "remark"  TEXT
)
Testinhalt der Tabelle:
 
id hour personal_number id_order id_key day remark
2 20 13 1 7 1551369365 Etwas anderes
3 60 13 1 6 1551370574 Noch was anderes
4 50 13 1 6 1551428082
5 30 13 1 5 1551428091
MfG Jürgen
  Mit Zitat antworten Zitat