předchozí lekce (1.31) | obsah kurzu | následující lekce (1.33) |
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) |