![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: delphi
Filter geht nicht
Hallo zusammen,
Der folgende Code filtert irgendwie nicht und ich habe keine Idee mehr, warum der Filter nicht funktioniert.
Code:
FDTableJournal6.Filter ist:
// Saldo bestimmen
if not FDTableJournal6.Active then FDTableJournal6.Active := True; FDTableJournal6.Filter := 'zeitpunkt > ' + QuotedStr(DateTimeToStr(ZeitraumVon)) + ' and ' + 'zeitpunkt <= ' + QuotedStr(DateTimeToStr(ZeitraumBis)) + ''; FDTableJournal6.Filtered := True; FDTableJournal6.Refresh; FDTableJournal6.First; //Button_zurück.Text := IntToStr(FDTableJournal6.RecordCount); while not FDTableJournal6.Eof do begin Saldo := Saldo + FDTableJournal6.FieldByName('preisgesamt'). AsFloat; FDTableJournal6.Next; end; zeitpunkt > '28.09.2019 04:00:00' and zeitpunkt <= '29.09.2019 04:00:00' zeitpunkt in der Tabelle ist vom Typ Timestamp In der Tabelle ist definitiv ein Wert 2019-09-28 21:48:08.708 enthalten In RecordCount sind immer 0 Elemente. Ich verstehe den Grund nicht :| Es ist eine SQLite-Datenbank und ich benutze Delphi 10.3 In einer anderen Tabelle funktioniert der Filter. Hat jemand eine Idee? Danke! :? |
AW: Filter geht nicht
Moin...:P
Dein Problem hat mehrere Ursachen. :stupid: 1. Kein Mensch mehr benutzt TTable (oder die Equivalente). Bei einer Tabelle werden immer ALLE Daten geladen. Das mag am Anfang funktionieren, je mehr Daten du hast, wird es immer langsamer. :? 2. Benutze immer eine Query. Da holst du nur die Daten die du auch benötigst. :thumb: 3. Bei einer Query benutze immer Parameter! 4. Tu dir selbst einen Gefallen, und benutze sprechende Namen für Variablen, Komponenten und Felder in englisch. :zwinker: Wenn du mal in einem Team arbeiten solltest, mußt du dich nicht umgewöhnen. :wink:
Delphi-Quellcode:
PS: Da ich ohne Filter arbeite, kann ich nur raten. Das Problem liegt mit Sicherheit an der "Konvertierung" der DateTime Daten im Filterstring. Mit Parametern hast du das nicht.
// Saldo bestimmen
FDQuery.SQL.Text := 'select Price from PriceTable where PriceDate between :DAF and :DAT'; FDQuery.ParamByName('DAF').AsDateTime := DateFrom; // direkt als Date ohne Konvertierung FDQuery.ParamByName('DAT').AsDateTime := DateTo; // Ich hoffe nur, daß dein Feld in der Datenbank auch DateTime ist. FDQuery.Open; while not FDQuery.Eof do begin Saldo := Saldo + FDQuery.FieldByName('Price').AsFloat; FDQuery.Next; end; |
AW: Filter geht nicht
Zitat:
Ansonsten siehe Haentschmann! Gruß K-H |
AW: Filter geht nicht
Ergänzend zu den Ausführungen von haentschman: warum lässt Du nicht die Datenbank das Aufsummieren erledigen?
Delphi-Quellcode:
// Saldo bestimmen
FDQuery.SQL.Text := 'select SUM(Price) AS Saldo from PriceTable where PriceDate between :DAF and :DAT'; FDQuery.ParamByName('DAF').AsDateTime := DateFrom; // direkt als Date ohne Konvertierung FDQuery.ParamByName('DAT').AsDateTime := DateTo; // Ich hoffe nur, daß dein Feld in der Datenbank auch DateTime ist. FDQuery.Open; Saldo := FDQuery.FieldByName('Saldo').AsFloat; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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-2025 by Thomas Breitkreuz