Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Foxpro


Index » educatie » » informatica » Foxpro
» Stergerea datelor din tabele


Stergerea datelor din tabele


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:

  • la nivel logic, cand inregistrarea nu este propriu-zis stearsa din tabela, ci ea este marcata intr-un anumit mod ("marcata pentru stergere"), indicand astfel aceasta stare a inregistrarii. Exista comenzi si functii FoxPro (marea majoritate) care, inainte de accesarea unei inregistrari, testeaza marcajul de stergere a acesteia si, in functie de el, considera inregistrarea absenta, sau prezenta in fisier;
  • la nivel fizic, cand inregistrarea este stearsa efectiv din tabela, ea nemaiputand fi in nici un fel accesata sau refacuta.

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





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate