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.


'program DBF_5.BPR
ConsoleClear
ConsoleShow
If DbfUse("CENIK") then      'pokud se otevřela databáze
   If DbfSetOrder("NAZ") = 0 then
      'pokud neexistuje index NAZEV, tak jej vytvoříme
      call DbfIndexTag("NAZ", "UPPER(NAZEV)")
   end if
   DbfSetOrder("NAZ")        'nastavíme index podle názvu
   DbfSeek("FAX")            'hledáme text FAX
   IF DbfFound then          'pokud je nalezen
      Writeln(DbfReadStr("NAZEV"))
   Else
      Writeln("Záznam nebyl nalezen")
   End If
Else
   ShowMessage("Databázi 'CENIK.DBF' nebylo možné‚ otevřít !")
End If
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