AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Filter geht nicht

Ein Thema von AnonyM.E · begonnen am 28. Sep 2019 · letzter Beitrag vom 30. Sep 2019
Antwort Antwort
AnonyM.E

Registriert seit: 26. Apr 2019
11 Beiträge
 
#1

Filter geht nicht

  Alt 28. Sep 2019, 23:19
Datenbank: SQLite • Version: 3 • Zugriff über: delphi
Hallo zusammen,

Der folgende Code filtert irgendwie nicht und ich habe keine Idee mehr, warum der Filter nicht funktioniert.

Code:
    // 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;
FDTableJournal6.Filter ist:
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!
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#2

AW: Filter geht nicht

  Alt 29. Sep 2019, 08:09
Moin...
Dein Problem hat mehrere Ursachen.

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.
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. Wenn du mal in einem Team arbeiten solltest, mußt du dich nicht umgewöhnen.
Delphi-Quellcode:
// 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;
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.

Geändert von haentschman (29. Sep 2019 um 08:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Filter geht nicht

  Alt 29. Sep 2019, 11:05
FDTableJournal6.Filter ist:
zeitpunkt > '28.09.2019 04:00:00' and zeitpunkt <= '29.09.2019 04:00:00'


In der Tabelle ist definitiv ein Wert
2019-09-28 21:48:08.708
enthalten
Was ist denn jetzt dasrichtige Format?

Ansonsten siehe Haentschmann!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
557 Beiträge
 
Delphi XE6 Enterprise
 
#4

AW: Filter geht nicht

  Alt 30. Sep 2019, 11:16
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;
  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 13:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz