Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TQuery filtern funktioniert nicht (https://www.delphipraxis.net/99841-tquery-filtern-funktioniert-nicht.html)

little-x 18. Sep 2007 15:15

Datenbank: Informix • Version: 9 • Zugriff über: Native Treiber

TQuery filtern funktioniert nicht
 
Hallo!

ich nutze eine TQuery, die, wenn ich ein Datumsfeld filtere (Eigenschaft Filter = ...), keinen Treffer bringt, obwohl der Datensatz nachweislich da ist. Es handelt sich um ein Datumsfeld.

Ich verwendet Informix. Der Feldtyp ist DATE, zum Arbeiten mit den Query-FieldValues in Delphi verwende ich den Typ TDateTime, womit ich nie Probleme hatte. Jetzt will ich ein Datumsfeld filtern. Nur krieg ichs nicht hin!

Folgende Varianten habe ich probiert und hab dabei folgendes beobachtet:

z.B.
Delphi-Quellcode:
procedure test;
   var dateTimeVar: TDateTime;
begin

   dateTimeVar = encodeDate(2001,1,1);
        qry.Filter:= 'datum = ''' + dateToStr(dateTimeVar) + '''';
        // der Filter lautet: >datum = '01.01.2001'<
        // kommt zwar kein Fehler, aber er findet auch keinen Datensatz.
end;

Weitere Variante:
Delphi-Quellcode:
procedure test;
   var dateTimeVar: TDateTime;
begin
   dateTimeVar = encodeDate(2001,1,1);
   qry.Filter:= 'datum = ' + floattostr(dateTimeVar);
        // der Filter lautet: >datum = 36892<
        // Fehlermeldung:  >'36892' ist kein gültiges Datum.<
end;
Ja wie will TQuery den Filter denn nun serviert bekommen!?!

Vielleicht seh ich auch nur den Wald vor Bäumen nicht.

Viele Grüße.

scrat1979 18. Sep 2007 16:09

Re: TQuery filtern funktioniert nicht
 
Hallo!!

Eventuell muß das Datum-Format ja xx-yy-zzzz lauten.

SCRaT

marabu 18. Sep 2007 21:05

Re: TQuery filtern funktioniert nicht
 
Hallo,

da du mit TQuery arbeitest ist es eventuell vorteilhafter, wenn du die Selektion über eine WHERE Klausel machst. In der Filter-Eigenschaft wird ein Datum-Literal in dem durch ShortDateFormat festgelegten Format angegeben, was du in deinem ersten Versuch richtig gemacht hast. Bist du sicher, dass das Feld "datum" den Typ "date" besitzt? Bei "datetime" müsstest du einen Intervalltest durchführen, damit du Treffer erhältst.

Delphi-Quellcode:
procedure test;
var
  dt: TDateTime;
  dtMin, dtSup: string;
begin
  dt := EncodeDate(2001, 1, 1);
  dtMin := QuotedStr(DateToStr(dt));
  dtSup := QuotedStr(DateToStr(dt + 1));
  qry.Close;
  // hier einer von mehreren möglichen Ansätzen
  qry.Filter := Format('datum >= %s and datum < %s', [dtMin, dtSup]);
  qry.Filtered := True;
  qry.Open;
end;
Falls das Feld doch vom Typ DATE sein sollte, dann erweitere mal das Testintervall, bis du Treffer erhältst. Nicht das du am Ende feststellst, dass du mit den falschen Daten getestet hast...

Grüße vom marabu

hoika 19. Sep 2007 13:18

Re: TQuery filtern funktioniert nicht
 
Hallo,

und ausserdem könte Date auch eine Time-Eintrag mit enthalten.
Nimm einfach ein where mit ParamByName


Heiko

little-x 19. Sep 2007 13:20

Re: TQuery filtern funktioniert nicht
 
Hallo,

danke für die antworten. Das Systemdatum (registry-Eintrag) war nicht entsprechend gesetzt.

Viele Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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