Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TClientDataset Filter für leere Feldwerte (https://www.delphipraxis.net/104892-tclientdataset-filter-fuer-leere-feldwerte.html)

Roaster 12. Dez 2007 12:15

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:
LANGU  GROUPNO  DESCRIPTION
------------------------------
DE                               <- leerer Datensatz
DE     0001      Allgemein
DE     0002      Endkunde
...
Ich habe hier schon folgendes getestet:

Delphi-Quellcode:
ClientDataset1.Filter := 'GROUPNO<>'' ''';
ClientDataset1.Filter := 'GROUPNO<>''''';
ClientDataset1.Filter := 'GROUPNO<>""';
ClientDataset1.Filter := 'GROUPNO <> ''''';
ClientDataset1.Filter := 'GROUPNO <> ''''' or GROUPNO is not null'';
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.

Irgendwelche weiter Möglichkeiten, die ich noch prüfen könnte? Danke!

DeddyH 12. Dez 2007 12:22

Re: TClientDataset Filter für leere Feldwerte
 
Delphi-Quellcode:
ClientDataset1.Filter := 'GROUPNO <> ''''' and GROUPNO is not null'';
So ist zumindest logischer ;)

Roaster 13. Dez 2007 10:12

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.

DeddyH 13. Dez 2007 11:03

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:
Feld <> '' //true
Feld is not null //false
Ist das Feld blank, ergibt sich
Delphi-Quellcode:
Feld <> '' //false
Feld is not null //true
Somit kommt immer true dabei heraus, wenn Du mit oder vergleichst.

Roaster 13. Dez 2007 11:55

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:
GROUPNO <> '' '' AND GROUPNO IS NOT NULL
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:
Delphi-Quellcode:
GROUPNO <> ''<blank>''...
Danke nochmals!


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