Sunteți pe pagina 1din 161

UNIVERSITATEA ”LUCIAN BLAGA” DIN SIBIU

FACULTATEA DE ȘTIINȘE ECONOMICE

BAZE DE DATE

- Note de curs -
(format ID)

SIBIU - 2009

1
BAZE DE DATE

1. BAZE DE DATE – BAZE DE DATE RELAłIONALE

CONCEPTE DE 1. Fişier, Bază de date


BAZĂ: 2. Sistem de gestiune a bazelor de date (SGBD),
dicŃionar de date
3. Model entitate-relaŃie, atribut, constrângere
4. Modelele intern, extern şi conceptual şi tipurile de
independenŃă
5. RelaŃie şi tabel.
OBIECTIVE: 1. Crearea unei perspective clare asupra bazelor de
date.
2. Familiarizarea cu elementele legate de baze de date
şi modelele bazelor de date.
3. Crearea unor deprinderi referitoare la proiectarea
bazelor de date.
RECOMANDĂRI Pentru parcurgerea prezentului material se recomandă
PRIVIND parcurgerea atentă a bibliografiei, precum şi studierea
STUDIUL: atentă a materialului aferent în cadrul ActivităŃilor
Asistate (AA).
REZULTATE 1. Clarificarea noŃiunilor legate de baze de date şi
AŞTEPTATE: modele de date.
2. Clarificarea noŃiunilor legate de proiectarea şi
normalizarea bazelor de date.

2
1.1. CONCEPTE GENERALE REFERITOARE LA BAZE DE DATE

OBIECTIVE 1. Clarificarea noŃiunilor referitoare la conceptele generale


legate de baze de date şi nivelele de organizare ale
acestora.
2. Clarificarea elementelor referitoare la modelele de date
şi tipurile de independenŃă.
NOłIUNI CHEIE Fişiere, baze de date, arhitectura unei baze de date, nivele
de organizare, entitate relaŃie, atribut, nivel conceptual,
intern sau extern.

1.1.1. Conceptul de "Bază de date"

După cum s-a menŃionat în capitolul precedent, la baza prelucrării datelor


stau fişierele. Odată cu dezvoltarea informaticii, numărul acestora a crescut,
ajungându-se ca într-o firmă să existe mai multe zeci sau sute de fişiere
permanente şi temporare legate de gestiunea personalului, materialelor,
producŃiei, vânzărilor etc. Această creştere a avut o serie de dezavantaje, dintre
care amintim [NiŃchi90]:
• redundanŃa – este proprietatea unei informaŃii de a se repeta
nejustificat; de exemplu codul materialelor, care poate ajunge la 20-30
de cifre, se repetă în majoritatea acestor fişiere, mărind nejustificat
spaŃiul fizic ocupat;
• inconsistenŃa – este legată de apariŃia distorsionată a unor informaŃii în
diferite contexte; una dintre cauzele inconsistenŃei este redundanŃa
deoarece este suficient ca la o apariŃie (copie) a informaŃiei redundante,
aceasta să fie introdusă greşit şi informaŃia poate deveni inconsistentă;
• validarea datelor – este clar că diferite aplicaŃii care gestionează fişiere
disparate pot valida datele diferit; nevalidarea uniformă a datelor poate
duce la compromiterea întregului sistem de fişiere;
• disponibilitatea şi securitatea datelor – reprezintă o problemă de
asemenea foarte spinosă. Datele aflându-se în fişiere disparate, acestea
pot fi reŃinute de proprietari nefiind disponibile şi comunităŃii
utilizatorilor. De asemenea, neexistând un control centralizat asupra lor
nu se poate asigura securitatea acestora.
Pornind de la toate acestea şi multe altele, cum ar fi dezvoltarea tehnicii de
calcul, s-a ajuns la ideea bazelor de date.

3
BAZE DE DATE

O primă definiŃie a bazelor de date este [NiŃchi&RacoviŃan96]: baza de


date este un sistem integrat, coerent şi partajat de fişiere.
Pentru a asigura folosirea în comun a aceloraşi date de către mai mulŃi
utilizatori era necesară asigurarea independenŃei aplicaŃiilor faŃă de structura
logică a datelor.
Din acest motiv, era necesară desprinderea din cadrul programelor de
aplicaŃie a descrierii structurii datelor. Acest lucru a fost posibil prin definirea
unui fişier de descriere globală a bazei de date, denumit dicŃionar de date.
Bazele de date au apărut în anii ’60, odată cu lansarea programului Apollo,
în 1964, pronind de la ceea ce formau sistemele de fişiere înlănŃuite, introduse
de IBM pentru gestionarea lansării şi urmăririi producŃiei. Astfel au apărut aşa
zisele baze de date arborescente sau de ganeraŃia 1-a.
Conceptul de bază de date, sub această denumire, a apărut pentru prima
dată în anul 1969, an în care CODASYL a publicat, în cadrul unei conferinŃe
dedicate limbajelor de gestiune a datelor, un raport tehnic despre acest concept.
FaŃă de modelul bazat pe fişiere clasice (file-based), noul model de organizare a
datelor în baze de date include un fişier de descriere globală a bazei de date
(dicŃionar de date) care să poată asigura independenŃa programelor faŃă de
structura datelor.
Pornind de la aceste considerente, se pot da şi alte definiŃii bazelor de
date, cum ar fi [Fotache01]:
O bază de date reprezintă o colecŃie de date, organizate într-o structură
descrisă printr-un model conceptual sau colecŃie de date aflate în
interdependenŃă, împreună cu descrierea datelor şi a relaŃiilor dintre ele.
Totalitatea informaŃiilor stocate în baza de date la un moment dat
reprezintă conŃinutul bazei de date. ConŃinutul are un caracter volatil, în sensul
că se modifică permanent în funcŃie de volumul şi complexitatea proceselor şi
fenomenelor economice la care se referă. Structura datelor împreună cu
legăturile dintre entităŃi şi restricŃiile de integritate formează schema bazei de
date, care, de obicei, rămâne constantă pe durata utilizării bazei de date.
Gestionarea datelor dintr-o bază de date este asigurată de un sistem de
gestiune a bazelor de date sau SGBD (în limba engleză DBMS - Data Base
Management System).
Un SGBD reprezintă un ansamblu de programe pentru gestiunea datelor
sau un mediu de programare destinat gestiunii datelor din baza de date. Prin
urmare, el este cel care asigură încărcarea bazei de date, actualizarea şi
interogarea acesteia, cât şi interfaŃa cu sistemul de operare în vederea
simplificării accesului la date.
In general SGBD-urile au implementate limbaje gazdă, care conŃin atât
instrucŃiuni specifice exploatării datelor din bazele de date, cât şi unele
instrucŃiuni din limbajele de programare clasice.

4
Un SGBD include, în general, o serie de componente [Date2000] grupate
în jurul dicŃionarului de date, dintre care amintim:
• sistemul de gestiune a fişierelor şi suporturilor la nivel fizic;
• sistemul de gestiune a fişierelor la nivel logic;
• limbajul de manipulare a datelor (LMD) şi translatorul aferent;
• limbajul de descriere a datelor (LDD) şi translatorul aferent;
• limbajul de consultare sau interogare (Query Language) şi procesorul
aferent, care traduce instrucŃiunile limbajului de consultare în
instrucŃiuni inteligibile pentru sistemul de gestiune la nivel logic;
• componente de interfaŃă cu programele de aplicaŃii;
• componente de serviciu, legate de jurnalizări, securitate etc.
Trebuie să specificăm, însă, că în majoritatea SGBD-urilor, cum este şi
cazul xBase sau Visual FoxPro, mai multe componente, cum ar fi de exemplu
cele trei limbaje şi translatoarele lor, sunt integrate, formând o singură
componentă.
Principalele funcŃii ale unui SGBD sunt următoarele:
• FuncŃia de descriere date
• FuncŃia de manipulare date
• FuncŃia de utilizare

1.1.2. Arhitectura unei baze de date

Asigurarea independenŃei logice şi fizice a datelor impune adoptarea unei


arhitecturi a bazei de date pe trei nivele astfel:
1. nivelul intern
2. nivelul conceptual
3. nivelul extern
• Nivelul intern (baza de date fizică), defineşte baza de date ca fiind o
colecŃie de fişiere, conŃinând datele din cadrul bazei de date, la care se
adaugă şi alte structuri auxiliare de date şi un set de programe, care
interacŃionează cu sistemul de operare pentru îmbunătăŃirea
managementului bazei de date. La acest nivel structura bazei de date se
concretizează în schema internă. Aici apare independenŃa faŃă de căile
de acces, adică utilizatorul nu trebuie să fie preocupat de organizarea şi
modul de acces la date la nivel fizic.
• Nivelul conceptual, este nivelul imediat superior celui fizic, datele fiind
privite prin prisma semanticii lor, respectiv a conŃinutului şi relaŃiilor cu
alte date. Acesta este şi primul nivel de abstractizare a lumii reale,
având ca obiectiv principal modelarea realităŃii existente prin definirea
şi descrierea unităŃilor logice cu care se lucrează şi a legăturilor dintre
acestea. Această schemă este descrisă în general de administratorul

5
BAZE DE DATE

bazei de date, el fiind singurul care cunoaşte şi manipulează schema


conceptuală a bazei de date, degrevând utilizatorii de cunoaşterea
întregii structuri a bazei de date.
Nivelul conceptual se defineşte cu ajutorul schemei entitate-relaŃie (E-
R)[Gardarin86] sau obiect-entitate-relaŃie (OLE) [Miranda&Busta86].
Prin entităŃi se înŃeleg concepte cu care operează utilizatorii şi prin care
aceştia îşi modelează aplicaŃiile, cum ar fi: PRODUSE, BENEFICIARI,
FACTURI (în cazul unei firme productive) sau PROFESORI, STUDENTI,
SALI, MATERII (în cadrul unei facultăŃi).
Fiecare entitate poate avea una sau mai multe atribute. De exemplu, un
STUDENT are MATRICOLA, NUME, DATA-NAŞTERII, etc.
Constrângerile reprezintă proprietăŃi ale datelor şi se referă la restricŃii
privind valorile pe care le pot lua aceste date sau la restricŃii privind legăturile
dintre diferite entităŃi.
În cadrul oricărei operaŃii de actualizare a datelor din baza de date sau de
încărcare a acesteia cu date, se verifică aceste constrângeri, pentru a asigura
integritatea bazei de date.
Ca urmare, orice modificare în structura de memorare a datelor sau
schimbarea suportului magnetic, va afecta doar interfaŃa dintre nivelul
conceptual şi cel fizic fără a modifica nivelul conceptual. Rezultatul imediat al
independenŃei fizice a datelor îl reprezintă imunitatea aplicaŃiilor faŃă de
structura fizică de memorare a datelor. La acest nivel structura bazei de date se
concretizează în schema conceptuală.
• Nivelul extern este ultimul nivel de abstractizare la care se poate descrie
o bază de date.
Nivelul extern conŃine, deci, o parte din unităŃile logice descrise la nivel
conceptual, dar poate include şi unităŃi logice care nu apar la nivel conceptual
şi care nu au corespondent direct în baza de date fizică, obŃinute de exemplu
prin calcule. Ca urmare, nivelul extern este derivat din nivelul conceptual şi
reprezintă ceea ce vede utilizatorul din baza de date. Fiecărui utilizator îi va
corespunde un model extern propriu, în funcŃie de cerinŃele informaŃionale ale
acestuia.
UnităŃile logice folosite la nivel extern se numesc numite unităŃi logice
virtuale, imagini sau vederi şi formează o bază de date virtuală.
Aceste vederi se pot obŃine în unul din următoarele moduri:
1. prin modificarea unor unităŃi logice reale;
2. prin combinarea a două sau mai multe unităŃi logice reale.
Vederile asigură, printre altele, următoarele funcŃii în cadrul unei baze de
date:
1. securitatea bazei de date
2. definirea modului de acces la date;

6
3. oferă utilizatorului o viziune simplificată şi personalizată asupra bazei
de date.
Prin nivelul extern se realizează independenŃa logică a datelor din baza de
date.
InterfaŃa dintre utilizator şi SGBD se poate realiza în mai multe moduri,
dintre care amintim :
- printr-un mecanism de apel (cuvânt cheie urmat eventual de parametrii)
inserat în programele scrise într-un limbaj tradiŃional (C, COBOL, etc),
numit limbaj gazdă;
- prin comenzi speciale utilizate autonom (specifice SGBD-urilor, în
afara limbajelor tradiŃionale), în cazul SGBD-urilor autonome.

1.1.3. Modele de organizare a datelor

Analiza, proiectarea şi implementarea structurii bazei de date se


realizează utilizând un anumit model de date.
Un asemenea model reprezintă un ansamblu de instrumente
conceptuale, care permit descrierea datelor, a relaŃiilor dintre ele, a semanticii
lor, cât şi a restricŃiilor la care sunt supuse aceste date [Fotache02,
Popescu02]. Un model de date reprezintă, deci, un instrument teoretic care ne
ajută să identificăm semnificaŃia sau conŃinutul unei colecŃii de date (structura
de organizare a acestora) cât şi modul de utilizare a acestora, prin intermediul
operaŃiilor permise asupra datelor respective.
Modelul de organizare a datelor este deci o reprezentare a obiectelor lumii
reale şi a evenimentelor asociate lor, având rolul de a pune la dispoziŃia
utilizatorilor conceptele de bază şi notaŃiile, care să le permită acestora să
comunice clar şi rapid informaŃiile despre datele firmei [Selinger98].
Ca urmare, un model de date include următoarele componente
[Selinger98]:
1. un set de reguli de structurare a datelor prin limbajul de descriere date
(LDD).
2. un set de reguli de manipulare a datelor prin limbajul de manipulare
date (LMD).
Modelele utilizate de bazele de date se pot grupa în trei categorii
[Fotache98]: modele bazate pe obiect, modele bazate pe înregistrare şi modele
fizice.
Modelele bazate pe obiect permit descrierea datelor la nivel conceptual şi
extern. Din această categorie fac parte:
a) modelele entitate-asociaŃii (E-A), entitate-relaŃie (E-R) sau obiect-
entitate-relaŃie (OLE)
b) modelul semantic
c) modelul funcŃional
7
BAZE DE DATE

d) modelul orientat pe obiecte.


Din categoria modelelor orientate pe înregistrări fac parte:
a) modelul ierarhic
b) modelul reŃea
c) modelul relaŃional.
Această din urmă orientare a dat naştere şi clasificării bazelor de date pe
generaŃii [Miranda&Busta86, Gardarin86].
Astfel, prima generaŃie de baze de date a fost cea bazată pe structuri
arborescente, adică relaŃii de tip 1:n. Dintre SGBD-urile cele mai cunoscute din
domeniu amintim: IMS al IBM (utilizat şi azi), Total, System2000, Nomad etc.
A doua generaŃie de baze de date a fost cea bazată pe reŃele sau relaŃii de
tip n:m. Aceste baze de date au fost denumite şi baze de date de tip CODASYL,
deoarece această organizaŃie a încercat să dezvolte un standard pentru ele şi să le
introducă în standardul COBOL 81. Dintre SGBD-urile cele mai utilizate în
România, din această categorie, amintim SGBD-urile de tip Socrate, dezvoltate
de firma franceză CII după proiectul profesorului M.Abrial de la Universitatea
din Grenoble şi DBMS-11, al firmei DEC.
In prezent, cel mai răspândit dintre modelele de baze de date este cel
relaŃional, adică de tip n:1, dezvoltat de E.F.Codd de la IBM, al cărui obiectiv
este acela de simplificare a accesului la date de către utilizatorii finali. Aceasta
reprezintă a treia etapă sau generaŃie în evoluŃia SGBD-urilor.

1.1.4. EntităŃi şi tipuri de entităŃi

O entitate este o realitate obiectivă care există prin ea însăşi. Orice entitate,
aşa după cum s-a mai arătat, se caracterizează prin anumite proprietăŃi, care în
cadrul modelului de date sunt reprezentate prin atribute.
EntităŃile la rândul lor sunt reprezentate prin tipuri de entităŃi.
MulŃimea entităŃilor descrise prin tipul de entitate dat reprezintă
extensiunea tipului de entitate respectiv, atributele unei instanŃe ale entităŃii
fiind proprietăŃile particulare sau extensionale ale acesteia.

8
O primă definiŃie a bazelor de date este
REZUMAT [NiŃchi&RacoviŃan96]: baza de date este un sistem integrat,
coerent şi partajat de fişiere.
O bază de date reprezintă o colecŃie de date, organizate într-
o structură descrisă printr-un model conceptual sau colecŃie
de date aflate în interdependenŃă, împreună cu descrierea
datelor şi a relaŃiilor dintre ele.
Un SGBD reprezintă un ansamblu de programe pentru
gestiunea datelor sau un mediu de programare destinat
gestiunii datelor din baza de date.
Principalele funcŃii ale unui SGBD sunt următoarele:
• FuncŃia de descriere date
• FuncŃia de manipulare date
• FuncŃia de utilizare
Asigurarea independenŃei logice şi fizice a datelor impune
adoptarea unei arhitecturi a bazei de date pe trei nivele
astfel:
1. nivelul intern
2. nivelul conceptual
3. nivelul extern
Din categoria modelelor orientate pe înregistrări fac parte:
d) modelul ierarhic
e) modelul reŃea
f) modelul relaŃional.
TESTE DE Recomandăm parcurgerea testelor din Îndrumarul de
AUTOEVALUARE laborator
BIBLIOGRAFIE 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St.,
Tomai N. Baze de date şi programarea calculatoarelor
utilizând limbajul Visual FoxPro, Ed. Risoprint, Cluj-
Napoca, 2003.
2. Marian Cristescu, Baze de date utilizate în mediul
economic, Editura ”ALMA MATER”, Sibiu, 2007.
3. Gabriel Dima ,Mihai Dima, Bazele Visual Foxpro 5.0,
Editura Teora, Bucuresti, 1999.
4. Marin Fotache, Ioan Brava, Cătălin Strâmbei, Liviu
CreŃu, Visual FoxPro; Ghidul dezvoltării aplicaŃiilor
profesionale, Editura Polirom Iaşi, 2002.
5. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe,
Editura Risoprint Cluj, 2003.
9
BAZE DE DATE

1.2. MODELUL RELAłIONAL

OBIECTIVE 1. Clarificarea noŃiunilor referitoare la conceptele generale


legate de relaŃie, atribut, domeniu
2. Clarificarea elementelor referitoare la chei şi legături
între tabele.
3. Familiarizarea cu formele normale şi normalizarea
relaŃiilor.
NOłIUNI CHEIE Atribut, tabel, domeniu, relaŃie, cheie candidat, cheoe
primară, cheie străină, cele trei forme normale de bază

1.2.1. Modelul de date relaŃional

1.2.1.1. Caracteristici generale

Primul model de date relaŃional, aşa după cum s-a amintit, a fost propus de
către cercetătorul american E.F. Codd de la laboratorul din Palo Alto, al IBM.
Principiile matematice care stau la baza acestui model pornesc de la teoria
matematică a relaŃiilor, extinsă la cerinŃele de gestiune a datelor.
O bază de date relaŃională este definită ca fiind un ansamblu de tabele
sau relaŃii între care există anumite legături, fiecare tabelă fiind alcătuită din
coloane, denumite atribute şi linii, denumite şi tuple.

1.2.1.2. Definirea entităŃilor şi structurii acestora

Reamintim că în cadrul modelului relaŃional entităŃile se reprezintă prin


intermediul relaŃiilor statice, sau tabelelor, precum şi a legăturilor dintre ele, sau
a relaŃiilor dinamice.
Conceptele cu care se operează în cadrul modelului relaŃional în vederea
definirii entităŃilor şi structurii acestora sunt următoarele:
1. linia sau tuplul
2. atributul sau caracteristica
3. domeniul
4. înregistrarea logică
5. cardinalitatea relaŃiei
6. rangul relaŃiei
7. cheia relaŃiei

10
Pentru exemplificarea conceptelor anterior prezentate se consideră relaŃia
sau tabelul FACULTẶłI având următoarea structură:
atribut
FACULTẶłI
Cod facultate Denumire facultate Adresă
STE ŞT. ECONOMICE MIHALI FN
FIL FILOLOGIE HOREA 5
BIO BIOLOGIE HAJDEU 10
MED MEDICINẶ E. ISAC 20
linie domeniu înregistrare logică
(tuplu) (antet relaŃie)
Putem considera că un atribut reprezintă o utilizare sub un anumit nume a
unui domeniu. Din acelaşi domeniu pot deriva mai multe atribute, fiecare cu
nume diferite la nivelul unui tabel. Astfel, dacă considerăm domeniul numerelor
întregi sau reale, din acest domeniu pot deriva atribute cum ar fi: SALAR,
IMPOZIT, VALOARE, PRET, CANTITATE etc.

1.2.1.3. Fundamentul matematic al conceptului de relaŃie şi


atribut

Din punct de vedere matematic, prin relaŃie se înŃelege o submulŃime a


produsului cartezian al Unor domenii.
Având domeniile D1, D2,…, Dn, produsul lor cartezian se defineşte
astfel:
V=D1 x D2 x …. x Dn ={ (d1, d2,….,dn)}

şi reprezintă o asociere între elementele fiecărui domeniu, sau mai exact, este
mulŃimea tuturor combinaŃiilor sau tuplelor de forma {d1, d2,….,dn}, unde di∈
Di.
Deci, relaŃia se defineşte astfel:
R ⊆ D1 x D2 x ……x Dn

unde D1, D2,…,Dn reprezintă domeniile relaŃiei R comparabile între ele, iar "n"
reprezintă rangul relaŃiei. După rang, relaŃia poate fi: primară, binară, ternară
sau, în general, n-ară.
Desigur că definiŃia anterioară dată relaŃiei nu este unica posibilă. Astfel,
C.J.Date [Date2000] defineşte o relaŃie ca fiind compusă din două părŃi:
1. Antetul relaŃiei, ca fiind o mulŃime de atribute, definite pe câte un
domeniu (nu neapărat distinct), astfel:
{A1 : D1, A2 : D2,….An:Dm}

11
BAZE DE DATE

2. Corpul relaŃiei, ca fiind o mulŃime de tuple, fiecare tuplu conŃinând o


mulŃime de valori aferente atributelor definite în antetul relaŃiei, astfel:
{t1, t2,…tk…….tn} mulŃime de tuple
ti = {di1,di2………din} mulŃime de valori aferente unei tuple

Ilustrarea acestui mod de abordare rezultă din figura următoare:


A1 A2 ………… An
..
d11 d12 d1n
Antetul relaŃiei t1 d21 d22 d2n
t2 .

dk1 dk2 dkn


Corpul relaŃiei tk .
.
dm1 dm2 dmn
tm
Deci, o relaŃie poate fi simbolizată prin mulŃimea atributelor sale astfel:
sau (A :D ,A :D ,….,A :D )
R(A1,A2…..,An) 1 1 2 2 n n

Din definiŃiile noŃiunii de relaŃie, rezultă următoarele proprietăŃi ale


acesteia:
1. Ordinea atributelor în cadrul unei relaŃii este nesemnificativă (atributele
nu sunt ordonate).
2. Atributele unei relaŃii trebuie să fie distincte, chiar dacă pe acelaşi
domeniu sunt definite mai multe atribute.
3. Orice atribut are valori atomice, adică la intersecŃia dintre o linie şi o
coloană se află o singură valoare şi nu o colecŃie de valori sau grupuri
repetitive. In acest caz, se consideră că relaŃia se află în forma întâia
normală.
4. In cadrul corpului relaŃiei, tuplele nu sunt ordonate în mod obligatoriu.
5. Intr-o relaŃie nu există tuple duplicate.

1.2.2. Legături între relaŃii

1.2.2.1. Definirea cheilor unei relaŃii

Dacă într-o relaŃie există mai multe atribute sau combinaŃii de atribute care
permit identificarea unică a tuplelor, acestea sunt denumite chei candidat. O
astfel de cheie reprezintă un atribut sau o mulŃime de atribute (K) cu
următoarele proprietăŃi [Gardarin86] :
1. identificare unică;

12
2. ireductibilitate;
3. valorile atributului.
O entitate poate conŃine mai multe chei candidat, dar numai una dintre ele
se alege pentru a fi folosită la identificarea tuplelor. Această cheie se numeşte
cheie primară. O cheie candidat care nu este desemnată ca şi cheie primară se
numeşte cheie alternativă.
Pe lângă noŃiunile de cheie candidat şi cheie primară, în cadrul modelului
relaŃional se mai foloseşte şi noŃiunea de cheie străină. Ea se utilizează la
stabilirea legăturilor dintre două tabele, numite tabela principală sau părinte şi
tabela secundară sau copil. Prin definiŃie, valoarea cheii străine trebuie să se
regăsească în mulŃimea cheilor primare ale tabelei principale. Ea reprezintă deci
o referinŃă către un tuplu din tabela părinte care are aceeaşi valoare a cheii
primare.

1.2.2.2. Tipuri de legături între relaŃii

Una din componentele modelului relaŃional se referă la legăturile dintre


relaŃii sau tabele. O legătură (relaŃie dinamică) se defineşte ca fiind o asociere
între mai multe tipuri sau clase de entităŃi. Cea mai frecventă legătură întâlnită
în practică este cea dintre două tipuri de entităŃi, numită şi legătură binară.
Legăturile binare, aşa cum s-a amintit, după cardinalitatea lor (numărul
entităŃilor din fiecare clasă de entităŃi care intră în cadrul legăturii) se pot
clasifica astfel:
1. legături de tip 1-1, prin care unei entităŃi din mulŃimea sau clasa M1 îi
corespunde o singură entitate în mulŃimea sau clasa M2;
2. legături de tip 1-n, prin care unei entităŃi din mulŃimea M1 sau din
tabelul M1 îi corespund mai multe entităŃi în mulŃimea sau tabelul M2,
iar unei entităŃi din M2 îi corespunde o singură entitate în M1;
3. legături de tip m-n, prin care unei entităŃi din M1 îi corespund mai
multe entităŃi în M2 şi reciproc.

1.2.3. Definirea restricŃiilor pentru datele dintr-o bază de date

Pentru datele dintr-o bază de date pot fi definite mai multe tipuri de
restricŃii, cum ar fi: restricŃia de domeniu, de atomicitate, referenŃială şi restricŃii
utilizator. Dintre acestea, ne vom referi în continuare la restricŃia referenŃială
sau integritatea referenŃială, pe care se bazează stabilirea legăturilor dintre două
tabele.
Integritatea referenŃială, denumită în unele sisteme (ca de exemplu în
SQL Server), integritate referenŃială statică deoarece se păstrează în dicŃionarul
de date, se defineşte ca fiind un ansamblu de reguli impuse tabelelor între care
s-au stabilit anumite legături. Astfel, pentru a asigura integritatea referenŃială
13
BAZE DE DATE

trebuie ca atunci când se fac modificări ale valorii unui câmp de tip cheie
primară sau străină dintr-un tabel, să nu fie afectată relaŃia dintre cele două
tabele, adică să se modifice automat valorile cheii în toate tuplele
corespunzătoare.
Integritatea referenŃială cere ca valorile cheii străine să se regăsească
printre valorile cheii primare. Această condiŃie introduce în baza de date
constrângeri numite constrângeri referenŃiale.
OperaŃiile de adăugare, modificare şi ştergere pot afecta integritatea
referenŃială astfel:
1) In tabela principală (tabela referită sau părinte):
a. operaŃia de adăugare se va face fără nici un fel de restricŃii din punct de
vedere al condiŃiilor de integritate referenŃială;
b. operaŃia de ştergere - deoarece prin ştergerea unui tuplu din relaŃia sau
tabela principală, în relaŃia secundară pot rămâne tuple care fac referire
la tuplul şters, pentru a menŃine integritatea referenŃială se poate
introduce ştergerea restricŃionată sau în cascadă;
- în primul caz, nu se poate şterge un tuplu din tabela principală dacă
acesta are corespondent tuple în tabela secundară, deoarece tuplele
din tabela secundară rămân orfane, adică vor avea referinŃe
nesatisfăcute;
- în al doilea caz, ştergerea unui tuplu din tabela principală va fi
urmată de ştergerea tuturor tuplelor din relaŃia secundară care fac
referire la tuplul şters;
c. operaŃia de modificare poate fi privită ca şi în cazul operaŃiei de
ştergere, iar restricŃiile referenŃiale sunt cele folosite la operaŃia de
ştergere;
2) In tabela secundară (de referinŃă sau tabela copil):
a. operaŃia de adăugare se poate face numai dacă valorile cheii străine
pentru articolele adăugate se regăsesc printre valorile cheii primare din
tabela principală, altfel operaŃia de adăugare este interzisă;
b. operaŃia de ştergere se poate realiza fără nici o restricŃie din punct de
vedere al condiŃiilor de integritate referenŃială;
c. operaŃia de modificare se poate realiza cu condiŃia să nu apară
înregistrări fără corespondent în tabela principală.

1.2.4. Schema şi conŃinutul unei baze de date relaŃionale

Există două modalităŃi de abordare a bazelor de date relaŃionale şi anume


[Fotache2001]:
- schema relaŃională (intensia sau structura bazei de date);
- conŃinutul unei relaŃii (extensia bazei de date).

14
1. Schema relaŃională sau intensia unei baze de date poate fi definită ca un
ansamblu de relaŃii asociate semantic prin domeniul de definiŃie şi prin
restricŃii de integritate. Ea conŃine:
a. una sau mai multe scheme de relaŃie, unde fiecare schemă de relaŃie
include numele relaŃiei şi atributele aferente;
b. restricŃii de integritate, care pot fi:
- restricŃia cheilor primare, adică fiecare cheie primară trebuie să
fie unică, nenulă şi cu compoziŃie minimală;
- restricŃii referenŃiale, care decurg din existenŃa cheilor străine;
- alte restricŃii, cum ar fi cele definite de utilizator (dependenŃe
între atribute, valori limită, unicitate, caracter nenul, etc.).
Schema relaŃională descrie întotdeauna modelul conceptual din cadrul unei baze
de date.
RelaŃiile dintre relaŃie şi tabelă sunt date de următoarele:
1. în timp ce relaŃia este o mulŃime teoretică, tabela este un obiect concret
cu o anumită reprezentare (tablou bidimensional);
2. în timp ce într-o relaŃie ordinea atributelor sau tuplelor nu este
semnificativă, într-o tabelă există o ordonare atât a coloanelor, dată de
ordinea acestora la creare, cât şi a înregistrărilor, dată de ordinea în
care au fost introduse în tabelă sau ca urmare a indexării tabelei;
3. în timp ce o relaŃie teoretică este formată întotdeauna din tuple
distincte, în practică o tabelă poate conŃine şi linii duplicat, aşa după
cum s-a mai menŃionat în cazul SQL Server.
In acest context, noŃiunea de relaŃie se identifică cu cea de tabelă sau fişier,
atributele cu denumirea coloanelor unei tabele sau cu câmpurile unui fişier, iar
tuplele cu liniile tabelei sau cu articolele (respectiv înregistrările) unui fişier.
Cele de mai sus justifică faptul subliniat la definiŃia bazelor de date, că
baza de date este o colecŃie de fişiere. În unele SGBD-uri, cum este cazul
Visual FoxPro, fiecare fişier are articole de lungime fixă, în timp ce la altele,
cum este cazul SQL Server, articolele pot fi de lungime variabilă. Spre
deosebire însă de fişierele obişnuite, fişierele bazei de date prezintă o serie de
particularităŃi, dintre care amintim:
1. fiecare fişier are asociată o înregistrare de structură sau un antet, care
include informaŃii despre conŃinutul fişierului şi se memorează în
dicŃionarul de date;
2. dacă fişierul are articole de lungime fixă, articolele sau înregistrările de
date conŃin un număr de ordine, folosit la identificarea unei înregistrări
în baza de date, numit şi indicatorul sau pointer-ul articolului respectiv;
în Visual FoxPro acest pointer poate fi obŃinut prin funcŃia RECNO();
3. de regulă unul dintre articolele bazei de date este cel tratat curent;
pointer-ul acestui articol se numeşte pointer-ul sau indicatorul bazei de
date;
15
BAZE DE DATE

4. fişierele din baza de date sunt interconectate între ele prin legături de tip
1-1, 1-n sau m-n.

O bază de date relaŃională este definită ca fiind un


REZUMAT ansamblu de tabele sau relaŃii între care există anumite
legături, fiecare tabelă fiind alcătuită din coloane,
denumite atribute şi linii, denumite şi tuple.
Din punct de vedere matematic, prin relaŃie se înŃelege o
submulŃime a produsului cartezian al domeniilor.
Dacă într-o relaŃie există mai multe atribute sau combinaŃii
de atribute care permit identificarea unică a tuplelor,
acestea sunt denumite chei candidat
TESTE DE Recomandăm parcurgerea testelor din Îndrumarul de
AUTOEVALUARE laborator
BIBLIOGRAFIE 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St.,
Tomai N. Baze de date şi programarea calculatoarelor
utilizând limbajul Visual FoxPro, Ed. Risoprint, Cluj-
Napoca, 2003.
2. Marian Cristescu, Baze de date utilizate în mediul
economic, Editura ”ALMA MATER”, Sibiu, 2007.
3. Gabriel Dima ,Mihai Dima, Bazele Visual Foxpro 5.0,
Editura Teora, Bucuresti, 1999.
4. Marin Fotache, Ioan Brava, Cătălin Strâmbei, Liviu
CreŃu, Visual FoxPro; Ghidul dezvoltării aplicaŃiilor
profesionale, Editura Polirom Iaşi, 2002.
5. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe,
Editura Risoprint Cluj, 2003.

16
2. ELEMENTE DE LIMBAJ VISUAL FOXPRO

CONCEPTE 1.
Obiecte cu care operează VFP
DE BAZA 2.
Metalimbajul utilizat
3.
Sintaxa comenzilor VFP
4.
Familiarizarea cu mediul Visual FoxPro
OBIECTIVE 1.
Cunoaşterea elementelor lexicale şi sintactice ale
limbajului VFP.
2. Prezentarea obiectivelor de date şi a tipurilor de date
utilizate în cadrul programelor Fox.
3. Prezentarea sintaxei comenzilor FoxPro şi a
elementelor de metalimbaj.
4. Descrierea principalelor caracteristici ale Visual
FoxPro, ca mediu integrat, obiectual şi vizual de
dezvoltare de aplicaŃii.
5. Familiarizarea cu mediul Visual FoxPro, precum şi a
primelor operaŃii cu mediul.
6. Familiarizarea cu opŃiunile din meniul principal,
caseta de control, opŃiunile acestora, precum şi cu
gestiunea ferestrelor şi a obiectelor de control.
RECOMANDĂRI 1. Se va studia mai întâi modul de formă şi utilizare a
PRIVIND construcŃiilor simple ale limbajului (cuvinte, literale,
STUDIUL simboluri speciale) şi apoi a celor compuse
(instrucŃiuni, funcŃii şi expresii).
2. Se va pune în continuare accent pe formarea şi
utilizarea obiectivelor date folosite în cadrul limbajului:
constante, câmpuri, variabile.
3. Se va studia tipurile de date utilizate în cadrul
limbajului şi conversia între tipuri.
4. În finalul studiului privind elementele limbajului se
pune accent pe modul de definire a sintaxei unei
comenzi în Visual FoxPro.
REZULTATE După parcurgerea acestui modul utilizatorul trebuie să fie
ASTEPTATE în măsură să definească şi folosească corect construcŃiile
limbajului la nivelul unui program şi să înŃeleagă modul
de utilizare al clauzelor din sintaxa comenzilor FoxPro.
Se aşteaptă. De asemenea:
1. Familiarizarea cu mediul de dezvoltare Visual
FoxPro.
2. Crearea unor deprinderi de utilizare a mediului;
17
BAZE DE DATE

18
2.1. ELEMENTELE LEXICALE ŞI SINTACTICE ALE LIMBAJULUI
VISUAL FOXPRO
OBIECTIVE Cunoaşterea modului de formare şi utilizare a construcŃiilor
simple şi compuse ale limbajului
NOłIUNI - Cuvinte
CHEIE - Literale
- InstrucŃiuni
- FuncŃii
- Expresii

2.1.1. Setul de caractere Foxpro

Majoritatea limbajelor de programare, printre care şi limbajul FoxPro, au


alfabetul format din următoarele caractere:
- literele alfabetului limbii engleze;
- cifrele arabe (0-9);
- caractere speciale;

2.1.2. Elementele lexicale şi sintactice ale limbajului FoxPro

Un program FoxPro este alcătuit din şiruri de caractere sau construcŃii şi


separatori. ConstrucŃiile limbajului se pot împărŃi în două categorii:
- construcŃii simple;
- construcŃii compuse.
ConstrucŃiile simple, reprezintă cea mai mică unitate lexicală cu înŃeles de sine
stătător, numite şi atomi lexicale. Există următoarele categorii de atomi lexicali
sau de construcŃii simple:
1. identificatori (cuvinte);
2. literali;
3. simboluri speciale.
care formează împreună vocabularul sau lexicul limbajului.
1. Identificatorii, reprezintă o secvenŃă arbitrară de caractere alfabetice, cifre
sau liniuŃa de subliniere, din care primul caracter este o literă sau liniuŃa de
subliniere.
Există două categorii de identificatori sau cuvinte:
a) cuvinte predefinite;
b) cuvinte utilizator.
Cuvinte predefinite; sunt precizate la definirea limbajului. Cu ajutorul lor se
construiesc instrucŃiunile limbajului. Ele se împart la rândul lor în:
- cuvinte cheie;
- cuvinte rezervate.

19
BAZE DE DATE

Cuvintele utilizator; sunt cuvinte definite de utilizator, fiind folosite în diferite


contexte.

2. Literali; reprezintă o valoare constantă, de tip numeric sau caracter.


Termenul de literal provine de la cuvântul "ad-literam" şi are semnificaŃia
unei valori precizate explicit.
3. Simboluri speciale; la fel ca şi cuvintele rezervate, simbolurile speciale
numite şi semne de punctuaŃie, operatori, delimitatori, au o semnificaŃie bine
definită fiind utilizate conform destinaŃiei lor.

2.1.3. ConstrucŃii compuse

A doua grupă de construcŃii, alături de construcŃiile simple, o reprezintă


construcŃiile compuse, numite şi categorii sintactice de bază obŃinute prin
agregarea succesivă a construcŃiilor simple conform unor reguli sintactice.
La nivelul limbajului FoxPro din această grupă fac parte următoarele
categorii sintactice:
1. instrucŃiuni;
2. funcŃii;
3. expresii.
1. InstrucŃiunile limbajului FoxPro se numesc comenzi şi constituie ca în
orice limbaj de programare categoria sintactică fundamentală.
2. FuncŃiile; reprezintă a doua categorie sintactică de bază, utilizate în
majoritatea prelucrărilor asupra datelor din baza de date. Spre deosebire de
comenzi, funcŃiile returnează o valoare. Expresii FoxPro - reprezintă
elemente sintactice de bază prin care se evaluează rezultatul unor operaŃii.
Ele conŃin şiruri de operanzi legate între ele prin intermediul unor
operatori. Expresiile rezultate în funcŃie de tipul operanzilor pot fi de tip:
numeric, caracter, dată calendaristică, logic, relaŃional. Operanzii din
cadrul unei expresii pot fi: variabile (câmpuri, variabile de memorie),
constante şi funcŃii. Operatorii sunt caractere speciale (+, -, *, /, >, < …)
sau cuvinte cheie rezervate (AND, OR, NOT) prin care se specifică acŃiunile
ce trebuie executate asupra operanzilor (obiectelor de date). Operatorii
utilizaŃi în cadrul expresiilor FoxPro, se pot grupa după tipul acestora astfel:
- operatori aritmetici;
- operatori relaŃionali (de comparaŃie);
- operatori logici;
- operatori de concatenare;
- operatori pentru date de tip gestiune timp.
Separatori: aceştia se împart în două categorii distincte astfel:
1) separatori uzuali; care servesc la separarea a doi atomi lexicali şi pot
fi: spaŃiu, tab, retur de car şi avans de rând.

20
2) comentariile; aceştia nu influenŃează execuŃia programului şi permit o
înŃelegere mai bună a textului sursă.

2.1.4. Structura unui program FoxPro


Structura unui program FoxPro se poate descrie astfel:
PROGRAM::=<text ASCII> ( 0 sau mai multe linii logice sau fizice)
LINIE LOGICĂ::={linie fizică} (două sau mai multe)

2.2. OBIECTE DE DATE ŞI TIPURI DE DATE FOLOSITE IN VISUAL


FOXPRO

OBIECTIVE 1.Cunoaşterea principalelor obiecte de date oferite


utilizatorilor de limbaj (constante, câmpuri, variabile de
memorie);
2.Cunoaşterea tipurilor de date folosite în cadrul limbajului
NOłIUNI - constante
CHEIE - câmpuri
- variabile de memorie
- tip numeric, alfanumeric, logic, gestiune timp, special

2.2.1. Obiecte de date

Limbajul FoxPro pune la dispoziŃia utilizatorilor următoarele obiecte de date:


constante, variabile şi matrice de variabile.
a) CONSTANTE; sunt date definite de utilizator care nu-şi schimbă
valoarea în timpul execuŃiei comenzilor.
b) CÂMPURI; reprezintă componentele principale ale înregistrărilor de
date sau blocurile constructive ale fişierelor .DBF. Ele stochează datele
de prelucrat şi au caracter de permanenŃă, deci supravieŃuiesc pe durata
execuŃiei oricărui program care se referă la fişierul respectiv.
Acest obiect de date se caracterizează prin următoarele atribute:
- Nume (identificatorul obiectului).
- Tip;
- Valoare;
- Lungime;
c) Variabile de memorie. se caracterizează prin următoarele atribute:
- Nume;
- Tip;
- Lungimea;
- Durata de viaŃă;
- Domeniul de vizibilitate;
In raport cu acest atribut variabilele de memorie pot fi de două feluri:
21
BAZE DE DATE

1. publice sau globale;


2. private sau locale.

2.2.2.Tipuri de date folosite în Visual FoxPro


In Visual FoxPro sunt implementate următoarele tipuri de date:
d) tipul numeric;
e) tipul alfanumeric;
f) tipul logic;
g) tipul pentru gestiune timp;
h) tipul special.

2.3. SINTAXA COMENZILOR VISUAL FOXPRO

OBIECTIVE 1. Inserarea modului de folosire a clauzelor de domeniu şi a


opŃiunilor de tip filtru din structura comenzilor FoxPro
2. Cunoaşterea metalimbajului folosit la definiŃia formatului
general al unei comenzi
NOłIUNI - clauze domeniu
CHEIE - filtru global
- filtru local

2.3.1. Elemente de metalimbaj

Regulile sintactice prin care se stabileşte dacă o anumită construcŃie este corect
alcătuită se descriu printr-un limbaj mai simplificat numit metalimbaj. Acest
limbaj apare în teoria limbajelor de programare sub denumirea de BNF (Bakus-
Naum Form) respectiv EBNF reprezentând o formă extinsă a limbajului BNF.

Metalimbajul conŃine un ansamblu de simboluri (metasimboluri) şi de reguli de


descriere. Forma în care se prezintă o construcŃie de bază (instrucŃiune),
utilizând metasimboluri, elemente terminale şi neterminale, reprezintă formatul
general sau sintaxa generală a construcŃiei respective.

2.3.2. Sintaxa comenzilor Visual FoxPro

2.3.2.1. Structura şi caracteristicile comenzilor FoxPro

Comenzile FoxPro au ca rezultat imediat o acŃiune. Ele pot acŃiona asupra: unui
fişier sau unui câmp dintr-un fişier al bazei de date, asupra unei variabile de
memorie sau element dintr-un masiv, asupra unei ferestre sau meniu, etc. Cele
patru clauze-domeniu din sintaxa unei comenzi au următoarea semnificaŃie:

22
1. RECORD<expN>; indică faptul că respectiva comandă acŃionează asupra
articolului (înregistrării) cu numărul de secvenŃă definit de valoarea lui
<expN>.
2. NEXT<expN>; indică faptul că respectiva comandă acŃionează asupra
următoarelor articole începând cu articolul curent, în ordinea dată de index şi
respectând filtrul curent, până la un număr total de înregistrări egal cu
valoarea <expN>.
3. ALL; indică faptul că respectiva comandă acŃionează asupra tuturor
înregistrărilor din fişierul curent, respectând filtrele în curs. Ea reprezintă
pentru majoritatea comenzilor clauza implicită.
4. REST; indică faptul că respectiva comandă acŃionează asupra înregistrărilor
cuprinse între înregistrarea curentă şi sfârşitul fişierului activ.

OpŃiunile FOR şi WHILE au următoarea semnificaŃie:

FOR<expL>; este un filtru global, adică se aplică tuturor articolelor din


domeniul selectat, tratându-le pe cele pentru care condiŃia specificată prin
<expL> este adevărată.
WHILE<expL>; este un filtru local, adică se aplică numai articolelor
succesive din domeniul selectat, începând cu articolul curent, cât timp condiŃia
specificată prin <expL> este adevărată.

REZUMAT - Un program FoxPro este alcătuit din şiruri de


caractere sau construcŃii şi separatori. ConstrucŃiile
limbajului se pot împărŃi în două categorii:
- construcŃii simple;
- construcŃii compuse.

ConstrucŃiile simple, reprezintă cea mai mică unitate


lexicală cu înŃeles de sine stătător, numite şi atomi lexicale.
Există următoarele categorii de atomi lexicali sau de
construcŃii simple:
1. identificatori (cuvinte);
2. literali;
3. simboluri speciale.
care formează împreună vocabularul sau lexicul limbajului.
A doua grupă de construcŃii, alături de construcŃiile simple, o
reprezintă construcŃiile compuse, numite şi categorii
sintactice de bază obŃinute prin agregarea succesivă a
construcŃiilor simple conform unor reguli sintactice.
La nivelul limbajului FoxPro din această grupă fac parte
următoarele categorii sintactice:

23
BAZE DE DATE

1. instrucŃiuni;
2. funcŃii;
3. expresii.
Limbajul FoxPro pune la dispoziŃia utilizatorilor următoarele
obiecte de date: constante, variabile şi matrice de
variabile. Variabilele la rândul lor sunt de două tipuri şi
anume: câmpuri din fişiere .DBF şi variabile de memorie
(memory variables sau memvars).
i) tipul special.
Cele patru clauze-domeniu au următoarea semnificaŃie:

• RECORD<expN>; indică faptul că respectiva


comandă acŃionează asupra articolului
(înregistrării) cu numărul de secvenŃă definit de
valoarea lui <expN>.
• NEXT<expN>; indică faptul că respectiva
comandă acŃionează asupra următoarelor articole
începând cu articolul curent, în ordinea dată de
index şi respectând filtrul curent, până la un număr
total de înregistrări egal cu valoarea <expN>.
• ALL; indică faptul că respectiva comandă
acŃionează asupra tuturor înregistrărilor din fişierul
curent, respectând filtrele în curs. Ea reprezintă
pentru majoritatea comenzilor clauza implicită.
• REST; indică faptul că respectiva comandă
acŃionează asupra înregistrărilor cuprinse între
înregistrarea curentă şi sfârşitul fişierului activ.
TEME DE 1. Să se dea exemplu de: cuvinte utilizator şi literale
CONTROL numerice şi alfanumerice
2. Să se construiască expresii FoxPro folosind toate tipurile
de operatori (aritmetici, relaŃionali şi logici)
BIBLIOGRAFIE 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St.,
Tomai N. Baze de date şi programarea calculatoarelor
utilizând limbajul Visual FoxPro, Ed. Risoprint, Cluj-
Napoca, 2003, pg. 91-110.
2. Marian Cristescu, Baze de date utilizate în mediul
economic, Editura ”ALMA MATER”, Sibiu, 2007, pg. 143-
159.
3.Gabriel Dima, Mihai Dima, Bazele Visual Foxpro 5.0,
Editura Teora ,Bucuresti,1999,pag . 51-155
4.Marin Fotache, Ioan Brava, Cătălin Strâmbei, Liviu CreŃu,
Visual FoxPro; Ghidul dezvoltării aplicaŃiilor profesionale,

24
Editura Polirom Iaşi, 2002, pag. 19-48.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean,
Dezvoltarea aplicaŃiilor cu baze de date în Visual FoxPro,
Editura All, Bucureşti, 2001, pag. 35-36.

25
BAZE DE DATE

2.4. INTRODUCERE ÎN VISUAL FOX PRO

OBIECTIVE 1.Descrierea principalelor caracteristici ale Visual


FoxPro, ca mediu integrat, obiectual şi vizual de
dezvoltare de aplicaŃii;
2.Însuşirea lansării şi terminării unei sesiuni Visual
FoxPro;
3.Familiarizarea cu mediul FoxPro;
4.Principalele moduri de lucru în Visual FoxPro;
1. Familiarizarea cu opŃiunile din meniul principal sau
caseta de control şi rolurile acestor opŃiuni
2. Familiarizarea cu gestiunea ferestrelor şi a obiectelor
de control;
NOłIUNI CHEIE Visual FoxPro, mediu de dezvoltare;
Sesiune Visual FoxPro; moduri de lansare şi terminare;
Componentele mediului;
Modurile de lucru în mediu;
OpŃiunile meniului principal;
OpŃiunile casetei de control;
Tipuri de ferestre şi caracteristicile lor;
Obiecte de control;

2.4.1. Perspectiva cronologică şi caracteristici generale ale SGBD


Visual FoxPro

Visual FoxPro este continuatoare FoxPro care derivǎ din dBase şi clonele
acesteia xBase.
A apărut în 1995 sub denumirea Visual FoxPro 3.0, şi a evoluat către un
limbaj mediu de dezvoltare vizual, orientat pe obiecte, aducând SGBD FoxPro
la nivelul celor mai moderne medii de dezvoltare.
1. Se bazează pe modelul programării orientate pe obiecte (POO -
Programming Oriented Object) şi a programării conduse de
evenimente. Ca urmare, elementul de bază cu care lucrează este
obiectul (fereastră, buton de comandă, relaŃie între tabele etc.). In
acest context, un program în Visual FoxPro include o serie de definiŃii
de date (proprietăŃi) şi de algoritmi de prelucrare a acestora (metode,
proceduri). Metodele asociate unui obiect sunt executate fie printr-o
comandă explicită a utilizatorului, fie la apariŃia unor evenimente.

26
2. Ca tehnici sau instrumente de programare, mediul Visual FoxPro
foloseşte programarea vizuală şi tehnici de proiectare vizuală.
Aceasta permite utilizatorului ca, prin folosirea unor obiecte vizuale
sau a unor asistenŃi de tipul Form Wizard, Graph Wizard, Report
Wizard etc., să selecteze în mod interactiv opŃiuni din program şi să
fie generate automat programele corespunzătoare.
3. Este un mediu integrat de programare sub Windows. Ca urmare, el
include un gestionar al aplicaŃiilor create în FoxPro, numit PROJECT
MANAGER, care urmăreşte activitatea de elaborare a aplicaŃiilor şi
pune la dispoziŃia utilizatorilor uneltele necesare efectuării acestor
operaŃii, cum ar fi: generatoare (Designers), constructori (Builders) şi
asistenŃi speciali (Wizards), fiecare având un anumit domeniu de
utilizare.
4. Este un sistem relaŃional de gestiune a bazelor de date, asigurând
crearea de relaŃii statice între tabelele din baza de date.
5. Permite interogări şi vizualizări ale datelor aflate pe un server la
distanŃă, asigurând astfel crearea aplicaŃiilor client-server, precum şi
trecerea la sistemele tranzacŃionale reale.

În 2003 a apărut pe piaŃă Visual FoxPro 8.0. Extensiile acestei versiuni sunt
multiple şi pot fi urmărite în Help-ul sistemului la marcatorul What’s New in
Visual FoxPro 8.0. Sunt modificări esenŃiale:
• legate de IDE asigurând, printre altele, accesul la serviciile XML;
• modificări în limbaj prin extinderea accesului la date la distanŃă şi
alte îmbunătăŃiri referitoare la date, legate de SQL şi motorul de baze
de date, precum şi un număr considerabil de cuvinte rezervate noi;
• extensii ale editoarelor, etc.

2.4.2. Lansarea în execuŃie şi terminarea unei sesiuni Visual FoxPro

Lansarea sistemului Visual FoxPro din acest director se poate face analog
cu lansarea oricărui program în Windows, în unul dintre următoarele moduri:
1. prin selectarea opŃiunii PROGRAMS din meniul START şi apoi a
opŃiunii Microsoft Visual FoxPro 8.0;
2. prin efectuarea unui dublu clic pe pictograma aferentă programului
Visual FoxPro 8.0, dacă pictograma este vizibilă pe ecran;
3. prin selectarea din fereastra Explorer a directorului care conŃine
Microsoft Visual FoxPro 8 (de regulă Program Files) şi apoi, din
lista apărută sau din fereastră se selectează opŃiunea sau pictograma
Launch Microsoft Visual Foxpro 8.0;
4. prin introducerea în caseta de dialog Run din meniul Start a cǎii
complete a programului Visual FoxPro 8.
27
BAZE DE DATE

Terminarea unei sesiuni de lucru în Visual FoxPro se poate realiza în unul


din următoarele moduri:
• prin tastarea comenzii QUIT în fereastra de comandă;
• prin selectarea opŃiunii EXIT (ALT+F4) din meniul FILE;
• prin selectarea opŃiunii CLOSE din caseta meniului de control a
ferestrei principale Visual FoxPro 8;
• prin folosirea butonului CLOSE din meniul principal.

2.4.3. Mediul Visual FoxPro 8.0

2.4.3.1. Fereastra principală (iniŃială)

După lansarea Visual FoxPro, pe ecran este afişată fereastra principală.

1. Bara de titlu (Title Bar); conŃine numele aplicaŃiei, respectiv


Microsoft Visual FoxPro, aliniat la stânga, având în faŃă un buton cu
pictograma FoxPro (cap de vulpe). Aceasta este caseta de control a
ferestrei principale. Dacă se execută pe ea un click cu unul dintre
butoanele mouse, sau se tastează Alt+Bara SpaŃiu, apare meniul de
control vertical, uzual pentru aplicaŃiile Windows. De asemenea, în
dreapta apar cele 3 butoane uzuale (de minimizare, zoom şi închidere
a ferestrei).
2. Bara meniului principal (Menu bar), include la lansare următoarele
opŃiuni: File, Edit, View, Format, Tools, Program, Window şi Help.
Fiecare opŃiune din bara meniului principal (sistem) afişează un
submeniu vertical atunci când se execută un click pe opŃiunea
respectivă
3. Bara cu instrumente standard (Standard Toolbar). Ea conŃine 20
butoane (casete cu pictograme) şi o casetă derulantă. Trebuie să subliniem că
ultimele două butoane au fost introduse în versiunea 8.0 şi nu existau în 7.0. Prin
poziŃionarea mouse-ului pe orice pictogramă din bara cu instrumente, sub
pictograma selectată apare afişat (într-o casetă) numele opŃiunii aferente
pictogramei respective. După cum este cunoscut în Windows pot fi folosite
meniuri rapide. Meniul rapid pentru Visual FoxPro 8.0 se poate lansa simplu
prin executarea unui click cu butonul din dreapta pe bara de instrumente. Va
apare meniul în care se regăsesc câte o opŃiune pentru principalele programe de
proiectare automată a tabelelor, formelor, rapoartelor etc., dar şi alte opŃiuni.
4. Fereastra de comandă - este porŃiunea de pe ecran încadrată de un dreptunghi,
având numele COMMAND şi permite introducerea directă de comenzi prin
tastare. Este prevăzută cu butonul de close cu barele de derulare orizontală şi
verticală.

28
5. SuprafaŃa de lucru - reprezintă zona din cadrul ferestrei principale în care se
afişează rezultatul execuŃiei comenzilor introduse de utilizator. O parte din ea
este acoperită de fereastra de comandă.
6. Cursorul – este un simbol grafic, care pâlpâie şi indică poziŃia de pe ecran în
care se poate introduce următorul caracter. La lansarea sistemului, cursorul
apare în fereastra de comandă, pe prima linie.
7. Bara de stare (Status Bar) - indică contextul în care ne găsim la un moment dat,
afişând o serie de informaŃii utile. Zona de mesaje din bara de stare este vidă
dacă nu este deschisă nici o tabelă în zona de lucru curentă. In schimb, dacă este
deschisă o tabelă, în cadrul zonei se afişează următoarele informaŃii:
• numele tabelei;
• numele bazei de date din care face parte tabela, inclusă în paranteze;
• numărul înregistrării curente a tabelei;
• numărul total de înregistrări a tabelei;
• starea curentă de partajare a fişierului deschis (a tabelei), prin una din
următoarele opŃiuni: Exclusive, Record Unlocked, Record Locked, File
Locked.
Zona casetelor indicatoare conŃine trei sau patru casete indicatoare cu
următoarea semnificaŃie:
• prima casetă indică starea tastei INS. Ea este goală, atunci când
editorul Fox se află în mod inserare, sau conŃine literele OVR,
indicând modul de suprascriere;
• următoarea casetă afişează NUM dacă tasta NumLock este
activă;
• a treia casetă afişează CAPS dacă tasta CapsLock este activă;
• ultima casetă (opŃional) conŃine ora curentă.

2.4.3.2. Moduri de lucru

Utilizatorul are la dispoziŃie mai multe moduri de lucru, în funcŃie de


nivelul său, scopul urmărit etc.
1. Modul de lucru interactiv prin comenzi (imediat, conversaŃional sau direct);
2. Modul de lucru asistat (interactiv pe bază de meniuri şi butoane).
3. Modul de lucru programat.

După intrarea în mediul Visual FoxPro, este selectat implicit primul mod de
lucru, fapt semnalat prin prezenŃa cursorului în fereastra de comandă, ceea ce
înseamnă că utilizatorul poate introduce comanda dorită.

Trecerea la modul de lucru asistat se face fie printr-un click cu mouse-ul pe una
dintre opŃiunile meniului principal, fie cu tastatura, prin acŃionarea tastei F10
sau ALT prin care se selectează prima opŃiune din meniul sistem (File).
Revenirea în fereastra de comandă se face prin acŃionarea tastelor F10, ALT sau
ESC, având ca efect deselectarea opŃiunii active din meniul sistem şi apariŃia

29
BAZE DE DATE

cursorului în fereastra de comandă. Dacă se utilizează mouse-ul, se poziŃionează


cursorul acestuia în fereastra de comandă şi se execută un click.

2.4.3.3. Meniul sistem şi submeniuri

Meniul sistem sau bara meniului principal se afişează în fereastra principală a


mediului Visual FoxPro, sub bara de titlu şi se compune din următoarele
elemente:
1. bara de meniuri (menu bar);
2. opŃiuni din bară (menu pads);
3. meniuri derulante (submeniuri verticale - menu popups);
4. opŃiuni din meniu (menu options).

2.4.3.3.1. Rolul opŃiunilor din meniul principal

Principalele meniuri şi submeniurile lor sunt:


1. Meniul FILE - Acest meniu conŃine comenzi pentru operaŃii cu
fişiere, cum ar fi: creare, deschidere, salvare, tipărire etc., cât şi
comanda de ieşire (părăsire) din sistemul Visual FoxPro. Cele mai
multe din aceste opŃiuni se regăsesc şi pe bara de instrumente
standard. In plus, apar opŃiunile Import şi Export, care asigură
importul, respectiv exportul de date în/din Visual FoxPro din/în alte
aplicaŃii.
2. Meniul EDIT - Acest meniu conŃine opŃiuni referitoare la editarea
programelor, formelor sau rapoartelor, cât şi comenzi pentru crearea
obiectelor OLE (Object Linking and Embedding). La fel ca şi în cazul
meniului File, o mare parte din aceste opŃiuni le găsim pe bara de
instrumente standard (Cut, Copy, Paste, Undo, Redo), fiind destinate
lucrului în mod text.
3. Meniul View - Acest meniu conŃine comenzi pentru vizualizarea
tabelului curent în mod Edit sau Browse, pentru adăugarea automată
de noi înregistrări la sfârşitul fişierului (opŃiunea Append Mode) sau
pentru modificarea structurii unei tabele (opŃiunea Table Designer), iar
prin selectarea opŃiunii Database Designer se afişează într-o fereastră
fişierele din baza de date curentă cu structura lor (denumirea
câmpurilor).
4. Meniul Format - Acest meniu conŃine comenzi pentru formatarea
textului aferent unui program, pentru identarea (alinierea) textului,
selectarea fontului dorit, etc. In momentul folosirii anumitor
generatoare sunt disponibile diverse comenzi suplimentare.

30
5. Meniul Tools - Acest meniu conŃine diverse instrumente de
programare folosite pentru efectuarea anumitor acŃiuni asupra datelor
şi codului sursă. Cele mai importante instrumente sunt cele de tip
Wizard, folosite pentru crearea rapidă de tabele, forme, rapoarte, etc.
Un asistent sau vrăjitor (Wizard) este un program care îndrumă
utilizatorul pe parcursul efectuării unor operaŃii sau a unor
componente ale unei aplicaŃii în curs de proiectare. El afişează o serie
de ferestre cu întrebări referitoare la obiectul ce urmează a fi creat,
întrebări care se referă în principal la datele ce urmează a fi prelucrate,
la felul în care va arăta componenta creată etc. Pentru fiecare
componentă a unei aplicaŃii (formulare, tabele, rapoarte, baze de date,
etc.) există câte o opŃiune a unui submeniu ataşat opŃiunii Wizard.
6. Meniul Program - Acest meniu conŃine opŃiuni referitoare la rularea
şi compilarea unui program.
7. Meniul Window - Acest meniu conŃine opŃiuni pentru gestiunea
ferestrelor afişate pe ecran şi a sesiunii de date.
8. Meniul Help - Acest meniu include în primul rând opŃiuni care permit
accesarea fişierului de asistenŃă, care conŃine informaŃii referitoare la
comenzi şi funcŃii ale sistemului Visual Fox Pro.

2.4.3.4. Caseta de control a ferestrelor în Visual FoxPro

Dată fiind importanŃa ferestrelor în FoxPro, acestea sunt gestionate prin


intermediul opŃiunilor din caseta de control a ferestrei sau al opŃiunilor din
meniul Window. Caseta sau meniul de control al unei ferestre conŃine comenzi
(opŃiuni) pentru mutarea, redimensionarea sau închiderea unei ferestre.
Executarea unui dublu click pe acest obiect al ferestrei principale Visual FoxPro
reprezintă cea mai rapidă cale de ieşire din mediul FoxPro.

2.4.3.4.1. Aspecte privind gestiunea ferestrelor în Visual FoxPro

O altă componentă a interfeŃei Visual FoxPro, alături de meniuri, este


reprezentată de ferestre. O fereastră este o porŃiune dreptunghiulară a ecranului
cu proprietăŃi specifice (coordonate, caracteristici grafice, de colorare, etc.), prin
care FoxPro comunică cu utilizatorul.

Pe ecran se pot afişa sau deschide simultan mai multe ferestre, care se
acoperă sau nu între ele, după cum s-a văzut în cazul opŃiunii Window. Dintre
acestea, la un moment dat una singură este activă, cea care conŃine cursorul sau
ultima deschisă. Chenarul ei are de regulă o culoare mai pronunŃată. Prin
activare, o fereastră este adusă în prim plan, şi toate ieşirile sunt dirijate spre

31
BAZE DE DATE

fereastra respectivă. Ea rămâne activă până când este dezactivată sau este
activată o altă fereastră.

Ieşirea dintr-o fereastră sistem se poate realiza prin: acŃionarea butonului


de închidere, a tastei ESC, a unui obiect de control din cadrul ferestrei sau prin
selectarea comenzii CLOSE din meniul FILE. Ca urmare, fereastra respectivă
este eliminată de pe ecran, structura ei de control este ştearsă din memoria
operativă iar ieşirile sunt dirijate spre o altă fereastră sau pe ecran.

Sistemul Visual FoxPro permite lucrul cu două tipuri de ferestre şi anume:


1) ferestre sistem;
2) ferestre utilizator.

O fereastră cu statut special în cadrul mediului Visual FoxPro o reprezintă


fereastra de comenzi (Command Window). Afişarea acestei ferestre se poate
realiza în mai multe moduri: prin selectarea opŃiunii Command Window din
meniul Window, prin acŃionarea tastelor CTRL+F2, sau prin acŃionarea
butonului aferent de pe bara cu instrumente standard.

2.4.3.5. Obiecte de control

• Comunicarea dintre sistem şi utilizator se realizează în cea mai mare


parte prin intermediul obiectelor de control. Acestea apar atât în cadrul
ferestrelor sistem cât şi utilizator, fiind utilizate pentru diferite scopuri.

Principalele obiecte utilizate în cadrul mediului Visual FoxPro sunt


următoarele:
1. COMMAND BUTTON- buton de comandă sau comutator
2. OPTION BUTTON - buton de opŃiuni, sau butoane radio
3. CHECK BOX - casetă sau buton de validare sau
selecŃie
4. TEXT BOX - casetă sau chenar de text
5. EDIT BOX - casetă sau chenar de editare
6. LABEL - etichetă
7. SPINNER - casetă de modificare valorică
8. COMBO BOX - listă derulantă combinată
9. LIST BOX - listă derulantă simplă
10. PAGE FRAME - cadru de pagină sau pagină
11. GRID - grilă sau caroiaj
12. TIMER - ceasul
13. TOOLBAR - bare de instrumente sau de utilitare

Principalele caracteristici ale obiectelor de control sunt următoarele:


32
1) obiectele se pot indica fie prin mutarea cursorului mouse-ului pe ele,
fie prin mutarea barei de selecŃie cu ajutorul tastaturii; în acest ultim
caz deplasarea între obiectele de control în cadrul unei ferestre sau
casete de dialog se realizează cu ajutorul tastei TAB, pentru
deplasarea în direcŃia acelor de ceasornic, sau cu ajutorul tastelor
SHIFT+TAB, pentru deplasarea în sens invers;
2) selectarea unui obiect se poate face prin acŃionarea tastei ENTER,
după poziŃionarea pe obiect, sau prin execuŃia unui click cu mouse-ul,
în momentul în care cursorul mouse-ului este poziŃionat pe obiect;
3) unele obiecte, aşa după cum s-a văzut şi în cazul opŃiunilor, au
asociată o casetă de dialog care este vizualizată atunci când se
selectează obiectul; numele acestor obiecte este urmat de puncte de
suspensie "…" (trei puncte);
4) pentru majoritatea obiectelor de control există chei rapide (hot keys)
care permit o alegere rapidă a obiectului dorit, reprezentate printr-o
literă din denumirea obiectului, care apare de obicei subliniată.

REZUMAT Modulul are în componenŃă ouă unităŃi.


Prima unitate este destinatǎ studiului mediului Visual
FoxPro, ca mediu integrat, obiectual şi vizual de dezvoltare
de aplicaŃii. Dintre problemele tratate amintim:
• lansarea şi terminarea unei sesiuni;
• componenŃa mediului Visual FoxPro;
• moduri de lucru în Visual FoxPro;
• opŃiunile din meniul principal şi din caseta de
control;
• gestiunea ferestrelor şi a obiectelor de control.

TEME 1. Efectuarea unor operaŃii uzuale cu mediul Visual


CONTROL FoxPro;
2. Elaborarea unui memento recapitulative;
3. Cunoaşterea elementelor lexicale şi sintactice ale
limbajului VFP.
4. Prezentarea obiectivelor de date şi a tipurilor de date
utilizate în cadrul programelor Fox.
5. Prezentarea sintaxei comenzilor FoxPro şi a elementelor
de metalimbaj
BIBLIOGRAFIE 1. R.Avram-NiŃchi, N.Ghişoiu, S.Goron, S.I.NiŃchi,
N.Tomai, Baze de date şi programarea calculatoarelor
utilizând Visual FoxPro, Risoprint, 2003, p. 47-89.
2. Avram-NiŃchi R., S.I.NiŃchi şi alŃii, Culegere de exerciŃii
33
BAZE DE DATE

şi probleme la disciplina « Baze de date şi programarea


calculatoarelor, UBB Preprint, Cluj, 2003.
3. Marian Cristescu, Baze de date utilizate în mediul
economic, Editura ”ALMA MATER”, Sibiu, 2007, pg.
101-127.
4. Dima G, Dima M., Visual FoxPro 7.0, Teora 2002.
5. M. Fotache şi alŃii, Visual FoxPro, Polirom, 2002.
6. Ghişoiu N., Visual FoxPro; exerciŃii şi programe,
Risoprint, 2002.
7. Homorodean M.A, Petrescu S, Limbajul de programare
Visual FoxPro 6.0, Niculescu, 2002.
8. *** , Microsoft Visual FoxPro 6.0: Ghidul
programatorului, Teora, 2001.
9. http://msdn.microsoft.com/vfoxpro
10. http://gotdotnet.com/team/vfp

34
3. CREAREA ŞI GESTIUNEA TABELELOR LIBERE ÎN VISUAL
FOXPRO

CONCEPTE DE 1. Crearea, modificarea şi listarea structurii tabelelor;


BAZĂ 2. Validarea datelor din cadrul unui tabel la nivel de câmp
şi înregistrare;
3. Deschiderea şi închiderea tabelelor;
4. Încărcarea tabelelor cu date şi listarea conŃinutului
acestora;
5. Modificarea conŃinutului unui tabel;
6. Ştergerea înregistrărilor din cadrul unui tabel
OBIECTIVE 1. Cunoaşterea modului de creare şi modificare a structurii
tabelelor în Visual FoxPro ;
2. Asimilarea tehnicilor de încărcare a tabelelor cu date şi
de actualizare a datelor din tabelele respective;
RECOMANDĂRI 1. Se vor studia în continuare operaŃiile de gestiune cu
PRIVIND tabele libere: creare, deschidere, închidere, adăugarea
STUDIUL sau eliminarea unei baze de date din proiect, adăugare,
eliminare tabele din baza de date, indexarea
înregistrărilor unui tabel;
2. Pentru însuşirea lucrului cu tabelele se vor studia
tehnicile de creare a structurii tabelelor şi de încărcare a
tabelelor cu date, de actualizare a datelor şi de definire a
relaŃiilor dintre tabele.
REZULTATE 1. însuşirea tehnicilor de creare a structurii tabelelor, de
AŞTEPTATE încărcare a acestora cu date şi de actualizare a datelor
din tabel;
2. cunoaşterea procedurilor de indexare a tabelelor şi a
tipurilor de indecşi utilizaŃi în Visual FoxPro.

35
BAZE DE DATE

3.1. LUCRUL CU TABELELE LIBERE IN VISUAL FOXPRO

OBIECTIVE 1. Crearea, modificarea şi listarea structurii tabelelor în


Visual FoxPro;
2. Deschiderea şi închiderea tabelelor;
3. Încărcarea tabelelor cu date şi listarea conŃinutului
acestora;
4. Modificarea conŃinutului unui tabel;
5. Ştergerea înregistrărilor din cadrul unui tabel;
6. Accesul la înregistrările unui tabel;
7. Ordonarea înregistrărilor unui tabel.
CUVINTE Structură tabel
CHEIE Zone de lucru
Alias tabel
Indicatori de înregistrări
Indexare
Sortare.

3.1.1. Crearea, modificarea şi listarea structurii tabelelor în Visual FoxPro


3.1.1.1. Crearea unui nou tabel

Tabelele reprezintă componentele de bază din cadrul aplicaŃiilor în Visual


FoxPro. O tabelă sau fişier .dbf în Visual FoxPro, poate exista fie ca tabelă
inclusă într-o bază de date, fie ca o tabelă liberă, care nu este asociată nici unei
baze de date.

Pentru a folosi o tabelă, ea trebuie, mai întâi, creată, aceasta însemnând


definirea structurii acesteia şi apoi încărcarea cu date. Crearea unei noi tabele în
Visual FoxPro se poate realiza în unul din următoarele moduri:
1. In mod interactiv, folosind generatorul de tabele Table Designer sau
Table Wizard;
2. Prin comenzi ale limbajului Visual FoxPro.

3.1.1.2. Crearea unui nou tabel prin folosirea generatorului de tabele


(Table Designer)

Lansarea generatorului sau proiectantului de tabele se poate realiza în


unul din următoarele moduri:
1. Prin intermediul ferestrei Project Manager.
2. Prin selectarea opŃiunii New din meniul File sau a pictogramei New
de pe bara de instrumente standard.
3. Prin utilizarea asistentului Wizard

36
3.1.1.3. Crearea unui nou tabel prin utilizarea ferestrei Project Manager

După afişarea pe ecran a ferestrei Project Manager, se selectează pagina Data şi


se execută un clic pe simbolul + de la secŃiunea Databases, având ca efect
afişarea, în cadrul secŃiunii respective, a bazelor de date conŃinute în proiect. In
continuare, se va executa clic pe semnul din faŃa bazei de date în care dorim să
includem noul tabel. Ca urmare, se vor afişa elementele incluse în baza de date,
dintre care se va selecta elementul Tables.

După selectarea uneia dintre cele două elemente: Tables sau Free Tables, se
acŃionează butonul New, prin care se afişează, pe ecran, fereastra de dialog New
Table.
Din cadrul casetei New Table se va selecta butonul New Table dacă dorim să
creem singuri structura noului tabel sau butonul Table Wizard dacă dorim să
creem structura noului tabel cu ajutorul unui asistent Wizard.
In fereastra Create se precizează directorul în care se va salva noua tabelă şi se
introduce numele tabelei. In final, se execută clic pe butonul Save având ca
efect deschiderea ferestrei aferente constructorului de tabele (table Designer).
Această fereastră conŃine un obiect de tip cadru de pagină cu trei pagini având
etichetele: Fields, Indexes şi Table, fiind activată implicit prima pagină, unde
se va introduce structura noului tabel.
Cea mai mare parte a ferestrei aferente paginii Fields este ocupată de un
dreptunghi plasat în stânga ferestrei în care se introduce structura noului fişier.
Acest dreptunghi conŃine şapte coloane dintre care prima nu are nume, fiind
utilizată pentru ştergerea sau inserarea unei noi linii sau schimbarea ordinii
câmpurilor în cadrul structurii. Celelalte coloane au următoarele denumiri:
Name, Type, Width, Decimal, Index, NULL şi permit specificarea
caracteristicilor unui câmp din structura noului fişier.
După introducerea câmpurilor aferente noii structuri, crearea unor indecşi şi
eventual introducerea în partea de jos a ferestrei Table Designer se selectează
butonul OK, prin care se salvează noua structură şi se părăseşte fereastra Table
Designer, iar pe ecran apare o casetă de dialog, prin care se întreabă dacă se
introduc sau nu date în noul fişier.

După introducerea datelor aferente unei înregistrări se afişează macheta pentru


următoarea înregistrare. Salvarea datelor se realizează prin acŃionarea tastelor
CTRL+W sau CTRL+END pe primul câmp al unui articol vid. Tabelul astfel
obŃinut rămâne activ în zona curentă.

3.1.1.4. Crearea unui nou tabel prin selectarea opŃiunii New din meniul File

37
BAZE DE DATE

La selectarea opŃiunii New din meniul File sau de pe bara de instrumente


standard pe ecran se deschide fereastra New din care se selectează butonul de
opŃiuni Table indicându-se astfel că se doreşte crearea unui nou tabel, după care
se acŃionează butonul New File având ca efect afişarea pe ecran a ferestrei
Create. In continuare se parcurg aceleaşi etape ca şi în cazul folosirii
constructorului de proiecte (Project Manager).

3.1.1.5. Crearea unui nou tabel prin folosirea asistentului Wizard

In cazul selectării din fereastra New Table a butonului Table Wizard sau
selectării din fereastra New a opŃiunii Wizard are loc crearea structurii noului
tabel cu ajutorul asistentului Wizard. Crearea tabelului are loc în 6 etape, pentru
fiecare etapă afişându-se pe ecran o fereastră cu conŃinutul etapei fiecare
fereastră aferentă unei etape conŃine în partea de jos butoanele Next şi Back
pentru trecerea la etapa următoare sau revenire la cea anterioară şi un buton
Finish care permite încheierea operaŃiei de crearea a structurii.

3.1.2. Crearea unei noi tabele prin comenzi ale limbajului Visual FoxPro

Pentru crearea structurii unei tabele prin comenzi ale limbajului Visual FoxPro
se folosesc în principiu 2 comenzi şi anume: CREATE şi CREATE TABLE.

De asemeni, se mai pot folosi şi alte comenzi indirecte care în final permit
obŃinerea structurii unui nou tabel.
1. Comanda CREATE; aceasta este o comandă menŃinută din versiunea
clasică şi permite crearea în mod conversaŃional a structurii unui tabel şi
eventual încărcarea acestuia cu date:

2. Comanda CREATE TABLE


Această comandă este preluată din limbajul SQL şi permite crearea
structurii unui tabel în mod direct, pe baza opŃiunilor cuprinse în comandă.
Dacă noul tabel a cărui structură se creează va fi asociat unei baze de
date, se deschide mai întâi baza de date respectivă şi apoi se creează tabelul.
Dacă dorim în schimb să creem un tabel liber va trebui să menŃionăm în
comanda CREATE opŃiunea FREE. Dacă nu este deschisă nici o bază de date,
comanda va crea automat un tabel liber, fără să mai menŃionăm în cadrul
comenzii opŃiunea FREE.

3.1.3. Alte comenzi utilizate la crearea structurii tabelelor din baze


de date
Un tabel din cadrul unei baze de date sau liber se poate crea prin copierea
structurii sale dintr-un tabel existent, dintr-un fişier intermediar sau dintr-un
masiv. In acest sens se folosesc următoarele comenzi:

38
a. Comanda COPY STRUCTURE
ExecuŃia acestei comenzi permite copierea parŃială sau totală a structurii unui
tabel de date activ într-un nou tabel. Sintaxa comenzii este următoarea:

COPY STRUCTURE TO <nume-fişier> [FIELDS<listă-de-câmpuri>|


FIELDS LIKEMşablon1>| FIELDS EXCEPT<şablon2>|
[[WITH] CDX | [WITH] PRODUCTION]

b. Comanda CREATE FROM

ExecuŃia acestei comenzi permite crearea unui nou fişier, prin copierea structurii
sale dintr-un fişier intermediar în care se încarcă structura de copiat. Comanda
permite în acelaşi timp şi editarea structurii existente înainte de obŃinerea noii
structuri.

Formatul general al comenzii este următorul:


CREATE[<fişier 1>] FROM [<fişier 2>]

unde:
<fişier 1> este numele fişierului care va fi creat. Acesta preia înregistrările de
date din <fişier 2> pentru crearea structurii sale. După execuŃia
comenzii CREATE noua bază de date devine activă.
<fişier 2> este numele fişierului intermediar sau sursă, numit şi fişier cu
structură extinsă. Dacă nu se specifică nici unul din cele două
fişiere se va deschide o fereastră de dialog din care se selectează
fişierele folosite în comandă.

Fişierul cu structură extinsă se obŃine prin utilizarea comenzii COPY


STRUCTURE EXTENDED cu următoarea sintaxă:

COPY STRUCTURE EXTENDED TO <nume-fişier>


[FILEDS<listă-de-câmpuri>| FILEDS LIKE <şablon 1>|
FILEDS EXCEPT<şablon 2>]

3.1.4. FuncŃii privind structura tabelelor bazei de date

Pentru a avea acces la informaŃiile din structura unui fişier al bazei de date se
folosesc următoarele funcŃii:

39
BAZE DE DATE

1. FuncŃia RECCOUNT( ) - returnează numărul de înregistrări din


cadrul fişierului deschis în zona de lucru specificată prin parametrii
<expN> sau <expC>.
2. FuncŃia LUPDATE( ) - returnează data ultimei actualizări pentru
fişierul specificat. Cei doi parametri ai funcŃiei se referă de asemenea
la zona de lucru în care este deschis fişierul.
3. FuncŃia RECSIZE( ) - returnează lungimea unei înregistrări din
cadrul fişierului specificat şi are aceeaşi sintaxă cu funcŃia
RECCOUNT(). Dacă nu este deschis nici un fişier în zona specificată,
funcŃia returnează valoarea zero.
4. FuncŃia FCOUNT() - returnează numărul de câmpuri din stsructura
fişierului specificat şi are aceeaşi sintaxă cu funcŃiile precedente. Dacă
nu este deschis nici un fişier în zona specificată, funcŃia returnează
valoarea zero.
5 FuncŃia FIELDS() - returnează un şir de caractere reprezentând
numele unui câmp din structura fişierului specificat, scris cu
majuscule. Câmpul este identificat prin poziŃia sa în înregistrarea de
structură
6. FuncŃia FSIZE() - returnează mărimea unui câmp din structura
fişierului specificat.
7. FuncŃia TYPE() - returnează tipul unui câmp din structura fişierului
specificat şi are aceeaşi
sintaxă cu funcŃia FSIZE().

40
3.1.5. Modificarea şi vizualizarea structurii unui tabel

După crearea unui tabel, utilizatorul poate modifica structura şi proprietăŃile


acestora prin: adăugarea, modificarea sau ştergerea numelui şi caracteristicilor
unui câmp sau proprietăŃilor acestuia: valori implicite, chei, reguli de validare,
etc. Modificarea structurii unui tabel se poate realiza în unul din următoarele
moduri:
- prin folosirea constructorului de tabele (Table Designer);
- prin comenzi introduse în fereastra de comandă sau la nivel de program.

1. Modificarea structurii unui tabel prin utilizarea constructorului


de tabele

Din fereastra Project Manager se selectează tabelul a cărei structură se modifică


şi apoi se acŃionează butonul Modify… . Ca efect pe ecran apare fereastra
Tabel Designer în care se pot face modificările dorite. Constructorul de tabele se
mai poate lansa şi prin selectarea opŃiunii Modify din meniul Database. In acest
scop se deschide mai întâi fereastra Database Designer şi din fereastra
respectivă se va selecta tabelul a cărui structură se modifică, după care se
selectează opŃiunea Modify din Database. Ca şi în primul caz, pe ecran apare
fereastra Table Designer conŃinând structura tabelului selectat anterior.

Modificările care se pot face referitor la stsructura tabelului activ se referă la:
- adăugarea sau eliminarea unor câmpuri (linii) din structura
existentă;
- redenumirea unor câmpuri (schimbarea numelui acestora);
- schimbarea ordinii câmpurilor în structură;
- schimbarea dimensiunii sau tipului unor câmpuri;
- schimbarea proprietăŃilor unui câmp (valori implicite, reguli de
validare, comentarii etc.).
- adăgarea, modificarea sau ştergerea unui index (tag).

După efectuarea modificărilor se acŃionează butonul OK prin care se solicită


sistemului salvarea modificărilor efectuate. Sistemul Visual FoxPro afişează pe
ecran o casetă de mesaj prin care se cere confirmarea modificărilor efectuate.

2. Modificarea structurii unui tabel prin comenzi

Pentru modificarea structurii unui tabel se mai pot folosi comanda MODIFY
STRUCTURE şi funcŃia DBSETPROP ( ).

Comanda MODIFY STRUCTURE

41
BAZE DE DATE

Prin execuŃia acestei comenzi pe ecran se va afişa fereastra TABLE DESIGNER


aferentă tabelului curent, în care se pot opera modificările dorite. După
efectuarea modificărilor se va afişa pe ecran caseta de mesaj cu confirmarea
modificărilor efectuate şi apoi se revine în fereastra de comenzi sau în
programul care a lansat comanda MODIFY STRUCTURE.

3.1.6. Listarea structurii unui tabel

Pentru a vizualiza structura unui tabel din baza de date, se folosesc comenzile
LIST sau DISPLAY cu următoarea sintaxă:

DISPLAY STRUCTURE [IN <zonă-lucru>]


[TO PRINTER] [TO FILE<fişier>]
[NOCONSOLE]

LIST STRUCTURE [IN <zonă-lucru>]


[TO PRINTER] [TO FILE<fişier>]
[NOCONSOLE]

Cele două comenzi afişează structura tabelului deschis în zona de lucru curentă
numele tabelului, numărul de înregistrări din tabel şi data ultimei actualizări.
Structura include numele fiecărui câmp, tipul şi lungimea acestora şi numărul de
zecimale pentru câmpurile numerice.
Comanda DISPLAY este similară cu LIST cu deosebirea că aceasta
afişează doar informaŃiile care încap pe un ecran sau într-o fereastră, după care
se întrerupe afişarea iar într-o casetă apare mesajul "Press any key to
continue…". In cazul comenzii LIST, informaŃiile privind structura tabelului
specificat sunt afişate fără nici o pauză.

3.1.6.1. MenŃinerea integrităŃii datelor prin reguli de validare


Integritatea datelor dintr-o bază de date se poate realiza prin intermediul de
validare a datelor pe de-o parte şi prin integritatea referenŃială pe de altă parte.

Regulile de validare permit verificarea preluării datelor de intrare. Cu ajutorul


lor se compară dacă valorile introduse în câmpurile unei înregistrări corespund
cerinŃelor din cadrul expresiei de validare. Conceptul de integritate a datelor
depăşeşte sfera integrităŃii la nivel de câmp şi înregistrare şi se extinde la nivelul
relaŃiilor dintre tabele prin intermediul integrităŃii referenŃiale.

42
Integritatea referenŃială are ca obiectiv menŃinerea legăturilor dintre tabele şi
permite efectuarea operaŃiilor de încărcare şi actualizare a datelor din baza de
date astfel încât aceste legături să nu fie afectate.

Bazele de date suportă reguli de validare la două niveluri: la nivel de câmp şi la


nivel de înregistrare. Pentru a menŃine integritatea datelor din baza de date,
regulile de validare se pot introduce atât la nivelul aplicaŃiilor (programelor) sau
chiar în cadrul bazei de date prin intermediul procedurilor stocate.

3.1.6.2. Deschiderea şi închiderea tabelelor din baza de date

a. Zone de lucru

Pentru a folosi un tabel al bazei de date, acesta trebuie mai întâi deschis sau
activat. Această operaŃie se realizează într-o zonă, rezervată în memoria internă,
în care se memorează informaŃii privind folosirea fişierului respectiv, numită
zonă de lucru. Astfel în zona de lucru în care s-a deschis un fişier se
memorează:
- înregistrarea de structură (antetul fişierului);
- numărul înregistrării curente;
- formatul fişierului;
- relaŃiile dintre fişierele .DBF.
Tot în zona de lucru se creează zona tampon aferentă fişierului deschis în care
se memorează prima înregistrare din fişier. FoxPro asigură 32767 de zone de
lucru numerotate de la 1 la 32767, în care se pot deschide diferite fişiere. In
fiecare zonă de lucru se poate deschide însă, un singur fişier. Identificarea
zonelor de lucru se poate realiza:
- cu ajutorul cifrelor de la 1 la 10 sau cu ajutorul literelor de la A la J
pentru primele 10 zone de lucru.
- cu ajutorul cifrelor de la 11 - 32767 pentru celelalte zone de lucru;
- cu ajutorul aliasului fişierului deschis într-o anumită zonă de lucru.
b. Aliasul unui tabel

La deschiderea unui tabel din baza de date, acestuia i se poate atribui un nume
suplimentar faŃă de cel definit la creare, de către programator sau de către
sistem, dacă programatorul nu a făcut acest lucru. Acest nume prin care tabelul
poate fi ulterior identificat poartă denumirea de alias.
Specificarea aliasului unui tabel se poate face în unul din următoarele moduri:
1. Prin intermediul clauzei Alias <nume-alias> din cadrul comenzii USE,
la deschiderea tabelului.
2. De către sistem, dacă programatorul nu a specificat, în mod explicit,
un alias în comanda USE. In acest caz, aliasul atribuit de sistem este
format astfel:
43
BAZE DE DATE

- din numele fişierului folosit în comanda USE;


- din literele de la A la J pentru primele 10 zone de lucru sau din
caracterele W11 la W32767 pentru celelalte zone de lucru, dacă un
fişier este deschis în mai multe zone de lucru.
Aliasul stabilit prin clauza ALIAS din comanda USE, trebuie să respecte
regulile de formare a identificatorilor în FoxPro, respectiv să înceapă cu o literă,
iar restul caracterelor să fie alfanumerice sau liniuŃa de subliniere.

c. Deschiderea tabelelor

Pentru deschiderea unui tabel liber sau asociat unei baze de date se pot folosi
următoarele variante:
1. Din fereastra Project Manager se selectează baza de date din care face
parte tabelul şi se acŃionează butonul OPEN având ca efect
deschiderea bazei de date respective.
2. De pe bara de instrumente standard se selectează pictograma care
determină deschiderea unui obiect având ca efect apariŃia pe ecran a
ferestrei OPEN. In cadrul ferestrei se selectează tipul de fişier (DBF)
şi apoi din lista apărută numele fişierului. Numele fişierului se poate
introduce şi direct în caseta NAME.
3. Prin utilizarea comenzii USE, în fereastra de comandă sau în program

44
d. Comanda USE

Comanda USE permite deschiderea sau activarea unui fişier DBF în zona de
lucru curentă sau specificată în clauza IN. De asemenea, comanda poate
îndeplini în acelaşi timp şi alte funcŃii cum ar fi: deschiderea fişierelor index şi
stabilirea fişierului index principal sau atribuirea unui alias fişierului deschis
etc.
USE{{<nume-bază-date>.]<nume-tabel>
|SQL<nume-view>|?]
[IN <zonă-lucru>|0]
[ONLINE][ADMIN]{AGAIN]
[NOREQUERY[<nr.sesiune-deschisă>]]
[NODATA][ALIAS<nume-alias>]
[INDEX<listă-fis.-index>|?
ORDER<expN>|<fis.IDX>|
TAG<etichetă>[OF<fis.CDX>]
[ASCENDING|DESCENDING}}}
[EXCLUSIVE][SHARED][NOUPDATE]

e. Închiderea tabelelor

Pentru închiderea fişierelor asociate unei baze de date în fereastra Proiect


Manager se selectează baza de date aferentă şi se acŃionează butonul Cose . Prin
închiderea bazei de date se închid automat şi fişierele asociate. Dacă dorim să
închidem numai o parte din fişierele deschise asociate unei baze de date sau
libere, se va folosi şi fereastra Data Session. Din această fereastră se selectează
fişierul ce urmează a fi închis şi se acŃionează butonul Close. OperaŃia se repetă
pentru fiecare fişier ce urmează a fi închis.
Inchiderea unui tabel se poate face şi prin folosirea comenzii USE fă nici un
parametru, pentru a închide fişierul din zona curentă, sau cu parametrul IN
<zona-lucru>, pentru a închide fişierul deschis în zona de lucru precizată în
clauza IN.

3.1.6.3. FuncŃii privind zonele de lucru, tabelele deschise şi câmpurile


aferente

Pentru a obŃine informaŃii despre zonele de lucru şi tabelele deschise în zonele


respective refolosesc funcŃiile USED() şi DBF().
1. FuncŃia USED(); furnizează informaŃii referitoare la zona de lucru
specificată, în sensul dacă este liberă sau ocupată cu un tabel deschis în zona
respectivă. FuncŃia returnează valoarea .T. (adevărat) dacă în zona de lucru
specificată în cadrul funcŃiei există un tabel deschis şi .F. în caz contrar.

45
BAZE DE DATE

2. FuncŃia DBF(); specifică care anume tabel este deschis în zona de lucru
curentă sau specificată. Sintaxa funcŃiei este la fel cu cea a funcŃiei USED(),
iar cei doi parametrii au aceeaşi semnificaŃie ca şi în cazul funcŃiei USED().

FuncŃia returnează numele tabelului deschis în zona curentă sau specificată,


inclusiv calea de acces. Dacă în zona specificată nu este deschis nici un tabel
funcŃia returnează şirul vid.

3.1.6.4. Încărcarea tabelelor cu date şi listarea conŃinutului acestora

Încărcarea unui tabel cu date constă în adăugarea în cadrul fişierului aferent de


înregistrări conŃinând datele necesare unei aplicaŃii. Această operaŃie se poate
realiza imediat după crearea structurii unui tabel, în mod interactiv, prin
preluarea datelor de la tastatură sau ulterior în funcŃie de necesităŃi. In general se
preferă a doua variantă de încărcare a tabelelor din baza de date, deoarece în
acest caz, datele se pot încărca fie prin preluare dintr-un alt tabel fie prin
folosirea unui formular. De asemenea în funcŃie de poziŃia pe care o înregistrare
o va ocupa în fişier, adăugarea se poate face la sfârşitul fişierului sau în
interiorul acestuia, printre înregistrările existente.

a. Adăugarea de noi înregistrări la sfârşitul unui tabel prin meniul sistem

Principalul instrument folosit de Visual FoxPro pentru adăugarea de noi


înregistrări în cadrul unui tabel, îl reprezintă fereastra Browse. Prin intermediul
acestei ferestre se pot de asemenea modifica sau marca/demararea pentru
ştergere anumite înregistrări sau se pot vizualiza înregistrările unui tabel.

Pentru deschiderea ferestrei Browse şi adăugarea de noi înregistrări se pot folosi


următoarele variante: Din fereastra Project Manager se selectează baza de date
care conŃine tabelul sau tabelele ce urmează a fi încărcate. Se selectează apoi
din secŃiunea Tables, tabelul în care se fac adăugările şi se acŃionează butonul
Browse. Ca efect pe ecran apare fereastra Browse cu conŃinutul fişierului Pentru
a adăuga o singură înregistrare vidă la sfârşitul ferestrei se selectează din meniul
Table opŃiunea Append New Record sau se acŃionează tastele CTRL+Y. Datele
aferente înregistrării vide se introduc în fiecare câmp prin tastare, trecerea la
câmpul următor realizându-se cu ENTER.

Pentru a adăuga un număr mare de înregistrări se va selecta opŃiunea Append


Mode din meniul View, prin care se adaugă câte o înregistrare vidă după ultima
înregistrare din fereastră. După introducerea unei înregistrări se poate acŃiona
tasta cu săgeata în jos (în modul Browse) sau Enter (în modul Edit) pentru a
adăuga o nouă înregistrare.

46
După încărcarea acesteia cu date Visual FoxPro va adăuga o nouă înregistrare
vidă pe ultima poziŃie din cadrul ferestrei şi va plasa cursorul pe înregistrarea
respectivă. La terminarea operaŃiei de încărcare, datele introduse vor fi salvate
pe disc în fişierul aferent. Dacă deschidem din nou fereastra Browse vom vedea
înregistrările anterior adăugate.

b. Adăugarea de noi înregistrări prin comenzi ale limbajului Visual


Foxpro; comanda APPEND

Pentru adăugarea de noi înregistrări în cadrul unui tabel prin intermediul


limbajului Visual FoxPro se folosesc comenzile: APPEND, care determină
adăugarea de înregistrări la sfârşitul fişierului.

1. Comanda APPEND

La încărcarea cu date a unui tabel în mod interactiv, comanda APPEND are


următoarea sintaxă:
APPEND [BLANK]

Executarea acestei comenzi determină adăugarea de noi înregistrări la sfârşitul


tabelului activ, deschis în zona de lucru curentă. Dacă nu este deschis nici un
tabel în zona de lucru curentă pe ecran se afişează fereastra OPEN pentru a
selecta şi deschide tabelul în care se vor face adăugări. Prin folosirea comenzii
în formatul: APPEND adică fără opŃiunea BLANK se adaugă înregistrări la
sfârşitul tabelului, prin prelucrarea datelor de la tastatură. Ca urmare pe ecran se
afişează fereastra de editare APPEND care conŃine câmpurile tabelului activ
ordonate pe verticală. Valorile aferente fiecărui câmp se tastează în dreptul
câmpului respectiv. După introducerea datelor aferente unei înregistrări, pe
ecran se afişează macheta de preluare date pentru următorul articol.

3.1.7. Vizualizarea conŃinutului unui tabel; comenzile LIST şi


DISPLAY

La nivel de program listarea conŃinutului unui tabel se poate realiza cu ajutorul


comenzilor DISPLAY şi LIST. Cele două comenzi permit afişarea conŃinutului
unui tabel al bazei d date pe ecran, la imprimantă sau într-un fişier pe disc.
Principala diferenŃă dintre cele două comenzi constă în aceea că la
execuŃia comenzii DISPLAY, după umplerea unui ecran se opreşte afişarea,
continuarea afişării realizându-se prin apăsarea unei taste, în timp ce la execuŃia
comenzii LIST afişarea se realizează fără nici o pauză.

3.1.7.1. Modificarea conŃinutului unui tabel


47
BAZE DE DATE

Modificarea valorii unor câmpuri din cadrul înregistrărilor unui fişier al bazei de
date se poate realiza prin meniul sistem sau cu ajutorul comenzilor EDIT,
CHANGE, BROWSE, REPLACE, BLANCK, UPDATE. OperaŃia de
modificare se poate desfăşura în unul din următoarele moduri:
1. In mod interactiv, prin afişarea pe ecran a unei ferestre de editare în care
apar valorile pentru câmpurile de editare pentru o înregistrare sau un grup de
înregistrări. Valorile de modificat se preiau în câmpurile specificate prin
tastare. Acest mod de lucru apare la folosirea uneia din comenzile: EDIT,
CHANGE sau BROWSE sau la modificarea prin meniul sistem.
2. In mod direct, prin preluarea datelor necesare operaŃiei de modificare dintr-
un fişier (comanda UPDATE) sau prin precizarea lor în comanda de
modificare (comanda REPLACE). Câmpurile de modificat sau de asemenea
cuprinse în comandă.

La actualizarea în mod interactiv se pot folosi două moduri de lucru:


a. Modul EDIT, prin care, în fereastra de editare, câmpurile aferente unei
înregistrări sunt ordonate pe verticală, ca şi la execuŃia comenzii APPEND.
b. Modul BROWSE, prin care în fereastra de editare se afişează un grup de
înregistrări aranjate într-un tabel, câmpurile fiind ordonate pe orizontală.

a. Modificarea conŃinutului unui tabel prin meniul sistem

In majoritatea cazurilor se preferă modul de lucru Browse, prin intermediul


ferestrei Browse, dat fiind multitudinea de facilităŃi oferite de acest instrument
al mediului Visual FoxPro. InterfaŃa prietenoasă a ferestrei de calcul tabelar,
permite navigarea rapidă prin tabel în timp ce sistemul Visual FoxPro asigură o
viteză superioară şi caracteristici performante de căutare. de aceea, ea reprezintă
modul ideal pentru afişarea şi modificarea înregistrărilor unui tabel. După
deschiderea unei ferestre Browse în vederea modificării unuia sau mai multor
câmpuri dintr-o înregistrare, trebuie realizată poziŃionarea pe înregistrarea
respectivă. In cazul care în fereastra Browse sunt afişate mai puŃine înregistrări,
deplasarea la o anumită înregistrare se poate realiza cu ajutorul tastelor cu săgeŃi
sau mouse-ului.

b. Modificarea conŃinutului unui tabel prin comenzi ale limbajului


Visual FoxPro

1. Comanda BROWSE
ExecuŃia acestei comenzi permite afişarea înregistrărilor din fişierul curent, sub
formă de tabel într-o fereastră de editare. Inregistrările astfel afişate pot fi
editate (modificate) sau pot fi marcate sau demarcate pentru ştergere. De
asemenea, după afişarea înregistrărilor în fereastra de editare se pot adăuga

48
înregistrări vide ale căror câmpuri se vor edita imediat sau ulterior. Inregistrările
sunt afişate pe ecran în ordinea lor naturală sau într-o ordine alfabetică definită
de fişierul index activ asociat fişierului de date. In cadrul tabelei afişate în
fereastra BROWSE, fiecare rând reprezintă o înregistrare, câmpurile fiind
aşezate deci pe orizontală, unul după altul în ordinea definită în structura
fişierului sau specificată în comandă.

Tabelul afişat are un antet care include numele fiecărui câmp aşa cum apare în
înregistrarea de structură sau cum este definit de utilizator în comandă. De
asemenea, în tabel se pot afişa toate câmpurile din structura fişierului activ sau
numai cele specificate cu comanda BROWSE sau într-o comandă SET FIELDS.

2. Comanda REPLACE
ExecuŃia acestei comenzi permite înlocuirea conŃinutului unuia sau mai multor
câmpuri din cadrul înregistrărilor fişierului activ, cu anumite valori. ExecuŃia
acestei comenzi permite înlocuirea conŃinutului unuia sau mai multor câmpuri
din cadrul înregistrărilor fişierului activ, cu anumite valori. Spre deosebire de
comenzile precedente, execuŃia acestei comenzi nu determină deschiderea pe
ecran a unei ferestre de editare în care utilizatorul introduce noile valori ale
câmpurilor, ci realizează actualizarea pe baza datelor incluse în comandă.

3.1.8. Ştergerea înregistrărilor din cadrul unui table

3.1.8.1. Ştergerea înregistrărilor din cadrul unui tabel prin meniul


sistem
Ştergerea unor înregistrări dintr-un tabel al bazei de date se realizează în două
etape şi anume:
1) ştergerea logică;
2) ştergerea fizică.

3.1.8.2. Ştergerea înregistrărilor din cadrul unui tabel prin comenzi


ale limbajului Visual FoxPro

1. Ştergerea logică
Inregistrările din cadrul unui tabel pot fi marcate pentru ştergere folosind
comanda DELETE.
DELETE[<domeniu>][FOR<expL>]
[WHILE<expI> [NOOPTIMIZE]

Cele trei opŃiuni<domeniu>, FOR<expL> şi WHILE <expL> permit selectarea


înregistrărilor ce urmează a fi marcate pentru ştergere. Domeniul implicit al

49
BAZE DE DATE

comenzii este înregistrarea curentă. Accesul la înregistrările marcate pentru


ştergere se pot controla cu comanda SET DELETIND ON/OFF astfel:
a) la folosirea opŃiunii ON, articolele marcate pentru ştergere sunt
ignorate de comenzile FOX;
b) la folosirea opŃiunii OFF, comenzile FOX pot avea acces la toate
înregistrările, chiar dacă o parte dintre acestea sunt marcate pentru
ştergere;
c) opŃiunea implicită este OFF.

2. Ştergerea fizică
Această operaŃie constă în eliminarea din fişierul curent a tuturor înregistrărilor
marcate pentru ştergere şi se realizează cu ajutorul comenzii PACK cu sintaxa:
PACK[MEMO][DBF]

Dacă nu se foloseşte nici una din clauze, comanda PACK se referă atât la
fişierul .DBF cât şi la fişierul memo asociat.

3.1.9. Accesul la înregistrările unui fişier

3.1.9.1. Accesul la o singură înregistrare ; Indicatorul de înregistrări

Din punct de vedere fizic, fişierele din baza de date sunt de tip secvenŃial,
înregistrările acestora fiind identificate printr-un număr de secvenŃă. Acest
număr se atribuie înregistrărilor din cadrul unui fişier în ordine crescătoare
începând cu 1. Prin operaŃiile efectuate asupra unor înregistrări, acest număr nu
se modifică (valoarea maximă). În schimb acesta se poate modifica prin
inserarea de noi înregistrări sau ştergerea unor înregistrări din baza de date.

Pentru a permite accesul la o anumită înregistrare, dintr-un fişier al bazei de


date, FoxPro foloseşte o locaŃie de memorie din zona de lucru în care
memorează numărul de secvenŃă al înregistrării curente. Această locaŃie poartă
denumirea de indicator de înregistrări. El poate fi considerat ca o variabilă de
memorie care există cât timp fişierul este deschis.

Modificarea indicatorului de înregistrări în vederea precizării înregistrării


curente se realizează prin meniul sistem sau prin comenzi ale limbajului Visual
FoxPro, folosind doua metode:
1. selectarea poziŃiei unei înregistrări în fişier, metodă prin care numărul
înregistrării curente se stabileşte direct prin evaluarea unor expresii;
2. specificarea unor condiŃii logice, metodă prin care numărul
înregistrării curente se stabileşte ca urmare a unui proces de căutare.

50
3.1.9.2. FuncŃii privind indicatorul de înregistrări

Pentru a afla conŃinutul indicatorului de înregistrări sau dacă acesta specifică


prima sau ultima înregistrare din fişier, se folosesc următoarele funcŃii:
1. FuncŃia RECNO(); returnează numărul de secvenŃă al înregistrării curente
şi are următoarea sintaxă:

RECNO([<expN> | <expC>])

unde cei doi parametrii specifica zona de lucru în care este deschis fişierul la
care se referă funcŃia, alta decât cea curentă.
2. FuncŃia EOF(); determină dacă indicatorul de înregistrări este poziŃionat la
sfârşitul fişierului. Astfel funcŃia returnează valoarea logică .T. dacă indicatorul
de înregistrări a trecut de ultima înregistrare, şi .F. în caz contrar.

3. FuncŃia BOF(); verifică dacă indicatorul de înregistrări se află la începutul


fişierului, adică înaintea primei înregistrări. În acest caz nu există o înregistrare
de tip eticheta cu numărul 0 pentru a semnala trecerea în faŃa primei înregistrări,
de aceea la orice încercare de trecere peste prima înregistrare indicatorul de
înregistrări rămâne pe prima înregistrare, dar funcŃia BOF() va returna valoarea
.T. O a doua încercare de trecere peste prima înregistrare va determina apariŃia
unui mesaj de eroare. Sintaxa generală şi semnificaŃia parametrilor din cadrul
funcŃiei BOF() este aceiaşi ca şi la funcŃia EOF().
3.1.9.3. Modificarea indicatorului de înregistrări prin meniul sistem

Pentru a avea acces la o anumită înregistrare din cadrul unui tabel, se va


selecta opŃiunea Go to Record din meniul Table. Ca efect pe ecran se va afişa
un submeniu care conŃine următoarele opŃiuni: Top, Bottom, Next, Previous,
Record …, Locate … astfel:
3.1.9.4. Modificarea indicatorului de înregistrări prin comenzi ale limbajului
Visual FoxPro

Pentru modificarea indicatorului de înregistrări din cadrul limbajului


Visual FoxPro se folosesc cele două metode, ca şi în cazul meniului sistem şi
anume:
1. Selectarea poziŃiei înregistrării în fişier, folosind în acest scop
comenzile GO TO şi SKIP;
2. Specificarea unor condiŃii logice la nivelul unor comenzi, metodă prin
care indicatorul de înregistrări se modifică ca urmare a unui proces de
căutare. În momentul în care se găseşte prima înregistrare care
51
BAZE DE DATE

satisface condiŃia, aceasta devine înregistrare curentă. În acest caz se


folosesc comenzile LOCATE, FIND şi SEEK.
3.1.9.5. Precizarea înregistrării curente prin specificarea poziŃiei acesteia;
comenzile GOTO şi SKIP

1. Comanda GOTO
ExecuŃia acestei comenzi realizează poziŃionarea indicatorului de înregistrări pe
înregistrarea cu numărul de secvenŃă rezultat din evaluarea expresiei din cadrul
comenzii.
Formatele generale ale comenzii sunt următoarele:

[GO | GOTO] [RECORD] <expN1> [IN <expN2> | <expC>]

[GO | GOTO] TOP | BOTTOM [IN <expN> | <expC>]

Prin execuŃia comenzii GOTO în primul format, are loc poziŃionarea


indicatorului de înregistrări pe înregistrarea cu numărul de secvenŃă rezultat din
evaluarea expresiei specificată prin <expN1>, în fişierul deschis în zona de
lucru curentă sau specificată prin clauza IN. În cazul formatului 2, are loc
poziŃionarea indicatorului de înregistrări la extremele fişierului, adică pe prima
înregistrare (opŃiunea TOP) sau pe ultima înregistrare (opŃiunea BOTTOM).

2. Comanda SKIP
Utilizarea acestei comenzi determină modificarea indicatorului de înregistrări
prin efectuarea unui salt peste anumite înregistrări pornind de la înregistrarea
curentă.
Sintaxa generală a comenzii SKIP este următoarea:
SKIP [<expN1>] [IN <expN2>] | <expC>

unde:
<expN1> indică numărul de înregistrări peste care se face saltul,
; faŃă de înregistrarea curentă. Rezultatul evaluării
expresiei trebuie să reprezinte un număr întreg pozitiv
sau negativ.
clauza specifică zona de lucru în care este deschis fişierul la
IN; care se referă comanda SKIP.

3.1.10. Căutarea înregistrărilor în tabelele bazei de date

52
1. Căutarea secvenŃială; comenzile LOCATE şi CONTINUE
Pentru căutarea într-un fişier secvenŃial a unor înregistrări care satisfac anumite
condiŃii se folosesc comenzile LOCATE şi CONTINUE.
Comanda LOCATE permite căutarea în fişierul curent a înregistrării care
satisface condiŃia specificată în comandă.
2. Căutarea directă; comenzile FIND şi SEEK
Aceste comenzi se folosesc dacă fişierul la care se referă este indexat şi permit
căutarea directă şi poziŃionarea indicatorului de înregistrări pe prima înregistrare
la care valoarea cheii de indexare este egală cu şirul de caractere sau valoarea
expresiei din cele două comenzi.
Sintaxa generală a celor două comenzi este următoarea:

FIND<şir-caractere> SEEK<expresie>

ModalităŃi de folosire a celor două comenzi:


1) comanda SEEK sau FIND acŃionează doar asupra fişierului indexat,
considerând parametrii comenzii ca o valoare a cheii de indexare;
2) cele două comenzi găsesc doar primul articol care satisface criteriul de
căutare;
3) operaŃia de căutare se desfăşoară astfel:
a. în cazul cheii de tip şir de caractere este suficient specificarea doar
a primelor caractere din şir, iar comanda FIND sau SEEK găseşte
înregistrarea a cărei cheie de indexare începe cu şirul specificat;
b. în cazul căutării după valoarea unei chei numerice, se găseşte
înregistrarea a cărei cheie de indexare este egală cu valoarea
specificată în cele două comenzi;
c. la căutarea după conŃinutul unei variabile de memorie, numele
acesteia se specifică în comanda FIND după procedeul
macrosubstituŃiei, adică precedat de caracterul & (ampersand).
Dacă valoarea variabilei începe cu spaŃii se introduce între
ghilimele.

3.1.10.1. FuncŃii utilizate la căutare

1.FuncŃia FOUND(); permite testarea reuşitei sau nereuşitei unei operaŃii de


căutare şi are sintaxa:
FOUND([<expN> | <expC>])

FuncŃia returnează valoarea .T. dacă ultima comandă LOCATE, CONTINUE,


FIND sau SEEK a avut succes şi .F. în caz contrar.

53
BAZE DE DATE

2. FuncŃia SEEK(); caută într-un fişier indexat, prima înregistrare pentru care
valoarea cheii de indexare este egală cu valoarea expresiei din cadrul funcŃiei.
Dacă se găseşte o înregistrare care satisface condiŃia de căutare, funcŃia
returnează valoarea .T. iar indicatorul de înregistrări se poziŃionează pe
înregistrarea respectivă. În caz contrar, funcŃia returnează valoarea .F. iar
indicatorul de înregistrări se poziŃionează după ultima înregistrare. Sintaxa
generală a funcŃiei este:
SEEK (<exp> [, <expN> | <expC>])

3.1.11. Ordonarea înregistrărilor din cadrul unui tabel

Prelucrarea datelor financiar-contabile presupune de cele mai multe ori


ordonarea acestora după anumite criterii. Un fişier al bazei de date este ordonat
după un anumit criteriu dacă fiecare înregistrare a acestuia respectă criteriul dat
în raport cu înregistrările anterioare şi posterioare.
În FoxPro se pot folosi două metode de ordonare a datelor unui fişier al bazei de
date şi anume:
1. ordonarea propriu-zisă sau sortarea realizată prin schimbarea între
ele a înregistrărilor, după un anumit algoritm de sortare în funcŃie de
cheia de sortare definită de utilizator.
În acest caz se obŃine un nou fişier, care conŃine aceleaşi înregistrări
cu cele din fişierul sursă, dar ordonate după un anumit criteriu.
2. indexarea, aceasta însemnând de asemenea crearea unui nou fişier
care conŃine informaŃii cu privire la ordinea înregistrărilor din fişierul
sursă, numit fişier index. Spre deosebire de prima metodă şi în acest
caz se obŃine un nou fişier, dar acesta nu conŃine înregistrările de date
din fişierul sursă ci memorează numai ordinea acestora.

3.1.12. Sortarea fişierelor din baza de date


La sortarea unui fişier al bazei de date, sistemul FoxPro creează un nou
fişier cu un nume diferit de cel al fişierului sursă care conŃine articolele din
fişierul sursă ordonate după un anumit criteriu. Structura sa este aceeaşi cu cea a
fişierului iniŃial.
Această operaŃie se realizează cu ajutorul comenzii SORT cu următoarea
sintaxă:

54
SORT TO <fişier> ON <câmp1> [/A | /D] [/C]
[, <câmp2> [/A | /D] [/C] …]
[ASCENDING | DESCENDING]
[<domeniu>] [FOR <expL1>] [WHILE <expL2>]
[FIELDS <listă-câmpuri> | [FIELDS LIKE <şablon1> |
Comanda, sortează articolele fişierului curent, creând un nou fişier, în care sunt
depuse înregistrările selectate din fişierul curent, în ordinea specificată prin
comandă.

3.1.13. Indexarea înregistrărilor din cadrul unui table; Logica


operaŃiei de indexare
Cea de a doua metodă de ordonare a datelor unui fişier o reprezintă indexarea
acestuia, metodă prin care se creează un fişier index, asociat fişierului de date
activ, în care se memorează cheia de indexare şi ordinea înregistrărilor din
fişierul activ. Ca urmare în fişierul index pentru fiecare înregistrare de date din
fişierul activ se memorează un index format din perechea de informaŃii: cheia de
indexare şi numărul de secvenŃă a înregistrării din fişierul de date. În acest fişier
valorile cheii de indexare apar în ordine crescătoare, iar fişierul de date activ nu
este modificat. În acest fel accesul la o anumită înregistrare se va face prin
intermediul fişierului index asociat, ordinea fizică a înregistrărilor din fişierul
activ nefiind modificată.
3.1.13.1. Tipuri de fişiere index

În Visual FoxPro pot fi create trei tipuri de fişiere index şi anume:


− fişiere index simple sau independente cu extensia .IDX;
− fişiere index compuse structurale cu extensia .CDX;
− fişiere index compuse nestructurale cu extensia .CDX.

1. Fişierele index simple sau independente conŃin câte o singură cheie de


indexare de tip Unique (cheie unică). Ele se numesc independente deoarece
numele lor nu are nici o legătură cu tabela la care sunt asociate. Aceste fişiere se
pot crea în Visual FoxPro numai cu comanda INDEX.
2. Fişiere index compuse structurale; conŃin mai multe chei de indexare,
fiecare cheie având asociată o etichetă sau un tag. Pe baza indecşilor definiŃi în
fereastra Table Designer, Visual FoxPro creează întotdeauna un fişier index
compus structural cu etichetele definite în caseta Table Designer.Dacă dorim să
creăm un fişier index simplu sau un fişier compus nestructural va trebui să
folosim comenzi ale limbajului Visual FoxPro (comanda INDEX).
55
BAZE DE DATE

3. Fişier index compus nestructural; conŃin de asemenea mai multe chei de


indexare, fiecare cheie având asociată o etichetă sau un tag. Spre deosebire de
fişierele index structurale, aceste fişiere au nume diferit de cel al tabelei la care
sunt asociate. Ca urmare ele trebuie deschise prin comenzi explicite.

3.1.13.2. Crearea fişierelor index

Indexarea reprezintă modalitatea cea mai bună de a ordona datele unui tabel. În
Visual FoxPro se pot crea următoarele categorii de indecşi:
1. Normali (Regular); indică faptul că sistemul Visual FoxPro memorează în
fişierul index valoarea aferentă expresiei de indexare (cheia de indexare) pentru
fiecare înregistrare din tabela de date, chiar dacă în tabelă există mai multe
înregistrări cu aceeaşi valoare a cheii de indexare.
2. Unici (Unique); permit memorarea în fişierul index a unei valori unice a
cheii de indexare. Astfel, dacă mai multe înregistrări din tabela sursă au aceiaşi
valoare a cheii de indexare se memorează numai cheia de indexare pentru prima
înregistrare de acest gen. Celelalte înregistrări cu aceiaşi valoare a cheii de
indexare nu vor putea fi accesate prin intermediul fişierului index, ele fiind
ascunse utilizatorului.
Acest tip de index asigură compatibilitatea cu versiunea FoxPro 2.6 sub
Windows.
Candidat (Candidate); este asemănător cu indexul unic, dar nu acceptă nici în
tabelul sursă înregistrări cu aceeaşi valoare a cheii de indexare.
În cazul indecşilor unici, puteau exista în tabela sursă şi înregistrări cu aceeaşi
valoare a cheii de indexare dar se prelua în fişierul index numai valoarea cheii
de indexare aferentă primei înregistrări din această categorie, celelalte
înregistrări nefiind asociate fişierului index.
Primari (Primary); conŃin pentru fiecare înregistrare din tabelul sursă o
valoare unică a cheii de indexare. Acest tip de index este deci la fel ca si cel
candidat şi se utilizează în cadrul tabelei părinte pentru a asigura integritatea
referenŃială într-o relaŃie permanentă. Pentru o tabelă se acceptă numai un
singur index primar, iar tabela respectivă trebuie să fie inclusă în baza de date.

56
3.1.13.3. Crearea indecşilor prin meniul sistem

Un index aferent unei tabele apare în fereastra table Designer, în pagina


Indexes, sub forma unei înregistrări care conŃine: ordinea de indexare
(crescătoare sau descrescătoare), numele etichetei din fişierul compus care se
creează pe baza indexului, tipul indexului, cheia de indexare şi un filtru
pentru înregistrările care vor fi asociate indexului creat.
Pentru fiecare index aferent unui tabel vom crea câte o înregistrare de acest gen,
reprezentând un rând în pagina Indexes. De fiecare dată când construim un
index se creează de fapt un fişier care păstrează pointeri la înregistrările din
fişierul .dbf. Indecşii aferenŃi unei tabele pot fi creaŃi fie în momentul definirii
structurii unui tabel, sau ulterior.
a. Crearea fişierelor index prin comenzi ale limbajului Visual FoxPro
Pentru crearea unui fişier index, prin comenzi ale limbajului Visual FoxPro se
foloşte comanda INDEX.
1. Comanda INDEX
Prin execuŃia acestei comenzi se creează un fişier index simplu sau un fişier
index compus structural sau nestructural. Sintaxa acestei comenzi este
următoarea:

REZUMAT O bază de date în Visual FoxPro are ataşat un fişier special cu extensia
.DBC (DataBase Container) în care sunt memorate printre altele
structura tabelelor componente, relaŃiile permanente dintre tabelele
bazei de date, caracteristici suplimentare ale tabelelor din baza de date,
caracteristici ale bazei de date în ansamblul său şi proceduri ce
urmează a fi executate la apariŃia unor evenimente.
Construirea unei baze de date în Visual FoxPro se realizează în
următoarele etape:
• crearea bazei de date, în care se vor memora informaŃii privind
tabelele şi baza de date în ansamblul său;
• încorporarea în noua bază de date a tabelelor simple anterior
create şi construirea noilor tabele ce vor fi încorporate direct în
baza de date;
• specificarea pentru tabelele simple incluse în baze de date a unor
caracteristici ce nu se puteau declara în momentul construirii lor,
ca tabele izolate;
• stabilirea legăturilor permanente între tabelele bazei de date;
• precizarea unor caracteristici ale noii baze de date;
• includerea în baza de date a unor vederi, conexiuni cu date externe
etc.
57
BAZE DE DATE

Crearea fişierului bazei de date de poate realiza în unul din


următoarele moduri:
- prin folosirea constructorului de baze de date (DataBase Designer)
apelat din meniul sistem;
- prin folosirea ferestrei PROJECT MANAGER;
- prin folosirea comenzii CREATE.
Adăugarea sau eliminarea unei baze de date la/din proiect
Prin crearea unei baze de date cu ajutorul comenzii CREATE DATABASE,
aceasta nu devine automat parte componentă a unui proiect, chiar dacă pe ecran
este deschisă fereastra Project Manager.
Având în vedere facilităŃile oferite de instrumentul Project
Manager privind organizarea, vizualizarea şi manipularea obiectelor
sale prin intermediul interfeŃei (fereastra Project Manager) se
recomandă ca bazele de date create independent să fie adăugate în
cadrul unui proiect existent sau nou creat.
In acest scop, după lansarea Gestionarului de proiecte şi afişarea
pe ecran a ferestrei Project Manager se selectează secŃiunea DataBase
şi apoi se execută un clic pe butonul Add… . Ca urmare se va afişa
pe ecran fereastra Open, din care se selectează baza de date ce
urmează a fi inclusă în proiect.
O bază de date poate fi retrasă dintr-unproiect şi inclusă într-un
alt proiect sau ştearsă fizic de pe disc, dacă nu mai este necesară în
cadrul sistemului. Pentru a elimina o bază de date dintr-un proiect, din
fereastra Project Manager se activează butonul Remove iar din caseta
care se afişează după activarea acestui buton, se alege opŃiunea
Remove. Dacă dorim ca baza de date respectivă să fie ştearsă fizic de
pe hard-disc se va alege opŃiunea Delete.
Deschiderea bazelor de date
Pentru deschiderea uneia sau mai multor baze de date, din
fereastra Project Manager se selectează baza de date ce urmează a fi
deschisă şi se execută un clic pe butonul Open sau Modify. OperaŃia
se repetă apoi pentru fiecare bază de date ce urmează a fi deschisă.
De asemenea, pentru deschiderea unei baze de date din fereastra
Project Manager, sau care nu este inclusă într-un proiect se poate
folosi comanda OPEN
Inchiderea unei baze de date
Pentru închiderea unei baze de date, având pe ecran afişată
fereastra Project Manager, se va selecta mai întâi baza de date ce
urmează a fi închisă şi apoi se activează butonul Close. OperaŃia se
repetă pentru fiecare bază de date ce urmează a fi închisă. De
asemenea pentru închiderea bazei de date curente şi a tabelelor

58
aferente se poate folosi comanda CLOSE DATABASE.
TEME DE 1. Se vor efectua lucrări practice de creare a unei baze de date folosind
CONTROL instrumentele de lucru prezentate anterior;
2. Se vor efectua operaŃii de gestiune a unei baze de date ;
3. Se vor crea mai multe tabele care se includ în baza de date anterior
creată ;
4. Se vor defini relaŃii permanente între tabelele create şi se
vizualizează schema bazei de date ;
5. Se încarcă tabelele create cu date şi se vizualizează conŃinutul
acestora ;
6. Se actualizează tabelele create prin modificare şi ştergere de
înregistrări ;
7. - se indexează tabelele create
BIBLIOGRA 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St., Tomai N.
FIE Baze de date şi programarea calculatoarelor utilizând limbajul Visual
FoxPro, Ed. Risoprint, Cluj-Napoca, 2003, pg. 91-110.
2. Marian Cristescu, Baze de date utilizate în mediul economic,
Editura ”ALMA MATER”, Sibiu, 2007, pg. 128-142; 176-180; 202-
218; 229-237
3. Gabriel Dima ,Mihai Dima, Bazele Visual Foxpro 5.0, Editura
Teora, Bucuresti,1999,pag . 51-155.
4. Marin Fotache, Ioan Brava, Cătălin Strâmbei, Liviu CreŃu, Visual FoxPro;
Ghidul dezvoltării aplicaŃiilor profesionale, Editura Polirom Iaşi, 2002, pag. 36-
63.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean, Dezvoltarea
aplicaŃiilor cu baze de date în Visual FoxPro, Editura All, Bucureşti,
2001, pag. 37-87.
6. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe, Editura
Risoprint Cluj, 2003, pag. 7-13, 41-54.
6. Paul Petruş, Visual FoxPro 5.0, Editura Promedia, Cluj, 1999, pag.
159-205.

59
BAZE DE DATE

4. CREAREA ŞI GESTIUNEA BAZELOR DE DATE ÎN VISUAL


FOXPRO

CONCEPTE 7. Crearea bazei de date


DE BAZA 8. Deschiderea şi închiderea bazelor de date
9. Adăugarea tabelelor în baza de date
10. Eliminarea unei tabele din baza de date
11. Relationarea tabelelor din baza de date
OBIECTIVE 3. Insuşirea modului de creare şi gestionare a bazei de
date
4. Studiul aspectelor specifice tabelelor din bazele de
date
5. Studiul relaŃionărilor dintre tabele
RECOMANDĂRI 3. Recomandăm parcurgerea etapelor de creare a unei
PRIVIND baze de date folosind: instrumentul DATABASE
STUDIUL DESIGNER; comanda CREATE DATA BASE.
4. Se vor studia în continuare operaŃiile de gestiune cu
baze de date.
5. Se vor studia relaŃiile dintre tabele
REZULTATE 1. înŃelegerea şi însuşirea deprinderilor practice de creare
ASTEPTATE şi gestionare a bazelor de date în Visual FoxPro;
2. însuşirea gestiunii tabelelor şi a relaŃiilor dintre ele în
cadrul unei baze de date.

60
4.1. CREAREA ŞI GESTIUNEA BAZELOR DE DATE ÎN VISUAL
FOXPRO

OBIECTIVE 1. crearea bazelor de date


2. gestiunea bazelor de date; deschidere, închidere,
adăugare sau eliminare de tabele din baza de date;
3. relaŃionarea tabelelor din baza de date;
CUVINTE - constructorul bazei de date;
CHEIE - relaŃii persistente, relaŃii temporare;
- integritate referenŃială;

4.1.1. Caracteristici generale

O bază de date în Visual FoxPro are ataşat un fişier special cu extensia .DBC
(DataBase Container) în care sunt memorate printre altele structura tabelelor
componente, relaŃiile permanente dintre tabelele bazei de date, caracteristici
suplimentare ale tabelelor din baza de date, caracteristici ale bazei de date în
ansamblul său şi proceduri ce urmează a fi executate la apariŃia unor
evenimente. Se clarifică în acelaşi timp termenii de "bază de date" şi "tabel"
folosiŃi în trecut unul în locul celuilalt. Astfel termenul de "bază de date" era
utilizat pentru a desemna unul sau mai multe tabele. Visual FoxPro încearcă să
corecteze utilizarea improprie a celor doi termeni, prin introducerea unui obiect
distinct numit container de baze de date.
Construirea unei baze de date în Visual FoxPro se realizează în următoarele
etape:
1. crearea bazei de date, în care se vor memora informaŃii privind
tabelele şi baza de date în ansamblul său;
2. încorporarea în noua bază de date a tabelelor simple anterior create
şi construirea noilor tabele ce vor fi încorporate direct în baza de
date;
3. specificarea pentru tabelele simple incluse în baze de date a unor
caracteristici ce nu se puteau declara în momentul construirii lor, ca
tabele izolate;
4. stabilirea legăturilor permanente între tabelele bazei de date;
5. precizarea unor caracteristici ale noii baze de date;
6. includerea în baza de date a unor vederi, conexiuni cu date externe
etc.

4.1.2. Crearea bazei de date

Crearea fişierului bazei de date de poate realiza în unul din următoarele moduri:

61
BAZE DE DATE

a) prin folosirea constructorului de baze de date (DataBase Designer)


apelat din meniul sistem;
b) prin folosirea ferestrei PROJECT MANAGER;
c) prin folosirea comenzii CREATE.

62
a) Crearea bazei de date prin folosirea constructorului de baze de
date

In acest caz din meniul FILE se selectează opŃiunea NEW având ca efect
afişarea pe ecran a ferestrei cu acelaşi nume (NEW). Afişarea ferestrei New se
poate realiza direct prin efectuarea unui clic pe prima pictogramă din bara de
instrumente standard.
Din fereastra New se va selecta butonul Database şi apoi opŃiunea New File.
Ca urmare a selectării acestei opŃiuni, pe ecran va fi afişată fereastra CREATE
în care se cere introducerea numelui pentru baza de date şi directorul în care se
memorează noua bază de date. După completarea acestor informaŃii, prin
acŃionarea butonului Save pe ecran apare fereastra constructorului bazei de
date. In acelaşi timp la meniul sistem se adaugă opŃiunea Database, care
conŃine diferite opŃiuni pentru operaŃii cu baze de date.

Deocamdată baza de date nou creată este vidă şi este deschisă în fereastra
Database Designer.

In fereastra Database Designer vom popula noua bază de date cu tabele folosind
opŃiuni din meniul obŃinut cu butonul drept al mouse-ului, opŃiuni din bara cu
instrumente aferentă ferestrei Database Designer sau opŃiuni din meniul
Database. Tabelele introduse pot fi tabele existente (libere) sau create în
momentul respectiv.

b) Crearea bazei de date prin folosirea ferestrei PROJECT


MANAGER

Pentru a deschide fereastra PROJECT MANAGER există două posibilităŃi:


1. dacă există un proiect anterior creat se selectează numele proiectului
din submeniul FILE, fapt care determină afişarea pe ecran a ferestrei
PROJECT MANAGER aferentă proiectului respectiv. In acest caz
noua bază de date va fi creată în cadrul proiectului respectiv
2. dacă nu există încă nici un proiect definit se selectează opŃiunea
PROJECT din fereastra New. Ca urmare pe ecran apare fereastra
CREATE prin care se solicită numele noului proiect şi directorul în
care se memorează. După introducerea acestor informaŃii prin
acŃionarea butonului SAVE se salvează noul proiect şi se deschide pe
ecran fereastra PROJECT MANAGER aferentă noului proiect.
In ambele cazuri, din fereastra PROJECT MANAGER se va selecta tabul
(pagina) Data şi apoi câmpul Databases. In continuare se activează butonul
New… tot din fereastra Project Manager având ca efect apariŃia pe ecran a
ferestrei CREATE pentru noua bază de date. După completarea informaŃiilor
solicitate prin acŃionarea butonului SAVE pe ecran se va afişa fereastra
63
BAZE DE DATE

DataBase Designer, în care se pot introduce tabelele care vor compune noua
bază de date (imediat sau ulterior).

c) Crearea bazei de date prin comenzi

Pentru crearea bazei de date prin comenzi se foloseşte comanda CREATE


cu sintaxa:

CREATE DATABASE [ <nume-baza-dedate>|? ]

La execuŃia acestei comenzi are loc crearea unei baze de date şi deschiderea
acesteia în zona curentă.

4.1.3. Adăugarea sau eliminarea unei baze de date la/din proiect

Prin crearea unei baze de date cu ajutorul comenzii CREATE DATABASE,


aceasta nu devine automat parte componentă a unui proiect, chiar dacă pe ecran
este deschisă fereastra Project Manager. Având în vedere facilităŃile oferite de
instrumentul Project Manager privind organizarea, vizualizarea şi manipularea
obiectelor sale prin intermediul interfeŃei (fereastra Project Manager) se
recomandă ca bazele de date create independent să fie adăugate în cadrul unui
proiect existent sau nou creat. In acest scop, după lansarea Gestionarului de
proiecte şi afişarea pe ecran a ferestrei Project Manager se selectează secŃiunea
DataBase şi apoi se execută un clic pe butonul Add…. Ca urmare se va afişa pe
ecran fereastra Open, din care se selectează baza de date ce urmează a fi inclusă
în proiect.

4.1.4. Deschiderea şi închiderea bazelor de date

Bazele de date din cadrul unui proiect, pot fi deschise simultan pe ecran
folosind butonul Open sau prin referinŃe la tabelul unei baze de date închisă,
prin folosirea comenzii USE cu simbolul "!". Prin deschiderea unei noi baze se
date, nu are loc închiderea bazei de date anterior deschise. Acestea rămân în
continuare deschise, iar ultima bază de date deschisă devine baza de date
curentă, numele ei fiind afişat în caseta de pe bara de instrumente standard a
ferestrei Visual FoxPro.

Pentru deschiderea uneia sau mai multor baze de date, din fereastra Project
Manager se selectează baza de date ce urmează a fi deschisă şi se execută un
clic pe butonul Open sau Modify. OperaŃia se repetă apoi pentru fiecare bază de
date ce urmează a fi deschisă.

64
Dacă baza de date nu este inclusă în cadrul unui proiect pentru deschiderea
acesteia în mod interactiv se poate folosi fereastra Data Session afişată pe ecran
ca urmare a selectării opŃiunii cu acelaşi nume din meniul Window. De
asemenea, pentru deschiderea unei baze de date din fereastra Project Manager,
sau care nu este inclusă într-un proiect se poate folosi comanda OPEN în
formatul:

OPEN DATABASE [<nume-baza-date>|?] [EXCLUSIVE][SHARED]


[NOUPDATE] [VALIDATE]

65
BAZE DE DATE

4.1.4.1. Închiderea unei baze de date

Pentru închiderea unei baze de date, având pe ecran afişată fereastra Project
Manager, se va selecta mai întâi baza de date ce urmează a fi închisă şi apoi se
activează butonul Close. OperaŃia se repetă pentru fiecare bază de date ce
urmează a fi închisă. De asemenea pentru închiderea bazei de date curente şi a
tabelelor aferente se poate folosi comanda CLOSE DATABASE.

4.1.4.2. Adăugarea tabelelor în baza de date

Prin adăugarea unei tabele în baza de date se creează o legătură între fişierul
tabelei şi containerul bazei de date. InformaŃia de legătură despre tabelă stocată
în fişierul bazei de date este o legătură înainte (→), iar informaŃia de legătură
despre baza de date în care se include o tabelă, stocată în fişierul tabelei, este o
legătură înapoi (←)

Orice tabelă din Visual FoxPro poate exista în una din următoarele stări:
- tabelă liberă;
- tabelă asociată;

Tabelele asociate unei baze de date au o serie de proprietăŃi specifice, care nu se


întâlnesc în cadrul tabelelor libere sau externe, cum ar fi: relaŃii persistente între
tabele, reguli de validare la nivel de câmp şi înregistrare, etc. Ele pot fi asociate
unei baze de date prin crearea lor direct în cadrul bazei de date existente sau
prin adăugarea acestora după ce au fost create ca şi tabele libere.

4.1.4.3. Eliminarea unei tabele din baza de date

Dacă dorim ca o tabelă dintr-o bază de date să fie folosită într-o altă bază de
date, sau nu mai avem nevoie de tabela respectivă în baza de date din care face
parte, aceasta poate fi eliminată din aceea bază de date. Prin eliminarea unei
tabele din baza de date, aceasta revine la statutul de tabelă liberă. Dacă dorim
putem opta pentru ştergerea fizică a tabelei de pe hard-disc. Pentru eliminarea
unei tabele din baza de date pot folosi următoarele procedee:
1. In fereastra Project Manager se selectează tabul Data şi apoi se
expandează secŃiunile Database şi Tables prin efectuarea unui clic pe
semnul + din faŃa secŃiunilor respective. Din lista cu tabele incluse în
bază de date se va selecta tabela ce urmează a fi eliminată şi apoi
butonul Remove sau din submeniu Database se selectează opŃiunea
Remove.Ca efect pe ecran apare o fereastră de mesaj care conŃine
butoanele de comandă: Remove, Delete, Cancel. Prin acŃionarea
primului buton, tabela selectată anterior este eliminată din baza de
date. Eliminarea tabelei nu determină ştergerea fizică a fişierului

66
asociat tabelei. Dacă dorim să ştergem fizic tabela de pe disc vom
selecta butonul Delete
2. Dacă baza de date este deschisă în fereastra Database Designer se
selectează din cadrul ferestrei tabela ce urmează a fi eliminată şi apoi
opŃiunea Remove din susbmeniul Database sau butonul Remove Table
de pe bara de instrumente Database Designer sau opŃiunea Delete din
meniul shortcut al tabelei selectate.
3. Prin folosirea comenzii REMOVE TABLE:

4.1.5. RelaŃionarea tabelelor din baza de date

In Visual FoxPro relaŃiile pe care le creăm între tabele cu ajutorul


Constructorului bazei de date (Database Designer) se numesc relaŃii persistente.
In afara acestora se pot defini şi relaŃii temporare sau dinamice prin comenzi
introduse în programele de prelucrare. Ca urmare relaŃiile temporare sunt
disponibile numai în momentul rulării programului în care au fost definite după
care ele nu mai există.
Tabelele între care se creează o relaŃie se numesc: tabelă principală sau părinte
şi respectiv tabelă secundară sau fiu.
Intre cele două tabele se pot defini următoarele tipuri de relaŃii:
1. relaŃie una-la-una (1-1);
2. relaŃi una-la-mai-multe (1-n);
3. relaŃie mai-multe la-una (n-1);
4. relaŃie mai-multe-la-mai-multe (m-n).

In Visual FoxPro sunt implementate primele trei tipuri de relaŃii. Deoarece


modelul relaŃional nu poate accepta direct o relaŃie ”Mai multe la mai multe”
acest tip de relaŃie se poate înlocui cu 2 relaŃii : ”mai multe la una” şi ”una la
mai multe” prin intermediul unei tabele suplimentare numită şi tabelă de
joncŃiune. Pentru a realiza unul din tipurile de relaŃii amintite, între două tabele,
acestea trebuie să fie indexate după conŃinutul aceluiaşi câmp.

Câmpul din tabela părinte după care se face indexarea acesteia se numeşte cheie
primară (primary key), iar cel din tabela fiu, după care se face indexarea, se
numeşte cheie externă (foreign key). Cheia primară se setează la indexarea
tabelei ca şi index primar sau candidat (primary index or candidate index), iar
cheia externă se poate seta ca şi index primar, candidat, unic sau normal.

4.1.5.1. RelaŃii permanente

După stabilirea câmpurilor cheie din cele două tabele şi a indecşilor aferenŃi se
poate defini o relaŃie permanentă între cele două tabele. In acest scop se va afişa
pe ecran fereastra constructorului de baze de date (Database Designer) în care
67
BAZE DE DATE

apar tabelele ce compun baza de date. In tabela părinte se selectează indexul


primar şi se face drag-drop la indexul din tabela fiu, având ca efect crearea
relaŃiei între cele două tabele. Faptul că relaŃia între cele două tabele a fost
creată se indică prin afişarea unei linii care uneşte cei doi indecşi. Începutul
liniei de la tabela părinte conŃine o cruce, iar sfârşitul liniei spre tabele fiu,
conŃine o bifurcaŃie, indicând o relaŃie de tip 1-n.

Fiecare relaŃie permanentă reprezintă un obiect Visual, sub forma unei linii cu
două simboluri (cruce şi bifurcaŃie). Ca urmare, ca orice obiect, poate fi
modificat cu ajutorul unor comenzi specifice.

Pentru ştergerea unei relaŃii incorect definite sau care nu mai este necesară, se
execută clic pe linie şi apoi se apasă tasta DELETE, sau din meniul shortcut al
liniei se selectează opŃiunea Remove.

4.1.5.2. Asigurarea integrităŃii datelor din tabelele legate între ele


prin relaŃii permanente

Printre mecanismele care asigură integritatea bazei de date se numără şi cele


privind integritatea entităŃilor şi integritatea referenŃială.

Integritatea entităŃilor este implementată prin specificarea în cadrul unei tabele,


a faptului că nu pot accepta valori nule câmpurile care reprezintă chei primare.

Integritatea referenŃială (referenŃial integrity-RI) defineşte un ansamblu de


reguli, care permit menŃionarea integrităŃii datelor din tabelele legate între ele, la
operaŃiile de modificare, adăugare şi ştergerea datelor din tabelele respective,
astfel încât să nu existe înregistrări neparticipante la relaŃie. Implementarea
acestor reguli între tabele se realizează prin intermediul unor restricŃii numite
restricŃii pentru integritate referenŃială (RI – constraints).

Prin definirea regulilor de integritate referenŃială, mediul Visual FoxPro va


interzice:
- adăugarea de înregistrări în tabela fiu atunci când în tabela părinte
nu există nici o înregistrare cu aceeaşi valoare a cheii de indexare;
- modificarea valorii cheii de indexare în tabela principală care să
ducă la apariŃia de înregistrări orfane în tabela fiu;
- ştergerea de înregistrări în tabela părinte, dacă există înregistrări
asociate în tabela fiu.
Specificarea restricŃiilor de integritate referenŃială şi generarea automată a
procedurilor aferente se realizează prin intermediul Generatorului de Integritate
ReferenŃială (Referential Integrity Builder).

68
4.1.5.3. RelaŃii temporare

Alături de relaŃiile permanente se pot defini în Visual FoxPro şi relaŃii sau


legături temporare, care sunt active atâta timp cât durează o sesiune de lucru sau
un program. Ele se pot crea prin meniul sistem sau prin program. Ca şi în cazul
relaŃiilor permanente, cele două tabele, principală şi secundară, trebuie să fie
indexate pe baza unui câmp comun (cheia primară în tabela principală, cheia
externă în cea secundară).

69
BAZE DE DATE

REZUMAT O bază de date în Visual FoxPro are ataşat un fişier special cu extensia
.DBC (DataBase Container) în care sunt memorate printre altele
structura tabelelor componente, relaŃiile permanente dintre tabelele
bazei de date, caracteristici suplimentare ale tabelelor din baza de date,
caracteristici ale bazei de date în ansamblul său şi proceduri ce urmează
a fi executate la apariŃia unor evenimente.
Construirea unei baze de date în Visual FoxPro se realizează în
următoarele etape:
• crearea bazei de date, în care se vor memora informaŃii privind
tabelele şi baza de date în ansamblul său;
• încorporarea în noua bază de date a tabelelor simple anterior create
şi construirea noilor tabele ce vor fi încorporate direct în baza de
date;
• specificarea pentru tabelele simple incluse în baze de date a unor
caracteristici ce nu se puteau declara în momentul construirii lor, ca
tabele izolate;
• stabilirea legăturilor permanente între tabelele bazei de date;
• precizarea unor caracteristici ale noii baze de date;
• includerea în baza de date a unor vederi, conexiuni cu date externe
etc.
Crearea fişierului bazei de date de poate realiza în unul din următoarele
moduri:
- prin folosirea constructorului de baze de date (DataBase Designer)
apelat din meniul sistem;
- prin folosirea ferestrei PROJECT MANAGER;
- prin folosirea comenzii CREATE.
Adăugarea sau eliminarea unei baze de date la/din proiect
Prin crearea unei baze de date cu ajutorul comenzii CREATE
DATABASE, aceasta nu devine automat parte componentă a unui
proiect, chiar dacă pe ecran este deschisă fereastra Project Manager.
Având în vedere facilităŃile oferite de instrumentul Project
Manager privind organizarea, vizualizarea şi manipularea obiectelor
sale prin intermediul interfeŃei (fereastra Project Manager) se
recomandă ca bazele de date create independent să fie adăugate în
cadrul unui proiect existent sau nou creat.
In acest scop, după lansarea Gestionarului de proiecte şi afişarea
pe ecran a ferestrei Project Manager se selectează secŃiunea DataBase
şi apoi se execută un clic pe butonul Add… . Ca urmare se va afişa pe
ecran fereastra Open, din care se selectează baza de date ce urmează a fi

70
inclusă în proiect.
O bază de date poate fi retrasă dintr-unproiect şi inclusă într-un
alt proiect sau ştearsă fizic de pe disc, dacă nu mai este necesară în
cadrul sistemului. Pentru a elimina o bază de date dintr-un proiect, din
fereastra Project Manager se activează butonul Remove iar din caseta
care se afişează după activarea acestui buton, se alege opŃiunea
Remove. Dacă dorim ca baza de date respectivă să fie ştearsă fizic de pe
hard-disc se va alege opŃiunea Delete.
Deschiderea bazelor de date
Pentru deschiderea uneia sau mai multor baze de date, din
fereastra Project Manager se selectează baza de date ce urmează a fi
deschisă şi se execută un clic pe butonul Open sau Modify. OperaŃia se
repetă apoi pentru fiecare bază de date ce urmează a fi deschisă.
De asemenea, pentru deschiderea unei baze de date din fereastra Project
Manager, sau care nu este inclusă într-un proiect se poate folosi
comanda OPEN
Inchiderea unei baze de date
Pentru închiderea unei baze de date, având pe ecran afişată
fereastra Project Manager, se va selecta mai întâi baza de date ce
urmează a fi închisă şi apoi se activează butonul Close. OperaŃia se
repetă pentru fiecare bază de date ce urmează a fi închisă. De asemenea
pentru închiderea bazei de date curente şi a tabelelor aferente se poate
folosi comanda CLOSE DATABASE.
RelaŃionarea tabelelor din baza de date
In Visual FoxPro relaŃiile pe care le creăm între tabele cu ajutorul
Constructorului bazei de date (Database Designer) se numesc relaŃii
persistente. In afara acestora se pot defini şi relaŃii temporare sau
dinamice prin comenzi introduse în programele de prelucrare. Ca
urmare relaŃiile temporare sunt disponibile numai în momentul rulării
programului în care au fost definite după care ele nu mai există.
Tabelele între care se creează o relaŃie se numesc: tabelă principală sau
părinte şi respectiv tabelă secundară sau fiu.
Intre cele două tabele se pot defini următoarele tipuri de relaŃii:

- relaŃie una-la-una; prin care unei înregistrări din tabela părinte îi


corespunde o singură înregistrare în tabela fiu (copil);
- relaŃii una-la-mai-multe; prin care unei înregistrări din tabela
părinte îi corespund mai multe înregistrări în tabela copil;
- relaŃie mai-multe la-una; prin care pentru o înregistrare în tabela
copil putem avea mai multe înregistrări în tabela părinte;
- relaŃie mai-multe-la-mai-multe; prin care unei înregistrări din tabela
părinte îi pot corespunde mai multe înregistrări în tabela copil şi
71
BAZE DE DATE

invers adică unei înregistrări din tabela copil îi pot corespunde mai
multe înregistrări în tabela părinte.
Asigurarea integrităŃii datelor din tabelele legate între ele prin
relaŃii permanente
Printre mecanismele care asigură integritatea bazei de date se
numără şi cele privind integritatea entităŃilor şi integritatea referenŃială.
Integritatea entităŃilor este implementată prin specificarea în
cadrul unei tabele, a faptului că nu pot accepta valori nule câmpurile
care reprezintă chei primare.
Integritatea referenŃială (referenŃial integrity-RI) defineşte un
ansamblu de reguli, care permit menŃionarea integrităŃii datelor din
tabelele legate între ele, la operaŃiile de modificare, adăugare şi
ştergerea datelor din tabelele respective, astfel încât să nu existe
înregistrări neparticipante la relaŃie. Implementarea acestor reguli între
tabele se realizează prin intermediul unor restricŃii numite restricŃii
pentru integritate referenŃială (RI – constraints).
Specificarea restricŃiilor de integritate referenŃială şi generarea
automată a procedurilor aferente se realizează prin intermediul
Generatorului de Integritate ReferenŃială (Referential Integrity
Builder). Aceasta permite, de asemenea, precizarea tabelelor părinte şi
fiu din cadrul unei relaŃii şi a evenimentelor din sistem care impun
mediului Visual FoxPro să verifice regulile definite.

TEME DE 8. Se vor efectua lucrări practice de creare a unei baze de date folosind
CONTROL instrumentele de lucru prezentate anterior;
9. Se vor efectua operaŃii de gestiune a unei baze de date ;
10. Se vor crea mai multe tabele care se includ în baza de date anterior
creată ;
11. Se vor defini relaŃii permanente între tabelele create şi se vizualizează
schema bazei de date ;
BIBLIOGR 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St., Tomai N. Baze
AFIE de date şi programarea calculatoarelor utilizând limbajul Visual FoxPro,
Ed. Risoprint, Cluj-Napoca, 2003, pg. 91-110.
2. Marian Cristescu, Baze de date utilizate în mediul economic, Editura
”ALMA MATER”, Sibiu, 2007, pg. 222-230
3.Gabriel Dima ,Mihai Dima, Bazele Visual Foxpro 5.0, Editura Teora
,Bucuresti,1999,pag . 51-155.
4.Marin Fotache, Ioan Brava, Cătălin Strâmbei, Liviu CreŃu, Visual
FoxPro; Ghidul dezvoltării aplicaŃiilor profesionale, Editura Polirom
Iaşi, 2002, pag. 36-63.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean, Dezvoltarea
72
aplicaŃiilor cu baze de date în Visual FoxPro, Editura All, Bucureşti,
2001, pag. 37-87.
6. Paul Petruş, Visual FoxPro 5.0, Editura Promedia, Cluj, 1999, pag.
159-205.
7. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe, Editura
Risoprint Cluj, 2003, pag. 7-13, 41-54.

73
BAZE DE DATE

5. GESTIUNEA PROIECTELOR ÎN VISUAL FOXPRO

CONCEPTE 3. Rolul proiectelor în dezvoltarea aplicaŃiilor;


DE BAZA 4. Project Manager, componenta Visual FoxPro pentru
gestiunea proiectelor.
OBIECTIVE 1. Familiarizarea cu noŃiunea de proiect şi rolul acestuia
în dezvoltarea aplicaŃiilor cu particularitǎză în Visual
FoxPro.
2. Stabilirea modalităŃilor de gestiune a proiectelor;
3. Personalizarea managerului ;
4. Deprinderea utilizării Wizard-ului.
RECOMANDĂRI 1. Studierea atentǎ a bibliografiei;
PRIVIND 2. Studiu individual în laborator şi exersarea opŃiunilor
STUDIUL şi componentelor mediului;
3. Elaborarea unor schiŃe referitoare la înlănŃuirea logicǎ
a operaŃiilor.
REZULTATE Crearea unor deprinderi de utilizare a managerului de
ASTEPTATE proiect.

74
5.1. GESTIUNEA PROIECTELOR

OBIECTIVE 1. Familiarizarea cu noŃiunea de proiect şi rolul acestuia în


dezvoltarea aplicaŃiilor ;
2. ParticularităŃile proiectelor în Visual FoxPro.
3. Stabilirea modalităŃilor de creare, respective de modificare
a proiectelor;
4. Descrierea paginilor etichetate din Proiect Manager ;
5. Gestiunea unor tipuri de fişiere prin Proiect Manager ;
6. Familiarizarea cu meniul Proiect ;
7. Personalizarea managerului ;
8. Utilizarea Wizard-ului
NOłIUNI Proiect şi componentele sale în Visual FoxPro ;
CHEIE ModalităŃi de creare/modificare a proiectelor;
Tipuri de pagini etichetate în Project Manager;
OpŃiunile meniului Project;
Gestiunea fişierelor cu ajutorul Prtoject Manager;
Utilizarea Wizard-ului pentru managementul proiectelor şi
opŃiunile acestuia.

5.1.1. Caracteristici generale

Elaborarea sistemelor informatice este o activitate laborioasă şi sistematică. De


aceea orice astfel de activitate debutează cu elaborarea unui proiect. Proiectul
înseamnă un ansamblu de date, programe, formulare şi rapoarte de diferite
tipuri, organizate într-o anumită structură.

Visual FoxPro pune la dispoziŃia utilizatorilor o modalitate sistematică de


organizare şi gestiune a elementelor necesare unui proiect, cu ajutorul
utilitarului Project Manager. Project Manager este o îmbunătăŃire a
generatorului de proiecte din FoxPro 2.5, respectiv 2.6, uşor de utilizat, având,
în acelaşi timp, o interfaŃă prietenoasă, care permite utilizatorilor finali să-şi
gestioneze eficient proiectul. El funcŃionează în principiu în următorii paşi:
1. Folosind interfeŃe grafice, utilizatorul introduce şi gestionează
elementele componente ale proiectului. Sistemul realizează pe baza
acestor elemente un tabel cu extensia .pjx, care este de fapt un
container în care se memorează datele referitoare la componentele din
proiect.

75
BAZE DE DATE

2. În a doua fază, dacă utilizatorul doreşte, poate transforma proiectul fie


într-o aplicaŃie sub formă de cod intermediar (cu extensia .app), fie
într-o aplicaŃie executabilă (cu extensia .exe).

In cadrul ferestrei aferente acestui utilitar, datele sunt grupate pe categorii


funcŃionale: baze de date, tabele, rapoarte, forme, etichete, pentru a avea o
evidenŃă mai clară a tuturor elementelor proiectului şi, în acelaşi timp, o vedere
de ansamblu asupra acestora.

5.1.2. Utilizarea constructorului de proiecte (Project Manager)

5.1.2.1. Crearea unui proiect nou

Pentru a crea un proiect nou, din meniul File se selectează opŃiunea New, sau
de pe bara de instrumente se selectează pictograma aferentă creării unui nou
fişier. Din fereastra New, se alege butonul de selecŃie Project şi apoi butonul
de comandă New File. Ca urmare, pe ecran apare caseta de dialog Create, în
care se stabileşte directorul şi numele noului proiect (implicit acesta are numele
Project 1 şi, aşa după cum s-a văzut, extensia pjx).
După introducerea acestor informaŃii se acŃionează butonul Save, având ca
efect afişarea pe ecran a ferestrei Project Manager.
Constructorul de proiecte poate fi lansat şi în mod comandă, tastând o comandă
de forma:
CREATE PROJECT [numeproiect | ?]
• dacă în fereastra de comandă se tastează CREATE PROJECT ? sau
pur şi simplu CREATE PROJECT, acŃiunea se va derula identic cu
lansarea constructorului din meniu;
• dacă se tastează însă comanda sub forma
CREATE PROJECT numeproiect
se trece peste faza de vizualizare a chenarului Create şi apare direct
chenarul constructorului de proiecte.
Pentru a deschide un proiect deja existent, din meniul File, se selectează
opŃiunea Open, sau se activează pictograma pentru deschidere fişiere (a doua)
de pe bara de instrumente standard. In caseta de dialog Open se va selecta tipul
de fişier ce urmează a fi deschis, adică Project şi apoi denumirea proiectului,
după care se acŃionează butonul OK, având ca efect afişarea pe ecran a ferestrei
Project Manager aferentă proiectului selectat.

76
O altă modalitate mai rapidă de afişare a ferestrei Project Manager constă, în
selectarea numelui de proiect direct din meniul File, unde după lista de opŃiuni
apar şi numele tuturor proiectelor existente.

În mod comandă, un proiect poate fi deschis printr-o comandă de forma:


MODIFY PROJECT [numeproiect | ?]
care va funcŃiona asemănător cu cazul creării proiectelor şi anume:
• dacă se utilizează forma MODIFY PROJECT ? sau MODIFY
PROJECT, operaŃia se va derula ca şi în cazul lansării sale din
meniu;
• dacă se utilizează forma
MODIFY PROJECT numeproiect
apare direct chenarul constructorului de proiecte, fără a mai apare
fereastra Open.

5.1.2.2. Componentele utilitarului Project Manager


Pentru a asigura o organizare cât mai clară a datelor necesare unui proiect,
fereastra Project Manager conŃine şase pagini, fişe etichetate sau foi de
proprietăŃi, fiecare dintre acestea fiind asociată unei anumite categorii de date.
Fiecare pagină are o etichetă cu numele categoriei de informaŃii pe care o
reprezintă.
Principalele componente ale paginilor din fereastra Project Manager sunt
următoarele:
1. Pagina Data - conŃine datele necesare unei aplicaŃii, fiind organizată
la primul nivel, pe următoarele categorii:
• Database (baze de date)
• Free Tabels (tabele libere)
• Queries (interogări)
Fiecare bază de date poate conŃine următoarele subcategorii :
• Tables (tabele)
• Local View (vederi locale)
• Remote View (vederi la distanŃă)
• Conections (conexiuni)
• Stored Procedures (proceduri stocate)
2. Pagina Documents - include toate documentele utilizate în lucrul cu
tabele, cum ar fi: formulare (Forms) pentru citirea datelor şi
vizualizarea lor, rapoarte (Reports), reprezentând situaŃii de ieşire şi
etichete poştale (Labels), pentru tipărirea rezultatelor interogărilor.
77
BAZE DE DATE

3. Pagina Clases - Această pagină conŃine toate bibliotecile de clase


definite sau adăugate aplicaŃiei. Bibliotecile de clase în Visual FoxPro
sunt memorate în fişiere cu extensia .vcx şi pot conŃine oricâte clase.
Vizualizarea claselor dintr-o anumită bibliotecă se face prin execuŃia
unui click pe semnul "+" din faŃa numelui bibliotecii.
4. Pagina Code - include codul sursă al programelor FoxPro precum şi
aplicaŃiile asociate. Programul principal este marcat prin litere
îngroşate. In cadrul paginii, pe lângă toate programele sursă avem
posibilitatea de a include şi alte aplicaŃii care pot fi asociate cu
aplicaŃia cu care lucrăm. Din cadrul ferestrei Project Manager putem
crea, adăuga sau şterge fişiere program (cu extensia .prg) legate de
aplicaŃia respectivă.
5. Pagina Other - în cadrul acestei pagini sunt stocate codurile sursă
pentru meniuri, sub formă de fişiere cu extensia .mpr, cât şi celelalte
fişiere, cum ar fi: icon-uri, bitmap-uri, fişiere de text etc.
6. Pagina All - conŃine toate obiectele celorlalte pagini.

5.1.2.3. Prelucrarea fişierelor din cadrul ferestrei Project Manager


1. Adăugarea şi administrarea fişierelor din proiect. Pentru adăugarea
unui nou fişier în proiect se va selecta mai întâi grupul în care se va
adăuga fişierul şi apoi se va executa un click pe butonul New…, dacă
fişierul se creează în momentul respectiv, respectiv pe butonul Add…,
dacă fişierul există deja.
2. Ştergerea unui fişier, cum ar fi, de exemplu, o tabelă dintr-o bază de
date, se va selecta mai întâi fişierul respectiv şi apoi se va acŃiona
butonul Remove…
3. Afişarea fişierelor din proiect OperaŃia de afişare are o semnificaŃie
diferită şi se execută diferit, în funcŃie de tipul de fişier. Astfel, pentru
a afişa o tabelă, se selectează numele tabelei, după care se acŃionează
butonul Browse… Dacă dorim să afişam un alt tip de fişier, de
exemplu un program, se va selecta numele fişierului respectiv, după
care se va acŃiona butonul Modify… Ca urmare, se va deschide o
fereastră de editare în care apare codul programului respectiv.
4. Modificarea fişierelor. Pentru a realiza această operaŃie se selectează
fişierul dorit şi apoi se acŃionează butonul Modify… Se va afişa
fişierul respectiv, putând fi modificat. In cazul tabelelor, prin
acŃionarea butonului Modify se va lansa generatorul de tabele care va
afişa structura tabelei pentru modificarea câmpurilor sau indecşilor
acesteia.
5. Deschiderea şi închiderea unei baze de date. Se realizează prin
acŃionarea butonului Open/Close, iar pentru rularea unui program, a
unei forme sau a unui raport, se va folosi butonul Run.

78
5.1.3. Personalizarea ferestrei Project Manager
Fereastra Project Manager, ca orice fereastră din mediul Windows, poate fi
mutată sau redimensionată pentru a ocupa o poziŃie convenabilă pe ecran. Pe
lângă aceste proprietăŃi, există posibilitatea de a ascunde în întregime fereastra
aşa încât să se vadă numai etichetele acesteia sau anumite pagini aferente lor.

Parametrizarea gestionarului de proiecte se poate realiza astfel:


• din meniul sistem se alege opŃiunea Tools şi apoi Options;
• se selectează eticheta Projects;
• se selectează opŃiunea corespunzătoare din fişă.

5.1.3.1. Meniul Project


În momentul afişării ferestrei Project Manager, în meniul sistem apare opŃiunea
Project. OpŃiunile submeniului aferent se referă la fişierul proiect deschis, cu
care lucrăm, şi se regăsesc şi în meniul rapid sau butoanele din interiorul
ferestrei Project Manager. In plus, apar unele opŃiuni noi, cum ar fi: Errors şi
Refresh, care afişează erorile ce pot apare la crearea unei aplicaŃii (Build),
respectiv reîmprospătează fereastra Project Manager, dacă s-au adăugat sau
şters componente.
OpŃiunea Clean Up Project realizează o ştergere fizică a înregistrărilor marcate
pentru ştergere din toate tabelele proiectului, după care pe bara de stare apare
mesajul "Project packed".

5.1.3.2. Utilizarea Wizard-ului destinat creării proiectelor


Dacă în meniul vertical File se selectează opŃiunea New, iar din meniul vertical
New se lasă selecta butonul radio Project şi se efectuează un click pe butonul
Wizardva apare chenarul Application Wizard.

În acest chenar se specifică numele proiectului. Dacă în directorul curent există


proiecte cu acelaşi nume, în chenarul Project file apare numele complectat cu
calea. Utilizatorul poate selectata şi cu ajutorul butonului Browse un alt director.
După acŃionarea declanşatorului OK, dacă în directorul curent mai există un
proiect cu acelaşi nume utilizatorul trebuie să confirme că doreşte să înlocuiască
proiectul existent. Dacă s-a trecut de această fază, apare un mesaj în care
sistemul cere să se aştepte generarea aplicaŃiei după care apar cele două ferestre
şi anume fereastra Project Manager şi fereastra Application Builder cu ajutorul
căruia utilizatorul poate construi direct aplicaŃia.
Activă este, aşa după cum se poate observa, aceasta din urmă. Dacă se doreşte
generarea unui proiect se execută un click pe oriunde pe fereastra Project
Manager-ului. Dacă dorim să creăm o aplicaŃie se selectează pe rând fişele
etichetate. Fără a insista asupra acestora precizăm că fişele au următoarele
funcŃii:
79
BAZE DE DATE

• General – permite stabilirea unor parametrii generali referitori la:


o numele aplicaŃiei (chenarul Name);
o eventual al unei imagini care va fi vizualizată la lansarea
aplicaŃiei (chenarul Image) sau prin selectarea butonului Browse),
respectiv a unui icon care poate fi selectat prin butonul Browse din
chenarul Icon;
o tipul aplicaŃie (Normal – executat sub controlul mediului Visual
FoxPro, Module – care generează module din alte aplicaŃii sau
Top-Level are semnificaŃia că aplicaŃia este o aplicaŃie de tip
Windows Desktop.
o Caracteristici generale ale aplicaŃiei (Splash screen) – care
semnifică faptul că imaginea din Image şi informaŃiile generate cu
fişa etichetată Credits vor fi vizualizate pe ecran în momentul
lansării aplicaŃiei, Quick start – indică faptul că se vizualizează
chenarul cu acelaşi nume pentru accesul la documente si alte tipuri
de fişiere ale aplicaŃiei, About dialog – va vizualiza la lansarea
chenarului cu acelaşi num e la lansarea aplicaŃiei şi în sfârşit User
Logins – indică faptul că aplicaŃia va cere parolă la intrarea
utilizatorilor şi va gestiona preferinŃele în situaŃia folosirii ei în
regim multiutilizator.
• Credits – specifică informaŃii specifice autorului aplicaŃiei cum ar fi
nume, instituŃie etc.
• Data – permite în esenŃă stabilirea surselor de date şi conŃine:
o Database Wizars şi Table Wizard – permit crearea unor baze de
date sau tabele. În momentul închiderii wizard0urilor datele
referitoare la tabele şi imagini sunt memorate în tabelul vertical
Datasource;
o declanşatorul Select... permite selectarea unor baze de date, tabele
sau imagini;
o decantorul Clear permite ştergerea din tabelul vertical a tabelului
sau imaginii selectate;
o listele combinate Form Style şi Report Style permit selectarea unor
stiluri de editare a formelor şi rapoartelor referitoare la linia sau
liniile selectate din tabelul vertical;
o în sfârşit, declanşatorul Generate declanşează generarea unor forme
sau rapoarte pentru tabelele selectate conform stilurilor alese.
• Forms – permite stabilirea unor elemente esenŃiale pentru formele
utilizate în aplicaŃie:
o chenarul text Name – permite specificarea unui diminutiv pentru
formă;

80
o declanşatoarele Add..., Edit şi Remove – permit lansarea adăugării
unei forme la aplicaŃie, eventual selectate prin Browse, modificarea
(editarea) unei forme sau eliminarea unei forme din aplicaŃie;
o chenarul de selecŃie Single instance – indică faptul că se acceptă o
singură instanŃiere a formei în cadrul aplicaŃiei;
o Use Navigator Toolbar şi Use Navigator Menu – indică faptul că se
va introduce construi o bară de instrumente de navigare, respectiv
un meniu de navigare pentru forma selectată;
o Appear in File New Dialogs şi Appear in File Open Dialogs –
indică faptul că diminutivul aplicaŃiei va apare în lista chenarului
de dialog New respectiv Open.
• Reports – este asemănător cu deosebirea că această fişă conŃine un
singur chenar de selecŃie apare în Print Reports dialog, care specifică
faptul că diminutivul raportului va apare în chenarul de dialog Print
Raports.
• Advenced – permite stabilirea unor caracteristici avansate pentru
aplicaŃie:
o Help- permite să specificăm numele şi calea unui fişier Help pentru
aplicaŃia în acuză;
o Default data directory – permite stabilirea directorului implicit în
care se vor afla fişierele de date destinate aplicaŃiei;
o chenarele de selecŃie Standard toolbar şi Favorites menu – indică
faptul că aceste obiecte se vor utiliza în aplicaŃie;
o declanşatorul Cleanup lansează un chenar de confirmare pentru a
şterge modificările efectuate de generatorul de aplicaŃie în tabelele
sistemului (metatabele).

81
BAZE DE DATE

REZUMAT Modulul are în componenŃă o unitate destinatǎ gestiunii


proiectelor ca medii de dezvoltare de aplicaŃii cu
particularizare în cazul Visual FoxPro. Dintre problemele
studiate amintim:
• ParticularităŃile proiectelor în Visual FoxPro.
• Stabilirea modalităŃilor de creare, respective de
modificare a proiectelor;
• Utilizarea ferestrei Project Manager şi a meniului
vertical aferent;
• Personalizarea managerului de proiecte;
• FaciliăŃi oferite de Wizard.
TEME DE 1. Elaborarea unui memento recapitulativ;
CONTROL, 2. OperaŃii de creare, modificare şi ştergere a unor proiecte,
APLICAłII precum şi a unor componente ale lor cu şi fǎrǎ Wizard.
BIBLIOGRAFIE 11. R.Avram-NiŃchi, N.Ghişoiu, S.Goron, S.I.NiŃchi,
N.Tomai, Baze de date şi programarea calculatoarelor
utilizând Visual FoxPro, Risoprint, 2003, p. 47-89.
12. Avram-NiŃchi R., S.I.NiŃchi şi alŃii, Culegere de exerciŃii
şi probleme la disciplina « Baze de date şi programarea
calculatoarelor, UBB Preprint, Cluj, 2003.
13. Marian Cristescu, Baze de date utilizate în mediul
economic, Editura ”ALMA MATER”, Sibiu, 2007, pg.
125-131.
14. Dima G, Dima M., Visual FoxPro 7.0, Teora 2002.
15. M. Fotache şi alŃii, Visual FoxPro, Polirom, 2002.
16. Ghişoiu N., Visual FoxPro; exerciŃii şi programe,
Risoprint, 2002.
17. Homorodean M.A, Petrescu S, Limbajul de programare
Visual FoxPro 6.0, Niculescu, 2002.
18. *** , Microsoft Visual FoxPro 6.0: Ghidul
programatorului, Teora, 2001.
19. http://msdn.microsoft.com/vfoxpro
20. http://gotdotnet.com/team/vfp

82
6. PROGRAMAREA ÎN VISUAL FOXPRO

CONCEPTE DE 1. Implementarea structurilor de control în Visual FoxPro


BAZĂ 2. Gestiunea variabilelor de memorie, a câmpurilor memo
şi masivelor de date
3. Comenzi de intrare/ieşire
4. Proceduri şi funcŃii utilizator
5. Obiecte şi clase în Visual FoxPro
OBIECTIVE 1. Cunoaşterea comenzilor de implementare a structurilor
de control alternative şi repetitive;
2. Cunoaşterea modului de definire a variabilelor de
memorie, câmpurilor memo şi a masivelor de date.
RECOMANDĂRI 1. Se recomandă studierea principalelor comenzi de
PRIVIND implementare a structurilor de control alternative şi
STUDIUL repetitive (IF, DO, CASE, DO WHILE, FOR, SCAN)
2. n continuare se vor studia comenzile de intrare/ieşire,
prin În testarea pe calculator a modulului de utilizare a
acestora;
3. Se vor studia noŃiunile de clasă şi obiect, proprietăŃile
acestora. De asemeni se vor studia conceptele de
„metode” şi „evenimente”.
REZULTATE - La finele studiului acestui modul utilizatorul trebuie să
AŞTEPTATE cunoască modul de folosire al comenzilor de
implementare al structurilor de control cât şi al
comenzilor de intrare/ieşire;
- De asemenea utilizatorul trebuie să fie în măsură să
creeze obiecte şi să ataşeze acestora secvenŃe de
comenzi.

83
BAZE DE DATE

6.1. COMENZI DE IMPLEMENTARE A STRUCTURILOR DE


CONTROL ALTERNATIVE ŞI REPETITIVE

OBIECTIVE Cunoaşterea modului de funcŃionare şi utilizare a comenzilor


de implementare a structurii de control, alternative şi
repetitive.
CUVINTE - IF
CHEIE - DO CASE
- DO WHILE
- FOR
- SCAN

6.1.1. Implementarea structurilor de control în Visual FoxPro

Limbajul FoxPro conŃine comenzi pentru implementarea celor trei tipuri de


structuri de control: secvenŃiale, alternative şi repetitive, cu următoarele
precizări:
1. Comenzile pentru implementarea structurilor de control alternative şi
repetitive nu se pot folosi în mod interactiv numai la nivel de program.
2. Limbajul nu conŃine instrucŃiuni de salt condiŃionat de tip GOTO
3. In capitolul de faŃă urmează a fi prezentate comenzile pentru implementarea
structurilor alternative şi repetitive, respectiv: IF, DO CASE, DO WHILE,
FOR şi SCAN. Celelalte comenzi din cadrul limbajului sunt considerate ca şi
comenzi pentru realizarea structurilor secvenŃiale, ele fiind prezentate în
cadrul unor capitole distincte (crearea structurii de date, deschiderea bazei de
date, actualizarea bazei de date, intrări/ieşiri de date etc.)

6.1.1.1. Structuri alternative


Aceste structuri realizează selectarea unei secvenŃe de comenzi în funcŃie de îndeplinirea sau
neîndeplinirea unei condiŃii. Pentru implementarea acestor structuri se folosesc comenzile IF
şi DO CASE.

a. Comanda IF
Această comandă permite execuŃia unei secvenŃe de instrucŃiuni pe baza
evaluării unei expresii logice. Fiind cea mai simplă structură de control, poate fi
considerată ca fiind părintele familiei structurilor de programare. Sintaxa
generală a comenzii este următoarea:
IF<expl>
<secv-comenzi1>
[ELSE
<secv-comenzi2>]
ENDIF
84
La întâlnirea acestei comenzi se evaluează <expL> şi dacă este adevărată se

execută <secv-comenzi1>, după care se trece la prima comandă după ENDIF.

Dacă condiŃia din <expL> nu este adevărată se execută <secv-comenzi2>, după

care se trece la prima comandă după ENDIF. In acest caz, dacă opŃiunea ELSE

lipseşte, se trece direct la prima comandă după ENDIF.

b. Comanda DO CASE
In scopul creşterii flexibilităŃii programului, limbajul Visual FoxPro permite implementarea
structurilor de control generalizate sau multiple, fără folosirea de instrucŃiuni IF incluse una
în alta, folosind comanda DO CASE. Ea reprezintă extinderea naturală a principiului
exclusivităŃii mutuale la două sau mai multe situaŃii. Prin urmare, în loc să folosim expresii
logice reciproc exclusive, Visual FoxPro, permite să includem orice expresie logică dorim
pentru fiecare caz sau situaŃie în parte. Sintaxa generală a comenzii este următoarea:

DO CASE
CASE <expL1>
<secv-com1>
CASE <expL2>
<secv-com2>
OTHER WISE
<secv-comn>
ENDCASE

ExecuŃia acestei comenzi are loc astfel:


1. Se evaluează fiecare expresie logică în ordinea în care apare în
comanda DO CASE, iar întâlnirea primei expresii logice adevărate se
execută secvenŃa de comenzi aferentă, după care se trece la prima
comandă după ENDCASE.
2. Dacă nici una din expresiile logice specificate în comanda DO CASE
nu sunt adevărate, se execută grupul de comenzi din clauza
OTHERWISE sau se trece la prima comandă după ENDCASE, dacă
clauza OTHERWISE lipseşte.
3. Dacă mai multe expresii logice din comanda DO CASE sunt
adevărate, se execută numai secvenŃa de comenzi aferentă primei

85
BAZE DE DATE

condiŃii logice adevărate, după care se trece la prima comandă după


ENDCASE.

6.1.1.2. Structuri repetitive


Structurile repetitive pot fi implementate în limbajul Visual FoxPro cu ajutorul comenzilor:
DO WHILE, FOR şi SCAN.

a. Comanda DO WHILE
Dacă structura DO CASE… ENDCASE este o copie aproape fidelă a structurii
IF…ENDIF, structura DO WHILE…ENDDO este asemănătoare şi ea cu
IF…ENDIF. Astfel, dacă comanda IF execută secvenŃa de instrucŃiuni
dacă expresia logică este adevărată, comanda DO WHILE permite execuŃia
repetată a secvenŃei de instrucŃiuni cât timp expresia logică din cadrul comenzii
este adevărată. Ea permite astfel implementarea structurilor de control repetitive
cu condiŃionare anterioară. Formatul general al comenzii este următorul:

DO WHILE <expL>
<secv-comenzi>
[LOOP]
[EXIT]
ENDDO

ExecuŃia comenzii începe cu evaluarea expresiei logice. Astfel, dacă expresia


logică este adevărată se execută secvenŃa de comenzi până la ENDDO, după
care se revine la evaluarea expresiei logice. Dacă expresia logică este falsă se
trece la prima comandă după ENDDO. InstrucŃiunea LOOP determină
revenirea la evaluarea condiŃiei logice din DO WHILE.,
b. Comanda FOR
Această comandă se află într-o relaŃie foarte strânsă cu comanda DO
WHILE, fiind o variantă asemănătoare a comenzii DO WHILE. Ea permite
execuŃia repetată a unei secvenŃe de comenzi de un anumit număr de ori fiind
utilizată pentru implementarea structurilor de control repetitive cu indici.
Formatul general al comenzii este următorul:
FOR <var> =<exp1> TO <exp2>
[,STEP<exp3>]
<secvenŃă de comenzi>
[LOOP]
[EXIT]
ENDFOR/NEXT

unde:
<var>; este variabila de control care indică de câte ori se execută
secvenŃa de

86
comenzi din instrucŃiunea FOR
<exp1>; reprezintă valoarea iniŃială a variabilei de control
<exp2>; defineşte valoarea finală a variabilei de control
<exp3>; defineşte raŃia cu care se modifică valoarea iniŃială a variabilei de
control.
Valoarea implicită pentru raŃie este 1

c. Comanda SCAN
Această comandă reprezintă o altă modalitate de ciclare specializată, fiind
proiectată pentru execuŃia de secvenŃe de comenzi prin care se prelucrează
înregistrările unui tabel din baza de date. ExecuŃia comenzii determină
parcurgerea tabelului curent şi efectuarea pentru fiecare înregistrare selectată
din tabel a secvenŃei de comenzi specificate în comandă.
Formatul general al comenzii este următorul:
SCAN [<domeniu>] [FOR<expL1>]
[WHILE <expL2>]
[NOOPTIMIZE]
[LOOP] [EXIT]
<secvenŃa-de-comenzi>
ENDSCAN

SemnificaŃia opŃiunilor din cadrul comenzii este următoarea:


- <domeniu>, FOR<expL1>, WHILE <expL2>; permit selectarea din
tabelul curent a înregistrărilor pentru care se va executa secvenŃa de comenzi
din comanda SCAN.
- <secvenŃa de comenzi>; conŃine comenzile ce urmează a fi executate pentru
fiecare înregistrare selectată din tabel. Reluarea secvenŃei de comenzi pentru
următoarea înregistrare se face automat la întâlnirea cuvintelor ENDSCN sau
LOOP.

87
BAZE DE DATE

6.2. COMENZI DE INTRARE/IEŞIRE

Însuşirea modului de folosire al comenzilor de intrare/ieşire


OBIETIVE în mod linie: INPUT, ACCEPT
CUVINTE Însuşirea de afişare, coduri de funcŃii.
CHEIE

6.2.1. Comenzi de intrare/ieşire

Aceste comenzi se pot împărŃi în două categorii şi anume:


1. Comenzi de intrare/ieşire în mod linie.
2. Comenzi de intrare/ieşire în mod ecran.
Comenzile de intrare/ieşire în mod linie permit afişarea, respectiv introducerea

datelor din poziŃia curentă a cursorului. Acestea sunt: ACCEPT, INPUT, WAIT

(de intrare), ?,??,???, DISPLAY, LIST (de ieşire).

6.2.1.1. Comenzi de intrare în mod linie; Comenzile ACCEPT şi


INPUT
Aceste comenzi permit introducerea de date de la tastatură şi preluarea lor într-o variabilă de
memorie sau într-un element dintr-un masiv. OpŃional, se poate afişa un mesaj, definit de
utilizator, referitor la informaŃia de preluat. Sintaxa generală a celor două comenzi este
următoarea:

ACCEPT[<expC>]TO<var>|<element-masiv>
INPUT[<expC>]TO<var>|<element-masiv>

Datele de intrare pentru comanda ACCEPT sunt considerate şiruri de caractere, ca urmare
variabila sau elementul de masiv în care se preiau aceste date vor fi de tip şir de caractere. In
cazul comenzii INPUT, datele de intrare sunt interpretate ca o expresie care este evaluată,
rezultatul evaluării, fiind de tip caracter, dată calendaristică, logic sau numeric. Ca urmare,
variabila sau elementul masivului care memorează datele de intrare, vor avea tipul specificat
anterior. Parametrul <expC> reprezintă promptul sau mesajul care se afişează înaintea datei
de preluat.

6.2.1.2. Comenzi de ieşire în mod linie; Formatul de afişare/citire

88
La afişarea valorii unor date sau la citirea lor de pe un periferic se folosesc
clauzele PICTURE şi FUNCTION cu următoarea sintaxă:
PICTURE <sir1>
FUNCTION <sir2>

Ele determină afişarea sau citirea datelor precizate într-o comandă de intrare sau
de ieşire, într-un format specificat prin <sir1> respectiv <sir2> astfel:
<sir1> conŃine între ghilimele diferite coduri de afişare, câte unul pentru
fiecare caracter din date de afişat
<sir2> conŃine tot între ghilimele coduri de funcŃie. Un cod de funcŃie
acŃionează asupra tuturor caracterelor din data de afişat sau citit şi defineşte o
anumită caracteristică a textului de afişat sau citit.

6.3. OBIECTE ŞI CLASE ÎN VISUAL FOXPRO

OBIECTIVE 1. Însuşirea conceptelor de clasă, obiect metode şi


evenimente;
2. Cunoaşterea modului de creare a claselor şi obiectelor în
Visual FoxPro şi a modului de referire la obiectele unei
clase.
CUVINTE - Clasă,
CHEIE - Obiect,
- Metode,
- Evenimente,
- Controale,
- Containere.

6.3.1. Proceduri şi funcŃii utilizator

6.3.1.1. Crearea şi execuŃia programelor în Visual FoxPro

Crearea unui program în Visual FoxPro presupune parcurgerea următoarelor


etape:
1. introducerea programului în fereastra de editare şi salvarea acestuia
pe disc; In acest scop se poate folosi fereastra Project Manager de
unde se selectează pagina Code şi apoi butonul New. Ca urmare, are
loc lansarea editorului de text propriu sistemului Visual FoxPro, iar pe
ecran se afişează fereastra de editare în care se va introduce
programul. Lansarea editorului se poate face şi prin introducerea
comenzii MODIFY COMMAND [<nume-program>] în fereastra de
comenzi. Se recomandă însă folosirea primei metode, prin care
programul creat este inclus automat în proiect. Pentru salvarea

89
BAZE DE DATE

programului se pot acŃiona tastele CTRL+W sau se selectează


opŃiunea Save sau SAVE AS din meniul File.
2. lansarea în execuŃie; care se poate realiza în mai multe moduri; din
fereastra Project Manager se selectează din pagina Code programul
sursă şi apoi se execută un clic pe butonul Run.
- în fereastra de comenzi se introduce comanda DO <nume-program>
[WITH <lista-parametru>].
- din meniul PROGRAM se selectează opŃiunea DO.

6.3.1.2. Proceduri şi funcŃii definite de utilizator


Pentru a uşura înŃelegerea, testarea şi depanarea unui program, acesta se
structurează pe module, unde fiecare modul conŃine o secvenŃă de comenzi prin
care se realizează o anumită prelucrare. Aceste module se pot defini fie ca
module principale, fie ca proceduri sau funcŃii utilizator (UFD - User Defined
Functions). Modulele organizate sub formă de proceduri şi funcŃii utilizator pot
fi apelate în cadrul unui program, de mai multe ori, prin câte o comandă de apel,
fără a rescrie aceste module ori de câte ori sunt executate.
Modul de definire şi apelare a unei proceduri sau funcŃii utilizator, prezintă
următoarele particularităŃi:
1. o procedură conŃine o secvenŃă de comenzi grupate sub acelaşi nume care
realizează o anumită prelucrare. Ea este apelată de alte module şi poate primi
de la acestea unul sau mai mulŃi parametrii. După execuŃia comenzilor din
cadrul procedurii, se redă controlul programului apelant, fără a returna
neapărat vreo valoare.
2. o funcŃie utilizator conŃine de asemenea o secvenŃă de comenzi. Ea primeşte
de obicei un set de parametrii de la programul apelant şi returnează acestuia
la terminarea prelucrării o valoare ca rezultat al prelucrărilor efectuate asupra
parametrilor primiŃi.
Definirea procedurii se realizează cu comanda PROCEDURE, iar a funcŃiei cu comanda
FUNCTION.

6.3.1.3. Obiecte şi clase în Visual FoxPro

In Visual FoxPro, faŃă de versiunea clasică, s-au adăugat o serie de facilităŃi, dintre care cea
mai importantă o reprezintă programarea orientată pe obiecte şi condusă de evenimente. Un
obiect reprezintă un ansamblu de date împreună cu procedurile de prelucrare a acestora.
Procedurile sau comportamentul, poartă denumirea de metode, iar datele de atribute sau
proprietăŃi. Obiectele mai pot fi definite ca reprezentând entităŃi din lumea reală, care
înglobează în ele stări (date) şi comportamente (funcŃiuni). Reprezentarea unei entităŃi se
realizează printr-un ansamblu de proprietăŃi comune (colecŃii de proprietăŃi).

90
6.3.1.4. ProprietăŃi, metode şi evenimente
Fiecare obiect posedă anumite proprietăŃi şi metode în funcŃie de clasa din care
fac parte. Astfel, un buton de comandă poate avea următoarele proprietăŃi:
- CAPTION - conŃine textul scris pe buton;
- LEFT - conŃine distanŃa faŃă de marginea din stânga ecranului;
- RIGHT - conŃine distanŃa faŃă de marginea din dreapta ecranului;
- TOP, - conŃine distanŃa faŃă de partea de sus a ecranului;
- HIGHT - conŃine înălŃimea butonului;
- VISIBLE - conŃine valorile .T. sau .F. prin care se indică dacă
obiectul
este vizibil sau nu pe ecran.
O proprietate este, prin urmare, un atribut al unui obiect (câmp, fereastră, control) pe care îl folosim pentru a defini aspectul sau
comportamentul obiectului respectiv. In Visual FoxPro, proprietatea se defineşte printr-o variabilă de memorie în care se
memorează valorile pentru proprietatea respectivă. Ea poate avea oricare din tipurile de date acceptate de Visual FoxPro. Aşa cum
rezultă din exemplul dat, proprietăŃile unui obiect, respectiv a unui buton, identifică atributele fizice ale acestuia (lungime, înălŃime
etc.). Insă, obiectele nu sunt caracterizate numai prin atributele fizice, ci ele conŃin ceva în plus faŃă de aceste proprietăŃi, respectiv
metodele. Metodele sunt acŃiuni pe care le poate executa un obiect şi includ cod (instrucŃiuni) care indică modul de comportament al
obiectului respectiv.

Codul aferent obiectelor, se defineşte de către utilizator, în funcŃie de cerinŃele


programului şi se execută în momentul apelării metodei respective. Unele dintre
metode, posedă cod încorporat, care indică un anumit comportament al
obiectului. Exemplu metodele:
SHOW - afişează şi activează o fereastră pe ecran;
REFRESH - afişează starea unui obiect, după efectuarea unor modificări
asupra obiectului respectiv.
Deci, faŃă de instrucŃiuni, unei metode utilizatorul îi poate ataşa o
secvenŃă de cod specifică unei anumite prelucrări, care se execută în momentul
apelării metodei respective.
Fiecare obiect în Visual FoxPro, recunoaşte şi răspunde la anumite
evenimente. Acestea pot fi evenimente externe, iniŃiate de utilizator, sau interne,
iniŃiale de către sistemul Visual FoxPro.
Evenimentele externe sunt generate de anumite acŃiuni cum ar fi:
efectuarea unui clic cu mouse-ul pe un obiect, apăsarea unei taste etc.
Setul de evenimente aferent unui tip de obiect este stabilit anterior. Prin
urmare, utilizatorul nu poate crea noi evenimente care să le asocieze unui
obiect.
Spre deosebire de evenimente, setul de metode, este infinit extensibil. Ele există
independent de evenimente şi se execută în momentul în care sunt apelate.
Evenimentele au asociate metode. Astfel, dacă scriem o metodă cu
numele click, care reprezintă un eveniment şi o asociem unui buton, sau unui alt
obiect, codul metodei se va executa automat, ori de câte ori survine evenimentul
click, adică facem un clic cu mouse-ul pe obiectul respectiv.

91
BAZE DE DATE

6.3.2. Clase

Prin proprietăŃi, obiectele pot să difere între ele, sau să se asemene


unul cu altul. De exemplu, două calculatoare, unul de buzunar, altul
de birou, se deosebesc între ele printr-o mulŃime de caracteristici
(greutate, dimensiuni, culoare etc., numite proprietăŃi), dar principiul
de bază al funcŃionării lor este acelaşi, conŃin piese electronice
aproape identice, pot efectua aceleaşi calcule.
Ca urmare, obiectele care au aceleaşi proprietăŃi şi acelaşi
comportament (răspund la aceleaşi evenimente prin aceleaşi acŃiuni)
aparŃin aceleaşi clase. Astfel, cele două calculatoare (de birou şi de
buzunar), prin elementele lor comune (circuite, piese electronice) şi
prin faptul că pot răspunde la aceleaşi evenimente interne sau externe,
se consideră că aparŃin aceleaşi clase, cea de calculatoare.
Deci, o clasă descrie o mulŃime de obiecte cu proprietăŃi şi
comportament similar. Cele două noŃiuni, clasă şi obiect, nu pot fi
însă confundate pentru că nu reprezintă acelaşi lucru.
O clasă conŃine informaŃii despre felul cum arată şi se comportă
obiectele care-i aparŃin. Clasa reprezintă deci o noŃiune abstractă
care defineşte structura şi comportamentul obiectelor care-i aparŃin.

6.3.2.1. Subclase

În Visual FoxPro pot fi create clase derivate sau subclase pornind de la


clasele de bază. Având o clasă deja definită, putem genera, pornind de la această
clasă, o nouă clasă prin operaŃia de derivare.
O clasă derivată moşteneşte automat proprietăŃile şi metodele clasei de bază,
deci aceste proprietăŃi nu mai trebuie definite în clasa derivată. In noua clasă se
vor include numai caracteristici noi, cele vechi considerându-se implicit.

6.3.2.2. Tipuri de clase şi obiecte

Visual FoxPro conŃine 28 de clase de bază predefinite cu ajutorul cărora putem


crea noi obiecte. Aceste clase se împart la rândul lor în două subcategorii:
1 - clase Container
2 - clase Control

92
REZUMAT Implementarea structurilor de control în Visual FoxPro
Limbajul Visual FoxPro conŃine comenzi pentru implementarea
celor trei tipuri de structuri de control: secvenŃiale, alternative şi
repetitive, cu următoarele precizări:
- Comenzile pentru implementarea structurilor de control alternative
şi repetitive nu se pot folosi în mod interactiv numai la nivel de
program.
- Limbajul nu conŃine instrucŃiuni de salt condiŃionat de tip GOTO
In capitolul de faŃă urmează a fi prezentate comenzile pentru
implementarea structurilor alternative şi repetitive, respectiv: IF, DO
CASE, DO WHILE, FOR şi SCAN.

Comanda IF
Această comandă permite execuŃia unei secvenŃe de instrucŃiuni pe baza evaluării
unei expresii logice. La întâlnirea acestei comenzi se evaluează <expL> şi dacă
este adevărată se execută <secv-comenzi1>, după care se trece la prima comandă
după ENDIF.
Dacă condiŃia din <expL> nu este adevărată se execută <secv-
comenzi2>, după care se trece la prima comandă după ENDIF. In
acest caz, dacă opŃiunea ELSE lipseşte, se trece direct la prima
comandă după ENDIF.

Comanda DO CASE
In scopul creşterii flexibilităŃii programului, limbajul Visual FoxPro
permite implementarea structurilor de control generalizate sau
multiple, fără folosirea de instrucŃiuni IF incluse una în alta, folosind
comanda DO CASE.

Comanda DO WHILE
Astfel, dacă comanda IF execută secvenŃa de instrucŃiuni dacă expresia
logică este adevărată, comanda DO WHILE permite execuŃia repetată
a secvenŃei de instrucŃiuni cât timp expresia logică din cadrul comenzii
este adevărată. Ea permite astfel implementarea structurilor de control
repetitive cu condiŃionare anterioară. ExecuŃia comenzii începe cu
evaluarea expresiei logice. Astfel, dacă expresia logică este adevărată
se execută secvenŃa de comenzi până la ENDDO, după care se revine
la evaluarea expresiei logice. Dacă expresia logică este falsă se trece la
prima comandă după ENDDO.

Comanda FOR
93
BAZE DE DATE

Această comandă se află într-o relaŃie foarte strânsă cu comanda


DO WHILE, fiind o variantă asemănătoare a comenzii DO WHILE.
Ea permite execuŃia repetată a unei secvenŃe de comenzi de un anumit
număr de ori fiind utilizată pentru implementarea structurilor de
control repetitive cu indici.

Comanda SCAN
Această comandă reprezintă o altă modalitate de ciclare
specializată, fiind proiectată pentru execuŃia de secvenŃe de comenzi
prin care se prelucrează înregistrările unui tabel din baza de date.
ExecuŃia comenzii determină parcurgerea tabelului curent şi efectuarea
pentru fiecare înregistrare selectată din tabel a secvenŃei de comenzi
specificate în comandă.

Comenzi de intrare/ieşire
Aceste comenzi se pot împărŃi în două categorii şi anume:
- Comenzi de intrare/ieşire în mod linie.
- Comenzi de intrare/ieşire în mod ecran.
Comenzile de intrare/ieşire în mod linie permit afişarea,
respectiv introducerea datelor din poziŃia curentă a cursorului. Acestea
sunt: ACCEPT, INPUT, WAIT (de intrare), ?,??,???, DISPLAY, LIST
(de ieşire).

Obiecte şi clase în Visual FoxPro

Caracteristici generale

Un obiect reprezintă un ansamblu de date împreună cu


procedurile de prelucrare a acestora. Procedurile sau comportamentul,
poartă denumirea de metode, iar datele de atribute sau proprietăŃi.
O proprietate este, prin urmare, un atribut al unui obiect
(câmp, fereastră, control) pe care îl folosim pentru a defini
aspectul sau comportamentul obiectului respectiv.
Aşa cum rezultă din exemplul dat, proprietăŃile unui obiect,
respectiv a unui buton, identifică atributele fizice ale acestuia
(lungime, înălŃime etc.). Insă, obiectele nu sunt caracterizate numai
prin atributele fizice, ci ele conŃin ceva în plus faŃă de aceste
proprietăŃi, respectiv metodele.
Metodele sunt acŃiuni pe care le poate executa un obiect şi
includ cod (instrucŃiuni) care indică modul de comportament al
obiectului respectiv.
Codul aferent obiectelor, se defineşte de către utilizator, în

94
funcŃie de cerinŃele programului şi se execută în momentul apelării
metodei respective. Unele dintre metode, posedă cod încorporat, care
indică un anumit comportament al obiectului.
Fiecare obiect în Visual FoxPro, recunoaşte şi răspunde la
anumite evenimente. Acestea pot fi evenimente externe, iniŃiate de
utilizator, sau interne, iniŃiale de către sistemul Visual FoxPro.
Evenimentele externe sunt generate de anumite acŃiuni cum ar fi:
efectuarea unui clic cu mouse-ul pe un obiect, apăsarea unei taste etc.
Setul de evenimente aferent unui tip de obiect este stabilit
anterior. Prin urmare, utilizatorul nu poate crea noi evenimente care să
le asocieze unui obiect.
Spre deosebire de evenimente, setul de metode, este infinit
extensibil. Ele există independent de evenimente şi se execută în
momentul în care sunt apelate.

Clase
O clasă conŃine informaŃii despre felul cum arată şi se comportă obiectele care-i
aparŃin. Clasa reprezintă deci o noŃiune abstractă care defineşte structura şi
comportamentul obiectelor care-i aparŃin.

Subclase
In Visual FoxPro pot fi create clase derivate sau subclase
pornind de la clasele de bază. Având o clasă deja definită, putem
genera, pornind de la această clasă, o nouă clasă prin operaŃia de
derivare.
O clasă derivată moşteneşte automat proprietăŃile şi metodele
clasei de bază, deci aceste proprietăŃi nu mai trebuie definite în clasa
derivată

Tipuri de clase şi obiecte


Visual FoxPro conŃine 28 de clase de bază predefinite cu
ajutorul cărora putem crea noi obiecte. Aceste clase se împart la rândul
lor în două subcategorii:
1 - clase Container
2 - clase Control

TEME 1. Se vor elabora programe de folosire a comenzilor de implementare


CONTROL a structurilor de control şi a comenzilor de intrare/ieşire;
2. Se vor elabora programe de creare şi utilizare a clasei form şi a
obiectelor de tip buton de comandă.
BIBLIOGR 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St., Tomai N.
95
BAZE DE DATE

AFIE Baze de date şi programarea calculatoarelor utilizând limbajul Visual


FoxPro, Ed. Risoprint, Cluj-Napoca, 2003, pg. 224-252.
2. Marian Cristescu, Baze de date utilizate în mediul economic,
Editura ”ALMA MATER”, Sibiu, 2007, pg. 176-200
3.Gabriel Dima, Mihai Dima, Bazele Visual Foxpro 5.0, Editura
Teora, Bucuresti,1999, pag . 175-186, 159-172.
4.Marin Fotache,Ioan Brava, Cătălin Strâmbei, Liviu CreŃu, Visual
FoxPro; Ghidul dezvoltării aplicaŃiilor profesionale, Editura Polirom
Iaşi, 2002, pag. 82-106, 370-417.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean, Dezvoltarea
aplicaŃiilor cu baze de date în Visual FoxPro, Editura All, Bucureşti,
2001, pag. 217-233, 91-127.
6. Paul Petruş, Visual FoxPro 5.0, Editura Promedia, Cluj, 1999, pag.
112-132.
7. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe, Editura
Risoprint Cluj, 2003, pag. 13-15, 56-69.

96
7. CREAREA ŞI UTILIZAREA FORMULARELOR ÎN VISUAL
FOXPRO

CONCEPTE DE 1. Caracteristici generale


BAZĂ 2. Crearea unui nou formular
3. ProprietăŃi şi metode ale formularelor
4. Mediu de date ale unui formular
5. Scrierea codului pentru evenimentele şi metodele unui
formular
6. Salvarea şi rularea unui formular
7. Descrierea şi utilizarea obiectelor grafice

OBIECTIVE 1. Însuşirea tehnicilor de creare a unui formular Visual


FoxPro şi de adăugare de obiecte în cadrul formularului
respectiv;
2. Cunoaşterea modului de asigurare a proprietăŃilor şi
metodelor unui formular;
3. Cunoaşterea principalelor evenimente la nivel de format
şi a modului de scriere a codului pentru evenimentele
respective;
4. Cunoaşterea obiectivelor grafice ce pot fi într-un
formular (proprietate, evenimente): butoane radio, liste,
casete de validare, casete de text, butoane de comandă.
RECOMANDĂRI 1. În vederea cunoaşterii modului de creare a unui
PRIVIND formular, se recomandă efectuarea de exerciŃii practice,
STUDIUL folosind în acest scop Form Wizard şi apoi Form
Designer;
2. După crearea formularului se vor studia proprietăŃile
aferente unui formular, urmărind aceste proprietăŃi în
fereastra Properties;
3. Se vor introduce apoi în formularul creat o serie de
obiecte de pe bara Form Controls şi apoi se vor defini
proprietăŃile acestora din fereastra Properties;
4. În etapa următoare se vor defini evenimentele aferente
formularului şi obiectelor incluse în formular şi se va
scrie secvenŃa de comenzi pentru fiecare eveniment în
funcŃie de programul pentru care s-a proiectat
formularul;
5. În ultima etapă se salvează şi se lansează formularul în
execuŃie.
97
BAZE DE DATE

REZULTATE 1. La încheierea studiului acestui modul, utilizatorul


AŞTEPTATE trebuie să fie în măsură să creeze un formular cu diferite
obiecte încorporate în formular şi să definească
proprietăŃile şi evenimentele aferente formularului şi
obiectelor aferente.
2. Formularul astfel creat să fie testat pe calculator şi să
permită executarea corectă a programului pentru care a
fost proiectat.

98
7.1. CREAREA FORMULARELOR ÎN VISUAL FOXPRO ŞI
ADĂUGAREA OBIECTELOR LA FORMUALR

OBIECTIVE 1. Însuşirea modulelor de creare a unui formular: prin


comenzi, cu utilitarele Form Designer sau Form Wizard;
2. Cunoaşterea tehnicilor de adăugare a obiectelor în cadrul
unui formular folosind bara de instrumente Form Controls
şi aplicaŃia Form Builder.
CUVINTE - FORM DESIGNER
CHEIE - FORM WIZARD
- FORM BUILDER
- FORM CONTROLS.

7.1.1. Citirea datelor; Formulare

In versiunile precedente ale SGBD FoxPro, termenul utilizat pentru elementul


de interfaŃă la introducerea de date era cel de "ecran de introducere" sau de
machetă de introducere" construit şi afişat pe ecran, sau în cadrul unei ferestre,
prin intermediul unor comenzi specifice sau cu generatorul de ecrane. Odată cu
apariŃia însă a limbajelor orientate pe obiect, ecranele de introducere date au fost
înlocuite cu formulare.
Formularul poate fi considerat ca o fereastră având toate atributele unei
ferestre sub Windows: bara de titlu, caseta meniului de control, butoane de
minimizare, maximizare, închidere. In plus, acestea reprezintă în Visual FoxPro
un obiect având ca toate celelalte obiecte, proprietăŃi, metode şi evenimente
asociate. Acestea definesc aspectul exterior al formularelor şi determină în
acelaşi timp comportamentul acestuia în diverse situaŃii.
Dintre proprietăŃile unui formular putem menŃiona: nume, dimensiuni, culoare
fond, culoare scris. Pe lângă proprietăŃi o formulară mai are ataşate secvenŃe de
cod (metode) executabile în anumite situaŃii. Modelul programării orientat pe
obiecte, implementat în Visual FoxPro, este şi unul condus de evenimente. Ca
urmare, la specificarea unei secvenŃe de cod ataşată unui eveniment, acesta se
execută automat ori de câte ori se produce evenimentul respectiv (de exemplu
apăsarea unei taste, execuŃia unui clic cu mouse-ul etc.)
In cadrul unui formular se pot insera diferite obiecte grafice, care permit citirea
şi manipularea datelor de intrare. Aceste obiecte au şi ele asociate anumite
proprietăŃi, metode şi evenimente şi permit astfel prelucrarea datelor de intrare
sau afişarea unor date din tabelele bazei de date.
După creare, formularul poate fi rulat imediat prin selectarea butonului (Run)
de pe bara de instrumente standard.

99
BAZE DE DATE

7.1.2. Crearea unui nou formular

Crearea unui formular se poate realiza în unul din următoarele moduri:


- prin intermediul comenzilor limbajului Visual FoxPro
- prin intermediul utilitarului Form Designer
- prin intermediul utilitarului Form Wizard

În primul caz este necesară cunoaşterea comenzilor de definire obiecte, clase şi


proprietăŃi ale formularului şi obiectelor incluse în formular cât şi a comenzilor
de definire a procedurilor asociate unor evenimente.
Pentru a înlătura inconvenientele definirii formularelor prin program, sistemul
Visual FoxPro, dispune de un utilitar special cu ajutorul căruia utilizatorul poate
crea mult mai rapid diferite formulare numit Form Designer (constructor de
formulare). Alături de acest instrument se mai pot folosi utilitarele Formular
Builder şi Formular Wizard.
Utilitarul Form Builder (opŃiunea Quik Form) a meniului Form, este utilizat
pentru a popula rapid un formular cu câmpuri ale unei tabele. El nu se foloseşte,
prin urmare, la crearea unui formular, ci numai pentru introducerea rapidă a
componentelor acestuia. Vom crea formularul în formula iniŃială cu Form
Designer sau Form Wizard, adăugându-i apoi câmpurile dorite cu Form Builder.
De altfel, şi celelalte obiecte introduse într-un formular în meniul Shortcut
opŃiunea Builder care permite specificarea rapidă a caracteristicilor obiectului
respectiv.
Cu Form Wizard se poate crea un formular, pe etape, cu toate obiectele
încorporate, gata pentru a fi lansat în execuŃie şi care poate fi folosit într-o
aplicaŃie mai simplă .
După creare, formularele sunt memorate în fereastra Project Manager, secŃiunea
Documents, la pictograma cu textul Forms.

7.1.2.1. Crearea unui nou formular prin utilizarea generatorului


Form
Designer
Constructorul de formulare constituie cel mai folosit instrument de creare a unui
formular, deoarece acesta oferă utilizatorului posibilitatea de a vedea aspectul
formularului şi a fiecărui obiect inclus în formular, pe măsură ce acesta se
construieşte.
Pe durata proiectării formularului, acesta se poate lansa în execuŃie folosind
butonul Run şi apoi se poate reveni, din nou, în faza de creare, selectând
butonul Modify Form.
Pentru crearea unui formular cu ajutorul utilitarului Formular Designer se
folosesc următoarele variante:

100
1. Se selectează din fereastra Project Manager secŃiunea Documents, iconul
sau pictograma cu textul Forms. In continuare, tot din cadrul ferestrei Project
Manager se selectează butonul New… sau opŃiunea New File din meniul
Project. In ambele cazuri, pe ecran apare fereastra New Form, din care se va
selecta opŃiunea cu acelaşi nume
2. Se selectează din meniul File, opŃiunea New, care determină afişarea, pe
ecran, a ferestrei New. Din această fereastră se selectează butonul radio Form şi
apoi opŃiunea New File.
3. Se introduce în fereastra de comenzi comanda:
CREATE FORMULAR <nume-formular>

7.1.2.2. Crearea unui formular cu Form Wizard


În cadrul unei aplicaŃii de tip Wizard, la crearea unui obiect aplicaŃia respectivă
afişează anumite întrebări, urmând ca pe baza răspunsului ales de proiectant să
fie creat un anumit obiect.
Form Wizard funcŃionează după acelaşi principiu şi ca atare va solicita din
partea proiectantului informaŃii privind: tabelele utilizate, denumirea
câmpurilor, modalităŃi de indexare, tipuri de obiecte ce urmează a fi incluse în
formular, etc. Toate întrebările referitor la aceste informaŃii sunt concepute în
cadrul a 4-6 etape după care vom obŃine un formular care poate fi ulterior
modificat.
Pentru crearea unui formular cu Formular Wizard se parcurg următorii paşi:
- se selectează din fereastra Project Manager secŃiunea Forms şi apoi
butonul New care determină deschiderea ferestrei New Form din care
se selectează butonul Form Wizard;
- se selectează din meniul File, opŃiunea New care determină afişarea
ferestrei New din care se selectează butonul radio Form şi apoi
butonul Wizard;
In ambele cazuri prin selectarea butonului Form Wizard sau Wizard in
al doilea caz ,pe ecran se afişează fereastra Wizard Selection cu două opŃiuni:
Form Wizard şi One -To-Many Form Wizard. După selectarea tipului de
formular dorit se acŃionează butonul OK iar pe ecran apare fereastra Form
Wizard.
Prin intermediul celor două opŃiuni se indică tipul de formular ce poate fi creat
cu Form Wizard şi anume:
a - Form Wizard; creează un formular simplu bazat pe un singur tabel în care
se pot efectua operaŃii de afişare înregistrări, de modificare, adăugare şi
ştergere, prin intermediul unui set de butoane de comandă .
b - One-to-Many; creează un formular unu la mai multe, care se bazează pe
două tabele între care se defineşte o relaŃie de tip 1-n. Ca urmare se pot afişa
înregistrări din tabelul părinte şi cele aferente din tabelul fiu.

7.1.3.Adăugarea obiectelor la un formular


101
BAZE DE DATE

Pentru ca un formular să poată fi rulat şi să execute o anumită prelucrare


(încărcarea unui tabel cu date sau actualizarea unui tabel etc.) acesta trebuie să
conŃină diferite controale sau obiecte de control cu proprietăŃile configurate şi
codul sursă asociat evenimentelor.
La un formular se pot adăuga: controale, containere, clase definite de
utilizator şi obiecte OLE. Containerele sunt obiecte care pot conŃine alte
containere sau controale. Astfel, un formular ca şi container poate conŃine
diferite controale (butoane de comandă, casete de validare etc.) Controalele pot
face parte din containere, dar nu pot conŃine alte obiecte, adică nu pot fi părinte
pentru alte obiecte.
Pentru a adăuga un control într-un formular se foloseşte bara cu instrumente
Form Controls. Dacă acesta nu este deschisă şi afişată pe ecran, pentru a o
deschide se selectează din meniul View opŃiunea Form Controls Toolbar.
Această bară conŃine toate obiectele ce pot fi adăugate în cadrul unui
formular sub forma unor pictograme. Pentru a adăuga orice control într-un
formular se execută un clic pe pictograma acestuia de pe bara Form Controls,
după care se execută un clic pe formular în locul unde dorim să fie plasat
obiectul respectiv.

7.2. PROPRIETĂłI ŞI METODE ALE FORMULARELOR

OBIETIVE - cunoaşterea principalelor proprietăŃi şi evenimente


aferente unui formular şi a modului de configurare a
acestuia;
- cunoaşterea structurii ferestrei PROPERTIES şi a
modului de selectare a proprietăŃilor şi metodelor aferente
formularului şi obiectelor incluse în formular;
- cunoaşterea modului de scriere a codului (secvenŃe de
comenzi) pentru evenimentele unui formular;
CUVINTE - fereastra PROPERTIES, caseta OBJECT, pagina
CHEIE METODS, evenimentele INIT, LOAD, SHOW, CLICK.

7.2. ProprietăŃi şi metode ale formularelor; Fereastra Properties

Fereastra Properties este comună formularului şi tuturor obiectelor din formular


creat cu Visual FoxPro. Cu ajutorul acestei ferestre vizualizăm şi configurăm
proprietăŃile şi metodele formularului şi ale obiectelor din formular pe toată
durata proiectării acestuia. La deschiderea unui formular, fereastra Properties va
afişa proprietăŃile şi metode aferente formularului. Pentru a edita sau modifica
aceste proprietăŃi ale formularului sau ale unui alt obiect inclus în formular se va
selecta obiectul din caseta Object.

102
7.2.1. Componentele ferestrei Properties
Fereastra Properties conŃine următoarele componente:
1. Zona pentru proprietăŃi şi metode apare în partea stângă de jos a ferestrei şi
conŃine proprietăŃile şi metodele pentru obiectul curent selectat (lista Properties
and Events).
2. Zona de valori apare în partea dreaptă de jos a ferestrei şi conŃine valorile
aferente proprietăŃilor unui obiect.
3. Taburi (pagini)apar în partea superioară a ferestrei, în număr de cinci şi
permit vizualizarea proprietăŃilor şi metodelor obiectului curent selectat astfel:
dacă se selectează tabul All se afişează toate proprietăŃile şi metodele obiectului
curent, iar dacă este selectat unul din celelalte taburi, se afişează doar un subset
de proprietăŃi sau metode pentru obiectul curent, în funcŃie de denumirea
tabului.
4. Caseta de configurare proprietăŃi (Property setting)această componentă,
numită şi cutie de editare se află deasupra zonei dreptunghiulare care conŃine
proprietăŃile şi metodele pentru obiectul curent selectat şi afişează valoarea
proprietăŃii selectate.
5. Caseta de obiecte (Object) conŃine denumirea obiectului curent selectat, cu
care lucrăm la un moment dat. Prin execuŃia unui clic pe pictograma aferentă
formularului se afişează într-o listă toate obiectele incluse în formular sub forma
unei ierarhii specifice platformei Windows.

103
BAZE DE DATE

7.2.2. Configurarea proprietăŃilor şi metodelor unui formular în


timpul proiectării

Fereastra Properties afişează la deschidere proprietăŃile şi metodele


obiectului curent selectat. Pentru a edita proprietăŃile sau metodele altui
obiect, mai întâi se va selecta obiectul respectiv în caseta Object. In
cadrul ferestrei Properties se va selecta apoi proprietatea sau metoda ce
urmează a fi modificată din lista Property and Events şi se tastează noua
valoare în cutia de editare Property Setting în cazul unei proprietăŃi.
Dacă modificăm codul unei metode după selectarea metodei se execută
un dublu clic pe metoda respectivă având ca efect afişarea ferestrei
aferentă metodei în care se poate modifica codul existent sau introduce alt
cod, după care fereastra se închide revenindu-se în fereastra Properties.
Fereastra aferentă metodei de modificat se poate deschide şi prin
selectarea opŃiunii Code din meniul Window. Pentru a trece de la o
procedură la alta, în cadrul ferestrei de editare, se pot folosi tastele PgUp
sau PgDn.
La selectarea şi configurarea proprietăŃilor sau metodelor unui obiect se
au în vedere următoarele aspecte:
1. proprietăŃile protejate la scriere (Read only) sunt scrise în zona Property
and Events cu caractere italice în timp ce proprietăŃile read-write sunt scrise
cu caractere normale.valorile implicite ale proprietăŃilor apar scrise cu litere
normale (Regular) iar valorile modificate de utilizator cu litere îngroşate
(Bold). In cazul metodelor modificate, în dreptul acestora apare scris cu litere
îngroşate, expresia: [User Procedure].
2. pentru a readuce o metodă sau proprietate modificată la valoarea iniŃială,
înainte de a acŃiona tasta Enter se va putea folosi opŃiunea Reset to Default
din meniul Shortcut al obiectului respectiv.
4 - în cadrul ferestrei Properties putem atribui proprietăŃilor valori rezultate în
urma evaluării unor expresii sau funcŃii, prin introducerea, în caseta de
editare, a semnului egal urmat de expresia sau funcŃia respectivă . Exemplu,
pentru textul reprezentând titlul unei ferestre (proprietatea Caption) putem
introduce în caseta de editare expresia:= ALIAS() pentru a obŃine ca text
numele fişierului curent selectat.
o proprietate se poate configura şi în cadrul metodei aferente unui obiect. De
exemplu: în metoda Init a formularului putem schimba textul formularului
astfel:
This. Caption=Proc1()
6 - după definirea (modificarea) proprietăŃilor unui formular, acestea devin
efective, cu excepŃia cazului în care proprietatea Visible are valoarea .F.

7.2.3. Definirea aspectului exterior al unui formular

104
Principalele caracteristici ale unui formulae referitoare la aspectul
exterior sunt cele privind poziŃia formularului pe ecran şi dimensiunea acestuia.
Definirea dimensiunii şi poziŃiei unui formular se realizează prin
intermediul următoarelor proprietăŃi:
1.Top şi Left - permit definirea poziŃiei pentru colŃul din stânga sus al ferestrei
formularului. In mod implicit, Visual FoxPro plasează un formular nou în
colŃul din stânga sus al ferestrei constructorului de formulare (Top=0, Left=0)
2.AutoCenter - determină poziŃionarea formularului în centrul ferestrei
constructorului de formulare, dacă proprietatea AutoCenter are valoarea .T.,
fără a Ńine cont de valorile proprietăŃilor Left şi Top.
3.Hight şi Width - definesc dimensiunea unui formular, respectiv înălŃimea şi
lungimea acesteia, exprimate în pixeli.
3. AlwayOnTop - indică dacă un formular este afişat deasupra celorlalte
ferestre deschise. Valoarea implicită este .F.

Alte proprietăŃi referitoare la aspectul unui formular sunt următoarele:


1 - Caption - reprezintă titlul formularului sau textul care apare pe bara de titlu
şi care implicit are aceeaşi valoare cu numele formularului definit prin
proprietatea Name.
2 - Bordstyle - defineşte chenarul unui formular prin intermediul a patru valori
astfel:
3 - BackColor şi ForeColor - definesc culoarea pentru fond în cadrul
formularului (BackColor) şi respectiv pentru scris (ForeColor). Aceste
proprietăŃi pot fi modificate prin selectarea culorii dorite din fereastra Color
Palette sau din fereastra Color care se afişează pe ecran prin execuŃia unui
dublu clic pe proprietatea BackColor sau ForeColor din fereastra Properties.

7.2.4. Configurarea metodelor şi proprietăŃilor unui formular prin


comenzi

Pentru a configura proprietăŃile sau metodele unui obiect prin comenzi, acesta
trebuie mai întâi identificat în raport cu iararhia containerului din care face
parte. Acest lucru se realizează în cazul formularului, prin intermediul unei
variabile, la care se va face referinŃă pentru configurarea unei proprietăŃi.
Variabila obiect pentru formular este chiar numele fişierului .scx.
ProprietăŃile sau metodele pot fi configurate prin intermediul referinŃelor la
obiect, şi proprietate sau metodă , separate prin punct, astfel:

Container. obiect..proprietate = valoare variabilă -obiect.control.metodă

105
BAZE DE DATE

7.2.4.1. Scrierea codului pentru evenimentele/metodele unui


formular

Fiecare obiect se caracterizează prin atributele stare şi comportament. Starea


unui obiect se defineşte prin proprietăŃile sale, iar comportamentul prin
metodele pe care pe poate executa şi evenimentele la care poate răspunde.
In condiŃiile programării orientate pe obiect şi condusă de evenimente,
utilizatorul este cel care controlează programul. Prin urmare, programul aşteaptă
ca utilizatorul să facă ceva (apăsarea unei taste, execuŃia unui clic cu mouse-ul)
urmând ca programul să răspundă la evenimentul respectiv prin declanşarea
unor operaŃii de prelucrare.
La apariŃia unui eveniment programul va executa codul metodei asociate
evenimentului respectiv. Pentru fiecare obiect inclus într-un formular cât şi pentru
formularul respectiv, metodele şi evenimentele aferente apar în fereastra
Properties, pagina Methods. Pentru a ataşa cod în cadrul unei metode aferentă
unui obiect, se selectează mai întâi obiectul, iar în pagina Methods din fereastra
Properties se vor afişa toate metodele şi secvenŃele asociate obiectului
respectiv, fiecare cu valoarea [Default], ceea ce înseamnă că fereastra de cod a
metodei respective este vidă .
Pentru a deschide fereastra de cod a obiectului selectat se execută dublu clic pe
metoda respectivă sau se selectează opŃiunea Code din meniul shortcut al
formularului sau din submeniul View. Fereastra aferentă codului unei metode
are următoarea structură :
In caseta Object va apare obiectul selectat. Prin acŃionarea butonului din dreapta
casetei se va deschide o listă derulantă conŃinând toate obiectele incluse în
formular.
In partea dreaptă a ferestrei apare caseta Procedure care conŃine metoda pentru
care se va scrie cod şi în acest caz prin acŃionarea butonului cu săgeată în jos
apar metodele şi evenimentele asociate obiectului selectat.

7.2.4.2. Principalele evenimente şi metode la nivel de formular

Pentru un formular există anumite evenimente la care acesta poate răspunde şi


pentru care utilizatorul trebuie să introducă comenzi (secvenŃe de cod) în cadrul
metodelor asociate evenimentelor respective.
Alegerea metodelor în care se va introduce cod, se face în funcŃie de tipul de
obiect şi de momentul în care se lansează (apelează ) metoda respectivă şi
presupune cunoaşterea de către proiectant a evenimentelor la care formularul şi
obiectele incluse în formular poate răspunde.
Principalele metode asociate comportamentului unui formular şi obiectelor
incluse în formular sunt următoarele:
1. Init; această metodă este apelată la crearea formularului având rolul de
iniŃializare a acesteia. In acelaşi timp fiecare obiect inclus în formular poate
106
avea metoda sa Init proprie. Aceasta este apelată atunci când se creează
obiectul la rularea formularului.
2. Load; este apelată imediat după crearea unui formular, dar înaintea metodei
Init şi altor metode. Ca urmare, în cadrul acestei metode se pot include
comenzi de deschidere a bazei de date, a tabelelor şi de iniŃializare a unor
variabile de lucru.
3. Unload; este apelată la terminarea programului şi permite transmiterea
parametrilor din cadrul formularului către programul apelant prin comanda
RETURN cu sintaxa RETURN <variabilă >.
4. Show; permite afişarea pe ecran a unei formulare anterior creată . Dacă pe
ecran se afişează mai multe formulare una singură este activă , în sensul că
reprezintă pentru utilizator Ńinta intrărilor.
5. GotFocus; trecerea controlului de la o formulară la alta sau în cadrul
aceluiaşi formular de la un obiect la altul, este controlată de evenimentele
GotFocus (preluare control) şi respectiv LostFocus (pierdere control).
6. SetFocus; permite transferul controlului de la un formular la altul sau de la
un obiect la altul, în cadrul aceluiaşi formular, atunci când trecerea are loc
prin comenzi introduse în cadrul altor metode.
7. Valid; este una din metodele frecvent utilizate şi permite execuŃia unei
secvenŃe de comenzi la trecerea de la un obiect la altul în cadrul
formularului. Metoda este deci apelată la părăsirea unui obiect si în funcŃie
de valoarea returnată de expresie logică din cadrul comenzilor din Valid, se
permite sau nu trecerea la obiectul următor.
8. Refresh; conŃine comenzi pentru reâmprospătarea valorii obiectelor din
cadrul formularului ca urmare a unor modificări efectuate cu aceste valori.
Exemplu: la calculul stocului ca urmare a unor operaŃii de intrare/ieşire în
metoda Valid a câmpurilor Intrări şi respectiv Ieşiri se va introduce
comanda. Refresh iar în cadrul metodei Refresh aferenta câmpului Stoc vom
introduce comanda Stoc=Stoc+Intrări-Ieşiri
9. Release; se apelează la terminarea programului şi are rolul de a descărca
(şterge) formularului din memorie. Astfel dacă avem în cadrul formularului
un buton de ieşire, în metoda Click aferentă ,vom apela metoda Release,
eventual după închidereabazei de date, astfel:
CLOSE DATABASES
THISFORM.RELEASE
10. Click; este de asemenea una dintre metodele cel mai frecvent utilizate,
fiind asociată atât butoanelor de comandă cât şi câmpurilor de preluare
date din cadrul unui formular. De exemplu la execuŃia unui clic pe un
buton de ieşire se va introduce în metoda Click aferentă butonului
comenzile de afişare mesaj terminare program şi comanda de ştergere
a formularului (Release).

107
BAZE DE DATE

7.2.4.3. Salvarea şi rularea unui formular

După construirea unui formular acesta se salvează ca orice fişier, prin selectarea
opŃiunii SAVE din File prin care se afişează fereastra Save As în care se
introduce numele fişierului reprezintând formularul. De asemenea pentru
salvarea formularului se poate selecta iconul aferent de pe bara de instrumente
standard.
Dacă se închide un formular înainte de salvare se va afişa o casetă de dialog în
care se cere confirmarea modificărilor după care pe ecran apare fereastra Save
As. Dacă se doreşte salvarea formularului ca definiŃie de clasă se va selecta
opŃiunea Save as Class din File.
Pentru lansarea în execuŃie a unui formular se pot folosi următoarele procedee:
1. - în fereastra Project Manager se selectează pagina Documents şi apoi
opŃiunea Forms. Din cadrul secŃiunii respective se selectează denumirea
formularului şi se acŃionează butonul Run.
2. - din submeniul Form (care apare la afişarea unui formular pe ecran) se
selectează opŃiunea Run Form (CTRL+E).
3. - de pe bara de instrumente standard se selectează pictograma de lansare
formular (!) sau se tastează comanda: DO FORM <nume-formular>

Pentru închiderea formularului activ se pot folosi următoarele variante:


• se execută un clic pe butonul de închidere al formularului;
• se selectează opŃiunea CLOSE din meniul de control al formularului;
• se introduce comanda RELEASE în fereastra de comenzi sau în program,
• codul metodei sau evenimentului Click a unui buton de ieşire
astfel:Thisform.Release

108
7.3. DESCRIEREA ŞI UTILIZAREA OBIECTELOR GRAFICE

OBIECTIVE 1. Cunoaşterea principalelor obiecte grafice folosite în cadrul


unui formular şi legătura lor cu sursa de date;
2. Cunoaşterea proprietăŃilor şi evenimentelor pentru
principalele tipuri de obiecte ale unui formular şi a
modului de configurare a acestora.
CUVINTE OPTION GRUP
CHEIE LIST BOX
DROP DOWN
CHECK BOX
COMBO BOX
TEXT BOX
COMMAND BUTTON.

7.3.1. Descrierea şi utilizarea obiectelor grafice

Obiectele grafice folosite în Visual Fox pot fi clasificate după mai multe criterii:
1- după posibilitatea de a include alte obiecte:
- obiecte container
- obiecte simple
2- după faptul dacă sunt sau nu vizibile pe ecran la execuŃie:
- obiecte vizuale
- obiecte non-vizuale
3- după posibilitatea de a avea legătură cu datele de prelucrat:
- obiecte legate de date
- obiecte nelegate de date
4- după modul de utilizare
- formuri
- controale
Aceste clasificări de ordin general sunt aplicabile oricăror obiecte grafice şi
implicit claselor din care fac parte. Pornind de la faptul că Visual Fox este un
sistem de gestiune a datelor, un rol important îl are clasificarea în obiecte legate
sau nelegate de date. Prin acŃionarea asupra unui obiect legat de date, valoarea
pe care acest tip de obiect o memorează este stocată în sursa de date (tabel,
variabilă de memorie, etc.). Legarea unui obiect de acest tip cu sursa de date se
face setând proprietatea: Control Source sau Record Source. Această
proprietate memorează sursa de date la care este legat un obiect. Astfel, dacă
avem pe ecran un obiect de tip TextBox iar proprietatea ControlSource are
valoarea Angajat. Salar, atunci valoarea afişată pe ecran pentru obiectul
TextBox (câmp editare) va fi valoarea câmpului Salar din tabela Angajat. Orice
modificare a valorii obiectului va determina automat şi modificarea acesteia din
109
BAZE DE DATE

sursa de date. Valoarea proprietăŃii ControlSource poate fi şi numele unei


variabile de memorie, a cărei valoare se va afişa în câmpul de editare a
obiectului.
In acelaşi timp valoarea respectivă din sursa de date este memorată într-o zonă
aferentă unei proprietăŃi a obiectului numită Value. Aceasta se poate numi
valoarea obiectului, ea fiind valoarea pe care obiectul o înmagazinează.
Atribuind o valoare acestei proprietăŃi vom putea modifica valoarea câmpului
din sursa de date.
Dacă acŃionăm asupra unui obiect care nu este legat cu o sursă de date,
proprietatea Value este singura care se schimbă. După execuŃia formularului din
care face parte obiectul, valoarea respectivă se pierde. Legătura dintre obiectul
şi sursa de date se face în funcŃie de tipul de obiect. Ca urmare tipul de date din
sursă depinde de tipul de obiect. Astfel un obiect de tip CheckBox nu poate fi
pus în legătură cu o sursă de date de tip caracter deoarece el acceptă valori
logice.

7.3.2. Punerea la dispoziŃia utilizatorului a unui set de opŃiuni


predefinite

In cazul introducerii de date într-o tabelă printr-un formular, există posibilitatea


selectării, pentru anumite câmpuri a valorii prestabilite a acestora dintr-o tabelă
de tip nomenclator. Astfel de date se pot referi la: nume client, adresă client,
adresă furnizor etc. Aceste date, care sunt finite, deoarece şi agenŃii comerciali
ai unei firme sunt în număr finit, sunt memorate într-o tabelă separată . La
încărcarea unei tabele care necesită astfel de date, în loc să introducem aceste
date manual pentru fiecare agent comercial, vom folosi un obiect de tip ComboBox care
conŃine anumite câmpuri din tabela secundară .
Prin selectarea unor câmpuri din acest obiect, datele aferente sunt introduse
automat în tabela care se încarcă. In felul acesta se oferă utilizatorului un set de
opŃiuni predeterminate. Acest mod de lucru asigură un control automat al
datelor de intrare, în sensul că în baza de date vor fi introduse numai date valide.
Pentru acest tip de introducere de date, putem folosi următoarele obiecte:
1. Grup de butoane de opŃiuni (Option Group)
2. Casete cu listă şi liste derulante (ListBox, DropDown, ListBox)
3. Casete de validare (CheckBox)

7.3.3. Utilizarea grupurilor de butoane de opŃiuni (Option Group)

Grupurile de butoane de opŃiuni, reprezintă obiecte de tip container şi conŃin


butoane de opŃiuni sau butoane radio. Ele permit utilizatorului alegerea unei
opŃiuni din mai multe variante posibile şi nu introducere de date. Astfel, putem
folosi un grup de butoane pentru a specifica modul de afişare a datelor unor
prelucrări (la imprimantă, pe ecran, într-un fişier) sau pentru a selecta anumite

110
înregistrări dintr-un tabel (prima, ultima, următoarea, precedenta).
Un grup de butoane de opŃiuni, se reprezintă pe ecran sub forma unui
dreptunghi care conŃine două sau mai multe cerculeŃe urmate fiecare de câte un
text. Fiecare cerculeŃ poate conŃine punct sau spaŃiu în funcŃie de faptul dacă
butonul a fost sau nu selectat. Grupul de butoane de opŃiuni poate apare şi sub
forma unui grup de butoane de comandă textul cu numele butonului fiind afişat
pe butonul respectiv.
Cea mai importantă dintre proprietăŃi este ButtonCount, care se defineşte
înainte de a eticheta butoanele individuale din cadrul grupului şi reprezintă
numărul de butoane din grup. Prin modificarea acestei proprietăŃi utilizatorul
poate include în grup numărul de butoane dorit.
O altă proprietate importantă este Value, care indică la nivelul grupului de
butoane, numărul de ordine al butonului selectat. La afişarea pe ecran a
grupului de butoane, dacă proprietatea Value are valoarea 1, atunci primul buton
apare selectat, dacă are valoarea 2, al doilea buton apare selectat, etc.
Proprietatea Value la nivelul unui buton, dacă are valoarea 0 indică buton
neselectat, iar 1 sau altă valoare indică buton selectat. Fiecare buton din grup
poate avea una din cele două valori. La rularea programului, în momentul
selectării unui buton celelalte se deselectează automat.
O altă proprietate este Control Source prin care se face legătura cu o sursă de
date (câmp sau variabilă ). La nivel de grup, câmpul sau variabila va conŃine fie
numărul de ordine al butonului selectat fie prompterul acestuia (textul aferent
butonului selectat) în funcŃie de tipul câmpului sau variabilei. Textul aferent
fiecărui buton din grupul de butoane este memorat de proprietatea Caption.

7.3.4. Utilizarea casetelor de validare (CheckBox)

Aceste obiecte se folosesc pentru a specifica o stare cum ar fi: adevărat sau fals,
activat sau fals, activat sau dezactivat, deschis sau închis, fiind reprezentate pe
ecran printr-o casetă care poate conŃine un simbol de bifare sau spaŃiu, în funcŃie
de selectarea sau nu a obiectului, urmate de un text.
In cadrul unui form putem defini mai multe obiecte de acest tip din care
utilizatorul poate selecta la un moment dat unul, mai multe, toate sau niciunul.
Atunci când utilizatorul selectează o casetă de validare în interior apare semnul
de bifare. Ca şi în cazul butoanelor de opŃiuni, casetele de validare pot apare în
formă grafică, respectiv sub formă de butoane având afişat pe buton titlul sau o
imagine, prin setarea proprietăŃii Style.

7.3.4.1. Utilizarea casetelor cu listă şi listă derulantă (List Box şi


Dropdown List Box)

Casetele cu listă (ListBox) şi cele cu listă derulantă (Dropdown List) conŃin


elemente de un anumit tip, afişate parŃial sau total pe ecran, într-un dreptunghi.
111
BAZE DE DATE

Intr-o casetă cu listă (ListBox) sunt vizibile toate sau o parte din elementele
listei, în timp ce într-o listă derulantă (Dropdown List), în starea neactivată ,
este vizibil un singur element, cel curent selectat. Prin execuŃia unui clic pe
butonul cu săgeată în jos din dreapta casetei, se afişează o listă derulantă , cu
toate elementele casetei.
Lista derulantă sau expandabilă reprezintă un obiect ComboBox şi este de două
feluri în funcŃie de proprietatea Style a obiectului:
- cu posibilitatea de completarea manuală a elementului de selectat. Aceasta
permite pe lângă selectarea unui anumit element din listă după expandare,
introducerea manuală, prin tastare în cadrul casetei, în locul elementului
curent selectat a valorii noului element care devine curent selectat
(proprietatea Style=0 Dropdown Combo).
- cu selectarea elementului dorit din lista expandată , fără posibilitatea de a
introduce date. (Style=2 Dropdown ListBox). Casetele cu listă (ListBox) se
utilizează în cazul în care există spaŃiu suficient pe form şi dorim să mărim
perspectiva utilizatorului asupra datelor din care trebuie să aleagă, în caz
contrar, pentru a face economie de spaŃiu se va folosi o listă derulantă
(Dropdown ListBox).
Caracteristica principală a celor două tipuri de liste constă în faptul că ele oferă
utilizatorului un set de opŃiuni predefinite, din care acesta poate selecta opŃiunea
sau opŃiunile dorite. In acest fel se simplifică în mod considerabil proceduta de
introducere date la încărcarea tabelelor din baza de date, prin faptul că
utilizatorul selectează din listă datele necesare, în loc să introducă manual fiecare
valoare. Introducerea manuală a datelor, pe lângă faptul că necesită timp, măreşte
probabilitatea de introducere a unor date eronate.

7.3.4.2. Introducerea datelor ce nu pot fi predeterminate

In cazul în care utilizatorul nu poate anticipa valorile ce urmează a fi preluate


în cadrul unui obiect de control se pot folosi următoarele controale:
- casete de text
- casete de editare
- casete combinate.

7.3.4.3. Utilizarea casetelor de introducere text (TextBox)

Casetele de text, reprezintă unul din cele mai importante obiecte de interfaŃă
utilizate în cadrul programelor de introducere date, deoarece permit preluarea
oricărui tip de date cu excepŃia celor de tip Memo şi General. Prin intermediul
lor utilizatorul poate adăuga sau modifica datele unor câmpuri din înregistrările
unui tabel. Valoarea afişată în casetă este stocată în variabila sau câmpul asociat
casetei definit prin proprietatea Control Source, cât şi în zona aferentă
proprietăŃii Value aferentă casetei.

112
7.3.4.4. Crearea unei casete de text
Crearea acestui obiect se face prin selectarea butonului aferent de pe bara cu
instrumente standard şi trasarea cu mouse-ul a zonei ocupate de obiect pe
suprafaŃa formularului. După definirea obiectului se setează proprietăŃile
acestuia şi se defineşte conŃinutul metodelor asociate evenimentelor pentru
caseta de text.
O modalitate mai simplă de creare şi configurare a proprietăŃilor unei casete de
text o reprezintă utilizarea instrumentului TextBox Builder. Lansarea acestuia
se poate face prin selectarea de pe bara de instrumente standard a pictogramei
aferente sau prin selectarea opŃiunii Builder din meniul Shortcut al obiectului.

7.3.4.5. Preluarea datelor cuprinse într-un interval dat (casete cu


butoane de incrementare-decrementare (Spinnere)

Prin utilizarea acestui obiect, utilizatorul are posibilitatea controlului asupra


datelor introduse în prelucrare, în sensul încadrării lor într-un anumit interval.
Acest obiect se foloseşte, în special, în cazul datelor numerice. Utilizatorul
poate alege valoarea de introdus, fie prin acŃionarea unor butoane, fie prin
tastarea valorii datei respective. Obiectul de tip Spinner apare ca şi un câmp de
editare cu două butoane, unul de incrementare, altul de decrementare, plasate în
partea dreaptă a câmpului de editare (casetei).
Prin acŃionarea butonului de incrementare sau decrementare, cu ajutorul mouse-
ului, are loc creşterea sau descreşterea valorii din câmpul de editare, cu o
valoare fixă stabilită de utilizator. Valoarea minimă şi respectiv maximă a
câmpului de editare cât şi cea cu care se modifică cele două valori se stabilesc la
proiectarea formului care conŃine obiectul de tip Spinner.
Acest obiect se poate utiliza pentru introducerea de date într-un câmp din cadrul
unei tabele, sau ar putea reprezenta valoarea indicatorului de înregistrări dintr-o
tabelă, în vederea poziŃionării pe înregistrarea respectivă, pentru modificare sau
ştergere.

7.3.4.6. Butoane de comandă (Command Button)

Butoanele de comandă constituie unul dintre cele mai frecvent utilizate obiecte
de interfaŃă care apar în cadrul unui form. Ele se afişează pe ecran sub forma
unui dreptunghi tridimensional, conŃinând în interiorul său un text sau o
imagine.
Textul scris pe buton se defineşte prin proprietatea Caption ca la orice obiect de
control, iar imaginea prin proprietatea Picture şi reprezintă un fişier .BMP sau
.ICO.

113
BAZE DE DATE

In cadrul unui formular se pot defini două tipuri de butoane: simple şi implicite.
La nivelul unui formular se poate defini un singur buton implicit şi unul sau mai
multe butoane simple.
Butonul implicit este activat automat la apăsarea tastei Enter sau spaŃiu,
indiferent de poziŃia cursorului. Pentru a defini un buton de tip implicit va trebui
ca proprietatea Default să aibă valoarea adevărat (.T.). Pe ecran, un astfel de
buton apare cu marginea din dreapta şi de jos îngroşate. Prin apăsarea tastei
Enter se va executa automat codul din cadrul metodei asociate evenimentului
Click a butonului respectiv.
Selectarea unui astfel de buton se realizează prin execuŃia unui clic pe butonul
respectiv. Evenimentul cel mai frecvent aferent unui astfel de control este Click
Event. Ca urmare, codul pentru acŃiunile de executat la activarea unui buton de
comandă se introduc în metoda Click asociată evenimentului Click Event.

114
REZUMAT Formularul poate fi considerat ca o fereastră având toate atributele
unei ferestre sub Windows: bara de titlu, caseta meniului de control,
butoane de minimizare, maximizare, închidere. In plus, acestea
reprezintă în Visual FoxPro un obiect având ca toate celelalte
obiecte, proprietăŃi, metode şi evenimente asociate. Acestea definesc
aspectul exterior al formulare şi determină în acelaşi timp
comportamentul acestuia în diverse situaŃii.

ModalităŃi de creare a unui formular


Crearea unui formular se poate realiza în unul din următoarele
moduri:
- prin intermediul comenzilor limbajului Visual FoxPro
- prin intermediul utilitarului Form Designer
- prin intermediul utilitarului Form Wizard

Adăugarea obiectelor la un formular


Pentru ca un formular să poată fi rulat şi să execute o anumită
prelucrare (încărcarea unui tabel cu date sau actualizarea unui tabel
etc.) acesta trebuie să conŃină diferite controale sau obiecte de
control cu proprietăŃile configurate şi codul sursă asociat
evenimentelor.
La un formular se pot adăuga: controale, containere, clase definite
de utilizator şi obiecte OLE. Containerele sunt obiecte care pot
conŃine alte containere sau controale. Astfel, un formular ca şi
container poate conŃine diferite controale (butoane de comandă,
casete de validare etc.) Controalele pot face parte din containere, dar
nu pot conŃine alte obiecte, adică nu pot fi părinte pentru alte
obiecte.
Pentru a adăuga un control într-un formular se foloseşte bara cu
instrumente Form Controls. Dacă acesta nu este deschisă şi afişată
pe ecran, pentru a o deschide se selectează din meniul View
opŃiunea Form Controls Toolbar. Bara Form Controls, ca de altfel
toate barele de instrumente, este mobilă ; prin urmare ea poate fi
deplasată pe ecran în locul dorit. De obicei, aceasta se plasează în
marginea ecranului pentru a rămâne liberă suprafaŃa formularului.
Prin plasarea barei pe marginea ecranului aceasta se transformă într-
o linie verticală sau orizontală, operaŃia de mutare fiind numită
ancorare.

Fereastra Properties
Fereastra Properties este comună formularului şi tuturor obiectelor
115
BAZE DE DATE

din formular creat cu Visual FoxPro. Cu ajutorul acestei ferestre


vizualizăm şi configurăm proprietăŃile şi metodele formularului şi
ale obiectelor din formular pe toată durata proiectării acestuia. La
deschiderea unui formular, fereastra Properties va afişa proprietăŃile
şi metode aferente formularului. Pentru a edita sau modifica aceste
proprietăŃi ale formularului sau ale unui alt obiect inclus în formular
se va selecta obiectul din caseta Object.

Configurarea proprietăŃilor şi metodelor unui formular


în
timpul proiectării
Fereastra Properties afişează la deschidere proprietăŃile şi metodele
obiectului curent selectat. Pentru a edita proprietăŃile sau metodele
altui obiect, mai întâi se va selecta obiectul respectiv în caseta
Object. In cadrul ferestrei Properties se va selecta apoi proprietatea
sau metoda ce urmează a fi modificată din lista Property and
Events şi se tastează noua valoare în cutia de editare Property
Setting în cazul unei proprietăŃi.

Scrierea codului pentru evenimentele/metodele unui


formular
Fiecare obiect se caracterizează prin atributele stare şi
comportament. Starea unui obiect se defineşte prin proprietăŃile
sale, iar comportamentul prin metodele pe care pe poate executa şi
evenimentele la care poate răspunde.
Pentru a ataşa cod în cadrul unei metode aferentă unui obiect, se
selectează mai întâi obiectul, iar în pagina Methods din fereastra
Properties se vor afişa toate metodele şi secvenŃele asociate
obiectului respectiv, fiecare cu valoarea [Default], ceea ce înseamnă
că fereastra de cod a metodei respective este vidă .
Pentru a deschide fereastra de cod a obiectului selectat se execută
dublu clic pe metoda respectivă sau se selectează opŃiunea Code din
meniul shortcut al formularului sau din submeniul View.

Principalele evenimente şi metode la nivel de formular


Principalele metode asociate comportamentului unui formular şi
obiectelor incluse în formular sunt următoarele:
1. Init; această metodă este apelată la crearea formularului având
rolul de iniŃializare a acesteia.
2. Load; este apelată imediat după crearea unui formular, dar
înaintea metodei Init şi altor metode.
3. Unload; este apelată la terminarea programului şi permite

116
transmiterea parametrilor din cadrul formularului către programul
apelant prin comanda RETURN.
4. Show; permite afişarea pe ecran a unei formulare anterior creată .
5. GotFocus; trecerea controlului de la un formular la altul.
6. SetFocus; permite transferul controlului de la un formular la altul.
7. Valid; este una din metodele frecvent utilizate şi permite execuŃia
unei secvenŃe de comenzi la trecerea de la un obiect la altul în cadrul
formularului.
8. Refresh; conŃine comenzi pentru reâmprospătarea valorii
obiectelor din cadrul formularului ca urmare a unor modificări
efectuate cu aceste valori.
9. Release; se apelează la terminarea programului şi are rolul de a
descărca (şterge) formularului din memorie.
10. Click; este de asemenea una dintre metodele cel mai frecvent
utilizate, fiind asociată atât butoanelor de comandă cât şi câmpurilor
de preluare date din cadrul unui formular
11. RelaŃionarea tabelelor din baza de date
In Visual FoxPro relaŃiile pe care le creăm între tabele cu ajutorul
Constructorului bazei de date (Database Designer) se numesc relaŃii
persistente. In afara acestora se pot defini şi relaŃii temporare sau
dinamice prin comenzi introduse în programele de prelucrare. Ca
urmare relaŃiile temporare sunt disponibile numai în momentul
rulării programului în care au fost definite după care ele nu mai
există.
Tabelele între care se creează o relaŃie se numesc: tabelă principală
sau părinte şi respectiv tabelă secundară sau fiu.
Intre cele două tabele se pot defini următoarele tipuri de
relaŃii:
- relaŃie una-la-una; prin care unei înregistrări din tabela părinte îi
corespunde o singură înregistrare în tabela fiu (copil);
- relaŃii una-la-mai-multe; prin care unei înregistrări din tabela
părinte îi corespund mai multe înregistrări în tabela copil;
- relaŃie mai-multe la-una; prin care pentru o înregistrare în tabela
copil putem avea mai multe înregistrări în tabela părinte;
- relaŃie mai-multe-la-mai-multe; prin care unei înregistrări din
tabela părinte îi pot corespunde mai multe înregistrări în tabela
copil şi invers adică unei înregistrări din tabela copil îi pot
corespunde mai multe înregistrări în tabela părinte.
12. Asigurarea integrităŃii datelor din tabelele legate între ele
prin relaŃii permanente
Printre mecanismele care asigură integritatea bazei de date se
numără şi cele privind integritatea entităŃilor şi integritatea
117
BAZE DE DATE

referenŃială.
Integritatea entităŃilor este implementată prin specificarea în
cadrul unei tabele, a faptului că nu pot accepta valori nule câmpurile
care reprezintă chei primare.
13. Integritatea referenŃială (referenŃial integrity-RI) defineşte un
ansamblu de reguli, care permit menŃionarea integrităŃii datelor din
tabelele legate între ele, la operaŃiile de modificare, adăugare şi
ştergerea datelor din tabelele respective, astfel încât să nu existe
înregistrări neparticipante la relaŃie. Implementarea acestor reguli
între tabele se realizează prin intermediul unor restricŃii numite
restricŃii pentru integritate referenŃială (RI – constraints).
14. Specificarea restricŃiilor de integritate referenŃială şi generarea
automată a procedurilor aferente se realizează prin intermediul
Generatorului de Integritate ReferenŃială (Referential Integrity
Builder). Aceasta permite, de asemenea, precizarea tabelelor părinte
şi fiu din cadrul unei relaŃii şi a evenimentelor din sistem care impun
mediului Visual FoxPro să verifice regulile definite.
TEME 1. Se vor elabora programe de folosire a comenzilor de
CONTROL implementare a structurilor de control şi a comenzilor de
intrare/ieşire;
2. Se vor elabora programe de creare şi utilizare a clasei form şi a
obiectelor de tip buton de comandă.
BIBLIOGRA 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St., Tomai N.
FIE Baze de date şi programarea calculatoarelor utilizând limbajul
Visual FoxPro, Ed. Risoprint, Cluj-Napoca, 2003, pg. 259-307.
2. Marian Cristescu, Baze de date utilizate în mediul economic,
Editura ”ALMA MATER”, Sibiu, 2007, pg. 286-297
3. Gabriel Dima ,Mihai Dima, Bazele Visual FoxPro 5.0, Editura
Teora ,Bucuresti,1999, pag . 205-308.
4. Marin Fotache,Ioan Brava, Cătălin Strâmbei, Liviu CreŃu, Visual
FoxPro; Ghidul dezvoltării aplicaŃiilor profesionale, Editura Polirom
Iaşi, 2002, pag. 253-286.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean, Dezvoltarea
aplicaŃiilor cu baze de date în Visual FoxPro, Editura All, Bucureşti,
2001, pag. 240-277.
6. Paul Petruş, Visual FoxPro 5.0, Editura Promedia, Cluj, 1999,
pag. 280-408.
7. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe, Editura
Risoprint Cluj, 2003, pag. 70-82.

118
8. RAPOARTE ŞI MENIURI

CONCEPTE -
Raport din punct de vedere conceptual
DE BAZA -
Componentele unui raport în VFP
-
Controalele raportului
-
Constructorul de rapoarte
-
Gestiunea rapoartelor (creare, modificare, exploatare
şi ştergere)
- AsistenŃi pentru gestiunea rapoartelor şi utilizarea lor;
- Meniuri şi rolul lor;
- Fereastra constructorului de meniuri;
- OpŃiunile posibile la generarea meniurilor şi
submeniurilor;
- Crearea şi modificarea meniurilor;
- Exploatarea meniurilor.
OBIECTIVE 1. Familiarizarea cu semantica generală legată de
rapoarte.
2. Familiarizarea cu structura rapoartelor din Visual
FoxPro.
3. Formarea deprinderilor de creare şi utilizare a
rapoartelor.
4. Familiarizarea cu noŃiunea de meniu şi elementele sale
componente
5. Crearea abilităŃii de creare şi utilizare meniurilor în
Visual FoxPro.
RECOMANDĂRI 5. Se vor proiecta din punct de vedere conceptual machete
PRIVIND de rapoarte şi de meniuri.
STUDIUL 6. Se vor studia cu atenŃie constructorii celor două
categorii.
7. Se vor crea diferite rapoarte şi meniuri pentru aplicaŃii
economice.
8. Se vor testa operaŃiile şi opŃiunile referitoare la
managementul celor două categorii.
REZULTATE După parcurgerea acestui modul utilizatorul trebuie să fie
ASTEPTATE în măsură să definească şi folosească corect rapoartele şi
meniurile şi să implementeze pe baza lor aplicaŃii
complexe din informatica economică şi de afaceri.

119
BAZE DE DATE

8.1. RAPOARTE ÎN VISUAL FOXROO

OBIECTIVE 1. Familiarizarea cu semantica generală legată de rapoarte.


2. Familiarizarea cu structura rapoartelor din Visual
FoxPro.
3. Formarea deprinderilor de creare şi utilizare a
rapoartelor
NOłIUNI - Raport
CHEIE - Componentele unui raport în VFP
- Controalele raportului
- AsistenŃi şi utilizarea lor

În literatura de specialitate există definiŃii mai mult sau mai puŃin formalizate
ale acestui obiect.
“Raport – prezentarea informaŃiilor referitoare la o anumită temă. efectuată
obicei într-o formă tipărită. … Programele de baze de date pot oferi funcŃii
speciale de creare şi generare de rapoarte” [Microsoft99].
“Raportul este o extragere a datelor din baza de date. El poate fi tipărit pe
ecranul calculatorului, sau pe orice alt dispozitiv de ieşire” [Kroenke92].
Orice raport are ataşate 2 fişiere. O tabelă sistem specială cu extensia .FRX, în care sunt
memorate specificaŃiile raportului, adică caracteristicile raportului şi elementele sale
componente. Acest fişier este interpretat de un modul al SGBD pentru afişarea raportului
respectiv.
Pentru orice raport avem două momente im portante:
• crearea machetei raportului (simplist crearea raportului);
• exploatarea acestei machete (vizualizarea raportului).

8.1.1. Structura unui raport


Structura rapoartelor diferă în principiu, în funcŃie de formatul de afişare al datelor şi de
complexitatea acestuia. Datele pot fi afişate în raport, pe linii, pe coloane sau combinat, în
funcŃie de domeniul pentru care se elaborează raportul. In ceea ce priveşte complexitatea
rapoartelor, unele pot afişa date dintr-o singură tabelă, altele din mai multe tabele. De
asemenea, în cadrul unui raport, datele din tabele pot fi grupate pe niveluri, conform unor
criterii de grupare definite de utilizator. In acest caz, pentru fiecare nivel de grupare se pot
defini înregistrări totalizatoare ( totaluri pentru anumite coloane sau câmpuri) cât şi un total
general, la nivelul întregului raport.

120
In Visual FoxPro, rapoartele reprezintă un obiect de tip Report. Din acest
punct de vedere, el are o structură compusă din două părŃi:
1. Mediul de date asociat raportului (Data Environment) unde se definesc
datele aferente raportului sub forma de tabele.
2. Structura de afişare; conŃine benzile sau zonele care compun raportul şi
obiectele Structura de date ; include datele aferente raportului şi este
reprezentată prin incluse în raport, prin care se realizează legătura cu sursa
de date.

8.1.2. Crearea unui raport

Elaborarea unui raport se realizează pe etape, astfel:


1. Conceperea proiectului de raport.
2. Definirea structurii de date, respectiv precizarea tabelei sau tabelelor din
care se preiau datele de afişat.
3. Lansarea generatorului de rapoarte (Report Designer) prin care se
afişează pe ecran macheta de raport. Raportul astfel obŃinut este vid.
Crearea unui raport se poate realiza şi cu instrumentul Report Wizard.
4. Definirea sursei de date a raportului.
5. Includerea în raport a obiectelor necesare, pentru a face legătura cu sursa
de date.
6. Salvarea şi previzualizarea raportului.

8.1.2.1. Crearea unui raport cu utilitarul Report Designer

Pentru a crea un raport vid (fără nici un obiect inclus în el) se pot folosi
următoarele variante:
1. se selectează din meniul File opŃiunea New, iar din fereastra New, butonul
radio Report şi apoi butonul de comandă NewFile.
2. din fereastra Project Manager se selectează pagina Documents şi apoi
secŃiunea Reports. Se selectează apoi butonul New, care determină afişarea
pe ecran a ferestrei New Report din care se selectează butonul cu acelaşi
nume. Dacă vrem să creăm raportul cu utilitarul Wizard se va selecta
butonul Report Wizard.
3. prin utilizarea comenzii
CREATE REPORT <nume-raport>
Sintaxa generală a comenzii CREATE REPORT este:
CREATE REPORT [nume_raport | ?] [NOWAIT] [SAVE]
[WINDOW Fereastră1] [IN [WINDOW] Fereastră2 | IN SCREEN

8.1.2.2. Fereastra constructorului de rapoarte

121
BAZE DE DATE

Ca urmare a folosirii uneia din cele 3 modalităŃi de lansare a constructorului de


rapoarte, pe ecran se va afişa fereastra constructorului de rapoarte cu titlul
Report Designer-Report1 şi bara cu obiecte de control (ReportControl), iar la
meniul sistem se adaugă submeniul Report. SuprafaŃa ferestrei este împărŃită în
zone sau benzi, al căror număr depinde de complexitatea raportului. Benzile
raportului diferă între ele, atât din punct de vedere al semnificaŃiei acestora, cât
şi din punct de vedere al frecvenŃei cu care sunt afişate datele benzii respective.
Astfel, va exista o bandă care va conŃine titlul raportului şi care va apare o
singură dată pe prima pagină, o bandă cu datele raportului, care va apare de
atâtea ori câte înregistrări se vor afişa în raport, o bandă de sfârşit de pagină, etc.
In mod implicit, la afişarea ferestrei Report Designer, aceasta conŃine 3 benzi,
cu următoarele denumiri şi semnificaŃii:
Page Header; conŃine antetul de pagină, care se va afişa la începutul fiecărei
pagini din raport. In cadrul antetului de pagină se include denumirea coloanelor
raportului şi eventual data curentă.
Detail; reprezintă zona principală a raportului, în care se vor afişa datele
aferente raportului, respectiv înregistrările din tabela folosită ca sursă de date.
Fiecare înregistrare din tabel va ocupa o linie în cadrul acestei zone.
Page Footer; reprezintă zonă de sfârşit de pagină, unde se poate afişa numărul
de pagină.
In mod suplimentar, la raport se mai pot adăuga şi alte benzi, ca urmare a selectării unor
opŃiuni din meniul Report. Aceste benzi sau zone sunt următoarele:
Tip bandă FrecvenŃa de afişare Mod de afişare
Title - o singură dată pe raport, - prin selectarea opŃiunii
pe prima pagină Title/Summary din meniul
Report
Column - o dată pe coloană - prin selectarea opŃiunii
Header PageSetup din meniul File
Group Header - o singură dată pe grup - prin selectarea opŃiunii
Grouping din meniul Report
Group Footer - o singură dată pe grup - prin selectarea opŃiunii
Grouping din meniul Report
Column - o dată pe coloană - prin selectarea opŃiunii
Footer PageSetup din meniul File
Summary - o dată pe raport - prin selectarea opŃiunii
Title/Summary din meniul Report

SemnificaŃia acestor benzi este următoarea:

1. Title/Summary; Banda Title conŃine titlul raportului şi alte informaŃii


suplimentare cum ar fi: sigla firmei şi eventual antetul de tabel, dacă acesta

122
nu a fost inclus în antetul de pagină. Această bandă se afişează prin
selectarea opŃiunii Title/Summary din meniul Report. Ca efect pe ecran
apare fereastra Title/Report cu cele două opŃiuni: Title şi Summary. Fiecare
din cele două comutatoare au asociat un alt comutator numit NewPage, la
activarea căruia banda respectivă se va afişa pe o pagină nouă.
2. Group Header; include câmpul după care se realizează gruparea datelor în
raport şi se afişează o dată pentru fiecare grup. Pentru includerea benzii în
raport se va selecta opŃiunea Data Grouping din meniul Report. Banda se
poate afişa numai dacă s-a realizat în prealabil gruparea datelor.
3. Group Footer; include informaŃii referitoare la sfârşitul de grup, respectiv
totaluri la nivel de grup şi explicaŃiile necesare. Banda se afişează prin
selectarea opŃiunii Data Grouping din meniul Report.
4. Column Header; conŃine antetul de coloană şi se poate afişa numai dacă
raportul conŃine cel puŃin două coloane. Setarea numărului de coloană se
face prin selectarea opŃiunii Column Number din fereastra Page Setup,
fereastră care se afişează prin selectarea opŃiunii cu acelaşi nume din meniul
File
5. Column Footer; conŃine informaŃii privind sfârşitul de coloană şi se
afişează după selectarea numărului de coloane (cel puŃin două) din fereastra
Page Setup.

8.1.3. ProprietăŃi ale benzilor şi raportului

1. Fiecare bandă va afişa în raportul final un număr de instanŃe ale sale în


funcŃie de tipul de bandă.
2. Fiecare zonă sau bandă a raportului are în fereastra constructorului de
rapoarte asociată o bară prin care se delimitează de alte zone. Fiecare bară
sau zonă a raportului are anumite proprietăŃi, care pot fi modificate de
utilizator. Pentru a se seta aceste proprietăŃi se face un dublu clic pe bara
delimitatoare a benzii dorite, având ca efect afişarea pe ecran a unei ferestre
cu titlul benzii respective.
3. Toate ferestrele aferente unei benzi au aceeaşi structură, doar denumirea
acestora diferă în funcŃie de tipul benzii la care se referă. In cadrul ferestrei
aferentă unei benzi se poate seta înălŃimea benzii prin intermediul unui
obiect de tip Spinner cu denumirea Hight sau se poate seta aceeaşi
dimensiune pentru toate instanŃele unei benzi tot prin intermediul unui
spinner cu numele Constant band height.
4. De asemenea, la afişarea unei instanŃe a unei benzi se pot specifica anumite
prelucrări pentru două evenimente aferente unei instanŃe, astfel:
a) înainte de afişarea fiecărei instanŃe a benzii se poate evalua o expresie
introdusă în caseta On Entry. Dacă expresia este mai complexă, poate fi

123
BAZE DE DATE

construită şi specifică în fereastra Expression Build care se deschide prin


selectarea butonului cu trei puncte din dreapta casetei On entry.
b) după fiecare afişare a instanŃei unei benzi se poate evalua o expresie
introdusă în caseta On exit sau în fereastra Expression Build.

In afară de proprietăŃile aferente benzilor, un rol important îl au proprietăŃile

aferente raportului în ansamblul său, care se referă la:

- mărimea paginii pe care se va afişa raportul


- orientarea paginii
- marginile exterioare ale paginii
- lăŃimea coloanelor şi spaŃiile dintre ele în cazul unui raport
multicoloană
- tipul de imprimantă în cazul tipăririi raportului la imprimantă.
Pentru a seta aceste proprietăŃi se afişează pe ecran fereastra Page Setup, prin
selectarea opŃiunii cu acelaşi nume din meniul File
Prin selectarea butonului Print Setup se afişează pe ecran o fereastră în care se
poate seta tipul de imprimantă, dimensiunea hârtiei utilizate la imprimare şi
orientarea acesteia (Portrait sau Landscape).

8.1.4. Adăugarea de controale în cadrul unui raport

Toate informaŃiile afişate în cadrul unui raport sunt specificate prin intermediul
unor obiecte. Aceste obiecte se pot include în cadrul unui raport, prin preluarea
lor din bara Report Controls, care se afişează pe ecran odată cu lansarea
constructorului de rapoarte.
Bara Report Controls conŃine 6 tipuri de controale. De asemenea, pe
bara cu instrumente se mai găseşte butonul Lock care blochează
fiecare control selectat, pentru a permite crearea automată a mai
multor instanŃe ale obiectului respectiv, cât şi butonul cu săgeată
înclinată spre stânga, care permite selectarea unuia sau mai multor
obiecte din benzile raportului.
Pentru includerea unui obiect în raport, se selectează obiectul dorit din
bara Report Controls şi se execută un click pe suprafaŃa raportului,
unde dorim să apară obiectul respectiv. Ca efect pe ecran se afişează:
- fereastra Report Expresion; dacă s-a selectat obiectul Field
- fereastra Report Picture; dacă s-a selectat obiectul
Picture/OLE

124
- obiectul selectat; dacă s-a selectat LINE RECTANGLE,
ROUNDED RECTANGLE
- cursorul, dacă s-a selectat obiectul Label.
După includerea în raport a unor controale, în funcŃie de
compelxitatea acestuia, utilizatorul poate modifica proprietăŃile
oricărui control, prin efectuarea unui dublu clic pe controlul respectiv.
Aşa cum rezultă din structura barei Report Controls, în raport se pot
include trei categorii de obiecte:
- blocuri de text
- câmpuri
- obiecte grafice (linii, dreptunghiuri, imagini).
SemnificaŃia acestora este următoarea:

8.1.4.1. Controlul LABEL


Acest control permite inserarea de texte (şiruri de caractere) în cadrul
raportului. Prin folosirea acestui obiect se poate, de exemplu, scrie
titlul raportului, antetul de pagină, alte explicaŃii necesare în funcŃie
de structura raportului. Prin execuŃia unui dublu clic pe textul existent
în raport, se afişează pe ecran fereastra Text.
Caseta Object Position permite stabilirea poziŃiei textului referitor la marginile
benzii, iar butonul Print When… permite afişarea textului la care se referă
numai dacă expresia introdusă în fereastra Print When…este adevărată. Ca
urmare, în funcŃie de valoarea unei expresii care se poate referi la câmpuri din
tabela sursă, putem afişa sau ascunde un anumit text.
Pentru scrierea titlului unui raport, după afişarea în raport a benzii Title, prin
selectarea opŃiunii Title Summary din meniul Report, se procdează astfel:
- se selectează obiectul Label şi se execută un clic pe bandă în locul de unde
începe introducerea titlului
- se introduce titlul prin tastare
- se aranjează formatul titlului (font, stil, dimensiune, caractere) prin
intermediul opŃiunii Font din meniul Format
- se stabileşte culoarea cu care dorim să scriem textul prin intermediul barei
Color Pallete, de unde se selectează Foreground şi apoi culoarea dorită
- se poate încadra titlul într-un dreptunghi prin selectarea obiectului Rectangle
din bara Report Controls.

8.1.4.2. Controlul FIELD


Prin includerea acestui obiect într-un raport se realizează afişarea datelor din
câmpurile unui tabel în raportul respectiv. Aceste date pot fi de orice tip, mai
puŃin cele de tip General. Prin urmare, pentru a afişa conŃinutul unui câmp dintr-
125
BAZE DE DATE

un tabel în raport, va trebui să includem în raport un obiect de tip Field aferent


câmpului respectiv în care se va transfera informaŃia din tabel ,pentru afişare.
Expresiile pot conŃine combinaŃii de câmpuri sau funcŃii utilizator. Astfel,
pentru afişarea în raport a datei curente se va folosi funcŃia DATE(), iar pentru
afişarea numărului de pagină în raport, se va folosi variabila de sistem
PAGENO_.

8.1.4.3. Adăugarea unui câmp la raport


După selectarea obiectului Field, din bara ReportControl, se execută un click pe
suprafaŃa raportului, unde dorim să fie afişat obiectul respectiv. Ca efect, pe
ecran apare mai întâi fereastra Report Expression, aferentă câmpului respectiv,
unde se pot seta proprietăŃile acestui obiect astfel :
1. în caseta de editare Expression, se introduce sursa de date a câmpului,
respectiv o expresie ce urmează a fi evaluată pentru fiecare apariŃie a benzii.
2. în caseta Format, se introduce formatul de afişare pentru câmpul specificat
în Report Expression, sub forma unui şir de caractere în funcŃie de tipul
câmpului respectiv.
3. în secŃiunea Field Position, se defineşte poziŃia câmpului, referitor la banda
în care este inclus, prin intermediul opŃiunilor:
• Float; poziŃie mobilă a câmpului în funcŃie de dimensiunea obiectelor
deŃinute deasupra lui.
• Fix relativ to top of band ; poziŃie fixă faŃă de marginea superioară (de
sus) a benzii
• Fix relativ to bottom of band; poziŃie fixă faŃă de marginea inferioară
(de jos) a benzii
4. cu comutatorul Stretch With Overflow; se permite extinderea în funcŃie d
conŃinutul sursei de date (la câmpurile Memo).
5. în caseta Comment; se pot introduce diverse comentarii, care nu se vor
afişa în raport. Ele se pot referi la tipul datelor aferente câmpului respectiv,
la modul d afişare în raport a acestora, etc.
6. butonul Calculation ; permite deschiderea unei ferestre numită Calculate
Field, unde se pot seta prin intermediul unor opŃiuni modalitate de calcul
pentru câmpul respectiv, cum ar fi : suma valorii datelor din câmp, media
aritmetică, numărare înregistrări, valoarea minimă sau maximă.
7. butonul Print When ; permite deschiderea unei ferestre cu acelaşi nume, în
care se pot preciza condiŃiile de afişare u unui câmp, astfel :
• secŃiunea PrintRepeatedValues permite afişarea sa suprimarea afişării
de valori consecutive care se repetă, pentru un anumit câmp prin
intermediul butoanelor radio Yes sau No ;
• comutatorul Removeline if Blank ; permite, dacă este selectat,
eliminarea din raport a liniilor goale (cu toate câmpurile vide);

126
• în caseta Print Only Expression is True; se introduce o expresie care se
evaluează şi numai dacă este adevărată se afişează conŃinutul câmpului
respectiv.
In cadrul ferestrei se selectează fereastra DATE( ), cu dublu clic, din lista Date,
funcŃie care va apare şi în caseta Expression for Field on Report, după care se
acŃionează butonul OK. Ca efect se revine în fereastra Report Expression unde
apare funcŃia DATE( ) în caseta Expression, după care se acŃionează butonul
OK. Ca urmare, se deschidere fereastra Report Expression, iar în raport în banda
aferentă apare câmpul aferent datei curente astfel: DATE( ). In mod similar se
procedează la afişează numărului de pagină, folosind în acest caz variabila de
sistem _PAGENO

8.1.4.4. Controalele LINE, RECTANGLE ŞI ROUNDED


RECTANGLE
Aceste controale servesc pentru includerea în raport a unor forme geometrice, astfel:
- controlul LINE include în raport linii orizontale sau verticale;
- controlul Rectangle permite includerea în raport a unor chenare de formă
dreptunghiulară;
- controlul Rounded Rectangle include în raport cercuri ovale sau
dreptunghiuri cu colŃurile rotunjite.
Rezultă că, prin intermediul acestor controale putem îmbunătăŃi aspectul unui raport prin
includerea titlului raportului şi a antetului de pagină într-un dreptunghi sau prin sublinierea
unor texte, etc.
După selectarea unuia din cele trei obiecte de pe bara Report Controls se mută
cursorul pe suprafaŃa raportului şi se desenează obiectul selectat la mărimea
dorită de utilizator, sau se execută un clic în raport în locul unde dorim să apară
obiectul, având ca efect afiarea în raport a obiectului respectiv.
Pentru a seta proprietăŃile obiectului, se execută un dublu-clic pe obiect, fapt ce
determină afişarea pe ecran a ferestrei Rectangle/Line pentru obiectele Line
sau Rectangle şi a ferestrei Rounded Rectangle pentru obiectul Rounded
Rectangle.

8.1.4.5. Controlul PICTURE/OLE BOUND CONTROL


Prin utilizarea acestui control, se poate include într-un raport o imagine preluată
dintr-un fişier de tip Bitmap cu extensia .MBP sau .ICO. De obicei aceste
imagini se introduc în banda de titlu sau de antet de pagină şi pot reprezenta
sigla firmei, care elaborează raportul.
Aceste imagini odată introduse în raport nu se modifică odată cu trecerea de la o înregistrare
la alta. Dacă dorim să apară câte o imagine pentru fiecare înregistrare va trebui ca tabela de

127
BAZE DE DATE

date să conŃină un câmp de tip General, care să apară în raport şi în care se introduce obiectul
de tip OLE.
Pentru includerea în raport a unui obiect de tip PICTURE, se selectează obiectul
din bara Report Controls şi se face un clic pe suprafaŃa raportului unde dorim să
apară imaginea. Ca efect, pe ecran apare fereastra Report Picture.
In cadrul acestei ferestre, se selectează mai întâi butonul radio File din zona
Picture from, iar în caseta aferentă se introduce calea de acces către fişierul
Bitmap. Dacă nu se cunoaşte calea de acces se poate selecta imaginea din
fişierele ce apar în fereastra Open care se deschide prin acŃionarea butonului cu
trei puncte din dreapta casetei File.
Pentru introducerea în raport a unui obiect de tip General, în fereastra Repoart
Picture se selectează butonul radio Field în loc de File, iar în caseta aferentă se
introduce numele câmpului din tabela selectată.

8.1.4.6. Ajustarea controalelor unui raport


Principalele operaŃii privind ajustarea controalelor unui raport, se referă la :
- redimensionare ;
- copiere ;
- mutare ;
- ştergere ;
- aliniere ;
Din meniul View, iar pentru alinierea manuală opŃiunea Snap to Grid din meniul Format prin
care la mutarea unui obiect se Ńine cont de pătrăŃelele de pe suprafaŃa raportului.
- schimbare tip caractere ;
- schimbarea culorii ;

8.1.5. Crearea unui raport cu ajutorul asistenŃilor

8.1.5.1. Folosirea utilitarului Quick Report

Pentru popularea unui raport cu date luate direct din tabela definită ca sursă de
date a raportului, se foloseşte utilitarul Quick Report care este o aplicaŃie de tip
Builder. Lansarea utilitarului se face prin selectarea opŃiunii Quick Report din
meniul Report, după crearea unui raport vid cu Report Designer.
Prin urmare, după afişarea pe ecran a ferestrei Report Designer, reprezentând meniul vid, se
va selecta opŃiunea Quick Report din meniul Report. Ca efect, pe ecran va apare fereastra
Quick Report.
Dacă în momentul lansării utilitarului Quick Report, nu este deschis nici un
tabel, care să reprezinte sursa de date a raportului ce va fi creat, pe ecran se
128
afişează mai întâi fereastra Open, din care se va selecta tabela dorită după care
se va afişa fereastra Quick Report.
In funcŃie de opŃiunile selectate din această fereastră va fi creat un raport
corespunzător. In acest scop se selectează mai întâi din tabela care reprezintă
sursa de date, câmpurile care urmează a fi afişate în raport, prin acŃionarea
butonului de comandă Fields… Ca efect pe ecran se deschide fereastra Field
Picher. In cadrul acestei ferestre, se selectează câmpurile dorite din secŃiunea
All Fields prin mutarea lor în secŃiunea Selected Fields şi se acŃionează butonul
OK, având ca rezultat revenirea în fereastra Quick Report.
După stabilirea câmpurilor ce urmează a fi afişate se va stabili poziŃia acestora
în raport, adică pe orizontală sau verticală, prin selectarea celor două butoane
aferente, din secŃiunea Field Layout.
In fereastra Quick Report se mai găsesc trei comutatoare cu următoarea
semnificaŃie:
- Titles; afişează denumirea câmpurilor în banda de antet de pagină ;
- Add Alias ; adaugă aliasul tabelului la denumirile câmpurilor ;
- Add Table ; adaugă tabelul în fereastra Data Environment.
După selectarea acestor opŃiuni, prin acŃionarea butonului OK, are loc ieşirea
din fereastra Quick Report, iar pe ecran se afişează structura noului raport care
conŃine:
- banda de antet de pagină cu denumirea câmpurilor ce vor fi afişate ;
- banda Detail cu câmpurile aferente ;
- banda de sfârşit de pagină unde se include automat data curentă şi
numărul de pagină.

8.1.5.2. Crearea unui raport cu Report Wizard

Crearea unui raport prin utilizarea utilitarului Report Wizard, presupune


parcurgerea următoarelor etape:
- se lansează utilitarul Report Wizard şi se selectează apoi tipul de
raport
- se parcurg cei şase paşi solicitaŃi de Report Wizard pentru a ajunge la
forma finală a raportului.

8.1.5.3. Lansarea generatorului Report Wizard


Pentru lansarea generatorului Report Wizard se selectează din fereastra Project
Manager pagina Documents şi apoi butonul New…. Din fereastra New Report
care se afişează pe ecran se selectează butonul Report Wizard care determină
afişarea pe ecran a ferestrei Wizard Selection.
O altă modalitate de lansare a generatorului Report Wizard constă în selectarea
din meniul File a opŃiunii New. Din fereastra New, care apare pe ecran se va
selecta butonul radio Report şi apoi butonul de comandă Wizard, având ca efect

129
BAZE DE DATE

afişarea pe ecran a ferestrei Wizard Selection şi se urmează paşii indicaŃi de


acesta.

8.1.6. Mediul de date al unui raport

8.1.6.1. Componenta Data Environment

Datele afişate în cadrul unui raport se preiau din diferite tabele, care reprezintă
sursa de date a raportului. Aceste date, împreună cu anumite variabile utilizate
în raport, alcătuiesc mediul de date al raportului. Acesta reprezintă în Visual
Foxpro un obiect real, în sensul programării orientate pe obiecte, adică are
ataşate anumite proprietăŃi şi metode.
Mediul de date se defineşte în fereastra Data Environment unde se pot include tabelele şi
vederile necesare construirii unui raport. Afişarea ferestrei Data Environment, se poate
realiza în unul din următoarele moduri:
a. prin selectarea opŃiunii Data Environement din meniul View
b. prin selectarea opŃiunii Data environment din meniul shortout al ferestrei
Report Designer.
c. prin selectarea pictogramei aferente ferestrei, din bara cu instrumente Report
Designer.
Spre deosebire de obiectele din raport, cele din fereastra Data Environement, sunt obiecte
reale, în sensul că au ataşate proprietăŃi, răspund la anumite evenimente şi execută secvenŃe
de cod din metodele aferente.
Ca urmare, utilizatorul poate introduce cod (secvenŃe de instrucŃiuni) în cadrul
unor metode pentru evenimentele care însoŃesc datele raportului. ProprietăŃile,
metodele şi evenimentele asociate mediului de date, se pot vedea în fereastra
Properties afişată prin fereastra opŃiunii Properties din meniul shortcut al
ferestrei Data Environment, sau din meniul shortcut al unei tabele din cadrul
ferestrei Data Environment.
De asemeni această componentă (fereastra Data Environment) realizează toate
operaŃiile legate de gestiunea datelor necesare raportului astfel:
- deschide tabelele aferente raportului existente în fereastra Data Environment,
la lansarea în execuŃie a raportului;
- aduce în raport datele necesare din tabele;
- închide tabelele la terminarea execuŃiei raportului.
Pentru includerea în fereastra Data Environment a tabelelor necesare unui raport se pot folosi
următoarele modalităŃi de lucru:
- se face drag-drop cu tabelul dorit din fereastra Project Manager în fereastra
Data Environment;

130
- se selectează opŃiunea Add din meniul data Environment sau din meniul
shortcut al ferestrei Data Environment. Ca efect pe ecran apare fereastra
Add Table or View, din care se selectează baza de date şi tabela necesară.

După adăugarea tabelelor în cadrul ferestrei Data Environment, se stabileşte


indexul care se accesează datele din tabel pentru a fi aduse în raport. In acest
scop, în fereastra Proprerties se selectează proprietatea Order, reprezentând
ordinea de indexare, pentru tabelul respectiv şi se introduce în caseta aferentă un
nume de index sau se alege un index din lista de indecşi a tabelei. După
indexare, în fereastra Database Designer, se poate defini o relaŃie temporară
între 2 tabele prin operaŃia drag-drop a cheii primare, la cheia externă din
tabela fiu.

8.1.6.2. Sursa de date a unui raport

Sursa de date a unui raport se poate defini în mai multe moduri, astfel:
1. prin includerea tabelelor necesare raportului în fereastra Data Environment;
2. prin folosirea unei fraze SELECT din SQL, inclusă într-un program simplu,
alături de comanda de previzualizare a raportului. In fraza SELECT, se
specifică prin opŃiunea INTO CURSOR <nume_tabel>, numele unei tabele
temporare care va conŃine datele necesare raportului,.
3. prin includerea frazei SELECT în metoda aferentă environementului INIT a
containerului Data Environment aferent raportului
4. prin definirea unui program simplu în care se introduce comenzi pentru
deschiderea bazei de date, a tabelului, utilizate în raport, setarea indexului
aferent tabelului sursă şi lansării în execuŃie a raportului
5. prin includerea comenzilor de deschidere a bazei de date şi tabelelor aferente
raportului în metoda evenimentului clic asociată unui buton de comandă de
lansare în execuŃie a raportului.

8.1.6.3. Gruparea datelor în rapoarte

In practică, foarte frecvent rapoartele trebuie să conŃină informaŃii privitoare la grupe de


articole din tabelele de date pentru care sunt ele elaborate, grupele respective formându-se pe
anumite criterii. Fiecare criteriu de grupare este descris printr-o expresie pe care o numim
expresie de grupare sau cheie de grupare; ea conŃine unul sau mai multe câmpuri ale tabelei
de date pentru care se elaborează raportul. Acele instanŃe pentru care expresia de grupare are
aceeaşi valoare, alcătuiesc un grup. Deci, într-un raport cu datele grupate după o cheie de
grupare, există atâtea grupuri câte valori distincte are cheia de grupare respectivă. În
exemplul anterior, de cate ori se schimbă valoarea cheii care descrie anul se schimbă grupul.
131
BAZE DE DATE

Gruparea datelor se poate realiza pe un nivel sau pe mai multe nivele de


grupare. In general, în Visual FoxPro numărul nivelelor de grupare nu este
limitat. In cazul grupării datelor, raportul va conŃine pe lângă benzile care s-a
văzut deja că le poate conŃine un raport, şi benzile pentru gruparea datelor.
Astfel, pentru fiecare nivel de grupare se defineşte o bandă de antet de grup şi o
bandă de picior de grup. Antetul, respectiv piciorul fiecărui grup va conŃine
informaŃii introductive, respectiv informaŃii de sinteză referitoare la grupul
respectiv.
Pentru gruparea datelor se selectează opŃiunea Data Grouping din meniul
vertical Report sau executând un click cu butonul din dreapta mouse apare
meniul vertical contextual din care se poate selecta opŃiunea Data Grouping…
.Indiferent de modul de lansare apare chenarul corespunzător care are forma din
figura alăturată.
După cum se poate constata în chenarul Data Grouping apare o listă simplă cu
denumirea Group expressions. În fiecare linie a listei se poate introduce câte o
expresie de grupare. În cazul nostru am introdus linia de studii, secŃia, anul şi
urma să introducem grupa. Pentru modificarea acestei ordini se poate proceda
cum se procedează în mod uzual cu schimbarea ordinii elementelor dintr-o listă
şi anume : sau se trage (operaŃie de «drag » ) cu butonul din stânga mouse-ului
apăsat de butonul din stânga opŃiunii (cel cu săgeată dublă), în sus sau în jos
mutând opŃiunea, sau se execută un click cu butonul din stânga mouse-ului şi se
tastează Ctrl+PgUP pentru a muta opŃiunea cu o poziŃie în sus, respectiv
Ctrel+PgDn pentru a o aduce cu o poziŃie în jos.
Pentru introducerea expresiei de grupare se poate fie tasta direct valoarea expresiei, fie se
poate executa un click pe butonul din dreapta liniei respective, operaŃie care declanşează
apariŃia ferestrei constructorului de expresii (ca în figura de mai sus) cu care se poate construi
expresia de grupare.

Pentru ştergerea unei expresii de grupare se execută un click pe linia de şters şi


se execută cu click pe declanşatorul Delte. OpŃiunea curentă va fi ştearsă, iar
opŃiunile următoare vor avansa cu câte o poziŃie.

Fiecare grup poate avea o serie de proprietăŃi specificate prin chenarul Group
properties. Selectarea butoanelor din grup are următoarele semnificaŃii:
• Start group on new column, respectiv, Start each group on new page
indică faptul că fiecare la fiecare schimbare de grup se va trece la coloană
(este selectabil numai în cazul rapoartelor multicoloană), respectiv, pagină
nouă.
• Reset page number to 1 for each group specifică faptul că la schimbarea
grupului se trece la pagină nouă şi se începe numerotarea paginilor începe de
la 1.

132
• Reprint group header on each page specifică faptul că în situaŃia în care
grupul va fi pe mai multe pagini, antetul grupului va fi tipărit pe toate
paginile, după antetul de pagină, nu numai pe prima pagină.
• Start group on new page when less than această opŃiune are un contor
(spinner) cu care se poate stabili distanŃa minimă (în număr de linii) de la
baza paginii la care poate începe antetul unui grup pe pagină.

8.1.6.4. Utilizarea variabilelor în cadrul rapoartelor

În unele situaŃii, de exemplu dacă dorim calculul mediei generale pe grupe sau
ani şi dorim să le afişăm în liniile de sumar, avem nevoie de variabile.
Variabilele în rapoarte se definesc astfel:
• Din meniul sistem selectând opŃiunea Report se selectează din meniul
vertical opŃiunea Variables.
• Apare fereastra Report variables.
• În această fereastră se definesc numele variabilelor în lista verticală
Variables. Având în vedere că ordinea de definire a variabilelor este
importantă, valorile acestora determinându-se în ordinea definirii, această
ordine se poate schimba analog ca în paragraful precedent, adică trăgând de
săgeata dublă din faŃa numelui variabilei sau executând un click iar apoi
tastând PgUp sau PgDn.
• Pentru fiecare variabilă putem stabili valoarea de memorat cu opŃiunea
Value to store sau valoarea iniŃială Initial value. Fiecare dintre cele două
opŃiuni are câte un chenar de editare unde se poate tasta numele unui câmp
sau o expresie. Dacă nu se doreşte tastarea expresiei se poate executa click
pe butonul din dreapta chenarului şi se lansează automat chenarul
constructorului de expresii cu care se poate construi expresia dorită. Asupra
acestor expresii se pot executa operaŃii de agregare. De exemplu, se doreşte
calcularea mediei aritmetice mediilor studenŃilor unei grupe. Pentru aceasta
avem un chenar cu butoane radio Calculate. Dacă se păstrează selectat
butonul Nothing înseamnă că în variabilă se păstrează sau respectiv
variabila este iniŃializată cu valoarea expresiei din chenarul de tip text. Altfel
se execută operaŃii de agregare asupra expresiei cum ar fi: numărarea, se
calcularea sumei, a valorii medii, minimului, maximului, abaterii medii
pătratice sau a dispersiei.
• Prin chenarul de selecŃie Release after report se poate stabili ca variabila să
fie eliberată după terminarea raportului sau ultima valoare să rămână şi după
terminarea raportului.
• Ultima opŃiune este legată de iniŃializarea variabilei şi este Reset at. Aceasta
este o listă derulantă care poate avea diferite valori în funcŃie de context.
Astfel avem în totdeauna End of Report, dar pot fi End of Pag, End of
Column, sau End of Group.
133
BAZE DE DATE

8.1.6.5. Exploatarea rapoartelor

Previzualizarea se realizează prin selectarea opŃiunii Print preview din meniul


File. Rezultatul este apariŃia imaginii tipărite şi a unei care de instrumente,
conform figurii de mai jos, în care butoanele au următoarea semnificaŃie : treci
la prima pagină, treci la pagina precedentă, deplasare la o pagină dată, treci la
pagina următoare, treci la ultima pagină închide fereastra şi tipăreşte. În bara
de instrumente mai apare şi o listă deschisă în care se poate preciza scala de
afişare în procente.

Exploatarea efectivă a machetei de raport se poate realiza :


• Din meniul sistem selectând opŃiunea Run Report din meniul vertical
Report.
• Prin comanda REPORT.

Dacă se utilizează opŃiunea RUN REPORT apare un chenar de dialog de forma


celui de mai jos, cu care se pot fixa parametrii tipăririi.

Prin comandă tipărirea, previzualizarea sau memorarea unui raport pe fişier se


realizează prin comanda :
REPORT FORM Fişier1 | ? [ENVIRONMENT] [domeniu] [FOR
lExpresie1]
[WHILE lExpresie2] [HEADING cHeadingText] [NOCONSOLE]
[NOOPTIMIZE] [PLAIN] [RANGE nPaginăStart [, nPaginăSfârşit]]
[TO PRINTER [PROMPT] [NODIALOG] | TO FILE NumeFişier2
[ASCII]]
[NAME NumeObiect][SUMMARY] [NORESET] [NOPAGEEJECT]
[PREVIEW [[IN] WINDOW NumeFereastră | IN SCREEN] [NOWAIT]]
unde
FORM Fişier1 | ? – indică numele fişierului machetei de forme sau lansează
fereastra Open pentru deschiderea fişierului respectiv; parametrul este
obligatoriu.
ENVIRONMENT] – se foloseşte numai pentru a compatibiliza Visual FoxPro
cu FoxPro 2.6.
Domeniu – poate lua valorile ALL, NEXT n, REST şi RECORD n, cu
semnificaŃiile cunoscute. Domeniul implicit este ALL, adică se vizualizează
toată baza de date.
FOR şi WHILE sunt filtrul global şi local cu semnificaŃiile cunoscute.
HEADING – permite definirea unui text care se tipăreşte pe fiecare pagină.
Dacă se utilizează simultan HEADING şi PLAIN, PLAIN are prioritate.
NOCONSOLE – inhibă vizualizarea raportului pe ecran.
NOOPTIMIZE – inhibă acŃiunea optimizatorului de expresii RUSHMORE.
134
PLAIN – permite vizualizarea anterelor numai pe prima pagină a raportului,
inhibând tipărirea acestor antete pe paginile următoare.
RANGE – permite stabilirea paginii de început şi sfârşit a tipăririi; prin lipsă se
tipăreşte tot raportul.
TO PRINTER [PROMPT] [NODIALOG] – indică faptul că tipărirea se
doreşte să se efectueze la imprimantă; PROMPT – precizează faptul că se
doreşte afişarea chenarului de dialog prin care utilizatorul poate seta
imprimanta (este un chenar din Windows). NODIALOG indică faptul că se
doreşte ca în timpul tipăririi să nu fie afişate mesaje de dialog.
TO FILE NumeFişier2 [ASCII] – permite stabilirea fişierului text în care va fi
salvat raportul. În mod normal raportul este fişier cu extensia .txt. Dacă se
doreşte ca să fie fişier ASCII (pentru imprimante postscript) se utilizează
parametrul aferent. Trebuie subliniat că graficele nu sunt generate în
fişierele ASCII.
NAME NumeObiect – permite definirea unei nume de variabile care să
primească proprietăŃile şi metodele obiectului corespunzător raportului.
Acest nume poate fi utilizat de evenimente care utilizează obiectul.
SUMMARY – indică faptul că nu se doreşte tipărirea sau vizualizarea
conŃinutului zonei de detaliu ci numai a sumarului (care de regulă conŃine
date agregate cum ar fi totaluri, subtotaluri, etc.).
NORESET – indică faptul că variabilele system care se iniŃializează la
începutul oricărui raport (_PAGENO şi _PAGETOTAL) nu trebuie
iniŃializate.
NOPAGEEJECT – indică faptul că utilizatorul nu doreşte eliminarea ultimei
pagini la terminarea tipăririi raportului. Nu se poate utiliza în mod comandă
ci numai în program (fişiere .prg).
PREVIEW – indică faptul că raportul se previzualizează pe ecran
[IN] WINDOW NumeFereastră | IN SCREEN – este un parametru care apare
la majoritatea comenzilor şi stabileşte locul de vizualizare (într-o fereastră
utilizator sau tot ecranul).
NOWAIT – se poate utiliza numai în mod programat (nu şi comandă) şi indică
faptul că programul nu trebuie să aştepte terminarea previzualizării.

135
BAZE DE DATE

8.2. Meniuri
OBIECTIVE 1. Familiarizarea cu noŃiunea de meniu şi elementele sale
componente
2. Crearea abilităŃii de creare şi utilizare meniurilor în Visual
FoxPro.
NOłIUNI - Meniuri şi rolul lor;
CHEIE - Fereastra constructorului de meniuri;
- OpŃiunile posibile la generarea meniurilor şi
submeniurilor;
- Crearea şi modificarea meniurilor;
- Exploatarea meniurilor.

« Meniu – listă de opŃiuni din care utilizatorul o poate selecta pe cea necesară
pentru o anumită acŃiune, cum ar fi alegerea unei comenzi sau aplicarea unui
anumit format unei porŃiuni de document. La mai multe programe de aplicaŃie,
în special cele care dispun de interfaŃă grafică, meniurile reprezintă o
alternativă mai uşor de învăŃat şi de folosit decât memorarea comenzilor şi a
utilizării lor » [Microsoft99].
Meniurile sunt de mai multe feluri. Primele meniuri, meniurile clasice, au fost utilizate în
versiunile vechi de dBASE şi Fox. Ele apar sub formă de liste, utilizatorul putând alege
opŃiunea prin tastarea unui identificator (de exemplu numărul opŃiunii în listă).
O aplicaŃie cu meniurile bine proiectate se înŃelege mult mai uşor de către beneficiarii
acesteia.

De regulă principalele funcŃii ale unei aplicaŃii sunt incluse în meniu. Astfel, de
exemplu, în VisualFox 8.0 comanda Browse apare ca opŃiune în meniul vertical
View. În acelaşi timp alte opŃiuni cum ar fi Insert nu apar în nici un meniu sau
submeniu.

Din cele de mai sus se poate observa că meniurile sunt în principal de două
tipuri:
• Meniuri orizontale (cum este în figura de mai sus meniul principal al Visual
Foxului); acesta este format din opŃiuni (denumite şi pad-uri). Acestea, la
rândul lor, pot lansa o acŃiune sau un submeniu vertical.
• Meniurile verticale au o serie de opŃiuni I (bare, care la rândul lor pot lansa
comenzi, alte submeniuri verticale sau orizontale sau ferestre de dialog.

Ca şi în cazul rapoartelor, în gestiunea meniurilor avem două etape importante:


• Crearea sistemului de meniuri.
• Exploatarea sistemului de meniuri.

136
8.2.1. Crearea unui sistem de meniuri

Indiferent de dimensiunea şi complexitatea aplicaŃiei, pentru crearea unui


sistem de meniuri sunt necesare o serie de etape. Numărul acestora diferă de la
autor la autor. În esenŃă însă această activitate revine la următorii paşi:
Pasul 1 : - proiectarea sistemului meniului, care constă în stabilirea locului
acestuia, opŃiunile utilizate şi submeniurile aferente, chei rapide de acces, etc.
Pasul 2: - crearea meniurilor şi submeniurilor;
Pasul 3: - ataşarea funcŃiilor şi acŃiunilor de opŃiunile meniului cum ar fi :
- afişare unor formulare sau casete de dialog ;
- inserarea de cod de iniŃializare de variabile, deschideri de fişiere etc.
înainte activarea opŃiunii ;
- inserare secvenŃelor de cod asociate diferitelor evenimente legate de
activarea/dezactivarea opŃiunilor sau meniului ;
Pasul 4 : - generarea programului aferent meniului ;
Pasul 7 : - testarea sistemului (programului, aplicaŃiei).

8.2.2. Planificarea unui sistem de meniuri


Planificarea unui sistem de meniuri este o operaŃie de analiză şi ca atare se efectuează de
regulă independent de calculator fiind o operaŃiune migăloasă, dar de care depinde în mare
măsură succesul aplicaŃiei, modul în care aceasta va fi receptată de utilizator. Numărul
recomandărilor pentru proiectarea meniurilor poate fi mare şi important.

În faza de proiectare se descriu fiecare opŃiune. Astfel, de exemplu la creare se vizualizează


un meniu vertical cu tabelele care pot fi create. Dacă o tabelă este creată deja şi este utilizată
ea nu va mai fi selectabilă. Analog se analizează şi se descriu funcŃiile fiecărei opŃiuni. Se
stabilesc caracterele de acces (cele subliniate în aşa fel ca ele să nu creeze confuzie. Pentru
unele opŃiuni, de exemplu pentru Ştergerea articolelor marcate (PACK) putem stabili
combinaŃia de taste Ctrl+P.

8.2.3. Crearea şi modificarea meniurilor

Crearea meniurilor se poate realiza prin mai multe metode. Primele meniuri au fost create cu
ajutorul unor comenzi de tip @say, @get cu care se pot genera diferite obiecte. Această
metodă este destul de anevoioasă pentru neinformaticieni, motiv pentru care deja în FoxPro
2.5-2.6 s-a recurs la un constructor grafic de meniuri, denumit atunci generator de meniuri.

137
BAZE DE DATE

Ca şi în cazul constructorului de rapoarte, constructorul de meniu lucrează în


două faze:
o în prima fază se generează o tabelă sistem care are extensia MNX;
o în a doua fază se generează pornind de la acesta un program cu extensia
MPR care se execută ca orice program cu comanda DO.

8.2.4. Lansarea constructorului de meniuri

Constructorul de meniuri, denumit Menu Designer poate fi lansat din comandă sau din
meniul sistem.

Comanda de creare a unui meniu nou are sintaxa:


CREATE MENU [NumeFişier | ?] [NOWAIT] [SAVE] [WINDOW
WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN
Din această sintaxă este importantă porŃiunea:
CREATE MENU [NumeFişier | ?]
CeilalŃi parametrii fiind deja prezentaŃi în secŃiunile anterioare.

Dacă se lansează deci comanda


CREATE MENU test
apare fereastra constructorului de meniuri. Selectând declanşatorul Menu se va
construi un meniu orizontal cu opŃiuni sub forma unor meniuri verticale;
selectând Shortcut, va apare un meniu vertical cu opŃiuni sub forma unor
submeniuri verticale.
Dacă nu se precizează numele fişierului sau se tastează semnul întrebării, apare
ca şi în cazul creării celorlalte obiecte (tabele, ferestre, rapoarte etc.) se
generează temporar cu numele Menu1, iar în momentul în care se doreşte
generarea programului sistemul va vizualiza fereastra standard ave As cu care
se poate fixa numele meniului.

Crearea unui meniu cu ajutorul meniului sistem


1. Se selectează opŃiunea New din meniul vertical File.
2. Din fereastra New se selectează butonul radio Menu şi declanşatorul
New File.
3. Apare chenarul New Menu şi activitatea se continuă.

Crearea unui meniu din managerul de proiect


1. Se selectează opŃiunea New din meniul vertical File.
2. Din fereastra New se selectează butonul radio Project şi declanşatorul
New File.

138
3. Apare fereastra constructorului de proiecte (Figura 4.1) din care se
poate selecta opŃiunea Other din meniul vertical sau eticheta cu
acelaşi nume.
4. Apar opŃiunile meniului vertical din figura de mai jos.
5. Selectând opŃiunea Menu şi declanşatorul New.
6. Apare fereastra New Menu.

8.2.5. Modificarea descrierii meniurilor


Ca şi în cazul creării meniurilor şi în cazul modificării se poate proceda în două moduri.

Comanda de modificare a unui meniu nou are sintaxa:


MODIFY MENU [FileName | ?] [[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN]] [NOWAIT] [SAVE]

Din această sintaxă este importantă porŃiunea:


MODIFY MENU [NumeFişier | ?]
CeilalŃi parametrii fiind deja prezentaŃi în secŃiunile anterioare.

Dacă se lansează deci comanda

MODIFY MENU test


va apare fereastra Menu Design cu starea curentă a meniului.

Dacă se lansează comanda:


MODIFY MENU
apare fereastra OPEN din care se poate selecta meniul după care apare fereastra
Menu Designer ca în cazul precedent.

8.2.5.1. Modificarea unui meniu cu ajutorul meniului sistem


Se selectează opŃiunea Open din meniul vertical File, după care se procedează
ca în cazul comenzii MODIFY MENU fără numele fişierului meniu.

8.2.5.2. Modificarea unui meniu din managerul de proiect


Se procedează ca în cazul ii2 din paragraful precedent cu observaŃia că la pasul 5
în loc să se selecteze declanşatorul New se va executa un click dublu pe
opŃiunea Menu din meniul vertical Others.
Va apare lista meniurilor disponibile în directorul curent. Se efectuează un click
pe meniul dorit şi pe declanşatorul Modify, după care se procedează ca în cazul
comenzii MODIFY MENU fără numele fişierului meniu.

8.2.6. Stabilirea unor proprietăŃi şi coduri ale meniurilor

139
BAZE DE DATE

Aceste proprietăŃi şi coduri se pot stabili în orice moment al creării sau


modificării meniurilor din meniul vertical View.

8.2.6.1. Stabilirea proprietăŃilor generale

Pentru stabilirea proprietăŃilor generale se poate realiza selectând din meniul


vertical View opŃiunea General Options. Aceasta vizualizează fereastra cu
acelaşi nume.
În zona Procedure utilizatorul poate scrie o secvenŃă de program care să fie
executată la activarea meniului. Dacă codul nu încape în chenarul de editare
acesta va defila vertical. Dacă utilizatorul doreşte să editeze o secvenŃă mai
masivă de cos poate selecta declanşatorul Edit şi va apare o fereastră de editare
accesibilă numai în momentul închiderii ferestrei General Options.
Chenarul Location permite stabilirea locului meniului în cauză faŃă de meniul
sistem. Astfel, dacă se lasă selectat Replace, acest meniu va înlocui meniul
sistem. Dacă se selectează Append, meniul actual se va adăuga meniului
sistem, iar dacă se selectează Before sau After, în dreptul butonului apare o
listă derulantă din care se poate selecta o opŃiune din meniul sistem în faŃa
căruia sau după care să se insereze meniul curent.
Dacă se selectează opŃiunile Setup, respective Cleanup din chenarul Menu
code, apare câte un chenar în care se pot edita secvenŃele de cod care să fie
executate automat la iniŃializarea meniului, respective la ştergerea sa din
memorie.
OpŃiunea Top level este legat de vizualizarea meniului într-un document SDI
(Single Document Interface). Fără a intra în amănunte, precizăm că dacă nu se
selectează această opŃiune, Visual FoxPro lucrează în regim MDI (Multiple
Document Interface) adică există o fereastră principală, care este rădăcina
arborelui de documente. În regim SDI toate documentele sunt independente şi la
acelaşi nivel.

8.2.6.2. Stabilirea codului pentru meniu sau submeniuri

Acest cod se poate stabili selectând din meniul vertical View opŃiunea Menu
Options. Va apare o fereastră cu numele meniului sau submeniului pentru care
se creează sau editează secvenŃa de cod şi zona de editare şi declanşatoarele cu
semnificaŃia din fereastra General Options.

8.2.7. Crearea unui meniu rapid

Selectând la crearea unui meniu nou opŃiunea Quick Menu, va apare fereastra
constructorului de meniuri în forma de mai jos. Se poate observa că atât
opŃiunile meniului orizontal cât şi a celor verticale sunt cele din meniul sistem.
Utilizatorul poate modifica acest meniu sau poate genera un meniu cu un nume
140
dat. Extensia implicită a acestui program va fi MPR. Programul astfel obŃinut
poate fi refolosit în meniul care se creează pentru revenirea la meniul sistem.
Trebuie să menŃionăm că dacă nu se asigură această revenire nu putem continua
eventual activitatea cu Visual FoxPro.

Putem observa că revenirea la meniul sistem se poate realiza şi în alte moduri,


de exemplu, generând pe opŃiunea TERMIN, comanda
SET SYSMENU TO DEFAULT

8.2.8. Construirea efectivă a meniului şi submeniurilor


Fereastra constructorului de meniuri are în stânga un chenar în care avem o listă verticală
formată din 3 elemente:
Chenarul de tip text Prompt este zona în care se definesc textele care vor apare
în cadrul opŃiunilor, de exemplu în figura de mai sus \<File. Referitor la aceste
texte trebuie să subliniem faptul că, aşa după cum se poate observa, anumite
caractere au în faŃă simbolul \. SemnificaŃia acestui fapt este:
• Dacă \< este în faŃa unui caracter, acesta va deveni caracter de selecŃie în
sensul cunoscut din Windows, adică, în cadrul numelui opŃiunii din meniu va
apare subliniat şi dacă meniul (submeniul) respective este active şi se
tastează caracterul respectiv se lansează automat opŃiunea;
• Dacă \ singur apare în faŃa unei opŃiuni, aşa după cum se poate constata din
exemplul de mai jos (opŃiunea Creare), această opŃiune va fi scrisă mai slab şi
nu este selectabilă. Coloana Result este o listă derulantă în care se poate
stabili rezultatul acŃiunii de activare a opŃiunii respective din meniu
(submeniu).

Dacă este prima selecŃie a unui element din coloană în dreptul elementului
respective apare un declanşator Create. Elementele din lista derulantă pot fi:
• Command – indică faptul că prin selectarea opŃiunii respective din meniu se
doreşte executarea unei singure comenzi. Dacă se selectează această opŃiune
în dreptul ei apare un chenar de editare a textului comenzii care se doreşte să
fie executate în cazul selectării opŃiunii.
• PadName – Orice meniu are două nume. Unul este cel din interfaŃă, care
apare în coloana Prompt şi unul care apare în programul generat cu extensia
.MPR (care este numele de PAD). Orice opŃiune dintr-un meniu are un
număr (BAR#) . Dacă utilizatorul nu îi dă el un nume PAD-ului, sistemul
va genera automat un identificator. Acesta este fix, dacă este PAD sistem şi
se schimbă de la generare la alta dacă este PAD utilizator. Dacă în cadrul
programului utilizatorul vrea să utilizeze un PAD, el trebuie să folosească
numele de PAD. Stabilirea unui nume de PAD pentru un meniu aferent unei

141
BAZE DE DATE

opŃiuni, se poate realiza în chenarul Prompt Options. Numele standard de


PAD-urilor sistem pot fi obŃinute cu ajutorul funcŃiei SYS(2013).
• Submenu- lansează crearea/editarea unui submeniu. Fereastra de editare a
unui submeniu este asemănătoare cu cea a meniului principal (Bară) cu
unele mici modificări. Astfel, în locul opŃiunii PAD va apare BAR# care
este numărul intern al opŃiunii. De exemplu, tipărirea are numărul intern,
care se poate obŃine tot cu funcŃia SYS(2013), sau din crearea unui meniu
rapid (QUICK MENU) şi efectuarea unui click pe declanşatorul Edit şi
selectarea opŃiunii _mfi_sysprint. De asemenea, spre deosebire de meniul
bară, aici declanşatorul INSERT BAR este accesibil. Din figura de mai jos
se poate remarca, faptul că opŃiunile dintr-un meniu vertical se pot grupa.
Pentru a le grupa se trage o linie orizontală. Pentru a insera o line de
separaŃie în coloana Prompt se utilizează combinaŃia \-. Se poate observa de
asemenea fără dificultate din figură dacă o opŃiune dintr-un meniu vertical
are un submeniu, numele lui este urmat de un vârf de săgeată. Numărul
nivelelor de meniuri nu este limitat.
• Procedure – indică faptul că la selectarea opŃiunii corespunzătoare din
meniu se doreşte executarea unei proceduri (secvenŃe de comenzi). Dacă se
selectează opŃiunea Procedure, apare alături de zona respectivă un
declanşator pe care scrie Create la crearea procedurii şi respectiv Edit dacă
procedura a fost deja creată şi se doreşte, eventual, modificarea ei.
• Ultima coloană a acestei ferestre este Options. În această fereastră putem
stabili opŃiuni legate de obiectul în cauză. Dacă se selectează o opŃiune, de
exemplu Vizualizare, în dreptul ei apare un buton pe coloana Options.
Efectuând un click pe butonul respective apare chenarul Prompt options cu
ajutorul căreia se pot stabili opŃiunile dorite. Această fereastră are mai multe
chenare.
- Primul chenar Shortcut, are două zone de tip tex, Key Label şi Key
Text, cu ajutorul cărora putem defini combinaŃii de taste pentru apelul
scurtcircuitat al meniului sau al opŃiunii, analog metodei binecunoscute
din Windows. OpŃiunile au pentru scurtcircuitare Ctrl+tastă. De
exemplu, pentru vizualizare se poate utiliza combinaŃia Ctrl+V. Nu se
admite combinaŃia Ctrl+J. IniŃial cursorul de inserare este în Key Label
iar textul afişat este (Press the key). AcŃionând deodată Ctrl+V aceasta se
înscrie în ambele zone. Ulterior, ca în exemplul nostru, utilizatorul poate
să schimbe textul în zona Key Text.
- Chenarul Negotiate se utilizează numai în situaŃia în care titlul meniului
va fi un container pentru un obiect. În acest caz se poate stabili forma
containerului şi sursa obiectului.
- Skip for permite stabilirea unei expresii logice care dacă ia valoarea True
opŃiunea nu este selectabilă. Expresia poate fi construită şi cu ajutorul

142
Constructorului de expresii, dacă se efectuează un click pe butonul de
lângă chenarul de editare.
- În chenarul Message se poate introduce o expresie de tip caracter care
după evaluare este afişată pe linia de stare a ferestrei.
- Pad Name/Bar# are semnificaŃia de mai sus, cu observaŃia că Pad Name
este utilizabil numai în situaŃia utilizării unuia dintre prompterele diferite
de PAD, iar BAR poate fi folosit numai în meniurile contextuale.
- Picture - se utilizează dacă în stânga textului din meniu sau în meniu se
afişează un grafic sau se utilizează o resursă sistem.
- Comment – permite editarea unui comentariu ca şi în cazul generării
altor obiecte.

Revenind la Menu Designer, în dreapta sus apare lista derulantă Menu Level,
cu ajutorul căruia se poate stabili nivelul de meniu care este afişat curent. Dacă
se doreşte navigarea în meniu, de exemplu trecerea la meniul bară, se execută
un click pe săgeată şi din lista expandată se selectează Menu Bar. În felul
acesta ne putem deplasa pe structura arborescentă a meniului.

În fereastra Menu Designer avem şi chenarul Item cu patru declanşatoare


INSERT, INSERT BAR, DELETE şi MOVE ITEM. Cu aceste se poate
insera o opŃiune înaintea unei alte opŃiuni din meniul bară (INSERT). În acest
caz apare o opŃiune cu numele standard New Item.

Folosind INSERT BAR apare lista verticală Insert System Menu Bar din care
dacă se selectează, de exemplu, New, se obŃine linia \New din figura de mai jos.

Dacă se selectează butonul Move Item apare fereastra cu acelaşi nume, iar din
lista derulantă To Location se poate selecta locaŃia din meniu unde se doreşte
mutarea opŃiunii.

Ultima opŃiune din fereastra Menu Designer este Preview, cu care putem
vizualiza în orice moment modul de funcŃionare a meniului care se construieşte
sau se editează, ca şi în cazul exemplului nostru.

143
BAZE DE DATE

8.2.9. OpŃiunile meniului vertical Menu şi generarea


meniurilor

Odată cu lansarea comenzii de creare sau modificare a unui meniu, în meniul


bară va apare opŃiunea MENU. Dacă se selectează această opŃiune apare un
meniu vertical.

OpŃiunile meniului au fost prezentate anterior rămânând doar opŃiunea de


generare. Deci, dacă se salvează fără generare meniul, se obŃine tabela specială
cu extensia MNX. Dacă se selectează opŃiunea Generate apare chenarul cu
numele Generate Menu.

În chenarul Output File putem modifica numele cu care se generează meniul


(implicit este numele cu care s-a generat tabela .mnx) şi eventual calea, fie
tastând direct, fie utilizând un sistem Browse cu ajutorul butonului alăturat.

Efectuând un click pe butonul Generate se generează automat programul cu


extensia .mpr, care se execută prin comanda
DO <nume_meniu>.mpr

Trebuie remarcat că există şi alte metode de creare a meniurilor şi opŃiunilor


cum ar fi comenzile DEFINE PAD, DEFINE POPUP şi DEFINE BAR

De asemenea, Visula Fox Pro permite crearea unor meniuri contextuale. Aceste
meniuri se utilizează executând un click cu butonul din dreapta pe un obiect.
Meniurile contextuale se creează asemănător cu cele bară, deosebirile fiind date
numai de faptul că în chenarul New Menu se selectează declanşatorul Shortcut,
în loc de Menu, iar meniul este vertical.

144
REZUMAT Modulul este format din două unităŃi.
Prima unitate este destinată gestiunii rapoartelor.
Problemele principale tratare în această unitate sunt:
1. Structura şi planificarea unui raport, din punct de vedere
conceptual;
2. Componentele unui raport în VFP;
3. Controalele raportului şi modul de utilizare a acestora
4. Structura constructorului de rapoarte de rapoarte şi modul de
utilizare a lui;
5. Gestiunea rapoartelor (creare, modificare, exploatare şi
ştergere)
6. AsistenŃi pentru gestiunea rapoartelor atât pentru rapoarte
rapide cât şi utilizarea Wizard-ului.
A doua unitate este destinată meniurilor. Principalele probleme
tratate se referă la:
1. Probleme conceptuale referitoare la meniuri şi rolul lor;
2. Structura şi utilizarea ferestrei constructorului de meniuri;
3. OpŃiunile posibile la generarea meniurilor şi submeniurilor;
4. Gestiunea meniurilor (creare, modificare, ştergere);
5. Exploatarea meniurilor.
TEME DE 3. Se vor elabora aplicaŃii legate de cele două teme din modul.
CONTROL, 4. Se vor elabora aplicaŃii complexe de Informatică Economică
APLICAłII Afaceri,
BIBLIOGRAFIE 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St., Tomai
N. Baze de date şi programarea calculatoarelor utilizând
limbajul Visual FoxPro, Ed. Risoprint, Cluj-Napoca, 2003, p.
310-350.
2. Marian Cristescu, Baze de date utilizate în mediul economic,
Editura ”ALMA MATER”, Sibiu, 2007, pg. 321-352
3. Gabriel Dima ,Mihai Dima, Bazele Visual Foxpro 5.0,
Editura Teora ,Bucuresti,1999.
4. Marin Fotache,Ioan Brava, Cătălin Strâmbei, Liviu CreŃu,
Visual FoxPro; Ghidul dezvoltării aplicaŃiilor profesionale,
Editura Polirom Iaşi, 2002.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean,
Dezvoltarea aplicaŃiilor cu baze de date în Visual FoxPro,
Editura All, Bucureşti, 2001.
6. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe,
Editura Risoprint Cluj, 2003.

145
BAZE DE DATE

9. INTEROGĂRI(QUERIES) ÎN VISUAL FOXPRO

CONCEPTE - Interogarea ca metodă de extragere a datelor;


DE BAZA - Sursa datelor;
- Tipuri de interogări;
- Gestiunea interogărilor;
- Interogări şi rolul lor;
- Crearea şi modificarea interogărilor;
- Rularea interogărilor.
OBIECTIVE 6. Însuşirea tehnicilor de creare a unei interogări Visual
FoxPro;
7. Familiarizarea cu structura interogărilor din Visual
FoxPro;
8. Formarea deprinderilor de creare şi utilizare a
interogărilor;
9. Crearea abilităŃilor de creare şi utilizare a interogărilor
în Visual FoxPro.
RECOMANDĂRI 9. Se vor proiecta din punct de vedere conceptual structuri
PRIVIND logice de interogări;
STUDIUL 10. Se vor studia cu atenŃie modalităŃile de construire
a interogărilor;
11. Se vor crea diferite interogări pentru aplicaŃii
economice.
REZULTATE După parcurgerea acestui modul utilizatorul trebuie să fie
ASTEPTATE în măsură să definească şi folosească corect interogările
şi să implementeze pe baza lor aplicaŃii complexe din
informatica economică şi de afaceri.

146
9.1. CREAREA INTEROGĂRILOR

OBIECTIVE 4. Sursa datelor;


5. Tipuri de interogări;
6. Crearea şi modificarea interogărilor.
NOłIUNI 1. Interogare:
CHEIE 2. Tipuri de interogări;
3. Metode de creare;
4. ExecuŃia interogărilor.

9.1.1. Tipuri de interogări:

 de selectie: permit selectarea anumitor inregistrari din tabele pe baza unor


criterii de selectie;
 de actiune: realizeaza o actiune (adaugare, actualizare, stergere) asupra
unei tabele sau permit crearea unei tabele noi care sa contine anumite
campuri selectate pe baza unor criterii
Crearea interogarilor in Visual FoxPro se face utilizand Query Designer prin
selectarea optiunii Query->New.

Paşi:
P1: Se selecteaza tabelele din care se vor utiliza datele;

P2: Selectarea campurilor dorite se realizeaza in fereastra Fields, care permite si


contruirea de expresii noi cu ajutorul utilitarului Expression Builder (optiunea
Functions and Expressions – vezi paragraful Costruirea expresiilor in
Expression Builder). Vezi figura 1.

147
BAZE DE DATE

Figura 1: Selectarea si construirea expresiilor ce vor apare in interogare

P3: (opŃional): Vizualizarea si modificarea legaturilor dintre tabele se face in


fereastra Join in cazul in care se doreste schimbarea legaturilor.
P4: Specificarea criteriilor de selectie se realizeaza in fereastra Filter prin
utilizarea operatoriilor (vezi tabelul) si prin crearea de noi expresii cu ajutorul
utilitarului Expression Builder (opŃiunea Expressions). Vezi figura 2.

Figura 2: Stabilirea criteriilor de selectie


Operatori:
<, >, =, >=, <=, NOT Operatori de comparatie
148
BETWEEN ... AND ... între două valori (inclusiv).
SELECT codp, cant FROM randfact WHERE cant BETWEEN 10 AND 15;
IN(listă) egal cu oricare valoare din listă
SELECT codf, denumire FROM furnizori WHERE codf IN (7902, 7566,
7788);
SELECT codf, denumire FROM furnizori WHERE denumire IN
(’ALFA’,’DELTA’);
LIKE similar cu un şablon
% - oricâte caractere; _ - un caracter;
SELECT denumire, localitate FROM furnizori WHERE localitate LIKE
’S%’;
SELECT denumire, localitate FROM furnizori WHERE localitate LIKE
’_A%’;
IS NULL are valoarea NULL
SELECT codf, denumire FROM furnizori WHERE denumire IS NULL;

P5: Ordonarea datelor se realizeaza in ferestra Order By, iar gruparea acestora
in functie de un anumit camp se realizeaza in fereastra Group By. Aceste
optiuni sunt utilizate numai in cazul interogarilor de grup (ex. Pentru a calcula
totalul unei facturi, datele vor fi grupate mai intai in functie de campul nrserie
din tabela Facturi si apoi se va aplica functia SUM() pentru insumarea valorilor
produselor).

9.1.2. Construirea expresiilor în Expresion Buider

Sintaxa generala este:


[Expresie] AS ALIAS
unde:
[Expresie] este o constructie formata din campuri si functiile oferite de limbaj
Alias este o denumire, sinonim pt expresia respectiva

Exemplu:
1) RandFact.Cant * RandFact.Pret AS Valoare - se calculeaza valoarea unui
produs
2) 0.19 * (RandFact.Cant * RandFact.Pret) AS TVA - se calculeaza
valoarea TVA pt un produs
3) Socuri.SI + Stocuri.CI – Stocuri.CE AS Stoc_Final – se calculeaza stocul
final pt un produs aflat in depozit
4) SUM(1.19 * (RandFact.Cant * RandFact.Pret)) AS Valoare_Factura – se
calculeaza valoarea totala a unei facturi. Atentie! Pt acest tip de expreie
trebuie grupate inregistrarile in functie de nrserie in optiunea Group By

149
BAZE DE DATE

5) COUNT( Ranffact.Codp) AS NrProduse – numara totalul produselor pe


fiecare factura. Atentie! Pt acest tip de expreie trebuie grupate
inregistrarile in functie de nrserie in optiunea Group By
9.2. Nucleul SQL – Structured Query Language

Limbaj standard de interogare a bazelor de date. Implementat în


majoritatea SGBD-urilor, dar nu numai.
Interogarea bazelor de date, fie dintr-un limbaj de nivel înalt (C++,
Pascal, Visual C, Delphi...), fie dintr-un limbaj de programare Web (PHP, ASP,
JSP), se face, cel mai adesea, prin fraze SQL.
SELECT [DISTINCT] { * , atribut [alias] , expresii AS ALIAS ...}
FROM tabelă;
WHERE {conditii, precizarea legaturilor dintre tabele}
GROUP BY tabela..camp
HAVING {conditii impuse valorilor de grup}
ORDER BY tabela . camp ASC/DESC

unde:
SELECT specifică atributele selectate;
DISTINCT suprimă valorile duplicate;
* selectează toate atributele;
atribut selectează coloana numită;
expresie permite construirea de expresii si valori noi
alias denumiri pentru atributele selectate;
FROM table specifică tabela ce conŃine coloanele selectate.
WHERE clauza permite specificarea conditiilor si a criteriilor
de selectie a datelor
GROUP BY se precizeaza campul dupa care vor fi grupate datele in
cazul expresiilor si functiilor de grup (SUM(), AVG(),
COUNT(), MIN(), MAX())
HAVING in cazul functiilor de grup conditiile impuse acestora
se precizeaza in clauza HAVING
ORDER BY precizeaza ordonarea in functie un anumite campuri
ascendent (ASC) –implicit sau descendent (DESC)

Frazele SQL:
 Nu sunt case sensitive;
 Pot fi scrise pe mai multe linii;

150
 Cuvintele cheie nu pot fi prescurtate sau scrise pe mai multe linii;
In construirea frazelor SQL se utilizeaza operatorii prezentati anterior la
Queries:

Atributele se specifică în ordinea în care se doresc a fi afişate, nu


obligatoriu în ordinea în care apar în descrierea tabelelor.
Afişarea se face implicit cu litere mari, la stânga pentru datele de tip dată
calendaristică şi caracter, şi la dreapta pentru datele numerice.
Valoarea NULL, ca şi în alte limbaje, semnifică valoare ne-disponibilă, ne-
alocată, şi nu este acelaşi lucru cu „blank” sau „zero”.
Cu ajutorul frazelor select se pot extrage informaŃii din baza de date.
Utilizând această instrucŃiune se pot realiza toate cele trei operaŃii specifice
modelului relaŃional.

SelecŃia: Operator unar, prin care se obŃine o nouă relaŃie care conŃine
toate atributele relaŃiei iniŃiale şi un număr redus de tupluri.
Reducerea se face după o condiŃie numită condiŃie de selecŃie.

ProiecŃia: Operator unar, prin care se obŃine o nouă relaŃie care conŃine un
număr redus de atribute faŃă de relaŃia iniŃială şi toate valorile
sau combinaŃiile distincte de valori ale acestor atribute.
Atributele care se regăsesc în relaŃia rezultată se numesc
atribute de proiecŃie.

151
BAZE DE DATE

JoncŃiunea: Operator binar, caz particular de produs cartezian. RelaŃia


rezultat va conŃine tuplurile corespunzătore atributelor de join
care se află într-o anumită relaŃie. Cel mai utilizat caz de
joncŃiune este acela în care atributele de join au aceeaşi
semnificaŃie, relaŃia în care acestea trebuie să se afle este de
egalitate, unul dintre atribute e cheie primară într-una dintre
relaŃii, iar celălalt este cheie externă.

EXEMPLE:

1. Sa se selecteze toti furnizorii din tabela furnizori:

SELECT * FROM furnizori


2. Sa se selecteze campurile codf, denf si adresa din tabela furnizori:

SELECT codf, denf, adresa FROM furnizori

3. Sa se selecteze numai furnizorii din Bucuresti:

SELECT * FROM furnizori


WHERE adresa LIKE ’%BUCURESTI%’

4. Sa se selecteze facturile neachitate:

SELECT * FROM facturi


WHERE stare = ’N’

5. Sa se selecteze facturile emise de furnizorul cu codul F4:

SELECT * FROM facturi


WHERE codf = ’F4’

152
6. Sa se selecteze facturile emise de furnizorii firmei (in clauza WHERE se
va preciza conditia de legatura dintre tabele)

SELECT furnizori.*, facturi.*


FROM furnizori, facturi
WHERE facturi.codf=furnizori.codf

7. Sa se selecteze facturile neachitate emise de furnizorul F4:

SELECT furnizori.*, facturi.*


FROM furnizori, facturi
WHERE facturi.codf=furnizori.codf AND facturi.stare=’N’ AND
facturi.codf = ’F4’

8. Sa se calculeze valoarea fiecarui produs (valoare =cant* pret)

SELECT facturi.*, randfactura.*, randfactura.cant * randfactura.pret AS


Val_Prod
FROM facturi, randfactura
WHERE facturi.nrserie=randfactura.nrserie

9. Sa se selecteze numai produsele cu valoarea cuprinsa intre 1 si 3 mil:

SELECT facturi.*, randfactura.*, randfactura.cant * randfactura.pret AS


Val_Prod
FROM facturi, randfactura
WHERE facturi.nrserie=randfactura.nrserie and randfactura.cant *
randfactura.pret BETWEEN 1000000 AND 3000000

10. Sa se calculeze valoarea totala a fiecarei facturi (se utilizeaza functie


SUM() si clauza GROUP BY pt gruparea datelor in functie de
facturi.nrserie ) si sa se sorteze descrescator in functie de valoare:

SELECT facturi.*, SUM( randfactura.cant * randfactura.pret ) AS


Total_Fact
FROM facturi, randfactura
WHERE facturi.nrserie=randfactura.nrserie
GROUP BY facturi.nrserie
ORDER BY Total_Fact DESC
9.3. Crearea interogărilor prin Querz Wizard

153
BAZE DE DATE

O aplicaŃie pe lângă tabele şi formulare, poate conŃine şi interogări şi


rapoarte folosite pentru selecŃia şi afişarea datelor necesare utilizatorilor.
Interogările pot avea diferite destinaŃii, astfel încât pot fi utilizate şi în cadrul
altor componente ale aplicaŃiei.
Când utilizăm o interogare în cadrul aplicaŃiei, de fapt, utilizăm o
instrucŃiune SELECT – SQL, pe care o putem crea prin intermediul unei
interogări scrise în fereastra Proiectantului de Interogări (Query Designer) sau
prin codul scris pentru un eveniment sau pentru o procedură.
Folosind instrucŃiunea SELECT – SQL avem posibilitatea să combinăm
diverse surse de date, să filtrăm înregistrările, să manipulăm datele şi să
ordonăm rezultatele, putem, de asemenea, să controlăm rezultatele unei
interogări şi locul de stocare al acestora.
Pentru a crea o instrucŃiune SELECT – SQL folosim Proiectantul de
Interogări sau comenzi:
cu ajutorul Proiectantul de Interogări (Query Designer) generăm instrucŃiunea,
apoi copiem conŃinutul ferestrei SQL într-o fereastră de cod prin comenzi,
scriem instrucŃiunea SELECT – SQL într-o fereastră de cod.
Pentru a afişa rezultatele interogării într-un grafic putem folosi: Graph
Wizard, Proiectantul de Interogări sau o instrucŃiune SELECT – SQL. În
ultimele două variante trebuie inserat în setul de rezultate un câmp de tip
numeric pentru a crea graficul. Putem alege unul din cele şase tipuri de grafice,
fiecare cu câte două variante.

Exemplu:
Deoarece modul de proiectare şi utilizarea a interogărilor este asemănător
vederilor, vom prezenta în continuare modalitatea concretă de proiectare a unei
interogări comenzi_qry.qpr creată pe baza unei vederi cu numele comenzi_view.
SET DEFAULT TO c:\anca\carte-sgbd
SET DATE TO DMY
OPEN DATABASE "c:\anca\carte-sgbd\comenzi.dbc" EXCLUSIVE
MODIFY DATABASE
Prin această secvenŃă de comenzi am specificat directorul curent de lucru,
am setat modul de afişare a datei calendaristice la formatul zz/ll/aa, am deschis
baza de date comenzi.dbc, care conŃine şi vederea comenzi_view, şi am activat
fereastra Database Designer. Din meniul File, opŃiunea New, Query, Wizard,
activăm caseta Wizard Selection de unde selectăm opŃiunea Query Wizard
pentru a proiecta interogarea cu ajutorul asistentului (Wizard).
Specificarea sursei de date şi a câmpurilor. Mai întâi selectăm numele
vederii care va furniza sursa de date pentru interogare şi câmpurile care vor face
parte din structura interogării, ca în figura 3.

154
Figura 3. Fereastra Proiectantului de Interogări (Query Wizard)

Specificarea condiŃiei de filtrare a înregistrărilor. În etapa următoare de


proiectare vom specifica condiŃia de filtrare a înregistrărilor (figura 4), şi
anume, aceea ca interogarea să conŃină numai înregistrările clienŃilor din
CRAIOVA.

Figura 4. Specificarea condiŃiei de filtrare a înregistrărilor

Ordonarea înregistrărilor. Pentru ca înregistrările să fie ordonate


crescător după data comenzii vom specifica această cerinŃă ca în figura 5.

155
BAZE DE DATE

Figura 5. Specificarea condiŃiei de ordonare a înregistrărilor

Salvarea interogării. Vom salva interogarea în fişierul comenzi_qry.qpr.


Fereastra Proiectantului de Interogări (Query Designer) pentru acest fişier este
prezentată în figura 6.

Figura 6. Fereastra Proiectantului de Interogări pentru fişierul comenzi_qry.qpr

Comanda SELECT – SQL care generează această interogare are


următoarea sintaxă:
SELECT *;
FROM comenzi!comenzi_view;
156
WHERE AT("CRAIOVA",Comenzi_view.adresa) > 0;
ORDER BY Comenzi_view.datacda
Pentru a vizualiza rezultatul interogării folosim comanda DO care are
sintaxa DO nume_fişier.ext sau meniul Query, opŃiunea Run Query.
În cazul acestui exemplu, comanda DO are următoarea sintaxă:
DO comenzi_qry.qpr
În urma execuŃiei acestei comenzi se obŃine rezultatul prezentat în figura
7.

Figura 7. Rezultatul interogării comenzi_qry

Exemplu de proiectare a unei interogări cu numele Furnizori folosind BD


Evidenta Facturi.

Pentru realizarea interogării se foloseşte varianta Query Wizard.

157
BAZE DE DATE

Pasul 1: se selectează din tabela Furnizori, respectiv, tabela Facturi, câmpurile


care vor apare în interogare, cu observaŃia că se preia o singură dată câmpul
CUI din tabela Furnizori (el apare şi în structura tabelei Facturi).

Pasul 2: se validează relaŃia creată între cele două tabele prin câmpul comun
CUI.

158
Pasul 3: se poate stabili o condiŃie de filtrare a înregistrărilor, astfel încât
în interogare vor apare numai acele înregistrări din BD care îndeplinesc condiŃia
impusă (ex. FURNIZORI.DENUMIRE equals “CRAIOVA”).

Pasul 4: se pot stabili câmpurile după care sunt ordonate datele din
interogare.

159
BAZE DE DATE

Pasul 5. Este salvată interogarea în fişierul Furnizori.qpr.

Se pot adăuga în structura interogării pe lîngă câmpurile componente ale


tabelelor şi expresii calculate (ex. Facturi.valfaratva*0.19 care determină
valoarea tva-ului pt. Fiecare factură şi Facturi.valfaratva*1.19 care determină
totalul general al fiecărei facturi).

În figura de mai sus este prezentat rezultatul interogării BD EvidenŃă Facturi.

TEME DE 5. Se vor realiza aplicaŃii legate de diferitele tipuri de

160
CONTROL, interogări;
APLICAłII 6. Se vor elabora aplicaŃii complexe de Informatică Economică
şi de afaceri,
BIBLIOGRAFIE 1. Avram-NiŃchi R., Ghişoiu N., Goron S., NiŃchi St., Tomai
N. Baze de date şi programarea calculatoarelor utilizând
limbajul Visual FoxPro, Ed. Risoprint, Cluj-Napoca, 2003, p.
218-245.
2. Marian Cristescu, Baze de date utilizate în mediul economic,
Editura ”ALMA MATER”, Sibiu, 2007, pg. 247-285
3. Gabriel Dima ,Mihai Dima, Bazele Visual Foxpro 5.0,
Editura Teora, Bucuresti,1999.
4. Marin Fotache,Ioan Brava, Cătălin Strâmbei, Liviu CreŃu,
Visual FoxPro; Ghidul dezvoltării aplicaŃiilor profesionale,
Editura Polirom Iaşi, 2002.
5. Manole Velicanu, Ioan Lungu, Mihaela Muntean,
Dezvoltarea aplicaŃiilor cu baze de date în Visual FoxPro,
Editura All, Bucureşti, 2001.
6. Nicolae Ghişoiu, Visual FoxPro; ExerciŃii şi programe,
Editura Risoprint Cluj, 2003.

161