předchozí lekce (1.27) | obsah kurzu | následující lekce (1.29) |
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) |