[gelöst] Maximalwert in Datenfeld ermitteln, SQLite

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
gladio
Beiträge: 125
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-32/64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 32/64Bit
Wohnort: Rügen

[gelöst] Maximalwert in Datenfeld ermitteln, SQLite

Beitrag von gladio »

Ich versuche in einer SQLite-Datenbanktabelle in einem Feld einen Maximalwert zu ermitteln.
Die Tabelle enthält ein Datenfeld Datum.
Ich möchte mit folgender Abfrage

Code: Alles auswählen

select MAX(Datum) as FDatum from Tabelle
den größten Datumswert zu ermitteln.
In einem Admin-Tool für SQLite-Datenbanken wird das gewünschte Ergebnis problemlos geliefert.
Beim Einbau in mein Programm wird das Datum nicht ordnungsgemäß ermittelt.
Ergebnis ist 30.12.1899
Natürlich kann das größte Datum auch anders ermittelt werden.
Aber warum funktioniert das hier nicht per MAX() (oder MIN, geht auch nicht) :cry:

hier noch die Code-Sequenz

Code: Alles auswählen

  ZQFest.ExecSQL;
  FestDatum:=ZQFestFDatum.AsDateTime;
  ZQFest.Close;
Win 10/64, Zeos, Lazarus 2.0.8
Zuletzt geändert von gladio am So 5. Jul 2020, 11:32, insgesamt 1-mal geändert.

Epcop
Beiträge: 99
Registriert: Di 29. Mai 2012, 09:36

Re: Maximalwert in Datenfeld ermitteln, SQLite

Beitrag von Epcop »

Code Teil sieht falsch aus.

Code: Alles auswählen

 ZQuery1.SQL.Clear;
 ZQuery1.SQL.Text := 'select MAX(Datum) as FDatum from Tabelle';
 ZQuery1.Open;
ShowMessage(ZQuery1.FieldByName('FDatum').AsString);
LG

gladio
Beiträge: 125
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-32/64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 32/64Bit
Wohnort: Rügen

Re: Maximalwert in Datenfeld ermitteln, SQLite

Beitrag von gladio »

Ich habe es gelöst, dank deinem Codeschnipsel:
Mein Code ist nicht grundsätzlich fehlerhaft.
Meine Annahme, dass MAX() den gleichen Datentyp liefert wie das Datenfeld definiert ist, war falsch.
MAX() liefert String zurück und nicht wie ich dachte DateTime.
Sieht jetzt so aus:

Code: Alles auswählen

  ZQFest.Open;
  sFestDatum:=copy(ZQFestFDatum.AsString,9,2)+'.'
    +copy(ZQFestFDatum.AsString,6,2)+'.'
    +copy(ZQFestFDatum.AsString,1,4);
  FestDatum:=StrToDate(sFestDatum);
  ZQFest.Close;
SQLStatement steht in der Query.
Die Konvertierung in Datum-Type könnte noch optimiert werden, funktioniert aber so.

Danke.

Antworten