![]() |
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:
Ja wie will TQuery den Filter denn nun serviert bekommen!?!
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; Vielleicht seh ich auch nur den Wald vor Bäumen nicht. Viele Grüße. |
Re: TQuery filtern funktioniert nicht
Hallo!!
Eventuell muß das Datum-Format ja xx-yy-zzzz lauten. SCRaT |
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:
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...
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; Grüße vom marabu |
Re: TQuery filtern funktioniert nicht
Hallo,
und ausserdem könte Date auch eine Time-Eintrag mit enthalten. Nimm einfach ein where mit ParamByName Heiko |
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