Sunteți pe pagina 1din 88

UNIVERSITATEA TEFAN CEL MARE SUCEAVA

Facultatea de tiine Economice i Administraie Public


Nicolae Morariu

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

Descrierea CIP a Bibliotecii Naionale a Romniei


MORARIU, NICOLAE
Baze de date; ndrumar de laborator/ Nicolae Morariu .
Suceava: Editura Universitii din Suceava, 2005
Bibliogr.
ISBN 973-666-159-8

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.

Lucrare de laborator nr. 1


Tema: Baze de date ACCESS. Crearea unei baze de date.
Microsoft Access este un sistem pentru crearea i utilizarea bazelor de date de complexitate
medie pentru calculatoare personale, putnd lucra performant cu sute de mii de nregistrri pe un
calculator personal sau n cadrul unei reele de pn la 20 utilizatori care lucreaz simultan cu baza
de date.
Programul Access stocheaz toate componentele unei baze de date ntr-un singur fiier pe
disc cu extensia .mdb.
Componentele unei baze de date ACCESS
O baz de date Access poate conine urmtoarele componente:
- Tabele stocheaz datele bazei de date. Fiecare coloan a tabelei este numit cmp i fiecare
rnd al tabelei este numit nregistrare.
- Interogri realizeaz extragerea unor date din una sau mai multe tabele conform unor criterii
precizate de utilizator n vederea vizualizrii i actualizrii datelor din baza de date sau pentru a
crea alte tabele n vederea pstrrii unui instantaneu al informaiilor. O interogare nu are date
proprii i opereaz cu date din tabelele bazei de date.
- Formulare un formular este o fereastr pentru introducerea sau afiarea i editarea datelor. Un
formular poate conine subformulare pentru a afia date asociate unor date din formular i
butoane sau alte obiecte grafice pentru realizarea anumitor aciuni.
- Rapoarte sunt utilizate pentru operaii de ieire n vederea obinerii unor situaii rezultate
din prelucrarea unor date din baza de date. Pentru includerea selectiv a unor date ntr-un raport
sau pentru realizarea unui raport care folosete date din mai multe tabele va trebui creat mai
nti o interogare i apoi raportul s fie fundamentat pe rezultatele interogrii.
- Comenzi macro permit realizarea unei secvene de aciuni care poate fi ataat unui buton.
- Module stocheaz proceduri i funcii scrise n limbajul Visual Basic pentru tratarea
evenimentelor.
Crearea unei baze de date
Microsoft Access furnizeaz dou metode de creare a unei baze de date.
1.
se poate crea o baz de date goal i apoi se adaug tabelele, interogrile,
formularele, rapoartele i alte obiecte necesare.
2.
se poate crea o baz de date folosind Database Wizard.
Indiferent de metoda prin care se creeaz baza de date, ea poate fi oricnd modificat.
Crearea unei baze de date goale
Pentru a crea o baz de date goal se vor executa urmtoarele operaii:
1.
Atunci cnd se deschide o sesiune Microsoft Access, pe ecran se afieaz caseta de dialog
Microsoft Access ce conine opiuni care permit crearea unei baze de date noi sau deschiderea
uneia existente (vezi figura 1). Pentru a crea o baz de date goal (fr a folosi un Wizard), se
execut clic pe opiunea Blank Database i apoi se execut clic pe butonul OK. Dac baza de date
este deschis deja sau caseta de dialog Microsoft Access este nchis, atunci se va executa clic pe
butonul New Database din bara instrumentelor Database. Pe ecran se afieaz caseta de dialog
New (vezi figura 2). Se execut dublu-clic pe pictograma Blank Database din eticheta General

Figura1 Caseta de dialog Microsoft Access


Blank Database permite crearea unei baze de date goale
Database Wizard permite crearea unei noi baze de date folosind un wizard
Open an Existing Database permite deschiderea unei baze de date existente.

Figura 2 Caseta de dialog New

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).

Figura 2.1 Caseta de dialog File New Database

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.

Figura 3 Caseta de dialog New avnd selectat eticheta Databases

Figura 4 Obiectele bazei de date de tip Contact Management

Problem propus
S se creeze baza de date FurnizoriClieni prin fiecare din cele dou metode prezentate mai
sus.

Lucrare de laborator nr. 2


Tema: Baze de date ACCESS. Crearea i utilizarea tabelelor
Tabela este o colecie organizat de date despre un anumit subiect, cum ar fi produse,
furnizori etc. Folosind o tabel separat pentru fiecare subiect se elimin duplicarea datelor,
asigurndu-se astfel utilizarea mai eficient a spaiului de stocare i reducerea erorilor la
introducerea datelor. Tabelele sunt organizate n coloane (numite cmpuri) i linii (numite
nregistrri sau articole).
Tipuri de date
La alegerea tipului de date pentru un cmp se vor avea n vedere urmtoarele observaii:
Tipul de date admise n camp. Spre exemplu, nu se va putea memora text ntr-un cmp cu tipul de
date Number.
Spaiul alocat pentru memorarea valorilor din cmp
Tipurile de operaii ce se vor execute cu valorile din camp. Spre exemplu, Microsoft Access poate
aduna valorile din cmpurile Number sau Currency, dar nu i valorile din cmpurile Text sau
OLE Object.
Cmpurile de tip Memo sau OLE Object nu pot fi sortate sau indexate.
Cmpurile Memo sau OLE Object nu se pot folosi pentru a grupa articolele n cereri sau
rapoarte.
ntr-un cmp Text, numerele sunt sortate ca iruri de caractere (1, 10, 100, 2, 20, 200 s.a.m.d.),
nu ca valori numerice. Pentru a sorta numerele ca valori numerice se folosesc cmpurile Number
sau Currency. De asemenea, multe formate de date calendaristice nu se vor sorta corect dac se
introduc ntr-un cmp Text. Pentru a fi sortate corect se introduc numai
ntr-un cmp de tip
Date/Time.
Tipurile de date admise n Microsoft Access, modul lor de folosire i dimensiunea de
memorare sunt prezentate n tabelul T1.
T1. Tipuri de date admise ntr-o baz de date Access
Tipul datei
Utilizare
Text
Text sau combinaie de text i numere, cum

Spaiul de memorie necesar


Pn la 255 caractere.

ar fi adresele. De asemenea, numere ce nu

Microsoft Access memoreaz

necesit calcule, cum ar fi numerele de

numai caracterele introduse n

telefon, numerele de partid sau codurile

cmp; nu se memoreaz

potale.

caractere spaiu pentru


poziiile nefolosite. Pentru a
controla numrul maxim de
caractere ce pot fi introduse se

Memo

Texte i numere foarte lungi, cum ar fi notie

seteaz proprietatea FieldSize.


Pn la 64,000 caractere.

Number

sau descrieri.
Date numerice folosite pentru calcule

1, 2, 4 sau 8 bytes (16 bytes

matematice, cu excepia calculelor ce impun

numai pentru Replication ID).

valori monetare. Pentru a defini un anumit tip


Date/Time
Currency

Number setai proprietatea FieldSize.


Date calendaristice i timpi.
Valori monetare. Se va folosi tipul de date

8 bytes.
8 bytes.

Currency pentru a preveni rotunjirea pe


timpul calculelor. Precizia tipului este de 15
cifre la partea ntreag i 4 cifre la partea
AutoNumber

zecimal.
Numere n secven unic (din 1 n 1) sau

4 bytes (16 bytes numai pentru

aleatoare care sunt automat inserate atunci

Replication ID).

Yes/No

cnd se adaug un articol.


Cmpuri care vor conine numai una din dou 1 bit.

OLE Object

valori, cum ar fi Yes/No, True/False, On/Off.


Obiecte (cum ar fi documente Microsoft

Pna la 1 GB (limitat de spaiul

Word, foi de calcul Microsoft Excel, imagini,

disc).

sunete sau alte date binare) create n alte


programe folosind protocolul OLE, ce pot fi
nlnuite sau ncapsulate ntr-o tabel
Microsoft Access. Trebuie s se foloseasc
un cadru de obiect legat ntr-o machet sau
Lookup

raport pentru a afia obiectul OLE.


Crearea unui cmp care permite alegerea unei Acelai spaiu ca i cmpul

Wizard

valori dintr-o alt tabel sau dintr-o list de

cheii primare folosit pentru a

valori folosind o caset combo. Alegnd

executa examinarea, n mod

aceast opiune, se lanseaz un Wizard care

obinuit 4 bytes.

dirijeaz crearea listei.


n tabelul T2 sunt prezentate tipurile i mrimea valorilor numerice ce pot fi memorate n
cmpurile de tip Number.
T2. Date de tip Number
Valoarea proprietii Domeniu
FieldSize
Byte
0 la 255

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.

Design pentru a defini toate detaliile tabelei.

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

Figura 5 Fereastra Design View a unei tabele

Crearea unei tabele folosind vederea Design.


Pentru a crea o tabel folosind vederea Design se execut urmtoarele operaii:
1. Se deschide n fereastra Database baza de date n care se creeaz o nou tabel, dac ea nu este
deja deschis. Se poate folosi tasta funcional F11 pentru a comuta n fereastra Database din
orice alt fereastr.
2. Se activeaz eticheta Tables i apoi, fie se selecteaz opiunea Create table in Design view
(vezi figura 5), fie se execut clic pe butonul New (vezi figura 6) i n caseta de dialog New
Table, ce apare pe ecran (vezi figura 6), se va selecta opiunea Design View i apoi se execut
clic pe butonul OK.
3. n fereastra Design View care apare pe ecran (vezi figura 5) se va defini fiecare cmp al tabelei.
4. nainte de a salva tabela, se va defini o cheie primar prin click dreapta pe numele cmpului
corespunztor i selectare opiune Primary key. Cheia primar poate fi stabilit i ulterior.
5. Dup definirea structurii tabelei, se execut clic pe butonul Save din bara butoanelor Standard
sau se selecteaz opiunea Save din meniul File i apoi se va tasta un nume pentru tabel.

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

Lucrare de laborator nr. 3


Tema: Baze de date ACCESS. Crearea cmpurilor de tip Lookup Wizard
Un cmp de tipul Lookup Wizard, permite realizarea i utilizarea unei liste 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. n cele ce
urmeaz se vor prezenta paii de parcurs pentru definirea unui astfel de cmp pentru fiecare din
cele dou situaii.
Crearea unui cmp pentru examinarea i afiarea valorilor dintr-o tabel sau interogare
Pentru a crea un cmp care s afieze valorile dintr-o tabel sau interogare se execut
urmtoarele operaii:
1. n coloana Data Type a cmpului, se execut clic pe sgeat i selecteaz Lookup Wizard din

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

Figura 12. A asea caset de dialog Lookup Wizard


Crearea unui cmp pentru examinarea i afiarea unei liste de valori
Pentru a crea o list de valori se execut urmtoarele operaii:
1. n coloana Data Type a cmpului de examinare, se execut clic pe sgeat i selecteaz

Lookup Wizard din lista afiat (vezi figura 13).


2. n prima caset de dialog Lookup Wizard (vezi figura 14) se selecteaz opiunea I will type n

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 13. Selectare tip de cmp Lookup Wizard

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

Lucrare de laborator nr. 4


Tema: Baze de date ACCESS. Crearea tabelelor bazei de date FurnizoriClienti.
n baza de date FurnizoriClieni se creaz urmtoarele tabele:
PRODUSE (catalog de produse)
Cmp

Semnificaie

Tip dat

Dimensiune

Observaii

Codp

Cod produs

Number, Integer

Cheie primar

Denp

Denumire produs

Text

20

Desp

Descriere produs

Hyperlink

Refer document
corespunztor

STOCURI (stocurile de produse pe depozite)


Cmp

Semnificaie

Dimensiune

Observaii

Cod produs

Tip dat
Number, Integer
Lookup Wizard

Codp

Lookup Wizard
tabela PRODUSE

CodDep

Cod depozit

Text

Ump

Unitate de msur Lookup Wizard


produs

Cant

Cantitate

Number, Integer

Pret

Pre unitar

Number,
LongInteger

Creare i utilizare list


de valori

FURNIZORI (catalog de furnizori)


Cmp

Semnificaie

Tip dat

Dimensiune

Observaii

Codf

Cod furnizor

Number, Integer

Cheie primar

Denf

Denumire furnizor

Text

30

Adresaf

Adresa furnizor

Text

25

CLIENTI (catalog de clieni)


Cmp

Semnificaie

Tip dat

Dimensiune

Observaii

Codc

Cod client

Number, Integer

Cheie primar

Denc

Denumire client

Text

30

Adresac

Adresa client

Text

25

21

cu

OFERTE (oferte de produse de la furnizori)


Cmp

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

Unitate de msur Lookup Wizard


produs

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

VANZARI (vnzrile de produse pe clieni)


Cmp

Semnificaie

Dimensiune

Observaii

Cod furnizor

Tip dat
Number, Integer
Lookup Wizard

Codc

Lookup Wizard
tabela CLIENTI

Codp

Cod produs

Number, Integer
Lookup Wizard

Ump

Unitate de msur Lookup Wizard


produs

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

Lucrare de laborator nr. 5


Tema: Baze de date ACCESS. Interogri.
Crearea i utilizarea interogrilor
Interogrile se folosesc pentru a vizualiza, modifica i analiza datele n diverse moduri. De
asemenea, ele pot fi utilizate ca surs de articole pentru formulare i rapoarte. Pentru a crea un
raport n care sunt utilizate anumite date dintr-o tabel sau date din mai multe tabele se va crea mai
nti interogarea corespunztoare i apoi se va defini raportul utiliznd acea interogare.
Exist mai multe tipuri de interogri, dar cel mai utilizat tip este interogarea de selecie.
Interogarea poate fi creat folosind un Wizard sau prin proiectare n vederea Design a
interogrii. n vederea Design, se specific datele cu care se va lucra prin adugarea tabelelor sau
interogrilor ce conin acele date i se completeaz celulele din reeaua de proiectare.
n Microsoft Access exist urmtoarele tipuri de interogri:
- Interogare de selecie regsete datele din una sau mai multe tabele i afieaz rezultatele ntr-o
foaie de date, unde se pot modifica articolele (cu anumite restricii). De asemenea, se poate folosi o
interogare de selecie pentru a grupa articolele i a efectua nsumri, contorizri, medii aritmetice i
alte tipuri de totalizri.
- Interogare cu parametru Este o interogare care la execuie afieaz propria sa caset de dialog
prin care se solicit introducerea unor informaii suplimentare, cum ar fi criteriul pentru regsirea
articolelor sau valoarea care se insereaz ntr-un cmp. Se poate proiecta interogarea pentru a
solicita mai mult de o singur component a informaiei; spre exemplu, se poate proiecta
interogarea pentru a solicita dou date. Apoi, Microsoft Access poate regsi toate datele cuprinse
ntre cele dou valori.
De asemenea, interogrile cu parametru sunt utile i atunci cnd sunt folosite ca baz pentru
formulare i rapoarte. Spre exemplu, se poate crea un raport de vnzri lunare bazat pe o interogare
cu parametru (luna). Atunci cnd se va tipri raportul, Microsoft Access va afia, mai nti, o caset
de dialog n care se solicit luna pentru care se dorete raportul.
De asemenea, se poate crea un formular personalizat sau o caset de dialog pentru
parametrii interogrii n loc s se foloseasc casetele de dialog ale interogrii cu parametru.
- Interogare de tip crosstab Interogarea de tip crosstab afieaz valori rezumative (totaluri,
contorizri i medii aritmetice) din unul din cmpurile tabelei i le grupeaz dup un set de factori
listai n jos pe latura din stnga foii de calcul i dup un alt set de factori listai de-a lungul prii
superioare a foii de date.
- Interogare de aciune Este o interogare care permite modificarea mai multor articole ntr-o
singur operaie. Exist patru tipuri de interogri de aciune:
1. Interogare de tergere Permite tergerea unui grup de articole din una sau mai multe tabele.
Spre exemplu, se poate folosi o astfel de interogare pentru a elimina toate produsele cu stoc 0
sau acelea care nu sunt comandate. Utilizarea acestui tip de interogri, elimin ntotdeauna
articolele ntregi, nu doar cmpurile selectate din articole.
2. Interogare de actualizare Asigur modificarea global a unui grup de articole din una sau mai
multe tabele. Spre exemplu, se pot mri preurile de vnzare cu 10% pentru toate produsele
dintr-o anumit categorie.
3. Interogare de adugare Adaug un grup de articole din una sau mai multe tabele la sfritul
uneia sau a mai multor tabele. Spre exemplu, s presupunem s-au identificat civa noi clieni i
baza de date cu informaii despre aceti clieni. Pentru a evita tastarea tuturor informaiilor,

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

4. Subinterogare (subquery) Acest tip de interogri constau dintr-o instruciune SQL

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.

Figura 18. Creare interogare n modul Design View.

26

Figura 19. Selectare tabele pentru creare interogare.

Figura 20. Caseta Query pentru definirea cmpurilor interogrii.


27

Figura 21. Definirea interogrii Situatia Stocurilor.

Figura 22. Vizualizarea datelor corespunztoare interogrii Situatia Stocurilor


28

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

Se vor crea i interogri cu parametru n care parametrul va fi, pe rnd:


- furnizorul;
- produsul
pentru situaia ofertelor i:
- clientul;
- produsul;
- perioada
pentru situaia vnzrilor.

29

Valoare
Cant*Pre
t

Datav
Vanzari

Lucrare de laborator nr. 6.


Tema: Baze de date ACCESS. Formulare.
Crearea i utilizarea formularelor.
n Microsoft Access formularele se pot folosi pentru a crea:
- un ecran pentru introducerea datelor n una sau mai multe tabele;
- un ecran tip panou de comutatoare pentru a deschide alte formulare sau rapoarte;
- o caset de dialog care s solicite de la utilizator informaii suplimentare necesare
executrii unei aciuni.
Majoritatea informaiilor dintr-un formular provin dintr-o surs de informaii, dar exist i
informaii care se introduc la proiectarea machetei. Legtura dintre formular i sursa de date se
realizeaz prin intermediul unor obiecte grafice, numite controale. Cele mai utilizate controale sunt
casetele de text, cu ajutorul crora se pot afia fie informaiile dintr-o surs de date, fie rezultatele
evalurii unei expresii.
Un formular poate fi creat n dou moduri i anume:
- n modul Design view;
- utiliznd un wizard.
Un wizard poate fi utilizat n modurile (figura 23, caseta New Form care apare la apsarea
butonului New din fereastra Database):
Form Wizard, AutoForm: Columnar, AutoForm: Tabular, Chart Wizard, Pivot Table Wizard.
Odat creat, un formular poate fi modificat i n acest sens se deschide formularul n modul
Design pentru a-l modifica aa cum se dorete.
Pentru crearea unui singur formular simplu, pe o singur coloan, se poate utiliza opiunea
AutoForm.
Pentru ca formularul s poat afia cmpurile tabelei (interogrii) selectate, trebuie adugate
controale (casete de text, casete combinate, liste etc.) n macheta acestuia. Pentru a putea aduga
controale este necesar ca pe ecran s existe caseta cu instrumente Toolbox i fereastra List Field.
Dac aceste obiecte nu sunt afiate pe ecran, atunci va trebui ca din meniul View s se selecteze
opiunile Toolbox, pentru a afia caseta instrumentelor Toolbox, respectiv Field List pentru a afia
lista cmpurilor. Dup adugarea controalelor i stabilirea proprietilor formularului, se nchide
formularul i i se d un nume.
Subformulare
Subformularul este un formular n interiorul altui formular. Formularul primar este denumit
formular principal (main form), iar formularul din interiorul formularului este numit subformular.
Combinaia formular/subformular este referit adeseori ca formular ierarhic, formular
principal/detaliu sau formular printe/copil.
Subformularele sunt eficiente n special pentru prezentarea datelor din tabele sau interogri
cu relaii 1m (one-to-many). Spre exemplu, se poate crea un formular cu un subformular pentru a
prezenta datele din tabelele Produse i Stocuri. Datele din tabela Produse reprezint partea 1 din
relaie, iar datele din tabela Stocuri reprezint partea m din relaie fiecare produs putnd avea
mai multe nregistrri n tabela Stocuri.
Formularul principal i subformularul din acest tip de formulare sunt nlnuite, astfel nct
subformularul afieaz numai nregistrrile care sunt corelate cu nregistrarea curent din

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 24. Creare formular Produse (pasul 1)

Figura 25. Creare formular Produse (pasul 2)


32

Figura 26. Creare formular Produse (pasul 3)

Figura 27. Creare formular Produse (pasul 4)


33

Figura 28. Creare formular Produse (pasul 5)

Figura 29. Vizualizare formular Produse.


34

Figura 30. Depunere subformular Stocuri n formular Produse.

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

Lucrare de laborator nr. 7


Tema: Baze de date ACCESS. Rapoarte.
Crearea i vizualizarea rapoartelor
Rapoartele au n vedere prelucrarea unor date din baza de date pentru obinerea unor situaii
ce urmeaz a fi tiprite sau afiate pe ecran la cererea utilizatorului. Spre deosebire de formulare
care pe lng vizualizarea datelor permite i actualizarea acestora, rapoartele realizeaz interogarea
i prelucrarea datelor din baza de date nefiind posibil modificarea datelor.
Exist dou modaliti de creare a rapoartelor i anume (figura 32):
- creare raport n modul Design view;
- creare raport utiliznd un wizard.
Un wizard poate fi utilizat n modurile (figura 32, caseta New Report care apare la apsarea
butonului New din fereastra Database):
- Report Wizard;
- AutoReport: Columnar:
- AutoReport: Tabular;
- Chart Wizard;
- Label Wizard.

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

Situaia vnzrilor de produse pe client


Cod client Denumire client Adresa client
Cod produs Denumire produs Ump Cantitate Pret Valoare Data vnzrii

Total client
xxxxxx
..

Total general

xxxxxx

37

Figura 33. Modul Report Wizard Selectare tabel sau interogare pentru raport .

Figura 34. Modul Report Wizard Selectare cmpuri 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 39. Modul Report Wizard. Precizare format de realizare raport.

Figura 40. Modul Report Wizard. Selectare stil de realizare raport.


41

Figura 41. Modul Report Wizard. Precizare titlu raport.

Figura 42. Modul Report Wizard. Vizualizare raport Situaia stocurilor de produse.

42

Lucrare de laborator nr. 8


Tema: Baze de date FoxPro. Creare tabele, introducere i editare date n tabele.
FoxPro este un produs pentru crearea i gestionarea bazelor de date relaionale de
complexitate medie, elaborat iniial de firma Fox Software i preluat ulterior i dezvoltat de ctre
compania Microsoft ncepnd cu versiunea 2.6 sub Windows (1989 1994) i cotinund cu
versiuni Visual FoxPro: 3.0, 5.0, 6.0, 7.0, 8.0, 9.0, versiunea 9.0 fiind disponibil ncepnd din anul
2004.
Programul Visual FoxPro este un instrument puternic, interactiv, de gestionare a datelor,
mediul Visual FoxPro permind crearea aplicaiilor, utilizarea tehnicilor de programare orientat
spre obiecte i condus de evenimente, faciliti ce sporesc la maximum productivitatea n
programare. Dei Visual FoxPro este compatibil cu programarea procedural standard, noile
extensii ale limbajului ofer puterea i flexibilitatea programrii orientate spre obiect. Spre
deosebire de programarea procedural n care un program const dintr-o secven de instruciuni,
proiectarea i programarea orientate spre obiect reprezint o abordare nou n care efortul de
programare const n proiectarea obiectelor componente de sine stttoare ale unei aplicaii.
Obiectele n mediul Visual FoxPro sunt formularele i controalele care pot fi gestionate prin
intermediul proprietilor, evenimentelor i metodelor i care vor fi incluse n aplicaii. Extensiile
orientate spre obiect ale limbajului Visual FoxPro permit crearea i ntreinerea cu uurin a
bibliotecilor de cod reutilizabil. Programarea orientat spre obiect este o modalitate de a mpacheta
codul astfel nct s poat fi refolosit i ntreinut mai uor. Primul nivel de mpachetare se
numete clas. O aplicaie este construit din clase i obiecte. Clasele descriu proprietile i
comportamentul obiectelor care se mai numesc i instane ale clasei. Un obiect are anumite
proprieti, sau atribute. De exemplu, un automobil are o anumit denumire i o anumit culoare.
Aceste proprieti pot fi stabilite n faza de proiectare sau de execuie.
O tabel Visual FoxPro poate exista n una din urmtoarele dou situaii: ca tabel liber
(extern), adic sub form de fiier .dbf neasociat vreunei baze de date, sau ca tabel dintr-o baz de
date, adic sub form de fiier .dbf asociat unei baze de date. Tabelele asociate unei baze de date au
unele proprieti specifice, care nu exist n cadrul tabelelor externe, cum ar fi regulile la nivel de
cmp i de nregistrare, declanatoarele i relaiile persistente. La crearea bazei de date, se reunesc
tabelele ntr-o singur colecie (fiier cu extensia .dbc) i se creeaz dicionarul de date.
Produsul FoxPro dispune de un limbaj de programare propriu denumit FoxPro care conine
peste 200 comenzi care pot fi executate individual din fereastra de comenzi sau din programe,
pentru crearea, ntreinerea i interogarea bazelor de date, precum i o multitudine de funcii
matematice, de conversie, de prelucrri statistice, etc. , care pot fi apelate n cadrul instruciunilor
limbajului.
n modelarea unei pri a lumii reale se identific tipurile de entiti (mulimile de obiecte
similare avnd aceleai proprieti) i legturile (relaiile) ntre entiti. Fiecrui tip de entitate i
corespunde un tabel n care fiecare coloan corespunde unei proprieti ce definete tipul de entitate
i fiecare rnd reprezint o entitate aparinnd tipului respectiv de entitate. Capul de tabel conine
denumirea proprietilor ce definesc tipul de entitate. Corespunztor acestui tip de entitate, n
FoxPro se va crea o tabel care va conine:
- o nregistrare antet corespunztoare capului de tabel (structura tabelei);
- cte o nregistrare pentru fiecare rnd al tabelului (n FoxPro pentru WINDOWS lungimea
maxim a unei nregistrri poate fi de 65500 caractere).

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

Crearea unei tabele


Pentru crearea unei tabele se va utiliza comanda CREATE <nume tabel> sau din meniul
File se alege opiunea New i apoi Table. n ambele situaii sistemul FoxPro va afia un ecran
pentru definirea structurii tabelei (fereastra Table Designer pentru definirea tabelei ca n figura 43)
n care utilizatorul va introduce pentru fiecare cmp numele, tipul, dimensiunea (limea) eventual
numrul de zecimale pentru cmpurile numerice. n figura 44 este redat definirea tabelei Produse.

Figura 43. Fereastra Table Designer pentru definirea structurii unei tabele.

Figura 44. Definirea structurii tabelei Produse.


45

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.

Figura 45.1. Formular de preluare date n modul Change n tabela Produse.

Figura 45.2. Formular de preluare date n modul Browse n tabela Produse.


Problem propus
S se creeze tabelele bazei de date FurnizoriClieni i s se preia date n fiecare tabel
conform specificaiilor prezentate n lucrrile de laborator pentru baze de date Access.
Inserare, modificare i tergere date ntr-o tabel
Pentru introducerea datelor n tabel se poate utiliza una din comenzile:APPEND, EDIT,
BROWSE.
Fiecare nregistrare de date din tabel, pe lng datele propriu-zise mai conine nc un octet
numit de invalidare logic care permite marcarea nregistrrilor pentru tergere (conine valoarea *
pentru nregistrrile marcate pentru tergere). De asemenea fiecare nregistrare primete un numr
curent numit indicator de nregistrare ncepnd de la 1 n ordinea introducerii nregistrrilor.
Fiecare nou nregistrare este adugat la sfritul fiierului. Ordinea introducerii nregistrrilor n
tabel este numit ordine natural i este ordinea implicit n care vor fi parcurse nregistrrile
tabelei.
Pentru modificarea datelor introduse n tabel pot fi folosite comenzile EDIT, BROWSE.
tergerea de nregistrri dintr-o tabel se realizeaz n dou etape:
- tergerea logic = marcarea pentru tergere (completarea octetului de
invalidare logic pentru tergere)
- tergerea fizic = eliminarea nregistrrii i eliberarea spaiului ocupat.
46

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

Figura 46. Utilizare meniu Help.


48

Lucrare de laborator nr. 9


Tema: Baze de date FoxPro. Elementele limbajului FoxPro.
Produsul FoxPro dispune de un limbaj de programare denumit FoxPro care conine
aproximativ 200 comenzi care pot fi executate individual din fereastra de comenzi sau din
programe, pentru crearea, ntreinerea i interogarea bazelor de date.
Elementele limbajului :identificatori, constante, variabile scalare (cmpuri, variabile de memorie),
masive, operatori, funcii, expresii, instruciuni, ferestre, meniuri, proceduri, programe.
Identificatori - succesiune de caractere (doar primele 10 au semnificaie) alfabetice, cifre i liniua
de subliniere _ , care poate ncepe cu o liter sau _.
Identificatorii pot reprezenta:
- cuvinte cheie ale limbajului (ex. CREATE, FOR, IF, etc.);
- cuvinte definite de utilizator (ex. Produse, Codp, Denp, etc.).
Este indicat a se evita utilizarea de cuvinte cheie pentru cuvinte definite de utilizator (pentru a nu
crea confuzii i pentru nelegerea semnificaiei cuvintelor utilizate).
Cuvintele cheie ale limbajului pot fi trunchiate la minim primele 4 caractere ca de exemplu:
CREATE, CREA, CREAT au aceeai semnificaie. Pot fi utilizate litere majuscule, minuscule sau
orice combinaie de majuscule i minuscule.
Constante:
- Constanta caracter succesiune de caractere ncadrat ntre sau sau [ ]
Exemplu: Limbajul FoxPro la dispoziia dvs.
(caracterul s-a utilizat pentru a indica nceputul i sfritul constantei iar caracterele fac parte din
constant).
- Constante dat calendaristic o dat calendaristic ncadrat ntre acolade
Exemplu: {03/08/02}
- Constante logice reprezint valorile logice adevrat , fals dup cum urmeaz:
.T. sau .t. sau .Y. sau .y. pentru adevrat (True, true, Yes, yes)
.F. sau .f. sau .N. sau .n. pentru fals (False, false, No, no)
- Constante numerice - succesiuni de cifre zecimale precedate eventual de semnul + sau i
putnd conine marca zecimal .. (exemple: 125 , -12.5)
Poate fi utilizat i notaia tiinific (exemple: 5.878E+12 reprezint 5,878 nmulit cu 10 la
puterea 12 , 1.6E-12 reprezint 1.6 nmulit cu 10 la puterea 12).
- Variabile - sunt identificatori pentru variabile de memorie sau cmpuri ntr-o
tabel .DBF.
Pentru a preciza c variabila este o variabil de memorie sau un cmp ntr-o
tabel se poate folosi operatorul . sau -> i aliasul astfel:
M.Nume sau M->Nume specific variabila de memorie Nume
Persoane.Nume sau Persoane->Nume specific cmpul Nume din
tabela Persoane .
Dac nu se face precizarea ca mai sus i tabela Persoane este deschis n
zona de lucru curent atunci Nume refer cmpul Nume i nu variabila de memorie Nume.
O variabil de memorie poate fi creat prin operaia de atribuire astfel:
m.Nume = Ionescu sau folosind comanda STORE astfel
STORE Ionescu TO m.Nume.
Tipul unei variabile de memorie este dat de valoarea memorat n acea variabil.

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

DEFINE WINDOW f1 AT 4,4 SIZE 10,40


Cele dou instruciuni sunt echivalente i definesc fereastra f1 ncepnd din colul din stnga sus
precizat de punctul dat de rndul 4 coloana 4 i avnd 10 rnduri i 40 coloane.
Dac presupunem c fontul ferestrei principale FoxPro nu este stilul Roman de 24 puncte atunci
comenzile de mai jos definesc ferestre de dimensiuni diferite:
DEFINE WINDOW f1 FROM 4,4 TO 15,45 FONT Roman,24
DEFINE WINDOW f1 AT 4,4 SIZE 10,40 FONT Roman,24
Pentru prima comand coordonatele punctelor ce definesc fereastra se bazeaz pe fontul ferestrei
principale FoxPro, iar n a doua comand, dimensiunile ferestrei se bazeaz pe fontul precizat n
comand (Roman de 24 de puncte).
Pentru ferestrele definite pot fi realizate urmtoarele operaii:
- Activare ferestre cu comanda ACTIVATE WINDOW
(dup activarea unei ferestre, aceasta rmne pe ecran pn la dezactivarea ei i toate informaiile
de ieire pe ecran vor fi dirijate ctre aceast fereastr).
- Dezactivare ferestre cu comanda DEACTIVATE WINDOW
(o fereastr dezactivat este tears de pe ecran, ns rmne n continuare n memorie).
- Ascunde ferestre cu comanda HIDE WINDOW
(o fereastr ascuns este tears de pe ecran, rmnnd n continuare n memorie, ns informaiile
trimise spre ecran sunt afiate n continuare n acea fereastr).
- Afiare ferestre cu comanda SHOW WINDOW
(fereastra ascuns cu comanda HIDE va fi afiat pe ecran).
- tergere ferestre cu comanda RELEASE WINDOW sau CLEAR WINDOW
(dezactiveaz ferestrele precizate i le elimin din memorie).
- Salvare ferestre cu comanda SAVE WINDOW
(salveaz ferestrele specificate ntr-un fiier pe disc sau ntr-un cmp memo)
- Recuperare ferestre cu comanda RESTORE WINDOW
(ferestrele menionate sunt aduse n memorie de pe disc sau din cmpul memo).
Meniuri
Meniurile sunt o categorie important de obiecte pentru realizarea interfeei utilizator n
cadrul aplicaiilor FoxPro. Produsul FoxPro, alturi de meniurile sistem, ofer posibilitatea definirii
i folosirii meniurilor utilizator i anume: meniuri orizontale i meniuri verticale.
Meniuri orizontale (bara de meniuri) conine un numr de opiuni numite pad-uri aezate
de regul pe acelai rnd.
Crearea i utilizarea unui meniu presupune parcurgerea urmtoarelor operaii:
- definire meniu cu comanda DEFINE MENU <nume meniu>;
- definire opiuni cu comanda DEFINE PAD;
- precizare aciune de executat la selecia unei opiuni cu una din comenzile:
ON SELECTION PAD <pad> OF <nume meniu> DO <nume procedur>;
ON PAD <pad> OF <nume meniu> ACTIVATE POPUP <p>|MENU<m>;
- activare meniu cu comanda ACTIVATE MENU;
- ascundere meniu cu comanda HIDE MENU;
- afiare meniu cu comanda SHOW MENU;
- dezactivare meniu cu comanda DEACTIVATE MENU.
La dezactivarea unui meniu, controlul programului este dat instruciunii care urmeaz celeia
care a activat meniul respectiv.

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

ON SELECTION BAR OF <nume popup> DO <nume procedur>;


ON BAR <expN> OF <nume popup> ACTIVATE MENU <m>|POPUP <P>;
- activare meniu cu comanda ACTIVATE POPUP <nume popup>;
- ascundere meniu cu comanda HIDE POPUP;
- afiare meniu cu comanda SHOW POPUP;
- dezactivare meniu cu comanda DEACTIVATE POPUP.
La dezactivarea unui meniu, controlul programului este dat instruciunii care urmeaz celeia
care a activat meniul respectiv.
Exemplul 1
Se definete i utilizeaz un meniu vertical pentru adugare, tergere, actualizare, nregistrri n
tabela Produse cu opiunile: Adaugare, Stergere, Actualizare, Sfirsit:
CLEAR
CLOSE ALL
USE Produse
DEFINE POPUP Mv1 FROM 5,3 TITLE Tabela Produse
DEFINE BAR 1 OF Mv1 PROMPT \<Adaugare inregistrari
DEFINE BAR 2 OF Mv1 PROMPT \<Stergere inregistrari
DEFINE BAR 3 OF Mv1 PROMPT Actuali\<Zare inregistrari
DEFINE BAR 4 OF Mv1 PROMPT S\<Firsit program
ON SELECTION POPUP Mv1 DO Pp
ACTIVATE POPUP Mv1
PROCEDURE Pp
DO CASE
CASE BAR() = 1
DO PA
CASE BAR() = 2
DO PS
CASE BAR() = 3
DO PZ
CASE BAR() = 4
DO PF
ENDCASE
PROCEDURE PA
APPEND
RETURN
PROCEDURE PS
DELETE ALL FOR <conditie>
RETURN
PROCEDURE PZ
BROWSE NOAPPEND NODELETE
RETURN
PROCEDURE PF
PACK
USE
DEACTIVATE POPUP
RETURN
57

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

Lucrare de laborator nr. 10


Tema: Baze de date FoxPro. Clase de instruciuni ale limbajului FoxPro.
Instruciuni de programare structurat
Pentru rezolvarea unor probleme de complexitate mare sunt necesare instruciuni care s
schimbe ordinea de execuie secvenial a comenzilor n cadrul unui program.
Limbajul FoxPro dispune de instruciuni pentru realizarea de ramificaii (execuia
condiionat a unor secvene de instruciuni) i bucle (iteraii, cicluri execuia repetat a unei
secvene de instruciuni) care permit realizarea de programe structurate, fiind din acest motiv
numite i instruciuni de programare structurat.
Ramificaiile sunt realizate cu ajutorul instruciunilor IFELSEENDIF i
DO CASEENDCASE.
Instruciunea IF realizeaz selecia execuiei unui grup de instruciuni din dou posibile
astfel:
IF <condiie>
<instruciuni 1>
ELSE
<instruciuni 2>
ENDIF
Execuia acestei instruciuni se realizeaz astfel:
Se evalueaz expresia logic <condiie >.
Dac valoarea rezultat n urma evalurii este .T. (adevrat), atunci se execut secvena de
instruciuni <instruciuni 1>, altfel se execut secvena de instruciuni <instruciuni 2> i n ambele
cazuri programul continu cu execuia instruciunii care urmeaz dup clauza ENDIF.
Poate fi utilizat i forma simplificat a instruciunii n care lipsete clauza ELSE :
IF <condiie>
<instruciuni>
ENDIF
Secvenele <instruciuni 1>, <instruciuni 2> pot conine la rndul lor instruciuni IF,
obinndu-se astfel imbricarea instruciunilor IF pe un numr oarecare de nivele.
Exemplu
IF FILE(Produse.dbf)
USE Produse
LIST
ELSE
? Fisier Produse.dbf lipsa in ,sys(2003)
ENDIF
(dac fiierul Produse.dbf exist n directorul curent, deschide fiierul i afieaz nregistrrile sale,
altfel afieaz mesajul Fisier Produse.dbf lipsa in <cale>).
Instruciunea DO CASE realizeaz execuia unui grup de instruciuni din mai multe
grupuri posibile astfel:
DO CASE
CASE <condiie 1>
<instruciuni 1>
CASE <condiie 2>
<instruciuni 2>
59


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

FOR <variabila> = <val.iniial> TO <val.final> [STEP <pas>]


<instruciuni 1>
[LOOP
<instruciuni 2>]
[EXIT
[<instruciuni 3>]]
ENDFOR
Se execut grupul de instruciuni <instruciuni 1> de un numr de ori determinat plecnd de
la valoarea iniial a variabilei <variabila> pn la valoarea sa final cu pasul <pas> (<val.iniial>,
<val.final>, <pas> sunt expresii numerice ntregi), dup care programul continu cu instruciunea
care urmeaz dup clauza ENDFOR.
Grupurile de instruciuni <instruciuni 1>,<instruciuni 2>,<instruciuni 3> pot conine ele
nsele instruciuni FOR ENDFOR, obinndu-se astfel instruciuni FOR imbricate pe un numr
oarecare de nivele.
Clauzele LOOP, EXIT au acelai efect ca n cazul instruciunii DO WHILE.
Exemplu Calculul sumei primelor n numere naturale
m.S=0
INPUT Introduceti numarul <n>: TO m.n
FOR i = 1 TO m.n STEP 1
m.S = m.S + i
ENDFOR
? Suma primelor ,m.n, numere naturale este S = ,m.S
Instruciunea SCAN ENDSCAN realizeaz parcurgerea secvenial (i eventual
selectiv precizat printr-o condiie) a nregistrrilor tabelei deschise n zona de lucru curent i
execuia unui grup de instruciuni pentru fiecare nregistrare parcurs, ncepnd cu nregistrarea
curent pn la sfritul fiierului .DBF, sau pn cnd bucla este ntrerupt prin clauza EXIT.
Sintaxa instruciunii este:
SCAN [<domeniu>][FOR <condiie 1>][WHILE <condiie 2>]
<instruciuni 1>
[LOOP
<instruciuni 2>]
[EXIT
[<instruciuni 3>]]
ENDSCAN
Prin <domeniu> poate fi precizat numrul de nregistrri de parcurs cu ajutorul clauzelor
ALL sau NEXT <nr.nregistrri>.
Clauzele FOR i WHILE precizeaz condiia pe care trebuie s o ndeplineasc
nregistrrile ce vor fi luate n considerare respectiv condiia ce precizeaz pn cnd va fi parcurs
tabela.
Grupurile de instruciuni <instruciuni 1>,<instruciuni 2>,<instruciuni 3> pot conine ele
nsele instruciuni SCAN ENDSCAN, obinndu-se astfel instruciuni SCAN imbricate pe un
numr oarecare de nivele.
Clauzele LOOP, EXIT au acelai efect ca n cazul instruciunii DO WHILE.
Exemplu Afisarea cmpurilor Codp, Denp separate printr-un spaiu pentru toate nregistrrile
tabelei Produse
USE Produse
SCAN
61

? 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

n tabelele indexate (i numai n acestea) se poate realiza poziionarea direct pe o


nregistrare pentru o valoare a expresiei de indexare precizat, folosind fie instruciunile SEEK
<valoare cheie index>, IF FOUND(), fie funcia SEEK() n instruciunea IF astfel IF
SEEK(<valoare cheie index.>)
Comenzi SET permit stabilirea unor condiii de lucru valabile n sesiunea FoxPro de lucru
curent.
SET BELL activeaz sau dezactiveaz sunetele
SET BELL TO stabilete frecvena i durata unui sunet
SET CONFIRM determin dac tasta <Enter> trebuie acionat la ieirea dintr-un cmp
SET DATE specific formatul datelor calendaristice
SET DECIMALS stabilete numrul zecimalelor de afiat pentru datele numerice
SET DELETED stabilete accesul la nregistrrile marcate pentru tergere
SET DEFAULT specific directorul i unitatea de disc implicit (poziionarea intr-un
anumit director)
SET DEVICE stabilete perifericul de afiare
SET EXACT specific dac este necesar o potrivire exact n operaiile de comparare
pentru iruri de caractere
SET FILTER specific condiiile pe care trebuie s le ndeplineasc nregistrrile unei
tabele pentru a fi accesibile
SET ORDER stabilete ordinea de parcurgere a nregistrrilor unei tabele
SET PRINTER activeaz sau dezactiveaz ieirea la imprimant
SET PROCEDURE deschide un fiier de proceduri specificat
SET RELATION TO stabilete o relaie ntre dou sau mai multe tabele
SET RELATION OFF - terge o relaie ntre dou tabele
SET SKIP TO creaz o relaie 1-n (on to many) ntre o nregistrare a unei tabele printe i
mai multe nregistrri a unei tabele copil
SET SAFETY activeaz sau dezactiveaz facilitatea de protecie a fiierelor
SET TALK controleaz afiarea rezultatelor unor comenzi.
Instrumente de lucru pentru creterea productivitii (ex. de utilizare n FoxPro 2.6 sub
Windows).
- Generatorul de meniuri se lanseaz cu comanda Create menu <nume meniu>, sau se selecteaz
File -> New -> Menu -> New, n caseta Prompt se tasteaz numele meniului, din meniul Menu
se selecteat General Optionns , n caseta Location se precizeaz locul unde va apare meniul creat
n bara de meniuri Fox (ex. After, Help pentru ca meniul nou creat s apar dup meniul Help) apoi
se selecteaz OK. Din lista Result se selecteaz Submenu apoi Create iar n caseta Prompt se
tasteaz opiunile de meniu vertical corespunztoare meniului orizontal nou creat i pentru fiecare
opiune se alege din coloana Result cuvntul Command iar n caseta Options se tasteaz DO <nume
procedura> coresp.(dac n caseta Prompt n loc de opiune se tasteaz \- atunci se va trasa un rnd
de linii ntre opiuni). Din meniul Program se selecteaz Generate, se apas butonul Yes i n caseta
Save Menu As se tasteaz numele fiierului n care se va salva meniul i extensia .mnx, apoi se
apas butonul Save iar din caseta Generate Menu se alege Generate. Pentru execuia meniului se d
comanda DO <nume fiier salvat>.mpr, iar pt.modificare MODI COMM <nume fiier salvat>.mpr
Pentru revenire la meniul Fox se d comanda SET SYSMENU TO DEFAULT.
- Creare, salvare,tiprire rapoarte sumare se selecteaz Database->Report->Quick Report

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

Lucrare de laborator nr. 11


Tema: Programarea n Visual FoxPro
Spre deosebire de programarea procedural n care un program const dintr-o secven de
instruciuni, proiectarea i programarea orientate spre obiect reprezint o abordare nou n care
efortul de programare const n proiectarea obiectelor componente de sine stttoare ale unei
aplicaii.
Obiecte n Visual FoxPro.
Obiectele n mediul Visual FoxPro sunt formularele i controalele care pot fi gestionate prin
intermediul proprietilor, evenimentelor i metodelor i care vor fi incluse n aplicaii. Extensiile
orientate spre obiect ale limbajului Visual FoxPro permit crearea i ntreinerea cu uurin a
bibliotecilor de cod reutilizabil. Programarea orientat spre obiect este o modalitate de a mpacheta
codul astfel nct s poat fi refolosit i ntreinut mai uor. Primul nivel de mpachetare se
numete clas. O aplicaie este construit din clase i obiecte. Clasele descriu proprietile i
comportamentul obiectelor care se mai numesc i instane ale clasei. Un obiect are anumite
proprieti, sau atribute. De exemplu, un automobil are o anumit denumire i o anumit culoare.
Aceste proprieti pot fi stabilite n faza de proiectare sau de execuie.
Metode i evenimente asociate obiectelor
Fiecare obiect recunoate i poate reaciona la anumite aciuni numite evenimente iniiate
fie de utilizator, fie de sistem. De cele mai multe ori, evenimentele sunt generate de interaciunea
cu utilizatorul. Aciunile utilizatorilor care pot declana evenimente sunt clicurile de mouse,
micrile mouse-ului i apsrile de taste. Evenimente declanate de sistem sunt iniializarea unui
obiect i ntlnirea unei linii de cod care genereaz o eroare. Evenimentele pot avea metode
asociate. Metodele sunt proceduri asociate unui obiect, difer de procedurile Visual FoxPro
obinuite, sunt legate indisolubil de obiect si sunt apelate altfel dect celelalte proceduri Visual
FoxPro. Astfel, dac scriem cod pentru metoda asociat evenimentului Click, codul respectiv este
executat atunci cnd survine evenimentul Click. Metodele pot exista i independent de evenimente,
caz n care, trebuie apelate explicit n cadrul codului. Setul de evenimente este determinat (nu pot fi
create noi evenimente), n schimb, setul de metode este nelimitat
Pentru o descrierea fiecrei proprieti, a fiecrui eveniment sau control, pot fi consultate
fiierele Help ale programului Visual FoxPro.
Clase n Visual FoxPro
Toate proprietile, metodele i evenimentele asociate unui obiect sunt specificate n
definiia clasei. Clasele au o serie de caracteristici care permit crearea de cod reutilizabil, uor de
ntreinut i anume: ncapsularea, subclasele, motenirea. Spre exemplu, proprietile care
determin elementele unei casete cu list i codul care se execut atunci cnd se selecteaz un
element din list pot fi ncapsulate ntr-un singur control pe care-l adugm la un formular.
O subclas poate avea toate funcionalitile unei clase existente, precum i controale sau
funcionaliti suplimentare. Crearea subclaselor este una dintre cile de reducere a dimensiunilor
codului Astfel pentru realizarea unei aplicaii se ncepe cu definirea unei clase ct mai apropiate de
scopul urmrit i apoi se realizeaz personalizarea acesteia. Prin motenire, o modificare efectuat
asupra unei clase se reflect n toate subclasele derivate din aceasta.

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

Momentul declanrii evenimentului


La crearea unui obiect
La descrcarea unui obiect din memorie
Cnd utilizatorul execut clic pe obiect cu butonul stnga al
mouse-ului
Cnd utilizatorul execut dublu-clic pe obiect cu butonul
stnga al mouse-ului
Cnd utilizatorul execut clic pe obiect cu butonul dreapta al mouse-ului
Cnd obiectul devine inta intrrilor (primete focusul), fie datorit
aciunii utilizatorului (de exemplu, la apsarea tastei Tab sau la executarea
unui clic), fie ca urmare a metodei SetFocus din program
Cnd obiectul nu mai este inta intrrilor (pierde focusul), fie datorit aciunii
utilizatorului (de exemplu, la apsarea tastei Tab sau la executarea unui clic),
fie ca urmare a metodei SetFocus din program
La apsarea i eliberarea unei taste de ctre utilizator
La apsarea butonului mouse-ului de ctre utilizator atunci cnd
mouse-ului se afl deasupra obiectului
Cnd utilizatorul deplaseaz indicatorul mouse-ului deasupra obiectului

68

MouseUp

Cnd utilizatorul elibereaz butonul mouse-ului n timp ce indicatorul


mouse-ului se afl deasupra obiectului

Crearea unei baze de date


Crearea unei baze de date se poate realiza cu ajutorul interfeei sau al limbajului. La crearea
bazei de date, se reunesc tabelele ntr-o singur colecie (fiier cu extensia .dbc) i se creeaz
dicionarul de date n care se memoreaz o serie de informaii printre care: cheile primare i
candidate, relaiile persistente dintre tabelele bazei de date, numele lungi pentru tabele i cmpuri,
titlurile de cmpuri afiate n fereastra Browse i n anteturile coloanelor
unei grile, valorile
implicite ale cmpurilor, clasele implicite ale controalelor folosite n formulare, mtile de intrare
i formatele de afiare a cmpurilor, regulile la nivel de cmp i de nregistrare, declanatoarele,
procedurile stocate, conexiunile la surse de date externe, vederile locale i externe, comentariile
pentru fiecare cmp, tabel i baz de date
Unele faciliti ale dicionarului de date, cum ar fi numele lungi pentru cmpuri, cheile
primare i candidate, valorile implicite, regulile la nivel de cmp i de nregistrare i
declanatoarele, sunt stocate n fiierul .dbc, dar sunt create n cadrul procesului de construire a unei
tabele sau vederi.
Crearea unei noi baze de date se realizeaz astfel:
1.
cu Gestionarul de Proiecte, se selecteaz fia cu eticheta Data, iar din lista afiat se selecteaz
Databases i apoi New.
sau
2. cu comanda CREATE DATABASE
La crearea unei baze de date se creaz un container de baz de date vid, cruia i se vor
aduga ulterior obiectetele ce se vor crea pentru aceasta.
Adugarea tabelelor la o baz de date
O tabel Visual FoxPro poate exista n una din urmtoarele dou situaii: ca tabel liber
(extern), adic sub form de fiier .dbf neasociat vreunei baze de date, sau ca tabel dintr-o baz de
date, adic sub form de fiier .dbf asociat unei baze de date. Tabelele asociate unei baze de date au
unele proprieti specifice, care nu exist n cadrul tabelelor externe, cum ar fi regulile la nivel de
cmp i de nregistrare, declanatoarele i relaiile persistente. Tabelele pot fi asociate cu o baz de
date prin crearea lor n cadrul unei baze de date deschise n fundal sau prin adugarea tabelelor
existente la o baz de date.
Pentru adugarea unei tabele libere la o baz de date se poate proceda astfel:
n cadrul Gestionarului de Proiecte, se selecteaz Tables din cadrul fielor All sau Data,
apoi se selecteaz Add.
s au
cu comanda ADD TABLE.
Exemplu. Secvena de instruciuni de mai jos deschide baza de date BazaTest i i adaug tabela
liber TabTest:
OPEN DATABASE BazaTest
ADD TABLE TabTest
O tabel existent poate fi asociat la o singur baz de date.
O tabel (un fiier .DBF) poate fi folosit i fr a fi ncorporat ntr-o baz de date.
Pentru a face o referin la o tabel dintr-o alt baz de date dect cea curent se folosete
simbolul !, ca de exemplu:
69

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
-

n cadrul Proiectantului de Baze de Date (Database Designer), se selecteaz tabela i se alege


comanda Remove din meniul Database.

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

2. se utilizeaz clauza DROP FOREIGN KEY cu comanda ALTER TABLE.


Crearea integritii refereniale
Crearea integritii refereniale presupune crearea unui set de reguli care s pstreze
relaiile definite ntre tabele cnd se insereaz sau se terg nregistrri.
Meninerea integritii refereniale mpiedic efectuarea urmtoarelor operaii:
- Adugarea de nregistrri la o tabel legat atunci cnd nu exist nici o nregistrare asociat n
tabela primar.

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

se deschide baza de date i se folosete comanda CREATE CONNECTION pentru a deschide


fereastra Proiectantului de Conexiuni.

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

Buton de comand Etichet


Control container OLE Control timer
Caset de editare Linie
Form geometric
Una dintre cele mai puternice faciliti din Visual FoxPro este posibilitatea crerii de clase
care pot fi folosite n diferite puncte ale aplicaiei. Dup ce au fost create, clasele pot fi adugate la
formulare astfel: din fereastra Gestionarului de Proiecte (Project Manager),se trage clasa n cadrul
containerului.
Exist dou tipuri de controale n formulare i anume: controale care sunt asociate datelor i
controale care nu sunt asociate datelor. Dac utilizatorul interacioneaz cu controalele asociate datelor,
valorile introduse de el sunt stocate n sursa de date, care poate fi un cmp de tabel, de cursor sau o
variabil. Un control poate fi legat de date atribuind valoarea corespunztoare proprietii
ControlSource sau, n cazul grilelor, proprietii RecordSource.
Dac utilizatorul nu configureaz proprietatea ControlSource a unui control, valoarea pe care o
introduce sau pe care o alege din cadrul controlului este pstrat ca valoare a proprietii nefiind salvat
pe hard-disc i nici pstrat n memorie la expirarea duratei de via a controlului.
Crearea meniurilor i a barelor de instrumente
Meniurile pot fi create cu ajutorul Proiectantului de Meniuri (Menu Designer) din Visual
FoxPro.
Pentru generarea meniului, din cadrul meniului Menu, se selecteaz Generate.
Sistemul de meniuri va fi salvat ntr-un fiier cu extensia .mnx, iar programul meniului
generat va fi salvat ntr-un fiier cu extensia .mpr.
De asemenea , pot fi create meniuri contextuale (meniuri care apar la apsarea
butonului drept al mouse-ului pe un control sau obiect)
Pentru crearea unui meniu contextual se procedeaz astfel:
1. n fereastra Gestionarului de Proiecte (Project Manager), se selecteaz fia Other, din care se
selecteaz Menus, apoi New.
2. se selecteaz Shortcut.
Pe ecran va aprea Proiectantul de Meniuri Contextuale (Shortcut Designer) din care procesul
de adugare a articolelor de meniu este identic cu cel de creare a meniurilor.
Pentru fiecare articol de meniu se poate crea un submeniu care s cuprind articole de
meniu suplimentare.
La crearea unui meniu, acesta poate fi salvat ntr-un fiier HTML (Hypertext Markup
Language) folosind opiunea Save As HTML din cadrul meniului File.
De asemenea, un formular poate fi salvat ca fiier HTML astfel:
1. Se deschide meniul FILE
2.. Se selecteaz Save As HTML din cadrul meniului File. (Dac meniul a fost modificat, sistemul
va cere confirmarea salvrii modificrilor).
3. Se introduce numele fiierului HTML i apoi se alege Save.
Pentru a crea o bar de instrumente cu butoane care nu apar n barele de instrumente
existente, se poate defini o clas Toolbar personalizat.
Visual FoxPro ofer o clas de baz Toolbar din care se poate deriva clasa dorit la care pot
fi adugate obiecte, apoi se pot defini proprietile, evenimentele i metodele i n final, bara de
instrumente poate fi adugat unui set de formulare.
O bar de instrumente poate fi adugat la un set de formulare, astfel nct bara de instrumente
s se deschid odat cu formularele respective.

73

Crearea unei aplicaii


Dup crearea tuturor componentelor funcionale ale unei aplicaii, acestea pot fi compilate
ntr-o singur aplicaie care reunete componentele executabile ale proiectului - formulare, rapoarte,
meniuri, programe .a.m.d. - ntr-un fiier unic, ce poate fi distribuit utilizatorilor mpreun cu datele.
Pentru a crea un proiect complet cu ajutorul componentei Application Framework, se poate folosi
Vrjitorul Aplicaiei (Application Wizard). Dup crearea proiectului, se va deschide noul Generator
de Aplicaii (Aplication Builder), pentru a aduga o baz de date, tabele, rapoarte i formulare. Pentru
a putea distribui aplicaia, se va crea fie un fiier aplicaie, cu extensia .app, fie un fiier executabil cu
extensia .exe.
Proiectarea unei aplicaii OLE.
Obiecte cum sunt documentele Word i foile de calcul Excel, pot fi legate sau nglobate prin
intermediul controlului OLE Container n cadrul formularelor, i pot fi stocate n cmpurile de tip
General ale unei tabele, urmnd s fie afiate n formulare cu ajutorul controlului OLE Bound.
Diferena dintre legare i nglobare const n locul de stocare a datelor astfel: nglobarea pstreaz
datele n tabel sau n formular, iar legarea refer obiectele din locul unde sunt stocate.
Soluii client-server
Aplicaiile client/server combin funcionalitatea mediului Visual FoxPro de pe calculatorul
local cu avantajele de stocare i de securitate oferite de un server extern. Pentru aceasta, se poate
crea mai nti un prototip local al aplicaiei, dup care, aplicaia poate fi transformat pentru un
mediu client/server prin intermediul Vrjitorului de Transformare (Upsizing Wizard). Se poate
utiliza tehnologia SQL de transfer pentru a mbunti aplicaia transformat. n timp ce vederile
externe ofer acces la datele de pe server, tehnologia SQL de transfer permite transmiterea de
comenzi direct ctre server folosind funcia SQLEXEC().
Cele mai performante soluii de creare a unei aplicaii Visual FoxPro client/server se obin
combinnd vederile i tehnologia SQL de transfer.
Problem propus
Exportai tabelele bazei de date FurnizoriClienti din ACCESS n Visual FoxPro. Creai baza
de date FurnizoriClienti n Visual FoxPro i adugai tabelele exportate. Creai n Visual FoxPro
vederile corespunztoare interogrilor create n ACCESS.

74

Lucrare de laborator nr. 12


Tema: Limbajul SQL. Crearea bazei de date.
Comenzi pentru crearea/actualizarea schemei bazei de date
Adugarea relaiilor ntr-o baz de date comanda CREATE TABLE are sintaxa:
CREATE TABLE <nume relaie>[(<nume atribut> <tip dat>,)]
Exemplu -crearea tabelei Persoane n SQL Oracle se realizeaz cu comanda:
CREATE TABLE Persoane (Nrcrt NUMBER UNIQUE NOT NULL,Nume CHAR(15),Prenume
CHAR(15),Datan DATE,Sexul CHAR,Adresa VARCHAR2(50));
O nou relaie poate fi creat i ca rezultat al unei operaii de interogare astfel:
CREATE TABLE <nume relaie> (<nume atribut> <tip dat>,) AS <subinterogare>
Adugarea/modificarea de atribute pentru o relaie existent se realizeaz cu comanda:
ALTER TABLE <nume relaie> ADD|MODIFY (< nume atribut> <tip dat>,)
tergerea unei relaii se realizeaz cu comanda:
DROP TABLE <nume relaie>
Comenzi pentru optimizarea interogrilor
Una din principalele ci de optimizare a timpilor de interogare a unei baze de date este
indexarea. Un index poate fi privit ca o relaie cu dou atribute i anume:
- primul atribut conine valorile atributelor relaiei dup care se creaz indexul;
- al doilea atribut conine un pointer (adresa) la locaia tuplelor corespunztoare.
Crearea unui index se realizeaz cu comanda:
CREATE [UNIQUE] INDEX <nume index>
ON <nume relaie>(<nume atribut>[ASC|DESC],)
Dac pentru atributele utilizate n clauza WHERE a unor instruciuni SQL au fost creai indeci,
atunci acetia vor fi utilizai n vederea optimizrii timpului de prelucrare. Decizia de utilizare sau
nu a unui index este luat de limbajul SQL i nu de utilizator. Pentru aceasta fiecare model de
limbaj SQL dispune de o component numit optimizator, care examineaz interogarea i decide
care este modul optim de obinere a rezultatului.
O alt tehnic de optimizare a interogrilor este tehnica clustering disponibil n
ORACLE i care const n gruparea tuplelor din mai multe relaii i stocarea lor n aceeai zon pe
disc.
Controlul datelor (comenzi DCL)
Vederi
O vedere este o relaie virtual, definit plecnd de la alte relaii din baza de date i care nu
conine date i deci nu ocup spaiu fizic pe disc. Vederile se definesc n dou scopuri i anume:
- pentru a simplifica accesul utilizatorilor la date;
- pentru a asigura protecia i securitatea datelor fiecrui utilizator fiindu-i permis acces la o
poriune a bazei de date i putnd efectua doar anumite operaii (conform drepturilor de acces
specificate cu comenzile GRANT/REVOKE).
Asupra unei vederi se pot efectua aceleai operaii ca i asupra unei relaii cu deosebirea c vederile
nu conin date i c orice modificri efectuate asupra datelor sunt reflectate i n vederi. Astfel,
asupra unei vederi se pot realiza operaiile:
- creare vedere (CREATE VIEW);

75

- creare sinonim pentru vedere (CREATE SYNONIM);


- tergere vedere (DROP VIEW);
- interogare vedere (SELECT);
- actualizare date din vedere (UPDATE);
- tergere date din vedere (DELETE);
- adugare date (INSERT).
Crearea unei vederi se realizeaz cu comanda CREATE VIEW care are sintaxa:
CREATE VIEW <nume vedere> [<lista atribute>]
AS <fraza SELECT> [WITH CHECK OPTION]
Exemplu:
CREATE VIEW StocuriD1(Codp,Denp,Ump,Cant,Pret,Valoare)
AS SELECT Stocuri.Codp, Denp,Ump,Cant,Pret,Cant*Pret FROM Produse,Stocuri
WHERE Produse.codp=Stocuri.Codp AND CodDep = D1
Interogarea vederii se va realiza cu comanda
SELECT * FROM StocuriD1
Utilizarea opiunii WITH CHECK OPTION asigur faptul c nici o tupl nu va fi adaugat
sau actualizat cu instruciunile INSERT, UPDATE, dac nu sunt respectate condiiile specificate n
clauza WHERE a instruciunii SELECT din definiia vederii.
Pentru acordarea sau retragerea drepturilor de acces la baza de date prin intermediul
vizualizrilor se vor folosi comenzi de forma:
GRANT [ALL|SELECT|INSERT|UPDATE|DELETE] ON <nume vedere>
TO <nume utilizator>
sau
REVOKE [ALL|SELECT|INSERT|UPDATE|DELETE] ON <nume vedere>
FROM <nume utilizator>
Asigurarea securitii datelor presupune definirea drepturilor de acces ale utilizatorilor i
protecia sistemului la accesul neautorizat. n acest sens asigurarea securitii se realizeaz pe dou
niveluri i anume:
- nivelul 1 acordarea dreptului de acces la sistem;
- nivelul 2 acordarea dreptului de acces la nivel de relaii.
Pentru conectarea utilizatorilor la sistem n majoritatea versiunilor de SQL se utilizeaz un
nume de utilizator i o parol.
Referitor la drepturile de acces la nivel de relaie n sistemele multi-user trebuie precizat
utilizatorul care a creat relaia (proprietarul relaiei). Fiecare utilizator are drepturi doar asupra
propriilor relaii, iar drepturi asupra unor relaii create de ali utilizatori pot fi acordate prin
comanda GRANT i pot fi retrase prin comanda REVOKE.
Datele privind definirea bazei de date, utilizatorii i drepturile de acces sunt stocate n
dicionarul de date i sunt gestionate de ctre sistemul de gestiune a bazei de date (SGBDR).
n cele ce urmeaz se va prezenta modul de realizare a celor dou nivele de securitate n
cadrul sistemului ORACLE.
Nivelul 1 de securitate a datelor se realizeaz cu comanda:
GRANT <autorizare,> TO <nume utilizator> [IDENTIFIED BY <parola>]
unde <autorizare> poate fi:
- DBA confer utilizatorului dreptul de efectuare a oricrei operaii asupra oricrei
relaii din baza de date;

76

CONNECT confer utilizatorului dreptul de a a face interogri (SELECT) i


actualizri (INSERT, UPDATE, DELETE) asupra relaiilor create de ali utilizatori, ns
nu permite utilizatorului s creeze relaii (CREATE) sau s tearg relaii create de ali
utilizatori (DROP);
- RESOURCE confer utilizatorului drepturile ce rezult din autorizarea CONNECT i
n plus dreptul de a crea relaii (CREATE) i de a terge relaii ce i aparin (DROP).
Unui utilizator i pot fi acordate mai multe tipuri de autorizri n cadrul unei singure comenzi
GRANT.
Parola stabilit pentru un utilizator poate fi modificat printr-o comand GRANT ulterioar
spre exemplu astfel:
GRANT RESOURCE TO <nume utilizator> IDENTIFIED BY <noua parol>
Unui utilizator cruia i s-a acordat un tip de autorizare i pot fi acordate i alte tipuri de autorizare
prin comenzi GRANT ulterioare.
Retragerea autorizrilor acordate unui utilizator se realizeaz cu comanda:
REVOKE <autorizare,> FROM <nume utilizator>
-

Nivelul 2 de securitate a datelor


Pentru acordarea respectiv retragerea drepturilor de acces la relaii se utilizeaz comenzile
GRANT respectiv REVOKE cu urmtoarea sintax:
GRANT ALL|<drept de acces>, ON <nume relaie>
TO <nume utilizator>|PUBLIC [WITH GRANT OPTION]
respectiv
REVOKE ALL|<drept de acces>, ON <nume relaie> FROM <nume utilizator>|PUBLIC
Privilegiile (drepturile de acces) pot fi acordate sau retrase de urmtoarele categorii de utilizatori:
- utilizatorii cu nivel de autorizare DBA;
- proprietarii relaiilor;
- utilizatorii autorizai cu opiunea WITH GRANT OPTION.
Prin specificarea PUBLIC acordarea respectiv retragerea drepturilor de acces se aplic
tuturor utilizatorilor.
Prin specificarea WITH GRANT OPTION, utilizatorul respectiv poate la rndul su s
acorde aceleai drepturi sau mai puine altor utilizatori.
n ORACLE pot fi acordate urmtoarele drepturi de access asupra relaiilor:
SELECT, INSERT, DELETE, ALTER, UPDATE, CREATE,DROP pentru tabele i indeci.
Drepturile de acces pot fi acordate asupra ntregii relaii, sau doar asupra anumitor atribute
ale relaiei.
Exemple:
Acordarea tuturor drepturilor de acces utilizatorilor Ionescu, Popescu, asupra relaiei
Persoane care aparine utilizatorului Vasilescu se realizeaz prin comanda:
GRANT ALL ON Vasilescu.Persoane TO Ionescu,Popescu
Acordarea tuturor utilizatorilor, drepturile SLECT,INSERT,UPDATE asupra relaiei
Produse aparinnd utilizatorului Ionescu se realizeaz cu comanda:
GRANT SELECT,INSERT,UPDATE ON Ionescu.Produse TO PUBLIC
Acordarea privilegiilor SELECT,UPDATE numai asupra atributelor CodP, Denp din relaia
Produse aparinnd utilizatorului Ionescu, utilizatorului Popescu cu condiia ca acesta la rndul su
s poat acorda oricrui alt utilizator aceleai drepturi sau mai puine, se realizeaz cu comanda:
GRANT SELECT,UPDATE ON Ionescu.Produse(CodProdus,Denumire)

77

TO Popescu WITH GRANT OPTION


Retragerea drepturilor de acces INSERT,DELETE asupra relaiei Persoane aparinnd
utilizatorului Vasilescu, utilizatorului Ionescu se realizeaz cu comanda:
REVOKE INSERT,DELETE ON Vasilescu.Persoane FROM Ionescu
Instruciuni pentru inserarea i actualizarea datelor n tabele
Inserarea datelor comanda INSERT are urmtoarea sintax:
INSERT INTO <nume relatie>|<nume vedere> [(<nume atribut>)]
[VALUES] <lista valori>|<subinterogare>
Exemple:
Fie tabela Persoane(Nrcrt,Nume,Prenume, Datan, Sexul, Adresa)
INSERT INTO Persoane VALUES (1,Ionescu,Ion,05/23/82,M,Suceava)
(adaug o nregistrare n tabela Persoane completnd toate atributele)
INSERT INTO Persoane(Nrcrt,Nume,Prenume) VALUES (2,Ionescu,Ana)
(adaug o nregistrare n Persoane completnd numai atributele Nrcrt,Nume, Prenume)
Pentru a insera n tabela PersF(Nrcrt,Nume,Prenume) toate nregistrrile din tabela Persoane
pentru care Sexul=F se scrie comanda:
INSERT INTO PersF(Nrcrt,Nume,Prenume) SELECT Nrcrt,Nume,Prenume
FROM Persoane WHERE Sexul = F
Actualizarea datelor comanda UPDATE are sintaxa:
UPDATE <nume relaie>|<nume vedere>
SET <nume atribut> = <expresie>,[WHERE <condiie>]
Condiia din clauza WHERE definete tuplele care vor face obiectul actualizrii. Clauza WHERE
poate conine i o subinterogare.
Exemple:
UPDATE Persoane SET Nume = Popescu, Prenume = Ana Maria
WHERE Nume = Ionescu AND Prenume = Ana
(actualizeaz numele i prenumele persoanei Ionescu Ana cu valorile Popescu respectiv Ana
Maria).
UPDATE Vanzari SET Pret = Pret*1.2 WHERE CodP IN
(SELECT CodP FROM Facturi WHERE Numar = 120 AND Vanzari.Codc=Facturi.Codc )
(realizeaz majorarea preului cu 20% pentru produsele vndute cu factura 120).
Dac n comanda UPDATE clauza WHERE este omis, actualizarea se va efectua asupra tuturor
tuplelor relaiei.
tergerea datelor comanda DELETE are sintaxa:
DELETE FROM <nume relaie>|<nume vedere> [WHERE <condiie>]
unde <condiie> poate fi o condiie simpl, o expresie sau o subinterogare.
Exemple:
DELETE FROM Stocuri WHERE Cant = 0
(terge toate nregistrrile din tabela Stocuri pentru care cmpul Cant are valoarea 0).
DELETE Oferte
(terge toate nregistrrile din tabela Oferte).
Comenzi pentru gestiunea tranzaciilor
Tranzacia este o succesiune de instruciuni SQL grupate ntr-un bloc de instruciuni
utilizate pentru actualizarea i/sau interogarea datelor din baza de date. O tranzacie se consider
78

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

Figura 47. Lansare SQL Plus ORACLE pentru utilizatorul system

Figura 48. Creare utilizator U1 i acordare privilegii CONNECT, RESOURCE

80

ORCL

Figura 49. Lansare SQL Plus ORACLE pentru utilizatorul U1

Figura 50. Creare tabel Produse i inserare dou nregistrri


81

Lucrare de laborator nr. 13


Tema: Limbajul SQL. Interogarea bazelor de date.
Limbajul SQL (Structured Query Language) a fost realizat n cadrul firmei IBM ca
limbaj de interogare al SGBD System R i ulterior a devenit unul din cele mai rspndite limbaje
pentru SGBD-urile relaionale. Limbajul SQL, ca limbaj de interogare a bazelor de date relaionale,
este construit pe baza a dou formalisme abstracte enunate n cele ce urmeaz.
1. Algebra relaional prin care interogrile sunt exprimate prin aplicarea unor operatori unari
sau binari care constituie primitive ce acioneaz asupra relaiilor, rezultatul interogrilor fiind tot
relaii, ceea ce permite asocierea i imbricarea acestor operatori pentru a forma interogri
complexe. Operatorii algebrei relaionale se mpart n dou grupe i anume:
- operaii pe mulimi (Reuniunea, Intersecia, Diferena, Produsul cartezian);
- operatori relaionali speciali (Selecia, Proiecia, Cuplarea (JOIN), Diviziunea).
2. Calculul relaional prin care interogrile descriu mulimea tuplelor rezultat prin specificarea
unui predicat (condiie) care trebuie satisfcut de aceste tuple.
ncepnd din 1986 limbajul SQL a devenit standard ANSI pentru limbajele de interogare
ale bazelor de date relaionale fiind utilizat att n cadrul unor SGBD-uri complexe cum ar fi SGBD
ORACLE (liderul mondial n domeniul bazelor de date), ct i n cadrul unor SGBD-uri de
complexitate redus cum ar fi cele din familia xBase (Dbase IV, FoxPro).
Standardul SQL utilizat pn la nceputul anului 2000 este cel realizat n 1992 i cunoscut
sub numele de SQL92 sau SQL2.
Noul standard SQL3 lansat n 1999 are n vedere o serie de extensii fa de SQL2 dup cum
urmeaz:
-

faciliti orientate obiect posibilitatea de definire de ctre utilizator a tipurilor


abstracte de date care s permit descrierea de metode, identitatea obiectelor, subtipuri
i motenire, polimorfism etc.;
structuri de control pentru a conferi limbajului completitudine de calcul (IF, FOR,
WHILE, etc.) pentru a deveni un limbaj de sine stttor a crui putere de expresie s nu
mai fie limitat la nivelul limbajelor relaionale;
faciliti pentru exprimarea prelucrrilor recursive;
faciliti de comunicare n reea;
faciliti de prelucrare distribuit (mecanisme pentru crearea, memorarea i execuia
procedurilor la nivelul serverelor de date stored procedures);
faciliti multimedia;
faciliti pentru tratarea timpului n bazele de date.

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

Interogarea bazelor de date n limbajul SQL se realizeaz cu ajutorul unei singure


instruciuni i anume instruciunea SELECT avnd urmtoarea sintax:
SELECT [DISTINCT] <lista atribute>|*
FROM <lista relaii>
[WHERE <condiie>]
[GROUP BY <lista atribute de grupare>]
[HAVING <condiie>]
[ORDER BY <atribut1 de ordonare> [ASC]|DESC,]
[UNION <fraz SELECT>]
<lista atribute> este o list ce conine nume de atribute (cmpuri) sau expresii construite
utiliznd atribute, separate prin caracterul , i care fac parte din relaiile (tabele, vederi)
enumerate n <lista relaii> din clauza FROM. Numele fiecrui atribut sau expresii din <lista
atribute> va fi afiat n capul de tabel ce reprezint rezultatul interogrii, fiecare atribut sau expresie
putnd primi un alias folosind specificarea AS <alias>.
Caracterul * specific faptul c se extrag toate atributele tabelei precizate n clauza
FROM.
Clauza DISTINCT precizeaz faptul c n relaia rezultat nu pot aprea duplicate (tuple
identice).
Clauza WHERE precizeaz condiiile de interogare (condiii care trebuie s fie satisfcute
de tuplele interogate, condiii de cuplare relaii (JOIN, relaii ntre tabele). n clauza WHERE pot fi
utilizai operatori logici (AND, NOT, OR), predicate (IN, LIKE, BETWEEN, EXISTS, ALL, ANY),
operatori aritmetici (+, -, **, /, *), operatori de comparare (=, #,<, >, <=, >=, <>), parantezele ( )
pentru schimbarea ordinii de prioritate a operaiilor, operatorilor, funcii i alte subinterogri
SELECT, pentru construirea de expresii pe care trebuie s le ndeplineasc tuplele ce constituie
rezultatul interogrii. Predicatul IN permite specificarea unei liste pentru domeniul de cutare
pentru un atribut, iar predicatul BETWEEN permite specificarea unui interval pentru domeniul de
cutare a valorilor unui atribut, fiind echivalent cu o condiie de forma:
<atribut> >= <limita inf. interval> AND <atribut> <= <limita sup. interval>
Exemple:
Fie tabela Persoane(Nrcrt,Nume,Prenume, Datan, Sexul, Adresa)
Selectarea tuturor nregistrrilor din tabela Persoane pentru care primele 7 caractere din cmpul
Adresa sunt Suceava sau Rdui se realizeaz cu comanda:
SELECT * FROM Persoane
WHERE SUBSTR(Adresa,1,7) IN (Suceava,Rdui)
Interogarea de mai sus este echivalent cu interogarea:
SELECT * FROM Persoane
WHERE SUBSTR(Adresa,1,7) = Suceava OR SUBSTR(Adresa,1,7) = Rdui
Selectarea tuturor nregistrrilor din tabela Persoane pentru care data naterii este cuprins ntre
01/01/72 i 01/01/82 se realizeaz astfel:
SELECT * FROM Persoane WHERE Datan BETWEEN {01/01/72} AND {01/01/82}
Interogarea de mai sus este echivalent cu interogarea:
SELECT * FROM Persoane WHERE Datan >= {01/01/72} AND Datan <= {01/01/82}
Predicatul LIKE permite selecia irurilor de caractere care conin anumite caractere specificate
prin intermediul unei mti definite cu ajutorul unor caractere speciale (%, _ n dBASE IV, FoxPro,
ORACLE, sau *, ? n INFORMIX)
83

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

SELECT * FROM Stocuri WHERE Cant < ALL


(SELECT Cant FROM Stocuri WHERE CodDep = D1)
Predicatul EXISTS verific dac pentru fiecare tupl a relaiei exist tuple care satisfac
condiia din interogarea interioar (deci EXISTS permite specificarea mai multor atribute n
interogarea interioar).
Astfel spre exemplu instruciunea:
SELECT * FROM Produse A WHERE NOT EXISTS
(SELECT * FROM Stocuri B WHERE B.CodP=A.CodCodP)
va returna o list de produse care nu au nici o nregistrare n Stocuri.
Probleme propuse
S se scrie comenzile SQL pentru realizarea interogrilor de mai jos.
Situaia stocurilor
Cmp
Tabela

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

Lista produselor pentru care nu exist oferte


Cmp
Tabela

Codp
Produse

Denp
Produse

Lista produselor pentru care nu s-au fcut vnzri n perioada [data1,data2]


Cmp
Tabela

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

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