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:
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) |