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:


'program DBF_6.BPR
ConsoleClear
ConsoleShow
If DbfUse("CENIK") then    'pokud se otevřela databáze
   DbfGoTop                'skok na začátek databáze
   Do Until DbfEof         'dokud není konec databáze
      If DbfDeleted then   'pokud je záznam označen ke zrušení
         DbfRecall         'obnovíme platnost záznamu
         Writeln(DbfReadStr("NAZEV"))
      End If
      DbfSkip(1)           'skok na další záznam
   Loop
Else
   ShowMessage("Databázi 'CENIK.DBF' nebylo možné otevřít !")
End If
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