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