Lekce 1.29
SekvenΦnφ prohledßvßnφ databßze


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.


'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)

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