Sunteți pe pagina 1din 37

Relaţii între tabele

1 Relaţii între tabele........................................................................................................2


1.1 Definirea relaţiilor între tabele.............................................................................4
1.1.1 Definirea grafică a relaţiilor între tabele......................................................6
1.1.2 Definirea programatică a relaţiilor între tabele............................................9
1.2 Crearea unui formular de interogare a mai multe tabele...................................11
1.2.1 Crearea unui formular de interogare în modul Design View....................12
1.2.2 Formatarea tabelei rezultat........................................................................15
1.2.3 Crearea unui formular de interogare cu o aplicaţie vrăjitor.......................15
1.3 Crearea unui formular cu subformulare.............................................................21
1.3.1 Crearea unui formular cu subformulare cu o aplicaţie vrăjitor..................22
1.3.2 Crearea unui formular cu subformulare cu adăugarea manuală a
subformularelor..........................................................................................................25
1.4 Selectarea liniilor din mai multe tabele ce îndeplinesc anumite condiţii..........32
1.5 Probleme propuse..............................................................................................35
1.6 Intrebări de control............................................................................................36

1
1 Relaţii între tabele
O bază de date se compune din mai multe tabele. O tabelă este o structură logică de date
ce conţine informaţii pe care baza de date le reprezintă. Fiecare tabelă are un nume unic.
O tabelă este constituită dintr-un număr de coloane (atribute). Fiecare tabelă are o cheie
primară ce identifică liniile tabelei. Cheia primară poate consta dintr-un singur atribut sau
din mai multe atribute.
O tabelă se poate referi la atributele uneia sau mai multor alte tabele din baza de date.
Acest lucru se face prin cheia externă. Atunci când o tabelă trebuie să se refere la
atributele altei tabele, unul sau mai multe atribute ale tabelei vor conţine cheia externă,
care este cheia primară a tabelei referite. In cele ce urmează vom arăta modul în care se
descriu grafic şi programatic relaţiile între tabele (cum se specifică grafic faptul că un
atribut al unei tabele este cheie externă).
Pentru exemplificare vom utiliza tabelele de mai jos, care descriu proiectele unei
intreprinderi. In fiecare tabelă, atributele ce constituie cheia primară sunt subliniate.
 tabela PROIECTE conţine identificatorul unui proiect ID_PRJ şi numele proiectului,
NUME_PRJ. Atributul ID_PRJ este cheia primară a tabelei,

PROIECTE

ID_PRJ NUME_PRJ
100 Web
200 Clienti
300 Furnizori
400 Personal

 tabela ANGAJATI conţine date despre angajaţii intreprinderii care lucrează la diverse
proiecte. Ea conţine identificatorul angajatului ID_ANG, numele angajatului,
NUME_ANG şi departamentul de care aparţine angajatul, DPT_ANG. Cheia primară
a tabelei este ID_ANG,

ANGAJATI

ID_ANG NUME_ANG DPT_ANG


1290 Popescu Informatica
1295 Ionescu Support
1045 Georgescu Documentare
1192 Vasilescu Informatica
1351 Filipescu Support
1348 Popa Informatica
1284 Nicolae Support
1067 Marinescu Documentare
1095 Gheorghe Informatica

2
 tabela ORE_EXECUTATE conţine orele executate de fiecare angajat pentru un
anumit proiect. Ea conţine identificatorul proiectului, ID_PRJ, identificatorul
angajatului, ID_ANG şi numărul de ore prestate pentru un anumit proiect, ORE.
Cheia primară a tabelei este formată din atributele ID_PRJ şi ID_ANG,

ORE_EXECUTATE

ID_PRJ ID_ANG ORE


100 1290 10
100 1295 8
100 1045 12
200 1192 20
200 1351 15
300 1348 20
300 1284 14
300 1067 12
400 1095 15

 tabela SALARIU conţine salariul pe oră al angajaţilor unui departament. Ea conţine


identificatorul departamentului la care lucrează angajatul, DPT_ANG, şi salariul orar,
SAL_ORA. Cheia primară a tabelei este DPT_ANG.

SALARIU

DPT_ANG SAL_ORA
Informatica 60
Suport 40
Documentare 25

Cheia primară a tabelei SALARIU, DPT_ANG, este cheie externă în tabela ANGAJATI
(coloana DPT_ANG din tabela ANGAJATI).
Proiectarea celor patru tabele este prezentată mai jos. Numele departamentului se va
introduce cu o casetă combinată (Combo Box).

Figura 1. Proiectarea tabelei PROIECTE.

Figura 2. Proiectarea tabelei ANGAJATI.

3
Figura 3. Proiectarea tabelei ORE_EXECUTATE.

Figura 4. Proiectarea tabelei SALARIU.


Relaţiile între tabele sunt de regulă de tipul unul la mai mulţi. Vom spune că între
tabelele A şi B există relaţia unul la mai mulţi dacă unei linii din tabela A îi corespund
mai mulţe linii din tabela B, dar unei linii din tabela B îi corespunde o singură linie din
tabela A. De exemplu, între tabelele SALARIU şi ANGAJATI există o relaţie unul la mai
mulţi.

1.1 Definirea relaţiilor între tabele


Pentru a defini relaţia care există între tabelele ANGAJATI şi SALARIU, (cheia primară
din tabela SALARIU, DPT_ANG este cheie externă în tabela ANGAJATI) se procedează
astfel:
1. se închid toate tabelele deschise,
2. clic pe meniul Tools  Relationship din Figura 5, care produce afişarea ferestrei
Relationships din Figura 7 şi a casetei Show Table din Figura 6; acelaşi efect se
obţine cu clic pe opţiunea Relationships a meniului contextual al casetei Database
sau cu clic pe butonul din bara de instrumente; caseta Show Table se poate afişa
cu clic pe butonul Show Table, , al barei de instrumente sau cu clic pe opţiunea
Show Table al meniului contextual al ferestrei Relationships,

Figura 5. Meniul Tools.

4
Figura 6. Fereastra Show Table.
3. se selectează pe rând tabelele dorite din caseta Show Table şi se adaugă la fereastra
Relationships cu butonul Add. Se inchide caseta Show Table cu clic pe butonul
Close. Figura 7 arată fereastra Relationships cu tabelele adăugate.

Figura 7. Fereastra Relationship cu tabele adăugate.


Odată cu afişarea ferestrei Relationships apare meniul Relationship şi bara de
instrumente devine cea din Figura 8.

Figura 8. Meniurile şi bara de instrumente ale ferestrei Relationship.

5
b) meniul contextual al ferestrei
a) meniul Relationships
Relationships
Tabelul 1. Meniuri la afişarea ferestrei Relationship.
Semnificaţiile opţiunilor acestor meniuri şi a butoanelor corespunzătoare sunt
următoarele:
 opţiunea Show Table şi butonul afişază caseta Show Table,
 opţiunea Show All şi butonul afişază toate tabelele între care există relaţii,
 în cazul unei tabele selectate, opţiunea Show Direct şi butonul afişază şi tabele ce
sunt în relaţii cu tabela selectată,
 opţiunea Hide Table ascunde o tabelă selectată,
 opţiunea Edit Relationship afişază caseta Edit Relationships din Figura 9 cu care se
definesc relaţiile între tabele.

1.1.1 Definirea grafică a relaţiilor între tabele


Pentru a defini o relaţie între atributul cheie primară a unei tabele şi atributul
corespunzător cheie externă în altă tabelă se selectează atributul cheie primară din prima
tabelă şi se trage cu butonul stâng al mousului apăsat peste atributul cheie externă al celei
dea doua tabelă. Menţionăm că cele două atribute nu au, în general, acelaşi nume. In
cazul nostru vom defini relaţia dintre tabelele ANGAJATI şi SALARIU, (coloana
DPT_ANG este cheia primară din tabela SALARIU şi cheie externă în tabela
ANGAJATI). Vom proceda în felul următor:
1. se selectează atributul DPT_ANG în tabela SALARIU unde este cheie primară, şi se
trage cu butonul stâng al mousului apăsat peste atributul DPT_ANG al tabelei
ANGAJATI, unde este cheie externă; se afişază caseta Edit Relationship din Figura 9.
In partea de jos a casetei în secţiunea Relationship Type apare tipul relaţiei, în cazul
nostru unu la mai mulţi.

6
Figura 9. Caseta Edit Relationships după definirea unei relaţii.
2. clic pe butonul Join Type, care afişază caseta Join Properties din Figura 10, unde
butonul 1 corespunde relaţiei unu la mai mulţi; clic pe butonul OK al casetei Join
Properties,

Figura 10. Caseta Join Properties.


3. se marchează opţiunea Enforce Referential Integrity. Integritatea referenţială a
bazei de date nu permite ca într-o tabelă cu un câmp cheie externă să existe o linie în
care cheia externă nu există în tabela primară. In cazul integrităţii referenţiale putem
executa următoarele acţiuni: Cascade Update Related Fields, care atunci când se
modifică un câmp în tabela primară, se modifică valoarea sa în toate tabelele legate şi
Cascade Delete Related Records, care atunci când este ştearsă o linie din tabela
primară, se şterg toate liniile ce se referă la această linie din tabele corespunzătoare,
4. clic pe butonul Create şi relaţia între tabele este creată.

7
Figura 11. Fereastra Relationships cu relaţia între tabele.
Relaţia unul la mai mulţi apare desenată ca în Figura 12.

Figura 12. Relaţie unu la mai mulţi.


Relaţiile între tabele pot fi şterse grafic în felul următor:
1. clic cu butonul drept pe linia ce uneşte cheia primară dintr-o tabelă cu cheia externă
din cealaltă tabelă şi se afişază meniul contextual din Figura 13,
2. clic pe opţiunea Delete.

Figura 13. Stergerea grafică a unei relaţii.


Caseta Edit Relationships din Figura 9 se poate afişa în mai multe feluri:
 cu clic pe opţiunea Edit Relationship a casetei din Figura 13,
 cu clic pe meniul Relationships  Edit Relationship din Figura 14.

Figura 14. Meniul Relationships.

8
După definrea relaţiei între tabelele SALARIU şi ANGAJATI, tabela SALARIU arată ca
în Figura 15.

Figura 15. Tabela SALARIU după definirea realţiei cu tabela ANGAJATI.


In stânga fiecărei coloane există nodul unui arbore cu ramuri către înregistrările din
tabela ANGAJATI ce au ca cheie externă cheia primară a tabelei SALARIU. Un clic pe
nodul respectiv expandează arborele ca în Figura 16, cu toţi angajaţii departamentului
Documentare din tabela ANGAJATI , vezi definiţia tabelei ANGAJATI de mai sus.

Figura 16. Arbore al tabelei SALARIU expandat.

1.1.2 Definirea programatică a relaţiilor între tabele


Relaţiile între tabele se pot crea şi programatic. Pentru aceasta se procedează astfel:
1. se afişază caseta Edit Relationships din Figura 9,
2. clic pe butonul Create New care afişază caseta de dialog Create New din Figura 17,

9
Figura 17. Caseta de dialog Create New.
3. se selectează din lista Left Table Name numele tabelei în care atributul este cheie
primară, în cazul nostru SALARIU,
4. se selectează din lista Left Column Name numele atributului care este cheie primară,
în cazul nostru DPT_ANG,
5. se selectează din lista Right Table Name numele tabelei în care atributul este cheie
externă, în cazul nostru ANGAJATI,
6. se selectează din lista Right Column Name numele atributului care este cheie
externă, în cazul nostru DPT_ANG,
7. se închide caseta Create New cu clic pe butonul OK,
8. se alege tipul relatiei unu la mai mulţi din caseta Join Properties ca mai sus,
9. se marchează opţiunea Enforce referenţial Integrity în caseta Edit Relationships,
10. clic pe butonul OK,
11. clic pe butonul Create al casetei Edit Relationships.

Figura 18. Caseta Edit Relationship afişând relaţiile existente.


De menţionat diferenţa între caseta Edit Relationships din Figura 9 şi cea din Figura 18.
Figura 9 arată caseta Edit Relationships după ce s-a definit o relaţie, grafic sau
programatic, înainte ca relaţia să fie creată. Cele două tabele între care s-a definit relaţia

10
sunt afişate în culoarea gri. Relaţia este creată în baza de date cu clic pe butonul Create.
In acest moment butonul Create se transformă în buton OK vezi Figura 18.
Atunci când baza de date conţine prea multe tabele şi relaţii, fereastra Relationships
devine aglomerată. Putem afişa doar tabelele de interes cu relaţiile între ele. Pentru
aceasta procedăm după cum urmează:
1. se şterg toate tabelele din fereastra Relationships. Clic pe fereastra Relationships şi
apoi pe meniul Edit  Clear Layout sau pe butonul al barei de instrumente,
2. se selectează din caseta Show Table una din tabelele de interes,
3. clic pe meniul Relationships  Show Direct sau butonul şi în fereastră apar
toate tabele ce au relaţii cu tabela selectată, vezi Tabelul 1.

1.2 Crearea unui formular de interogare a mai multe tabele


Vom arăta acum modul de creare a fromularelor de interogare a ami multor tabele între
care există relaţii.
Ca exemplu vom a selecta datele despre angajaţi, ID_ANG, NUME_ANG şi DPT_ANG
din tabela ANGAJATI şi salariul lor orar, SAL_ORA din tabela SALARIU.
Prima formă generală a instrucţiunii SELECT este

SELECT coloana_1, coloana_2, …, coloana_n


FROM tabela_1, …, tabela_k
[WHERE condiţie]
[ORDER BY nume_coloana [ASC | DESC] [, nume_coloana [ASC | DESC] … ]];

Instrucţiunea SELECT corespunzătoare este următoarea

SELECT ANGAJATI.ID_ANG, ANGAJATI.NUME_ANG, ANGAJATI.DPT_ANG,


SALARIU.SAL_ORA
FROM SALARIU, ANGAJATI
WHERE ANGAJATI.DPT_ANG = SALARIU.DPT_ANG;

O altă formă generală a instrucţiunii SELECT ce se poate utiliza când se selectează


coloane din mai multe tabele între care există legături utilizează clauza INNER JOIN.

SELECT coloana_1, coloana_2, …, coloana_n


FROM tabela_1
INNER JOIN tabela_2 ON condiţie_2
INNER JOIN tabela_3 ON condiţie_3
…,
INNER JOIN tabela_k ON condiţie_k
[WHERE condiţie]
[ORDER BY nume_coloana [ASC | DESC] [, nume_coloana [ASC | DESC] … ]];

Forma instrucţiunii în cazul a două tabele este

SELECT nume_coloana_1, nume_coloana_2, …, nume_coloana_k


FROM nume_tabela_1

11
INNER JOIN nume_tabela_2 ON conditie;

In cazul a mai multe tabele, se repetă clauza INNER JOIN pentru câte condiţii este
nevoie. In cazul nostru, instrucţiunea SELECT este cea de mai jos.

SELECT ANGAJATI.ID_ANG, ANGAJATI.NUME_ANG, ANGAJATI.DPT_ANG,


SALARIU.SAL_ORA
FROM SALARIU
INNER JOIN ANGAJATI ON SALARIU.DPT_ANG = ANGAJATI.DPT_ANG;

La crearea unui formular de interogare din mai multe tabele se crează mai întâi
legăturile între tabele.

1.2.1 Crearea unui formular de interogare în modul Design View


Se crează legătura între tabelele ANGAJATI şi SALARIU, cheia primară DPT_ANG a
tabelei SALARIU este cheie externă în tabela ANGAJATI, coloana DPT_ANG.
Proiectarea formularului de interogare se face astfel:
1. în caseta Database se selectează opţiunea Query,
2. clic pe opţiunea Create query in Design View şi se afişază formularul Select Query
din Figura 19 şi caseta Show Table din Figura 20.

Figura 19. Formularul Select Query.

12
Figura 20. Caseta Show Table.
3. se selectează tabelele ANGAJATI şi SALARIU în caseta Show Table şi se adaugă la
formularul de interogare cu clic pe butonul Add; se închide caseta cu butonul Close;
tabelele apar în formularul Select Query ca în Figura 21, cu legăturile între ele,

Figura 21. Formularul Select Query cu tabele selectat.


4. se completează formularul cu coloanele ce trebuie selectate ca în Figura 22; modul de
adăugare a câmpurilor la formular este acelaşi ca la crearea formularelor de interogare
a unei sigure tabele,

13
Figura 22. Formularul completat.
5. se salvează formularul creat cu una dintre opţiunile Save sau Save As ale meniului
File, sau cu butonul Close al ferestrei formularului,

6. se afişază tabela rezultat cu clic pe butonul al barei de instrumente sau pe meniul


Query  Run, sau pe meniul View  Datasheet View sau pe opţiunea Datasheet
View a meniului contextual al formularului.
Tabela rezultat este cea din Figura 23.

Figura 23. Tabela rezultat a formularului din Figura 22.


Instrucţiunea SELECT generată de Access pe baza formularului din Figura 22 este cea
din Figura 24.

14
Figura 24. Instrucţiunea SELECT corespunzătoare formularului din Figura 22.

1.2.2 Formatarea tabelei rezultat


Tabela rezultat a interogării se formatează în acelaşi fel cu tabelele bazei de date. Pentru
formatare se utilizează opţiunile meniului Format din Tabelul 2a. Opţiunile meniului
Format afişază aceleaşi casete de dialog ca şi în cazul tabelor bazei de date.

a) meniul Format b) caseta Column Width


Tabelul 2. Meniul Format.
De exemplu, pentru formatarea unei coloane se procedează astfel. Se selectează coloana a
cărei lăţime trebuie modificată, şi clic pe opţiunea Format  Column Width ce afişază
caseta Column Width. Opţiunea Best Fit dă alege lăţimea optimă a coloanei. Inălţimea
unei linii se modifică asemănător.
Opţiunea Font modifică tipul, stilul şi culoarea fontului coloanel sau liniei selectate.

1.2.3 Crearea unui formular de interogare cu o aplicaţie vrăjitor


Proiectarea unui formular de interogare se poate face şi cu ajutorul unei aplicaţii vrăjitor.
Pentru exemplificare vom utiliza tabelele de mai jos.

CLIENTI

ID_CLIENT NUME PRENUME ADRESA


1253 Ionescu Vasile Craiova
4481 Popescu George Iasi
2396 Georgescu Nicolae Bucuresti
2341 Vasilescu Ioan Timisoara
1956 Nicolae Vasile Cluj

15
COMENZI

ID_COMANDA ID_CLIENT DATA VALOARE


124 4481 1/10/2009 2232
238 1956 12/20/2008 149
331 4481 7/14/2009 3200
214 2396 03/08/2007 844
174 2341 5/14/2009 982
229 4481 11/3/2008 504

Proiectarea celor două tabele este arătată în Figura 25 şi în Figura 26.

Figura 25. Proiectarea tabelei CLIENTI.

Figura 26. Proiectarea tabelei COMENZI.


Etapele creării formularului sunt următoarele:
1. în caseta Database se selectează opţiunea Query,
2. clic pe opţiunea Create query by using wizard care afişază caseta din Figura 27; se
aleg pe rând tabelele dorite din lista Tables/Queries; coloanele fiecărei tabele ce vor
apărea în tabele rezultat se mută în lista Selected Fields cu butoanele ,… ; în
cazul nostru selectăm tabelele CLIENTI şi COMENZI. Nu vom selecta câmpul
ID_CLIENT din tabela COMENZI, deoarece conţine aceleaşi valori ca şi câmpul
ID_CLIENT din tabela CLIENTI; de ce? Clic pe butonul Next şi se afişază caseta din
Figura 28,

16
Figura 27. Pasul I. Crearea unei interogări. Selectarea câmpurilor.

Figura 28. Pasul II. Alegerea tipului interogării.


3. se alege tipul interogării; prima dată se marchează opţiunea Detail (shows every field
of every record); clic pe butonul Next ce afişază caseta din Figura 29,

17
Figura 29. Pasul III. Alegerea titlului interogării.
4. se introduce titlul interogării în caseta What title do you want for your query; se
poate alege între a executa interogarea marcând opţiunea Open the query to view
information şi modificarea interogării marcând opţiunea Modify the query design;
clic pe butonul Next şi se afişază tabela rezultat din Figura 30.

Figura 30. Tabela rezultat.


Instrucţiunea SQL SELECT generată de Access pe baza formularului proiectat este cea
din Figura 31.

Figura 31. Instrucţiunea SELECT generată din formularul proiectat.

18
Putem sumariza rezultatele căutării prin aplicarea unor funcţii de agregare. Pentru aceasta
la pasul II, Figura 28, alegem opţiunea Summary şi obţinem caseta din Figura 32.
3. clic pe Summary Options şi se afişază caseta Summary Options din Figura 33,

Figura 32. Pasul II. Alegerea tipului interogării.


4. se alege funcţia de agregare Sum. Clic OK şi se afişază caseta din Figura 34,

19
Figura 33. Pasul III. Alegerea funcţiei de agregare.

5. se alege modul de grupare a înregistrărilor după datele calendaristice. Clic Finish şi se


afişază tabela rezultat din Figura 35.

20
Figura 34. Pasul IV. Gruparea datelor calendaristice în interogare.

Figura 35. Tabela rezultat.


Instrucţiunea SQL generată din formularul de interogare este cea din Figura 36

Figura 36. Instrucţiunea SQL generată din formularul proiectat.

1.3 Crearea unui formular cu subformulare


In cazul tabelelor între care există relaţii unu la mai mulţi, este posibil să creăm formulare
ce conţin subformulare. Formularul principal afişază datele din partea unu a relaţiei,
subformularul afişază datele din partea mai mulţi a relaţiei. Formularul principal afişază
la un moment dat o linie a tabelei din partea unu a relaţiei, subformularul afişază numai
liniile din tabela din partea mai mulţi a relaţiei legate de linia afişată de formularul
principal.

21
Pentru a exemplifica modul de creare a unui formular cu subformulare vom considera
tabelele CLIENTI şi COMENZI din Figura 25 şi Figura 26, cu informaţii despre clienţii
unei intreprinderi şi comenzile lor. Cheia primară din tabele este subliniată.

1.3.1 Crearea unui formular cu subformulare cu o aplicaţie vrăjitor


Vrem să creăm un formular cu un subformular care, pentru fiecare client, să afişeze
comenzile acestuia. Menţionăm că, atributul ID_CLIENT este cheie primară în tabela
CLIENTI şi cheie externă în tabela COMENZI şi această relaţie a fost creată.
Crearea unui formular cu subformular se face cu următorii paşi :
1. în fereastra Database clic pe opţiunea Forms,
2. clic pe butonul New, ce afişază caseta de dialog New Form,
3. se selectează opţiunea Form Wizard,
4. în prima casetă de dialog a aplicaţiei Form Wizard se selectează tabela CLIENTI şi se
mută câmpurile din această tabelă ce vor apare în formularul principal, vezi Figura
37, (din tabela din partea unu a relaţiei) în lista Selected Fields cu butoanele ,…
. Se va observa că acest pas este identic cu cel de la crearea unei interogări,

Figura 37. Pasul I. Selectarea datelor ce vor apare în formularul principal.


5. se selectează tabela COMENZI şi câmpurile din această tabelă ce vor aparea în
subformular, vezi Figura 38, (din tabela din partea mai mulţi a relaţiei) se mută în lista
Selected Fields cu butoanele ,… . Se va observa că acest pas este identic cu
cel de la crearea unei interogări; clic pe butonul Next,

22
Figura 38. Pasul II. Selectarea datelor ce vor apare în subformular.
6. aplicaţia wizard afişază caseta de dialog din Figura 39; în lista How do you want to
view your data? se alege tabela ce va apare în formularul principal, în cazul nostru se
marchează opţiunea by CLIENTI; se marchează opţiunea Form with subform(s) şi
clic pe butonul Next,

23
Figura 39. Pasul III. Alegerea tabelei ce va apare în formularul principal.
7. se aleg opţiunile dorite din casetele de dialog următoare.
Formularul creat în final este cel din Figura 40, în care, pentru fiecare linie din tabela
CLIENTI, avem afişat în subformular liniile cu comenzi din tabela COMENZI.

Figura 40. Formular cu subformulare în vederea Form.


Acelasşi formular în vederea Datasheet este arătat în Figura 41.

24
Figura 41. Formular subformulare în vederea Datasheet.

1.3.2 Crearea unui formular cu subformulare cu adăugarea manuală a


subformularelor
Al doilea mod de a crea un formular cu subformulare este de a crea un formular cu
aplicaţia vrăjitor pentru tabela CLIENTI şi să adăugăm manual obiectul Subform ce va
conţine a doua tabelă.
Crearea formularului pentru tabela CLIENTI nu este arătată. Formularul se crează ca în
lucrările anterioare. Formularul proiectat de aplicaţia vrăjitor este cel din Figura 42, iar
proiectarea este cea din Figura 43.

Figura 42. Formularul creat de aplicaţia vrăjitor.

25
Figura 43. Proiectarea formularului creat de aplicaţia vrăjitor.
Adăugarea obiectului subformular se face astfel:
1. se afişază caseta Toolbox din Figura 44 cu clic pe butonul Toolbox , al barei de
instrumente,

Figura 44. Caseta Toolbox.


2. se inserează obiectul Subform din caseta Toolbox. Clic pe butonul Subform, , din
caseta Toolbox şi se desenează un dreptunghi în zona Detail din Figura 43. După
desenarea dreptunghiului se lansează automat aplicaţia Subform Wizard din Figura
45,

26
Figura 45. Aplicaţia Subform Wizard, pasul I.
3. la pasul I se marchează opţiunea Use existing Tables and Queries, vezi Figura 45.
Clic Next şi se afişază pasul II în Figura 46,

Figura 46. Aplicaţia Subform Wizard, pasul II.

27
4. la pasul II se selectează tabela COMENZI din lista Tables / Queries şi se mută
câmpurile dorite din lista Available Fields în lista Selected Fields cu clic pe butonul
. Clic Next şi se afişază pasul III din Figura 47,

Figura 47. Aplicaţia Subform Wizard, pasul III.


5. la pasul III se aleg opţiunile Coose from a list şi Show COMENZI for each record
in CLIENTI using CLIENT_ID. Clic Next şi se afişază pasul IV din Figura 48,

28
Figura 48. Aplicaţia Subform Wizard, pasul IV.
6. la pasul IV se alege numele subformularului în caseta What name would you like
for your subform or subreport? Clic Finish.
Fromularul proiectat în vederea Design este cel din Figura 49 iar în vederea Form cel din
Figura 50.

29
Figura 49. Formularul Proiectat în vederea Design.

Figura 50. Formularul proiectat în vederea Form.


Caseta de proprietăţi a subformularului este cea din Figura 51. Aici se pot modifica
diverse proprietăţi. De exemplu, lăţimea subformularului se poate adapta punând
proprietatea Subdatasheet Expanded la valoarea Yes.

30
Figura 51. Caseta de proprietăţi a subformularului.

Formularul creat în vederea Datasheet este cel din Figura 52.

Figura 52. Formularul proiectat în vederea Datasheet.


La un clic pe butonul al unei înregistrări se afişază şi înregistrările corespunzătoare din
tabela COMENZI, vezi Figura 53.

31
Figura 53. Formularul proiectat în vederea Datasheet cu ultima înregistrare expandată.
Instrucţiunea SELECT de selectarea a datelor subformularului din tabela COMENZI este
cea din Figura 54.

Figura 54. Instrucţiunea SELECT pentru selectarea datelor din subformular.


Exerciţiu. Se vor compara proiectările celor două formulare cu subformulare, cel creat de
aplicaţia vrăjitor şi cel cu adăugarea manuală a subformularului.

1.4 Selectarea liniilor din mai multe tabele ce îndeplinesc


anumite condiţii
Instrucţiunea SELECT permite specificarea anumitor condiţii de selectare a liniilor din
mai multe tabele care au valori identice pentru anumite pentru anumite coloane. In prima
formă a instrucţiunii SELECT specificarea acestor condiţii se face în clauza WHERE. In
a doua formă specificarea acestor condiţii se face în clauza INNER JOIN. Aceste legături
se pot specifica grafic, în formularul de interogare, după cum vom arăta în continuare. In
acest caz legăturile există doar în cadrul interogării.
Fie tabelele R1 şi R2 de mai jos cu cheile primare X şi respectiv Z.

32
R1 R2

X Y Y Z
X1 Y1 Y1 Z1
X2 Y2 Y2 Z2
X3 Y2 Y2 Z3
X4 Y3 Y3 Z4
a) tabela R1 b) tabela R2
Tabelul 3. Tabelele R1 şi R2.
Vom selecta câmpurile X, Y, Z ce au valori egale pentru câmpurile Y din cele două
tabele. Definiţiile celor două tabele sunt cele din Tabelul 4 şi Tabelul 5.

a) definiţie b) date
Tabelul 4. Tabela R1.

a) definiţie b) date
Tabelul 5. Tabela R2.
Crearea interogării se face astfel.
1. în caseta Database se selectează opţiunea Query,
2. clic pe opţiunea Create query in Design View ce afişază formularul Select Query şi
caseta Show Table,
3. se selectează tabelele R1 şi R2 în caseta Show Table şi se adaugă la formularul de
interogare cu clic pe butonul Add; se închide caseta cu butonul Close; tabelele apar în
formularul Select Query ca în Figura 55,

33
4. se crează legătura între câmpul Y din tabela R1 şi câmpul Y din tabela R2 selectând
câmpul Y în tabela R1 şi trăgându-l cu mousul peste câmpul Y din tabela R2, vezi
Figura 55,
5. se salvează formularul creat cu una dintre opţiunile Save sau Save As ale meniului
File, sau cu butonul Close al ferestrei formularului,
6. se afişază tabela rezultat cu clic pe butonul al barei de instrumente sau pe meniul
Query  Run, sau pe meniul View  Datasheet View sau pe opţiunea Datasheet
View a meniului contextual al formularului.

Figura 55. Formularul Select Query.


Rezultatul rulării este tabela din Figura 56. Se va examina modul de joncţiune a liniilor
din cele două tabele.

Figura 56. Rezultatul interogării.


Instrucţiunea SELECT generată de Access este cea din Figura 57.

34
Figura 57. Instrucţiunea SELECT corespunzătoare formularului din Figura 55.
La un clic cu butonul drept pe legătură se afişază meniul contextual al legăturii din Figura
58. In acest meniu se poate şterge legătura şi se poate afişa caseta Join Properties din
Figura 59.

Figura 58. Meniul contextual al legăturii.

Figura 59. Caseta Join Properties.

1.5 Probleme propuse


In tabelele de mai jos, cheia primară a unei tabele este subliniată.
1. Fie tabelele de mai jos din baza de date a unei intreprinderi.

CLIENTI

ID_CLIENT NUME PRENUME ADRESA


1253 Ionescu Vasile Craiova
4481 Popescu George Iasi
2396 Georgescu Nicolae Bucuresti

35
2341 Vasilescu Ioan Timisoara
1956 Nicolae Vasile Cluj

COMENZI

ID_COMANDA NUMAR_COMANDA DATA SUMA ID_CLIENT


124 78235 1/10/2009 2232 4481
238 12984 12/20/2008 149 1956
331 44962 7/14/2009 3200 4481
214 15734 03/08/2007 844 2396
174 23655 5/14/2009 982 2341
229 14766 11/3/2008 504 4481

Cheia primară a tabelei CLIENTI este ID_CLIENT, cea a tabelei COMENZI este
ID_COMANDA. Coloana ID_CLIENT a tabelei COMENZI este cheie externă. Câmplul
DATA va fi de tipul Date/Time, iar câmpul SUMA de tipul Currency.
 se vor proiecta cele două tabele; regulile de validare sunt: ID_CLIENT >= 1000,
ID_COMANDA >= 100,
 se vor introduce datele cu ajutorul unui formular,
 se va crea legătura corespunzătoare cheii externe,
 se va crea o interogare care să afişeze câmpurile NUME, PRENUME, ADRESA,
NUMAR_COMANDA, DATA şi SUMA,
 se va scrie instrucţiunea SELECT pentru interogare.

2. Fie tabelele de mai jos din baza de date a unei magazin.

ANGAJATI

ID Nume Departament Functie


100 Ionescu Vanzari Agent
200 Popescu Marketing Agent
300 Georgescu Contabilitate Contabil
400 Vasilescu Contabilitate Contabil

DEPARTAMENT

ID Nume Adresa
100 Contabilitate Craiova
200 Marketing Bucuresti
300 Vanzari Craiova

Cheile primare ale celor daouă tabele sunt câmpurile ID de tip numeric. Celelalte câmpuri
au tipul text.
 se vor proiecta cele două tabele,
 se vor introduce datele în câmpurile Departament din tabela ANGAJATI şi Nume din
tabela DEPARTAMENT cu ajutorul unei casete combinate (Combo Box),

36
 se va crea o interogare care să afişeze câmpurile ID, Nume, Department, Functie din
tabela ANGAJATI şi câmpul Adresa din tabela DEPARTAMENT. Condiţia de
selectare este câmpul Department al tabelei ANGAJATI să fie egal cu câmpul Nume
al tabelei DEPARTAMENT.

1.6 Intrebări de control


1. Care sunt cele două forme ale instrucţiunii SELECT pentru selectarea coloanelor din
mai multe tabele?
2. Ce este integritatea referenţială?
3. Care sunt paşii la definirea grafică a relaţiilor între tabele?
4. Care sunt paşii la definirea programatică a relaţiilor între tabele?
5. Cum se crează un formular cu subformulare?

37

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