Lekce 1.32
Rušení záznamů v databázi


předchozí lekce (1.31) obsah kurzu následující lekce (1.33)

Jak jsme se již dříve seznámili, lze záznamy z databáze velmi jednoduše zrušit. Protože je však zrušení záznamů řešeno ve dvou stupních, seznámíme se s ním nyní podrobněji. Nejdříve však jedno velmi důležité upozornění a varování. Nezasahujte jakýmkoliv způsobem do databází, které jsou využívány jiným systémem. To znamená nejen nyní zmiňované rušení záznamů, ale také jakákoliv změny dat.

Z databázového okna lze záznam zrušit pouze pokud máte nastavenou možnost editace záznamů. Tato možnost se nastavuje v PopUp menu, které se zobrazí pokud kliknete pravým tlačítkem myši na ploše databázového okna. Možnost editace se přepíná v horní řádce menu. Pokud je editace možná, je tato volba v menu zatržena a v horní liště databázového okna se zobrazí vedle šipek navigátoru nová ikona sloužící k výmazu a obnovení záznamů.

Pokud jsme nastaveni v databázovém okně na záznam, který není označen na zrušení a klikneme na ikonu výmazu, bude aktuální záznam označen ke zrušení. Poznáme to tak, že se ve stavovém řádku databázového okna zobrazí vedle čísla záznamu indikace "[Deleted]". Pokud by jsme klikli na ikonu výmazu znovu, byla by opět obnovena plná platnost databázového záznamu. Výmazová ikona tedy slouží jako přepínač. Platný záznam označí ke zrušení, u označeného záznamu obnoví jeho původní platnost.

Z programu je možné zrušit záznam procedurou DbfDelete, obnovit platnost záznamu lze procedurou DbfRecall. To, zda je záznam určen ke zrušení zjistíme voláním funkce DbfDeleted. Pokud by jsme potřebovali zkontrolovat záznamy a obnovit jejich platnost v celé databázi, můžete tak učinit následujícím programem:


Unit Dbf_6;
interface
implementation

begin
   ConsoleClear;
   ConsoleShow;
   If DbfUse('CENIK') then    {pokud se otevřela databáze}
   begin
      DbfGoTop;               {skok na začátek databáze}
      While not DbfEof do     {dokud není konec databáze}
      begin
         If DbfDeleted then   {pokud záznam označen ke zrušení}
         begin
            DbfRecall;        {obnovíme platnost záznamu}
            Writeln(DbfReadStr('NAZEV'));
         end;
         DbfSkip(1);          {skok na další záznam}
      end;
      DbfUse('');             {databázi uzavřeme}
   end else
      ShowMessage('Databázi nebylo možné otevřít !');
   end;
end;
end.
Záznamy určené ke zrušení se z databáze definitivně odstraní voláním procedury DbfPack, která zruší najednou všechny označené záznamy v databázi. POZOR !!! Jde již o zrušení nevrané a označené záznamy budou definitivně z databáze odstraněny.

Někdy by mohlo být vhodnější, kdyby jsme nemuseli záznamy z databáze rušit, přesto by byly nepřístupné. To je samozřejmě také možné. Jednou z možností by bylo nastavit filtr podle požadované platnosti záznamů voláním procedury:


DbfSetFilter('.NOT.DELETED()');  {pouze platné záznamy}
DbfSetFilter('DELETED()');       {pouze neplatné záznamy}
Další a mnohem výhodnější a rychlejší je varianta, kdy se platnost záznamů nastaví přímo svým nastavením voláním procedury DbfSetDeleted, která určuje, zda budou dostupné záznamy označené ke zrušení:

DbfSetDeleted(False);   {dostupné pouze platné záznamy}
DbfSetDeleted(True);    {dostupné všechny záznamy}
Někdy byste potřebovali zrušit najednou všechny záznamy z databáze. To by bylo možné provést tak, že byste postupně označili každý záznam databáze ke zrušení a následně je procedurou DbfPack zrušili. Možná je ale i výhodnější a rychlejší varianta, při které jsou voláním procedury DbfZap zrušeny najednou všechny záznamy databáze bez ohledu na to, zda jsou označeny ke zrušení. VAROVÁNÍ !!! Záznamy již nebude možné žádným způsobem obnovit !
předchozí lekce (1.31) obsah kurzu následující lekce (1.33)

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