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 |