Sunteți pe pagina 1din 101

Cuprins

1. Crearea bazelor de date ACCESS ..................................................................... 3

2. Formulare ............................................................................................................... 14

3. Rapoarte ................................................................................................................. 64

4. Interogări ............................................................................................................... 74

5. Conexiunea la o bază de date de pe un server WEB .................................... 90

Bibliografie ................................................................................................................. 101


1. Crearea bazelor de date Access

1.1 Probleme rezolvate


Creaţi o baza de date pentru evidenţa situaţiei şcolare a studenţilor. Baza de
date trebuie să stocheze notele acordate de profesori, studenţilor, la fiecare
materie în sesiunea de examene.

Rezolvare

Vom folosi modelul Entitate-Atribut-Relatie (EAR). Acest model este folosit


pentru proiectarea sistemelor informatice. Trebuie subliniat ca înainte de
realizarea efectiva a bazei de date cu ajutorul produsului Microsoft Access aceasta
trebuie proiectata foarte bine la nivel conceptual. Aici intervine utilitatea
modelului EAR. In conformitate cu acest model, proiectarea unei baze de date
presupune parcurgerea următorilor paşi:

• Se identifică entităţile bazei de date. In cazul nostru entităţile sunt: studenţii,


profesorii, materiile si notele.
• Identificarea asocierilor între entităţi este următorul pas. Prin asociere se
înţelege o legătura între cele două entităţi bazata pe un atribut al lor.. Nu exista
o procedura determinista in stabilirea asocierilor dintre entităţi. Stabilirea
acestora este o operaţie relativ intuitiva care, în cazul bazelor de date mari,
este organizată pe baza unor metodologii. În cazul nostru entităţile au
următoarele asocieri care generează relaţii de tip unu-la-mulţi:

STUDENŢI
MATERII

ID_STUD
ID_MAT

PROFESORI

N O T E ID_PROF

Un student are mai multe note, evident, la o materie poţi primi mai multe note
( dacă ai absentat sau nu ai promovat examenul , sau te prezinţi la mărire de notă),
un profesor acordă mai multe note .
3
Identificarea atributelor entităţilor. Stabilirea atributelor se face în funcţie de
specificul utilizării bazei de date. O atenţie sporită trebuie acordată atributelor
cheie primară (index) În cazul nostru am preferat, pentru simplificarea codificării
datelor, să apelăm la facilitatea Access de a construi automat un record-number,
ID, pentru identificarea unică a înregistrărilor dintr-un tabel. In cazul nostru vom
folosi următoarele atribute:

Studenti

ID_STUD Nume Prenume Adresa Telefon Email

Profesori

ID_PROF Nume Prenume Catedra Titlu Telefon Email

Materii

ID_Mat Denumire Descriere

Note

Nota Data ID_stud ID_prof ID_mat

Putem trece acum la crearea efectivă a bazei de date. Mai întâi trebuie creat
fişierul mdb al bazei care păstrează descrierea obiectelor bazei de date: tabele,
interogări, rapoarte, formulare. Procedura este următoarea:

1. Selectă consecutiv din meniul principal opţiunile : File, New, Blank


Database;

2. În caseta File name se tastează numele fişierului mdb, care va fi de fapt


chiar numele bazei de date;

3. Încheiem cu un clic pe butonul Create;

4. Avem la dispoziţie acum fereastra Database care ne permite selecţia


obiectelor asociate bazei de date în vederea creării, modificării sau activării.
4
Studenti

Profesori

5
Materii

Note

6
Tabelele se creează cel mai simplu în modul de lucru Design View. Procedura
de operare este următoare:

1. Selectăm din fereastra Database, clasa de obiecte Tables;

2. Selectăm cu un dublu clic modul de lucru: Create Table in Design View;

3. Fereastra Table Designer are două panouri orizontale:


- cel de sus, pentru introducerea numelui şi tipul fiecărui câmp,
- cel de jos pentru setarea proprietăţilor câmpului.

4. Se descriu succesiv câmpurile fiecărui tabel în parte, fără câmpul ID pe


care-l adaugă Access la momentul închiderii ferestrei Table Designer.
Fereastra se închide după descrierea fiecărui tabel şi se redeschide la
tabelul următor.

Încărcarea date in tabele este pasul următor. Operaţia este cunoscută şi sub
numele de “populare a bazei de date”. Procesul de încărcare se face cu ajutorul
interfeţei vizuale care se activează astfel:

5. Efectuăm dublu-click pe numele tabelului în fereastra Database;

6. Tastăm valorile pentru fiecare câmp, trecând la câmpul următor cu un TAB;

7. La sfârşit închidem fereastra de lucru pentru tabelul curent şi repetăm


procedura cu tabelul următor.

Studenti

7
Profesori

Materii

8
Note

Datele se pot introduce şi folosind formulare electronice Forms, descrise mai


târziu în această lucrare.
Ultima etapa din crearea bazei de date include definirea relaţiilor dintre tabele
cu ajutorul opţiunii Relationship din meniul Tools.

Utilitarul arata ca in figura de mai jos:

9
1. Se adaugă cu un clic pe butonul Add fiecare tabel din fereastra Show table
în fereastra Relationships;
2. La sfârşit închidem fereastra Show table cu un clic pe butonul Close.

3. Construim relaţiile dintre tabele cu ajutorul mouse-ului, clic stânga pe


câmpul cheie primară din tabelul părinte şi cu butonul mouse-ului apăsat, deplasăm
cursorul peste câmpul cheie externă corespondent din tabelul fiu. Eliberăm butonul
mouse-ului şi pe ecran apare o fereastra care cere confirmarea legăturii.

10
4. Apăsăm butonul Create pe ecran apare legătura desenată ca o linie.

5. Se procedează la fel pentru toate celelalte legături.

11
In acest moment, procesul de creare a bazei de date este încheiat şi se poate trece mai
departe la exploatarea ei. In lipsa elementelor de mai sus, nu este posibila folosirea
tuturor facilităţilor relaţionale ale produsului Microsoft Access.

1.2. Probleme propuse

1. Pentru baza de date de la problema 1, sa se adauge si entitatea an


universitar. Se vor actualiza si legăturile intre tabele.

2. Folosind baza de date de la problema 1 să se extindă numărul de


atribute al entităţii studenţi.

3. Folosind baza de date de la problema 1 să se extindă numărul de atribute al


entităţii profesori.

4. Să se proiecteze o baza de date care poate fi folosita pentru a memora cărţile


din biblioteca personala şi persoanele cărora li s-au împrumutat cărţi.

5. Să se realizeze o baza de date pentru gestiunea vânzărilor unui magazin


pe produse şi separat pe fiecare angajat.

6. Realizaţi o baza de date pentru evidenţa câştigurilor şi a cheltuielile din


bugetul familiei, pe tipuri de cheltuieli şi pe persoanele ce le-au efectuat. Se va
lua in considerare că într-o familie doar părinţii realizează câştiguri dar
cheltuieli pot face toţi membrii familiei.

12
7. Realizaţi o baza de date pentru gestiunea procesul de rezervare a camerelor
intr-o pensiune turistica. Se presupune ca pensiunea dispune de 15 de camere,
are trei recepţioneri, doua femei de serviciu si un director. Clienţii pot rezerva
camere prin telefon, prin email sau la recepţia pensiunii.

8. Să se creeze o baza de date pentru gestiunea exporturilor unei firme.


Managerul firmei este interesat să cunoască:
- lista produselor din oferta firmei, cu stocul la zi şi preţul de catalog;
- lista clienţilor externi, grupaţi pe ţări, inclusiv cifra de afaceri;
- lista furnizorilor grupaţi pe judeţe, inclusiv banca ce-i reprezintă;
- lista contractelor încheiate de la începutul anului cu clienţii externiŞ
- lista comenzilor către furnizorii interni cu produsele pentru export;
- lisa declaraţiilor vamale pentru produsele livrate în luna curentă.

13
2. Formulare
2.1. Controale uzuale folosite în construirea formularelor
În acest capitol vom exemplifica modalităţile în care controalele uzuale pot fi
utilizate pentru crearea formularelor Microsoft Access:
1. Label şi Text Box
2. Command Button
3. Option Group
4. Check Box
5. Spin Button
6. Combo Box
7. List Box

2.1.1. Label şi Text Box


Formularea problemei
Să se proiecteze un formular care calculează preţul de vânzare al unui produs prin
aplicarea unui adaos comercial de 10% la preţul acestuia de achiziţie. Valoarea de
achiziţie se introduce în cadrul formularului. Atunci când se face click în câmpul destinat
preţului de vânzare, valoarea acestuia se calculează în mod automat, ca în imaginea de
mai jos.

Rezolvare
Prin Label înţelegem o casetă ce afişează date de tip text folosite în general pentru
descrieri. Spre deosebire de Label, Text Box-ul permite pe lângă afişarea datelor şi
introducerea, editarea acestora.

Paşii ce trebuie urmaţi pentru rezolvarea problemei sunt următorii:


1. Se creează un nou formular folosind opţiunea Create Form in Design View din
Database Window. În mod echivalent se poate folosi opţiunea Form a meniului Insert
după care se selectează Design View.

14
2. Pentru a modifica caracteristicile ferestrei în care va fi afişat formularul, va trebui să
accesăm proprietăţile acesteia executând click dreapta în zona în care se intersectează
ruler-ul vertical cu cel orizontal şi alegând din meniul contextual opţiunea Properties.
La acelaşi efect se ajunge şi dacă se realizează dublu click direct în zona respectivă.

3. Proprietăţile pe care va trebui să le modificăm pentru ca fereastra să arate ca cea


prezentată în enunţul problemei sunt:
a. Caption semnifică textul ce se va afişa în bara ferestrei. Se va introduce
Calcul Pret Vanzare
b. Record Selectors se va seta pe No pentru a inhiba afişarea în partea stângă a
ferestrei a unei zone ce permite selectarea înregistrării curente
c. Navigation Buttons se va pune pe No pentru a preveni afişarea numărului
înregistrării curente alături de butoanele de navigare (salt la prima înregistrare,
la precedenta, la următoarea sau la ultima)
15
d. Dividing Lines se va seta pe No pentru a nu se trasa linia orizontală ce
desparte cele două zone prezentate anterior

4. Daca fereastra ce conţine controalele pe care le putem include în cadrul formularului


nu este activă, atunci va trebui să acţionăm butonul Toolbox ( ) din bara de
instrumente sau să accesăm opţiunea respectivă din meniul View. Controalele pe care
le vom utiliza vor fi Text Box şi Label, simbolizate în fereastra cu instrumente prin
şi .
5. Se adaugă primul Text Box destinat introducerii preţului de achiziţie prin apăsarea
butonului corespunzător din bara cu instrumente ( ) urmată de executarea unui
click în interiorul formularului. O altă variantă pe care o avem la dispoziţie o
reprezintă glisarea mouse-ului în interior formularului după apăsarea butonului Text
Box. Dimensiunea obiectului şi poziţia acestuia în cadrul ferestrei pot fi schimbate cu
ajutorul mouse-ului. Pentru descrierea conţinutului Text Box-ului, în partea stângă a
acestuia este adăugat în mod automat şi un obiect de tip Label. Cele două controale
pot fi mutate concomitent sau se poate opta pentru deplasarea individuală a acestora
prin folosirea elementului aflat în dreptul colţului stânga sus.

16
Textul explicativ Preţ achizitie se va introduce în cadrul Label-ului aflat în stânga
Text Box-ului prin selectarea obiectului, apăsarea butonului stâng al mouse-ului şi
adăugarea textului dorit. .

O altă modalitate ar fi accesarea proprietăţii Caption şi modificarea valorii din dreptul


acesteia.
De asemenea, în partea dreaptă se va adăuga un nou Label ce va conţine textul lei
semnificând moneda în care este exprimat preţul de achiziţie. Mai întâi se va apăsa
butonul corespunzător din fereastra cu instrumente ( ) după care se va executa click
în interiorul formularului, se va introduce textul dorit şi se va poziţiona corect
obiectul la dreapta Text Box-ului ce conţine preţul de achiziţie.

Pentru a accesa proprietăţile Text Box-ului va trebui să executăm click dreapta pe


controlul respectiv şi să alegem din meniul contextual opţiunea Properties. Obiectul
va fi denumit PretA (proprietatea Name).

17
În plus, conţinutul Text Box-ului va fi aliniat la dreapta (proprietatea Text Align).

Valorile valide pentru controlul nostru sunt doar cele numerice. Putem specifica acest
lucru prin setarea proprietăţii Format la valoarea Standard. Valorile acceptate vor fi
doar cele numerice şi în plus acestea vor fi automat formatate cu două zecimale şi
simbol despărţitor pentru mii.

18
6. Următorul pas îl reprezintă adăugarea celor trei Label-uri destinate adaosului
comercial în care vom avea textele Adaos, 10 şi %. Modalitatea de adăugare este
asemănătoare cu cea descrisă la pasul anterior.

Valoarea adaosului comercial va trebui să fie aliniată la dreapta. Pentru aceasta este
nevoie să accesăm proprietăţile obiectului executând click dreapta pe controlul în
cauză şi să alegem din meniul contextual opţiunea Properties. Proprietatea Text Align
va fi setată pe Right, ca în figura următoare.

19
7. În continuare se vor adăuga obiectele corespunzătoare preţului de vânzare prin
repetarea operaţiunilor descrise la punctul 5. Numele noului control de tip Text Box
va fi PretV.

8. Pentru a vedea cum arată formularul proiectat, este nevoie să comutăm în modul de
vizualizare Form View. Această comutare se poate face apăsând butonul din bara
de instrumente sau accesând opţiunea Form View din meniul View sau din cel
contextual (click dreapta).

20
9. În continuare va trebui să adăugăm codul prin care se va calcula preţul de vânzare al
produsului atunci când utilizatorul execută click în caseta corespunzătoare. Preţul de
vânzare se obţine prin adăugarea unui adaos comercial de 10% la preţul de achiziţie.
Pentru început va trebui să revenim în modul Design View prin apăsarea butonului
din bara de instrumente sau prin selectarea opţiunii respective din meniul View
sau din meniul contextual. Apoi vom accesa proprietăţile Text Box-ului care va
conţine preţul de vânzare executând click dreapta pe acesta şi alegând opţiunea
Properties din meniul contextual. Ne deplasăm în secţiunea Event şi ne poziţionăm pe
evenimentul On Click care se declanşează atunci când utilizatorul efectuează un click
de mouse în caseta respectivă. Alegem din lista elementul numit [Event Procedure] şi
apăsăm pe butonul din dreapta ( ).

În fereastra care apare va trebui să introducem codul următor:


Private Sub PretV_Click()
PretA.SetFocus
pret_achizitie = CDbl(PretA.Text)
adaos = pret_achizitie * 10 / 100
pret_vanzare = pret_achizitie + adaos
PretV.SetFocus
PretV.Text = pret_vanzare
End Sub
21
Codul anterior preia din formular preţul de vânzare introdus de către utilizator, îl
converteşte din text în valoare numerică şi calculează adaosul comercial ce trebuie
aplicat după care formează preţul final de vânzare prin însumarea preţului de achiziţie
şi a valorii adaosului.
Închidem fereastra în care am introdus codul, comutăm în modul Form View,
introducem 3 000 000 în caseta corespunzătoare preţului de achiziţie după care
efectuăm un click de mouse în dreptul preţului de vânzare. În acest moment valoarea
acestuia se va calcula în mod automat şi va fi afişată în cadrul formularului, ca în
figura următoare.

10. Pentru a putea utiliza ulterior formularul astfel creat este nevoie să efectuăm salvarea
acestuia prin accesarea opţiunii Save/Save As a meniului File sau prin apăsarea
butonului din bara de instrumente. După ce am salvat formularul acesta va apărea
în fereastra bazei de date la categoria Forms.

2.1.2. Command Button


Formularea problemei
Să se modifice formularul proiectat la exemplu anterior astfel încât valoarea
adaosului comercial perceput să se calculeze şi să se afişeze prin apăsarea unui buton.

22
Rezolvare
Prin Command Button înţelegem un buton prin a cărui apăsare vom genera un
eveniment la care putem asocia o serie de prelucrări.

Paşii ce trebuie urmaţi pentru rezolvarea problemei sunt următorii:


1. În fereastra bazei de date se execută click dreapta pe formularul creat anterior şi se
alege opţiunea Save As. În fereastra care se deschide introducem un nume pentru
formular, Valoare Adaos, după care apăsăm butonul OK.

Noul formular va apărea în fereastra bazei de date la categoria Forms, alături de


formularul original din care a fost obţinut.

23
2. Se intră în modul Design View şi se deplasează mai jos Text Box-ul corespunzător
preţului de vânzare împreuna cu Label-ul ce conţine moneda în care este exprimată
valoarea din casetă.

3. Imediat după linia ce conţine procentul adaosului comercial vom adăuga un buton
(Command Button) prin selectarea opţiunii respective din fereastra cu instrumente
( ) şi efectuarea unui click sau glisarea mouse-ului în interiorul formularului. Va
apărea o fereastră numită Command Button Wizard. Această fereastră ne permite să
asiciem o serie de acţiuni standard evenimentului generat la apăsarea butonului
respectiv, cum ar fi navigarea către o altă înregistrare, actualizarea înregistrării
curente, operaţii la nivel de formular şi raport, etc. Pentru a atinge funcţionalitatea
cerută de către enunţul problemei vom apăsa butonul Cancel şi vom dechide fereastra
ce conţine proprietăţile butonului executând click dreapta pe acesta şi alegând
opţiunea Properties din meniul contextual. O altă variantă ar fi selectarea butonului
urmată de apăsarea elementului din bara de instrumente sau de alegerea opţiunii
Properties a meniului View. Proprietăţile pe care le vom modifica sunt:
24
ƒ Caption – reprezintă textul ce apare afişat pe buton şi vom introduce cuvântul
Valoare adaos.
ƒ Name – semnifică numele controlului, CmdVal. Acest nume îl vom folosi
atunci când vom asocia cod evenimentului ce se declanşează la apăsarea
butonului.

4. În dreapta butonului vom adăuga un Text Box în care se va afişa valoarea adaosului
comercial calculat în funcţie de preţul de achiziţie al produsului. Label-ul din faţa
Text Box-ului va fi şters iar în dreapta vom adăuga un nou Label în care vom trece
moneda în care este exprimată valoarea adaosului.

5. Proprietăţile Text Box-ului vor fi modificate astfel încât numele acestuia să fie ValAd
(proprietatea Name), conţinutul să fie de tip numeric (proprietatea Format având
valoarea Standard) şi aliniat la dreapta (proprietatea Text Align).
25
6. Revenim la butonul adăugat şi în fereastra ce conţine proprietăţile acestuia ne
deplasăm în secţiunea Event şi ne poziţionăm pe evenimentul On Click care se
declanşează atunci când utilizatorul efectuează un click de mouse. Alegem din lista
elementul numit [Event Procedure] şi apăsăm pe butonul din dreapta ( ).

În fereastra care apare vom introduce codul următor:


Private Sub CmdVal_Click()
PretA.SetFocus
pret_achizitie = CDbl(PretA.Text)
adaos = pret_achizitie * 10 / 100
ValAd.SetFocus
ValAd.Text = adaos
End Sub

Codul prezentat se execută la apăsarea butonului şi calculează valoarea adaosului


comercial pe care o afişează în Text Box-ul corespunzător.
Închidem fereastra în care am introdus codul anterior, moment la care vom reveni la
Design View.
7. Comutăm în modul Form View, introducem 4 000 000 în câmpul corespunzător
preţului de achiziţie, dăm click în caseta în care se va afişa preţul de vânzare iar apoi
vom apăsa butonul nou adăugat care va calcula şi afişa valoarea adaosului comercial.

26
8. Pentru a putea utiliza şi ulterior formularul astfel creat este nevoie să efectuăm
salvarea acestuia prin accesarea opţiunii Save/Save As din meniul File sau prin
apăsarea butonului din bara de instrumente.

2.1.3. Option Group


Formularea problemei
Să se proiecteze un formular care calculează valoarea TVA-ului pentru un produs
pe baza preţului acestuia şi a cotei procentuale de TVA ce se aplică.
Cotele de TVA în vigoare sunt:
ƒ Cota de 0% – pentru produsele ce sunt scutite de TVA
ƒ Cota de 9% - reprezintă cota redusă de TVA
ƒ Cota de 19% - este cota standard ce se aplică la marea majoritate a produselor

Rezolvare
Un Option Group creează o casetă în care se pot plasa butoane de opţiune (option
buttons), butoane comutatoare (toggle buttons) sau casete de validare (check boxes).
Dintre toate elementele conţinute doar unul singur poate fi activ la un moment dat.

Etapele ce trebuie urmate pentru rezolvarea problemei sunt următoarele:


1. Se creează un nou formular folosind opţiunea Create Form in Design View din
Database Window. În mod echivalent se poate folosi opţiunea Form a meniului Insert
după care se selectează Design View.
2. Se modifică următoarele proprietăţi ale formularului:
1. Caption semnifică textul ce se va afişa în bara ferestrei. Se va
introduce textul Calcul Pret Vanzare
2. Record Selectors se va seta pe No pentru a inhiba afişarea în partea
stângă a ferestrei a zonei ce permite selectarea înregistrării curente
3. Navigation Buttons se va pune pe No pentru a preveni afişarea
numărului înregistrării curente alături de butoanele de navigare (salt la
prima înregistrare, la precedenta, la următoarea sau la ultima)
27
4. Dividing Lines se va seta pe No pentru a nu se trasa linia orizontală ce
desparte cele două zone prezentate anterior

3. Daca fereastra ce conţine controalele pe care le putem include în cadrul formularului


nu este activă, atunci va trebui să acţionăm butonul Toolbox ( ) din bara de
instrumente sau să accesăm opţiunea respectivă din meniul View. Controlul Option
Group este simbolizat în fereastra cu instrumente prin .
4. În cadrul formularului se adaugă Text Box-ul corespunzător preţului produsului iar în
dreapta acestuia se va insera un Label care va conţine descrierea monedei în care este
exprimată valoarea.

Proprietăţile Text Box-ului vor fi modificate după cum urmează:


ƒ Name – numele obiectului va fi Pret
ƒ Format – se va seta pe Standard iar caseta va accepta numai valori numerice
ƒ Text Align – textul va fi aliniat la dreapta (Right)
5. Se adaugă controlul de tip Option Button selectând butonul din fereastra cu
instrumente după care se execută click sau se glisează mouse-ul în cadrul
formularului. Se va deschide o nouă fereastră numită Option Group Wizard care ne va
ajuta, într-un număr de paşi, să definim conţinutul grupului de tip opţiune. Fereastra
are în partea inferioară un număr de patru butoane cu următoarea semnificaţie:
ƒ Cancel - se renunţă la includerea obiectului în formular
ƒ Back – revenirea la pasul anterior
ƒ Next – trecerea la pasul următor
ƒ Finish – încheierea wizard-ului şi includerea în formular a noului grup de
opţiuni

Paşii pe care va trebui să-i parcurgem sunt descrişi în continuare:


a) Definim cele trei opţiuni care în cazul nostru reprezintă cotele de TVA ce pot
fi aplicate unui produs: 0%, 9%, 19% după care vom acţiona butonul Next.

28
b) La pasul următor vom decide dacă dorim ca una dintre opţiuni să fie iniţial
activă iar în caz afirmativ avem posibilitatea de a alege opţiunea dorită.
Datorită faptului că la majoritatea produselor se aplică o cotă de 19%, vom
opta ca această variantă să fie cea activă iniţial.

c) După apăsarea butonului Next vom avea posibilitatea de a seta valoarea ce va


fi asociată fiecărei opţiuni în parte.

29
d) În continuare urmează să specificăm tipul controlului ce va fi folosit pentru
opţiunile definite: Option Button, Toggle Button sau Check Box. Vom alege
varianta Option Buttons iar din partea inferioară a ferestrei ne vom alege stilul
dorit dintre cele care ne sunt puse la dispoziţie.

e) La ultimul pas suntem invitaţi să specificăm descrierea sub care sunt reunite
opţiunile noastre.

30
f) Prin apăsarea butonului Finish obiectul de tip Option Group va fi inclus în
cadrul formularului. Prin intermediul ferestrei de proprietăţi vom numi acest
obiect OptGrp. După poziţionarea corectă şi redimensionarea acestuia,
formularul ar trebui să arate ca cel din figura următoare.

6. Adăugăm butonul cu ajutorul căruia vom calcula valoarea TVA-ului pentru produsul
introdus. Acest lucru se realizează prin selectarea opţiunii respective din fereastra cu
instrumente ( ) şi efectuarea unui click sau glisarea mouse-ului în interiorul
formularului. Va apărea o fereastră numită Command Button Wizard în care vom
apăsa butonul Cancel. Deschidem fereastra ce conţine proprietăţile butonului
executând click dreapta pe acesta şi alegând opţiunea Properties din meniul
contextual. O altă variantă ar fi selectarea butonului urmată de apăsarea elementului
aflat în bara de instrumente. În mod echivalent putem opta pentru alegerea
31
opţiunii Properties a meniului View. Proprietăţile pe care le vom modifica sunt
descrise în continuare:
ƒ Caption – reprezintă textul ce apare afişat pe buton şi vom introduce Valoare
TVA.
ƒ Name – semnifică numele controlului, CmdTVA. Acest nume îl vom folosi
atunci când vom asocia cod evenimentului ce se declanşează la apăsarea
butonului.

7. În dreptul butonului vom adăuga un Text Box în care se va afişa valoarea TVA-ului.
Această valoare se va calcula în funcţie de preţul produsului şi de cota selectată.
Label-ul din faţa Text Box-ului va fi şters iar în dreapta vom adăuga un nou Label în
care vom trece moneda în care este exprimat TVA-ul.
Proprietăţile Text Box-ului vor fi modificate astfel încât numele acestuia să fie
ValTVA (proprietatea Name), conţinutul să fie de tip numeric (proprietatea Format
având valoarea Standard) şi aliniat la dreapta (proprietatea Text Align).

32
8. Deschidem fereastra cu proprietăţile butonului adăugat şi ne poziţionăm pe
evenimentul On Click din secţiunea Event. Evenimentul se declanşează ori de câte ori
utilizatorul apasă pe buton. Alegem din listă elementul numit [Event Procedure] şi
apăsăm pe butonul din dreapta ( ).

Formularul va trebui să calculeze valoarea TVA-ului şi să o afişeze în cadrul Text


Box-ului corespunzător. Acest lucru va fi realizat de către codul ce urmează şi care va
trebui introdus în fereastra ce se deschide.

Private Sub CmdTVA_Click()


Pret.SetFocus
pret_produs = CDbl(Pret.Text)
valoare_tva = pret_produs * OptGrp.Value / 100
ValTVA.SetFocus
33
ValTVA.Text = valoare_tva
End Sub

Închidem fereastra în care am introdus codul anterior, moment la care vom reveni la
Design View.
9. Comutăm în modul Form View, introducem 9 000 000 în câmpul corespunzător
preţului, alegem cota de 9% ca fiind cea care se aplică pentru produsul nostru şi
apăsăm pe butonul Valoare TVA, moment la care valoarea TVA-ului se va calcula şi
afişa în câmpul din dreapta butonului.

10. Pentru a putea utiliza şi ulterior formularul astfel creat este nevoie să efectuăm
salvarea acestuia prin utilizarea opţiunii Save/Save As din meniul File sau prin
apăsarea butonului din bara de instrumente.

Observaţii
a. Dacă la etapa 5, pasul d), am fi ales Check Boxes în loc de Option Buttons, atunci
formularul ar fi arătat ca în figura următoare.

34
b. Dacă la etapa 5, pasul d), am fi ales Toggle Buttons, formularul pe care l-am fi
obţinut ar fi fost asemănător celui din figura următoare.

2.1.4. Check Box


Formularea problemei
Să se realizeze un formular electronic care calculează suma ce trebuie plătită de
către un turist pentru o zi de cazare la hotel. Această suma se va obţine pe baza preţului

35
camerei şi a numărului de mese solicitate, ştiind că micul dejun costă 100 000 lei, prânzul
300 000 lei iar cina 200 000 lei.

Rezolvare
Check Box-ul reprezintă o casetă de validare care comută între stările on şi off.

Paşii ce trebuie urmaţi pentru rezolvarea problemei sunt următorii:


1. Se creează un nou formular folosind opţiunea Create Form in Design View din
Database Window. În mod echivalent se poate folosi opţiunea Form a meniului Insert
după care se selectează Design View.
2. Se modifică proprietăţile formularului astfel:
a. Caption semnifică textul ce se va afişa în bara ferestrei. Se va introduce
valoarea Calcul Pret Cazare
b. Record Selectors se va seta pe No pentru a inhiba afişarea în partea stângă a
ferestrei a unei zone ce permite selectarea înregistrării curente
c. Navigation Buttons se va pune pe No pentru a preveni afişarea numărului
înregistrării curente alături de butoanele de navigare (salt la prima înregistrare,
la precedenta, la următoarea sau la ultima)
d. Dividing Lines se va seta pe No pentru a nu se trasa linia orizontală ce
desparte cele două zone prezentate anterior
3. Daca fereastra ce conţine controalele pe care le putem include în cadrul formularului
nu este activă, atunci va trebui să acţionăm butonul Toolbox ( ) din bara de
instrumente sau să accesăm opţiunea respectivă din meniul View. Controlul Check
Box este simbolizat în fereastra cu instrumente prin .
4. Se adaugă Text Box-ul corespunzător preţului camerei iar în dreapta acestuia se va
insera un Label care va descrie moneda în care este exprimată valoarea.
Proprietăţile Text Box-ului vor fi modificate după cum urmează:
36
ƒ Name – numele obiectului va fi PretC
ƒ Format – se va seta pe Standard (caseta va accepta numai valori numerice)
ƒ Text Align – textul va fi aliniat la dreapta (Right)

5. Adăugăm un Label în care vom trece descrierea serviciului (Masă), după care vom
insera trei Check Box-uri, câte unul pentru fiecare variantă pe care o avem la
dispoziţie. În Label-ul din dreptul fiecărei casete de validare vom trece numele
variantei respective. În plus, vom schimba, folosind fereastra de proprietăţi, numele
celor trei Check Box-uri după cum urmează: MicD, Pranz, Cina. Pentru a avea acces
la proprietăţile unuia dintre cele trei casete de validare va trebui să efectuăm click
dreapta pe obiectul respectiv şi să alegem din meniul contextual opţiunea Properties.
O altă variantă pe care o avem la dispoziţie ar fi reprezentată de selectarea butonului
folosind butonul stâng al mouse-ului după care se apasă butonul din bara de
instrumente sau se accesează opţiunea corespunzătoare din meniul View.

37
6. Următorul element pe care îl vom adăuga va fi butonul cu ajutorul căruia vom calcula
suma finală ce trebuie plătită pentru o zi de cazare. Inserarea butonului se realizează
prin selectarea opţiunii respective din fereastra cu instrumente ( ) şi efectuarea unui
click sau glisarea mouse-ului în interiorul formularului. Va apărea o fereastră numită
Command Button Wizard în care vom apăsa butonul Cancel. Modificăm proprietăţile
butonului după cum urmează:
ƒ Caption – reprezintă textul ce apare afişat pe buton; introducem Valoare.
ƒ Name – semnifică numele controlului, CmdVal. Acest nume îl vom folosi
atunci când vom asocia cod evenimentului ce se declanşează la apăsarea
butonului.

38
7. La dreapta butonului vom adăuga un nou Text Box pe care îl vom folosi pentru
afişarea valorii totale a unei zile de cazare. De asemenea vom adăuga şi un Label care
conţine descrierea monedei în care este exprimată valoarea. Proprietăţile Text Box-
ului vor fi modificate astfel încât numele acestuia să fie ValTot (proprietatea Name),
conţinutul să fie de tip numeric (proprietatea Format setată pe valoarea Standard) şi
aliniat la dreapta (proprietatea Text Align).

8. Pentru a adăuga codul Visual Basic necesar pentru a calcula valoarea totală a unei zile
de cazare este necesar să deschidem fereastra cu proprietăţile butonului. Ne
poziţionăm pe evenimentul On Click din secţiunea Events, alegem din listă elementul
numit [Event Procedure] şi apăsăm pe butonul din dreapta ( ).

39
9. În fereastra ce se va deschide introducem codul următor care va avea ca efect
obţinerea sumei totale de plată pentru ziua de cazare prin însumarea preţului camerei
şi a tarifului perceput pentru mesele solicitate.

Private Sub CmdVal_Click()


PretC.SetFocus
pret_camera = CDbl(PretC.Text)

pret_micdejun = 0
If MicD.Value Then
pret_micdejun = 100000
End If

pret_pranz = 0
If Pranz.Value Then
pret_pranz = 300000
End If

pret_cina = 0
If Cina.Value Then
pret_cina = 200000
End If

pret_total = pret_camera + _
pret_micdejun + _
pret_pranz + _
pret_cina
ValTot.SetFocus
ValTot.Text = pret_total
End Sub

Închidem fereastra în care am introdus codul şi revenim la Design View.


10. Comutăm în modul Form View, introducem 2 000 000 în câmpul corespunzător
preţului de cazare, alegem să servim masa de prânz şi cina după care apăsăm pe
butonul Valoare, moment la care suma totală de plată pentru o zi de cazare se va
calcula şi afişa în câmpul din dreapta butonului.

40
11. Pentru a putea utiliza formularul şi ulterior, este nevoie să realizăm salvarea acestuia
prin utilizarea opţiunii Save/Save As din meniul File sau prin apăsarea butonului
din bara de instrumente.

2.1.5. Spin Button


Formularea problemei
Să se modifice formularul anterior astfel încât să calculeze şi valoarea unui sejur
pe baza numărului zilelor de cazare.

41
Rezolvare
Pentru a specifica numărul de zile din care este compus sejurul vom utiliza un
control numit SpinButton format din două săgeţi dispuse una deasupra celeilalte cu
ajutorul cărora vom incrementa respectiv decrementa cu o unitate durata dorită a
sejurului.

Pentru rezolvarea acestei probleme vor trebui parcurşi paşii de la exemplul anterior după
care:
1. Se adaugă un Label în care se introduce textul Numar de zile. În dreapta acestui
obiect se va insera un nou control de tip Label pe care îl vom numi NrZile şi care va
avea ca text asociat valoarea 0. Proprietatea Special Effect va fi setată pe valoarea
Sunken pentru a obţine efectul din figura următoare.

42
2. În dreapta acestui ultim control de tip Label vom adăuga un obiect de tip SpinButton
prin apăsarea butonului More Controls din fereastra cu instrumente ( ) iar din lista
care apare vom selecta opţiunea numită Microsoft Forms SpinButton. Acest nou
control va fi denumit SpinBtn (proprietatea Name).

43
Cu ajutorul proprietăţilor Min, Max, Value şi Small Change putem specifica plaja de
valori pe care să o acopere controlul nostru, valoarea curentă de la care să plece şi
pasul cu care să se modifice valoarea curentă la apăsarea uneia dintre cele două
săgeţi.

3. Pasul următor îl reprezintă adăugarea unui nou buton pe care îl vom folosi pentru a
obţine valoarea totală a sejurului pe baza preţului unei zile de cazare şi a numărului
de zile. Inserarea butonului se realizează prin selectarea opţiunii respective din
fereastra cu instrumente ( ) şi efectuarea unui click sau glisarea mouse-ului în
44
interiorul formularului. Va apărea o fereastră numită Command Button Wizard în care
vom apăsa butonul Cancel. Modificăm proprietăţile butonului după cum urmează:
ƒ Caption – reprezintă textul ce apare afişat pe buton; vom introduce Valoare
sejur.
ƒ Name – semnifică numele controlului, CmdSejur. Acest nume îl vom folosi
atunci când vom asocia cod evenimentului ce se declanşează la apăsarea
butonului.

4. Un nou Text Box ce va conţine valoarea totală a sejurului va fi inserat la dreapta


butonului iar lângă acesta se va adăuga un Label pentru descrierea monedei în care
este exprimată valoarea respectivă. Proprietăţile Text Box-ului vor fi modificate astfel
încât numele acestuia să fie ValSejur (proprietatea Name), conţinutul să fie de tip
numeric (proprietatea Format setată pe valoarea Standard) şi aliniat la dreapta
(proprietatea Text Align).

45
5. Urmează să adăugăm codul Visual Basic care se va executa atunci când utilizatorul
apasă pe butonul Valoare sejur. Deschidem fereastra cu proprietăţile butonului, ne
deplasăm în secţiunea Events, evenimentul On Click şi selectăm opţiunea [Event
Procedure] după care apăsăm pe butonul din dreapta ( ).

În fereastra ce se deschide se vor introduce liniile următoare de cod care vor calcula
valoarea totală a pachetului turistic plecând de la valoarea unei zile de cazare care se
va înmulţi cu durata sejurului.

Private Sub cmdSejur_Click()


46
CmdVal_Click
nr_zile = NrZile.Caption
ValTot.SetFocus
valoare_sejur = nr_zile * CDbl(ValTot.Text)
ValSejur.SetFocus
ValSejur.Text = valoare_sejur
End Sub

Tot aici va trebui să adăugăm şi codul necesar a se executa atunci când utilizatorul va
apăsa pe controlul de tip SpinButton.

Private Sub SpinBtn_Change()


NrZile.Caption = SpinBtn.Value
End Sub

Închidem fereastra în care am introdus codul şi revenim la Design View.


6. Comutăm în modul Form View, introducem 3 000 000 în câmpul corespunzător
preţului de cazare, alegem să servim masa de prânz şi cina, optăm pentru o durată a
sejurului de 7 zile după care apăsăm pe butonul Valoare sejur, moment la care suma
totală de plată ce trebuie plătită pentru întregul sejur se va calcula şi afişa în câmpul
din dreapta butonului.

7. Pentru a putea utiliza formularul şi ulterior, este nevoie să realizăm salvarea acestuia
prin utilizarea opţiunii Save/Save As din meniul File sau prin apăsarea butonului
din bara de instrumente.
47
2.1.6. Combo Box
Formularea problemei
Să se realizeze un formular electronic care să afişeze preţul unui bilet de avion în
funcţie de destinaţia aleasă, conform tabelului:

Destinaţie Preţ
Roma 500 euro
Munchen 700 euro
Paris 1000 euro
Londra 2000 euro

Utilizatorul va alege destinaţia iar formularul va afişa în mod automat preţul


biletului exprimat în euro.

Rezolvare
Prin Combo Box înţelegem un obiect combinat format dintr-o casetă de text şi o
listă. Utilizatorul poate introduce o nouă valoare sau poate alege una din listă. În
exemplul nostru nu se vor putea afişa preţurile biletelor către destinaţii care nu se
regăsesc în listă.

Pentru realizarea formularului electronic vom parcurge următoarea succesiune de paşi:


1. Se creează un nou formular folosind opţiunea Create Form in Design View din
Database Window. În mod echivalent se poate folosi opţiunea Form a meniului Insert
după care se selectează Design View. Accesăm proprietăţile noului formular şi vom
modifica următoarele caracteristici:
a. Caption semnifică textul ce se va afişa în bara ferestrei. Vom introduce Calcul
Pret Bilet Avion
b. Record Selectors se va seta pe No pentru a inhiba afişarea în partea stângă a
ferestrei a unei zone ce permite selectarea înregistrării curente
c. Navigation Buttons se va pune pe No pentru a preveni afişarea numărului
înregistrării curente alături de butoanele de navigare (salt la prima înregistrare,
la precedenta, la următoarea sau la ultima)
d. Dividing Lines se va seta pe No pentru a nu se trasa linia orizontală ce
desparte cele două zone prezentate anterior
2. Daca fereastra ce conţine controalele pe care le putem include în cadrul formularului
nu este activă, atunci va trebui să acţionăm butonul Toolbox ( ) din bara de
instrumente sau să accesăm opţiunea respectivă din meniul View. În acest exemplu

48
vom folosi controlul Combo Box care este simbolizat în fereastra cu instrumente prin
semnul .
3. Apăsăm butonul respectiv după care adăugarea controlului se face prin efectuarea unui
click de mouse în interiorul formularului sau prin glisarea acestuia. Se va deschide o
nouă fereastră numită Combo Box Wizard care ne va ajuta să proiectăm controlul
respectiv prin parcurgerea unei succesiuni de paşi:
a. Vom opta pentru varianta ca valorile controlului să fie introduse de către noi,
după care apăsăm butonul Next

b. Urmează să alegem numărul de valori care vor fi afişate în listă. Vom opta
pentru un număr de două coloane după care vom introduce valorile din tabelul
prezentat în enunţul problemei.

49
c. Dintre toate coloanele pe care le poate conţine controlul, doar una singură va
putea fi afişată atunci când se selectează o anumită valoare din listă. Din acest
motiv vom opta ca această coloană să fie cea care conţine numele destinaţiei,
după care apăsăm butonul Next.

d. Introducem descrierea ce urmează să apară în faţa obiectului de tip Combo


Box după care apăsăm butonul Finish.

50
Prin intermediul ferestrei de proprietăţi vom numi acest obiect Dest. După
poziţionarea corectă şi redimensionarea acestuia, formularul obţinut ar trebui să fie
asemănător cu cel din imaginea următoare.

4. Adăugăm Text Box-ul în care se va afişa valoarea biletului pentru ruta selectată.
Proprietăţile Text Box-ului vor fi modificate astfel încât numele controlului să fie Pret
(proprietatea Name). În dreapta acestuia se va insera un Label în care vom trece
moneda în care este exprimată valoarea respectivă.

51
5. Ori de câte ori se schimbă destinaţia selectată, formularul va trebui să afişeze valoare
biletului în câmpul Preţ. Pentru aceasta va fi nevoie să adăugăm cod Visual Basic
pentru evenimentul On Change asociat controlului de tip Combo Box. Deschidem
fereastra cu proprietăţile obiectului, ne deplasăm în secţiunea Event iar de acolo
alegem evenimentul On Change. Selectăm elementul numit [Event Procedure] şi
apăsăm pe butonul din dreapta acestuia( ).

6. În fereastra ce apare va trebui să introducem codul următor care va prelua preţul


biletului din controlul de tip Combo Box şi îl va afişa în câmpul corespunzător.

Private Sub Dest_Change()


If Not IsNull(Dest.Column(1)) Then
Pret.SetFocus
Pret.Text = Dest.Column(1)
End If
End Sub

Datorită faptului ca nu cunoaştem preţurile decât pentru biletele pe rutele definite în


tabelul de la formularea problemei, codul Visual Basic introdus mai întâi verifică
dacă selecţia curentă este una validă şi în caz afirmativ va afişa valoarea biletului.
Închidem fereastra în care am adăugat codul şi revenim la Design View.
52
7. Pentru a vedea felul în care se comportă formularul nostru va trebui să comutăm pe
Form View după care vom alege o destinaţie din listă. Preţul biletului va fi afişat în
câmpul Pret de pe rândul următor.

Dacă însă se încearcă introducerea unei destinaţii inexistente, Microsoft Access va


genera un mesaj de eroare.

8. Pentru a putea utiliza şi ulterior formularul astfel creat este nevoie să efectuăm salvarea
acestuia prin utilizarea opţiunii Save/Save As din meniul File sau prin apăsarea
butonului din bara de instrumente.

Observaţie:
Dacă am dori ca datele să nu fie introduse de către noi ci să fie luate din baza de date
folosind un tabel/interogare atunci la pasul 3a va trebui să alegem prima opţiune care
ne este pusă la dispoziţie, după care vom selecta elementul dorit (numele tabelului sau
interogării), câmpurile care să apară în listă, dimensiunea fiecărei coloane şi
descrierea ce va însoţi controlul.

2.1.7. List Box


Formularea problemei
Să se modifice formularul anterior astfel încât selecţia destinaţiei să se facă dintr-
o listă de opţiuni prin folosirea click-ului dublu.

Rezolvare
Vom înlocui Combo Box-ul din exemplu anterior cu un control de tip List Box
care ne va pune la dispoziţie o listă derulantă de opţiuni.

53
În continuare vor fi descrişi paşii ce vor fi urmaţi pentru rezolvarea problemei:
1. Se salvează formularul anterior sub o nouă denumire. În fereastra bazei de date se
execută click dreapta pe formularul creat anterior şi se alege opţiunea Save As.
Introducem un nou nume pentru formular după care apăsăm butonul OK. Această
copie va fi modificată pentru a se ajunge la forma propusă în enunţul problemei.
2. Se şterge controlul de tip Combo Box prin selectarea acestuia cu mouse-ul urmată de
apăsarea tastei Del.
3. Se adaugă controlul de tip List Box prin apăsarea butonului corespunzător din
fereastra cu instrumente ( ) urmată de glisarea mouse-ului sau de executarea unui
click în interiorul formularului. Se va deschide o fereastra numită List Box Wizard în
cadrul căreia va trebui să parcurgem aceiaşi paşi ca la exemplul anterior: alegerea
modului de completare a listei, specificarea numărului dorit de coloane, indicarea
coloanei returnate şi a descrierii ce va însoţi lista. După parcurgerea acestor paşi,
controlul de tip List Box se va regăsi în cadrul formularului. Folosind fereastra de
proprietăţi vom da obiectului numele Dest după care vom repoziţiona şi redimensiona
Text Box-ul destinat afişării valorii biletului de avion selectat.

.
4. De fiecare dată când utilizatorul execută click dublu de mouse pe o destinaţie din listă,
preţul biletului pentru ruta respectivă va trebui să fie afişat pe rândul următor. Pentru
aceasta vom adăuga câteva linii de cod Visual Basic pe evenimentul On Dbl Click al
listei. Deschidem fereastra cu proprietăţile obiectului, ne deplasăm în secţiunea Event
iar de acolo alegem evenimentul On Dbl Click. Selectăm elementul numit [Event
Procedure] şi apăsăm pe butonul din dreapta acestuia( ).

54
5. În fereastra ce apare vom introduce următoarele linii de cod care vor avea ca efect
afişarea preţului biletului pentru destinaţia selectată din listă.

Private Sub Dest_DblClick(Cancel As Integer)


Pret.SetFocus
Pret.Text = Dest.Column(1)
End Sub

După introducerea codului vom închide fereastra respectivă şi vom comuta în modul
Form View pentru a vedea cum funcţionează formularul electronic proiectat.

6. Pentru a putea utiliza şi ulterior formularul astfel creat este nevoie să efectuăm salvarea
acestuia prin utilizarea opţiunii Save/Save As din meniul File sau prin apăsarea
butonului din bara de instrumente.

Observaţie:
Dacă am dori ca datele din listă sa nu fie introduse de către noi ci să fie luate din baza
de date folosind un tabel/interogare atunci la pasul 3 va trebui să alegem prima
opţiune care ne este pusă la dispoziţie de către List Box Wizard, după care vom
selecta elementul dorit (numele tabelului sau interogării), câmpurile care să apară în
listă, dimensiunea fiecărei coloane şi descrierea ce va însoţi controlul.
55
2.2 Formulare asociate tabelelor Access
Formularea problemei
Să se proiecteze un formular care să permită consultarea tabelei Angajati şi
actualizarea conţinutului acesteia – adăugare, modificare şi ştergere înregistrări. Se
presupune că tabela are următoarea structură: MARCA, NUME, PRENUME, VARSTA,
VECHIME, SALARIU şi că este deja populată cu înregistrări.

Rezolvare
Formularele sunt ferestre folosite în scopul interogării şi actualizării datelor din
tabelele bazei de date. Înregistrarea a cărei date sunt afişate în cadrul formularului la un
moment dat se numeşte înregistrare curentă. Valorile afişate pot fi modificate de către
utilizator iar aceste schimbări se vor reflecta direct în cadrul tabelei pe baza căreia a fost
realizat formularul. Folosind butoanele de navigare putem trece la prima înregistrare a
tabelului, la cea anterioară/următoare sau la ultima înregistrare. Ultimul buton din lista ne
dă posibilitatea adăugării unei noi înregsitrări. Ştergerea se poate face direct din formular
folosind tasta Del după ce în prealabil am selectat înregistrarea dorită.

În rezolvarea problemei propuse vom pleca de la presupunerea că tabela Angajati


există deja şi că aceasta este populată cu înregistrări. Fereastra care se deschide atunci
când accesăm opţiunea Form a meniului Insert ne pune la dispoziţie mai multe variante
cu ajutorul cărora putem realiza formularul cerut.

Varianta 1
Selectăm opţiunea numită Design View şi alegem tabela Angajati ca sursă de date
pentru viitorul formular.

După apăsarea butonului OK, noul formular va fi deschis în Design View şi alături
de acesta se va afişa şi o fereastră ce conţine câmpurile tabelei Angajati. Selectăm toate
câmpurile acesteia după care tragem cu mouse-ul aceste câmpuri în cadrul formularului.

56
Dacă nu dorim ca formularul să afişeze toate câmpurile tabelei atunci putem
selecta doar câmpurile dorite din lista care ne este pusă la dispoziţie.

Comutăm în modul Form View iar formularul ce va fi afişat ar trebui să fie


asemănător cu cel prezentat în figura următoare.

Formularul va afişa valorile ce se află în câmpurile tabelei pentru înregistrarea


curentă. Numărul acesteia ne este indicat în partea inferioară a ferestrei, alături de
butoanele ce pot fi folosite pentru trecerea la o nouă înregistrare. Butonul aflat în extrema
dreaptă poate fi utilizat pentru adăugarea unei noi înregistrări.
Valorile afişate în cadrul formularului pot fi modificate de către utilizator iar
aceste schimbări se vor salva automat în baza de date.
Zona din partea stângă a formularului este folosită pentru selectarea înregistrării
curente. Apăsarea tastei Del va avea ca efect ştergerea respectivei înregistrări. Tot pentru
57
ştergerea înregistrării curente se mai pot folosi opţiunile Delete şi Delete Record ale
meniului Edit.
Utilizatorul poate reveni în Design View pentru a schimba proprietăţile
formularului şi ale obiectelor afişate în cadrul acestuia. Text Box-urile pot fi
redimensionate şi repoziţionate, textul ce apare în bara ferestrei poate fi schimbat, etc.
După efectuarea tuturor modificărilor şi validarea rezultatelor folosind modul de
vizualizare Form View, formularul ar trebui salvat astfel încât să fie posibilă utilizarea lui
ulterioară.

Varianta 2
Alegem varianta numită Form Wizard, ca în figura următoare.

Urmează să parcurgem o succesiune de paşi, la fiecare dintre aceştia vom fi


invitaţi să specificăm o serie de informaţii iar pe baza acestora Microsoft Access va
genera în mod automat formularul dorit. Trecerea la pasul următor se realizează cu
ajutorul butonului Next, revenirea la cel anterior se face prin folosirea butonului Back.
Utilizând butonul Finish, utilizatorul poate opta pentru finalizarea procesului de creare
automată a formularului chiar dacă nu au fost parcurşi toţii paşii respectivi. Apăsarea
butonului Cancel atrage după sine închiderea ferestrei fără generarea formularului.
La primul pas suntem invitaţi să indicăm câmpurile tabelei Angajaţi pe care dorim
să le includem în formular. Câmpurile alese vor fi mutate în partea dreaptă. Folosind
butoanele <, <<, >, >> putem selecta/deselecta câmpul curent sau toate câmpurile afişate.

58
Urmează să specificăm modul de dispunere a câmpurilor selectate în cadrul
formularului. Putem alege una dintre opţiunile următoare:
- Columnar – fiecare câmp apare pe o linie separată având în partea
stângă numele acestuia iar formularul va afişa la un moment dat doar
valorile aferente înregistrării curente
- Tabular – numele câmpurilor apare o singură dată în capătul de sus al
formularului iar valorile asociate pentru fiecare înregistrare sunt afişate
pe linii
- Datasheet – datele sunt afişate sub forma unei foi de calcul tabelar iar
utilizatorul va vizualiza mai multe înregistrări în acelaşi timp
- Justified – valorile corespunzătoare înregistrării curente sunt afişate
unele după altele pe linii succesive

59
În continuare vom opta pentru unul din stilurile de afişare care ne sunt puse la
dispoziţie.

60
La ultimul pas vom alege un nume pentru formularul nou creat sau îl vom accepta
pe cel propus în mod implicit. Apăsarea butonului Finish atrage după sine crearea,
salvarea şi afişarea în modul Form View a formularului respectiv.

În partea inferioară a ferestrei sunt afişate numărul înregistrării curente şi numărul


total de înregistrări conţinute de către tabela Angajati. Tot acolo se găsesc şi butoanele de
navigare care ne ajută să ne deplasăm către o altă înregistrare sau să adăugăm noi valori.
Utilizatorul poate reveni în Design View pentru a schimba proprietăţile
formularului şi ale obiectelor conţinute de către acesta.

Varianta 3
Prin alegerea uneia dintre opţiunile AutoForm: Columnar, AutoForm: Tabular
sau AutoForm: Datasheet, formularul va fi creat în mod direct, fără a mai fi necesară
parcurgerea unor paşi suplimentari.
Astfel, dacă optăm pentru varianta AutoForm: Tabular, formularul pe care îl vom
obţine va fi asemănător cu cel din figura următoare.

În partea inferioară a ferestrei avem zona de navigare care ne dă informaţii despre


numărul înregistrării curente şi despre numărul total de înregistrări ce sunt conţinute de
către tabela Angajati. Putem folosi butoanele din această zona pentru a ne deplasa pe o
61
nouă înregistrare. Înregistrarea curentă este marcată cu un semn special în zona din
stânga (semnul ). Pe ultima linie se găseşte o înregistrare goală care poate fi folosită
pentru adăugarea de noi valori. Această înregistrare este marcată în partea stângă prin
semnul .
Utilizatorul poate comuta în modul Design View pentru a schimba proprietăţile
formularului şi ale obiectelor afişate în cadrul acestuia. Salvarea formularului face
posibilă utilizarea ulterioară a acestuia.

Varianta 4
Opţiunea Chart Wizard ne dă posibilitatea obţinerii unui formular care să conţină
un grafic realizat pe baza datelor conţinute de către tabela selectată.

Graficul doar afişează valorile câmpurilor tabelei în forma dorită de noi,


modificarea acestora nefiind posibilă. Pentru obţinerea graficului, utilizatorul va trebui să
parcurgă integral sau parţial paşii wizard-ului.

62
Proprietăţile formularului şi ale obiectelor conţinute vor putea fi ulterior
modificate prin comutarea în modul Design View.

2.3 Probleme propuse


1) Să se proiecteze un formular cu ajutorul căruia să se calculeze valoarea stocului final
de produse finite pe baza stocului iniţial, a intrărilor şi a ieşirilor realizate în cursul
unei anumite perioade calendaristice.
2) Să se realizeze un formular care calculează valoarea lunară de amortizat pentru un
mijloc fix. Utilizatorul va introduce valoarea mijlocului fix şi durata normală de
utilizare iar formularul va afişa valoarea ce trebuie plătită lunar folosind metoda de
amortizare liniară.
3) Să se proiecteze un formular pentru realizarea unei comenzi. Utilizatorul va introduce
preţul unitar al produsului, cantitatea solicitată, va alege cota de TVA aferentă iar
formularul va calcula în mod automat valoarea comenzii.
4) Să se calculeze, folosind un formular, preţul de vânzare al unui autovehicul plecând
de la preţul pentru versiunea de bază la care se adaugă valoarea elementelor opţionale
achiziţionate. Acestea vor apărea sub formă de căsuţe de validare iar utilizatorul va
putea să le bifeze/debifeze pentru a desemna varianta pe care doreşte să o cumpere.
5) Să se construiască un formular destinat activităţii de închiriere materiale video.
Utilizatorul va introduce numărul de casete video solicitate de către client, numărul
de DVD-uri şi perioada pe care se realizează închirierea, exprimată în număr de zile.
Formularul va calcula în mod automat suma pe care clientul o are de plătit ştiind ca
tariful perceput pentru închirierea unei casete video este de 50 000 lei pe zi, iar pentru
DVD-uri de 100 000 lei pe zi. După finalizarea operaţiunii utilizatorul va trebui să
aibă la dispoziţie un buton cu ajutorul căruia să şteargă datele introduse pentru
clientul anterior.
6) Să se proiecteze un formular destinat pentru a fi utilizat într-o staţie de benzină.
Acesta va fi utilizat pentru a calcula şi afişa suma pe care clientul o are de plătit
ţinând cont de tipul de combustibil folosit şi de cantitatea achiziţionată.
7) Să se realizeze un formular care să conţină lista departamentelor unui magazin
universal. Atunci când utilizatorul selectează un departament, formularul va trebui să
afişeze codul asociat acestuia.
8) Să se construiască un formular în care să se calculeze venitul net al unui angajat
plecând de la salariul brut din care se scad contribuţiile la asigurările sociale, sănătate
şi şomaj, toate acestea fiind exprimate procentual.
9) Să se calculeze valoarea lunară ce se recuperează prin amortizarea accelerată a unui
mijloc fix. Valoarea acestuia şi durata de utilizare se introduc de către utilizator iar
formularul va afişa suma ce se recuperează lunar în primul an şi cea aferentă anilor
care urmează.
10) Să se proiecteze un formular care să afişeze prima de asigurare CASCO ce trebuie
plătită de către posesorul unui autovehicul. Pentru maşinile indigene se aplică un
procent de 4% din valoarea maşinii, iar pentru cele străine procentul creşte la 6%. De
asemenea clientul mai poate primi şi o reducere de până la 10% în funcţie de valoarea
daunelor pe care le-a înregistrat în anul precedent.

63
3. Rapoarte

3.1 Probleme propuse


Să se tipărească la imprimantă lista angajaţilor grupaţi pe funcţii. Persoanele din
interiorul grupurilor vor fi ordonate alfabetic după nume. Se vor folosi înregistrările din
tabela Angajati.

Rezolvare
Rapoartele sunt obţinute pe baza prelucrării datelor din tabele şi sunt destinate
exclusiv pentru a fi tipărite pe ecran şi/sau la imprimantă. Datele pot fi ordonate şi
grupate după diverse criterii înainte de a fi incluse în cadrul raportului iar la nivelul
grupurilor se pot calcula statistici.
În rezolvarea problemei propuse vom pleca de la presupunerea că tabela Angajati
există deja şi că aceasta este populată cu înregistrări.

Pentru realizarea unui raport avem la dispoziţie mai multe variante care sunt
incluse în cadrul ferestrei ce se deschide prin accesarea opţiunii Report a meniului Insert.

Varianta 1
Opţiunea Design View ne permite crearea manuală a unui raport. Din fereastra ce
conţine lista câmpurilor tabelei vom selecta întregul conţinut după care vom trage aceste
elemente în cadrul raportului folosind mouse-ul.

64
Pentru a realiza ordonarea, gruparea sau sumarizarea datelor va trebui să folosim
opţiunea care se găseşte în meniul View şi care apare şi în cadrul
meniului contextual declanşat de apăsarea butonului drept al mouse-ului. În fereastra ce
apare ca urmare a accesării opţiunii respective vom putea specifica ordinea de sortare a
informaţiilor afişate în raport şi eventualele criterii de grupare. Astfel, dacă vom dori ca
gruparea datelor să se facă după câmpul Functie iar ordonarea acestora în cadrul
grupurilor să se realizeze în ordine alfabetică atunci conţinutul ferestrei Sorting and
Grouping ar trebui să fie asemănător cu cel din imaginea următoare.

Pentru a vedea felul în care arată raportul astfel creat va trebui să comutăm în
modul Print Preview (butonul din bara de instrumente sau din meniul contextual).

65
Pentru a modifica aspectul raportului sau proprietăţile obiectelor conţinute, va
trebui să comutăm pe modul Design View. Raportul astfel obţinut va trebui salvat dacă se
doreşte utilizarea ulterioară a acestuia.

Varianta 2
Dacă nu dorim crearea manuală a raportului atunci putem apela la opţiunea
numită Report Wizard care ne va pune la dispoziţie o serie de paşi la finalul cărora
raportul va fi generat în mod automat.

Trecerea la pasul următor se realizează cu ajutorul butonului Next, revenirea la cel


anterior se face prin folosirea butonului Back. Utilizând butonul Finish, utilizatorul poate
66
opta pentru finalizarea procesului de creare automată a raportului chiar dacă nu au fost
parcurşi toţii paşii respectivi. Apăsarea butonului Cancel atrage după sine închiderea
ferestrei fără generarea raportului.
La primul pas va trebui să indicăm câmpurile tabelei Angajati care vor fi incluse
în cadrul raportului. Câmpurile alese vor fi mutate în partea dreaptă. Folosind butoanele
<, <<, >, >> putem selecta/deselecta câmpul curent sau toate câmpurile afişate.

Urmează să specificăm criteriile de grupare dorite. Aşa cum apare formulat în


cerinţele problemei cerinţele problemei, datele afişate în raport vor trebui grupate la
nivel de funcţie. Selectăm câmpul respectiv, apăsăm butonul > iar rezultatul obţinut va fi
cel din figura următoare.

67
La pasul următor vom indica criteriile de sortare ce vor fi aplicate datelor afişate
în raport. În cadrul unui grup, angajaţii vor fi ordonaţi alfabetic după nume şi prenume,
conform enunţului problemei.

68
Butonul Summary Options ne ajută să specificăm ce valori dorim să includem pe
sumarul fiecărui grup şi modul în care să fie afişate aceste informaţii.
După apăsarea butonului Next suntem invitaţi să alegem modul de dispunere a
câmpurilor în interiorul formularului. Tot aici putem modifica orientarea paginii dacă
conţinutul raportului impune acest lucru.

Microsoft Access ne pune la dispoziţie mai multe stiluri de formatare a


elementelor raportului din care îl vom alege pe cel care se potriveşte cel mai bine cu
conţinutul acestuia.

69
Ultimul pas implică alegerea unui nume pentru raportul ce va fi creat în mod
automat şi care va fi folosit pentru salvarea acestuia. Putem accepta varianta propusă sau
putem opta pentru o altă denumire. După apăsarea butonului Finish raportul va fi afişat
pe ecran în modul Print Preview.

70
Utilizatorul poate reveni în modul Design View dacă doreşte să modifice aspectul
raportului sau proprietăţile obiectelor conţinute.

Varianta 3
Alegerea uneia dintre variantele AutoReport atrage după sine crearea imediată a
raportului, fără a mai fi necesară parcurgerea altor paşi suplimentari.
Astfel, dacă se alege varianta AutoReport: Columnar atunci vom obţine un raport
de forma celui din figura următoare.

Varianta AutoReport: Tabular va conduce către obţinerea raportului următor.

71
Varianta 4
Opţiunea Chart Wizard ne dă posibilitatea obţinerii unui raport care să conţină un
grafic realizat pe baza datelor conţinute în tabela selectată. Pentru obţinerea graficului,
utilizatorul va trebui să parcurgă integral sau parţial paşii wizard-ului.

Proprietăţile raportului şi ale obiectelor conţinute vor putea fi ulterior modificate


prin comutarea în modul Design View.

72
Varianta 5
Înregistrările din tabela Angajati pot fi folosite pentru obţinerea de etichete. Acest
lucru este posibil cu ajutorul opţiunii Label Wizard prin parcurgerea paşilor propuşi.

3.2 Probleme propuse


1) Să se realizeze un raport care să afişeze lista angajaţilor grupaţi după vârstă şi
ordonaţi după valoarea salariului.
2) Să se modifice raportul anterior astfel încât lista angajaţilor să fie grupată după vârstă
şi după profesie iar ordonarea înregistrărilor să se realizeze descrescător după
cuantumul salariului.
3) Să se afişeze lista alfabetică a angajaţilor care au o vechime mai mare de 10 ani.
4) Să se creeze un raport care să conţină situaţia facturilor emise şi neîncasate grupate la
nivel de beneficiari şi ordonate calendaristic.
5) Să se tipărească lista clienţilor rău platnici ordonaţi descendent după suma datorată.
6) Să se proiecteze un raport care să afişeze sumele lunare aferente amortizării liniare a
unui mijloc fix. Datele din raport vor fi ordonate cronologic şi vor fi grupate la nivel
de an.
7) Să se afişeze lista mijloacelor fixe care nu au fost amortizate complet. Datele din
raport vor fi grupate după anul achiziţiei si vor fi ordonate după numele mijlocului
fix. La nivelul fiecărui grup se vor afişa valoarea medie, minimă şi cea maximă a
sumei recuperate până la momentul de faţă.
8) Să se obţină situaţia stocului de materii prime şi materiale. Pentru fiecare element se
va afişa valoarea actuală a stocului, limita minimă acceptată şi data următoarei
comenzi de aprovizionare ce va fi lansată. Informaţiile vor fi ordonate ascendent după
valoarea stocului iar gruparea datelor se va realiza în funcţie de procesul de producţie
la care participă respectivele materiale.
9) Să se tipărească graficul evoluţiei cursului de schimb leu-euro pe anul în curs.
10) Să se realizeze un raport care să tipărească etichete cu adresele angajatilor.

73
4. Interogări

4.1 Probleme propuse

1. Folosind baza de date de la capitolul 1.1, sa se realizeze o interogare care să afişeze


toate notele studentului al cărui nume este “Tasica”.

Rezolvare:

Această problemă se poate rezolva uşor folosind o facilitate a produsului Micrososft Access
numită query sau interogare. În Access, ca in orice sistem de gestiune a bazelor de date,
interogările se realizează cu ajutorul unui limbajului SQL. Fiind un produs pentru
nespecialişti, Microsoft Access pune la dispoziţia utilizatorului o interfaţă care ascunde
detaliile tehnice legate de limbajul SQL utilizatorul putând realiza interogări fără ca sa
cunoască acest limbaj.
Pentru a realiza un query este nevoie sa se intre in zona de lucru a query-urilor
efectuând click pe butonul Queries aflat in panoul dreapta a ferestrei Database.

Pentru a crea un query, recomandăm folosirea opţiunii Create query by using wizard care este
cel mai uşor de folosit.

Efectuand dublu click pe aceasta optiune apare fereastra de mai jos:

74
Se selectează tabela dorită, în cazul nostru „studenţi”, din care se includ in query campurile
nume si prenume. Aceasta operatie se realizeaza efectuand click pe butonul cu semnul “>”
pentru fiecare camp in parte.

După aceea se selctează tabela „note”, din care se includ in query câmpurile nota si data.

75
Apoi alegem denumirea din tabela „materii”.

In acest moment se apasă butonul Next.

76
Fereastra de mai sus întreabă utilizatorul dacă doreşte o interogare detaliată sau una de tip
rezumat. Recomandăm să folosim opţiunile implicite si să se apesăm butonul Next ca să
ajungem la pasul Finish.

Apăsând Finish, pe ecran o să apară rezultatele execuţiei cererii. În cazul nostru, vor fi afiăate
notele pentru toţi studenţii.

77
Pentru a restricţiona căutarea la codul unui anumit student, va trebui să modificăm interogarea
alegând opţiunea Design View din meniul de context care se obţine efectuând click dreapta pe
numele interogării.

In continuare restricţionăm query-ul la studenţii cu numele de “Tasica”. Acest lucru se face


scriind “Tasica” in zona de Criteria de sub nume.

78
Putem sa vizualizăm codul SQL generat in mod automat de interfaţa grafica efectuând click
dreapta in partea de sus a ferestrei si alegând opţiunea “SQL View”.

Pe ecran va apărea codul SQL corespunzător.

Adică:

SELECT studenţi.nume, studenti.prenume, note.nota, note.data, materii.denumire


FROM studenti INNER JOIN (materii INNER JOIN [note] ON materii.ID = note.id_mat) ON
studenti.ID = note.id_stud
WHERE (((studenti.nume)="Tasica"));

Nu vom insista asupra semnificaţiei termenilor de mai sus deoarece depăşesc cadrul acestei
lucrări. Trecând peste majoritatea elementelor, se observa ca exista o clauza “WHERE” care
pune condiţia de selectare a înregistrărilor din tabele. Schimbând condiţia de aici se modifica
si înregistrările selectate de query. Spre exemplu da în loc de “Tasica” scriem “Ion” şi pe
ecran va apare:

79
Se pot face chiar şi modificări mai complexe, cum ar fi să cerem numele de la tastatura. Dacă
scriem in loc de “Tasica” un cuvant oarecare, fără să fie încadrat de ghilimele şi fără să
conţină spaţii, atunci sistemul va solicita de la tastatura o valoare. Sub formă de parametru
Spre exemplu putem modifica interogarea astfel:

SELECT [studenti].[nume], [studenti].[prenume], [note].[nota], [note].[data],


[materii].[denumire]
FROM studenti INNER JOIN (materii INNER JOIN [note] ON
[materii].[ID]=[note].[id_mat]) ON [studenti].[ID]=[note].[id_stud]
WHERE ((([studenti].[nume])=Dati_numele));

In acest caz ni se va solicita să scriem numele, de la tastatură, după care interogarea se va


executa pentru valoarea respectivă.

2. Se dă o firmă care vinde diferite produse. Produsele sunt livrate clienţilor


conform contractelor. Orice contract poate să cuprindă mai multe produse, dar un
contract poate fi încheiat cu un singur client.
După definirea datelor şi normalizarea lor până în FN3 (forma normală 3), se poate
construi o bază de date cu patru tabele:

• Tabelul clienti, cu informaţii despre clienţii firmei, cu care sau negociat diferite contracte:

80
• Tabelul produse, care cuprinde date referitoare la produsele comercializate de firmă:

• Datele referitoare la contracte trebuie împărţite în două tabele, ca cerinţă a normalizării


(necesară pentru a aduce datele în forma normală doi) : există o dependenţă parţială între
contract_id şi client_id, astfel ultimul nu poate face parte din tabelul contracte. (la fel şi
cu data livrării – data_liv). Aceste două câmpuri sunt dependente doar de contract_id, nu
şi de cheia compusă din tabelul contracte. Se crează astfel un tabel adiţional:
contract_info:

81
82
Următorul pas este crearea legăturilor dintre tabele:

• Cu un client se pot încheia mai multe contracte, astfel relaţia dintre tabelele clienţi şi
contr_info este de unu - la mai – mulţi.
• Un contract poate cuprinde mai multe produse, pentru fiecare combinaţie contract –
produs se crează o linie nouă în tabelul contracte. Fiecare produs figurează însă o singură
dată în tabelul produse. Astfel relaţia dintre tabelele produse şi contracte este de unu - la
mai – mulţi.
• La fel este şi cea dintre contr_info şi contract. Un contract este prezent o singură dată în
tabelul contr_info, şi de mai multe ori în tabelul contracte, datorită faptului, că un contract
poate conţine mai multe produse de livrat.

Access oferă diferite posibilităţi de realizare a interogărilor (queries)

• Crearea pas cu pas prin Design View


• Crearea cu vrăjitorul (Wizard)
• Introducerea directă a comenzilor SQL în SQL View

83
Să realizăm în continuare o suită de interogări, de exemplu:

1. Să se afişeze toţi clienţii firmei

• se lansează vrăjitorul
• din lista cu tabele se selectează tabelul clienţi
• din lista available fields se aleg câmpurile client_nume şi client_adresa
• se apasă pe butonul finish
• din lista interogărilor existente se alege interogarea creată şi se deschide prin dublu
clic

2. Să se determine acele produse, care apar cu mai mult de 10 bucăţi în vreun contract. Să se
afişeze şi identificatorul contractului respectiv.

• se lansează utilitarul de construcţie a interogărilor (design view)


• se adaugă tabelele produse şi contracte
• se specifică coloanele dorite din cele două tabele
• se fixează condiţia, ca pentru fiecare produs din contract numărul de bucăţi livrate să
fie mai mare decât zece ( buc > 10 )
84
• comanda SQL aferantă interogării este ( afişabilă în SQL View ):

SELECT produse.produs_nume, produse.produs_pret, contracte.buc, contracte.contract_id


FROM produse INNER JOIN contracte ON produse.produs_id = contracte.produs_id
WHERE (((contracte.buc)>10));

• dacă se doreşte doar numele produselor, care apar în vreun contract cu caracteristica
buc > 10, fără a cere şi contractul în care figurează, se poate afişa doar numele
produselor, o singură dată. În cazul precedent un produs poate să apară de mai multe
ori, în funcţie de numărul de contracte în care apare

SELECT distinct(produse.produs_nume) FROM produse INNER JOIN contracte ON


produse.produs_id = contracte.produs_id WHERE (((contracte.buc)>10));

• se execută interogarea prin alegerea opţiunii Run din meniul Query

3. Să se determine numărul total al contractelor încheiate de firmă

• se calculează numărul liniilor din tabelul contr_info. Aici apare fiecare contract, însă
doar într-o singură linie
• se lansează utilitarul de construcţie a interogărilor (design view)
• se execută clic – dreapta în cadrul ferestrei apărute, şi se alege SQL View
85
• se introduce comanda SQL, care returnează numărul contractelor înregistrate în tabelul
contr_info
• se alege din meniu comanda Run, pentru a executa interogarea
• în fereastra SQL View, interogarea arată astfel:

4. Să se afişeze toate informaţiile disponibile despre clienţii acelor contracte, care se livrează
înainte de 10 august 2004

• pentru această interogare avem nevoie de două tabel: contr_info, pentru a afla data
livrării, şi de clienţi, pentru a prelua datele necesare despre clienţi
• se adaugă tabelele produse şi contracte în Design View
• se selectează câmpurile client_nume, client_adresa, contract_id, data_liv
• se fixează condiţia pentru data_liv: < 4.08.2004

86
• Comanda SQL corespunzătoare este:

SELECT clienti.client_nume, clienti.client_adresa, contr_info.contract_id, contr_info.data_liv


FROM clienti INNER JOIN contr_info ON clienti.client_id = contr_info.client_id WHERE
((contr_info.data_liv)<#8/4/2004#);

• se alege din meniu comanda Run, pentru a executa interogarea

5. Să se afişeze valoarea totală a fiecărui contract care se livrează după 1 iulie 2004

• valoarea totală a unui contract se calculează ca suma înmulţirii dintre produse şi


numărul de bucăţi în care acestea vor fi livrate: câmpurile produs_pret din tabelul
produse, respectiv buc din tabelul contracte
• se apelează la un treilea tabel: contracte, pentru a face legătura necesară
• se adaugă cele trei tabele în Design View
• se selectează câmpurile contract_id, data_liv, iar pentru valoarea totală a unui
contract avem nevoie de o expresie compusă:
sum ( produse.produs_pret * contracte.buc )
• pentru a calcula suma, se grupează toate expresiile în funcţie de contract_id, prin
elementul group by
• se fixează condiţia pentru data_liv: < 1.07.2004. Acest câmp nu trebuie afişat, aşa că
nu selectăm opţiune show pentru el
• se alege din meniu comanda Run, pentru a executa interogarea

87
• Comanda SQL corespunzătoare este:

SELECT contr_info.contract_id, sum(produse.produs_pret*contracte.buc) AS valoare


FROM produse INNER JOIN (contr_info INNER JOIN contracte ON contr_info.contract_id
= contracte.contract_id) ON produse.produs_id = contracte.produs_id WHERE
(((contr_info.data_liv)>#7/1/2004#)) GROUP BY contr_info.contract_id;

88
Probleme propuse:

1. Folosind baza de date de la problema din capitolul 1.1, să se afişeze toţi studenţii al
căror prenume este "Andrei".

2. Realizând o interogare asupra bazei de date de la aceeaşi problemă, să se afişeze toate


notele date de profesorul cu numele “Man”.

3. Plecând de la datele din tabela profesori, să se afişeze toate informaţiile existente


despre profesorul cu numele "Dinică".

4. Sa se afişeze toate notele mai mari decât 5 existente în tabela note.

5. Să se afişeze numele tuturor studenţilor care au restante..

6.Să se afişeze toate materiile la care exista restante.

7. Să se afişeze toţi profesorii care au dat note sub cinci.

8. Să se afişeze toţi studenţii al căror cod este egal cu o valoare citită de la tastatura.

9. Să se determine care sunt materiile la care s-au dat note de 10.

10. Să se afişeze studenţii care au obţinut note egale cu cinci.

89
5. Conexiunea la o bază de date de pe un server web

5.1. Probleme rezolvate

Se dă o bază de date Access, care este memorată pe un server în directorul


"C:/bazadedate/". Fişierul corespunzător are numele de "produse.mdb". Baza de date
furnizează date pentru o aplicaţie Web, care se situează tot pe acelaşi server, în directorul
"C:/inetpub/wwwroot/" - locaţia implicită pentru un server Web de tip IIS (Internet
Information Services). Aplicaţia afişează o listă cu produsele (monitoare) oferite de o
firmă, şi orice client poate accesa site-ul prin Internet pentru a obţine informaţiile
necesare. Aplicaţia se conectează la baza de date produse.mdb, efectuează operaţii asupra
acesteia, şi returnează rezultatul în format HTML, care poate fi afişat de către un browser
(de exemplu Internet Explorer).

Baza de date cuprinde un tabel (Tabel1) cu următoarea structură:

90
Primul câmp este un identificator unic pentru fiecare produs, definit ca cheie
primară. Urmează numele produsului, caracteristicile lui, iar apoi preţul în euro.

Tabelul are următorul conţinut:

Se realizează următoarele operaţii asupra bazei de date:

1. Să se afişeze toate produsele oferite de firma respectivă:

• se crează scriptul ASP (Active Server Pages) cu numele produse.asp în


folderul wwwroot (rădacina implicită a serverului IIS)
• se crează obiectul conn care conţine elementele necesare conexiunii la
baza de date
• se conectează la baza de date
• se defineşte query-ul (interogarea sql) în variabila query, care returnează
rezultatele dorite
• se defineşte obiectul rez care va conţine rezultatul returnat (un obiect de
tip recordset)
• se execută interogarea
• se afişează rezultatele sub forma unui tabel HTML
91
Fişierul produse.asp:

<html>
<head><title>lista cu produse</title></head>
<body>
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/bazadedate/firma.mdb"
set rez=Server.CreateObject("ADODB.recordset")
query="SELECT nume_prod, caract, val_prod FROM Table1'"
rez.Open query, conn
%>
<table border="1">
<tr>
<%
for each x in rez.Fields
Response.Write("<th>" & x.name & "</th>")
next
%>
</tr>
<%do until rez.EOF%>
<tr>
<%for each x in rez.Fields%>
<td><% Response.Write(x.value) %></td>
<%next
rez.MoveNext
%>
</tr>
<%loop
rez.close
conn.close
%>
</table>
</body>
</html>

Cu sintaxa for each iterăm printr-o singură linie a rezultatutui din obiectul rez
(de tip recordset). Trecerea la o linie nouă se face prin instruţiunea rez.Next . Balizele
<td>, <tr>, <table> sunt tag-urile HTML care descriu o celulă, un rând , respectiv un
tabel. Fiecare are perechea corespuzătoare de închidere. Simbolurile <% şi %> cuprind
codul ASP, cel care se execută pe server. Clientul, situat la o staţie distantă nu vede decât
balizele HTML şi rezultatul codului ASP, nu şi codul original ASP.
92
În Internet Explorer, rezultatul arată în felul următor:

Afişarea se face deschizând Explorer-ul, apoi tastând în bara de adrese adresa http
a paginii respective (adresa prezentată în acest exemplu este fictivă)

Sursa unei pagini afişate poate fi vizualizată prin alegerea succesivă din meniul
navigatorului Internet Explorer a comenzilor:

View ⇒ Source

93
Sursa afişată va fi următoarea:

De remarcat faptul că nu se vede codul ASP, adică fişierul nu este prezentat în


forma în care se regăseşte pe server. Acest lucru poate fi important în cazul în care
operăm cu informaţii confidenţiale (de exemplu parole).

2. Să se adauge la baza de date încă o linie care să cuprindă următoarele date:

nume: ITSOLAR
caracteristică: C710, 17``, 1280x1024@60Hz
valoare: 94
(primul câmp produs_id va fi adăugat automat de către Access)

Scriptul ASP pentru această operaţie are numele de adauga.asp. Codul este
următor:

<html>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/bazadedate/firma.mdb"
query = "insert into Table1(nume_prod, caract, val_prod)"
94
query = query & “ values (‘ITSOLAR’ , ”
query = query & “ ’ C710, 17, 1280x1024@60Hz ’ , 94) ”
on error resume next
conn.Execute query
if err<>0 then
Response.Write("Eroare la adaugare")
else
Response.Write("Datele s-au adaugat cu succes!")
end if
conn.close
%>
</body>
</html>

Acest script poate fi apelat direct din Explorer (introducând în navigator adreasa
completă a scriptului adauga.asp), sau poate fi creat un formular care îl apelază. Codul
acestui formular este prezentat în continuare:

Fişierul formular.html:

<html>
<body>
<form method="post" action="adauga.asp">
Numele: <input type=”text” name=”nume”/><p/>
Caracteristici: <input type=”text” name=”caract”/><p/>
Pret: <input type=”text” name=”pret”/><p/>
<input type=”submit” value=”Adauga”/>
</form>
</body>
</html>

În cazul acesta, trebuie schimbat şi scriptul ASP, pentru a prelua informaţiile


trimise de formular. Scriptul adauga.asp cel nou va arăta în felul următor:

<html>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/bazadedate/firma.mdb"
query = "insert into Table1(nume_prod, caract, val_prod)"
query = query & “ values ( ”
95
query = query & " ' " & Request.Form("nume") & " ' , "
query = query & " ' " & Request.Form("caract") & " ' , "
query = query & Request.Form("pret") & ")"
on error resume next
conn.Execute query
if err<>0 then
Response.Write("Eroare la adaugare")
else
Response.Write("Datele s-au adaugat cu succes!")
end if
conn.close
%>
</body>
</html>

• se crează obiectul conn care conţine elementele necesare conexiunii la


baza de date
• se conectează la baza de date
• se defineşte query-ul (interogarea sql) în variabila query, care efectuează
adăugarea dorită
• în cazul acesta nu se crează un obiect de tip recordset, pentru că nu
returnăm decăt rezultatul final al operaţiei (eroare sau succes)
• în interogare în loc de valorile directe se folosesc cele preluate din
formular (de exemplu Request.Form("nume") )

Dacă se adaugă datele preluate din formular, trebuie folosită adresa formularului,
nu a scriptului adauga.asp. Acesta din urmă va fi apelat de formular, pentru că am fixat
proprietatea action din cadrul balizei <form>.

Pagina se prezintă astfel:

96
3. Să se şteargă din tabel produsele care au numele Sony:

• se crează obiectul conn care conţine elementele necesare conexiunii la


baza de date
• se conectează la baza de date
• se defineşte query-ul (interogarea sql) care localizează şi şterge din tabel
liniile corespunzătoare produselor Sony

Fişierul sterge.asp:

<html>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/bazadedate/firma.mdb"
query = “ delete from Table1 where nume_prod = ‘SONY’ “
on error resume next
conn.Execute query
97
if err<>0 then
Response.Write("Eroare la stergere")
else
Response.Write("Datele s-au sters cu succes!")
end if
conn.close
%>
</body>
</html>

Şi în acest caz se poate folosi un formular care să specifice valoare de şters:

<html>
<body>
<form method="post" action="sterge.asp">
Numele de sters: <input type=”text” name=”nume”/><p/>
<input type=”submit” value=”Sterge”/>
</form>
</body>
</html>

Formularul se prezintă astfel:

98
Fişierul sterge.asp se prezintă în felul următor:

<html>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/bazadedate/firma.mdb"
query = “ delete from Table1 where nume_prod = ‘ “
query = query & Request.Form("nume") & " ' "
on error resume next
conn.Execute query
if err<>0 then
Response.Write("Eroare la stergere")
else
Response.Write("Datele s-au sters cu succes!")
end if
conn.close
%>
</body>
</html>

99
4. Modificaţi produsul IVORY să aibă numele de SONY:

Fişierul modifică.asp se prezintă în felul următor:

<html>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/bazadedate/firma.mdb"
query = “ update Table1 set nume_prod = ‘SONY’ “
query = query & “ where nume_prod = ‘IVORY’ “
on error resume next
conn.Execute query
if err<>0 then
Response.Write("Eroare la modificare")
else
Response.Write("Datele s-au modificat cu succes!")
end if
conn.close
%>
</body>
</html>

5.2. Probleme propuse

• Să se realizeze un formular pentru exemplul precedent de modificare, care să


trimită la server atât datele de modificat, cât şi noua lor valoare
• Să se creeze o bază de date cu clienţii unei firme. Să se definiească scripturi
ASP care permit modificarea, actualizarea şi extinderea bazei de date

100
Bibliografie:

1. T. Surcel, R. Mârşanu, V. Avram, D. Avram Medii de programare, Ed Tribuna


Economică, Bucureşti 2004

2. V. Avram, T. Surcel, C. Apostol, D. Avram . Birotică profesională, Ed. Tribuna


Economică, Buc. 2003

3. K. Sandor, Access 2000, Editura Albastră, Cluj 2003

4. Fl. Năstase P. Năstase, Tehnologia aplicaţiilor Web , Ed. Economică, Buc. 2002

5. . Forta, SQL Ed Teora, Bucureşti . 2002

101