Documente Academic
Documente Profesional
Documente Cultură
Indrumar Laborator BD
Indrumar Laborator BD
BAZE DE DATE
ndrumar de laborator
2005
Refereni tiinifici:
Prof.univ.dr.ing. Alexandru Valachi Universitatea Tehnic Gh. Asachi Iai
Prof.univ.dr.ing. tefan-Gheorghe Pentiuc Universitatea tefan cel Mare Suceava
004.65(075.8)
Copyright 2005. Toate drepturile asupra acestei ediii sunt rezervate autorului
CUPRINS
Introducere.........................................................................................................................4
Lucrare de laborator nr. 1..................................................................................................5
Baze de date ACCESS. Crearea unei baze de date.................................................5
Lucrare de laborator nr. 2..................................................................................................9
Baze de date ACCESS. Crearea i utilizarea tabelelor...........................................9
Lucrare de laborator nr. 3................................................................................................14
Baze de date ACCESS. Crearea cmpurilor de tip Lookup Wizard....................14
Lucrare de laborator nr. 4................................................................................................21
Baze de date ACCESS. Crearea tabelelor bazei de date FurnizoriClienti...........21
Lucrare de laborator nr. 5................................................................................................24
Baze de date ACCESS. Interogri........................................................................24
Lucrare de laborator nr. 6................................................................................................30
Baze de date ACCESS. Formulare.......................................................................30
Lucrare de laborator nr. 7................................................................................................34
Baze de date ACCESS. Rapoarte..........................................................................34
Lucrare de laborator nr. 8................................................................................................43
Baze de date FoxPro. Creare tabele, introducere i editare date n tabele...........43
Lucrare de laborator nr. 9................................................................................................49
Baze de date FoxPro. Elementele limbajului FoxPro...........................................49
Lucrare de laborator nr. 10..............................................................................................59
Baze de date FoxPro. Clase de instruciuni ale limbajului FoxPro......................59
Lucrare de laborator nr. 11..............................................................................................67
Baze de date FoxPro. Programarea n Visual FoxPro..........................................67
Lucrare de laborator nr. 12..............................................................................................75
Limbajul SQL. Crearea bazei de date...................................................................75
Lucrare de laborator nr. 13..............................................................................................82
Limbajul SQL. Interogarea bazelor de date..........................................................82
Bibliografie......................................................................................................................88
Introducere
Aplicaiile practice prezentate n ndrumarul de laborator au la baz lucrarea Baze de date
elaborat de autor i publicat de Editura Universitii tefan cel Mare Suceava, ISBN
973-8293-83-9, 2003.
Informatica de gestiune a impus dezvoltarea i diversificarea rapid a Sistemelor de
Gestiune a Bazelor de Date (S.G.B.D.) i a condus la realizarea unui numr impresionant de
aplicaii informatice cu baze de date. Sistemele i aplicaiile informatice cu baze de date sunt
utilizate azi n aproape toate domeniile de activitate din care un loc aparte l ocup utilizarea lor n
cadrul agenilor economici.
Scopul lucrrii este de a familiariza studenii economiti cu utilizarea unor produse pentru
crearea i gestionarea bazelor de date. Lucrrile practice de laborator sunt realizate n cadrul
produselor FoxPro, Access i a limbajului SQL utilizat n cadrul sistemului Oracle.
Pentru a asigura parcurgerea i nsuirea problematicii propuse, lucrarea de fa cuprinde
trei pri i anume: I Baze de date Access, II Baze de date FoxPro, III Limbajul SQL.
Partea I-a prezint un mediu de lucru performant cu baze de date. Sunt definite
componentele unei baze de date Access, fazele i procedurile de urmat pentru crearea i exploatarea
bazei de date. Aceast problematic este tratat pe parcursul a apte lucrri de laborator, n fiecare
lucrare fiind prezentate sumar faciliti ale produsului Access, modaliti de soluionare a unor
probleme practice i formulate probleme propuse spre rezolvare.
n partea a II-a sunt prezentate ci practice de organizare i exploatare a bazelor de date
relaionale cu ajutorul sistemului FoxPro. Sunt prezentate elementele limbajului FoxPro i
evideniate facilitile oferite de mediul de programare Visual FoxPro. Problemele avute n vedere
privind crearea i utizarea unei baze de date FoxPro sunt enunate i soluionate n cadrul a patru
lucrri de laborator avnd n vedere problema enunat i rezolvat folosind produsul Access.
n partea a III-a este prezentat limbajul SQL pentru crearea, administrarea i interogarea
bazelor de date relaionale. Implementat n majoritatea produselor software moderne de baze de
date, limbajul SQL este larg utilizat n arhitecturi cu baze de date client / server, sisteme de baze de
date distribuite, pentru accesarea bazelor de date n reele de calculatoare, ct i pentru interogarea
bazelor de date pe un singur calculator personal. Sunt illustrate exemple de utilizare a limbajului
SQL n cadrul produsului Oracle pentru crearea, actualizarea i interogarea bazei de date, definirea
utilizatorilor i acordarea drepturilor de acces, asigurarea securitii bazei de date la nivel de sistem
i la nivel de relaie. Exemplele prezentate pecum i problemele formulate spre rezolvare pleac de
la problema enunat i soluionat n primele dou pri ale lucrrii.
Prezentarea modalitilor de soluionare a aceleiai probleme n cadrul a trei produse pentru
crearea i interogarea bazelor de date relaionale ofer posibilitatea efecturii unei analize
comparative privind facilitile oferite de fiecare din cele trei produse utilizate.
2.
n caseta de dialog File New Database care apare pe ecran (figura 2.1), se va specifica
numele bazei de date n controlul File name i se alege un dosar pentru baza de date n controlul
Save in, apoi execut clic pe butonul Create. Pe ecran se va deschide fereastra Database (vezi
figura 4).
Dup crearea unei baze de date goale se vor defini obiectele (tabelele, formularele,
interogrile, rapoartele etc.) care vor forma baza de date.
Crearea bazei de date folosind Database Wizard
Pentru a crea o nou baz de date folosind un Wizard se vor executa urmtoarele operaii:
Atunci cnd se deschide o sesiune de lucru Access, pe ecran se afieaz caseta de dialog Microsoft
Access ce conine opiuni care permit crearea unei baze de date noi sau deschiderea uneia deja
existente (vezi figura 1). Pentru a crea o baz de date folosind un Wizard, se va executa clic pe
opiunea Database Wizard i apoi se execut clic pe butonul OK. Dac este deja deschis o baz
de date sau caseta de dialog Microsoft Access este nchis, atunci se execut clic pe butonul New
Database din bara instrumentelor Standard. Pe ecran se afieaz caseta de dialog New (vezi figura
2). Se execut apoi clic pe eticheta Databases.
n eticheta Databases, se execut dublu-clic pe pictograma tipului de baz de date care se
va crea (vezi figura 3). n caseta de dialog File New Database se selecteaz dosarul n care se va
salva baza de date i se va tasta numele acesteia. Se execut clic pe butonul Create pentru a ncepe
definirea noii baze de date. Se vor urma indicaiile din casetele de dialog ce apar pe ecran. La
terminarea operaiei de creare a bazei de date pe ecran se afieaz fereastra Database coninnd
obiectele definite de Wizard (vezi figura 4), pe baza indicaiilor care au fost date n casetele de
dialog.
Problem propus
S se creeze baza de date FurnizoriClieni prin fiecare din cele dou metode prezentate mai
sus.
cmp; nu se memoreaz
potale.
Memo
Number
sau descrieri.
Date numerice folosite pentru calcule
8 bytes.
8 bytes.
zecimal.
Numere n secven unic (din 1 n 1) sau
Replication ID).
Yes/No
OLE Object
disc).
Wizard
obinuit 4 bytes.
Precizie
Memorie necesar
1 byte
10
Integer
Long Integer
Single
Double
-32,768 la 32,767
-2,147,483,648 la 2,147,483,647
-3.402823E38 la 3.402823E38
-1.79769313486232E308 la
7
15
2 bytes
4 bytes
4 bytes
8 bytes
1.79769313486232E308
Crearea unei tabele
n Microsoft Access exist dou metode de a creare a unei tabele i anume:
- se poate crea o tabel goal (empty) pentru a introduce datele;
- se poate crea o tabel folosind datele existente ntr-o alt surs de date.
Crearea unei tabele goale
n Microsoft Access exist patru procedee pentru crearea unei tabele goale, astfel:
Database Wizard pentru a crea ntr-o singur operaie toate tabelele, formularele i rapoartele
necesare ntregii baze de date. Database Wizard creeaz o nou baz de date. Acest procedeu nu
poate fi folosit pentru a aduga noi tabele, formulare sau rapoarte ntr-o baz de date existent.
Table Wizard pentru a alege cmpurile tabelei dintr-o varietate de tabele predefinite, cum ar fi
contacte de afaceri, inventare de cas sau articole medicale.
DataSheet pentru introducerea datelor direct ntr-o foaie de date (datasheet). La salvarea foii
de date Microsoft Access va analiza datele i automat va atribui tipul de date i formatul pentru
fiecare cmp.
Indiferent de metoda care se folosete pentru crearea unei tabele, se poate utiliza vederea
Design pentru a modifica descrierea tabelei, prin adugarea de noi cmpuri, stabilirea valorilor
implicite sau crearea mtilor de introducere. n figura 5 este reprezentat fereastra Design view
pentru crearea unei tabele.
11
12
Figura 6 Caseta de dialog New Table avnd selectat opiunea Design View
Definirea cmpurilor
Pentru a defini cmpuri n Design View se vor executa, n general urmtoarele operaii:
1. Pentru adugarea unui cmp n interiorul unei structuri deja definite, se selecteaz linia sub care
se va aduga noul cmp i apoi se execut clic pe butonul Insert Rows din bara instrumentelor
Standard sau se selecteaz comanda Rows din meniul Insert. Pentru a aduga cmpul la
sfritul structurii se execut clic n coloana Field Name a primei linii goale.
2. n coloana Field Name se tasteaz numele cmpului, respectnd regulile Microsoft Access
pentru denumirea obiectelor.
3. n coloana Data Type, se execut clic pe sgeat i se selecteaz tipul de dat dorit.
4. n coloana Description se poate introduce o descriere a cmpului.
5. n foaia de configurare Field Properties se stabilesc caracteristicile cmpului (dimensiune,
mesaj de introducere, valoarea implicit, formate de afiare etc.).
Algoritmul prezentat este valabil pentru urmtoarele tipuri de cmpuri: Text, Memo,
Number, Curency, Yes/No, Date/Time, AutoNumber.
Reguli de denumirea obiectelor
Numele unui obiect poate avea maximum 64 caractere i poate include orice combinaie de
litere, cifre, spatii i caractere speciale, exceptnd punctul (.), semnul exclamrii (!), apostroful (`)
13
i parantezele drepte ([,]). Este indicat s se evite folosirea spatiilor n numele obiectelor i nume
foarte lungi pentru obiecte dac acestea vor fi referite frecvent n expresii sau cod Visual Basic.
Proprietile cmpurilor
Fiecare cmp are un set de proprieti care se pot folosi pentru a personaliza modul n care
datele unui cmp sunt stocate, manipulate sau afiate. Spre exemplu, se poate controla numrul
maxim de caractere ce se pot introduce ntr-un cmp Text stabilind proprietatea FieldSize a
acestuia. Proprietile care exist pentru fiecare cmp depind de tipul de date care a fost selectat
pentru cmpul respectiv.
Pentru a modifica proprietile unui cmp se execut urmtoarele operaii:
1. Se deschide tabela n vederea Design.
2. n partea superioar a ferestrei Design se selecteaz cmpul ale crei proprieti urmeaz a fi
modificate.
3. Se selecteaz proprietatea a crei valoare vrem s-o modificm executnd clic n linia din
dreapta numelui proprietii (n fila General de sub descrierea tabelei).
4. Se repet operaiile 2 i 3 pentru toate proprietile ale cror valori vrem s le modificm.
5. Dup efectuarea tuturor modificrilor se nchide fereastra Design.
n cazul n care pentru un cmp s-a ales tipul Lookup Wizard, atunci se lanseaz un
Wizard prin intermediul cruia putem realiza o list de examinare care afieaz datele dintr-o tabel
(sau interogare) existent care conine deja date, sau dintr-o list de valori prestabilit dup cum
este ilustrat n imagiea de ecran din figura 7. Acest tip de cmp permite selectarea valorilor dintr-o
tabel sau list afiat, n loc ca ele s fie tastate.
Figura 7. Caset de dialog Lookup Wizard pentru crearea unei liste din valorile unei
tabele, (interogri), sau liste de valori
14
lista afiat.
2. n prima caset de dialog Lookup Wizard (vezi fihgura 7) se selecteaz opiunea I will the
lookup column to look up the values n a table or query (doresc o coloan de examinare pentru
a vizualiza valorile dintr-o tabel sau interogare) i apoi se execut clic pe butonul Next pentru
a trece la urmtoarea caset de dialog.
3. n a doua caset de dialog Lookup Wizard (vezi figura 8) se selecteaz tabela (interogarea) care
va sta la baza listei de examinare i care va trebui s existe i s conin date n cmpul
respectiv. Se execut clic pe butonul Next pentru a trece la urmtoarea caset de dialog.
4. n a treia caset de dialog Lookup Wizard (vezi figura 9) se vor selecta cmpurile din tabela
examinat a cror valori se vor afia n lista de examinare. Lista de examinare va conine
cmpurile ce se gsesc n lista Selected Fields. Pentru a muta un cmp din lista Available Fields
n lista Selected Field se va selecta cmpul n lista Available Fields i apoi se va executa clic
pe butonul >. Dup selectarea cmpurilor pentru lista de examinare se va executa clic pe
butonul Next pentru a trece la urmtoarea caset de dialog.
5. n a patra caset de dialog Lookup Wizard (vezi figura 10) se stabilete aspectul listei de
examinare. Se recomand activarea casetei de validare Hide key column pentru ca lista de
examinare s nu afieze i coloana care conine cheia de legtur. Pentru a trece la urmtoarea
caset de dialog se execut clic pe butonul Next.
6. n a cincea caset de dialog (vezi figura 11) se selecteaz coloana pentru preluare.
7. n a asea caset de dialog Lookup Wizard (vezi figura 12) se modific, dac este necesar,
numele cmpului de examinare i caseta de validare Display Help on customizing the lookup
column (afiarea Help-ului la personalizarea coloanei de examinare). Se execut clic pe
butonul Finish pentru a termina crearea cmpului de examinare.
15
Figura 8. A doua caset de dialog Lookup Wizard (pentru selectare tabel sau interogare)
Figura 10. A patra caset de dialog Lookup Wizard (pentru aspectul listei de examinare)
Figura 9. A treia caset de dialog Lookup Wizard (pentru selectare cmpuri pentru list)
16
Figura 11. A cincea caset de dialog Lookup Wizard (pentru selectare coloan pentru preluare)
17
the values that I want (voi tasta valorile pe care le doresc) i apoi se execut clic pe butonul
Next pentru a trece la urmtoarea caset de dialog.
3. n a doua caset de dialog Lookup Wizard (vezi figura 15) se va stabili numrul de coloane al
listei i se vor introduce valorile listei. Se execut clic pe butonul Next pentru a trece la
urmtoarea caset de dialog.
4. n a treia caset de dialog Lookup Wizard (vezi figura 16) se modific, dac este necesar,
numele cmpului de examinare i caseta de validare Display Help on customizing the lookup
column (afiarea Help-ului la personalizarea coloanei de examinare). Se execut clic pe
butonul Finish pentru a termina crearea cmpului de examinare.
18
Figura 14. Caset de dialog Lookup Wizard pentru crearea unui cmp pentru afiarea
unei liste
de valori
19
Figura 15. A doua caset de dialog Lookup Wizard pentru crearea unei liste de valori
Figura 16. A treia caset de dialog Lookup Wizard pentru crearea unei liste de valori
20
Semnificaie
Tip dat
Dimensiune
Observaii
Codp
Cod produs
Number, Integer
Cheie primar
Denp
Denumire produs
Text
20
Desp
Descriere produs
Hyperlink
Refer document
corespunztor
Semnificaie
Dimensiune
Observaii
Cod produs
Tip dat
Number, Integer
Lookup Wizard
Codp
Lookup Wizard
tabela PRODUSE
CodDep
Cod depozit
Text
Ump
Cant
Cantitate
Number, Integer
Pret
Pre unitar
Number,
LongInteger
Semnificaie
Tip dat
Dimensiune
Observaii
Codf
Cod furnizor
Number, Integer
Cheie primar
Denf
Denumire furnizor
Text
30
Adresaf
Adresa furnizor
Text
25
Semnificaie
Tip dat
Dimensiune
Observaii
Codc
Cod client
Number, Integer
Cheie primar
Denc
Denumire client
Text
30
Adresac
Adresa client
Text
25
21
cu
Semnificaie
Dimensiune
Observaii
Cod furnizor
Tip dat
Number, Integer
Lookup Wizard
Codf
Lookup Wizard cu
tabela FURNIZORI
Codp
Cod produs
Number, Integer
Lookup Wizard
Ump
Lookup Wizard cu
tabela PRODUSE
Creare i utilizare list
de valori
Pret
Pre unitar
Number,
LongInteger
Datao
Data ofertei
Date
Oferta
Oferta furnizor
Hyperlink
Refer document
corespunztor
Semnificaie
Dimensiune
Observaii
Cod furnizor
Tip dat
Number, Integer
Lookup Wizard
Codc
Lookup Wizard
tabela CLIENTI
Codp
Cod produs
Number, Integer
Lookup Wizard
Ump
Lookup Wizard cu
tabela PRODUSE
Creare i utilizare list
de valori
Cant
Cantitate
Number, Integer
Pret
Pre unitar
Number,
LongInteger
Datav
Data vnzrii
Date
cu
n imaginea de ecran din figura 17 sunt evideniate tabelele bazei de date FurnizoriClienti
i este reprezentat descrierea tabelei Produse.
n mod asemntor i conform precizrilor din tabelele de mai sus, se vor defini i celelalte
tabele n baza de date i se vor ncrca date pentru diverse produse, preuri, furnizori, clieni.
Pentru modificarea structurii unei tabele se va deschide tabela n modul Design.
Pentru preleare sau actualizare date ntr-o tabel se va deschide tabela n modul Open.
22
23
24
acestea se pot aduga la sfritul tabelei Clieni. De asemenea, interogrile de adugare sunt
utile pentru:
- Adugarea cmpurilor pe baza unui criteriu. Spre exemplu, este posibil ca la comenzile
nerezolvate s se adauge numai numele i adresa clienilor.
- Adugarea articolelor atunci cnd unele cmpuri dintr-o tabel nu exist ntr-o alt
tabel. O interogare de actualizare va aduga date numai n cmpurile identice i le va
ignora pe celelalte.
4. Interogare pentru creare tabele Creeaz o nou tabel din toate datele sau numai dintr-o parte
a datelor, din una sau mai multe tabele. Interogrile pentru crearea tabelelor se pot utiliza
pentru:
- Crearea unei tabele pentru a o exporta ntr-o alt baz de date Microsoft Access. Spre
exemplu, este posibil s fie creat o tabel ce conine mai multe cmpuri din tabela Angajai i apoi
aceasta s fie exportat ntr-o baz de date folosit de departamentul personal.
- Crearea de rapoarte care s afieze datele ncepnd cu o dat specificat. Spre exemplu, sa
presupunem c se dorete tiprirea unui raport pe 15 Mai 2002 care s afieze totalul vnzrilor din
primul trimestru, bazat pe datele care au fost n tabele de baz pn la 01.04.2002, 9.00 A.M. Un
raport bazat pe o interogare sau instruciune SQL extrage cele mai recente date din tabele (pn la
15 Mai 2002), n loc s extrag toate articolele avnd data i timpul specificat. Pentru ca datele s
fie exact cum au fost ele la 1 Aprilie 2002, 9.00 A.M., este necesar s se creeze o interogare care s
regseasc articolele respective i s le stocheze ntr-o nou tabel. Apoi aceast tabel se folosete,
n locul unei interogri, ca baz a rapoartelor.
- Crearea copiei de siguran a unei tabele.
Se poate crea o tabel istoric care s conin toate articolele. Spre exemplu, se poate crea o tabel
care s conin toate vnzrile efectuate, nainte de a le terge din tabela curent.
- Creterea performanei formularelor i rapoartelor bazate pe interogri cu tabele multiple
sau instruciuni SQL. Spre exemplu, s presupunem c dorim tiprirea mai multor rapoarte ce sunt
bazate pe interogri cu cinci tabele ce includ totaluri. Se poate mri viteza de execuie dac mai
nti se realizeaz o interogare care s regseasc articolele necesare i s le memoreze ntr-o
tabel. Apoi, se vor baza rapoartele pe aceast tabel sau se va specifica tabela ntr-o instruciune
SQL ca surs de articole pentru un formular sau raport, astfel nct s nu se reia interogarea pentru
fiecare raport. Datele din tabel vor fi blocate n timp ce se ruleaz interogarea de creare a tabelei.
Interogare SQL este o interogare ce se creeaz pe baza unei instruciuni SQL. Exist urmtoarele
tipuri specifice de interogri SQL:
1. Interogare reuniune (union query) Acest tip de interogare combin cmpurile (coloanele)
din una sau mai multe tabele sau interogri ntr-un singur cmp sau coloan din rezultatele
interogrii. Spre exemplu, dac exist ase vnztori care transmit listele de vnzarere pe
luni, se pot combina aceste cmpuri ntr-un singur set folosind o interogare reuniune i apoi
se poate crea o interogare de creare tabel bazat pe interogarea reuniune pentru a obine o
nou tabel. Interogarea de acest tip const din instruciuni SQL SELECT.
2. Interogare intersecie (pass-through query) Acest tip de interogri transmite comenzile
direct la bazele de date ODBC, cum ar fi Microsoft SQL Server, folosind comenzile care
sunt acceptate de ctre server. Spre exemplu, se poate folosi o interogare intersecie pentru
a regsi articole i a modifica datele.
3. Interogare de definire date (data-definition query) Acest tip de interogare creeaz sau
altereaz obiectele bazei de date, cum ar fi tabelele Microsoft Access sau Microsoft SQL
Server.
25
SELECT n interiorul unei interogri de selecie sau de aciune. Se pot introduce aceste
instruciuni n linia Field a reelei de proiectare a interogrii pentru a defini un nou cmp
sau n linia Criteria pentru a defini criteriul pentru un cmp. Subinterogrile se pot utiliza
pentru:
- A testa existena unui anumit rezultat din subinterogare (folosind cuvintele rezervate EXISTS
sau NOT EXISTS).
- Gsirea tuturor valorilor care sunt egale cu, mai mari ca sau mai mici dect valorile returnate
de ctre subinterogare (folosind cuvintele rezervate ANY, N sau ALL).
- Crearea de subinterogri n subinterogri (subinterogri imbricate).
n cele ce urmeaz este ilustrat modul de definire a unei interogri de selecie pentru situaia
stocurilor de produse utiliznd tabelele Produse, Stocuri.
Se selecteaz Qeries i apoi New, iar din caseta New Query se selecteaz modul Design
View (vezi figura 18) i se apas butonul OK. Va apare ecranul din figura 19.
Din caseta Show Table se selecteaz tabela Produse i se apas butonul Add, apoi se
selecteaz tabela Stocuri i se apas butonul Add i apoi se apas butonul Close. Va apare ecranul
din figura 20 pentru definirea cmpurilor interogrii ilustrate n imaginea de ecran din figura 21.
Pentru salvare interogare se nchide fereastra Query i se tasteaz numele interogrii Situatia
Stocurilor. Pentru vizualizarea datelor corespunztoare interogrii, se selecteaz interogarea i se
deschide n modul Open (rezultatul este ilustrat n figura 22.
26
Probleme propuse
S se creeze interogrile corespunztoare situaiei ofertelor de produse i situaiei vnzrilor
de produse conform specificaiilor de mai jos.
Situaia ofertelor
Cmp
Tabela
Codf
Furnizori
Denf
Furnizori
Adresaf
Furnizori
Codp
Produse
Denp
Produse
Ump
Oferte
Pret
Oferte
Datao
Oferte
Situaia vnzrilor
Cmp
Tabel
a
Codc
Clienti
Denc
Clienti
Adresac
Clienti
Codp
Produse
Denp
Produse
Ump
Vanzari
Cant
Vanzari
Pret
Vanzari
29
Valoare
Cant*Pre
t
Datav
Vanzari
30
formularul principal. Spre exemplu, atunci cnd formularul principal afieaz produsul Tastatur,
subformularul afieaz numai stocurile pentru acest produs.
Atunci cnd se folosete un formular cu un subformular pentru a introduce noi nregistrri,
Microsoft Access salveaz nregistrarea curent din formularul principal cnd se intr n
subformular. Aceasta asigur ca nregistrrile din tabela m (mai muli) s aib o nregistrare n
tabela 1 (unul) cu care s se coreleze. De asemenea, acesta salveaz automat fiecare nregistrare
adugat n subformular.
Subformularul poate fi afiat ca o foaie de date, sau ca un formular singular sau continuu.
Formularul principal poate fi afiat numai ca un formular singular. Formularul principal poate
avea oricte subformulare, dac se plaseaz fiecare subformular pe formularul principal. De
asemenea, se pot realiza cel mult dou nivele de subformulare. Aceasta nseamn c poate exista un
subformular ntr-un formular principal i un alt subformular n interiorul subformularului, de nivel
1. Spre exemplu, poate exista un formular principal care afieaz clienii, un subformular care
prezint produsele i un alt subformular care afieaz vnzrile pentru acele produse i clieni.
Una din metodele utilizate pentru crearea unui subformular n cadrul unui formular const
n efectuarea urmtoarelor operaii:
- se creaz un formular principal i un subformular i se salveaz fiecare separat;
- se deschide formularul principal n modul Design;
- se trage cu mouse-ul subformularul din fereastra Database peste formularul principal.
n figurile 24,,29 sunt ilustrai paii parcuri pentru crearea formularului principal
Produse utiliznd modul Form Wizard. Analog se procedeaz pentru crearea subformularului
Stocuri. n figura 30 este ilustrat rezultatul tragerii subformularului Stocuri peste formularul
Produse. Deschiderea formularului Produse n modul Open permite vizualizarea i actualizarea
att a datelor din tabela Produse ct i a datelor corespunztoare din tabela Stocuri aa cum este
ilustrat n imaginea de ecran din figura 31.
Figura 23. Fereastra Database. Modaliti de creare a unui formular (Caseta New Form).
31
Figura 31. Utilizare formular Produse pentru vizualizare i actualizare date n tabelele
Produse i Stocuri.
Probleme propuse
Utiliznd metoda prezentat mai sus, s se creeze urmtoarele formulare:
- formularul Furnizori cu subformularul Oferte;
- formularul Clieni cu subformularul Vnzri;
- formularul ProduseSOV cu subformularele Stocuri, Oferte, Vnzri.
35
Figura 32. Fereastra Database. Modaliti de creare a unui raport (Caseta New Report).
n cele ce urmeaz se vor prezenta paii de parcurs pentru realizarea unui raport n modul
Report Wizard.
36
1. n caseta de dialog Choose the table or query se selecteaz tabela sau interogarea pe care se
va fundamenta raportul i se apas butonul OK (figura 33, Situaia Stocurilor).
2. Selectare cmpuri pentru raport din lista Available Fields n lista Selected Fields folosind
butoanele > sau >> , dup care se apas butonul Next (figura 34).
3. Selectare mod (tabel) pentru vizualizare date, dup care se apas butonul Next (figura 35).
4. Selectare nivele de grupare date n raport, dup care se apas butonul Grouping Options pentru
a preciza modul de grupare, apoi se apas butonul Next (figura 36).
5. Precizare criterii de ordonare date n raport, dup care se apas butonul Sumary Options pentru
precizarea operaiilor de efectuat asupra grupurilor de nregistrri (figura 37).
6. Precizare operaii de efectuat asupra grupurilor de nregistrri, dup care se apas butonul OK
(figura 38) i apoi butonul Next.
7. n casetele Layout, Orientation, se selecteaz forma de realizare a raportului (figura 39) i apoi
se apas butonul Next.
8. Se selecteaz stilul de realizare a raportului, apoi se apas butonul Next (figura 40).
9. Precizare titlu raport, dup care se apas butonul Finish (figura 41).
n figura 42 este vizualizat raportul obinut. Pentru modificarea raportului, acesta trebuie deschis n
modul Design i apoi se execut modificrile dorite.
Probleme propuse
Dup exemplul prezentat, s se creeze urmtoarele rapoarte utiliznd modul Report Wizard:
Situaia ofertelor de produse pe produs
Cod produs Denumire produs
Cod furnizor Denumire furnizor Adresa furnizor Ump Pret Data ofertei
.
..
Situaia ofertelor de produse pe furnizor
Cod furnizor Denumire furnizor Adresa furnizor
Cod produs Denumire produs Ump Pret Data ofertei
.
Situaia vnzrilor de produse pe produs
Cod produs Denumire produs
Cod client Denumire client Adresa client Ump Cantitate Pret Valoare Data vnzrii
.
Total produs
xxxxxxx
xxxxxx
Total general
xxxxxx
Total client
xxxxxx
..
Total general
xxxxxx
37
Figura 33. Modul Report Wizard Selectare tabel sau interogare pentru raport .
38
Figura 35. Modul Report Wizard. Selectare mod (tabel) dup care vor fi vizualizate datele.
Figura 36. Modul Report Wizard. Selectare nivele de grupare date n raport.
39
Figura 37. Modul Report Wizard. Precizare criterii de ordonare date n raport.
Figura 38. Modul Report Wizard. Precizare operaii de efectuat asupra grupurilor de nregistrri.
40
Figura 42. Modul Report Wizard. Vizualizare raport Situaia stocurilor de produse.
42
43
Coloanele tabelei create se vor numi cmpuri, iar rndurile se vor numi nregistrri. Corespunztor
tabelei se va crea un fiier care va avea un nume precizat de utilizator (Ex: Produse) i extensia
.dbf. nregistrarea antet corespunztoare capului de tabel va conine denumirea fiecrei coloane
(cmp), tipul datelor din coloan, limea n numr de caractere i eventual numrul de zecimale
pentru cmpurile numerice.
O baz de date FoxPro este un ansamblu de astfel de tabele prin care se descriu entitile i
legturile dintre entiti ce se definesc pentru rezolvarea unei probleme date.
Avnd n vedere faptul c la deschiderea unei sesiuni de lucru FoxPro directorul curent este
directorul n care este instalat produsul FoxPro, prima operaiune care trebuie efectuat este
poziionarea n directorul de lucru (directorul n care se va crea baza de date), operaiune care se
realizeaz cu comanda:
SET DEFAULT TO <cale>
Tipuri de date recunoscute n FoxPro
n FoxPro sunt recunoscute urmtoarele tipuri de date:
- tipul caracter (C) = ir format din 0 pn la 254 caractere ASCII cu excepia caracterelor
0 binar (NULL), Ctrl/z (cod 26);
- tipul numeric (N) = succesiune de cifre zecimale, eventual precedat de semnul + sau i
putnd conine marca zecimal (caracterul .);
- tipul flotant (F) = date numerice reprezentate n virgul flotant, utilizate pentru calcule
matematice de precizie;
- tipul data calendaristic (D) = date calendaristice reprezentate n memorie ca numere, iar
formatul extern implicit este ll/zz/aa (ll=nr.lun, zz=nr.zi din lun, aa=ultimele dou cifre ale
anului);
- tipul logic (L) = date logice reprezentate pe un octet ce pot avea una din valorile:
T adevrat (True) sau Y (Yes) sau t sau y, F fals (False) sau N (No) sau f sau n;
- tipul memo (M) = poate conine un ir de octei de lungime maxim dou miliarde de
caractere. Numai cmpurile tabelelor pot fi de tip memo (nu i variabilele sau constantele) i astfel
de cmpuri conin doar adresa pe 10 octei ctre un fiier cu extensia .fpt care conine informaia
propriuzis pentru fiecare nregistrare din fiierul .dbf pe lungime variabil (pn la max. dou
miliarde de caractere)
- tipul general (G) = utilizat pentru susinerea tehnologiei OLE (Object Linking and
Empeding) legarea i nglobarea obiectelor (texte, desene, imagini, sunete, foi de calcul tabelar
etc.). Stocarea datelor se face tot n fiierul .fpt la fel ca n cazul cmpurilor memo. Pentru a prelua
un obiect OLE dintr-o aplicaie extern n baza de date se folosete opiunea Copy din meniul Edit
al programului Windows Explorer pentru a copia obiectul n memoria temporar Clipboard, apoi cu
opiunea Paste sau Paste Special din meniul Edit al programului FoxPro se insereaz sau se face
referina la obiectul din Clipboard n cmpul General din baza de date.
44
Figura 43. Fereastra Table Designer pentru definirea structurii unei tabele.
Dup definirea tuturor cmpurilor tabelei se apas butonul OK, iar la mesajul Input data
records now se va apsa butonul Yes dac se continu cu operaia de inserare date n tabel, sau
butonol No n caz contrar. La apsarea butonului Yes se va afia un formular de preluare date n
mod coloan (Change, figura 45.1), care poate fi transformat n mod tabel (Browse, figura 45.2)
selectnd opiunea Browse din meniul Browse.
Figura 44. Definirea structurii tabelei Produse.
tergerea logic se realizeaz cu comanda DELETE. Dac SET DELETED este ON atunci
nregistrrile marcate pentru tergere nu vor fi vzute de alte comenzi FoxPro (Ex: LIST,
DISPLAY, BROWSE etc.). Anularea tergerii logice se realizeaz cu comanda RECALL.
tergerea fizic se realizeaz cu comanda PACK. tergerea fizic realizeaz rescrierea fiierelor
corepunztoare tabelei mai puin nregistrrile marcate pentru tergere.
tergerea fizic a tuturor nregistrrilor se poate realiza fie cu comanda ZAP, fie cu comenzile
DELETE ALL, PACK.
Structura unei tabele poate fi modificat (modificare cmpuri existente, adugare de noi
cmpuri, tergere cmpuri existente) utiliznd comanda MODIFY STRUCTURE.
Structura unei tabele poate fi vizualizat utiliznd comanda LIST STRUCTURE sau
DISPLAY STRUCTURE.
Afiarea nregistrrilor unei tabele poate fi realizat cu una din comenzile LIST, DISPLAY
ALL.
Oricare din operaiile de mai sus asupra unei tabele poate fi efectuat numai dac n
prealabil tabela respectiv a fost deschis.
Deschiderea (activarea) unei tabele se realizeaz cu comanda: USE < nume tabel >
Deschiderea unei tabele presupune utilizarea unei zone de memorie n care sunt memorate
informaii privind tabela respectiv, zon numit zona de lucru.
FoxPro 2.6 sub WINDOWS aloc 225 astfel de zone de lucru numerotate de la 1 la 225
ceea ce nseamn c pot fi deschise la un moment dat maximum 225 tabele.
Precizarea zonei de lucru n care este deschis o tabel se poate face :
- fie cu comanda USE astfel: USE <nume tabel> IN <nr.zon>
- fie cu comanda SELECT astfel :
SELECT <ne.zon>|<alias>
USE <nume tabel>
Zona de lucru implicit este zona 1.
Zona de lucru curent este ultima zon selectat cu comanda SELECT sau zona 1 n lipsa
unei comenzi SELECT <nr.zon>.
Fiecare zon de lucru utilizat poate primi un alias specificat n comanda USE, iar n lipsa
specificrii, aliasul zonei este numele tabelei deschise n zona de lucru respectiv.
Astfel se pot referi cmpurile unei tabele folosind aliasul zonei de lucru n care a fost
deschis tabela respectiv.
Exemplu:
m.codp = 0
STORE SPACE(20) TO m.denp
USE Produse IN 3
m.codp = Produse.codp
m.denp = Produse.denp
n secvena de instruciuni de mai sus Produse.codp, Produse.denp refer cmpurile codp,
denp din tabela Produse deschis n zona de lucru 3 care nu este zona de lucru curent.
Dup terminarea lucrului cu baza de date aceasta trebuie nchis utiliznd una din
comenzile USE, CLOSE.
Utilizare meniu Help
Pentru documentare privind produsul FoxPro se poate utiliza meniul Help ca n exemplul
ilustrat n imaginile de ecran din figura 46 pentru versiunea 2.6 sub Windows.
47
49
La momente diferite de timp aceeai variabil de memorie poate avea tipuri diferite
funcie de valoarea memorat n variabil la fiecare moment.
O clas special de variabile o reprezint variabilele de sistem care sunt utilizate pentru a
pstra anumite informaii ca de exemplu variabila sistem _PCOPIES pstreaz numrul de copii
de tiprit pentru urmtorul raport. Identificatorii acestor variabile ncep cu caracterul liniua de
subliniere _.
Masive sunt structuri de date care permit memorarea mai multor valori ntr-o zon de memorie
creia i se atribuie un nume, valorile respective putnd fi tratate att ca un tot ct i ca elemente
distincte. Masivele sunt organizate sub forma unui tablou de valori unidimensional sau
bidimensional, deci sub form de vectori sau de matrice. Declararea unui masiv se realizeaz cu
una din comenzile DIMENSION sau DECLARE ca n exemplele de mai jos:
DIMENSION Vec(10)
declar un vector numit Vec de 10 elemente
Vec(1),Vec(2),
,Vec(10).
DIMENSION alfa(2,4) declar matricea alfa cu 2 linii i 4 coloane avnd elementele alfa(1,1)
alfa(1,2) alfa(1,3) alfa(1,4) alfa(2,1) alfa(2,2) alfa(2,3) alfa(2,4).
DECLARE vector(8),matrice(4,3) declar vectorul vector de 8 elemente i matricea matrice cu 4
linii i 3 coloane.
Elementele unui masiv pot fi de acelai tip sau de tipuri diferite. Dup declararea unui
masiv toate elementele sale vor fi de tip logic avnd valoarea .F. Ulterior fiecare element al
masivului poate primi orice valoare prin instruciunea de atribuire =, sau STORE.
Operatori precizeaz aciunile ce trebuie efectuate asupra datelor (operanzilor).
- Operatori aritmetici:
- (unar) specific un numr negativ
+ (unar) specific un numr pozitiv , este implicit
+ adunare
- scdere
* nmulire
/ mprire
** ridicare la putere
% modulo - restul mpririi a dou expresii (ex. 42%10 rezult 2)
( ) grupare operaii
- Operatori de comparare:
= egal
== egalitate exact (numai pentru tipul caracter)
> mai mare
< mai mic
>= mai mare sau egal
<= mai mic sau egal
<> diferit
# diferit
!= diferit
$
este cuprins (numai pentru tipurile caracter i memo (ex. Dac A=Cimp caracter i
memo atunci comanda ? caracter $ A d rezultatul .T. deoarece caracter este
coninut n A).
- Operatori logici:
OR
sau
AND i
50
NOT negaie
()
grupare operaii pt. schimbare prioritate
- Operatori asupra irurilor de caractere:
+
concatenare iruri (ex. ABC + DE rezult ABCDE)
concatenare iruri cu mutarea spaiilor libere de la sfritul primului
ir la sfritul irului rezultat (ex. ABC - DE rezult ABCDE
Pentru toate tipurile de operatori ordinea de prioritate (precedena) este cea convenional
i poate fi schimbat folosind parantezele ( ).
Funcii.
Sistemul FoxPro dispune de o gam variat de funcii (peste 200) reprezentnd:
- Funcii matematice (SIN, COS, TAN, ASIN, ACOS, ATAN, SQRT, etc.)
- Funcii de conversie date (conversia unui tip de dat n alt tip de dat
(DTOC, DTOS, CTOD, VAL, STR, etc.)
- Funcii pentru irurile de caractere
(LTRIM, RTRIM, ALLTRIM, LOWWER, UPPER, SUBSTR, etc.)
- Funcii pentru date calendaristice (CTOD, DATE, YEAR, etc.)
- Funcii pentru fiiere .DBF (DBF, DELETED, EOF, BOF, RECCOUNT, RECNO, etc.)
- Funcii pentru cmpuri memo (MEMLINES, MLINE, etc.)
- Funcii pentru meniuri (PAD, BAR, PROMPT, etc.)
- Funcii pentru operaii de intrare/ieire (LASTKEY, COL, ROW, PRINTSTATUS)
- Funcii de intrare/ieire de nivel inferior
(FCREATE, FOPEN, FCLOSE, FREAD, FWRITE, FGETS, FPUTS, etc.)
- Alte funcii (FILE, SYS, etc.)
Expresii sunt construcii realizate folosind elementele limbajului (constante, identificatori,
operatori, variabile, masive, funcii) i utilizate n cadrul instruciunilor limbajului.
O caracteristic important a expresiilor este tipul, care este dat de tipul elementelor
utilizate n cadrul expresiilor. Astfel tipul unei expresii poate fi:
Numeric <expN>; Caracter <expC>; Logic <expL>; Dat calendaristic <expD>.
n cadrul unei expresii toate elementele trebuie s fie de acelai tip. Pentru realizarea acestei cerine
se pot folosi funciile de conversie de tip. Dac ntr-o expresie tipurile operanzilor nu sunt
compatibile ntre ele sau cu operatorii utilizai, atunci va apare eroarea:
Data type mismatch
Instruciuni
O instruciune (comand) FoxPro este o construcie care ncepe cu un verb (cuvnt cheie
care precizeaz o anumit aciune) i care mai poate conine o serie de clauze care specific
condiiile n care se va executa comanda respectiv. O instruciune poate fi scris pe una sau mai
multe linii, continuarea instruciunii pe linia urmtoare fiind precizat prin caracterul ;. Fac
excepie instruciunile pentru controlul execuiei programului (instruciunile de programare
structurat) i anume:
IFELSEENDIF
DO CASEENDCASE
DO WHILEENDDO
FORENDFOR
care conin cte un singur cuvnt cheie pe o linie i nu pot fi executate din fereastra de comenzi
FoxPro ci numai din programe.
Pe aceeai linie nu poate fi scris dect o singur comand FoxPro.
51
Liniile care ncep cu caracterul * sunt considerate linii de comentarii i deci nu sunt
interpretate de compilator. O linie instruciune poate conine n continuare un comentariu precedat
de caracterele &&.
Exemple de instruciuni:
BROWSE FIELDS Codp,Denp
(Permite editarea n mod Browse doar a cmpurilor Codp,Denp ale tabelei Produse descrise
anterior.)
DEFINE WINDOW f1 FROM 1,1 TO 10,50;
TITLE Fereastra f1;
COLOR SCHEME 3
(Definete fereastra f1 din linia 1 coloana 1 pn n linia 10 coloana 50, avnd titlul Fereastra f1
i utiliznd schema de culori 3)
IF sw = 1
SELECT 1
ELSE
SELECT 2
ENDIF
(dac variabila de memorie sw are valoarea 1 selecteaz zona de lucru 1, altfel selecteaz zona de
lucru 2)
Observaii:
- orice cuvnt cheie FoxPro poate fi trunchiat la minim primele 4 caractere ale cuvntului.
(Ex. DEFINE este acelai lucru cu DEFI, DEFIN, DEFINE, WINDOW este acelai lucru cu
WIND, WINDO, WINDOW);
- orice instruciune FoxPro poate fi executat fie din fereastra de comenzi FoxPro, fie dintrun program, cu excepia instruciunilor de control al execuiei programelor (IF, DO CASE, DO
WHILE, FOR) care nu pot fi executate din fereastra de comenzi, ci doar din programe sau
proceduri.
Proceduri, programe n FoxPro
Proceduri
O procedur FoxPro este o secven de instruciuni care ncepe cu instruciunea
PROCEDURE <nume procedur> i se termin cu instruciunea RETURN. Dac instruciunea
RETURN lipsete atunci urmtorul cuvnt PROCEDURE determin sfritul procedurii anterioare.
O procedur este lansat n execuie cu comanda DO <nume procedur>. O procedur poate face
parte din fiierul .PRG din care este apelat, poate fi ea nsi un fiier .PRG distinct, sau poate face
parte dintr-o bibliotec de proceduri (un fiier .PRG care conine una sau mai multe proceduri) caz
n care nainte de apelarea procedurii, biblioteca care o conine trebuie deschis cu comanda SET
PROCEDURE TO <nume bibliotec> , unde <nume bibliotec> este numele fiierului .PRG ce
reprezint biblioteca de proceduri.
Pot fi utilizate i proceduri cu parametri, caz n care prima instruciune a procedurii este
instruciunea PARAMETERS <lista parametri formali> , iar apelarea procedurii se realizeaz cu
comanda DO <nume procedur> WITH <lista parametri actuali>.
Programe
UN program FoxPro este o secven de instruciuni coninut ntr-un acelai fiier cu
extensia .PRG. Pentru editarea unui program se poate folosi fie un editor extern (care trebuie
52
specificat n fiierul CONFIG.FPW), fie editorul produsului FoxPro care se lanseaz cu comanda
MODIFY COMMAND <nume program>.
Un program FoxPro poate fi construit ca o ierarhie de proceduri astfel:
main
P1
P2
P21
Pn
P22
P2k
P2k1
P2k2
P2kr
.
Programul FoxPro corespunztor va fi de forma:
PROCEDURE < main>
...
DO P1
...
DO P2
...
DO Pn
...
RETURN
PROCEDURE P1
...
RETURN
PROCEDURE P2
...
DO P21
...
DO P22
...
DO P2k
...
RETURN
...
PROCEDURE Pn
...
RETURN
PROCEDURE P21
&&(opional)
53
...
RETURN
PROCEDURE P22
...
RETURN
...
PROCEDURE P2k
...
DO P2k1
...
DO P2k2
...
DO P2kr
...
RETURN
PROCEDURE P2k1
...
RETURN
PROCEDURE P2k2
...
RETURN
...
PROCEDURE P2kr
...
RETURN
.................
Pentru a putea fi executat, un program FoxPro va trebui mai nti compilat rezultnd astfel
un fiier cu extensia .FXP. Lansarea n execuie a unui program se realizeaz cu comanda
DO <nume program>
La lansarea n execuie, dac n programul surs au fost efectuate modificri cu editorul MODIFY
COMMAND sau cu un editor specificat n fiierul CONFIG.FPW, obinerea fiierului obiect .FXP
se realizeaz automat i apoi se execut programul.
Ferestre i meniuri utilizator
Ferestre
Produsul FoxPro permite lucrul cu ferestre definite de utilizator.
O fereastr este o zon dreptunghiular de ecran definit fie prin dou puncte (colul din
stnga sus i colul din dreapta jos), fie printr-un punct (colul din stnga sus) i nlimea (nr. de
rnduri) i limea ferestrei (nr. de coloane) . Un punct este definit de coordonatele sale
reprezentnd numrul de rnd i numrul de coloan. Pentru a putea fi folosit, o fereastr utilizator
trebuie mai nti definit, operaie care se realizeaz cu comanda DEFINE WINDOW. O fereastr
utilizator poate fi definit n interiorul unei ferestre printe, care poate fi: fie fereastra principal
FoxPro , fie o alt fereastr utilizator. Coordonatele punctelor ce definesc fereastra n cazul definirii
prin dou puncte (colul din stnga sus i colul din dreapta jos) sunt funcie de dimensiunea
fontului ferestrei printe. Se pot defini ferestre utilizator care sunt mai mari dect ecranul.
Exemple.
DEFINE WINDOW f1 FROM 4,4 TO 15,45
54
55
Exemplu.
S se defineasc i s se utilizeze un meniu orizontal pentru efectuarea operaiilor de
adugare, tergere, editare (actualizare) date n tabela Produse astfel:
Adaugare
Stergere
Actualizare
Sfirsit
CLEAR
CLOSE ALL
DEFINE MENU Mo1
DEFINE PAD P1 OF Mo1 PROMPT \<Adaugare
DEFINE PAD P2 OF Mo1 PROMPT \<Stergere
DEFINE PAD P3 OF Mo1 PROMPT Actuali\<Zare
DEFINE PAD P4 OF Mo1 PROMPT S\<Firsit
ON SELECTION PAD P1 OF Mo1 DO PA
ON SELECTION PAD P2 OF Mo1 DO PS
ON SELECTION PAD P3 OF Mo1 DO PZ
ON SELECTION PAD P4 OF Mo1 DO PF
USE Produse
ACTIVATE MENU Mo1
PROCEDURE PA
APPEND
RETURN
PROCEDURE PS
DELETE ALL FOR <conditie>
RETURN
PROCEDURE PZ
BROWSE NOAPPEND NODELETE
RETURN
PROCEDURE PF
PACK
USE
DEACTIVATE MENU
RETURN
Meniuri verticale (obiecte popup)
Un meniu vertical sau popup este o caset dreptunghiular care conine un numr de opiuni
(bare de selecie) care pot fi definite fiecare separat, sau pot reprezenta fiiere din directorul curent,
sau valorile unei expresii definite folosind cmpuri ale unei tabele, sau denumirile cmpurilor unei
tabele.
Crearea i utilizarea unui meniu popup necesit parcurgerea urmtoarelor operaii:
- definire meniu cu comanda DEFINE POPUP;
- definire opiuni cu comanda DEFINE BAR n cazul n care opiunile sunt definite fiecare
separate;
- precizare aciune de executat la selecia unei opiuni cu una din comenzile:
ON SELECTION POPUP <nume popup> DO <nume procedur>;
56
Exemplul 2
Se definete i utilizeaz un meniu vertical n care opiunile sunt valorile cmpurilor Codp,
Denp din tabela Produse, iar la selecia unei opiuni se afieaz nregistrrile corespunztoare din
tabela Stocuri. Dezactivarea meniului se va realiza la apsarea tastei Escape.
CLEAR
CLOSE ALL
DEFINE POPUP Mv2 FROM 5,10 PROMPT FIELD Codp + + Denp;
TITLE Lista inregistrarilor din tabela Produse COLOR SCHEME 5
ON SELECTION POPUP Mv2 DO afis_stoc
USE Produse In 3
Use Stocuri IN 4
SELECT 3
ACTIVATE POPUP Mv2
CLOSE ALL
PROCEDURE afis_stoc
SELECT 4
BROWSE FOR Produse.Codp = Stocuri.Codp
SELECT 3
RETURN
Exemplul 3
Se definete i utilizeaz un meniu vertical n care opiunile sunt toate fiierele .dbf din directorul
curent. La selecia unei opiuni se afieaz toate nregistrrile din tabela respectiv.
CLEAR
CLOSE ALL
DEFINE POPUP Mv2 FROM 5,10 PROMPT FILES LIKE *.dbf;
TITLE Lista Tabele COLOR rb+/bg,GR+/r,gr+/g,W+/n
ON selection POPUP Mv2 DO afis_date
ACTIVATE POPUP Mv2
USE
PROCEDURE afis_date
m.fis=
m.fis=prompt()
USE (m.fis)
LIST
Wait Apasati o tasta
CLEAR
DEACTIVATE POPUP
RETURN
Problem propus
Exportai tabelele bazei de date FurnizoriClieni din Access n FoxPro.
Testai programele prezentate n cadrul lucrrii de laborator.
Similar exemplelor de programe prezentate pentru tabelele Produse, Stocuri, scriei i testai
programele pentru tabelele Furnizor, Oferte i Clieni, Vanzari.
58
CASE <condiie n>
<instruciuni n>
[OTHERWISE
<instruciuni>]
ENDCASE
Se execut primul grup de instruciuni <instruciuni k> pentru care rezultatul evalurii
expresiei logice <condiie k> este .T. (adevrat) i programul continu cu instruciunea care
urmeaz dup clauza ENDCASE.
Dac nici una din expresiile logice <condiie k> nu are valoarea .T. (adevrat) i dac
clauza OTHERWISE este prezent, atunci se execut grupul de instruciuni <instruciuni> precizat
n clauza OTHERWISE i apoi programul continu cu instruciunea care urmeaz dup clauza
ENDCASE.
Buclele (iteraiile, ciclurile) sunt realizate cu ajutorul instruciunilor
DO WHILE ENDDO, FOR ENDFOR, SCAN ENDSCAN.
Instruciunea DO WHILE ENDDO realizeaz execuia repetat a unui grup de
instruciuni atta timp ct o condiie este adevrat astfel:
DO WHILE <condiie>
<instruciuni 1>
[LOOP
<instruciuni 2>]
[EXIT
[<instruciuni 3>]]
ENDDO
Se execut repetat grupul de instruciuni <instruciuni 1> atta timp ct rezultatul evalurii
expresiei logice <condiie> este .T. (adevrat) i apoi programul continu cu instruciunea care
urmeaz dup clauza ENDDO.
Dac clauza LOOP este prezent, atunci se reia ciclul cu grupul de instruciuni <instruciuni
1> fr a se executa grupul de instruciuni <instruciuni 2>.
Dac clauza EXIT este prezent, atunci se prsete forat bucla fr a se mai executa
grupul de instruciuni <instruciuni 3> i programul continu cu instruciunea care urmeaz dup
clauza ENDDO.
Grupurile de instruciuni <instruciuni 1>,<instruciuni 2>,<instruciuni 3> pot conine ele
nsele instruciuni DO WHILE ENDDO, obinndu-se astfel instruciuni DO WHILE imbricate
pe un numr oarecare de nivele.
Exemplu Calculul sumei primelor n numere naturale
m.S=0
m.i=1
INPUT Introduceti numarul <n>: TO m.n
DO WHILE m.i <= m.n
m.S = m.S + m.i
M.i = m.i + 1
ENDDO
? Suma primelor ,m.n, numere naturale este S = ,m.S
Instruciunea FOR ENDFOR realizeaz execuia repetat a unui grup de instruciuni
plecnd de la o valoare iniial a unei variabile, pn la o valoare final a variabilei, cu un anumit
pas astfel:
60
? Codp, ,Denp
ENDSCAN
USE
Instruciuni de intrare/ieire
Din aceast categorie fac parte instruciunile utilizate pentru introducerea datelor de la
tastatur i afiarea rezultatelor pe ecran sau listarea la imprimant.
Instruciunile de intrare/ieire se mpart n dou grupe i anume :
- Instruciuni pentru realizarea operaiilor de intrare/ieire n mod linie
- Instruciuni pentru realizarea operaiilor de intrare/ieire n mod ecran
Instruciuni pentru realizarea operaiilor de intrare/ieire n mod linie.
Din aceast grup fac parte instruciunile:
? <lista expresii> - realizeaz afiarea sau listarea rezultatelor evalurii expresiilor din <lista
expresii> ncepnd din prima coloan a liniei urmtoare liniei curente (deci nainte de afiare se
genereaz codurile <CR>, <LF>).
?? <lista expresii> - realizeaz afiarea sau listarea ncepnd din coloana curent a ecranului sau
imprimantei.
ACCEPT <expC> TO <variabila de memorie> - afieaz mesajul <expC> i ateapt introducerea
de la tastatur a unui ir de caractere care va fi memorat n variabila de memorie specificat.
INPUT <expC> TO <variabila de memorie> - afieaz mesajul <expC> i ateapt introducerea de
la tastatur a unei date de tip ir, sau numr, sau dat calendaristic, sau dat de tip logic care va fi
memorat n variabila de memorie specificat.
Spre deosebire de instruciunea ACCEPT data de tip ir de caractere va trebui ncadrat
ntre sau sau [].
WAIT <expC> - afieaz mesajul <expC> i ateapt apsarea unei taste.
Dac <expC> este omis se va afia mesajul Press any key to continue.
LIST realizeaz afiarea sau listarea la imprimant a nregistrrilor din tabela deschis n zona de
lucru curent.
DISPLAY ALL este similar comenzii LIST cu deosebirea c dup fiecare ecran plin se afieaz
mesajul Press any key to continue i se ateapt apsarea unei taste. Dac clauza ALL este
omis , se va afia doar nregistrarea curent.
Instruciuni pentru realizarea operaiilor de intrare/iesire n mod ecran .
Instruciunile @sayget, read.
Pentru crearea unui formular (machete) de preluare date n mod ecran pot fi folosite
instruciunile @ sayget, read n urmtoarea sintax simplificat:
@ <lin>,<col> SAY <expC> GET <variabil> PICTURE <ablon> COLOR<culori>
READ
Unde:
<lin> = linia din care ncepe afiarea
<col> = coloana din care ncepe afiarea
<expC> = un ir de caractere ncadrat ntre ,,[] sau expresie de tip ir ce va fi afiat
<variabil> = variabil de memorie, nume cmp, element de masiv, n care vor fi preluate datele
introduse de la tastatur
<ablon> = formatul de afiare a datelor preluate, succesiune de caractere X pt.iruri de caractere,
sau succesiune de caractere 9 pentru datele numerice, sau succesiune de caractere A pentru iruri
care conin doar litere, etc. ncadrate ntre apostroafe, sau ghilimele. De asemenea n cadrul
62
formatului de afiare mai pot fi folosite o serie de funcii ca de exemplu: ! pt.conversie litere mici
n litere mari, @Z pt.suprimare zerouri nesemnificative etc.
<culori> = o list de doua perechi de culori, prima pereche pentru SAY i a doua pereche pentru
GET, reprezentnd culoare scris i culoare fond.
n cadrul instruciunii pot fi utilizate i alte clauze ca de exemplu: SIZE, FONT, STYLE,
VALID, ERROR, VERB, BITMAP etc.
Instruciunea @ sayget poate fi utilizat i ca dou instruciuni distincte
@ <lin>,<col> SAY <expC> PICTURE <ablon> COLOR <cs>/<cf>
@ <lin>,<col> GET <variabil> PICTURE <ablon> COLOR ,<cs>/<cf>
Instruciunea READ clasic citete un set de comenzi @GET ncepnd cu primul GET din
list i continund pn la deplasarea dincolo de ultimul cmp sau naintea primului cmp dup
care se iese din instruciunea READ.
mbuntirile aduse formei clasice a instruciunii permit realizarea de interfee mai
puternice i mai flexibile utiliznd un numr redus de instruciuni FoxPro.
n cele ce urmeaz vom da un exemplu de utilizare a instruciunilor @sayget, read
pentru crearea unui ecran de preluare date n tabela Persoane:
m.nrcrt=0
STORE SPACE(15) TO m.nume,m.prenume
m.datan={ / / }
@3,5 SAY Nr.crt.:
@5,5 SAY Nume:
@7,5 SAY Prenume:
@9,5 SAY Data nasterii:
@3,25 GET m.nrcrt PICT 99 COLOR ,GR+/B
@5,25 GET m.nume PICT XXXXXXXXXXXXXXX COLOR ,GR+/B
@7,25 GET m.prenume PICT XXXXXXXXXXXXXXX COLOR ,GR+/B
@9,25 GET m.datan PICT XX/XX/XX COLOR ,GR+/B
READ
Ordonarea nregistrrilor unei tabele
Ordinea implicit de parcurgere a nregistrrilor ntr-o tabel este ordinea n care au fost
introduse, aceasta fiind numit ordine natural. Pentru a putea parcurge nregistrrile tabelei i n
alt ordine se pot utiliza dou metode i anume :
1 - Ordonarea nregistrrilor prin operaia de sortare a tabelei;
2 - Ordonarea nregistrrilor prin operaia de indexare a tabelei.
Ordonarea prin sortare se realizeaz cu comanda
SORT TO <nume fiier> ON <cmp1> [/A|/D|/C]
care are drept rezultat crearea unei noi tabele n care nregistrrile sunt scrise n ordinea precizat
(ordonate dup unul sau mai multe cmpuri /A-ascendent (implicit), /D descendent, /C fr a lua
n considerare deosebirea dintre litere mici sau mari (/C poate fi combinat cu /A sau /D astfel: /AC
sau /DC).
Ordonarea prin indexare se realizeaz cu comanda INDEX care ntr-o form simplificat
are sintaxa:
INDEX ON <expresie index>TAG <nume crit.ord.>[ASCENDING|DESCENDING]
(care are drept rezultat crearea unui criteriu de ordonare a nregistrrilor ntr-un fiier avnd acelai
nume cu numele tabelei i extensia .CDX).
63
Precizarea ordinii n care se vor parcurge nregistrrile ntr-o tabel se face cu comanda
SET ORDER TO <nume criteriu de ordonare>.
Revenirea la ordinea natural (ordinea n care au fost ncrcate nregistrrile n tabel) se
face cu comanda SET ORDER TO.
Exemplu Crearea unui criteriu de ordonare n tabela Produse, alfabetic dup primele 3 litere din
cmpul Denp:
INDEX ON LEFT(Denp,3) TAG nume3
Comenzile:
USE Produse
SET ORDER TO TAG nume3
LIST
SET ORDER TO
realizeaz: deschide tabela Produse, precizeaz ordinea de parcurgere nume3 (alfabetic dup
primele 3 litere din denumirea produsului), afieaz nregistrrile tabelei n aceast ordine i
precizeaz c n continuare nregistrrile tabelei vor fi vzute n ordinea natural (ordinea n care au
fost ncrcate).
Funcia TAG(<nr criteriu>)_returneaz numele criteriului de ordonare <nr criteriu>
Funcia KEY(<nr criteriu>) returneaz expresia index pentru criteriul de ordonare
<nr_criteriu>.
Instruciuni de poziionare pe nregistrri ntr-o tabel
Fiecrei tabele deschise ntr-o zon de lucru i este asociat un indicator de nregistrri care
conine numrul nregistrrii curente. Aflarea nregistrrii curente (coninutului indicatorului de
nregistrri) ntr-o tabel se realizeaz cu funcia RECNO().
La deschiderea unei tabele cu comanda USE indicatorul de nregistrri este poziionat pe
prima nregistrare (conine valoarea 1). Pentru schimbarea indicatorului de nregistrri
(poziionarea pe o alt nregistrare) se pot folosi instruciunile:
GO <expN> - realizeaz poziionarea pe nregistrarea avnd indicatorul de nregistrri
rezultatul evalurii expresiei <expN>
GO TOP realizeaz poziionarea pe prima nregistrare a tabelei
GO BOTTOM realizeaz poziionarea pe ultima nregistrare a tabelei
SKIP <expN> - realizeaz mutarea indicatorului de nregistrri peste un numr de
nregistrri dat de rezultatul evalurii expresiei <expN>, nainte sau napoi fa de nregistrarea
curent, dup cum rezultatul evalurii expresiei <expN> este un numr pozitiv sau negativ.
Funciile BOF(), EOF() testeaz dac indicatorul de nregistrri este poziionat pe nceputul
tabelei, respectiv pe sfritul tabelei.
Numrul de nregistrri dintr-o tabel este returnat de funcia RECCOUNT().
Dimensiunea unei nregistrri (n nr. octei) este returnat de funcia RECSIZE().
Pentru specificarea domeniului nregistrrilor n anumite instruciuni se pot utiliza
urmtoarele clauze :
ALL specific toate nregistrrile
RECORD <nr> - specific nregistrarea <nr>
NEXT <nr> - specific urmtoarele <nr> nregistrri ncepnd cu nregistrarea curent.
REST specific restul nregistrrilor pn la sfritul tabelei ncepnd cu nregistrarea
curent.
Exemplu.
LIST NEXT 3 afieaz urmtoarele 3 nregistrri ncepnd cu nregistrarea curent.
64
65
Apoi selecie buton stnga pt. raport n mod Browse, sau buton dreapta pt. raport n mod Change,
dup care se salveaz cu <nume fiier>.frx, care poate fi editat cu MODI REPORT <nume fiier>
i executat din meniul Run cu opiunea Report.
- Crearea unei aplicaii din bara de meniuri FoxPro se selecteaz Run->Application->New, apoi
din caseta care apare se selecteaz Step1 pt. creare sau modificare tabel sau/i Step2 pt. creare sau
modificare ecran i n final se apas butonul Generate. Pentru execuia aplicaiei se selecteaz Run>Application, apoi se selecteaz fiierul cu extensia .app de executat i se apas butonul Run.
- Generatorul de ecrane (Screen Builder)
- Generatorul de rapoarte (Report Writer)
Problem propus
Utiliznd generatorul de meniuri se adaug meniului principal FoxPro opiunea Aplicatii
care activeaz un meniu popup ce conine opiunile:
- Stocuri apeleaz procedura Pstoc care realizeaz Situaia stocurilor de produse;
- Oferte/Produs apeleaz procedura Oferte_p care realizeaz Situaia ofertelor de produse pe
produs;
- Oferte/Furnizor - apeleaz procedura Oferte_f care realizeaz Situaia ofertelor de produse pe
furnizor;
- Vanzari/Produs - apeleaz procedura Vanzari_p care realizeaz Situaia vnzrilor de produse
pe produs;
- Vanzari/Client - apeleaz procedura Vanzari_c care realizeaz Situaia vnzrilor de produse pe
client.
66
67
Containere i non-containere
Cele dou tipuri primare de clase Visual FoxPro, i, prin extensie, de obiecte Visual
FoxPro, sunt clasele container i clasele control. Containerele pot conine alte obiecte i permit
accesul la acestea. Astfel, dac se creeaz o clas container care cuprinde dou casete cu list i
dou butoane de comand, care apoi se vor aduga la un formular un obiect bazat pe aceast clas,
fiecare obiect poate fi manipulat individual, att n momentul proiectrii ct i n momentul
execuiei. Se poate crea cte o clas pentru fiecare control i fiecare formular, ns n acest mod n
final vor exista mai multe clase care fac cam acelai lucru, dar care trebuie ntreinute separat. Se
poate crea o clas control pentru o funcionalitate generic. Astfel spre exemplu, butoanele de
comand care permit utilizatorului s mute indicatorul de nregistrri n cadrul unei tabele, un buton
care s nchid formularul i un buton de asisten pot fi salvate sub form de clase i pot fi
adugate la formulare cnd se dorete aceast funcionalitate. Se pot crea clase pentru seturi de
formulare, formulare i controale cu o anumit nfiare, astfel nct toate componentele aplicaiei
s aib acelai aspect.
Visual FoxPro permite crearea mai multor tipuri de clase, fiecare cu propriile sale
caracteristici, tipul clasei putnd fi precizat n caseta de dialog New Class sau n clauza AS a
comenzii CREATE CLASS. Se pot crea subclase ale majoritii claselor de baz din Visual FoxPro
cu ajutorul proiectantului de Clase (Class Designer).
Evenimentele din Visual FoxPro
Codul pentru evenimente este declanat automat de ctre sistem ca rspuns la o anumit
aciune a utilizatorului. Spre exemplu, codul scris pentru evenimentul Click este prelucrat automat
de sistem atunci cnd utilizatorul execut clic pe un control.
Codul pentru evenimente poate fi declanat i de evenimente din sistem, ca n cazul evenimentului
Timer al controlului timer (ceas).
Principalele evenimente din Visual FoxPro, valabile pentru majoritatea controalelor sunt
prezentate n tabelul de mai jos:
Evenimentul
Init
Destroy
Click
DblClick
RightClick
GetFocus
LostFocus
KeyPress
MouseDow
indicatorul
MouseMove
68
MouseUp
USE BazaTest!TabTest
BROWSE
Pentru eliminarea unei tabele dintr-o baz de date se poate utiliza una din cile:
n cadrul Gestionarului de Proiecte (Project Manager), se selecteaz numele tabelei, apoi se
selecteaz Remove.
sau
-
sau
cu comanda REMOVE TABLE.
Exemplu, codul de mai jos deschide baza de date BazaTest i elimin tabela TabTest
OPEN DATEBASE BazaTest
REMOVE TABLE TabTest
La eliminarea unei tabele dintr-o baz de date nu se realizeaz i tergerea automat a
fiierului asociat tabelei.
Pentru eliminarea tabelei din baza de date i tergerea fiierului .dbf al tabelei de pe hard-disc,
se va folosi clauza DELETE a comenzii REMOVE TABLE sau comanda DROP TABLE astfel:
OPEN DATABASE BazaTest
REMOVE TABLE TabTest DELETE
Creare relaii persistente ntre tabelele bazei de date
Aceste relaii sunt create utiliznd indecii (sunt create ntre indeci i nu ntre cmpuri) i
sunt folosite automat drept condiii implicite de legare n ferestrele Proiectantului de interogri i
de Vederi (Query Designer i View Designer) i pentru a stoca informaii despre integritatea
referenial.
Pentru Crearea unei relaii persistente ntre tabele se poate proceda astfel:
n fereastra Proiectantului de Baze de Date (Database Designer), se alege numele indexului ce
urmeaz a fi legat i apoi se trage cu mouse-ul spre numele indexului din tabela ce urmeaz a fi
legat
sau
- se utilizeaz clauza FOREIGN KEY n comenzile CREATE TABLE sau ALTER TABLE.
n fereastra Proiectantului de Baze de Date (Database Designer), se va vedea o linie care
leag tabelele respective, reprezentnd noua relaie persistent.
Pentru tergerea unei relaii persistente ntre dou tabele se poate proceda astfel:
1. n cadrul Proiectantului de Baze de Date (Database Designer), se execut
clic pe linia care reprezint relaia dintre cele dou tabele. (Limea liniei de relaie crete
pentru a indica faptul c s-a selectat relaia respectiv), dup care se apas tasta DELETE.
sau
70
Modificarea de valori n tabela primar care ar duce la apariia de nregistrri orfane n tabela
asociat.
- tergerea de nregistrri din tabela primar atunci cnd exist nregistrri asociate.
Se pot scrie declanatoare i proceduri stocate care s ntreasc integritatea referenial,
ns Visual FoxPro dispune de Generatorul de Integritate Referenial (RI) (Referenial Integrity
Builder) care permite s se determine tipurile de reguli de ntrit, tabelele pentru care se dorete ca
regulile s fie ntrite i evenimentele de sistem care vor impune mediului Visual FoxPro s
verifice respectarea regulilor de integritate referenial.
-
Crearea vederilor
Vederile reprezint un concept utilizat n cadrul bazelor de date relaionale care permite
personalizarea unui set de date din baza de date utilizat n cadrul unei aplicaii, combinnd calitile
tabelelor i ale interogrilor. Astfel la fel ca n cazul unei interogri, se poate folosi o vedere pentru a
extrage un set de date din una sau mai multe tabele asociate i la fel ca o tabel, o vedere poate fi
folosit pentru actualizarea informaiilor din baza de date.
La crearea unei vederi, Visual FoxPro stocheaz definiia acesteia n baza de date curent,
definiie ce conine numele tabelelor utilizate n cadrul vederii, precum i cmpurile selectate i
valorile proprietilor lor. La utilizarea vederii, definiia acesteia este folosit de Visual FoxPro
pentru a genera o instruciune SQL care definete setul de date al vederii.
Se pot crea dou tipuri de vederi i anume: locale i externe.
Vederile externe folosesc sintaxa SQL extern pentru a selecta informaii din tabelele unei
surse de date ODBC externe. Vederile locale folosesc sintaxa SQL Visual FoxPro pentru a selecta
informaii din tabele sau vederi. La o vedere local se poate aduga una sau mai multe vederi
externe, obinnd astfel acces la informaii Visual FoxPro i la informaii ODBC externe din
aceeai vedere. O vedere local poate fi creat fie prin intermediul Proiectantului de Vederi (View
Designer), fie cu comanda CREATE SQL VIEW astfel:.
- n cadrul Gestionarului de Proiecte (Project Manager), se selecteaz o baz de date, se alege
Local Views, apoi New pentru a deschide fereastra proiectantului de Vederi (View Designer).
sau
- avnd deschis o baz de date, se d comanda CREATE SQL VIEW pentru a afia fereastra
Proiectantului de Vederi.
sau
- se d comanda CREATE SQL VIEW cu clauza AS.
Exemplu:
CREATE SQL VIEW ViewTest AS SELECT * FROM BazaTest!TabTest
Definiia unei vederi poate fi tears din baza de date cu ajutorul Gestionarului de Proiecte
(Project Manager) sau cu comanda DELETE VIEW (nainte de a terge vederea, baza de date din
care face parte trebuie s fie deschis i s fie baza de date curent).
Pentru accesarea datelor stocate pe un server la distan este necesar s se creeze o vedere
extern ceea ce necesit conectarea la sursa de date prin driver-ul ODBC corespunztor. Sursa de
date i conexiunile pot fi definite din Visual FoxPro. Definiia conexiunii va fi stocat n baza de
date i va putea fi referit atunci cnd se creaz vederea extern.
Pentru crearea unei conexiuni se poate proceda astfel:
- n fereastra Gestionarului de Proiecte (Project Manager), se selecteaz Connections, apoi New
pentru a deschide fereastra Proiectantului de Conexiuni (Connection Designer).
sau
71
sau
- se folosete comanda CREATE CONNECTION, urmat de numele conexiunii.
Exemplu, pentru a crea o conexiune n baza de date BazaTest n vederea conectrii la sursa de date
ODBC ServerRemote, se poate utiliza urmtoarea secven de instruciuni:
OPEN DATABASE BazaTest
CREATE CONNECTION conexiune_01;
DATASOURCE ServerRemote utilizator parola
Visual FoxPro va activa conexiunea atunci cnd se va folosi vederea (pn la activarea
conexiunii, aceasta exist doar ca definiie stocat pe un rnd al fiierului .dbc al bazei de date). La
utilizarea vederii externe, Visual FoxPro va crea, prin intermediul conexiunii indicate n cadrul vederii,
o conexiune activ cu sursa de date extern, dup care trimite ctre aceasta o cerere de date folosind
conexiunea activ drept canal de legtur.
Se poate crea o vedere care indic doar numele sursei de date, nu i denumirea conexiunii, iar la
utilizarea acestei vederi, Visual FoxPro va folosi informaia ODBC pentru a crea i a activa o conexiune
cu sursa de date.
La nchiderea vederii, se nchide i conexiunea.
Pentru afiarea conexiunilor existente se poate utiliza comanda DISPLAY
CONNECTIONS.
Formularele n Visual FoxPro
Formularele ofer utilizatorului faciliti pentru vizualizarea i introducerea datelor ntr-o
baz de date, putnd ncorpora o colecie de obiecte care pot rspunde la evenimentele generate de
utilizator sau de sistem i avnd propriile lor proprieti i metode.
Pentru proiectarea formularelor, Visual FoxPro dispune de un Proiectant de Formulare
(Form Designer) puternic, cu ajutorul cruia utilizatorul poate crea:
- Diverse tipuri de obiecte n cadrul formularelor;
- Date asociate obiectelor dintr-un formular;
- Formulare printe i formulare fiu (ierarhii de formulare);
- Formulare multiple care pot fi manipulate mpreun;
- Formulare bazate pe abloane definite de utilizator.
Crearea unui formular poate fi realizat astfel:
- cu Gestionarul de Proiecte (Project Manager), se selecteaz Forms i New.
sau
- din meniul File, se selecteaz New, apoi Form i, apoi, New File
sau
- c u comanda CREATE FORM
Odat creat formularul, urmeaz s i se adauge controalele, s se configureze proprietile
controalelor i ale formularului i s se scrie codul pentru evenimente. Tipurile de obiecte care pot
fi adugate unui formular sunt: Controale, Containere, Clase definite de utilizator, Obiecte OLE.
Adugarea controalelor standard Visual FoxPro la un formular se poate face cu ajutorul barei de
instrumente Controls.
Controalele standard Visual FoxPro sunt:
Caset de validare Hyperlegturi Caset cu list
Caset de increment
Caset combinat Imagine
Control OLE asociat
Caset de text
72
73
74
75
76
77
ncheiat dup realizarea tuturor operaiilor pe care le conine. Operaiile coninute ntr-o tranzacie
pot fi realizate efectiv n baza de date sau nu, fie automat de ctre sistem dup fiecare operaie, fie
printr-o comand explicit dat dup o succesiune de operaii. Astfel salvarea automat de ctre
sistem a modificrilor este realizat prin comanda
SET AUTOCOMMIT ON
Dac iniial a fost specificat comanda SET AUTOCOMMIT OFF, salvarea modificrilor efectuate
asupra datelor se realizeaz prin comanda COMMIT, iar abandonarea modificrilor se realizeaz
prin comanda ROLLBACK.
Blocul de operaii ce definesc o tranzacie poate fi delimitat de instruciunile :
BEGIN TRANSACTION
END TRANSACTION
(pentru unele sisteme SGBDR cum ar fi dBASE IV SQL aceste delimitri sunt obligatorii).
Problem rezolvat
Se lanseaz n execuie SQL Plus Oracle sub utilizatorul system (figura 47).
n baza de date ORCL sub S.G.B.D. Oracle se creaz utilizatorul U1 identificat prin parola
PW1 i i se acord privilegiile CONNECT, RESOURCE (figura 48).
Se nchide sesiunea de lucru SQL Plus a utilizatorului system (cu instruciunea EXIT) i se
deschide o nou sesiune de lucru SQL Plus pentru utilizatorul U1 (figura 49).
Se creaz tabela Produse i se insereaz dou nregistrri (figura 50).
Problem propus
Se creaz utilizatorul U2 identificat prin parola PW2.
Sub utilizatorul U1 se creaz tabelele bazei de date FurnizoriClienti i se insereaz date n
fiecare tabel.
Sub utilizatorul U1 se acord diverse privilegii asupra tabelelor, utilizatorului U2.
Utilizatorul U1 retrage o serie de privilegii utilizatorului U2.
79
ORCL
80
ORCL
Modelul relaional al datelor propus de Codd, relativ la manipularea datelor, a fost iniial orientat
exclusiv pe problema regsirii datelor prin operaia de interogare a bazelor de date, ulterior (SQL2,
1990) fiind avute n vedere i problemele introducerii actualizrii i eliminrii datelor.
Interogarea bazelor de date - Fraza SELECT
82
Exemple:
SELECT * FROM Persoane WHERE Nume LIKE %a
(selecteaz toate nregistrrile din tabela Persoane pentru care valorile atributului Nume se termin
cu litera a).
SELECT Nume,Prenume,Datan FROM Persoane WHERE Nume LIKE A%u
(selecteaz valorile atributelor Nume, Prenume, Datan pentru toate nregistrrile din tabela
Persoane pentru care prima liter din Nume este A iar ultima liter este u).
SELECT Nume FROM Persoane WHERE Nume LIKE _o%
(selecteaz valorile atributului Nume pentru toate nregistrrile din tabela Persoane pentru care
prima liter din Nume este orice liter, a doua liter din Nume este litera o i ncepnd din poziia
a treia numele poate conine orice litere.)
Predicatele ALL, ANY, EXISTS se utilizeaz pentru interogri ce conin subinterogri, n vederea
verificrii anumitor condiii ce trebuie ndeplinite ntre rezultatele interogrii i rezultatele
subinterogrii.
Clauza GROUP BY realizeaz gruparea tuplelor unei relaii pe baza valorilor unui atribut
sau grup de atribute i genereaz o singur tupl pentru fiecare grup de tuple avnd aceeai valoare
pentru atributele care definesc grupul. Atributele care definesc grupul trebuie obligatoriu s se
regseasc n lista atributelor interogate <lista atribute>.
De asemenea asupra unor atribute pot fi aplicate funcii agregat:
- AVG(<atribut>) media valorilor atributului specificat ca parametru, pe grup;
- SUM(<atribut>) suma valorilor atributului specificat ca parametru, pe grup;
- MAX(<atribut>) maximum valorilor atributului specificat ca parametru, pe grup;
- MIN(<atribut>) minimum valorilor atributului specificat ca parametru, pe grup;
- COUNT(<atribut>) numrul nregistrrilor pe grupare dup <atribut>.
Observaie. <atribut> poate fi fie un atribut, fie o expresie definit utiliznd atribute ale tabelei.
Clauza HAVING, opiune a clauzei GROUP BY, este o form special a clauzei WHERE
ntruct se aplic unor grupuri de tuple (i nu unor tuple) definite de clauza GROUP BY.
Exemple:
Fie tabela Stocuri(CodDep,CodP,UmP,Cant,Pret)
SELECT CodDep,SUM(Cant*Pret) AS Valoare,COUNT(CodDep) AS Contor
FROM Stocuri GROUP BY CodDep
(Calculeaz suma produselor Cant*Pret pentru toate tuplele avnd aceeai valoare n cmpul
CodDep i numrul nregistrrilor din fiecare grup definit de cmpul CodDep i afiseaz rezultatele
sub form de tabel avnd coloanele CodDep, Valoare, Contor)
SELECT CodDep,CodP,MAX(Pret) FROM Stocuri
GROUP BY CodP HAVING MAX(Pret) < 150000
(selecteaz pentru fiecare grup de nregistrri avnd aceeai valoare n cmpul CodP, nregistrarea
cu preul maxim mai mic dect 150000)
Clauza ORDER BY permite precizarea ordinii de afiare a datelor astfel:
ORDER BY <nume atribut 1> [ASC]|DESC,<nume atribut 2>[ASC]|DESC,
Exemplu:
SELECT * FROM Persoane ORDER BY Datan DESC,Nume
(afieaz toate nregistrrile din tabela Persoane n ordine descresctoare dup data naterii i n
cadrul aceleiai date a naterii cresctor dup Nume)
84
Clauza UNION permite obinerea rezultatului a dou sau mai multe interogri printr-o
singur instruciune SELECT.
Exemplu:
SELECT CodDep,CodP,Cant FROM Stoc_Prod WHERE CodDep = Dep01
UNION
SELECT CodDep,CodP,Cant FROM Stoc_Prod WHERE Cant >= 100
(selecteaz tuplele (CodDep,CodProd,Cant) din tabela Stoc_Prod pentru toate nregistrrile pentru
care CodDep = Dep01, la care adaug tuplele (CodDep,CodProd,Cant) din tabela Stoc_Prod
pentru toate nregistrrile pentru care Cant >= 100).
Pentru a nu se elimina tuplele duplicat trebuie specificat UNION ALL.
Pentru a schimba ordinea de afiare a tuplelor extrase se poate utiliza clauza ORDER BY aplicat
doar relaiei finale i nu asupra fiecrei fraze SELECT.
Regsirea datelor din dou sau mai multe relaii
Interogarea datelor din dou sau mai multe tabele (relaii) presupune existena unor cmpuri
comune pentru realizarea operaiei de cuplare (operatorul JOIN). n fraza SELECT operaia de
cuplare este definit n clauza WHERE sub forma:
<nume tabela1>.<cheie1> = <nume tabela2>.<cheie2>
(unde <cheie1>, <cheie2> reprezint cmpurile ce identific nregistrrile corespondente n cele
dou tabele).
Pentru exemplificare pe lng tabela Stocuri mai considerm tabela Produse(CodP, DenP, DesP).
SELECT Produse.CodP,DenP,UmP,Cant,Pret FROM Produse,Stocuri
WHERE Produse.CodP = Stocuri.CodP
(extrage toate tuplele (CodP,DenP,UmP,Cant,Pret) pentru care valoarea atributului CodP din
tabela Produse este egal cu valoarea atributului CodP din tabela Stocuri ).
n lipsa clauzei WHERE se vor extrage toate combinaiile posibile ntre tuplele celor dou tabele
(produsul cartezian).
Fiecrei tabele i se poate atribui un alias astfel nct fraza de mai sus este echivalent cu fraza:
SELECT A.CodP,DenP,UmP,Cant,Pret FROM Produse A,Stocuri B WHERE A.CodP = B.CodP
n anumite situaii poate fi necesar corelarea (cuplarea) unei relaii (tabele) cu ea nsi.
Spre exemplu dac presupunem c n tabela Stocuri unele produse pot apare de mai multe ori cu
preuri diferite i ne intereseaz poziiile cu preul minim, formulm urmtoarea interogare:
SELECT A.CodP,A.Cant,A.Pret FROM Stocuri A
WHERE A.Pret = (SELECT MIN(B.Pret) FROM Stocuri B WHERE A.CodP = B.CodP)
Pentru rezolvarea unor astfel de probleme s-au utilizat instruciuni SELECT imbricate care vor fi
tratate n detaliu n lucrarea de laborator nr.13.
Instruciuni SELECT imbricate
Limbajul SQL ofer posibilitatea construirii unor interogri complexe prin includerea n
clauza WHERE a unei instruciuni SELECT, a altei instruciuni SELECT (numit sub-interogare
sau inner) astfel:
SELECT <lista atribute> FROM <lista relaii>
WHERE <condiie> (<sub-interogare>)
La rndul ei sub-interogarea poate conine n clauza WHERE o alt instruciune SELECT obinnd
astfel o interogare complex constituit din instruciuni SELECT imbricate pe un numr oarecare
de nivele. Instruciunea SELECT interioar genereaz valori pentru condiia de cutare a
85
instruciunii SELECT exterioare care o conine (numit i outer). O sub-interogare poate returna o
singur valoare, sau poate returna mai multe valori.
n ce privete ordinea de evaluare a interogrilor pot exista :
- sub-interogri simple - n care interogarea interioar este evaluat prima, independent de
interogarea exterioar, iar rezultatul interogrii interioare este utilizat de interogarea exterioar;
- sub-interogri corelate - n care interogarea exterioar transmite repetat cte o valoare pentru
interogarea interioar, care n baza valorii primite, parcurge tuplele relaiei i transmite
interogrii exterioare rezultatul obinut. Astfel de interogri realizeaz corelarea unei relaii cu
ea nsi i sunt cele mai performante.
Spre exemplu dac presupunem c n tabela Stocuri unele produse pot apare de mai multe ori cu
preuri diferite i ne intereseaz poziiile cu preul minim, formulm urmtoarea interogare:
SELECT A.CodP,A.Cant,A.Pret FROM Stocuri A
WHERE A.Pret = (SELECT MIN(B.Pret) FROM Stocuri B WHERE A.CodP = B.CodP)
Sub-interogri simple care returneaz o singur valoare - pot fi utilizate n interogri
imbricate avnd sintaxa:
SELECT <lista atribute> FROM <lista relaii>
WHERE <atribut> =
<
>
<=
>=
!=
(<sub-interogare>)
[ORDER BY <atribut[ASC]|DESC,]
Exemplu:
SELECT CodDep,CodP,Cant FROM Stocuri
WHERE Cant > (SELECT AVG(Cant) FROM Stocuri ) ORDER BY CodDep
(afieaz produsele pentru care exist stocuri peste medie, ordonate pe depozite).
Sub-interogari simple care returneaza mai multe valori pot fi utilizate n interogri
imbricat care utilizeaz n clauza WHERE codiii care genereaz o mulime de valori folosind unul
din predicatele: (NOT)IN, (NOT)ANY, (NOT)ALL, (NOT)EXISTS.
Exemplu:
SELECT * FROM Produse WHERE CodP IN (SELECT CodP FROM Facturi WHERE Numar IN
(SELECT Numar FROM Beneficiari,ComenziWHERE Beneficiari.Nume=Ionescu AND
Beneficiari.Cod_Beneficiar=Comenzi.Cod_Beneficiar))
Predicatul ANY poate fi utilizat n combinaie cu oricare din operatorii <, >, =, <=, >=, != i
permite verificarea dac valoarea unui atribut satisface condiia precizat pentru orice valoare din
lista rezultat din subinterogare.
SELECT CodP FROM Stocuri WHERE Cant > ANY
(SELECT Cant FROM Stocuri WHERE CodDep = D1)
Predicatul ALL returneaz toate tuplele pentru care valorile atributului din clauza WHERE
sunt <, >, <=, >= dect toate valorile generate de interogarea interioar (acest predicat nu poate fi
utilizat cu operatorul = ce ar corespunde cazului banal n care toate interogrile din list sunt egale).
Exemplu:
86
CodDep
Stocuri
Codp
Stocuri
Denp
Produse
Ump
Stocuri
Cant
Stocuri
Pret
Stocuri
Valoare
Cant*Pret
Situaia ofertelor
Cmp
Tabela
Codf
Furnizori
Denf
Furnizori
Adresaf
Furnizori
Codp
Produse
Denp
Produse
Ump
Oferte
Pret
Oferte
Datao
Oferte
Situaia vnzrilor
Cmp
Tabel
a
Codc
Clienti
Denc
Clienti
Adresac
Clienti
Codp
Produse
Denp
Produse
Ump
Vanzari
Cant
Vanzari
Pret
Vanzari
Valoare
Cant*Pre
t
Codp
Produse
Denp
Produse
Codp
Produse
Denp
Produse
87
Datav
Vanzari
Bibliografie:
1. Thomas Connolly, Carolyn Begg, Anne Strachan Database Systems A Practical
Approach to Design, Implementation and Management Second Edition (trad. Ed. Teora: Baze de
date Proiectare . Implementare . Gestionare, Buc. 2001)
2. Conf.univ.dr. VirgilChichernea, Sistemul ACCESS, Ed.SYLVI, vol.I, Buc.2000
3. Conf.univ.dr. Virgil Chichernea, lector univ.dr. Cezar Botezatu, Sistemul
FoxPro,Ed.SYLVI, vol.II, Buc.2000
4. Mirela Danubianu, Baze de date - Fundamente teoretice si dezvoltarea aplicatiilor n
Visual FoxPro / - Suceava, 2003. - 209 p., ISBN 973-0-03257-2
5. C. J. Date, An Introduction to Database Systems, 8th Edition, published by Pearson
Education, Inc. Adison Wesley Higher Education, 2004.
6. Robert Dollinger-Baze de date i gestiunea tranzaciilor,ClujNapoca,1998
7. FoxPro 2.6 pentru Windows. Ghidul programatorului, Traducere Ed. Teora, 1998
8. Doina Fusaru, Arhitectura bazelor de date Mediul SQL, Univ.Spiru Haret, Ed.Fundatiei
Romnia de mine, Buc.2002
9. Utilizare Microsoft Access 2000, Susan Sales Harkins, Ken Hansen i Tom Gerhart, trad.
Marian Daniel Merezeanu, Aurelia Nicoleta Merezeanu, Bucureti, Ed. Teora,2000. - 527 p.
10. Jones John Data Bases in theory and practice Ed. Thompson Computer
Press, UK 1997
11. Nicolae Morariu, Valeriu Lupu si Ovidiu Hurjui, Baze de date, Editura Universitatii
Suceava, 2003. - 117 p., ISBN 973-8293-83-9
12. Introduction to ORACLE SQL, SQL* Plus and PL/SQL Course Notes, Glenn Maslen,
Published by Oracle Corporation UK Ltd. 1992
13. Totul despre SQL Interogarea bazelor de date, Corina Pascu, Adrian
Pascu,
Ed. Tehnic Buc. 1994
14. Stefan-Gheorghe Pentiuc, Jean-Michel Duthilleul, Elemente de teoria si proiectarea
bazelor de date : note de curs, Suceava, Universitatea "Stefan cel Mare" Suceava, 1995,132 p.
15. Khoshafian Setrag Object Oriented Databasses, pub. John Whiley, 994, UK
16. Access - pentru programatori / Leon Tmbulea. - Cluj-Napoca : Promedia Plus, cop.
1996. - 297 p.
17. Aplicaii de gestiune : Access i Visual Basic / Mioara Udric. - Bucureti : Naional,
1998. - 197 p.
18. Microsoft Visual FoxPro 6.0, Ghidul programatorului, Ed.Teora, 2000.
88