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