Sunteți pe pagina 1din 46

Capi t o l u l

4
MEMORAREA DATELOR N VISUAL FOXPRO
4.1 Noiuni teoretice pri in! "#$e%e !e !#te &i 'i&iere%e !e !#te (n Vi)u#% Fo*Pro
Ne-am referit n Capitolul 1i 2 la noiuni teoretice referitoare la bazele de date , la tipurile de baze de date, la legturile dintre ele . Visual o!"ro este un produs #icrosoft. $n V " tabela este entitatea fundamental n care se memoreaz datele. %pre deosebire de clasicul o!"ro, tabela care este un fiier cu e!tensia .&' , poate e!ista ca entitate independent (free table) sau ca entitate coninut ntr-o baz de date, care este un fiier cu e!tensia .&'C. $ntro baz de date sunt incorporate mai multe tabele relaionale, mai multe interogri, mai multe *ederi i cod program, care toate la un loc alctuiesc un tot unitar numit baz de date. $n continuare n aceast carte *om folosi termenul de fiier de date atunci c+nd ne *om referi la o tabel relaional sau un fiier cu e!tensia &' i termenul de baz de date c+nd *om face referint la un fiier cu e!tensia .&'C. Un fiier cu extensia DBF este o colecie de date format din unul sau mai multe articole (nregistrri) legate ntre ele.

+,

-#pito%u% 4

%e poate face o analogie ntre modul de organizare al unui tabel i modul de organizare al fiier de date. $n primul r+nd pentru a defini un fiier de date este necesar s-i definim

!"U#!U"$ adic caracteristicile fiecrui articol. $n cadrul structurii unui fiier de date definim #%&'U"()* care compun structura i !('U) fiecrui c+mp. ,oate articolele dintr-un fiier, care se mai numesc i nregistrri au aceeai structur. &ac facem analogie cu o relaie definit de Codd, atunci fiecare fiier de date este o relaie, fiecare nregistrare sau articol este o tu+l, iar fiecare relaie are unul sau mai multe atribute, deci unul sau mai multe c,m+uri care alctuiesc structura fiierului. 'aza de date este o entitate care se creaz cu comanda#"*$!* D$!$B$ * -nume.baz de date/ 'aza de date se poate crea din meniul File, opiunea 0e1 (fig ..1) 'aza de date poate fi creat automat ntr-un mod predefinit propriu V " (/izard) sau prin aciunea manual a utilizatorului (0e1 File). $n aceast *om prezenta realizarea interacti*, manual a entitilor, modul /izard fiind prezentat numai n cazurile n care autorul consider acest lucru util.

Fig. 4 2 Fereastra de creare a unei entiti noi

+1

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

$n fereastra proprie bazei de date, pot fi realizate mai multe aciuni- creare tabel, adugare de tabel, creare *edere la distan sau local, etc.. 0cestea se pot

Fig. 4 3 &eniul contextual al ferestrei Database Designer

acti*a din meniul conte!tual care apare, acion+nd asupra butonului drept al mouseului (fig ..2). 0supra tabelelor create n baza de date se pot ntreprinde o serie de aciuni, acti*+nd opiunea !able a meniului principal (fig. ..1).

+/

-#pito%u% 4

Fig. 4 4 &eniul !able +rin care +ot fi ntre+rinse di5erse aciuni asu+ra tabelelor din baza de date

2piunile meniului !able au denumiri identice cu comenzi Visual o!, de aciune asupra nregistrrilor dintr-o tabel, care *or fi e!plicate n acest capitol. 0a cum s-a menionat anterior, o tabel poate e!ista n mediul V " n dou moduri 3ndependent, fr s aparin unei baze de date4 0parine unei baze de date4 3ndiferent de modul de creare a unei tabel, tipurile de date care pot e!ista n nregistrrile tabelei sunt aceleai (fig ...).

Fig. 4 4 !i+uri de date n tabele 6isual Fox

4.1./ Tipuri !e !#te #%e c0.puri%or Fo*Pro

+1

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

iecare c+mp (atribut) dintr-un fiier de date este destinat memorrii unui element indi*idual de date. ,ipurile de c+mpuri acceptate de Visual o!"ro sunt caracter (c5aracter)4 uniti monetare (currenc6)4 dat calendaristic (&ate, &ate ,ime)4 numeric (Numeric, loat, &ouble, 3nteger)4 logic (7ogical)4 memo4 general 4 c5aracter (binar6)4 memo (binar6). C+mpurile c7aracter sunt cele mai fle!ibile i cele mai utilizate. 8le conin caractere de tip 0%C33, limita de lungime impus pentru acest tip de c+mp este 29. caractere. !i+ul Descriere &rime "ang c,m+ului
#7aracter 2rice caracter admis de ctre calculator 1 p+n la 29. de caractere 2rice caracter

C+mpurile uniti monetare sau #urrenc8 sunt folosite pentru a reprezenta c+mpuri numerice nsoite de simbolul monedei n care se lucreaz, leu, dolar, euro, etc. C+mpurile dat calendaristic memoreaz doar datele de acest tip. 8l are lungime fi! de : caractere. 0supra acestui tip de c+mp pot fi e!ecutate o serie de operaii de transformare a datei calendaristice n ir de caractere sau tip de dat numeric. Visual o!"ro nu accept date calendaristice ine!istente, el e!ecut o permanent *erificare a c+mpurilor din care este format data calendaristic. 0cest c+mp se poate seta dup dorin n dat calendaristic de un anumit tip (american, englez, german. rancez etc.). 8!ist dou tipuri de c+mp dat calendaristic- &ate i &ate ,ime, care pot prezenta data calendaristic sub forma lun, zi, an sau sub forma, lun, zi, an, or, minut, secund. "entru ine cont de problema anului 2;;; este necesar este necesar luarea n considerare a opnii !ools9/:+tions. $n zona ;ear 3<<< com+liance se *a seta caseta trict data la5el la *aloarea dorit. 2piunile acestei casete sunt str+ns legate de comenzile *! #*0!U"; i *! !"(#!D$!*.

!i+ul c,m+ului

Descriere

&rime

"ang

+4
Date &ate format implicit din lun, zi, an : b6tes

-#pito%u% 4
C+nd se folosete formatul strict <=;;;1;1-;1>, 1 ianuarie anul 1 la <=????-1211>, 11 decembrie anul ???? C+nd se folosete formatul strict, de la, <=;;;1-;1-;1>, 1 ianuarie anul 1 <=????-12-11>, la 11 decembrie anul ????, ntre orele ;;-;;-;; a.m. la 11-9?-9? p.m.

Date !ime

&ata format din lun, zi, an i timp: b6tes or, minut, secund

C+mpurile numerice memoreaz numere cu punct zecimal fi!, care pot fi poziti*e sau negati*e. 3maginea unui c+mp numeric este limitat la 2; de caractere. Visual o!"ro are o precizie de calcul de 1@ cifre. C+mpurile numerice n 5irgul mobil sau n notaia tiinific sunt un caz particular al tipului numeric. ,ipul numeric *irgul mobil difer de tipul numeric prin faptul c numerele n *irgul mobil sunt destinate n special depozitrii numerelor foarte mari sau foarte mici, care *or fi con*ertite dac este necesar, n notaia tiinific i depozitate cu ma!imum de precizie posibil. An numr n notaia tiinific se caracterzeaz prin dou c+mpuri mantis4 e!ponent4 desparite printr-o liter. &e e!emplu considerm numrul ;.1.9;;;;;;8B;9, n care ;.1.9;;;;;; reprezint mantisa, iar ;9 reprezint e!ponentul. Valoarea acestui numr se interpreteaz ;.1.9C1;9. !i+ul Descriere &rime "ang c,m+ului
Double Float (nteger "recizie dubl $n *irgul : b6tes mobil 7a fel ca i c+mpul numeric: b6tes n numai c reprezentarea memorie4 este n *irgul mobil Valoare ntreag . b6tes BD-..?.;@9@.9:.12.E8-12. la BD:.?::.@9@E.111981;E - .??????????8B1? la . ??????????8B2; -21.E.:1@.E la 21.E.:1@.E

C+mpul de tip logic are ntodeauna lungimea de un caracter, el put+nd memora doar dou *alori ade*rat sau fals. 7itera , mare n c+mp reprezint *aloarea logic ade*rat, iar litera mare este interpretat ca *aloarea fals. C+mpurile memo sunt c+mpurile din Visual o!"ro n care se pot memora informaii de di*erse tipuri- te!t, informaii binare cum ar fi fiiere e!ecutabile &2%, imagini, bii de sunet sau orice altce*a care nu se potri*ete cu un alt tip de c+mp. 0ceste c+mpuri sunt practic nelimitate, singura limitare referindu-se la spaiul disponibil pe memoria au!iliar. 3nfomaiile dintr-un c+mp memo nu sunt memorate n fiierul de date &' . 8le sunt memorate ntr-un fiier separat, fiier care are e!tensia ", i acelai nume cu al fiierului &' . C+mpurile memo sunt cele mai *ulnerabile c+mpuri ale sistemului o!"ro. An c+mp memo se poate distruge prin simpla ntrerupere de curent i face imposibil folosirea fiierului cu e!tensie ",. &e aceea n practic, dac se lucreaz cu astfel de c+mpuri se impune lucrul cu mai multe copii de siguran.

+2

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

C+mpurile de tip =eneral sunt folosite pentru a introduce obiecte de tipul 278. 0cestea pot fi c+mpuri multimedia sau entiti /indoFs ca de e!emplu foaie de calcul 8!cel sau document /ord. C+mpurile C5aracter ('inar6) i #emo('inar6) sunt folosite n cazul n care se lucreaz n reea. !i+ul c,m+ului
#7aracter (Binar8)

Descriere

&rime

"ang

&emo (Binar8)

7a fel cu tipul #7aracter> dar *alorile nu sunt translatate atunci c+nd se sc5imb 1 la 29. codul de pagin, de e!emplu parolele unor 2rice caracter caractere utilizatori stocate ntr-o tabel i folosite n di*erse ri 7a fel cu tipul &emo> dar *alorile nu sunt translatate atunci c+nd se sc5imb codul de pagin, de e!emplu scriptul de logare al unui utilizator (n di*erse ri)

,ipul de dat Variant, nu apare la crearea fiierelor de date, dar ele e!ist n mediul V ". !i+ul Descriere &rime "ang c,m+ului
6ariant 0cest tip de dat poate fi de orice tip recunoscut de V " sau poate a*ea *aloarea NA77. uncie de tipul uncie de tipul 0cest tip de *ariabil este definit n sinta!apredefinit de dat. predefinit de dat. limbaGului prin caracterul HeH situat naintea numelui datei.

4./ I.p%e.ent#re# 'i&iere%or !e !#te (n %i."#3u% Fo*Pro.


"rincipalele operaii care se e!ecut n *ederea implementrii unui fiier de date sunt1) crearea structurii fiierului4 2) desc7iderea ? nc7iderea fiierului de date, ntr-o zon de lucru (/2IJ 0I80) n *ederea prelucrrii4 1) introducerea datelor conform cu structura fiierului4

4./.1 -re#re# 'i&ieru%ui !e !#te in!epen!ent 4free table5 !in 'ere#)tr# !e co.en$i )#u cu #3utoru% )i)te.u%ui !e .eniuri
"entru a crea o un fiier de date se poate folosi instruciunea#"*$!* KL nume fiier M D N O

++

-#pito%u% 4

din fereastra de comenzi. &ac nu se tasteaz numele fiierului sau se tasteaz caracterul N atunci apare o fereastr de dialog (figura ..9), n care se introduce numele fiierului de date care se *a crea.

Fig. 4 @ Fereastra de definire a numelui fiierului de date

"entru e!emplul prezentat s-a creat fiierul de date cu numele tblPfreetable. &up tastarea numelui fiierului, se *a aciona butonul a5e pentru crearea fiierului. %e poate folosi n acelai scop sistemul de meniuri, select+nd meniul File, subopiunea 0eF. "e ecran *a apare fereastra de dialog pentru selectarea tipului de fiier (figura ..@).

Fig. 4 A Ferastra 0*B

%e *a alege butonul !able din lista entitlor afiate.

+6

Me.or#re# !#te%or (n Vi)u#% Fo*Pro 2ricare din cele dou metode *a desc5ide fereastra de dialog din figura ..E.

Fig. 4 E Fereastra !able Designer +entru definirea structurii unui fiier de date

0ceasta este o fereastr de natur modal, adic pentru a selecta o alt operaie aceast fereastr trebuie nc5is, prin butonul :C de terminare a operaiei de creare tabel sau prin butonul #ancel de anulare a operaiei. $n pagina Fields sunt definite c+mpurile fiierului de date. #odul de lucru este simplu. %e introduce numele c+mpului (atributului) dorit, ma!im 1; caractere, n caseta Name, se alege tipul c+mpului i mrimea acestuia. ,ipurile c+mpurilor sunt cele enunate anterior. "rin fereastra de dialog se poate na*iga folosind tastatura sau mouse-ul. &ac se folosete tastatura atunci cu aGutorul tastei !$B se poate selecta obiectul dorit ntrun sens sau combinaia 7iftD!ab pentru selectarea obiectului cu deplasare n sens in*ers. &ac se folosete mouse-ul, se face clic pe obiectul care se dorete a fi selectat. &up definirea tuturor c+mpurilor, am definit structura fiierului &' . %tructura unui fiier de date poate fi oric+nd modificat. Qtergerea unui c+mp din structur are ca efect pierderea irecuperabil a datelor din acel c+mp. &ac se modific lungimea unui c+mp atunci datele sale *or fi modificate astfel dac lungimea c+mpului se mrete atunci informaiile memorate sunt completate la dreapta cu spaii4 dac lungimea c+mpului este micorat, atunci se *a face o trunc5iere a datelor originale i se *or elimina caracterele cele mai din dreapta. $n pagina 3nde!es sun definii indecii ataai fiierului (fig ..:). $n acest caz pot fi definii doar inde!i de tip "egular i #andidate. 0supra noiuni Hinde!H se *a re*eni pe parcursul acestui capitol. "agina !able afieaz n cazul fiierelor de date independente date referitoare la fiierul creat (fig. ..?).

+7

-#pito%u% 4

Fig. 4 F #rearea indexilor in fiierele de date inde+endente

Fig. 4 G 'agina !able

4././ -re#re# 'i&iere%or !e !#te !in pro8r#. )ur)9 PR:


Crearea unor fiiere de date din program surs Visual o!"ro se realizeaz cu comanda#"*$!* !$B)* R &' L nume M Lnume lung de fiierM K I88O (Lnume c+mp1MDLtipMKLlungimeMKLzecimaleMO ) ,KLnume c+mp2M... O KNA77 RN2, NA77O KCS8CJ l8!presie1 K8II2I ,e!t8roare1OO K&8 0A7, e8!presie1O K"I3#0IT J8T R AN3UA8O KI8 8I8NC8% Nume,abel2 K,0V Nume8tic5eta1OO KN2C",I0N%O K, NumeC+mp2 ...O K, "I3#0IT J8T e8!presie2 ,0V Nume8tic5eta2 R, AN3UA8 e8!presie1 ,0V Nume8tic5eta1O K, 2I83VN J8T e8!presie. ,0V Nume8tic5eta. KN2&A"O I8 8I8NC8% Nume,abela1 K,0V Nume8tic5eta9OO K, CS8CJ l8!presie2 K8II2I ,e!t8roare2OO)R I2# 0II0T Nume#atrice 0ceasta este de fapt o comand a limbaGului %U7 implementat n mediul V ". %emnificaia parametrilor comenzii este prezentat n tabelul ..1. ,abelul ..1

+; 'arametru #omand
!able sau DBF 0ume 0ume lung F"**

Me.or#re# !#te%or (n Vi)u#% Fo*Pro emnificaie


"arametrii sinonimi ai comenzii Numele fiierului de date care se creaz. Numele lung al fiierului poate conine 12: de caractere i poate fi specificat doar n cazul n care fiierul de date aparine unei baze de date %pecific faptul c tabela este independent n cazul n care o baz de date este acti*. $n cazul n care nici o baz de date nu este desc5is acest parametru poate lipsi, dac se dorete crearea unei tabele indepandente. Numele primului c+mp din structura fiierului. ,ipul primului c+mp definit. 7ungimea c+mpului definit. Numrul de zecimale al c+mpului, n cazul n care acesta este c+mp numeric Numele celorlalte c+mpuri care se introduc "ermite introducerea *alorii null n c+mp. &ac unul dintre c+mpuri conine *aloarea null atunci numrul de c+mpuri care poate fi creat ntr-un fiier de date se reduce de la 299 la 29.. Nu permite e!istena *alorilor null n cadrul c+mpului. 0ceasta este *aloarea implicit la crearea fiierului de date "ermite specificarea unor reguli de *alidare pentru c+mp 0fieaz un mesaG de eroare n cazul n care regula de *alidare pentru c+mp nu este ndeplinit %pecific *aloarea inial a c+mpului Creaz un inde! primar pentru c+mpul specificat Creaz un inde! candidat pentru c+mp %tabilete numele tabelei printe cu care se realizeaz o legtur persisent "re*ine translatarea c+mpurilor memo i caracter cu cod de pagin diferit Crearea unui inde! e!tern Crearea unui inde! candidat e!tern Ieprezint numele unei matrici e!istente care conine numele, tipul, lungimea i numrul de zecimale pentru fiecare c+mp .

0ume cim+2 !i+ )ungime Hecimale 0ume cim+3 0U))

0:! 0U)) #I*#C *"":" D*F$U)! '"(&$"; C*; U0(JU* "*F*"*0#* 0:#'!"$0 F:"*(=0 C*; 0:DU' F":& $""$;

0ceast comand este deosebit de util pentru a crea ntr-o aplicaie fiiere de date temporare adic acele fiiere care dup o anumit faz a aplicaiei sau dup terminarea e!ecuiei aplicaei pot s fie terse. $n cazul acestei comenzi tipurile c+mpului sunt date de ctre urmtoarele litere C ir de caractere de o anumit lungime4 N numeric, de o anumit lungime i cu un anumit numr de zecimale4 *irgul mobil de o anumit lungime i cu un anumit numr de zecimale4 3 integer4 ' double4

6, T 7 # & , V currenc6 logic4 memo4 dat calendaristic4 date time4 general

-#pito%u% 4

*xem+lul 4.2 % se creeze fiierul de date %070I30,.dbf cu urmtoarea structur #atr N(@) numrul matricol al salariatului4 Nume C(12) numele salariatului4 "renume C(2;) prenumele salariatului4 &ataPnast & data naterii salariatului4 %e! 7 dac salariatul este de se! masculin *aloarea c+mpului este , (true)4 %tare Pci*il 7 dac salariatul este cstorit *aloarea c+mpului este , (true)4 *+rsta N(1) *+rsta salariatului. %e desc5ide fereastra de editare n care se *a scrie urmtoarea comand#"*$!* !$B)* salariat(nume #(23)> +renume #(3<)> data.nast D> sex )> stare.ci5il )> 5,rsta 0(4))

4./.1 -re#re# unui 'i&ier !e !#te (ntr<o "#$9 !e !#te


$n mediul Visual o! crerea unui fiier de date ntr-o baz de date, permite pe

Fig. 4 2< #rearea structurii unui fiier de date ntr9o baz de date

l+ng crearea c+mpurilor i a inde!ilor, impunerea unor restricii la ni*el de c+mp sau la ni*el de fisier de date. An fiier de date, poate fi creat inial ntr-o baz de date sau

61

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

un fiier de date independent poate fi ataat la o tabel. ereastra pentru crearea structurii tabelei este prezentat n fig. ..1;. 0cest mod de creare a tabelei prezint o serie de a*antaGe "ermite nume lungi de c+mpuri, p+n la 12: de caractere. n definirea numelui unui cmp nu se folosete caracterul "spaiu", el poate fi nlocuit cu caracterul HPH (liniua de subliniere)4 "rezint trei zone distincteK Dis+la8> &a+ field t8+e to classes> field 5alidation pentru a impune di*erse restricii asupra c+mpurilor i o zon de comentarii asupra c+mpului realizat, Field comment4 $n caseta !able pot fi introduse restricii asupra fiierului de date n ansamblu4 "ermite definirea inde!ului de tip c5eie primar4 "ermite realizarea n cadrul bazei de date a relaiiolor permanente ntre tabele de tipul one to one, one to man6 sau man6 to man6. Wona Dis+la8 permite introducerea unor restricii asupra c+mpului definit. Iestricia poate fi introdus sub forma unui format particularizat al c+mpului (n caseta Format) sau sub forma unei mti de intrare (n caseta (n+ut masL). "rincipalele caracterele folosite pentru proprietatea Format sunt prezentate n tabelul ..2 ,abelul ..2 #aracter Desctriere folosit
M N O $ D * Con*ertete literele mici n litere mari. Vizualizeaz simbolul monezii pentru c+mpul de tip currenc6 Vizualzeaz datele numerice folosind notaia tiinific. "ermite folosirea doar a caracterelor alfabetice. olosete setarea curent pentru %8, &0,8. 8diteaz data calendaristic n formatul 'ritis5.

"entru masca de intrare principalele caractere folosite sunt prezentate n tabelul ..1 ,abelul ..1 Caracter folosit
M P N NN G $ ) 0 Q ;

&escriere
Con*ertete literele mici n litere mari. "ermite folosirea caracterelor numerice a spaiului i a semnului. "ermite folosirea simbolului monetar ntr-o pozie fi!. "ermite folosirea simbolului monetar ntr-o pozie aleatoare dup *aloarea numeric. "ermite folosirea *alorilor numerice i a semnului H-H. "ermite folosirea numai a caracterelor alfabetice. "ermite folosirea numai a *alorilor logice .t. (true), .f. ( alse). "ermite folosirea numai a caracterelor alfanumerice. "ermite folosirea oricrui caracter. "ermite folosirea caracterelor T, 6, N i n pentru *alorile logice true respecti* false

$n caseta #a+tion pot fi introduse caractere care *or nlocui denumirea c+mpului ntr-o comand V ". *xem+lul 4.3

6/

-#pito%u% 4

%e consider baza de date acultate (fig ..11) n care se creaz tabela %tudent

Fig. 4 22 Baza de date RFacultateR i tabela R tudentR

a) C+mpul HnpH apare n comenzile V " cu denumirea Nume si "renume (caseta Caption)4 b) $n caseta ormat s-a folosit caracterul HXH pentru ca informaia din c+mp s fie scris cu litere mari indiferent de caracterul introdus n c+mp. $n zona Field 6alidation, pot fi introduse restricii asupra c+mpului. 0cestea se introduc sub forma unor e!presii, n caseta "ule> unde se apeleaz *x+ression Builder (fig. ..12)

61

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

Fig. 4 23 (ntroducerea restriciilor n caseta "ule i *x+ression Builder

*x+ression Builder este apelat de la butonul HYH situat n dreapta casetei Iule. 8l are rolul de a forma o e!presie. 2 e!presie, este o entitate care conine operanzi i operatori. 0supra acestui aspect, se *a re*eni n aceast carte c+nd *om discuta despre limbaGul de programare V ". *x+ression Builder permite introducerea ntr-o e!presie a c+mpurilor e!istente n tabel, a unei funcii predefinite V " sau a unei *ariabile de memorie V ". &in figur, se obser* c a fost introdus restricia*aloarea c+mpului anuls s fie mai mare dec+t ; i mai mic sau egal cu 9. $n cazul n care regula de *alidare impus asupra c+mpului, nu este ndeplinit, apare un mesaG predefinit sau un mesaG scris de ctre utilizator, n caseta &essage. Valoarea inial a c+mpului poate fi definit n caseta Default 6alue. "entru e!emplul prezentat *aloarea inial este 1. An comentariu de c+mp este o not care clarific semnificaia sau scopul c+mpului. V " stoc5eaz acest element ca un c+mp #emo, de aceea poate fi oric+t de lung. ,oate acestea pot fi introduse n caseta Field comment. Wona &a+ field to classes permite alegerea unei clase sau a unei biblioteci de clase pentru un c+mp n cazul n care acesta este introdus ntr-un formular. $n caseta ,able (fig ..11), este permis introducerea unor restricii la ni*el de nregistrare ntr-un fiier de date.

64

-#pito%u% 4

Fig. 4 24 'agina !able +entru fiierul de date tudent

Validarea la ni*el de nregistrare, nseamn, modificarea unor *alori din c+mpurile nregistrrii i mutarea ntr-o nou nregistrare. Codul de *alidare nu poate modifica un c+mp din nregistrarea curent, nu poate modifica contorul de nregistrri sau pointerul de nregistrare dar poate compara *aloarea unui c+mp cu a altuia sau poate e!ecuta o *alidare prin cutare ntr-un alt fiier. 2rice e!presie de *alidare trebuie s returneze un rezultat de tip logic. "entru aceasta se folosete o funcie utilizator scris n caseta "ule, din zona "ecord 5alidation. Caseta &essage conne un mesaG care nsoete *alidarea. "entru a realiza o funcie de *alidare se folosete funcia V ", V8, 7&%,0,8, care stabilete dac un c+mp dintr-un tabel s-a sc5imbat n timpul comenzii curente sau dac starea de tergere s-a modificat, prin *alorile pe care le poate returna (tabelul ..1). ,abelul ..1 6aloare returnat Descriere
2 3 4 4 C+mpul i indicatorul de tergere nu i-au modificat *aloarea %-a modificat *aloarea c+mpului i a indicatorului de tergere C+mpul i indicatorul de tergere nu i-au modificat *aloarea ntr-o operaie de adugare %-a modificat *aloarea c+mpului i a indicatorului de tergere ntr-o operaie de adugare

Wona !riggers definete declanatorii (trigerii) care se e!ecut atunci c+nd se adaug ((nsert !rigger), se modific (U+date !rigger) sau se terge (Delete !rigger) o nregistrare din tabel. Ca i n cazul *alidrii la ni*el de c+mp i la ni*el de nregistrare, codul surs al triggeru-lui se stoc5eaz n baza de date. $ntodeauna c+nd se e!ecut o operaie de adugare, modificare sau tergere ntr-o tabel, V " *erific dac e!ist un declanator aferent tabelei i n cazul n care acesta e!ist este apelat codul program surs, al respecti*ului trigger.

62

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

4./.1 Le89turi (ntre t#"e%e%e "#$ei !e !#te


,abelele e!istente nr-o baz de date pot fi legate ntre ele prin di*erse c+mpuri. An inde! primar a unui c+mp sau o c5eie primar dintr-o tabel, are o c5eie de cutare sau o c5eie e!tern , care poate fi un inde! regular al unui c+mp, ntr-o alt tabel. "entru e!emplul prezentat n figura ..1 legtura dintre tabela tudent i tabela 0ote se realizeaz ntre c5eia primar 0rl care este un unde! primar n tabela tudent i inde!ul regular 0rl> din tabela 0ote (fig ..1.). 0ceasta este o relaie de tip one to many. $n Visual o! pot e!ista relaii de tip one to one, one to many i many to one . Ielaiile de tip many to many se obin din precedentele.

Fig. 4 24 )egtura ntre tabele ("elations7i+)

ereastra *dit "elations7i+ se poate acti*a poziion+nd cursorul pe legtura stabilit ntre tabelele din baza de date i e!ecut+nd cliZ pe butonul din dreapta al mouse-ului. &in meniul conte!tual care apare se apeleaz opiunea cu acelai nume. 8ditarea legturii se poate realiza i din meniul &atabase, care se acti*eaz la *izualizarea bazei de date (#2&3 T &0,0'0%8). $ntr-o tabel se pot stabilii i relaii de autoreferire, prin care un c+mp dintr-o tabel este legat cu un c+mp din aceeai tabel. $n capitolul 2 s-au prezentat noiuni teoretice despre integritatea referenial. $n general aceasta stabilete ce operaii sunt permise ntre tabelele legate. 3ntegritatea referenial trateaz ca in*alide, nregistrrile care nu ndeplinesc anumite criterii. 8a se aplic doar n cazul n care se modific datele din c5eile stabilite n relaie. 0ceste modificri se refer la 0dugarea unei nregistrri noi4 #odificarea unei nregistrri e!istente4 Qtergerea unei nregistrri e!istente. $n cazul n care se dorete adugarea unei nregisrri noi n tabela copil (0ote) legat la tabela printe ( tudent), apar dou cazuri1. "ermite adugare de nregistrare nou n tabela copil indiferent dac e!ist corespondent n tabela printe ((gnore)4 2. %e generaz o eroare atunci c+nd se introduce o nregistrare n tabela copil care nu are corespondent n tabela printe ("estrict) $n cazul n care se dorete modificarea unei nregisrri n tabela copil (0ote) legat la tabela printe ( tudent), apar trei cazuri1. "ermite modificarea n nregistrarea din tabela copil c5iar dac aceasta nu are corespondent n tabela printe ((gnore)4

6+

-#pito%u% 4 2. Nu permite modificarea unei nregistrri din tabela copil, care nu are corespondent n tabela printe, acest lucru gener+nd eroare ("estrict)4 1. %unt modificate automat toate nregistrrile din tabela copil care au a*ut aceeai *aloare a c5eii printe *ec5i cu noua *aloare a c5eii. &e e!emplu un student i modific numrul de legitimaie, atunci n tabela copil 0ote, c+mpul nr.leg se modific automat cu noua *aloare (#ascade). $n cazul n care se dorete tergerea unei nregisrri n tabela printe ( tudent)

Fig. 4 2@ #onstructorul de integritate referenal

legat la tabela copil (0ote), apar trei cazuri1. "ermite tergerea n nregistrarea din tabela printe indiferent dac n tabela copil e!ist sau nu nregistrri legate cu nregistrarea din tabela printe ((gnore)4 2. 0pare un mesaG de eroare atunci c+nd tergerea se face pe o nregistrare n tabela printe pentru care e!ist nregistrri corespunztoare n tabela copil ("estrict)4 1. %e terg automat, toate nregistrrile din tabela copil, legate de nregistrarea din tabela printe tears (#ascade). $n V ", integritatea referenial poate fi definit automat folosind Constructorul de integritate referenial ("eferential (ntegrit8 Builder). 0cesta poate fi apelat fie de la butonul "eferenial (ntegrit8> din fereastra de editare a legturii sau din meniul Database al ferestrei Database Designer. ereastra care apare permite definirea restriciilor definite anterior (fig ..19).

4.1 Acti #re# 'i&iere%or !e !#te

66

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

4.1.1 De)c=i!ere# > (nc=i!ere# unui 'i&ier !e !#te Vi)u#% Fo*Pro (ntr<o $on9 !e %ucru
&esc5iderea fiierului de date presupune rezer*area n memoriea intern a calculatorului a unei zone n care Visual o!"ro *a memora toate informaiile necesare utilizrii acestui fiier. 0ceste zone se numesc zone de lucru ele fiind numerotate de la 1-12E@E n *ersiunea Visual o!"ro E.; standard. Numrul de zone de lucru care pot fi desc5ise n acelai timp, difer funcie de *ersiunea V " cu care se lucreaz. "rimele 1; zone de lucru pot fi marcate cu literele de la 0-[. #anipularea fiierelor de date este la ndem+na programatorului pe baza comenzilor specializate n acest scop. n aceast carte se prezint modul de lucru pe un calculator nelegat n reea, de aceea o serie de parametrii ai comenzilor,care se refer la modul de lucru n reea sunt omii. &up desc5iderea fiierului de date se trece la lucrul efecti* cu aceasta, adic prelucrarea datelor din fiierul de date (citire)4 modificarea datelor (scriere de date noi peste cele e!istente)4 adugarea datelor noi la cele e!istente (scriere de date noi)4 tergerea informaiilor e!istente n fiierul de date. &up terminarea lucrului cu fiierul de date urmeaz nc7iderea acestuia, operaie ce const n desfacerea legturii dintre zona de lucru i fiierul de date 4 eliberarea memoriei alocate la desc5idere (eliberarea zonei de lucru)4 nc5iderea fiierului de date memor+nd modificrile efectuate de la desc5idere, pn n acest moment. "entru a desc5ide un fiier de date a crui structur a fost creat i n care au fost sau nu introduse date se folosete comanda U * cu sinta!aU * KLnumePfisM R NO K(0 Le!pN1MO K$=$(0O K(0D*Q Llista fis inde!M R N S:"D*" KLe!pN2M R Lfisiere inde! id!M R K!$=O Lnume tagM K:F Lfisiere cd!MO K$ #*0D(0= T D* #*0D(0=OOOO K0730% LaliasMO K*Q#)U (6*O K I$"*DO K0:U'D$!*O U * nume Pfis este cea mai uzual form a comenzii pentru desc5iderea fiierului de date n zona de lucru acti* sau curent. 3mplicit aceast zon este zona 1.

67

-#pito%u% 4

2piunea (0 Le!pN1M definete zona de lucru n care fiierul de date este desc5is. Le!pN1M, este o e!presie numeric a*+nd *aloarea cuprins ntre 1-229. $n cazul n care n zona de lucru e!ist un fiier deGa acti* acesta este nc5is i de*ine acti* fiierul desc5is ultima dat. 2piunea $=$(0 se folosete pentru a desc5ide acelai fiier de date n mai multe zone de lucru. *xem+lul 4.4 U * salariat U * salariat 3N 2 0V03N se desc5ide fiierul de date %alariat n zona 1 i n zona 2 de lucru 2piunea S(0D*Q -lista fisPinde!/ T U S:"D*" S-e!pN2/ T -fisiere inde! id!/ T S!$=V -nume tag/ S:F -fisiere cd!/V S$ #*0D(0= T D* #*0D(0=VVVV se folosete pentru a desc5ide fiierele inde!ate. %e *a e!plica opiunea n subcapitolul referitor la inde!area fiierelor de date. 2piunea $)($ se refer la aliasul atribuit de utilizator unui fiier de date. 0liasul este un nume oarecare atribuit la desc5iderea fiierului. $n unele cazuri aliasul poate fi definit de ctre mediul o!"ro. *xem+lul 4.4 A%8 salariat 3N 1 0730% s n zona de lucru 1 fiierul salariat are aliasul \s]. 2piunile *Q#)U (6* i I$"*D sunt specifice modului de lucru n reea, caz n care mai muli utilizatori au acces la acelai fiier n acelai timp. $n cazul lucrului n reea dac la un fiier de date au acces mai muli utilizatori acesta trebuie dec5is N28^C7A%3V8 n caz contrar un singur utilizator a*+nd acces la fiierul de date. 2piunea 0:U'D$!* se refer la faptul c fiierul este desc5is numai n citire, deci datele din fiier nu pot fi modificate. *xem+lul 4.@ U * pers 0:U'D$!* $nc5iderea unui fiier acti* ntr-o zon de lucru se poate face folosind comanda A%8 fr nici o opiune sau folosind alte comenzi specifice ca de e!emplu C72%8 077. %pre deosebire de comanda A%8 care nc5ide doar fiierul din zona de lucru acti* comanda C72%8 077 nc5ide toate fiierele acti*e la un moment dat n mai multe zone de lucru.

4.1./

Se%ect#re# unei $one !e %ucru (n Fo*Pro

6;

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

7a pornirea Visual o!"ro zona de lucru curent este 1 sau zona 0 . $n cazul n care lucrm cu mai multe fiiere de date atunci zona de lucru se poate sc5imba folosind instruciunea*)*#! -e!p N/ RLe!pCM Le!pNM reprezint numrul zonei de lucru ce *a fi acti*at4 Le!pCM reprezint numele zonei de lucru care *a fi acti*at, acesta poate fi o liter 0-[ sau un alias definit de utilizator. *xemlul 4.A "resupunem c dorim s lucrm cu trei fiiere Cu denumirile isa, isb, isc, pe care *rem s le desc5idem n trei zone de lucru diferite. *)*#! 1 U * isa *)*#! 2 U * isb *)*#! 1 U * isc $n continuare apelul la unul dintre fiiere se face folosind doar instruciunea *)*#!. 0stfel, pentru a lucra cu isc este suficient a selecta numai zona de lucru 1*)*#! 1 3mplicit aliasul, adic numele asociat fiierului este c5iar numele acestuia. %electarea fiierului isc ca fiier de lucru se poate face prin comanda*)*#! isc *xem+lul 4.E "resupunem c dorim s desc5idem fiierul %alariati n zona de lucru 2 atribuindu-i aliasul _salar`. U * salriati (0 b $)($ salar *)*#! salar se selecteaz zona de lucru 2 prin aliasul salar al fiierului din aceast zon de lucru. Wn Visual o!"ro pentru maGoritatea comenzilor se pot folosi doar primele . caractere din comand . "entru a obine numrul zonei de lucru curent se folosete funcia*)*#! () 0ceasta returneaz un numr ce reprezint numrul zonei de lucru curente sau numrul ultimei zone de lucru nefolosite. *)*#!() sau *)*#! (<) returneaz numrul zonei de lucru curente4 *)*#!(2) returneaz numrul ultimei zone de lucru nefolosite

4.4. Acce)u% %# 'i&iere%e !e !#te 4.4.1 Acce)u% %# )tructur# unui 'i&ier !e !#te

7,

-#pito%u% 4

"entru a modifica structura unui fiier de date se folosete comanda &:D(F; !"U#!U"* -numePfiier/ LnumePfiierM este numele fiierului cruia i se modific structura. &ac numele fiierului nu este specificat apare o fereastr de dialog care cere s se specifice numele fiierului dorit. ereastra de dialog care apare este prezentat n figura ..E sau ..1;. $n aceast fereastr se pot modifica numele c+mpurilor, dimensiunile acestora, se pot aduga c+mpuri noi sau se pot terge c+mpuri e!istente. Qtergerea i inserarea de c+mpuri se realizeaz prin poziionarea cursorului pe indicatorul de nregistrri i acionarea tastelor 3nsert sau &elete. Vizualizarea structurii unui fiier de date se realizeaz cu comandaD( ')$; !"U#!U"* K(0 Le!pNM R Le!pCMO K!: '"(0!*" S'":&'!V R !: F()* LfiierMO K0:#:0 :)*V Le!pNM specific zona de lucru n care se gsete fiierul, iar Le!pCM specific numele fiierului. 3mplicit afiarea se face pe ecran. 0cest lucru poate fi in5ibat prin folosirea opiunii 0:#:0 :)*. %tructura fiierului poate fi copiat ntr-un fiier (opiunea !: F()*) sau la imprimant (opiunea !: '"(0!*"). 2piunea '":&'! este specific mediului /indoF. Comanda )( ! !"U#!U"* este identic cu precedenta comand, singura deosebire const+nd n faptul c instruciunea D( ')$; !"U#!U"* face pauz dup umplerea unui ecran cu informaii. 3nformaia afiat are urmtorul coninut- pe prima linie se afieaz fiierul de date la care se refer comanda4 pe a doua linie se afieaz numrul de nregistrri din fiierul &' 4 pe a treia linie se afieaz data calanderistic c+nd s-a scris ultima informaie n baza de date4 pe urmtoarele linii se afieaz c+mpurile ce alctuiesc structura fiierului de date cu caracteristicile acestora (nr.c+mp, nume, tip, lime). An alt mod de a crea un fiier de date este acela de a copia structura unui fiier e!istent n unul nou, care *a a*ea iniial structura identic cu a fiierului surs. Comanda de copiere a structurii este#:'; !"U#!U"* !: LfiierM F(*)D Llist c+mpuriM LfiierM este numele noului fier n care s-a copiat structura. &ac nu se dorete copierea tuturor c+mpurilor, atunci c+mpurile care se doresc a fi copiate se pot specifica cu opiunea F(*)D . *xem+lul 4.F %e copiaz din structura fiierului "ers.dbf c+mpurile Nume i "renume n noul fiier "ersP1.dbf. U * "8I% #:'; !"U !: "8I%P1 .&' 4

71

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

F(*)D NA#8, "I8NA#8 U * "8I%P1.&' 73%, %,IA #): * $)). %e mai poate copia structura unui fiier de date n nregistrrile unui nou fiier de date, folosind comanda#:'; !: LfiierM !"U#!U"* *Q!*0D*D 0ceast fiier de date are o structur fi! format din . c+mpuri iar c+mpurile fierului de date acti* de*in nregistrri. C+mpurile fi!e au urmtoarea semnificaie ieldPname (nume c+mp) de tip ir de caractere, n care se depoziteaz numele c+mpurilor structurii4 ieldPt6pe (tip c+mp) de tip ir de caractere, de lungime 1, n care se depoziteaz un caracter ce corespunde tipului c+mpului structurii( C-ir de caractere,N-numeric, &-dat calendaristic, -*irgul mobil, 7-logic, #memo)4 ieldPlen(lungime c+mp), de tip numeric, memoreaz lungimea fiecrui c+mp al structurii4 ieldPdec (numr de zecimale din c+mp), de tip numeric, n care se memoreaz numrul de zecimale pentru un c+mp numeric al structurii. *xem+lul 4.G %e e!ecut comanda #:'; !"U#!U"* asupra fiierului %070I30,.&' . U * %070I30,.&' #:'; !"U *Q!*0D*D !: ,8#" iierul ,8#" *a a*ea structuraNI 387&PN0#8 387&P,T"8 387&P78N 387&P&8C 1 #0,I N 12 --2 NA#8 C 12 --1 "I8NA#8 C 2; --. &0,0PN0% & 9 %8^ 7 @ %,PC3V37a 7 1 E VbI%,0 N %tructura fiierului %070I30,.&' de*ine nregistrare pentru ,8#".&' . Alterior se poate crea un nou fiier de date folosind nregistrrile fiierului ,emp.dbf cu comanda#"*$!* "8I%1 F":& ,8#" se creeaz fiierul de date "8I%1.&' cu noua structur.

4.4./ Acce)u% %# c0.puri%e unui 'i&ier !e !#te

7/

-#pito%u% 4 *!

0ccesul la c+mpurile unui fiier de date este controlat de comanda F(*)D cu sinta!a *! F(*)D !: KLc+mp1MOKLc+mp2MOD077

SET FIELDS ON >OFF


&ac *! F(*)D este 2N atunci F(*)D reprezint lista c+mpurilor ce pot fi accesate. 0ccesul la toate c+mpurile unui fiier de date se poate face prin comanda *! F(*)D !: $)) Numrul c+mpurilor dintr-o baz de date este dat de funcia F#:U0!(). *xem+lul 4.2< 8!plicaii 0) %e determin numrul de nregistrri din fiierul specificat4 ') %e determin mrimea c+mpului Nume din fiierul pers4 C) %e determin numele unui c+mp din fiierul de date identificat printr-un numr. %emnul \N] se folosete pentru listarea pe ecran a rezultatului unei funcii. %e *a re*enii pe larg n capitolul

4.4.1

Acce)u% %# (nre8i)tr9ri%e unui 'i&ier !e !#te

0ccesul la coninutul unui fiier de date se poate face n dou moduri1. sec5enial c+nd pentru obinerea unei informaii se parcurg nregistrrile una dup cealalt n ordinea fireasc a lor4 2. direct c+nd putem stabili unde anume pe suport este nregistrarea *izat i o utilizm fr s ne preocupm de nregistrrile anterioare. iecare nregistrare (articol) din fiier are ataat un numr, care poart denumirea de indicator de nregistrare. iierul cu e!tensia &bf are dou caractere speciale care marc5eaz, nceputul i sf+ritul unui fiier, bof, eof. Corespunztor acestor dou caractere speciale, e!ist funciile B:F() care returneaz rezultatul ade*rat (\,]) dac indicatorul de inregistrare este poziionat la nceputul fiierului4 *:F() care returneaz rezultatul ade*rat (\,]) dac indicatorul de nregistrare este poziionat la sf+ritul fiieruluide date . "entru a cuta o anumit nregistrare n fiierul de date se folosete comanda =: sau =:!: care poziioneaz indicatorul de nregistrare al fiierului pe o anumit nregistrare. %inta!a acestor comenzi este identic=: S"*#:"DV Le!pN1M K(0 Le!pN2M R (0 Le!pCMO =: !:' T B:!!:& K(0 Le!pN2M R (0 Le!pCMO U * "8I% $ NF#:U0!() @ UF (H*(cNA#8c) B 12 # UF(*)D(2) NA#8

71

Me.or#re# !#te%or (n Vi)u#% Fo*Pro =:!: S"*#:"DV Le!pN1M K(0 Le!pN2M R (0 Le!pCMO =:!: !:' T B:!!:& K3N Le!pN2M R 3N Le!pCMO Cu*+ntul rezer*at "*#:"D este folosit opional, e!pN1 reprezint numrul

$ B # D * F =

U * %070I30,3 =: !:' U"*#0:() =: "*#:"D "*#0:()D1 =: "*#0:()B. =: 1; #): * $))

nregistrrii n fiier. 7ocalizarea se poate face i ntr-o alt zon de lucru precizat prin e!presie numeric Le!pN2M sau prin aliasul fiierului dedate Le!pCM. =: !:' poziionare pe nceput de fiier =: B:!!:& poziionare pe sf+rit de fiier Numrul nregistrrii curente (*aloarea numeric a indicatorului de nregistrri la un moment dat) dintr-un fiier din zona de lucru Le!pNM sau identificat prin aliasul Le!pCM este dat de funcia "*#0:() cu sinta!a"*#0:(KLe!pNM R Le!pCMO) &ac ambele e!presii Le!pNM i Le!pCM lipsesc atunci funcia returneaz numrul nregistrrii curente din fiierul de date acti*. *xem+lul 4.22 8!plicaii 0) desc5iderea fiierului de date4 ') poziionare la nceputul fiierului4 C) *izualizare numr nregistrare curent4 &) poziionarea pe nregistrarea urmtoare4 8) se poziioneaz pe al patrulea articol de la nregistrarea curent4 ) poziioneaz pe articolul cu indicatorul de nregistrri zece4 V) nc5iderea fiierului de date. An alt tip de deplasare, cu indicatorul de nregistrri, de-a lungul fiierului de date se realizeaz cu comanda C(' care are sinta!aC(' KLe!pN1M R Le!pN2M R Le!pCMO Le!pN1M reprezint numrul de nregistrri peste care se sare. 8!presia poate s fie at+t poziti* c+t i negati*, saltul poate a*ea loc nainte i napoi n fiierul de date4 Le!pN2M i Le!pCM specific fiierul la care se refer funcia, prin numrul zonei de lucru n care este desc5is (Le!pN2M) sau prin aliasul corespunztor (Le!pCM). &ac cele dou e!presii nu se specific comanda se refer la fiierul de date acti*.

74 A%8 %070I30,3 V2 I8C2 1 %J3" NI8CN2() %J3" 1; NI8CN2() %J3" -9 NI8CN2() NI8C2AN,() NI8C%3W8() C72%8 077

-#pito%u% 4

B #
D * F

uncia "*##:U0!() returneaz numrul de nregistrri dintr-un fiier de date. uncia are sinta!a"*##:U0!(KLe!pN2M R Le!pCMO) %eminificaia celor dou e!presii este identic cu cea de la comanda %J3". uncia "*# (H*() returneaz mrimea unei nregistrri dintr-un fiier &' %inta!a acestei funcii este"*# (H*(KLe!pN2M R Le!pCMO) %eminificaia celor dou e!presii este identic cu cea de la comanda %J3". *xem+lul 4.23 8!plicaii 0) poziionare pe nregistrarea trei din fiier4 ') incrementatrea indicatorului de nregistrri4 C) *aloarea indicatorului de nregistrri se mrete cu 1;4 &) *aloarea indicatorului de nregistrri se micoreaz cu 94 8) se *izualizeaz numrul de nregistrri dein fiier4 ) se *izualizeaz mrimea nregistrrii din fiier.

4.4.4

Do.eniu% (nre8i)tr9ri%or

$n limbaGul Visual o!"ro e!ist comenzi care acioneaz asupra mai multor nregistrri dintr-un fiier de date. 0legerea nregistrrilor se face folosind n comand condiia de selectare, din mulimea nregistrrilor unui fiier se aleg doar acelea care ndeplinesc condiia de selecie. $n Visual o!"ro condiiile de selecie se realizeaz prin cu*intele rezer*ate F:" i BI()* care sunt clauze a mai multor comenzi ale limbaGului. Clauza F:" (H "entruH) se folosete pentru selectarea nregistrrilor n funcie de o condiie logic. %e selecteaz acele nregistrri pentru care e!presia logic este ade*rat. 8!presia logic este acea e!presie care ntoarce un singur rezultat- ade*rat (true) sau fals (false).

72

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

Clauza BI()* (Hc+t timpH) realizeaz selecia asemntor cu clauza F:"> aceasta fc+ndu-se n funcie de *aloarea ade*rat a e!presiei logice. %pre deosebire de clauza F:" care dup gsirea unei nregistrri care nu respect condiia logic, continu testarea celorlalte nregistrri, clauza BI()* ntrerupe cutarea nregistrrilor c+nd o nregistrare nu respect condiia logic. &atorit faptului c *iteza de prelucrare este mult mai mare c+nd se folosete clauza F:" este recomandabil s se foloseasc aceast clauz ori de c+te ori este posibil. Numrul nregistrrilor care se testeaz printr-o condiie de selecie este *ariabil i el constitue domeniul de selecie. 0cesta constitue o clauz distinct pentru o mulime de comenzi o!"ro. Clauza domeniu inclus ntr-o astfel de comand *a a*ea urmtoarele forme $)) selecteaz toate nregistrrile din fiierul de date4 0*Q!Le!pNM se refer la urmtoarele Le!pNM nregistrri, ncep+nd de la nregistrarea curent4 "*#:"D Le!pNM aciuneaz numai asupra nregistrrii cu numrul Le!pNM4 "* ! selecteaz toate nregistrrile de la cea curent i p+n la sf+ritul fiierul de date.

4.2 Oper#ii #)upr# (nre8i)tr9ri%or


0supra nregistrrilor dintr-un fiier de date se pot face urmtoarele operaii principale adugare4 modificare4 tergere.

4.2.1

A!9u8#re# !e (nre8i)tr9ri (ntr<un 'i&ier !e !#te

$n paragrafele anterioare am artat modul n care se creeaz un fiier de date, i modul n care poate fi manipulat structura fiierului. 0dugarea de nregistrri se poate face n dou moduri 1. adugarea de noi nregistrri la sf+ritul fiierului de date 2. introducerea de nregistrri noi n interiorul fiierului de date Cea mai uzual comand folosit pentru introducerea de date este comanda $''*0D cu sinta!a0""8N& K'70NJO

7+

-#pito%u% 4

0ceast comand adaug nregistrri la sf+ritul fiierului de date acti*. &ac se tasteaz comanda cu acelai nume n fereastra #ommand Bindo1> se desc5ide fereastra \0ppend] prin care datele se introduc interacti* n fiierul de date (fig...1@)

Fig. 4 2A Fereastra $++end

%altul la c+mpul urmtor se realizeaz fie la apsarea tastei 8nter, fie atunci U * %070I30, *! #$""; :0 *! #$""; !: %8^ $''*0D *! #$""; :FF U *

0 '

c+nd c+mpul este ocupat n totalitate cu date. "entru a edita un c+mp de tip memo, c+nd cursorul se afl n c+mpul respecti* se tasteaz combinaia de taste C+d. 3eirea cu sal*are din fereastra de editare a c+mpului memo se face cu CB/. &atele introduse n fereastra 0ppend sunt influenate de comanda *! #$""; cu sinta!a-

SET -ARR? ON>OFF


*! #$""; !: Llist c+mpuriMK0&3,3V8O 0ceast comand poate determina ca toate c+mpurile sau numai anumite c+mpuri introduse ntr-o nou nregistrare s fie identice cu c+mpurile din nregistrarea precedent *xem+lul 4.24 &orim s introducem persoanele de se! masculin n fiierul %070I30,. 8!plicaii 0) %e seteaz c+mpul %8^, pentru a fi identic cu nregistrarea precedent. %e *a scrie automat caracterul , n toate nregistrrile care *or fi scrise dup nregistrarea curent. ') C+nd se termin introducerea datelor se tasteaz *! #$""; :FF prin care se re*ine la starea iniial n care fiecare c+mp dintr-o nregistrare nou poate a*ea *alori diferite.

76

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

2 anumit list de c+mpuri poate fi e!tins prin folosirea clauzei 0&&3,3V8, care permite ca la o anumit list de c+mpuri e!istente n comanda *! #$""; s se adauge una nou. Comand $''*0D B)$0C adaug o nregistrare HblanZH, adic o nregistrare n care toate c+mpurile sunt *ide, la sf+ritul fiierului de date urm+nd ca mai t+rziu s se ncarce informaia util prin alte comenzi o!"ro. Comanda $''*0D F":&LfiierM KF(*)D Llist c+mpuriMO KF:" Le!p7MO K!;'*V adaug nregistrri dintr-un alt fiier de date n fiierul de date curent. &ac se dorete ca n fiierul de date s fie introduse numai anumite c+mpuri atunci se folosete opiunea F(*)D n care se *or introduce c+mpurile care se *or copia, separate prin *irgul. "entru a prelua doar anumite nregistrri se *a folosi opiunea 2I. Clauza !;'* se folosete pentru a specifica tipul fiierului din care *or fi preluate datele. 0cesta este diferit de tipul &' i aparine altor medii de programare. 0dugarea unei nregistrri noi dup nregistrarea curent, se realizeaz cu comanda (0 *"! care are sinta!a(0 *"! SB*F:"*VSB)$0CV. &ac se folosete clauza opional B*F:"* atunci se adaug naintea nregistrri curente, o nregistrarea nou. Clauza opional B)$0C este analoag cu aceeai clauz de la comanda $''*0D. ereastra care apare n urma acestei comanzi este identic cu aceea de la comanda $''*0D. $n general este o comand mai puin folosit deoarece introducerea de nregistrri noi printre cele *ec5i se folosete mai rar cu aceast comand, e!ist+nd alte te5nici prin care se realizeaz acest lucru.

4.2./

Mo!i'ic#re# (nre8i)tr9ri%or unui 'i&ier !e !#te

#odificarea informaiilor stocate ntr-un fiier de date se poate face cu una din comenzile #I$0=* *D(! B":B * "*')$#* "rimele trei comenzi nu modific propriu-zis coninutul unui fiier de date, ci desc5id o fereastr de editare n care utilizatorul *a modifica informaiile dorite. Comenzile #I$0=* i *D(! sunt identice , ele fiind diferite de comanda B":B * numai prin modul n care sunt aranGate c+mpurile n fereastra de editare. $n timp ce la comenzile *D(! i #I$0=* c+mpurile sunt aezate pe *ertical, la comanda B":B * c+mpurile sunt aezate pe orizontal.

4.2./.1 -o.#n!# @ROASE

77

-#pito%u% 4

%inta!a comenzii esteB":B * KF(*)D Llist c+mpuriMO K0:"*F"* IV KF:0! Le!pC1M K, Le!pN1MOO K0:"&$)V K !;)* Le!pC2MO K0:B$(!V KF:" Le!p71MO K'$"!(!(:0 Le!pN1MO KF:"&$!V K'"*F*"*0#* Le!pC1MO KF"**H* Lc+mpuriMO K"* !V KC*; Le!pr1M K, Le!pr2MOO S $6*V K)$ ! T 0:(0(!V K!(&*:U! Le!pN.MO S)*D(!V S!(!)* Le!pC.MO S"*D(!V S6$)(D K- O Le!p72M S):#C Le!pN2MO S*"":" Le!pC9MOO S)'$"!(!(:0V KBI*0 Le!p71MO K0:$''*0DV SB(D!I Le!pN9MO K0:#)*$"V KKB(0D:B Lnume fereastr1MO S0:D*)*!*V K(0 SB(0D:BV Lnume K0:*D(! T 0:&:D(F;V fereastr2M K0:)="(DV S0:"="(DV T (0 #"**0VV K0:)(0CV K#:):" #I*&* Le!pN@M K0:&*0UV T #:):" Llist perec5i de K0::'!(&(H*V culoriMO Comanda B":B * fr nici o opiune, afieaz toate c+mpurile din fiierul de date oferind utilizatorului, accesul cu toate drepturile la informaiile e!istente (fig ..9). 7a tastarea comenzii B":B *, n meniul principal apare meniul !able care permite configurarea ferestrei de editare a fiierelor.

Fig. 4 2E Fereastra Bro1se i meniul !able aferent acesteia

2piunea Font permite sc5imbarea fontului de editare.

7;

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

Fig. 4 2F Fereastra Bro1se 9 'ro+erties

2piunea "roperties desc5ide fereastra cu acelai nume (fig ..1:). ereastra afieaz numele fiierului acti* n fereasta Bro1se, permite blocarea articolelor n cazul lucrului n reea ()ocL records), permite definirea unui filtru asupra datelor n caseta Data filter, permite desc5iderea fiierului inde!at prin alegerea inde!ului dorit din caseta (ndex order, permite accesul la toate articolele din fiier sau numai la cele specificate de ctre filtru, prin alegerea butonului dorit din zona $llo1 access to. 'utonul ield ilter permite acti*area anumitor c+mpuri din cadrul tabelei. 2piunea =o to "ecord permite poziionarea pe anumite articole din cadrul fiierului de date. 2piunea $++end 0e1 "ecord permite adugarea unui articol nou din fereastra Bro1se. 2piunea !oggle Deletion &arL permite marcarea pentru tergere articolului sau a grupului de articole dorit 2piunea "esize 'artitions este similar cu opiunea "0I,3,32N% a comenzii B":B *. 0ceasta acti*eaz butonul de mprire al ferestrei de editare n dou zone distincte. Cu aGutorul tastelor direcionale sau al mouse-ului se definesc cele dou regiuni denumite partiii. 2piunea ize Field permite redimensionarea c+mpului acti* (c+mpul n care se afl cursorul) cu aGutorul tastelor sgei sau al mouse-lui. 2piunea &o5e Field, permite sc5imbarea ordinii de afiare a c+mpurilor, n fereastra de afiare. 2piunea "emo5e Deleted "ecords permite refacerea articolelor terse. 2piunea "ecall "ecords permite demarcarea articolelor marcate pentru tergere 2piunea Delete "ecords, permite marcarea pentru tergere a unor nregistrri din fiierul de date. 2piunea $++end "ecord, permite adugarea de articole noi n fiierul de date dintr-un alt fiier de date. 2piunea "ebuild (ndexes> permite refacerea fiierelor de inde! ataate fiierului de date sau refacerea etic5etelor inde! ataate fiierului de date. $n continuare *om prezenta opiunile comenzii B":B *.

;,

-#pito%u% 4

2piunea F(*)D a comenzii B":B *> ofer utilizatorului posibilitatea de a afia doar anumite c+mpuri ale fiierului de date acti*, n fereastra de editare. Numele c+mpurilor care se doresc a fi afiate se *or scrie n lista de c+mpuri, desprite de *irgul. 2piunile de editare ale c+mpurilor sunt prezentate n tabelul ..2 ,abelul ..2 :+iuni de editare a c,m+urilor *x+licaii
SK' X -ex+#3/V -c,m+2/ SK"V SKmrime c,m+V SK6 X -ex+r2/ SKFV SK* X -ex+#2/VV %e poate specifica un cod "3C,AI8 specific comenzilor de intrare ieire (Capitolul NNNNNN) C+mpul se poate *izualiza pe un numr de caractere. "ermite *alidarea c+mpului introdus. &up ce c+mpul sa modificat i se iese din editarea acestuia se e*alueaz Le!pr1M i dac *aloarea ei este .,. (ade*rat) atunci data introdus este corect. K- O se folosete pentru a fora *alidarea K-8O se folosete pentru a sc5imba mesaGul de eroare n cazul n care, *aloarea e!presiei Le!pr1M este fals. Ieprezint inter*alul n care trebuie s se gseasc c+mpul dup editare. Le!pr2M reprezint limita inferioar, iar Le!pr1M reprezint limita superioar. %c5imb numele c+mpului care se afiaz n fereastra de editare. %e permite editarea c+mpului doar dac e!presia logic Le!p71M are *aloarea ade*rat.

SKB X -ex+r3/> -ex+r4/ SKFVV

SKI X -ex+#4/V SKB X -ex+)2/V

*xem+lu 4.24 U * %070I30, B":B * F(*)D NA#8-I-1;, #0,I-Sd`#0,I3C27` 0 B":B F(*)D V3I%,0-VdV3I%,0M19 0N& V3I%,0L9;- V3I%,04 B 3NV073&0` B":B F(*)D %070I-/d%070IM2;;;;; C 8!plicaii 0) Comand 'I2/%8 n care se afiaz c+mpul Nume pe lungime de 1; caractere i se sc5imb numele c+mpului #atr n #atricol. ') Comand 'I2/%8 n care asupra cmpului Virsta se pune condiia de *alidare ca acesta s fie cuprins ntre *alorile numerice 19 i 9;. $n cazul n care se tasteaz *alori diferite acestui inter*al apare mesaGul de eroare V3I%,0 3NV073&0. C) Comand B":B * care in5ib editarea c+mpului %070I dac *aloarea salarului este mai mic dec+t 2;;;;;. 2piunea F:" permite apariiei n fereastra de editare doar a acelor nregistrri care ndeplinesc condiia logic. 2piunea 6$)(D acioneaz la ni*el de nregistrare. 2iunea este e*aluat n momentul n care se trece de la o nregisrare la alta i *erific dac nregistrarea

;1

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

respecti* ndeplinete o anumit *aloare. Clauza 8II2I ofer utilizatorului U * %070I30, 0 B":B V073& %070I M 2;;;;; 8II2I c&0,8 8I2N0,8c B":B /S8N %8^d. . B
#

B":B 2I %070IM1;;;;;; #): * $))

posibilitatea de a introduce un mesaG, diferit de mesaGul sistem \3n*alid input]. 2piunea BI*0 se folosete pentru a specifica dac o nregistrare poate fi sau nu modificat. &ac e!presia logic este .,., atunci este *alidat accesul la nregistrare pentru a face modificri. *xem+lul 4.2@ 8!plicaii 0) n cazul n care c+mpul %alar din nregistrarea n care sau fcut modificrile nu ndeplinete condiia logic %alarM2;;;;;, trecerea la o alt nregistrare, genereaz mesaGul _&0,8 8I2N0,8`. ') comanda permite numai modificarea nregistrrilor n care c+mpul %e! are *aloarea . .. C) comanda *izualizeaz n fereastra de editare doar acele nregistrri care ndeplinesc condiia logic. 2piunile 0:*D(! i 0:&:D(F; ale comenzii 'I2/%8 sunt identice, ele impiedic modificarea datelor din tabele, dar permit tergerea i adugarea de nregistrri. 2piunile 0:D*)*!* i 0:$''*0D in5ib posibilitile de tergere i de adugare de noi nregistrri n fiierul de date. 2piunea 0:&*0U in5ib apariia meniului ,able ( ig ..1E) n meniul principal. 0lte opiuni ale comenzii B":B * sunt prezentate n tabelul .... ,abelul ... :+iune
F:0! i !;)* F:"&$! F"**H* )$ ! )*D(! i "*D(! ):#C )'$"!(!(:0 0:)(0C

emnificaie
2piuni pentru alegerea tipului fontului de editare specifice mediului /indoF. 3nformeaz comanda 'roFse c trebuie s foloseasc *ariabile din fiierul format acti*. $n aceast carte nu se *or folosi fiierele format 7imiteaz editarea doar la un singur c+mp din fereastra de editare. "reia ultima configuraie de fereastr de editare Bro1se sal*at. Comut partiiile st+ng sau dreapt n modul #7ange. %pecific numrul de coloane care rm+n fi!ate n poziia lor iniial n fereastra de editare. "laseaz iniial cursorul n fereastra din st+nga n cazul n care fereastra de editare este partiionat. 2piunea nu coreleaz partiiile. &eplasarea cursorului ntr-o partiie nu implic deplasarea cursorului i n cealalt partiie

;/
0::'!(&(H*

-#pito%u% 4 U * %070I30, fiier de date. 0ceasta este cea mai rapid te5nic de cutare e!istent =: "*#:"D . n mediul V ". "*')$#* B(!I _32N8%CA`, "I8NA#8 B(!I _32N`, #0,I4 0:"*F"* I NA#8 Comand folosit doar n mediu multiutilizator. B(!I 1;12 0:"&$) ereastra de editare este setat la atributele normale. 0:B$(! $''* B)$0C %e poate folosi n cazul n care din program se apeleaz comanda 'roFse i are rolul ca dup"I8NA#8 afiarea ferestrei de editare programul "*')$#* NA#8 B(!I _"2"8%CA`, B(!I _32N`, #0,I4 utilizator se continu. B(!I 1;11 '$"!(!(:0 $mparte fereastra de editare n dou partiii. "*')$#* %8^ B(!I .,., %,0I8PC3V7 /3,S . . '"*F*"*0#* %al*eaz atributele ferestrei pentru o utilizare ulterioar =: !:' "* ! %e utilizeaz mpreun cu clauza F:" i impune comenzii s caute "*')$#* %070I B(!I 1;;;;;; 0*Q! 1 nregistrrile de la nregistrarea curent p+n la sf+ritul fiierului. "*')$#* %070I B(!I 19;;;; NA#8d`32N8%CA 0N&4 $6* %e folosete ntr-un program F:" i foreaz pstrarea pe ecran a ferestrei _"I8NA#8d`32N i a c+mpurilor memo asociate. !(&*:U! %pecific c+t timp ateapt comanda Bro1se ca utilizatorul s #): * $))
!(!)* B(D!I B(0D:B #:):" introduc datele, nainte de a nc5ide automat fereastra de editare. 2fer posibilitatea de a da un titlu ferestrei de editare. &efinete limea ma!im a unei coloane din fereastra de editare. 0fiaz fereastra de editare n interiorul unei ferestre definit anterior "ermite s se indice o configuraie de culori prestabilite sau o list de atribute pentru culoare. &ezacti*eaz te5nica "us7more de cutare a nregistrrilor ntr-un

0 '

C &

4.2././ -o.#n!# REPLA-E


#odificarea c+mpurilor unui fiier de date poate fi efectuat i cu comanda "*')$#* care spre deosebire de comenzile prezentate anterior nu desc5ide o fereastr de editare. %inta!a acestei comenzi este"*')$#* Lc+mp1M B(!I Le!pr1M K$DD(!(6*V K, Lc+mp22M B(!I Le!pr2M K$DD(!(6*OO ... KLdomeniuMO KF:" Le!p71MO KBI()* Le!p72MO S0::'!(&(H*V Comanda nlocuiete *ec5ea *aloare din c+mpul1 cu *aloarea rezultat n urma e*alurii e!presiei e!pr1, c+mpul2 cu e!pr2 i aa mai departe. "entru c+mpurile memo se folosete clauza $DD(!(6* prin care c+mpul memo nu este ters, *aloarea e!presiei fiind ataat la sf+ritul c+mpului. Comanda "*')$#* se folosete n general cu comanda $''*0D B)$0C pentru a introduce nregistrri noi ntr-un fiier. *xem+lul 4.2A 8!plicaii 0) "entru nregistrarea cu numrul . se nlocuiete coninutul c+mpurilor Nume, "renume, #atr4

;1

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

') %e adaug o nou nregistrare la sf+ritul fiierului, n care se *or complecta c+mpurile- Nume, "renume, Natr, %e!, %tarePci*l4 C) %e modific c+mpul %alar pentru trei nregistrri ncep+nd de la nregistrarea curent4 &) %e modific c+mpul %alar pentru nregistrarea care conine n c+mpurile Nume i "renume, e!presiile 32N8%CA i 32N. U * %070I30, *! D*)*!*D :0 =: !:' D*)*!* 0*Q! . D*)*!* 0*Q! 1 2I %8^d D*)*!* "* ! F:" %,0I8PC3V7 d , D*)*!* 0*Q! $)) #): * $))

0 ' C &

4.2.1 Bter8ere# (nre8i)tr9ri%or !intr<un 'i&ier !e !#te.


Qtergerea unei nregistrri dintr-un fiier de date se poate realiza la dou ni*ele i anume1. la ni5el logic, c+nd nregistrarea nu este propriu zis tears din fiierul de date ci ea este Hmarcat pentru tergereH, indic+nd astfel aceast stare a nregistrrii. $nregistrrile marcate pentru tergere pot fi determinate de funcia D*)*!*D(). 2. la ni5el fizic, c+nd nregistrarea este, efecti* tears din fiierul de date, ulterior ea nu mai poate fi recuperat. #arcarea pentru tergere se face prin comanda D*)*!* cu sinta!aD*)*!* KLdomeniuMO K 2ILe!p71MO K/S378Le!p72MOKN22",3#3W8O &ac nu se specific nimic n comand atunci se marc5eaz pentru tergere nregistrarea curent. LdomeniuM este domeniul nregistrrilor. Clauzele 2I i /S378 sunt clauzele generale de cutare a nregistrrilor, n funcie de o e!presie logic. Clauza 0::'!(&(H* se refer la dezacti*area metodei Ius5more. Controlul la nregistrrile marcate pentru tergere este dat de ctre comanda*! D*)*!*D :0T:FF &ac se alege opiunea 2N atunci nregistrrile marcate pentru tergere nu *or fi accesibile celorlalte comenzi Visual o!"ro care *or folosi aceste nregistrri. 2piunea 2 permite accesul celorlalte comenzi Visual o!"ro la nregistrrile marcate pentru tergere. *xem+lul 4.2A

;4

-#pito%u% 4

8!plicaii 0) Qterge primele . nregistrri de la nceputul fiierului. ') Qterge primul articol care are ndeplinit condiia logic c+mpul %e!d . C) Qterge toate articolele din fiier care au n c+mpul %tarePci*l *aloarea ,. &) Qterge toate articolele rmase n fiier de la nregistrarea curent p+n la sf+ritul fiierului. $nregistrare marcat pentru tergere nu este tears fizic. 3nformaia marcat pentru tergere poate fi recuperat cu aGutorul comenzii "*#$)) cu sinta!a"*#$)) KLdomeniu.O SF:"Le!p71MO KBI()*Le!p72MO. Clauzele acestei comenzi sunt identice cu clauzele comenzi &878,8. &ac nu se specific nici o clauz se recuperaz nregistrarea curent. Qtergerea efecti* a nregistrrilor dintr-un fiier de date se face cu comanda '$#C. &up aplicarea acestei comenzi nregistrrile nu mai pot fi refcute. ,oate nregistrrile dintr-un fiier pot fi terse global prin comanda W0". 0ceast comand acti*eaz o fereastr de dialog care *alideaz sau nu comanda. 3nformaiile terse din fiier sunt distruse definiti*, fr posibiliti de refacere. Comanda W0" este ec5i*alent cu comenzile- &878,8 077 i "0CJ. $n limbaGul Visual o!, e!ist o comand prin care, fr tergere sau marcare pentru tergere, se poate n5iba accesul la unele nregistrri. 0ceast comand este*! F()!*" !: SLe!p7MO Ca efect al acestei comenzi n fiierul de date *or apare doar nregistrrile care ndeplinesc condiia e!p7. *xem+lul 4.2F 0 ' U * %070I30, *! F()!*" !: %,0I8PC3V7d.,. B":B NF()!*"() #): * $))

8!plicaii 0) %e aleg din fiierul de date numai acele nregistrri care au n +mpul %tarePci*l *aloarea ade*rat. ') %e *izualizeaz condiia de filtrare cu aGutorul funciei 37,8I().

4.+ Vi$u#%i$#re# coninutu%ui unei 'i&ier !e !#te


Vizualizarea coninutului unui fiier de date se poate face folosind una dintre comenzile pentru modificarea nregistrrilor fiierului de date, prezentate n paragraful precedent. $n acest caz, pentru a a*ea o *izualizare strict a fiierului de date este necesar in5ibarea posibilitilor de scriere n c+mpurile nregistrrilor i tergerea acestora. Comenzile specifice pentru *izualizare nregistrrilor sunt comenzile D( ')$; i )( !.

;2

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

Comanda D( ')$; are sinta!aD( ')$; SSF(*)D O Llist c+mpuriM R F(*)D )(C* LmascM R F(*)D *Q#*'! LmascMO KLdomeniuMO SF:" Le!p71MO SBI()* Le!p72MO K:FFV K!: '"(0!*" K"I2#",O R !: F()* Lnume fiierMO K0:#:0 :)*V K0::'!(&(H*O 0fiarea informaiilor se face astfel pe prima linie se reprezint lista c+mpurilor4 pe urmtoarele linii se reprezint nregistrri din fiierul de date. "e prima poziie se afieaz numrul de ordine al nregistrrii din fiierul de date. 2piunea F(*)D specific lista de c+mpuri pentru afiare. &ac lipsete se afieaz toate c+mpurile. 2piunile F(*)D )(C* i F(*)D *Q#*'! afieaz sau nu mai multe c+mpuri dup o anumit masc de identificare. 2piunile LdomeniuM F:" i BI()* sunt cele specifice domeniului nregistrrilor. 2piunea :FF, in5ib apariia n formatul de afiare, a informaiei de pe coloana ; reprezent+nd numrul de ordine al nregistrrilor. 2piunile !: '"(0!*" i !: F()*, permite transmiterea rezultatelor *izualizrii la imprimant sau ntr-un fiier 0%C33. 2piunea 0:#:0 :)* in5ib *izualizarea coninutului fiierului pe ecranul *ideoterminalului calculatorului 3mplicit dac n KdomeniuO nu se specific nimic atunci cu D( ')$; se *izualizeaz nregistratrea curent. *xem+lul 4.2G

;+

-#pito%u% 4

8!plicaii 0) Vizualizarea primei nregistrri din fiierul %alariat4 ') Vizualizarea tuturor nregistrrilor din fiier, fr afiarea pe coloana ; a indicatorului de nregistrri4 C) Vizualizarea c+mpurilor Nume, "renume i %alar de la treia nregistrare din fiierul de date4 &) Vizualizarea tuturor nregistrrilor de la nregistrarea cu numrul 1 p+n la sf+ritul fiierului de date4 8) Vizualizarea tuturor nregistrrilor care conin *aloarea fals pentru c+mpul %tarePci*l4 ) Vizualizarea tuturor nregistrrilor n fiierul te!t, cu numele %alar.t!t, fr afiarea rezultatelor *izualizrii pe ecran. Comanda )( ! este asemntoare cu comanda &3%"70T, a*+nd aceeai
$ B # D * F

U * %070I30, D( ')$; D( ')$; $)) :FF =: "*#:"D 1 D( ')$; F(*)D NA#8,"I8NA#8,%070I D( ')$; F(*)D %070I "* ! =: !:' D( ')$; $)) F:" %,0I8PC3V7d. . D( ')$; $)) !: 378 %070I.,^, 0:#:0 :)* #): * $))

sinta!, dar cu urmtoarele deosebiri domeniul implicit al comenzii *izualizeaz toate articolele fiierului de date4 n timp ce comanda D( ')$; afieaz ecran cu ecran, trecerea de la un ecran la altul fc+ndu-se prin apsarea unei taste, comanda )( ! afieaz fr pauz ntre ecrane, toate nregistrrile4 Comanda )( ! nu afieaz nregistrrile marcate pentru tergere, n cazul n care a*em acti* comanda *! D*)*!*D :0, pe c+nd comanda D( ')$; afieaz i aceste nregistrri. "entru ca prima linie de *izualizare care conine c+mpurile dintr-un fiier s nu apar ca urmare a comenzilor D( ')$; sau )( ! se folosete comanda *! I*$D(0= :FF.

4.6 Fere#)tr# D#t# Se))ion

;6

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

"entru afiarea zonelor de lucru, a fiierelor acti*e ntr-o aplicaie precum i a legturilor dintre acestea se folosete fereastra D$!$ * (:0 (fig ..1?), care se apeleaz din meniul /indoF.

Fig 4. 2G Fereastra Data ession

0ceast fereastr afiaz o list derulabil de zone de lucru, aliasurile tabelelor desc5ise i o sc5em a tuturor relaiilor stabilite ntre fiierele de date. $n tabelul ..9 sunt descrise funciile butoanelor din partea central a ferestrei. ,abelul ..9
'":'*"!(*

"*)$!(:0 B":B * :'*0 #): *

0cti*eaz fereastra BorL $rea 'ro+erties (fig ..1:) 0cti*eaz fereastra de setare a legturilor dintre fiierele de date. 0cti*eaz fereastra de editare cu acelai nume corespunztoare unui fiier de date. 0cti*eaz un fiier de date. $nc5ide un fiier de date.

$nregistrrile dintr-un fiier pot corespunde uneia sau mai multor nregistrri din alt fiier, caz n care se spune c ntre cele dou fiiere e!ist o legtur sau n terminologia relaional a bazelor de date, o relaie. 0a cum s-a artat anterior n acest capitol, fiierul de unde se stabilete relaia se numete fiier \printe], iar fiierul \copil] este fiierul n care s-a stabilit relaia. "entru stabilirea unei relaii ntre dou fiiere de date, trebuie ca ambele s fie desc5ise n c+te o zon de lucru. %e poate stabili o relaie, numai ntre c+mpuri care memoreaz date comune. "entru a stabili interacti* o relaie ntre dou fiiere, acestea se desc5id n dou zone de lucru diferite. Wona curent de lucru este zona n care este desc5is fiierul printe. %e acioneaz apoi butonul "elation, pe ecran *a apare fiierul printe cu o sgeat ndreptat n Gos i spre dreapta. %e stabilete fiierul copil din zonele de lucru i relaia de legtur cu aGutorul constructorului de e!presii.

;7

-#pito%u% 4

4.7 Or!on#re# unui 'i&ier !e !#te


2rdonarea nregistrrilor n Visual o!"ro se poate realiza n dou moduri 4 prin ordonarea propiu-zis a fiierului de date n ordinea dorit a nregistrrilor. %e creeaz practic un nou fiier de date care conine aceleai nregistrri ca i primul, dar de data aceasta nregistrrile sunt ordonate dup unul sau mai multe c+mpuri, numite c5eie de ordonare. prin inde!area fiierului de date, aceasta presupun+nd crearea unui fiier care conine informaii cu pri*ire la ordinea nregistrrilor n fiierul de date. 0ceasta NU CONINE nregistrrile fiierului de date, fiierul inde! ine e*idena articolelor din fiierul de date ntr-o anumit ordine.

4.7.1

Sort#re# 'i&iere%or !e !#te

%ortarea fiierelor de date, adic aranGarea nregistrrilor ntr-o anumit ordine, funcie de unul sau mai multe c+mpuri ale fiierului de date, se realizeaz cu comanda :"! a crei sinta! este:"! !: Lnume fiierM :0 Lc+mp1MKD0OKD&OKDCO, KC+mp 2VS?$VS?DVS?#V ... K$ #*0D(0=VSD* #*0D(0=O KLdomeniuMOKF:" Le!p71MOKBI()* Le!p72MO KF(*)D Llist c+mpuriMO K0::'!(&(H*V Comanda creeaz un nou fiier de date, al crui nume este dat de ctre clauza !:. C+mpul sau c+mpurile dup care se face sortarea sunt denumite c5ei de sortare, numele acestora fiind dat de ctre clauza :0. "arametrii 0 i & se folosesc pentru a realiza ordonarea cresctoare sau descresctoare a nregistrrilor din fiier i sunt similari cu clauzele $ #*0D(0= i D* #*0!(0=. "arametrul C se folosete pentru a compara iruri de caractere i pentru a nu face deosebire ntre literele mari sau mici. Clauza 0%C8N&3NV este implicit. iierul de date rezultat n urma operaiei de sortare poate a*ea toate c+mpurile fiierului de date iniial sau poate a*ea numai anumite c+mpuri carepot fi specificate n clauza F(*)D . &ac nu se dorete ordonarea tuturor nregistrrilor dintr-o baz de date atunci se pot folosi clauzele -domeniu/ prin care se poate selecta un anumit numr de nregistrri din fiierul de date4 2I sau /S378 prin care, nregistrrile se selecteaz n funcie de o anumit condiie logic *xem+lu 4.3< %e consider fiierul de date %alariat.dbf. #)*$

;;

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

#): * $)) D*)* F()* #0,I3C27.&' D*)*!* F()* 07 0'.&' D*)*!* F()* %070I.&' D*)*!* F()* %07NA#.&' U * %070I30, 8!plicaii 0) aranGarea nregistrrilor din fiierul de date dup c+mpul #atr n fiierul #atricol n ordine ascendent4 ') aranGarea nregistrrilor din fiierul de date dup c+mpurile Nume i "renume n fiierul Nume n ordine ascendent4 C) aranGarea nregistrrilor din fiierul de date care ndeplinesc condiia logic salarM9;;;;;, n ordine descendent, dup c5eia #atr, n fiierul %alar4 &) aranGarea nregistrrilor n ordie ascendent dup c+mpurile %alar i Nume, n fiierul %alnum. Noul fiier de date are doar c+mpurile Nume i %alar.

4.7./ In!e*#re# 'i&iere%or !e !#te


3nde!ii sunt structuri de date care au drept unic scop, creterea *itezei de accesare a articolelor. 7a crearea structurii fiierelor de date am prezentat tipurile de indecsi care pot fi create. $n afar de metoda prezentat, fiierele inde! pot fi create prin comenzi tastate n fereastra de comand. iierele de inde! sunt fiiere au!iliare pe disc, ele sunt diferite de fiierele de date, cutarea se face dup *alorile anumitor c+mpuri care poart denumirea de c5eie de inde!are. 3nde!ul este definit asupra unui c+mp unic din fiier, el conine *alorile c+mpului de inde!are, ordonate astfel nc+t s 0 :"! !: #0,I3C27 2N #0,I *)* 2 U * #0,I3C27 B":B *)* 1 :"! !: 07 0' 2N NA#8,"I8NA#8 *)* 1 U * 07 0' B":B *)* 1 :"! !: %070I :0 #0,I F:" %070I M9;;;;; D* # *)* . U * %070I B":B *)* 1 :"! !: %07NA# :0 %070I,NA#8 387&% NA#8,%070I *)* 9 U * %07NA# B":B #): * $))

'

&

1,,

-#pito%u% 4

se poat face o cutare liniar asupra lor. 3nde!ul mai conine un c+mp n care se gsesc pointeri sau adrese la blocuri sau nregistrri din fiierul de date. &imensiunile fiierului inde! sunt mai mici dec+t dimensiunile fiierului de date, de aceea cutarea se face mult mai rapid. 3nde!area se poate face pe un c+mp care are *alori distincte n cadrul fiierului de date, caz n care inde!ul se numete inde! primar. 3nde!area se poate face dup o c5eie de inde!are (unul sau mai multe c+mpuri) care nu are *alori distincte n tot fiierul, caz n care fiierul se numete inde! prin clusterizare. An fiier mai poate a*ea mai multe fiiere de inde! secundare, care pot fi specificate pe un c+mp oarecare din fiier, n afar de c+mpurile principale de inde!are. $n limbaGul Visual o!"ro e!ist dou tipuri de fiiere inde! fiierele cu e!tensia (DQ care conin un singur inde!4 fiierele cu e!tensia #DQ, care sunt fiiere inde! compuse. Numrul de indeci dintr-un fiier inde! compus este limitat doar de capacitatea memoriei disponibile4 fiecare inde! poart denumirea de etic5et (tag). An fiier inde! compus care are acelai nume cu fiierul de date &' i care este legat de acesta poart denumirea de fiier inde! compus structurat. iierele C&^ au a*antaGe fa de fiierele 3&^ prin faptul c ele conin mai muli indeci nglobai. &esc5iderea unui fiier de date care are ataai mai muli indeci simpli, poate dura foarte mult. &e asemenea fiierele inde!ate compuse asigur o integritate sporit fiierelor inde!, prin legarea str+ns a fiierelor de date de indecii care i sunt asociai. iierele inde! at+t cele simple c+t i cele compuse se prezint sub forma unor arbori 'B. iierele inde!ate compuse au c+te un arbore 'B pentru fiecare etic5et de inde!are. iierele inde! trebuie s fie desc5ise ori de c+te ori se desc5ide i fiierul de date &' i se realizeaz modificri ale articolelor din el. 0ltfel apar anomalii n funcionarea fiierelor inde!. $n cazul fiierelor compuse structurale acest lucru poate fi negliGat deoarece aceste fiiere de inde! se desc5id automat la desc5iderea fiierului de date DBF. iierele inde! simple se recomand a se crea atunci c+nd dorim s creem un inde! temporar care e!ist un timp limitat de timp, dup care se terge cu o comand D*)*!* F()* LnumePfiierPinde!M. $n cazul n care se creeaz fiiere inde! care *or fi folosite n mod frec*ent, un timp mai ndelungat, soluia cea mai bun este de a folosi fiiere inde! compuse, adic fiierele inde! #DQ, deoarece etic5etele de inde! ntr-un astfel de fiier sunt actualizate n mod permanent. 3ndecii pot fi creai cu comanda (0D*Q, iar cu comanda "*(0D*Q, poate fi refcut un inde! alterat. Comanda (0D*Q de creare a unui fiier inde! simplu sau compus are sinta!a(0D*Q :0 Le!pPc5eieM ,2 LfiierPid!M T !$= LnumePetic5etM K:F LfiierPcd!MO KF:" Le!p7MO K#:&'$#!V K$ #*0D(0= T D* #*0D(0=V KU0(JU*V K$DD(!(6*V

1,1

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

C5eia de inde!are este descris de ctre e!presia aflat n clauza :0. 0ceast e!presie poate fi de tip- ir de caractere, numeric, logic, dat calendaristic, funcie definit de utilizator. 0ceast ultim noiune *a fi e!plicat pe larg n capitolul \"roceduri i funcii]. C5eie de inde!are nu poate fi un c+mp de tip memo. 7ungimea unei e!presii a unei c5ei de inde!are poate fi de 1;; de caractere pentru fiierele 3&^ i 2.; de caractere pentru fiierele C&^. &ac se specific clauza ,2 se creaz un fiier inde! de tip 3&^, iar dac se specific clauza ,0V se creaz un fiier compus. iierele compuse sunt de dou categorii structurale, caz n care au acelai nume cu fiierul de date, fr a mai fi specificat un alt nume de fiier inde!at n clauza :F a comenzii (0D*Q4 nestructurale, adic ele poart alt nume dec+t cel al fiierului de date, nume care este specificat n clauza 2 a comenzii (0D*Q Clauza #:&'$#! se refer doar la fiierele inde! simple i ofer posibilitatea de a realiza fiiere inde! compactate, adic fiiere inde! cu dimensiuni mai reduse dec+t un fiier inde! obinuit. ,otodat accesul la nregistrri n fiierele compactate este mai rapid. iierele inde! compuse sunt totdeauna compactate. $n cazul n care se dorete inde!area numai a anumitor nregistrri din fiierul de date se folosete clauza F:". 0ceast clauz poate fi specificat numai atunci c+nd este creat o etic5et a unui fier inde! compus. 8!presia logic din clauza F:" poate conine *ariabile de memorie, funcii definite de utilizator sau c+mpuri ale unor alte fiiere &' , desc5ise n alte zone de memorie. &ac este specificat clauza U0(JU* la crearea unui fiier inde!, atunci doar prima nregistrare pentru care *aloarea c5eii de inde!are este aceeai, este introdus n fiierul inde!. Clauza $ #*0D(0= este implicit i semnific ordonarea nregistrrilor n ordine cresctoare. Clauza D* #*0D(0= se refer doar la fiierele inde!ate compuse. &esc5iderea unui fiier inde! se realizeaz cu comanda U * a crei sinta! esteU * KLfiierM R NO S(0 Le!pN1MO K$=$(0O K(0D*Q LlistaPfiierePinde!ateM R N K:"D*" KLe!pN2M R LfiierePinde!atePid!M R K!$=O LnumePetic5etM K:F LfiierePcd!MO K$ #*0D(0= T D* #*0D(0=OOOO K$)($ LaliasMO K*Q#)U (6*O K I$"*DO K0:U'D$!*O

1,/ #): * $)) *! !$)C :FF D*)* F()* inume.id! D*)* F()* matricol.id! U * salariat (0D*Q :0 nume to inume (0D*Q :0 matr to matricol (0D*Q :0 nume !$= nume (0D*Q :0 matr !$= matricol

-#pito%u% 4

0 ' C & 8

(0D*Q :0 salar !$= salar F:" salarM9;;;;; D* #*0D(0= U * salariat (0D*Q inume B":B U * salariat (0D*Q matricol V B":B U * salariat :"D*" !$= nume S B":B U * salariat :"D*" !$= matricol 3 B":B U * salariat :"D*" !$= salar [ B":B #): * $)) Comanda U * care se folosete pentru desc5iderea unui fiier de date poate fi folosit i pentru desc5iderea unui fiier inde!at de tip 3&^ sau C&^. Clauza (0D*Q prezint o list a fiierelor (DQ. &ac se tasteaz caracterul N se desc5ide o fereastr de dialog din care se *a alege fiierul inde!at dorit. iierele din list *or fi separate prin *irgul. Clauza :"D*" determin fiierul din lista de fiiere (DQ care *a de*enii acti* sau etic5eta (,0V) care *a de*eni acti*. 0pelul acestora se poate face i prin e!presia numeric Le!pNM, care reprezint numrul de ordine al fiierului n lista de fiiere sau numrul de ordine al etic5etei n lista de etic5ete. Clauza !$= indi*idualizeaz o etic5et cu un anumit nume. Clauza :F face referin la un fiier #DQ nestructural, deci care are nume diferit de cel al fiierului de date acti*. *xem+lul 4.32 %e consider fiierul de date %alariat.dbf, care este inde!at i desc5is n mai multe moduri. 8!plicaii 0) crearea unui fiier inde!at simplu cu numele inume.id!4 ') crearea unui fiier inde!at simplu cu numele matricol.id!4

1,1

Me.or#re# !#te%or (n Vi)u#% Fo*Pro

C) crearea unui fiier inde!at compus cu acelai nume cu numele fiierului de date, %alariat.cd!, cu c5eia de inde!are nume i etic5eta nume4 &) adugarea etic5etei matricol, corespunztoare c5eii de inde!are matr, n fiierul %alariat.cd!4 8) adugarea etic5etei %alar, corespunztoare c5eii de inde!are %alar n fiierul %alariat.cd!, pentru nregistrrile care ndeplinesc condiia logic \salarM9;;;;; \, aranGarea nregistrrilor fc+nd-se descresctor4 ) desc5iderea fiierului inde!at simplu inume.id!4 V) desc5iderea fierului inde!at simplu matricol.id! S) desc5iderea fiierului inde!at compus %alariat.cd!, cu selectarea etic5etei Nume4 3) se selecteaz etic5eta #atricol din fiierul inde!at compus %alariat.cd!4 [) se selecteaz etic5eta %alar din fiierul inde!at compus %alariat.cd!. 0supra fiierelor inde!ate pot aciona o serie de funcii care returneaz informaii despre fiierele inde!ate 0DQ() returneaz numele fierelor inde!ate simple desc5ise ntr-o anumit zon de lucru4 #DQ() returneaz numele fierelor inde!ate compuse desc5ise ntr-o anumit zon de lucru4 !$=()> ; (32) returneaz numele fiierului simplu sau al etic5etei unui fiier inde!at compus, dintr-o list e!istent4 C*;()> ; (24) returneaz numele c5eii de inde!are specificat la crearea fiierului inde! simplu sau al etic5etei unui fiier inde!at compus4 :"D*"() returneaz numele fiierului inde! simplu acti* sau al etic5etei acti*e. n cazul n care cheia de indexare este format din mai multe cmpuri este necesar formarea unei expresii de indexare de tip ir de caractere. ac cmpurile sunt de tipuri diferite, este obligatorie folosirea unor funcii specifice mediului !isual "ox pentru con#ersia datelor dintr$un tip de dat n alt tip de dat. $n figura ..2; este prezentat realizarea unui inde! folosind o c5eie de inde!are format din dou c+mpuri de tipuri diferite. C+mpul de tip numeric este con*ertit n tip ir de caractere folosind funcia %,I. ormarea c5eii de inde!are din cele dou c+mpuri se realizeaz folosind operatorul de concatenare HBH. 0celai inde! se poate realiza folosind comanda de inde!are n fereastra de comand(0D*Q :0 !"(anuls)Bnp !$= %,A&P&3% &esc5iderea fiierului se realizeaz cu comandaU * !UD*0! :"D*" !$= %,A&P&3%

1,4

-#pito%u% 4

$n general n mediul Visual o! folosirea fiierelor de inde! de tip 3d!, nu este interzis dar se folosesc mai rar. 8fectul prin care se creaz un fiier de inde! at+t din fereastra !able Designer sau prin comanda (0D*Q, este identic, un fiier cu e!tensia

Fig 4. 3< (ndex care are c7eia de indexare format din dou c,m+uri de ti+ diferit

#DQ, care are etic5eta de inde! %,A&P&3%

-onc%u$ii
$n mediul Visual o! suportul de memorare al datelor este relaia sau tabela sau fiierul de date, care poate e!ista independent sau ntr-o baz de date. 8!istena tabelei ntr-o baz de date V ", este soluia recomandat de ctre autor datorit facilitilor pe care le ofer. &in punct de *edere obiectual, o baz de date poate fi considerat o clas de tip container cu numele Data *n5ironment, clas care conine obiecte de tip #ursor> care sunt tabelele bazei de date, *ederile acesteia sau legturile dintre fiierele de date, ale bazei de date. &espre toate acestea *om discuta n capitolul referitor la programarea orientat obiect n mediul Visual o!.

S-ar putea să vă placă și