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