p°edchozφ lekce (1.28) | obsah kurzu | nßsledujφcφ lekce (1.30) |
Pokud pot°ebujeme zobrazit z databßze pouze urΦitΘ zßznamy podle zadanΘ podmφnky, m∙₧eme nastavit na databßzi filtr, se kter²m jsme se seznßmili v p°edchozφ lekci kurzu. Filtrovßnφ databßze je vÜak v²hodnΘ pouze p°i prohlφ₧enφ databßze v okn∞. Pokud je ale u rozsßhlΘ databßze pou₧it filtr, kter² vybere pouze malou Φßst databßze, m∙₧e b²t zobrazovßnφ vyhovujφcφch zßznam∙ pomalΘ. Pokud proto nepo₧adujete pou₧φt filtr pro v²b∞r vyhovujφcφch zßznam∙ v databßzovΘm okn∞, ale p°φmo v programu, je v²hodn∞jÜφ pou₧φt dßle popsanΘho zp∙sobu.
Pou₧ijeme zadßnφ ·kolu z p°edchozφ lekce, kdy mßme zv²Üit v cenφku ceny, kterΘ
jsou vΦetn∞ DPH menÜφ ne₧ 1000,- KΦ. 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 prochßzφme databßzφ
zßznam po zßznamu od jejφho poΦßtku a kontrolujeme nßmi zadanou podmφnku.
Pokud zßznam vyhovuje, provedeme po₧adovanΘ akce. V naÜem p°φpad∞ zv²Üenφ ceny.
Unit Dbf_3;
interface
implementation
begin
ConsoleClear;
ConsoleShow;
If DbfUse('CENIK') then {pokud se otev°ela databßze}
begin
DbfGoTop; {skok na zaΦßtek databßze}
While not DbfEof do {dokud nenφ konec databßze}
begin
If DbfEvalNum('CENA/100*(100+DPH)')<1000 then
begin
Writeln(DbfReadStr('NAZEV'));
{pokud cena s danφ menÜφ ne₧ 1000 KΦ}
DbfWriteNum('CENA',DbfReadNum('CENA')*1.1);
{zv²Üenφ ceny o 10 %}
end;
DbfSkip(1); {skok na dalÜφ zßznam}
end;
DbfUse(''); {databßzi uzav°eme}
end else
ShowMessage('Databßzi nebylo mo₧nΘ otev°φt !');
end;
end;
end.
Jak jist∞ sami post°ehnete, je v²Üe uveden² program je znaΦn∞ neefektivnφ. Prochßzφ
vÜechny zßznamy v databßzi a kontroluje spln∞nφ zadanΘ podmφnky. Pouze pokud je
spln∞na, provede zv²Üenφ ceny. Neefektivita vznikß tφm, ₧e se prochßzφ sekvenΦn∞
(postupn∞) vÜechny zßznamy p°φmo v programu. Mnohem v²hodn∞jÜφ je p°ece ponechat
v²b∞r po₧adovan²ch zßznam∙ p°φmo systΘmu. Berte proto v²Üe uvedenΘ °eÜenφ pouze
jako ukßzku slo₧it∞jÜφho zpracovßnφ databßze zßznam po zßznamu.
K vyhledßnφ zßznamu podle zadanΘ podmφnky lze v²hodn∞ pou₧φt volßnφ funkce
DbfLocate. Ta sama prochßzφ databßzi a hledß zßznam podle zadanΘ podmφnky. Hledßnφ
je proto mnohem rychlejÜφ, ne₧ v²Üe uvedenΘ sekvenΦnφ prohledßvßnφ databßze. Pro
hledßnφ dalÜφho vyhovujφcφho zßznamu se potom pou₧φvß volßnφ funkce DbfContinue, kterß
hledß dalÜφ vyhovujφcφ zßznam. AΦkoliv ob∞ uvedenΘ funkce vracφ p°φmo Φφslo nalezenΘho
zßznamu v databßzi, pou₧φvß se Φast∞ji indikace nalezenφ konce databßzovΘho souboru.
Unit Dbf_4;
interface
implementation
begin
ConsoleClear;
ConsoleShow;
If DbfUse('CENIK') then {pokud se otev°ela databßze}
begin
DbfLocate('(CENA/100*(100+DPH))<1000');
While not DbfEof do {dokud nenφ konec databßze}
begin
DbfWriteNum('CENA',DbfReadNum('CENA')*1.1);
{zv²Üenφ ceny o 10 %}
Writeln(DbfReadStr('NAZEV'));
DbfContinue; {hledßnφ dalÜφho zßznamu}
end;
DbfUse(''); {databßzi uzav°eme}
end else
ShowMessage('Databßzi nebylo mo₧nΘ otev°φt !');
end;
end;
end.
A₧ dosud jsme pracovali s databßzφ, kterß byla se°azena podle po°adφ zßpisu
zßznam∙ do databßze. V nßsledujφcφ lekci se seznßmφme s mo₧nostmi, jak databßzi
se°adit a prohlφ₧et podle zadanΘ polo₧ky. To nßm nßsledn∞ i umo₧nφ rychlΘ vyhledßvßnφ.
p°edchozφ lekce (1.28) | obsah kurzu | nßsledujφcφ lekce (1.30) |