Lekce 1.31
Hledßnφ v databßzi dle index∙


p°edchozφ lekce (1.30) obsah kurzu nßsledujφcφ lekce (1.32)

V²hodou indexovßnφ databßze je krom∞ °azenφ podle index∙ i mo₧nost rychlΘho vyhledßvßnφ podle zadanΘho klφΦe. Vyhledßvat podle index∙ je p°itom mo₧nΘ pouze podle indexovan²ch polo₧ek databßze.

Pokud budete chtφt vyhledat nap°φklad v adresß°i konkrΘtnφ jmΘno, musφte si nejprve nastavit index podle jmΘna. Nßsledn∞ m∙₧ete vyhledat po₧adovanΘ jmΘno bu∩ volßnφm funkce DbfSeek, p°φpadn∞ PopUp volbou z databßzovΘho okna. Bude-li zadanΘ jmΘno v databßzi existovat, p°esune se ukazatel databßze na zßznam s uveden²m jmΘnem. Pokud zadanΘ jmΘno v databßzi neexistuje, p°esune se ukazatel databßze automaticky na nejbli₧Üφ nßsledujφcφ zßznam. Tedy na nßsledujφcφ v °azenφ dle abecedy, p°φpadn∞ podle velikosti Φφsla.

P°i vyhledßvßnφ podle index∙ nemusφte zadßvat cel² klφΦ, staΦφ pouze jeho zaΦßtek. V takovΘm p°φpad∞ systΘm hledß podle zadanΘho °et∞zce a nastavφ databßzov² ukazatel na prvnφ vyhovujφcφ zßznam. Pokud tedy zadßte pro vyhledßvßnφ nap°φklad pφsmeno "H", bude nalezen a zobrazen prvnφ zßznam zaΦφnajφcφ uveden²m pφsmenem.

Funkce DbfSeek vracφ logickou informaci o tom zda bylo hledßnφ dle klφΦe ·sp∞ÜnΘ. Navφc je p°i ka₧dΘm hledßnφ v databßzi do p°φznaku DbfFound nastavena informace o ·sp∞Ünosti hledßnφ. P°φznak lze testovat volßnφm funkce DbfFound pro provedenφ libovoln²ch nßsledn²ch akcφ.

Vyhledßvßnφ v databßzi se provßdφ p°esn∞ podle zadanΘho klφΦe vΦetn∞ respektovßnφ velk²ch a mal²ch pφsmen v databßzi i vyhledßvacφm klφΦi. Proto je mo₧nΘ zadat p°i tvorb∞ indexu jeho p°evod na velkß pφsmena jak bylo uvedeno v p°edchozφ lekci. Pokud potom p°i zadßvßnφ klφΦe provedete takΘ jeho konverzi na velkß pφsmena, bude odpovφdajφcφ zßznam nalezen v₧dy bez ohledu na zadßnφ mal²ch a velk²ch pφsmen.


Unit Dbf_5;
interface
implementation

begin
   ConsoleClear;
   ConsoleShow;
   If DbfUse('CENIK') then      {pokud se otev°ela databßze}
   begin
      If DbfSetOrder("NAZ") = 0 then
         {pokud neexistuje index NAZEV, tak jej vytvo°φme}
         DbfIndexTag('NAZ', 'UPPER(NAZEV)');
      DbfSetOrder('NAZ');       {nastavφme index podle nßzvu}
      DbfSeek('FAX');           {hledßme text FAX}
      IF DbfFound then      {pokud nenφ nalezen}
      begin
         Writeln(DbfReadStr('NAZEV'));
      end else
         Writeln('Zßznam nebyl nalezen');
      DbfUse('');           {databßzi uzav°eme}
   end else
      ShowMessage('Databßzi nebylo mo₧nΘ otev°φt !');
   end;
end;
end.
Pou₧φvßnφ indexovßnφ databßzφ mß mnoho v²hod a p°ednostφ. Bohu₧el, existujφ i n∞kterΘ zßpornΘ vlasti, se kter²mi vßs nynφ seznßmφme. Pokud byste vytvo°ili v databßzi mnoho index∙, mohlo by b²t jejich zpracovßnφ pomalejÜφ. Nev²hodou je souΦasn∞ i prostor, kter² zabφrajφ indexy v souborech na disku poΦφtaΦe.

Pokud nenφ nutnΘ pou₧φvat databßzi se°azenou podle index∙, vypn∞te jejich nastavenφ funkcφ DbfSetOrder. Zpracovßnφ bude probφhat rychleji. N∞kdy se mohou indexy (soubor na disku) poruÜit a v takovΘm p°φpad∞ je vhodnΘ provΘst procedurou DbfReindex jejich obnovu.

Nenφ mo₧nΘ zruÜit pouze jeden index z databßze. Lze zruÜit pouze vÜechny indexy najednou. To je mo₧nΘ provΘst zruÜenφm souboru, kter² mß jmΘno shodnΘ s databßzφ, p°φponu mß *.CDX.


p°edchozφ lekce (1.30) obsah kurzu nßsledujφcφ lekce (1.32)

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