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 ar fi adresele. De asemenea, numere ce nu necesit calcule, cum ar fi numerele de telefon, numerele de partid sau codurile potale. Spaiul de memorie necesar Pn la 255 caractere. Microsoft Access memoreaz numai caracterele introduse n cmp; nu se memoreaz 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 matematice, cu excepia calculelor ce impun valori monetare. Pentru a defini un anumit tip Number setai proprietatea FieldSize. Date calendaristice i timpi. Valori monetare. Se va folosi tipul de date Currency pentru a preveni rotunjirea pe timpul calculelor. Precizia tipului este de 15 cifre la partea ntreag i 4 cifre la partea zecimal. Numere n secven unic (din 1 n 1) sau aleatoare care sunt automat inserate atunci

1, 2, 4 sau 8 bytes (16 bytes numai pentru Replication ID).

Date/Time Currency

8 bytes. 8 bytes.

AutoNumber

4 bytes (16 bytes numai pentru Replication ID).

Yes/No OLE Object

cnd se adaug un articol. Cmpuri care vor conine numai una din dou 1 bit. valori, cum ar fi Yes/No, True/False, On/Off. Obiecte (cum ar fi documente Microsoft Word, foi de calcul Microsoft Excel, imagini, 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 raport pentru a afia obiectul OLE. Crearea unui cmp care permite alegerea unei Acelai spaiu ca i cmpul valori dintr-o alt tabel sau dintr-o list de valori folosind o caset combo. Alegnd aceast opiune, se lanseaz un Wizard care cheii primare folosit pentru a executa examinarea, n mod obinuit 4 bytes. Pna la 1 GB (limitat de spaiul disc).

Lookup Wizard

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
10

Precizie

Memorie necesar 1 byte

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 1.79769313486232E308

7 15

2 bytes 4 bytes 4 bytes 8 bytes

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 Codp Denp Desp Semnificaie Cod produs Denumire produs Descriere produs Tip dat Number, Integer Text Hyperlink Dimensiune 4 20 Refer document corespunztor Observaii Cheie primar

STOCURI (stocurile de produse pe depozite) Cmp Codp CodDep Ump Cant Pret Semnificaie Cod produs Cod depozit Tip dat Number, Integer Lookup Wizard Text Dimensiune 4 2 8 4 8 Creare i utilizare list de valori Observaii Lookup Wizard tabela PRODUSE cu

Unitate de msur Lookup Wizard produs Cantitate Pre unitar Number, Integer Number, LongInteger

FURNIZORI (catalog de furnizori) Cmp Codf Denf Adresaf Semnificaie Cod furnizor Denumire furnizor Adresa furnizor Tip dat Number, Integer Text Text Dimensiune 4 30 25 Observaii Cheie primar

CLIENTI (catalog de clieni) Cmp Codc Denc Adresac Semnificaie Cod client Denumire client Adresa client Tip dat Number, Integer Text Text Dimensiune 4 30 25 Observaii Cheie primar

21

OFERTE (oferte de produse de la furnizori) Cmp Codf Codp Ump Pret Datao Oferta Semnificaie Cod furnizor Cod produs Tip dat Number, Integer Lookup Wizard Number, Integer Lookup Wizard Dimensiune 4 4 8 8 8 Refer document corespunztor Observaii Lookup Wizard cu tabela FURNIZORI Lookup Wizard cu tabela PRODUSE Creare i utilizare list de valori

Unitate de msur Lookup Wizard produs Pre unitar Data ofertei Oferta furnizor Number, LongInteger Date Hyperlink

VANZARI (vnzrile de produse pe clieni) Cmp Codc Codp Ump Cant Pret Datav Semnificaie Cod furnizor Cod produs Tip dat Number, Integer Lookup Wizard Number, Integer Lookup Wizard Dimensiune 4 4 8 4 8 8 Observaii Lookup Wizard tabela CLIENTI cu

Unitate de msur Lookup Wizard produs Cantitate Pre unitar Data vnzrii Number, Integer Number, LongInteger Date

Lookup Wizard cu tabela PRODUSE Creare i utilizare list de valori

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 Valoare Cant*Pre t Datav 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

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


P2k

Pn

P21

P22

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. n cadrul Proiectantului de Baze de Date (Database Designer), se selecteaz tabela i se alege comanda Remove din meniul Database.

sau -

sau cu comanda REMOVE TABLE. Exemplu, codul de mai jos deschide baza de date BazaTest i elimin tabela TabTest OPEN DATEBASE BazaTest REMOVE TABLE TabTest La eliminarea unei tabele dintr-o baz de date nu se realizeaz i tergerea automat a fiierului asociat tabelei. Pentru eliminarea tabelei din baza de date i tergerea fiierului .dbf al tabelei de pe hard-disc, se va folosi clauza DELETE a comenzii REMOVE TABLE sau comanda DROP TABLE astfel: OPEN DATABASE BazaTest REMOVE TABLE TabTest DELETE Creare relaii persistente ntre tabelele bazei de date Aceste relaii sunt create utiliznd indecii (sunt create ntre indeci i nu ntre cmpuri) i sunt folosite automat drept condiii implicite de legare n ferestrele Proiectantului de interogri i de Vederi (Query Designer i View Designer) i pentru a stoca informaii despre integritatea referenial. Pentru Crearea unei relaii persistente ntre tabele se poate proceda astfel: n fereastra Proiectantului de Baze de Date (Database Designer), se alege numele indexului ce urmeaz a fi legat i apoi se trage cu mouse-ul spre numele indexului din tabela ce urmeaz a fi legat sau - se utilizeaz clauza FOREIGN KEY n comenzile CREATE TABLE sau ALTER TABLE. n fereastra Proiectantului de Baze de Date (Database Designer), se va vedea o linie care leag tabelele respective, reprezentnd noua relaie persistent. Pentru tergerea unei relaii persistente ntre dou tabele se poate proceda astfel: 1. n cadrul Proiectantului de Baze de Date (Database Designer), se execut clic pe linia care reprezint relaia dintre cele dou tabele. (Limea liniei de relaie crete pentru a indica faptul c s-a selectat relaia respectiv), dup care se apas tasta DELETE.
sau

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 Datao Oferte

Situaia ofertelor
Cmp Tabela Codf Furnizori Denf Furnizori Adresaf Furnizori Codp Produse Denp Produse Ump Oferte Pret 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 Datav Vanzari

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

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