Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Stergerea datelor din tabele
Alaturi de adaugare si modificare, stergerea reprezinta una din principalele operatii in lucrul cu tabelele. Stergerea unei inregistrari dintr-o tabela se poate realiza la doua nivele si anume:
In ceea ce priveste stergerea logica exista un mecanism prin care pot fi marcate ca sterse inregistrari izolate dintr-o tabela, dar exista si un tip special de stergere logica ce actioneaza asupra intregii tabele, prin aplicarea unui filtru asupra ei. Prin acest filtru vor fi "ascunse" acele inregistrari ale unei tabele care nu respecta o conditie impusa de utilizator.
Metoda de stergere logica mentionata mai sus actioneaza la nivel de inregistrare, dar exista si posibilitatea stergerii logice la nivel de camp, in sensul "ascunderii" anumitor campuri ale unei tabele. In felul acesta tabela va aparea ca avand mai putine campuri, dar acelea pentru care accesul la ele nu a fost oprit.
In urma unei stergeri logice o inregistrare sau un camp nu este eliminat fizic din fisierul respectiv, ci doar este facut invizibil pentru comenzile utilizatorului. In urma unei astfel de stergeri exista posibilitatea refacerii elementului respectiv, in sensul acordarii din nou accesului utilizatorului. Stergerea fizica, in schimb, actioneaza asupra datelor din fisier eliminandu-le pur si simplu, fara posibilitatea de refacere ulterioara (deoarece datele au disparut si in zona respectiv de memorie s-a scris altceva).
Cea mai simpla si mai directa metoda de stergere logica este cea prin intermediul comenzii DELETE. In urma acestei comenzi vor fi marcate pentru stergere toate inregistrarile care se incadreaza in domeniul inregistrarilor specificat pentru aceasta comanda.
Urmatoarea comanda determina stergerea primelor 100 de inregistrari ale tabelei active.
DELETE ALL FOR RECNO ()<=100
Domeniul implicit al comenzii DELETE este inregistrarea curenta.
Accesul la inregistrarile marcate pentru stergere este controlat de comanda SET DELETED, care, daca este urmata de ON, face ca inregistrarile marcate pentru stergere sa nu fie accesibile celorlalte comenzi FoxPro. Cand este aleasa optiune a OFF, inregistrarile vor fi accesibile indiferent de marcajul acestora.
Comenzile care actioneaza asupra unei singure inregistrari sau care au ca domeniu implicit inregistrarea curenta nu sunt afectate de aceasta comanda.
USE stocuri
CLEAR
SET DELETED OFF
DELETE FOR MOD (RECNO () ,2)=0
NOTE s-au sters inregistrarile cu numar de ordine par
LIST
NOTE toate inregistrarile din tabela sunt afisate, cele sterse avand in dreptul lor un asterisc
SET DELETED ON
LIST
GOTO 2
DISPLAY &&inregistrarea este afisata chiar daca este marcata pentru stergere,
DISPLAY avand ca domeniu implicit inregistrarea curenta
USE
Testarea marcajului de stergere al unei inregistrari se face cu functia DELETED (), care returneaza valoarea logica adevarat, daca inregistrarea curenta este marcata pentru stergere, altfel returneaza valoarea fals.
USE stocuri SET DELETED OFF DELETED RECORD 2 GO TO 2 ? DELETED () GO TO 3 ? DELETED () .F. USE |
O inregistrare marcata pentru stergere nu este stearsa fizic din tabela. Eliminandu-se marcajul de stergere, inregistrarea este refacuta, e redevenind accesibila pentru toate comenzile. Inlaturarea marcajului pentru stergere se realizeaza cu comanda RECALL, care, ca si DELETE, permite specificarea explicita a domeniului inregistrarilor ce urmeaza a fi refacute.
Domeniul implicit al acestei comenzi este inregistrarea curenta.
USE stocuri
DELETE FOR RECNO () <=3 &&se sterg primele 3 inregistrari
LIST && se observa efectul stergerii
RECALL ALL && sunt refacute toate inregistrarile. Cele care nu erau marcate pentru stergere nu sunt afectate
LIST
USE
Pana acum am prezentat stergerea logica a inregistrarilor, adica marcarea lor pentru stergere. Pentru ca o inregistrarea sa fie eliminata fizic se foloseste comanda PACK, care realizeaza stergerea fizica a tuturor inregistrarilor marcate pentru stergere, din tabela activa.
Pentru aplicarea comenzii PACK asupra unei tabele, inregistrarile nu mai pot fi facute; stergerile sunt permanente
Daca o tabela contine un camp de tip MEMO, datele continute in acest camp sunt depozitate intr-un fisier asociat tabelei (cu acelasi nume al tablei, dar cu extensia .FPT). clauza MEMO a comenzii PACK are ca efect diminuarea spatiului nefolosit din fisierul MEMO asociat, fara a afecta fisierul tabelei propriu-zis.
Se sterge inregistrarea a cincea din tabela STOCURI
USE stocuri
RECALL ALL &&pentru a nu sterge si alte inregistrari
LIST
DELETE RECORD 5
NOTE s-a marcat pentru stergere a cincea inregistrare
PACK && s-a sters fizic a cincea inregistrare
LIST
USE
O alta comanda nefolosita la stergerea fizica a inregistrarilor dintr-o tabela este comanda ZAP, care goleste fizic complet tabela activa (sterge fizic toate inregistrarile).
Ea este echivalenta cu secventa DELETE ALL
PACK
Ca si comanda PACK inregistrarile sterse cu comanda ZAP nu mai pot fi refacute adica stergerea este fizica.
Dupa cum am aratat si mai devreme exista posibilitatea controlarii accesului la inregistrarile unei tabele, sub forma unui filtru aplicat acesteia. Aceasta metoda este situata ca putere de control al accesului la inregistrari intre cele doua metode prezentate anterior. Spre deosebire de stergerea fizica a unei inregistrari aceasta metoda nu elimina fizic inregistrarea ci doar blocheaza accesul la ea. Deci din punct de vedere metoda este mai slaba decat stergerea fizica.
Comparand metoda cu stergerea logica a unei inregistrari, constatam ca aceasta este mai puternica decat stergerea logica. Astfel pe cand o inregistrare marcata pentru stergere poate fi accesata de unele comenzi sau functii FoxPro (cum ar fi LIST), blocarea
accesului la o inregistrare folosindu-se aceasta metoda este valabila la toate comenzile si functiile FoxPro care acceseaza tabela.
Aceasta metoda de control al accesului este implementara prin comanda SET FILTER, ce trebuie urmata de o expresie logica ce va fi folosita ca filtru asupra tabelei. Ca efect al comenzii, in tabela vor aparea doar inregistrarile care indeplinesc conditia respectiva. SET FILTER TO, fara conditie, face ca toate inregistrarile din tabela sa poata fi accesate, deci elimin filtrul asupra tabelei.
In tabela STOCURI sa se elimine (nu fizic) toate materialele care nu necesita conditii speciale de depozitare (cond_spec=.F.):
USE stocuri
LIST
SET FILTER TO cond_spec=.T.
LIST
USE
O caracteristica importanta a acestei metode de control al accesului la inregistrarile de baza de date este aceea ca accesibilitatea unei inregistrari este dependenta de continutul sau, dupa cum se poate observa si din exemplul anterior. Vor putea fi accesate doar inregistrarile care contin in campul cond_spec valoarea logica .T.
Accesul la campurile unei tabele este controlat de comenzile SET FIELDS si SET FIELDS TO. Daca SET FIELDS este ON, pot fi accesate doar campurile care sunt prezentate in lista de campuri a comenzii SET FIELDS TO, iar daca SET FIELDS este OFF se permite accesul la toate campurile tabelei.
Comanda se refera la tabela activa. Ea poate fi vazuta ca un filtru la nivel de camp aplicat asupra tabelei.
Pentru a se permite accesul doar la campurile cod si valoare din tabela STOCURI, se va introduce urmatoarea secventa de instructiuni:
SET FIELDS ON
SET FIELDS TO cod, valoare
iar pentru a reveni la normal, se introduce fie:
SET FIELDS TO ALL
fie:
SET FIELDS OFF
Stergerea datelor dintr0o tabela se poate face la nivel fizic sau la nivel logic. Stergerea fizica nu mai ofera posibilitatea de refacere a datelor sterse (de anulare a stergerii), pe cand cea logica da.
Stergerea logica se poate face la nivel de inregistrare(marcare pentru stergere - DELLETE sau filtrare - SET FILTER) sau la nivel de camp (prin filtrare - SET FIELDS).
Copyright © 2024 - Toate drepturile rezervate