p°edchozφ lekce (1.28) | obsah kurzu | nßsledujφcφ lekce (1.30) |
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.
'program DBF_3.BPR
ConsoleClear
ConsoleShow
If DbfUse("CENIK") then 'pokud se otev°ela databßze
DbfGoTop 'skok na zaΦßtek databßze
Do Until DbfEof 'dokud nenφ konec databßze
If DbfEvalNum("CENA/100*(100+DPH))<1000") then
Writeln(DbfReadStr("NAZEV"))
'pokud cena s danφ menÜφ ne₧ 1000 KΦ
Call DbfWriteNum("CENA",DbfReadNum("CENA")*1.1)
'zv²Üenφ ceny o 10 %
End If
DbfSkip(1) 'skok na dalÜφ zßznam
Loop
Else
ShowMessage("Databßzi 'CENIK.DBF' nebylo mo₧nΘé otev°φt !")
End If
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.
'program DBF_4.BPR
ConsoleClear
ConsoleShow
If DbfUse("CENIK") then 'pokud se otev°ela databßze
DbfLocate("(CENA/100*(100+DPH))<1000")
Do Until DbfEof 'dokud nenφ konec databßze
Call DbfWriteNum("CENA", DbfReadNum("CENA")*1.1)
'zv²Üenφ ceny o 10 %
Writeln(DbfReadStr("NAZEV"))
DbfContinue 'hledßnφ dalÜφho zßznamu
Loop
Else
ShowMessage("Databßzi 'CENIK.DBF' nebylo mo₧nΘ otev°φt !")
End If
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) |