ALTE DOCUMENTE
|
||||||
FIsĂ DE LUCRU CLASA a XII-a A
ACTUALIZAREA DATELOR
1.Adaugarea articolelor
*comanda APPEND BLANK permite ca la sfârsitul tabelei active sa se adauge un articol vid; APPEND [BLANK]
[IN nWorkArea | cTableAlias]
*comanda APPEND FROM permite adaugarea la tabela activa a datelor din alta tabela specificata în clauza FROM.
APPEND FROM <fis.dbf> [FOR <cond>] [FIELDS <lista-camp>]
APPEND FROM FileName | ?
[FIELDS FieldList]
[FOR lExpression]
*în mod implicit se preiat toate câmpurile; conditia data în clauza FOR este testata dupa plasarea articolului pe noua structura. Clauza FIELDS permite selectarea câmpurilor care vor fi folosite la adaugare.
Exemplu: se foloseste fisierul CONCURS.DBF (nume C(10), facultate C(10), medie N(5,2), admis L) care cuprinde toti participantii la concursul de admitere la facultate. Dintre acestia trebuie copiati în tabela STUDENŢI.DBF (existenta deja) numai candidatii admisi.
use concurs
copy to man for admis
use studenti
append from man
2.stergerea articolelor din baza de date
stergerea se realizeaza în 2 etape:
o stergere LOGICA, o marcare pentru stergere - care poate fi ignorata sau nu de comenzile de cautare sau de afisare si care poate fi anulata prin RECALL;
o stergere FIZICA efectiva - situatie în care datele vor fi pierdute definitiv.
2.1.Comanda DELETE marcheaza pentru stergere articolele care verifica conditiile de filtrare. Comanda actioneaza pe articolul curent.
DELETE [<domeniu>] [FOR <cond>] [WHILE <cond>]
DELETE
[Scope] [FOR lExpression1] [WHILE lExpression2]
[IN nWorkArea | cTableAlias]
Starea de articol marcat pentru stergere nu influenteaza în mod obisnuit nici comanda de afisare (observam "*" înaintea primului câmp) nici o eventuala cautare prin LOCATE, o copiere (COPY) sau o sortare (SORT), etc. Acest lucru se datoreaza valorii OFF pe care este pozitionata implicit comanda comutator SET DELETED ON/OFF. Setarea comutatorului pe comanda ON determina ignorarea articolelor marcate pentru stergere.
Pentru a afla daca un articol este sau nu marcat pentru stergere se foloseste functia DELETED ([<zona>]) care întoarce .T. daca articolul curent din zona indicata prin <zona> este marcat pentru stergere.
Exemplu:
use studenti && implicit comutatorul SET DELETED este OFF
delete record 3
list
sau
delete for nume_camp='conditie'
set deleted on && efectul comenzii SET DELETED ON=articolele marcate
list nu sunt afisate
2.2.Comanda PACK permite stergerea fizica din fisier a tuturor articolelor marcate anterior. Nu mai este nici o posibilitate de recuperare a acestor date. Clauza MEMO se foloseste atunci când se doreste diminuarea spatiului disc nefolosit din fisierul Memo asicoat, fara a afecta baza de date. Clauza DBF se foloseste pentru a sterge articolele marcate din baza de date fara a modifica fisierul Memo asociat.
PACK [MEMO][DBF]
2.3.Comanda ZAP permite stergerea definitiva din fisier a tuturor articolelor, fara ca în prealabil sa fi avut loc operatia de marcare.
ZAP [IN nWorkArea | cTableAlias]
IN nWorkArea Specifies the work area of the table in which all records are removed.
IN cTableAlias Specifies the alias of the table in which all records are removed.
If you omit nWorkArea and cTableAlias, all records are removed in the table in the currently selected work area.
2.4.Comanda RECALL permite revenirea unui articol la starea anterioara operatiei de stergere numai daca stergerea a fost logica.
RECALL [<domeniu>][FOR<cond>][WHILE<cond>]
RECALL [Scope] [FOR lExpression1] [WHILE lExpression2]
Actiunea comenzii are articolul curent ca domeniu implicit.
Tabela: STUDENT.DBF
cod_stud |
nume_stud |
grupa |
anul |
facultate |
|
Dumitru Alina |
Info |
||||
Luca Stefan |
Mate |
||||
Andrei Ana |
Info |
Exemplu:
use student
delete for nume='Andrei Ana'
recall all for grupa
pack
3.Modificarea (corectia) datelor
3.1.Comanda REPLACE
REPLACE <camp1> WITH <exp1> [, <camp2> WITH <exp2>...] [domeniu] [FOR <cond>] [ WHILE <cond>]
Comanda permite înlocuirea valorii existente în câmpul <camp1> cu valoarea expresiei <exp1>, a valorii existente în <camp2> cu valoarea <exp2>, etc. Domeniul implicit este articolul curent. Se pot folosi clauzele de filtrare <domeniu>, FOR, WHILE.
use student
replace all cod_stud with recno() &&modificam peste tot codul la numar articol
replace grupa with 4, anul with 5 for nume='Luca'
list
replace all anul with 2
list
3.2.Comanda BROWSE este una dintre cele mai folosite comenzi pentru vizualizarea si actualizarea datelor din una sau mai multe tabele legate între ele. Se afiseaza tabela activa pe linii si coloane.Pe prima linie sunt afisate denumirile câmpurilor din structura tabelei iar în continuare sunt linii cu date.
Formatul comenzii este:
BROWSE [FIELDS<camp1> [:R] [:V] [<camp-calc1>=<exp1>] [LOCK<nr>] [<domeniu>][FOR<conditie>][FREEZE<nume-camp>] [NOAPPEND] [NOMENU] [NOEDIT] [NODELETE]
o clauza FIELDS permite enumerarea campurilor care vor forma coloanele tabelului; în lipsa clauzei se retin toate câmpurile din baza de date, în ordinea structurii. Pentru un câmp putem interzice editarea [:R] sau putem preciza conditia de validare la introducerea valorilor în câmpul respectiv [:V]. În lista de câmpuri pot aparea si câmpuri calculate care primesc un nume si o expresie de calculare. Câmpurile calculate nu pot fi editate ci numai afisate dar valorile din acestea se modifica odata cu modificarile în câmpurile ce formeaza expresia de calculat.
o clauzele <domeniu> si FOR permit selectarea liniilor care vor fi afisate în fereastra BROWSE.
o clauza LOCK<nr> permite înghetarea pe ecran a primelor <nr> coloane (câmpuri) în timpul defilarii tabloului BROWSE spre stânga sau spre dreapta. Se recomanda ca în structura conceptuala sa se afiseze informatiile de identificare a unui obiect la început. Daca, totusi, acest lucru nu este realizat, putem schimba ordinea de afisare pe ecran a câmpurilor cu clauza FIELDS, a.î. sa avem pe primele coloane informatiile necesare.
o clauza FREEZE<nume-camp> permite mentinerea cursorului pe o singura coloana;
o clauza NOAPPEND interzice adaugarea de noi articole în fisier; în lipsa clauzei este posibil acest lucru. NOMENU nu afiseaza linia de meniuri si împiedica accesul la meniuri; NODELETE împiedica stergerea accidentala de articole; NOEDIT interzice editarea articolelor.
Exemplu: ELEVI.DBF
cod |
Nume |
Cls |
Adr |
Camin |
Absm |
Absn |
Medie |
Foto |
N,2 |
C,10 |
C,3 |
M |
L,1 |
N,2 |
N,2 |
N,5,2 |
G |
Sarcini:
sa se afiseze toti elevii browse
sa se afiseze numai numele si clasa browse fields cls,nume:R,
elevilor precum si totalul absentelor absente=absn+absm
sa se afiseze numai elevii din clasa... browse for cls=' '
sa se afiseze primii 5 elevi fixând browse next 5 freeze absm
pentru modificare câmpul absm
Exercitiul 1 :
La biblioteca « P. Istrati » se tine evidenta cartilor intr-o tabela CARTI.DBF cu urmatoarele campuri :
Titlu |
Autor |
Editura |
Pret |
Dataintr |
Deteriorat |
Alte_inf |
C,20 |
C,20 |
C,10 |
N,6 |
D,8 |
L,1 |
M,4 |
La un control s-au constatat « nereguli ».
*sunt carti deteriorate sau pierdute care ar delete for deteriorat
trebui trecute in alta evidenta copy to deterior for deleted()
pack
*Nu a fost aplicata majorarea de 25% replace all pret with pret*125 for
la toate cartile intrate in biblioteaca dataintr<=
inainte de 1 ianuarie 1990 list
*Editura « Albatros » si-a schimbat set date to german
numele in « Pinguin » la 1.09.1992. replace editura with 'Pinguin' for editura
='Albatros' .and. dataintr>=
*Numele autorului G.B. SHAW a fost replace autor with 'G.B.Shaw' for
scris gresit sub forma 'G.B.Sou' nume= 'G.B.Sou'
*cartile sunt considerate manuale,
informatie ce trebuie trecuta in campul replace all alte_int with 'manuale'
alte_inf list
Exercitiul 2 :
Pentru baza de date ELEVI.DBF ne propunem sa mutam al treilea elev la sfarsitul fisierului. Se propun 2 metode :
Metoda 1 Metoda 2
use elevi in 1 use elevi
use elevi in 2 again copy to man for nume=' '
sele 1 delete for nume=' '
locate for nume=' ' pack
sele 2 append from man
append blank erase man.dbf
replace b.nume with a.nume
replace b.cls with a.cls
sele 2
use
sele 1
delete
pack
4.Lucrul cu campurile de tip Memo
Campul de tip Memo este necesar pentru situatiile cand trebuie memorate cantitati variabile de informatii. Dimensionarea campului la valoarea maxima (255 de caractere) nu rezolva intotdeauna problema. Structura devine ineficienta prin marimea ei. A aparut necesitatea depunerii informatiilor in alt fisier sub forma blocurilor de text facandu-se legatura cu articolul care ar trebui sa le contina. Fisierul asociat poarta acelasi nume ca si baza de date, are extensia .fpt si se deschide simultan cu aceasta.
1.incarcarea informatiei intr-un camp Memo, la o anumita inregistrare, se face dupa urmatoarele etape:
*se gaseste un spatiu liber in fisierul .fpt asociat tabelei si se incarca informatia in spatiul respectiv;
*se completeaza la inregistrarea dorita, in campul Memo, adresa zonei din fisierul .fpt unde s-au incarcat datele;
2.deschiderea unei ferestre de editare pentru fiecare camp Memo dintr-o lista data se face prin comanda:
-clauza NOWAIT se foloseste numai in interiorul unui program si are ca efect continuarea executiei programului, dupa deschiderea ferestrei de editare, fara a mai astepta ca utilizatorul sa modifice campul Memo respectiv;
-clauza RANGE se foloseste cand se doreste ca numai o portiune din campul Memo sa fie editata si anume partea cuprinsa intre <n1> si <n2>;
3.afisarea datelor din campul Memo se face prin precizarea explicita in comenzile LIST/DISPLAY a numelor campurilor de afisat;
4.extragerea dintr-un camp Memo a informatiilor intr-un fisier text peste sau in continuarea vechiului continut se face prin comanda:
Ex: copy memo 'studii' to "C://carmen/forestier/test.txt"
goto 2
copy memo 'studii' to "C://carmen/forestier/test.txt" additive .
Fie tabela STUDENT.DBF cu urmatorul continut:
cod_stud |
nume_stud |
grupa |
anul |
Adresa |
|
Dumitru Alina |
Memo |
||||
Luca Stefan |
Memo |
||||
Andrei Ana |
Memo |
In baza de date TELEFON.DBF (nume, telefon, adresa) se gaseste numarul de telefon al studentei "Dumitru". Sa se adauge numarul la adresa existenta in fisierul STUDENT.DBF
*se realizeaza o copiere dintr-un camp memo in altul
use telefon
nrtel=lookup(telefon,'Dumitru',nume)
use student
replace adresa with adresa for nume='Dumtru'
|