AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FreePascal Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

Ein Thema von Beach · begonnen am 3. Mär 2019 · letzter Beitrag vom 4. Mär 2019
Antwort Antwort
Beach

Registriert seit: 3. Mär 2019
Ort: Hunsrück
21 Beiträge
 
FreePascal / Lazarus
 
#1

Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

  Alt 3. Mär 2019, 21: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
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.104 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

  Alt 4. Mär 2019, 09:56
Hallo,
AsInteger := 1551398400;

Ist das nicht zu gross für einen Integer?
Gibt es vielleicht ein AsInt64?

Siehe auch hier
http://zeoslib.sourceforge.net/viewtopic.php?t=4765
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
905 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

  Alt 4. Mär 2019, 10:12
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
Michael Kübler
  Mit Zitat antworten Zitat
Beach

Registriert seit: 3. Mär 2019
Ort: Hunsrück
21 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Unix Timestamp als Integer und WHERE Bedingung bei SQLIte

  Alt 4. Mär 2019, 11:59
[...]
Ist das nicht zu gross für einen Integer?
Gibt es vielleicht ein AsInt64?
[..]
Ja, es war zu groß dafür. Und es gibt ein AsLargeInt()
Damit klappt's dann auch.

Vielen Dank.
MfG Jürgen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf