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