Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » referate » informatica » windows
Intretinerea informatiilor din fisiere

Intretinerea informatiilor din fisiere


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

Lungu I., N. Musat, M. Velicanu FoxPro 2.6. Prezentare si aplicatii. Ed. All, Bucuresti, 1996.

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][NORMAL][NOWAIT]

[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][NORMAL] [NOWAIT] [PARTITION <expN1>]

[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


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.