LUCRAREA D E LABORATOR
INTRETINEREA INFORMATIILOR DIN FISIERE
Scop
Insusirea modalitatilor de adagare, modificare,stergere si vizualizare a informatiilor dintr-un fisier. Utilizarea indicatorul de inregistrari, filtrarea si cautarea informatiilor.
Studiu necesar
Mod de realizare a lucrarii
Comentarii detaliate privind fiecare notiune, sintaxa comenzilor si exemple.
3.1 Adaugarea de inregistrari
Adaugarea de inregistrari se poate face in doua moduri, in functie de pozitia pe care o va ocupa noua inregistrare in fisier
- adaugarea de inregistrari noi la sfirsitul bazei de date ;
- introducerea de inregistrari noi in interiorul bazei de date ;
Prima metoda se realizeaza cu comenzile APPEND, APPEND FROM
- la comanda APPEND informatiile sint furnizate de utilizator, in mod interactiv (exceptie facind clauza BLANK). Sintaxa : APPEND [BLANK]
- comanda APPEND FROM se foloseste cind informatiile sint luate dintr-un alt fisier.
Pentru a edita un cimp de tip memo, cind cursorul se afla in cimpul respectiv, se apasa combinatia de taste CTRL + Home. Iesirea cu salvare din aceasta fereastra se face cu CTRL + W. (ESC nu salveaza modificarile ). Terminarea introducerii tuturor inregistrarilor se realizeaza apasind simultan tastele CTRL si END, fereastra de editare inchizindu-se dupa aceasta.
Introducerea datelor in fereastra de editare corespunzatoare comenzii APPEND este influentata de comanda SET CARRY. Aceasta comanda permite sau inhiba copierea continutului inregistrarii curente in noua inregistrare creata cu APPEND sau INSERT. SINTAXA :
SET CARRY ON | OFF
SET CARRY TO [<lista cimpuri> [ADDITIVE]]
Clauza ON determina copierea inregistrarii curente in cea noua pe cind clauza OFF opreste aceasta copiere. Optiunea implicita este OFF. Cea de-a doua forma a comenzii se foloseste cind se doreste copierea numai a anumitor cimpuri ale inregistrarii curente in noua inregistrare, aceste cimpuri fiind specificate in lista de cimpuri <lista cimpuri>. Daca se include in comanda si optiunea ADDITIVE, la vechea lista de cimpuri se adauga noua lista de cimpuri, specificata in comanda. SET CARRY TO fara nici o lista de cimpuri, are ca efect intoarcerea la lista implicita, in care sint specificate toate cimpurile. Prima forma a comenzii SET CARRY ON | OFF se refera la toate zonele de lucru pe cind cea de-a doua forma, SET CARRY TO, se refera doar la zona de lucru curenta.
Exemplul 1
Sa presupunem ca introducem informatii intr-un fisier in care unul din cimpuri este data curenta. In cadrul unei zile, aceasta data nu se schimba, iar introducerea in fiecare inregistrare a datei curente este ineficienta. De aceea se recomanda copierea automata a datei curente pentru fiecare noua inregistrare ce se agauga. Aceasta se realizeaza cu secventa de comenzi :
SET CARRY ON
SET CARRY TO data_intr
iar la sfirsitul zilei se introduce secventa de comenzi :
SET CARRY TO
SET CARRY OFF
pentru anularea acestei stari (inhibarea copierii datei de la o inregistrare la alta).
Comanda APPEND BLANK are ca efect adaugarea unei noi inregistrari "blank" (goala) la sfirsitul bazei, urmind ca informatia utila sa se incarce mai tirziu, prin alte comenzi FoxPro.
Adaugarea de inregistrari la sfirsitul bazei de date active se poate realiza cu comanda APPEND FROM . Inregistrarile ce se vor adauga bazei de date active vor fi preluate din fisierul <fisier>.
APPEND FROM <fisier> | ?
[FIELDS <lista cimpuri>]
[FOR<expL>]
[TYPE] [DELIMITED [WITH TAB | WITH <delimitator> | WITH BLANK ]
[DIP | FWZ | MOD | PDOX | RPD | SDP | SYLK | WK1 | WK3 | WKS | WR1 | WRK |
XLS ]
<fisier> reprezinta numele fisierului din care se preiau inregistrarile ce se vor adauga la fisier. Daca nu se specifica numele fisierului, trebuie specificata clauza ?, utilizatorului oferindu-i-se astfel posibilitatea selectarii fisierului printr-o fereastra de dialog. Daca se doreste ca din fisier <fisier> sa se preia doar anumite cimpuri, se va include clauza FIELD. Daca nu se specifica altfel, intreg fisierul va fi adaugat la sfirsitul bazei de date. Pentru a prelua din fisier doar anumite inregistrari, se va specifica domeniul acestora, prin clauza FOR. Se foloseste clauza TYPE pentru a specifica tipul acestui fisier.
Exemplul 2
CLOSE ALL
USE student
APPEND FROM studenti FIELDS nume, grupa FOR codl=1100
LIST
USE
Transferul invers de la o baza de date la un alt fisier de pe disc se realizeaza cu comanda COPY TO cu urmatoarea sintaxa:
COPY TO <fisier>[FIELDS<lista cimpuri>]
[<domeniu>][FOR <expL1>][WHILE <expL2>]
[[WITH] CDX] | [[WITH] PRODUCTION]
[NOOPTIMIZE]
[TYPE][FOXPLUS | DIF | MOD | SDF | SYLK | WK1 | WKS | WR1 |
WRK | XLS | DELIMITED [WITH<delimitator> | WITH
BLANK|WITH TAB]]
Comanda copiaza inregistrari din baza de date activa intr-un fisier nou, cu numele <fisier>. Acestuia daca nu i se specifica o extensie, i se va atribui automat extensia.DBF. In cazul cind nu se specifica alt tip, fisierul nou creat va fi o baza de date FoxPro in care se copiaza inregistrari din baza de date activa.
Cea de-a doua metoda de adaugare a unei inregistrari noi la un fisier o reprezinta inserarea inregistrarii in interiorul bazei de date folosind comanda INSERT
Fie Ik inregistrarea curenta
Inregistrarea I se introduce intre Ik si Ik+1. Comanda INSERT are urmatoarea sintaxa :
INSERT [BEFORE ] [BLANK]
Si are ca efect inserarea unei inregistrari noi, dupa inregistrarea curenta. Daca se specifica clauza BLANK se adauga o inregistrare blank, altfel se intra intr-o fereastra de editare. Ca si la comanda APPEND, completarea cimpurilor este influentata de comanda SET CARRY. Clauza BEFORE determina adaugarea unei inregistrari noi inaintea inregistrarii curente.
Exemplul 3
USE student
GOTO 2
INSERT BEFORE
USE
3.2 Modificarea continutului inregistrarilor
Modificarea informatiilor stocate intr-un fisier se realizeaza cu comenzile BROWSE,EDIT,CHANGE,REPLACE .
Sintaxa comenzii BROWSE:
BROWSE
[FIELDS<lista cimpuri>] [FOR<expL>] [FORMAT]
[FREEZE<cimp>] [KEY<expr1>[,<expr2>]] [LAST]
[LEDIT][REDIT] [LOCK<expN1>] [LPARTITION]
[NOAPPEND][NOCLEAR][NODELETE]
[NOEDIT | NOMODIFY] [NOLGRID][NORGRID]
[NOLINK][NOMENU][NOOPTIMIZE]
[NOREFRESH][
[PARTITION<expN2>] [PREFERENCE<expC1>]
[REST][SAVE] [TIMEOUT<expN3>] [TITLE<expC2>]
[VALID[:F]<expL2>[ERROR<expC3>]] [WHEN<expL3>]
[WIDTH<expN4>] [WINDOW<nume fereastra 1>]
[IN[WINDOW<nume fereastra 2> | IN SCREEN]]
[COLOR[<lista perechi culori>] | COLOR SCHEME <expN5>]
Lista de cimpuri de la clauza FIELDS reprezinta o insiruire de cimpuri, ale unei baze de date sau calculate, separate prin virgula, ce se vor edita, avind urmatoarea sintaxa :
<cimp> [:R] [:V=<expr1>[:F][:E=<expC1>]] [:P=<expC2>]
[:B=<expr2>,<expr3>[:F]] [:H=<expC3>]
[:W=<expL1>] [,<cimp2>[:R]]
Cimpurile calculate reprezinta cimpuri din fereastra de editare, create prin evaluarea unei expresii si afisate in fereastra respectiva ca un cimp de sine statator. Aceste cimpuri se pot doar vizualiza, dar nu se pot modifica. Sintaxa de definitie a unui cimp calculat este :
<nume cimp calculat> = <expr>
Exemplul 4
Avind fisierul student.dbf, vom deschide o fereastra de editare in care vom afisa doar cimpurile nume, virsta, codl. Primul si ultimul sint cimpuri ale bazei de date, virsta fiind un cimp calculat in functie de data nasterii (cimpul nascut din fisier) si data curenta.
CLOSE ALL
USE student
BROWSE FIELDS nume,virsta=(date()-datan)/365,codl
USE
In sintaxa exista posibilitatea atasarii fiecarui cimp, a uneia sau mai multor optiuni :
:R - cimpul se poate vizualiza, nu si modifica
:V=<expr1> - permite validarea cimpului introdus. Dupa ce cimpul s-a modificat si se iese din editarea acestuia, se evalueaza <expr1>. Daca <expr1> este evaluata la .T. data introdusa in cimp este corecta, iar daca este evaluata la.F. data se considera incorecta, afisindu-se un mesaj de eroare. In cazul cind expresia este de tip numeric iar valoarea ei este 0, data introdusa in cimp se considera incorecta, afisindu-se un mesaj de eroare.
Exemplul 5
USE student
BROWSE FIELDS nume:R,codl:V=codl=1100 AND codl<=2000:F:E='codl
USE
:F - pentru a forta evaluarea expresiei <expr1> si deci validarea, chiar atunci
cind se trece cu cursorul prin cimp fara modificarea acestuia
:E=<expC1> - se foloseste pentru ca mesajul afisat in caz de eroare sa fie altul decit cel
implicit si anume <expC1>
:B=<expr2>,<expr3> - se foloseste pentru a specifica intervalul in care trebuie sa se afle
cimpul dupa editari. <expr2> reprezinta limita inferioara iar <expr3>
reprezinta limita superioara. Aceste doua expresii trebuie sa fie de acelasi
tip cu cimpul editat. In cazul cind valoarea cimpului nu se incadreaza intre
cele doua expresii, se afiseaza un mesaj de eroare
:P=<expC2> - se poate folosi un cod PICTURE
:H=<expC3> - numele cimpului ce se afiseaza la partea superioara a ferestrei de editare
va fi inlocuit cu <expC3>
:W=<expL1> - se permite intrarea in editarea cimpului doar daca expresia logica <expL1>
este evaluata la valoarea.T.
Modificarea continutului unei baze de date se poate face si cu comanda REPLACE care, spre deosebire de cea anterioara nu deschide o fereastra ci realizeaza propriu-zis actualizarea bazei de date cu datele precizate prin comanda. Sintaxa este :
REPLACE
<cimp1> WITH <expr1> [ADDITIVE]
[,<cimp2> WITH <expr2> [ADDITIVE]]
[<domeniu>][FOR<expL1>][WHILE<expL2>]
[NOOPTIMIZE]
Comanda inlocuieste vechea valoare din cimpul <cimp1> cu valoarea rezultata in urma evaluarii expresiei <expr1>, vechea valoare din cimpul <cimp2> cu valoarea expresiei <expr2> si asa mai departe. Pentru cimpuri numerice, daca nu se reuseste incadrarea valorii expresiei in cimpul respectiv, acesta va fi umplut cu asteriscuri. Pentru cimpuri memo, specificind clauza ADDITIVE, acestea nu sint inlocuite, expresia fiind adaugata la sfirsitul lor. <domeniu>, FOR si WHILE specifica domeniul inregistrarilor la care se refera comanda REPLACE, domeniul implicit fiind inregistrarea curenta
Exemplul 6
USE student
APPEND BLANK
REPLACE nume WITH 'Toma'
REPLACE codl WITH 1100
REPLACE ALL grupa WITH 231
Comanda CHANGE are sintaxa:
CHANGE
[FIELDS <field list>][<scope>] [FOR <expL1>]
[WHILE <expL2>][FREEZE <field>][KEY <expr1> [, <expr2>]]
[LAST] [LEDIT] [REDIT][LPARTITION][NOAPPEND][NOCLEAR]
[NODELETE][NOEDIT | NOMODIFY][NOLINK]
[NOMENU][NOOPTIMIZE][
[PREFERENCE <expC1>][REST][SAVE][TIMEOUT <expN2>]
[TITLE <expC2>][VALID [F:] <expL3>[ERROR <expC3>]]
[WHEN <expL4>] [WIDTH <expN3>][[WINDOW <window name1>]
[IN [WINDOW] <window name2> | IN SCREEN]]
[COLOR SCHEME <expN4> | COLOR <color pair list>]
CHANGE permite editarea BD curent selectatein interiorul unei ferestre. Aceasta comanda este deasemenea disponibila din interiorul ferestrei Browse. Puteti salva toate schimbarile facute si parasi fereastra de editare Change prin apasarea Ctrl+W sau Ctrl+End.
Comanda EDIT functioneaza indentic cu comanda CHANGE.
3.3 Stergerea inregistrarilor
Stergerea unei inregistrari dintr-un fisier se poate realiza la doua nivele si anume:
-la nivel logic cind inregistrarea nu este propriu-zis stearsa din fisier ci ea este marcata intr-un anumit mod ('marcata pentru stergere') indicind astfel aceasta stare a inregistrarii
-la nivel fizic cind inregistrarea este stearsa, efectiv din fisier, ea neputind fi in nici un fel accesata sau refacuta.Marcarea pentru stergere a uneia sau mai multor inregistrari se face cu ajutorul comenzii DELETE :
DELETE [<domeniu>][FOR<expL1>][WHILE <expL2>][NOOPTIMIZE]
<domeniu>,FOR,WHILE identifica inregistrarile ce vor fi marcate pentru stergere. Domeniul implicit al comenzii DELETE este inregistrarea curenta. Accesul la inregisrarile marcate pentru stergere este controlat de comanda SET DELETED :
SET DELETED ON OFF
Cind se alege optiunea ON, inregistrarile marcate pentru stergere nu vor fi accesibile celorlalte comenzi care folosesc domeniul inregistrarilor (<domeniu>, FOR, WHILE) iar cind este aleasa optiunea OFF, inregistrarile sint accesibile indiferent de marcajul de stergere.
Starea initiala este OFF. Comenzile care actioneaza asupra unei singure inregistrari sau care au ca domeniu implicit inregistrarea curenta nu sint afectate de aceasta comanda.
Exemplul 7
USE student
DELETE FOR MOD(RECNO(),2)=0
SET DELETED OFF
LIST FOR DELETED()=.F.
USE
Acest exemplu este echivalent cu :
USE student
DELETE FOR MOD(RECNO(),2)=0
SET DELETED ON
LIST
USE
In interiorul unui program testarea marcajului de stergere a unei inregistrari se face cu functia DELETED (). Aceasta returneaza valoarea logica adevarat,daca inregistrarea curenta este marcata pentru stergere, altfel functia returneaza fals.
O inregistrare marcata pentru stergere nu este stearsa fizic din fisier. Eliminind marcajul de stergere, inregistrarea este refacuta, ea redevenind accesibila pentru toate comenzile. Inlaturarea marcajului de stergere se realizeaza cu comanda RECALL ce are aceeasi sintaxa cu comanda DELETE.
Exemplul 8
USE student
DELETE FOR RECNO()<=3
LIST
RECALL ALL
LIST
USE
Pentru stergerea la nivel fizic se foloseste comanda PACK cu urmatoarea sintaxa:
PACK [MEMO][DBF]
Comanda realizeaza stergerea fizica a tuturor inregistrarilor marcate pentru stergere din fisier Dupa aplicarea comenzii PACK inregistrarile sun sterse definitiv. Daca o baza de date contine un cimp de tip memo, informatiile continute in acest cimp sint depozitate intr-un fisier asociat bazei de date(cu acelasi nume dar cu extensie FTP).
Clauza MEMO a comenzii PACK are ca efect eliminare spatiului nefolosit din fisierul MEMO asociat, fara a afecta fisierul bazei de date propriu-zis. Clauza DBF se foloseste pentru a sterge fizic inregistrarile marcate pentru stergere din fisier, fara a modifica fisierul MEMO asociat.Comand PACK fara nici o clauza se refera atit la fisierul bazei de date cit si la fisierul MEMO asociat.
Exemplul 9
USE student
LIST
DELETE RECORD 5
PACK
LIST
USE
Comanda ZAP sterge fizic toate inregistrarile din fisier activ fiind echivalenta cu secventa de instructiuni:
DELETE ALL
PACK
Comanda ZAP este mult mai rapida decit secventa anterioara de instructiuni. Inregistrarile sterse cu ZAP nu mai pot fi refacute.
Inainte de executia comenzii daca optiunea SET SAFETY este ON se va mai afisa un mesaj de confirmare a stergerii inregistrarilor.
3.4 Accesul la inregistrari
Spre deosebire de stergerea fizica a unei inregistrari, aceasta metoda nu elimina fizic aceasta inregistrare, ci doar blocheaza accesul la ea. Aceasta metoda de control a accesului este data de comanda SET FILTER ce are urmatoarea sintaxa :
SET FILTER TO [<expL>]
Ca efect al comenzii in fisier vor aparea doar inregistrarile care indeplinesc conditia <expL>. SET FILTER TO fara conditie, face ca toate inregistrarile din fisier sa poata fi accesate.
Exemplul 10
USE student
LIST
SET FILTER TO codl=1100. &&se elimina inregistrarile cu codl <>1100 (nu fizic)
LIST
USE
Pentru a afla conditia de accesare a inregistrarilor (expresia filtru) se foloseste functia FILTER cu urmatoarea sintaxa:
FILTER(<expN>|<expC>)
unde <expC> respectiv <expN> specifica fisierul la care se refera functia, prin alias-ul acesteia, respectiv prin zona de lucru in care a fost deschisa. Rezultatul este de tip sir de caractere reprezentind expresia filtru folosita la accesarea inregistrarilor si stabilita cu comanda SET FILTER
Exemplul 11
CLOSE ALL
SELECT 1
USE student
SELECT 2
USE student AGAIN
SET FILTER TO codl=1100.
LIST
? FILTER() && codl=1100
SELECT 1
SET FILTER TO codl>1100
LIST
? FILTER() && codl>1100
CLOSE ALL
3.5 Vizualizarea continutului unei baze de date
Afisarea informatiilor se poate face pe ecran, la imprimanta sau intr-un fisier de pe disc, folosind comenzile LIST si DISPLAY . Sintaxa celor doua comenzi este identica si are forma :
DISPLAY/LIST
[[FIELDS]<lista cimpuri>]
[<domeniu>][FOR<expL1>][WHILE<expL2>]
[OFF] [TO PRINTER | TO FILE <fisier>]
[NOCONSOLE] [NOOPTIMIZE]
Clauza FIELDS se foloseste cu scopul de a afisa doar cimpurile specificate in <lista cimpuri> in ordinea aparitiei lor in aceasta lista. Absenta acestei clauze determina afisarea tuturor cimpurilor bazei de date. Cimpurile memo vor fi afisate numai daca sint explicit specificate in lista de cimpuri ale clauzei FIELDS. <domeniu>, FOR, WHILE determina domeniul inregistrarilor ce vor fi afisate cu comanda DISPLAY. Daca aceste clauze lipsesc se va afisa doar inregistrarea curenta, acesta fiind domeniul implicit al inregistrarilor pentru comanda DISPLAY.
Exemplul 12
USE student
DISPLAY ALL FOR codl=1100
USE
Prezenta clauzei OFF determina disparitia din formatul de afisare a coloanei 0 reprezentind numarul de ordine al inregistrarilor din fisier Pentru inhibarea afisarii pe ecranul monitorului se foloseste clauza NOCONSOLE.
Exemplul 13
USE student
DISP ALL OFF NOCONSOLE TO PRINTER
USE
Exemplul 13
USE student
DISP ALL TO FILE listare.txt
Comanda LIST este asemanatoare cu DISPLAY cu urmatoarele diferente :
- domeniul implicit pentru DISPLAY este NEXT 1 (adica inregistrarea curenta) pe cind cel al comenzii LIST este ALL (toate inregistrarile)
- comanda DISPLAY afiseaza ecran cu ecran
- comanda LIST nu afiseaza inregistrarile marcate pentru stergere cind avem SET DELETED ON
Formatul de afisare contine pe prima linie un antet reprezentind denumirile cimpurilor afisate. Pentru ca acest antet sa nu apara in formatul de afisare se foloseste comanda SET HEADING ON | OFF unde ON determina afisarea antetului iar OFF determina inhibarea afisarii antetului. Optiunea implicita este ON.
Exemplul 14
USE student
SET HEADING ON
LIST
SET HEADING OFF
LIST
USE
3.6 Indicatorul de inregistrari
Aflarea inregistrarii curente dintr-un fisier, deci a continutului indicatorului de inregistrari se face cu RECNO () care are sintaxa : RECNO ([<expN> | <expC>])
Aceasta functie returneaza un rezultat numeric reprezentind numarul inregistrarii curente din fisier cu alias-ul <expC> sau deschisa in zona de lucru <expN>. Daca ambele expresii lipsesc functia se refera la fisier activa.
Exemplul 15
USE student
?RECNO
LIST NEXT 2
?RECNO
USE
Schimbarea inregistrarii curente se realizeaza cu comenzile GOTO, SKIP.
Comanda GO sau GOTO pozitioneaza indicatorul de inregistrari
pe o anumita inregistrare.
GO | GOTO [RECORD]<expN1>[IN<expN2> | <expC>]
GO | GOTO TOP | BOTTOM [IN<expN2> | <expC>]
Prima forma are ca efect pozitionarea indicatorului de inregistrari din fisier cu alias-ul <expC> sau din zona de lucru <expN2> pe inregistrarea cu numarul <expN1>.Absenta clauzei IN determina referirea la fisier activ.
Clauza TOP - se pozitioneaza pe prima inregistrare
BOTTOM - se pozitioneaza pe ultima inregistrare
Exemplul 16
USE student
GOTO 2
?RECNO
GO RECORD RECNO() + 1
DISPLAY NEXT 1
GO TOP
?RECNO
GO BOTTOM
?RECNO
USE
Urmatoarele instructiuni sint echivalente :
GO 1
GO RECORD 1
GO TOP IN SELECT()
GOTO 1
GO TOP
Comanda SKIP muta indicatorul peste un numar de inregistrari relativ la inregistrarea curenta. Sintaxa este:
SKIP [<expN1>][<expN2>|<expC>]
in care <expN1> este numarul de inregistrari peste care se sare.Poate fi si negativ.
Daca se sare peste ultima inregistrare,indicatorul de inregistrari va contine numarul de inregistrari +1, iar functia EOF () va returna.T.. In cazul saltului inaintea primei inregistrari, functia BOF () va returna.T.
<expN2> | <expC> specifica fisier prin zona in care este deschisa sau prin alias-ul corespunzator.
Comanda SKIP este echivalenta cu SKIP 1
Exemplul 17
USE student
? RECNO()
SKIP 2
DISP RECO RECNO()
SKIP -1
?RECNO
USE
Urmatoarele comenzi sint echivalente:
SKIP
SKIP 1
SKIP IN SELECT()
GOTO RECORD RECNO()+1
Pentru a insera cite o inregistrare blank pe pozitia a-2-a si a-4-a a bazei de date se foloseste urmatoarea secventa de instructiuni:
USE agenda
GOTO 2
INSERT BLANK BEFORE
SKIP 2
INSERT BLANK BEFORE
USE
Functiile BOF() si EOF() avind sintaxele:
BOF( [<expN>|<expC>])
EOF()([<expN>|<expC>])
testeaza daca indicatorul de inregistrari se afla la inceputul, respectiv la sfirsitul bazei de date active, sau a celei specificate ca parametru. Rezultatul este de tip logic (.T. daca conditia este indeplinita si.F. in caz contrar).Numarul de inregistrari este returnat de functia RECCOUNT () cu sintaxa :
RECCOUNT([<expN>|<expC])
Dimensiunea unei inregistrari se obtine folosind functia RECSIZE () cu sintaxa:
RECSIZE([<expN>|<expC>])
Daca nu se specifica alt fisier ultimele doua functii se refera la fisier activ.
3.7 Cautarea inregistrarilor intr-un fisier
Gasirea unei inregistrari care respecta o conditie data se rezolva cu comanda LOCATE cu urmatoarea sintaxa:
LOCATE FOR <expL1>[<domeniu>][WHILE<expL2>][NOOPTIMIZE]
Comanda cauta prima inregistrare care respecta conditia <expL1> in fisier activ.Domeniul imregistrarilor care se testeaza este dat de clauzele <domeniu> si WHILE, domeniu implicit fiind ALL. In caz de reusita, adica la gasirea unei inregistrari care respecta conditia <expL1>, indicatorul de inregistrari se va pozitiona pe inregistrarea respectiva, functia FOUND () va returna.T. iar functia EOF() va returna.F.. In caz contrar indicatorul de inregistrari va fi pozitionat dupa ultima inregistrare(numarul total de inregistrari +1),FOUND() va returna.F. iar EOF()va returna.T.
Intr-un fisier pot exista mai multe inregistrari ce respecta o conditie data.Prima dintre acestea va fi gasita de comanda LOCATE.Urmatoarele vor fi gasite folosind comanda CONTINUE.Testarea reusitei sau nereusitei cautarii se face ca la comanda LOCATE cu functiile RECNO(), FOUND(), EOF().
Functia FOUND() cu sintaxa:
FOUND ([<expN>|<expC>])
este folosita pentru testarea rezultatului unei cautari intr-un fisier, returnind valoarea adevarat in cazul unei cautari cu succes si fals in caz contrar. <expN> si <expC> identifica fisierul la care se refera functia (zona de lucru sau alias-ul).
Exemplul 18
CLOSE ALL
USE student
LOCATE FOR grupa=231
?FOUND
.T.
?EOF
.F.
?RECNO
CONTINUE
?FOUND
.T.
?EOF
.F.
?RECNO
USE
Un alt tip de cautare intr-un fisier este realizat cu functia LOOKUP (). Aceasta cauta intr-un fisier prima aparitie a unei expresii date. In caz de reusita indicatorul de inregistrari se pozitioneaza pe inregistrarea in care a fost gasita expresia, functia returnind un anumit cimp al inregistrarii respective. In caz de nereusita indicatorul de inregistrari se pozitioneaza dupa ultima inregistrare a bazei de date iar functia va returna sirul vid. Sintaxa acestei functii este urmatoarea:
LOOKUP (<cimp1>,<expr>,<cimp2>[,<expC>])
in care <cimp1> reprezinta cimpul a carui valoare va fi returnata de functie, in caz de cautare reusita.
<expr> specifica expresia de cautat in fisier; <cimp2> se foloseste pentru a realiza cautarea expresiei numai in acest cimp ; <expC> se foloseste pentru baze de date indexate. Rezultatul este de tip sir de caractere, numeric,logic,sau data calendaristica, in functie de tipul cimpului returnat.
Exemplul 19
CLOSE ALL
LIST student
? LOOKUP(nume,231,grupa)
?RECNO
USE
Referatul va contine rezolvarea urmatoarelor exercitii:
1. Scrieti secventa de comenzi prin care se realizeaza urmatoarele operatii:
adaugarea de inregistrari in mod interactiv la sfirsitul fisierului student.dbf;
adaugati o inregistrare blank la sfirsitul fisierului student.dbf;
din fisierul student.dbf creati fisierul studenti.dbf cu aceiasi structura mai putin cimpul 'codl';
modificati structura fisierului studenti.dbf prin adaugarea cimpului 'codf' (cod facultate) ;
introduceti date in cimpul 'codf' la inregistrarile existente in fisier;
la fisierul student.dbf adaugati informatiile din studenti.dbf (comentati fenomenul) ;
adaugati date in mod interactiv la sfirsitul fisierului, mentinind aceiasi valoare de la o inregistrare la alta pentru cimpul 'grupa';
insertati o inregistrare 'blank' in fata inregistrarii cu nr. 4 din student.dbf;
2. Scrieti secventa de comenzi prin care se realizeaza urmatoarele operatii:
modificati inregistrarea nr. 3 din fisierul student.dbf restrictionind aceasta numai la cimpurile:matricol, nume,grupa;
editarea informatiilor prin care se interzice stergerea sau adaugarea de inregistrari in student.dbf;
editarea informatiilor din student.dbf in urmatoarele conditii: 'inghetarea' pe ecran a cimpurilor matricol, nume si grupa, fara posibilitatea modificarii cimpului matricol, mentinerea cursorului pe coloana cimpului grupa, lungimea maxima a cimpurilor de 10 caractere, afisarea pe ecran a unei noi coloane(virsta) ce contine diferenta dintre data curenta si data nasterii;
modificati numele la studentul cu matricolul 100, din 'Popescu' in 'Georgescu';
adaugarea unei inregistrari blank la student.dbf si completarea informatiilor din aceasta cu comanda REPLACE;
trecerea tuturor studentilor cu 'notabd' mai mare ca 7, la aceiasi grupa( de ex. 231).
3. Scrieti secventa de comenzi prin care se realizeaza urmatoarele operatii:
marcati logic pentru stergere ultimele 5 inregistrari din student.dbf;
anulati marcajul de stergere la ultimele doua inregistrari;
stergeti fizic inregistrarile ramase;
marcati pentru stergere primele 3 inregistrari din student.dbf si listati tot continutul, succesiv cu comenzile LIST si DISPLAY (comentati rezultatul);
stergeti toate inregistrarile din fisier - fara afisarea mesajului de confirmare a stergerii.
4. Scrieti secventa de comenzi prin care se realizeaza urmatoarele operatii:
filtrarea informatiilor din student.dbf astfel incit utilizatorii sa aiba acces numai la studentii dintr-o anumita grupa;
anularea filtrului;
presupunind ca in fisierul student.dbf sunt 100 de inregistrari, listati intreg continutul cu comenzile LIST si DISPLAY (comentati rezultatul);
afisati la terminal toti studentii al caror nume incepe cu 'P';
afisati la terminal numele, grupa si notabd pentru studentii de la o anumita grupa (ex. 233);
afisati la imprimanta numele, grupa si notabd pentru studentii de la o anumita grupa (ex. 233);
scrieti in fisierul student.txt, numele, grupa si notabd pentru studentii de la o anumita grupa (ex. 233);
inhibati afisarea antetului si a coloanei Records;
afisati la terminal numele, grupa,notabd si notabd/2 pentru studentii de la o anumita grupa (ex. 233).
5. Scrieti secventa de comenzi prin care se realizeaza urmatoarele operatii:
numararea inregistrarilor din fisierul student.dbf;
dimensiunea inregistrarilor;
presupunind ca in fisier exista 3 studenti la grupa 231, scrieti secventa de comenzi prin care ne pozitionam pe al doilea student al grupei;
afisati data nasterii si numarul inregistrarii primului student cu media 7din fisier.
6. Creati structura conceptuala a unui fisier oarecare si exemplificati pe acesta toate comenzile din lucrare.
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |