p°edchozφ lekce (1.29) | obsah kurzu | nßsledujφcφ lekce (1.31) |
P°i indexovßnφ databßze se vytvß°φ tzv. indexov² soubor, ve kterΘm jsou umφst∞ny informace o indexovßnφ databßze. Indexov² soubor je v systΘmu KLONDAIK v₧dy stejnΘho jmΘna, jako mß databßze, mß vÜak pro rozliÜenφ p°φponu souboru *.CDX. Indexov² soubor, pokud existuje, se otevφrß v₧dy automaticky spolu s databßzφ. V jednom indexovΘm souboru mohou b²t p°itom ulo₧eny informace o n∞kolika navzßjem nezßvisl²ch indexech. Jednß se o tzv. vφcenßsobnΘ indexovΘ soubory typu CDX.
Zda je otev°enß databßze indexovßna poznßte snadno v databßzovΘm okn∞, kde je v p°φpad∞ nalezenφ index∙ mo₧no ve v²b∞rovΘm boxu vybrat existujφcφ index. Po v²b∞ru indexu je databßze ihned °azena podle po₧adovanΘho indexu. V takovΘm p°φpad∞ nemusφ souhlasit po°adφ v∞t zobrazovanΘ ve stavovΘm °ßdku databßzovΘho okna. Bude-li n∞kter² index databßze aktivnφ, bude databßze °azena ne podle Φφsla zßznamu, ale vzestupn∞ podle zadanΘho indexu. Pokud zadßte p°echod na zaΦßtek nebo konec databßze, nebude proveden p°echod podle Φφsla zßznamu, ale v₧dy podle zvolenΘho indexu!
Z programu mßte mo₧nost nastavit po₧adovan² index volßnφm funkce DbfSetOrder, kde
uvedete jako parametr jmΘno indexu, p°φpadn∞ za pou₧itφ funkce DbfTagName po°adovΘ
Φφslo indexu:
DbfSetOrder('NAZEV');
DbfSetOrder(DbfTagArea(2));
Pokud zadßte chybn² nßzev indexu, p°φpadn∞ neexistujφcφ Φφslo indexu, bude databßze
°azena podle po°adov²ch Φφsel.
Nov² index m∙₧ete vytvo°it volßnφm funkce DbfIndexTag, ve kterΘ zadßte jmΘno indexu a v²raz, ze kterΘho se index sklßdß. JmΘno indexu m∙₧e mφt maximßln∞ osm znak∙ a je mo₧nΘ si jej libovoln∞ zvolit. NejlΘpe je uvßd∞t jej podle obsahu indexu. V²raz, podle kterΘho je databßze indexovßna m∙₧e obsahovat v²raz v jazyce xBase udßvajφcφ polo₧ky databßze pro indexovßnφ. V nejjednoduÜÜφm p°φpad∞ staΦφ uvΘst pouze nßzev polo₧ky, podle kterΘ mß b²t databßze indexovßna.
NejjednoduÜÜφ je tvorba index∙ pro °et∞zcovΘ polo₧ky, proto₧e systΘm indexuje
vnit°n∞ vÜe jako °et∞zce. Nenφ takΘ problΘm p°i po₧adavku na spojenφ n∞kolika polo₧ek do
indexu:
DbfIndexTag('NAZ', 'NAZEV');
DbfIndexTag('XXX', 'TYP+NAZEV');
Pokud by polo₧ka NAZEV obsahovala texty s velk²mi i mal²mi pφsmeny, bylo by
jejich °azenφ podle v²Üe uvedenΘho indexu na prvnφ pohled trochu nelogickΘ. Zφskali
by jsme nap°φklad nßsledujφcφ po°adφ: 'aa', 'aZ', 'AA'. Je to proto, ₧e velkß a malß
pφsmena majφ p°i t°φd∞nφ rozdφln² v²znam. Pokud vÜak vytvo°φme index, ve kterΘm
p°evedeme vÜechna pφsmena v °et∞zci na stejnou velikost, bude ji₧ vÜe v po°ßdku ('aa',
'AA', 'aZ'). P°i tvorb∞ index∙ m∙₧eme proto pou₧φvat s v²hodou libovolnΘ v²razy v syntaxe
jazyk∙ xBase, kterΘ nßm umo₧nφ mnohß kouzla s indexy:
DbfIndexTag('NAZ', 'UPPER(NAZEV)');
Jednoduchß je takΘ tvorba index∙ pro numerickΘ polo₧ky. Pokud vytvß°φme index
pouze pro jednu polo₧ku, staΦφ zadat pouze jejφ jmΘno. V p°φpad∞ ₧e budeme chtφt
indexovat databßzi podle n∞kolika polo₧ek, musφme pro index vytvo°it za pou₧itφ v²raz∙
v syntaxi xBase pro indexovßnφ °et∞zec:
DbfIndexTag('CENA', 'CENA');
DbfIndexTag('XXX', 'TYP+STR(CENA,10,2)');
Je dokonce mo₧nΘ indexovat tzv. vypoΦtenΘ polo₧ky. To je takovΘ, kterΘ v databßzi ve
skuteΦnosti neexistujφ a jejich hodnota je vypoΦtena z existujφcφch polo₧ek. V
nßsledujφcφm p°φklad∞ bude cenφk indexovßn podle koneΦnΘ ceny vΦetn∞ DPH:
DbfIndexTag('CENA', 'CENA/100*(100+DPH)');
Trochu slo₧it∞jÜφ je indexovßnφ datumov²ch polo₧ek. Je to proto, ₧e aΦkoliv se tvß°φ jako
°et∞zec, vzniknul by jejich prost²m indexovßnφm podobn² problΘm jako u velk²ch a
mal²ch pφsmen v °et∞zcφch. Tentokrßt by se datovΘ polo₧ky indexovaly v po°adφ podle dn∙,
m∞sφc∙ a rok∙. Proto₧e je ale nutnΘ indexovat nejprve v rßmci roku, potom m∞sφce a
nakonec dne, budeme muset pou₧φt op∞t funkci v syntaxi xBase, kterß zajistφ p°evod data
do vhodnΘ formy pro indexovßnφ:
DbfIndexTag('DAT', 'DTOS(DATUM)');
Indexy je mo₧nΘ tvo°it bu∩ funkcφ DbfIndexTag, jak bylo v²Üe uvedeno, nebo je
mo₧nΘ vyu₧φt dialogovΘho okna, kterΘ vyvolßte z PopUp menu zobrazenΘho po kliknutφ
prav²m tlaΦφtkem myÜi na ploÜe databßzovΘho okna. Platφ p°itom stejnΘ zßsady uvedenΘ
pro tvorbu index∙ funkcφ DbfIndexTag.
V nßsledujφcφ lekci se seznßmφme s tφm, ₧e krom∞ °azenφ zßznam∙ v databßzi lze indexy pou₧φt i pro velmi rychlΘ vyhledßvßnφ zßznam∙ v databßzi.
p°edchozφ lekce (1.29) | obsah kurzu | nßsledujφcφ lekce (1.31) |