Delphi - Adattábla szűrési lehetőségei

forráskód letöltése
Ha egy adatbázis táblának, vagy lekérdezésnek csak egy meghatározott feltételnek megfelelő rekordjait szeretnénk látni, mondjuk egy DBGrid-ben, akkor azt kétféleképpen tehetjük meg: az első módszer az, hogy egy TQuery komponens segítségével lekérdezzük a feltételnek megfelelő rekordokat. Ez nem túl kényelmes megoldás, és nem is használható minden esetben. A másik megoldás az, hogy egy ún. szűrőt adunk meg, ami nem más, mint az a feltétel, aminek a megjelenítendő rekordoknak meg kell felelniük. Ez utóbbiról lesz szó ebben a cikkben. A példaprogram futtatásához szükség van a Delphi által telepített példa adatbázisra, amely a DBDEMOS alias alatt érhető el!

Minden TBDEDataset osztályból származó komponensnek vagy egy Filter, egy Filtered és egy FilterOptions property-je. Ezekről lesz szó ebben a cikkben.

A Filter property sztring típusú, és ebben kell megadnunk azt a feltételt, ami a rekordok megjelenítésének feltétele lesz. A feltételt hasonlóan kell megadnunk, mint egy SQL lekérdezésben a "WHERE" kulcsszó után. Az alábbi példa egy olyan szűrőt hoz létre, amely csak az "A" betűvel kezdődő, vagy "Béla" nevű, és 25 évnél idősebb embereket jeleníti meg:
Table1.Filter:='(NEV=''A*'' OR NEV=''Béla'') AND KOR<25';
Természetesen a Table1-nek kell, hogy legyen egy NEV és egy KOR nevű mezője! A fenti példa azt is bemutatja, hogy a sztring típusú adatokat lehet "*"-al rövidíteni. Ez nem minden esetben lehetséges, majd a későbbiekben látni fogjuk.

Ha a feltételt megadtuk, az még nem azt jelenti, hogy az eredményt azonnal láthatjuk. Ehhez ugyanis a Filtered property értékét true-ra kell állítanunk. Ha ezt megtettük, akkor már csak a feltételnek megfelelő rekordok jelennek meg, és a táblát úgy kezelhetjük, mintha csak ezeket a rekordokat tartalmazná. Tehát a First és Last, EOF, BOF, RecordCount stb. függvények is ennek megfelelően fognak működni.
Ha a Filtered property értéke false, akkor az összes rekord látható lesz, függetlenül a Filter property értékétől.

A harmadik property, amivel még foglalkoznunk kell a témával kapcsolatban a FilterOptions. Ebben a szűrőfeltételek bizonyos tulajdonságait szabályozhatjuk. Ez egy tömb típusú property, aminek két eleme lehet:
  • foCaseInsensitive: a sztring típusú mezőknél nem tesz különbséget a kis- és nagybetűk között. Például a fenti példában a "Béla" és a "BÉLA" egyenlő.
  • foNoPartialCompare: ha ez be van állítva, akkor a "*" karakterrel nem lehet rövidíteni a sztring típusú értékeket. Például a fenti példában az "A*" nem az "A"-val kezdődő nevű, hanem ténylegesen az "A*" nevű embereket fogja jelenteni.
Table1.FilterOptions:=[foCaseInsensitive];