Lekce 1.28
Nastavení filtru, podmínky xBase


předchozí lekce (1.27) obsah kurzu následující lekce (1.29)

Pokud budete potřebovat omezit počet záznamů zobrazených v databázi, máte možnost nastavit filtr na zobrazení dat. To znamená, že určíte podmínky, za kterých mají být záznamy databáze přístupné. Můžete například nastavit, že mají být z ceníku přístupné pouze záznamy, u nichž je cena menší než 100. Lze také nastavit sloučení několika podmínek. Například cena je větší než 100 a zároveň menší než 200. S takto filtrovanou databází můžete provádět další akce, například tisknout sestavu, do které však budou zahrnuty pouze záznamy vyhovující zadanému filtru. Databáze zůstává přitom beze stále beze změny a nevyhovující záznamy jsou stále v databázi obsaženy. Po zrušení filtru budou dále běžně přístupné.

Filtr na databázi můžete nastavit voláním procedury DbfSetFilter, kdy se zadává přímo podmínka filtru v syntaxi jazyků xBase. Příklad zadání výše uvedené podmínky:


DbfSetFilter('CENA>100.AND.CENA<200');
Pokud byste chtěli nastavit filtr pro cenu menší než 100 nebo větší než 200, museli byste zadat:

DbfSetFilter('CENA<100.OR.CENA>200');
V podmínce filtru se používají přímo funkce v syntaxi jazyků xBase (databázové jazyky Dbase, FoxPro, Clipper), se kterými jsme se již seznámili v předchozích lekcích kurzu.

Další možností nastavení filtru je použití dialogového okna, který vyvoláte volbou 'Nastavit filtr' z PopUp menu zobrazeného po kliknutí pravým tlačítkem myši na ploše databázového okna. Zobrazí se dialogové okno, ve kterém je v levé části zobrazena struktura databáze s uvedením typu položek a jejich délek. Okno slouží ke snadnému zadání podmínky filtru bez nutnosti vypisování všech údajů. To je nahrazeno kliknutím myší na nabízenou variantu.

Ve střední části okna je uveden seznam funkcí v syntaxi xBase použitelných k zadání podmínky filtru. V pravé části okna jsou nahoře zobrazeny tlačítka s možnými operacemi s daty (rovná se, menší, větší, menší nebo rovno, větší nebo rovno, nerovná se apod.). V pravé střední části obrazovky jsou zobrazena tlačítka pro spojování podmínek (.AND., .OR.,.NOT.). Ve spodní části okna je zobrazována podmínka filtru s možností její editace z klávesnice. V pravé dolní části obrazovky jsou umístěna tlačítka pro uzavření okna se zadáním požadované akce. Kliknete-li na tlačítko zrušit, nebude filtr nastaven. Kliknitím na tlačítko 'Nastavit filtr' aktivujete v případě jeho správného sestavení zadaný filtr, data budou omezena dle zadané podmínky.

Požadovaný výraz pro nastavení filtru máte možnost zadat přímo z klávesnice ve spodní části dialogového okna. Máte také možnost použít tlačítek pro pohodlné zadávání jednotlivých elementů výrazu pro nastavení filtru. V případě požadavku zadání výše uvedeného filtru by jsme postupovali následujícím způsobem:

1) Po kliknutí myší na položku CENA v levé části okna se zobrazí položka ve spodní části okna, kde je podmínka sestavována.

2) Klikneme myší na symbol > který je umístěn v pravé horní části okna. Symbol se zobrazí i v sestavované podmínce.

3) Z klávesnice dopíšete hodnotu 100.

4) Kliknete v pravé střední části obrazovky na tlačítko .AND. symbolizující spojení podmínky.

5) Obdobným způsobem doplníte druhou část filtru, to je CENA<200

6) Filtr aktivujete kliknutím na tlačítko Nastavit.

Po aktivaci filtru se zadaná podmínka zobrazí v horní části databázového okna. V takovém případě se zobrazují pouze data vyhovující zadané podmínce. Pokud chcete podmínku deaktivovat, vyvolejte opět okno pro zadání filtru a uzavřete jej tlačítkem Zrušit. Filtr bude deaktivován a budou opět zobrazována všechna data.

Filtr máte samozřejmě možnost nastavit i přímo z programu. Pokud například potřebujete zvýšit v ceníku ceny, které jsou včetně DPH větší než 1000,- Kč můžete použít následující program využívající následující program. Pro ty z vás, kteří neví co je to DPH bude stačit, vysvětlení, že se jedná o zvýšení ceny v procentech, jehož hodnota je uvedena v položce DPH. Jedná se o daň z přidané hodnoty. V programu nejprve nastavíme filtr a následně již zpracujeme každý záznam. Nevyhovující záznamy jsou díky nastavenému filtru nepřístupné.


Unit Dbf_2;
interface
implementation

begin
   ConsoleClear;
   ConsoleShow;
   IF DbfUse('CENIK') then     {pokud se otevřela databáze}
   begin
      DbfSetFilter('(CENA/100*(100+DPH))<1000');
      {nastavit filtr pokud cena s daní menší než 1000 Kč}
      DbfGoTop;                {skok na začátek databáze}
      While not DbfEof do      {dokud není konec databáze}
      begin
         DbfWriteNum('CENA',DbfReadNum('CENA')*1.1);
         {zvýšení ceny o 10 %}
         Writeln(DbfReadNum('CENA'));
         DbfSkip(1);           {skok na další záznam}
      end;
      DbfSetFilter('');        {zrušit nastavený filtr}
      DbfUse(');              {databázi uzavřeme}
   end else
      ShowMessage('Databázi nebylo možné otevřít !');
   end;
end;
end.
V následující lekci se seznámíme i s dalšími možnostmi řešení výše uvedeného úkolu.
předchozí lekce (1.27) obsah kurzu následující lekce (1.29)

OZOGAN, 1 Máje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz