![]() |
Datenbank: Firebird • Version: 2.x • Zugriff über: TClientDataSet, Zeos Library
TClientDataset Filter für leere Feldwerte
Hi,
ich benutze ein TClientDataSet und die beiden Properties Filter und Filtered um leere Datensätze aus einer lokalen (embedded) Firebird 2.x Tabelle wegzufiltern. Zumindest versuche ich dies krampfhaft. Vorneweg, ich kann dies nicht in das entsprechende Select Statement aufnehmen, da ich diese 'leeren' Datensätze für Lookup-Felder benötige und genauso deshalb aufgenommen habe. Die Tabelle oder besser das Resultset der Abfrage sieht so aus:
Delphi-Quellcode:
Ich habe hier schon folgendes getestet:
LANGU GROUPNO DESCRIPTION
------------------------------ DE <- leerer Datensatz DE 0001 Allgemein DE 0002 Endkunde ...
Delphi-Quellcode:
Aber nichts half hier! Ich bekam keine Fehlermeldung oder dergleichen. Es werden nach wie vor alle Datensätze inklusives des leeren Datansatzes angezeigt. Der Datensatz mit GROUPNO = Blank soll temporär verschwinden.
ClientDataset1.Filter := 'GROUPNO<>'' ''';
ClientDataset1.Filter := 'GROUPNO<>'''''; ClientDataset1.Filter := 'GROUPNO<>""'; ClientDataset1.Filter := 'GROUPNO <> '''''; ClientDataset1.Filter := 'GROUPNO <> ''''' or GROUPNO is not null''; Irgendwelche weiter Möglichkeiten, die ich noch prüfen könnte? Danke! |
Re: TClientDataset Filter für leere Feldwerte
Delphi-Quellcode:
So ist zumindest logischer ;)
ClientDataset1.Filter := 'GROUPNO <> ''''' and GROUPNO is not null'';
|
Re: TClientDataset Filter für leere Feldwerte
Logischer find ich das jetzt aber nicht, da entweder das Feld nicht befüllt (Blank) ODER eben undefiniert (NULL) ist. Beides gleichzeitig (AND) wird nie eintreffen.
Anyway, danke für deine Meinung, nur leider funktioniert dein Vorschlag auch nicht. Ich kenn' mich mit Datenbanken v.a. SQL Datenbanken ziemlich gut aus, ein SQL Select ist für diesen Fall ebenfalls sehr schnell gebastelt, der auch einwandfrei funktioniert, nur der Filter will eben nicht und da setzt's bei mir aus, da ich die Internas der VCL nicht kenne. Soweit ich feststellen konnte wird der Filter ohnehin an irgendeine DLL Funktion weitergereicht und da verliert sich die Spur beim Debuggen. Somit kann ich nicht sagen was letztendlich am Client Dataset ankommt um das zu Debuggen. Wie gesagt ich benötigen die Leerzeile für die Pflege der Master Datensätze aber bei der Pflege der Loopup Datensätze sollen diese dem User nicht angezeigt werden, damit er diese nicht versehentlich löscht. |
Re: TClientDataset Filter für leere Feldwerte
Hilft Dir jetzt zwar nicht, aber ich erkläre Dir mal meinen Vorschlag:
wenn das Feld NULL ist, tritt folgender Vergleich ein
Delphi-Quellcode:
Ist das Feld blank, ergibt sich
Feld <> '' //true
Feld is not null //false
Delphi-Quellcode:
Somit kommt immer true dabei heraus, wenn Du mit oder vergleichst.
Feld <> '' //false
Feld is not null //true |
Re: TClientDataset Filter für leere Feldwerte
Danke Deddy,
leuchtet jetzt ein. Bin tatsächlich mit den '<>' und 'is not' durcheinanderkommen. Aber was jetzt besser ist, ist die Tatsache, dass
Delphi-Quellcode:
funktioniert! Du wirst dich jetzt sicher fragen, was der Unterschied von meinem zu deinem Vorschlag ist. Es ist das Leerzeichen innerhalb der ersten beiden Hochkommas:
GROUPNO <> '' '' AND GROUPNO IS NOT NULL
Delphi-Quellcode:
Danke nochmals!
GROUPNO <> ''<blank>''...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 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