Sunteți pe pagina 1din 146

Cuprins

Lecia 1. Modelarea conceptual a unei baze de date ...................................... 5


Informaii i date Baza de date. Sistemul de gestiune al bazelor de
date Terminologie i concepte specifice bazelor de date Cum se
proiecteaz o baz de date? Studii de caz Sarcini de Laborator
Lecia 2. Prezentarea general a aplicaiei MS Access ................................... 12
Caracteristici SGBDR Access Obiecte, proprieti i metode Tipuri
de date i funcii uzuale Sarcini de Laborator
Lecia 3. Proiectarea tabelelor Access ............................................................... 17
Crearea tabelelor n modul Design View Crearea unei tabele n modul
DataSheet View Crearea tabelelor cu Wizard Table ncrcarea structurii
sau popularea tabelei Studiu de caz: crearea unei tabele Sarcini de
Laborator
Lecia 4. Operaii elementare asupra tabelelor Access ................................... 25
Deschiderea/nchiderea unei tabele Deplasarea n tabela de date
Sortarea datelor Actualizarea datelor Anularea coreciei Duplicarea
sau copierea tabelelor Filtrarea articolelor Cutare i modificare
Indexarea tabelelor Sarcini de Laborator
Lecia 5. Relaionarea tabelelor ntr-o baz de date Access ......................... 32
Proiectarea unei relaii Tipuri de asocieri (concatenri) ale tabelelor
legate (Join) Subseturi de date Crearea automat a relaiei 1-n prin
Lookup Wizard tergerea/modificarea unei relaii Proiectarea regulilor
de integritate ale bazei de date Sarcini de Laborator
Lecia 6. Normalizarea bazei de date ................................................................. 39
Forme normale Normalizarea tabelelor cu Table Analyzer Wizard
Sarcini de Laborator
Lecia 7. Interogarea bazei de date Access ...................................................... 44
Tipuri de interogri Proiectarea interogrilor de selecie (Select Query)
Proiectarea interogrilor de sortare Proiectarea interogrilor totalizatoare
Proiectarea interogrilor ncruciate (de tip Crosstab) Proiectarea
interogrilor de tergere (Delete Query) Proiectarea interogrilor de
corecie (Update Query) Proiectarea interogrilor pentru adugare
(Append Query) Proiectarea interogrilor de tip Make Table Studiu de
caz Sarcini de Laborator
*Lecia 8. Elemente de programare n SQL-Access ......................................... 59
Instruciunea SELECT Interogri tip Union Subinterogri Comanda
INSERT Comanda DELETE Comanda UPDATE Comanda CREATE
TABLE Sarcini de Laborator
Lecia 9. Obinerea informaiilor sub forma rapoartelor ................................. 66
Rapoarte Proiectarea rapoartelor cu Report Wizard Editarea
rapoartelor cu Report Design Etichete Grafice Sarcini de Laborator
Lecia 10. Proiectarea formularelor ..................................................................... 75
Tipuri de formulare Proiectarea unui formular folosind asistentul Form
Wizard Proiectarea formularelor prin Form Design Obiecte de interfa
!
pe un formular Sarcini de Laborator Proiectarea obiectelor de control
pe formular
*Lectia 11. Macro-instruciuni Access ................................................................ 89
Macro-instruciuni Sarcini de Laborator
*Lecia 12. Organizarea aplicaiei: meniuri i ferestre de prezentare ........... 92
Proiectarea unei ferestre de prezentare a aplicaiei Proiectarea unui
formular de comutare sau panou de bord Realizarea meniului aplicaiei
folosind bara de butoane Windows Proiectarea unui buton-meniu prin
macro-comenzi Sarcini de Laborator
Lecia 13. Proiectarea legturilor aplicaiei cu exteriorul ............................... 98
Hyperlink-uri n tabelele Access Proiectarea paginilor Web pentru
vizualizarea datelor pe Internet Importul i exportul de date Sarcini de
Laborator
Lecia 14. Proiect final ........................................................................................ 103
Indicaii metodologice pentru realizarea unui proiect informatic Studiu
de caz
Rezolvri i indicaii ............................................................................................ 112
Anexe ..................................................................................................................... 141
Bibliografie ............................................................................................................ 144

"
Lecia
1 Modelarea conceptual a unei
bazei de date
Baze de date i SGBD-uri. Particularitile modelului relaional
Proiectarea structurii conceptuale a unei baze de date
Studiu de caz

1.1. Despre informaii i date. Problema organizrii datelor


Activitatea uman, n cele mai diverse forme ale sale, a fost ntotdeauna
caracterizat prin entiti faptice exprimate fie sub form de valori numerice, fie ca
percepii sau observaii nenumerice fcute de fiinele umane sau de maini. Aceste
entiti faptice independente i neevaluate se vor numi DATE. Datele obinute n
cadrul activitilor productive, de conducere, de cercetare, educaionale, artistice
constituie un material informaional brut care poate fi evaluat, ordonat i prelucrat,
avnd n vedere diferite obiective. n urma acestui proces de transformare a datelor
se obin informaii, care reprezint o interpretare a datelor n raport cu anumite
situaii particulare sau cu nelegerea de ctre mintea uman n general. Informaiile
constituie baza raionamentelor, experimentrilor imaginate de mintea uman n
scopul obinerii de noi cunotine.
Producerea informaiilor susine anumite aciuni umane cu finalitate practic,
crendu-se totodat un fond informaional utilizabil pentru generarea de noi informaii
i cunotine.
Informaia este definit ca o comunicare susceptibil de a produce cunotine,
are un caracter semantic i de noutate, de aport la cantitatea de cunotine a celui
care o primete. Informaia se refer ntotdeauna la obiecte, persoane, procese,
fenomene, locuri, situaii, condiii etc. O informaie trebuie s fie util, precis,
complet, fr prea multe amnunte care s fac mesajul greu de interpretat, s
soseasc la timp pentru luarea unor decizii. Eschil zicea c nelept nu este cel ce
tie lucruri multe ci lucruri utile. O alt trstur fundamental a informaiei este
subiectivitatea sa. Ceea ce este o informaie pentru o persoan poate s nu nsemne
nimic pentru alta.
Datele constituie materializarea, reprezentarea simbolic a informaiilor (prin
semne, litere, cifre) ntr-o form convenional (scris, vorbit, luminoas, semne
grafice, desene) convenabil unei comunicri. Datele descriu ce s-a ntmplat prin
numr sau cuvnt, ele nu furnizeaz vreo judecat sau interpretare i nici baz
pentru aciune. Datele reprezint materia prim din care, dup o serie de operaiuni
efectuate de ctre oameni sau echipamente, se obin informaii.
Informaia reprezint semnificaia ce poate fi desprins dintr-un ansamblu de
date, pe baza asociaiilor dintre acestea, este deci partea utilizabil dintr-un ansamblu
de date. Informaiile furnizeaz rspunsuri la ntrebri de genul cine, unde, cnd.
Datele sunt exprimate prin atribut i valoare. Exemple: produs=imprimant,
cantitate=20, preul=150 lei. Informaia se exprim prin propoziii. Exemplu: S-au
vndut 20 imprimante la preul de 50 lei. Informaia presupune nelegerea relaiilor
dintre date.

#
Colecia de date reprezint un ansamblu de date care se refer la acelai
fenomen, obiect sau situaie.
ntre componentele unei colecii de date, ca i ntre colecii, pot fi identificate
sau, eventual, pot fi introduse relaii care s determine pe mulimea respectiv o
anumit structur, adic un anumit mod de ordonare astfel nct s se faciliteze
prelucrarea. Relaiile pot fi unidirecionale sau bidirecionale. O relaie unidirecional
poate determina obinerea unei valori sau a mai multora din componenta legat,
plecnd numai de la o component (printe); o relaie bidirecional determin
obinerea acelorai date/valori, plecnd de la ambele colecii. Componentele structurii
pot fi individualizate i selectate prin poziia pe care o ocup n structur, n raport
cu ordinea specificat sau, mai comod, prin numele componentei.
O colecie de date pe care s-au definit anumite relaii i creia i este specific
un anumit mecanism de selecie i identificare a componentelor constituie o structur
de date. Mecanismul de selecie al unei structuri de date este implementat de obicei
n programele de prelucrare a datelor respective, la nivelul sistemului de operare,
al sistemului de gestiune sau al programelor aplicative.
Sunt dou mari tipuri de acces:
accesul secvenial presupune parcurgerea tuturor datelor situate naintea datei
care trebuie prelucrat.
accesul direct presupune un mecanism prin care se poate determina direct
poziia datei necesare prelucrrii.
Operaii generale asupra unei structuri de date:
creare (memorarea pe suport a datelor);
consultare (acces la elementele structurii pentru prelucrarea valorilor);
actualizare (inserare, tergere sau corecie a valorilor);
copiere (duplicarea structurii pe un alt suport, n general);
ventilare (desfacerea structurii n dou sau mai multe structuri);
fuzionare (combinarea a dou sau mai multe structuri);
sortare (aranjarea elementelor structurii dup anumite criterii).
Cerinele complexe impuse sistemelor informatice moderne de a avea acces
simultan la aceleai date ale mai multor utilizatori, local sau la distan, au condus
la perfecionarea metodelor de organizare i, astfel, au aprut bazele de date. Vzute
ca un depozit central de date mpreun cu descrierea lor, bazele de date, pot fi
accesate de diferii utilizatori, nu neaparat programatori. Principalul avantaj l constituie
separarea problemelor de organizare a datelor fa de cele de proiectare ale
programelor utilizatorilor. La nivelul unei baze de date se definesc 3 SCHEME
(descrieri pentru structurile conceptuale, logice i fizice).
O baz de date trebuind s fac fa cerinelor uneori contradictorii ale diferiilor
utilizatori, va conine acele date strict necesare tuturor utilizatorilor, ntr-un format
care este n majoritate acceptat, iar programe speciale de gestiune-grupate sub
numele de SGBD-sistem de gestiune a bazei de date vor rezolva cerinele
particulare.
Baza de date este vzut ca o colecie de date legate funcional ntre ele. Se
vorbete deci de o baz pentru biblioteca colii, de alt baz de date pentru cantin etc.
Baza de date (BD) poate fi definit ca un ansamblu de date interconectate,
mpreun cu descrierea lor, care rspunde calitilor de centralizare, coordonare,
integrare i difuzie a informaiilor i care asigur satisfacerea tuturor necesitilor de
prelucrare ale tuturor utilizatorilor dintr-un sistem.
Sistemul de Gestiune a Bazei de Date (SGBD) este un pachet de programe
ce permite utilizatorilor s interacioneze cu o baz de date, asigurnd acesteia
urmtoarele caracteristici:
1. Independena datelor fa de programul care le gestioneaz.

$
2. Nivel redus de redundan.
3. Securitatea datelor (protecia la accesul neautorizat n vederea extragerii sau
distrugerii unor date cu caracter confidenial).
4. Integritatea datelor (protecia la defeciuni hard sau soft).
5. Transparen (faciliti de utilizare a datelor, fr ca utilizatorii s cunoasc
baza de date n ntreaga ei complexitate).
6. Limbaje de descriere i manipulare a datelor de nivel foarte nalt. Existena unor
limbaje performante de regsire a datelor care permit exprimarea sub forma
unor conversaii a unor criterii ct mai complexe de selectare a informaiei i
indicrii unor reguli ct mai generale de editare a informaiilor solicitate.
7. Faciliti multiutilizator. Datele pot fi accesate i chiar gestionate din diferite
noduri ale reelei de calculatoare de ctre diferii utilizatori.
8. Accesibilitate. Gestiunea datelor organizate n baze de date a fost preocuparea
multor specialiti soft, ajungndu-se la oferirea unor pachete de gestiune care
permit gestionarea datelor foarte complexe, n condiii de eficien maxim.
Bazele de date pot conine date de diferite tipuri (texte, numere, imagini,
documente). Pot cuprinde date operaionale unui domeniu de activitate, ca, de exemplu,
baze de date pentru gestiunea resurselor umane, pentru gestiunea produciei etc.
Unele baze de date conin date comerciale sau statistice ale unor instituii externe,
accesibile on-line i care servesc procesului decizional.
Dup modelul bazelor de date SGBD-urile pot fi ierarhice (ex. IMS, GIS), reea
(ex. SOCRATE), relaionale (ex. Dbase, ACCESS, ORACLE, FOXPRO), orientate-
obiect (ex. O2, UniSQL, IRIS), obiectual-relaional (ORACLE).

1.2. Terminologie i concepte specifice bazelor de date


Elementul fundamental al modelului conceptual este entitatea, ca termen ge-
neric pentru a desemna obiectele similare ca structur, dar care sunt identificabile,
deci se pot deosebi ntre ele prin trsturi specifice. O entitate este format dintr-o
mulime de atribute (sau caracteristici) care pot defini complet obiectul. Lista atributelor
care pot caracteriza o entitate poart numele de familie de caracteristici. Valorile
familiei de caracteristici corespunztoare unui obiect distinct poart numele de
realizare de entitate sau instan. Caracteristica asociaz cte o valoare dintr-un
domeniu fiecrei realizri a respectivei entiti. Domeniile pot fi deci numere ntregi,
iruri etc. Un atribut sau un set de atribute care identific n mod unic fiecare
instan a unei entiti se numete cheie.

%
O entitate poate fi definit prin liste diferite de caracteristici n funcie de sistemul
informaional cruia i aparine.1
Relaiile care pot fi stabilite ntre dou entiti ale unei baze de date pot fi:
Relaia 1-1 (unu-la-unu) unei instane a entitii printe i poate corespunde
o singur instan n entitatea copil. De exemplu, ntre entitatea CLASA i
PROFESOR, relaia diriginte este de tip 1-1 dac un profesor este diriginte la o
singur clas, iar o clas are un singur diriginte.
Relaia 1-N (unu-la-muli) unei realizri a entitii printe i poate corespunde
una sau mai multe realizri n entitatea copil. Unei realizri din entitatea copil i
corespunde o singur realizare n entitatea printe. De exemplu, ntre entitatea
CLASA i ELEV relaia nva este de tip 1-N, pentru c o clas are mai muli elevi
i un elev nv ntr-o singur clas.
Relaia N-N (muli-la-muli) unei realizri a entitii printe i poate
corespunde una sau mai multe realizri n entitatea copil i unei realizri din copil
i pot corespunde n realizri n printe. De exemplu, ntre entitile PROFESOR i
CLASA, relaia pred este de tip N-N pentru c la o clas pot preda mai muli
profesori, iar un profesor poate preda la una sau mai multe clase.
Modelul relaional
n bazele de date relaionale entitile sunt organizate n tabele simple,
bidimensionale, fr legturi fixe. Relaiile necesare sunt stabilite prin asocierea
ntre ele a unor cmpuri cheie ale fiecrei tabele. Modelul relaional este caracterizat
prin unitatea i simplitatea reprezentrilor: totul se reduce la tabele. De asemenea,
modelul pstreaz rigoarea fundamentrii sale matematice, fapt care a permis
standardizarea unor limbaje de nivel foarte nalt n special SQL care utilizeaz
elemente de algebr relaional. Este modelul care a revoluionat lumea bazelor
de date i asupra lui vom insista n leciile care urmeaz.
Observai corespondena ntre termenii generali acceptai de teoria bazelor de
date i termenii specifici modelului relaional, n figura urmtoare:

O entitate este o relaie, adic o tabel care are linii i coloane.

1
entitatea AUTOMOBIL ce desemneaz un obiect n cadrul sistemului informaional al
unei uniti productoare de maini poate fi descris prin atributele tip-motor, model, numr-
de-portiere, forma-caroseriei etc. Dac, ns, entitatea AUTOMOBIL se refer la obiectele
supuse vnzrii ntr-o unitate comercial, atunci va trebui s conin: seria-motorului, firma
productoare, preul etc.

&
n SGBDR nu pot fi reprezentate relaii tip N-N. Ele vor fi sparte n procesul
normalizrii bazei de date n relaii 1-1 i/sau 1-n.
O schem relaional poate fi definit ca un ansamblu de relaii asociate seman-
tic prin domeniul lor de definiie i prin anumite restricii de integritate. Schema relaional
este independent n timp. Pentru pstrarea integritii unei baze de date se propune
un limbaj declarativ care memoreaz regulile de integritate; acestea pot fi:
a. restriciile cheilor primare condiia de unicitate i de valori non-nule;
b. restricii refereniale apar atunci cnd o tabel este n relaie cu alta (de
exemplu, cheia strin nu trebuie s aib valori care nu se regsesc drept valori
ale cheii primare n tabela de referin);
c. restricii de comportament puse pe valorile diferitelor atribute sau pe ntreaga
nregistrare.

1.3. Proiectarea unei baze de date


Pentru modelarea unei baze de date se parcurg cteva faze care se ncadreaz
n metodologia general pentru dezvoltarea aplicaiilor informatice. Prezentm acum
numai aspectele legate de proiectarea bazei de date.
Prima faz este analiza sistemului informaional existent, n care se cerceteaz:
informaiile, sursele i destinaiile lor;
principalele activiti legate de date: prelucrri, reguli de calcul, validri, puncte
de control, modaliti de arhivare;
sistemul de codificare existent etc.
Analiza sistemului informaional existent se poate realiza prin dou metode.
Prima, cea tradiional, este metoda procedural, n care se pune accent pe fluxurile
de prelucrri, ntrebarea fundamental fiind: de ce date am nevoie pentru a realiza
sarcina X? Deci, se pleac de la studiul cererilor de informaii (=informaii de ieire)
i, mergnd pe fluxul invers al prelucrrilor, se determin informaiile de intrare, cele
care trebuie colectate, validate i organizate ntr-o baz de date. O alt metod de
analiz este cea orientat obiect, n care ntrebrile sunt de felul: Ce clase de
obiecte distincte pot fi definite pe domeniul aplicaiei? Cum se comport ele? Ce
evenimente pot aprea? Ce aciuni sunt posibile?
A doua faz const n proiectarea entitilor i a relaiilor fireti dintre ele;
obinem astfel SCHEMA. Pentru fiecare legtur se stabilete tipul ei (1-1, 1-n, n-n).
Faza a treia ar fi proiectarea structurii unei baze relaionale, transformnd entitile
i relaiile n tabele. Tabelele vor fi definite prin cmpurile lor, caracteristicile acestor
cmpuri (tip, lungime), condiii de validare, cheia principal i, eventual, cheile externe.
Analiza unei probleme i proiectarea bazei de date pornind de la cererile de
informaii.
Problema 1.1.
La emisiunea Fotbal-minut cu minut se solicit telefonic
informaii variate. Crainicul ar dori o baz de date care s permit
obinerea prompt a rspunsurilor la solicitrile publicului. Iat o
list cu cteva ntrebari:
a. Care sunt juctorii de fotbal cu vrst mai mic de 30 ani?
b. Cine locuiete n alt ar i nu este cstorit? Care este adresa stabil a acestora?
c. Care sunt echipele de fotbal? Cnd s-au nfiinat? Care este sediul? Patronul? Care sunt
membrii echipei Dinamo n prezent?
d. Cine a mai jucat la echipa Rapid de-a lungul timpului? Pe ce post?
e. Care sunt meciurile planificate azi, unde, la ce or i ntre ce echipe?

'
f. Cte meciuri au fost ctigate de echipa Rapid?
g. Care este CV-ul lui Mutu? Este cstorit? Cu cine? Are i copii?
h. Afiai fotografia lui Mutu!
Rezolvare
Pentru analiza problemei trebuie s rspundem la urmtoarele ntrebri:
1. Care sunt entitile?
JUCTORI, ECHIPE, MECIURI.
2. Care sunt atributele, caracteristicile pentru fiecare entitate?
JUCTORI (cod, nume, data_nasterii, foto, CV, stare civila?, are_copii?, adresa),
ECHIPE (cod_echipa, nume, data_nfiintarii, sediu),
MECIURI (cod_meci, echipa_1, echipa_2, goluri_1, goluri_2, stadion, data, ora).
3. Care sunt relaiile dintre entiti?
Un juctor poate s fi fost nscris la mai multe echipe; o echip are mai muli juctori.
Un meci este jucat de dou echipe; o echip particip la mai multe meciuri.
4. Cum arat SCHEMA conceptual a bazei de date?

5. Cum se modeleaz SCHEMA pentru o baz de date relaional?


Relaia JUCTORIECHIPE este spart n dou relaii prin intermediul entitii
PARTICIPANI (codul jucatorului, codul echipei, data_intrarii_in_echipa, data_iesirii_din_echipa,
functia).
Relaia ECHIPEMECIURI va fi modelat ca atare prin reinerea a dou cmpuri legate
de echipe (echipa 1 este cea care joac acas, iar echipa 2 este cea din deplasare).
Fiecare entitate i relaie se structureaz sub foma unui tabel. Obinem deci urmtoarele
tabele:
JUCTORI
Id Nume Data_n Casat Adr Copii Foto cv
100 Mutu 01.12.1976 T Bucureti T
101 Popescu 03.05.1978 F Cluj F

ECHIPE
Id Nume Data_insc Sediu
1 Steaua 01.01.1800 Bucureti
2 Dinamo 01.01.1980 Bucureti
PARTICIPANI
Id Cod_juc Cod_ech Data-intr Data-ies post
1 100 1 01.01.2000 01.12.2000 Portar
2 100 2 01.01.2001 Fundas
3 101 2 15.07.1980 portar

MECIURI
Id E1 E2 G1 G2 Stadion Data Ora
1 1 2 1 3 Lia Manoliu 01.05.2003 15
2 2 1 0 0 Dinamo 07.05.2003 17


6. Care sunt cheile unice ale fiecrei tabele?
Pentru simplificarea lucrului am numit un cmp special Id care s joace rolul de cheie
unic a fiecrui tabel.
7. Care sunt cheile strine (cele care asigur legturile dintre tabele)?
Participani.cod_ech, Participani.cod_juc pentru legtura cu tabelele ECHIPE i
JUCTORI i Meciuri.e1, Meciuri.e2 pentru legtura cu tabela ECHIPE.
8. Care sunt restriciile de integritate a bazei de date?
a. Un articol n PARTICIPANI nu poate fi introdus dac nu se regsete valoarea din
cmpul Participant. Cod_juc n Jucatori.id i valoarea din cmpul Participant.cod_ech
n Echipe.id.
b. Un articol n tabela MECIURI nu poate fi introdus cnd codurile celor dou echipe nu
figureaz deja n tabela ECHIPE.
c. Modificarea cheii Echipe.id trebuie s determine modificarea cheilor strine
Participant.cod_ech i Meciuri.E1 sau Meciuri.E2.
d. Modificarea cheii Jucatori.id trebuie s determine modificarea cheii Participant.cod_juc.
e. tergerea unei echipe adic scoaterea ei din eviden nu va determina i anularea
activitii juctorilor prin eliminarea liniilor din tabela PARTICIPANI, dar va provoca
tergerea meciurilor planificate cu aceast echip (meciurile deja jucate pot rmne!).
9. Care sunt restriciile de validitate asupra cmpurilor din tabele?
Data planificrii unui meci trebuie s fie mai mare dect data curent! Ora planificat
trebuie s fie ntre 820.
n tabela PARTICIPANI data_intrarii trebuie s fie mai mic dect data_iesirii unui juctor
dintr-o echip.
10. Care sunt evenimentele care determin aciuni asupra datelor?
Planificarea unui meci; desfurarea unui meci; nscrierea unui juctor la o echip; plecarea
unui juctor de la o echip; nscrierea unui nou juctor; nfiinarea unei noi echipe;
schimbarea stadionului sau a datei planificate pentru un meci; modificarea unor valori
pentru un juctor; modificarea unor valori pentru echip etc.

Problema 1.2.
Organizai datele pentru urmtoarele solicitri de informaii:
Lista tuturor persoanelor care locuiesc la case.
Lista persoanelor fr ocupaie care au domiciliul flotant n localitatea X.
Care sunt proprietile unei persoane X (x = numrul de buletin)?
Situaia imobilelor de pe strada X sub forma urmtorului raport:

Nr. imobil Tip imobil Suprafaa Numr apartamente Numr locatari


(vil, bloc, cas)

Care sunt apartamentele unde locuiesc copii?


Cte apartamente sunt proprietate personal n imobilul X?
Sunt locuinele cu nclzire prin sobe cu lemne n localitatea X?
Care este numrul mediu de persoane pe o camer n blocurile de pe strada X?
Cnd au fost cumprate apartamentele proprietate personal ale lui X?


Lecia
2 Prezentarea general
a aplicaiei MSAccess
Caracteristici SGBDR Access
Obiectele proprieti, evenimente, metode
Tipuri de date i operaii specifice fiecrui tip

Microsoft Access este un SGBDR ce pune la dispoziia utilizatorilor aplicaii


complexe care s ajute la crearea i manipularea bazelor de date i la obinerea
rapoartelor pe baza acestor date.
Microsoft Access dispune de un limbaj de programare procedural foarte puternic
i flexibil, limbaj orientat pe obiecte, prin care programatorii i pot descrie datele i
aplicaiile: Visual Basic for Applications. De asemenea, are implementat limbajul de
cereri SQL (AccessSQL) pentru utilizatorii neinformaticieni. De asemenea, pune la
dispoziia programatorilor nu numai un compilator i un mecanism performant de
accesare a datelor, ci i un set de utilitare puternice pentru proiectare, ncorporate
ntr-un mediu integrat i omogen. Acest mediu este foarte confortabil pentru
proiectanii de aplicaii. Microsoft Access recunoate i se adapteaz automat la
mediile multiutilizator, fr a fi nevoie de o variant special pentru reea. Microsoft
Access permite comunicarea cu alte aplicaii (de exemplu, Excel, Word) prin
mecanisme DDE (transferul dinamic de date). Microsoft Access are facilitatea OLE
(legarea i ncorporarea de obiecte cum sunt sunetele, imaginile, obiecte spread-
sheet etc.). Microsoft Access import i export date n/din alte formate pe diferite
suporturi, local sau la distan. Microsoft Access permite programarea vizual a
aplicaiilor folosind asisteni wizard, builder-e i designer-e pentru proiectarea
interactiv a tuturor obiectelor cu care lucreaz o aplicaie.
Microsoft Access este o aplicaie Windows i, de aceea, interfaa sa verific
toate aspectele unei interfee clasice Windows: lucreaz cu ferestre, n mod
grafic, multitasking, ntr-o manier condus de evenimente.
Programul Access se poate gsi ntr-un folder ce conine toate aplicaiile Microsoft
Office. Deschiderea aplicaiei se poate face prin ProgramsMicrosoft OfficeAccess.
ncheierea sesiunii de lucru se face prin butonul Close al ferestrei Access.
Fereastra sistem Access are meniul principal pe prima linie, o bar de butoane,
linia de stare pe care sunt trecute informaii legate de obiectul i aciunea executat
la un moment dat.

2.1. Obiecte, proprieti si metode


n Microsoft Access bazele de date, tabelele, cmpurile din tabele, interogrile,
rapoartele i formularele reprezint obiecte. Unui obiect i putem defini anumite
proprieti, i putem inventaria evenimentele care pot aciona asupra lui i aciunile
prin care respectivul obiect rspunde la aceste evenimente sau pe care le are
incluse n funcionalitatea sa.
O proprietate este un atribut al lucrurilor pe care l stabilim pentru a defini una
dintre caracteristicile acestuia, ca aspect sau comportament. De exemplu, o fereastr


poate fi caracterizat prin: textul explicativ ca titlu al ferestrei, distana n pixeli fa
de marginea din stnga a ecranului, distana fa de marginea superioar a ecranului,
nlimea, starea vizibil sau ascuns etc.
Fiecare obiect Access are definite toate proprietile ntr-o fereastr special
Properties, care se deschide din meniul View sau din meniul contextual ataat
obiectului. Utilizatorul poate seta anumite proprieti la valorile dorite.
Fereastra de proprieti

Obiectele recunosc i rspund la anumite aciuni numite evenimente.


Un eveniment este o activitate specific i predeterminat, iniiat de sistemul
de operare (eveniment intern) sau de utilizator (eveniment extern) i la care un
obiect tie s reacioneze (de exemplu: apsarea pe butonul mouse-ului, micarea
mouse-ului, apsarea pe o tast sau ntlnirea unei erori la introducerea datelor
ntr-un textbox). Unui eveniment i se poate ataa o anumit procedur (este numit
chiar Event procedure) sau o macroinstruciune n limbajul Visual Basic pus la
dispoziie de Access. Metodele sunt deci proceduri asociate unui obiect. De exemplu,
o metod asociat pentru selectarea ferestrei poate s schimbe culoarea de fond,
s-i schimbe poziia etc.
Obiectele pot s difere ntre ele prin proprieti. Astfel, dou declanatoare pot
avea dimensiuni diferite, poziii diferite pe ecran, texte explicative diferite etc., dar
se pot comporta asemntor (rspund la aceleai evenimente prin aceleai aciuni).
Spunem c aparin aceleiai clase sau colecii de obiecte.

2.2. Tipuri de date i funcii uzuale


SGBDR Access permite folosirea datelor numerice, iruri de caractere, date
calendaristice i valori logice (booleene). De asemenea, pot fi ncorporate sau doar
legate la cmpurile unei tabele, obiecte ca documente word, imagini sau sunete. O
alt facilitate este posibilitatea includerii unei legturi (Hyperlink) pentru accesarea
direct din tabela de date a site-ului web dorit.
Vom prezenta principalele tipuri de date, operatorii specifici i cteva funcii
standard (interne) uzuale:
Date tip ir de caractere
Sunt acceptate caracterele ASCII delimitate prin ghilimele i sunt recunoscute
ca tip text (la cmpuri) sau string (la variabile). Exemplu: alfa.

!
Operatori:
de concatenare: &, +;
de relaionare: <,<=,>,>=,<>,=, Like;
Exemplu: alfa&bet expresie text avnd ca rezultat irul alfabet
alfa>alfabet expresie logic avnd valoarea False/NO
Funcii uzuale pentru iruri:
1. LEN(sir) lungimea irului.
Exemplu: len(maria & ana) ntoarce valoarea 8.
2. STR(numar) face conversia numrului la ir.
Exemplu: Str(123) ntoarce 123.
3. MID(sir,start,lung) extrage un subir de lungime lung din ir, ncepnd de
la poziia start. Exemplu: Mid(alfabet,3,4) ntoarce fabe.
4. LEFT(sir,lung) extrage primele lung caractere din ir. Exemplu: Left(alfa,2)
ntoarce al.
5. RIGHT(sir,lung) extrage ultimele lung caractere din ir.
Exemplu: Right(alfa,2) ntoarce fa.
6. VAL(sir) face conversia irului la numr. Exemplu: Val(123) ntoarce 123.
7. TRIM(sir) elimin spaiile situate n exteriorul irului.
Exemplu: trim (alfa) ntoarce alfa.
Date numerice
Sunt recunoscute tipurile Byte, Integer, Long (pentru valorile ntregi), Single,
Double (pentru valorile reale) i Currency (pentru valori monetare).
Operatori:
aritmetici: +,-,*,/ (mprire real), \ (mprire ntreag), mod (restul),
^ (ridicare la putere);
de relaii: <,<=,>,>=,<>,=, Between.
Exemplu: x Between 4 and 10: expresie logic cu valoare Yes dac x este ntre
4 i 10
.123 constant numeric interpretat ca 0.123
1e3 + 123.2 expresie numeric cu valoarea 1123.2
123.008$ valoare monetar
Funcii uzuale pentru date numerice:
1. INT(numar) ntoarce partea ntreag. Exemplu: int(12.45) ntoarce 12;
2. ABS(numar) valoarea absolut. Exemplu: Abs(-15) ntoarce 15;
3. RND() ntoarce un numr aleator subunitar;
4. ISNUMERIC(exp) testeaz dac expresia este numeric.
Date calendaristice
Acestea rein anul, ziua, luna i eventual ora, minutul i secunda. Delimitator
este caracterul diez. Aparin tipului DateTime (la cmpuri) sau Date (la variabile).
Operatori: specifici: +, - (adunarea, scderea unui numr de zile)
relaionali: <,<=,>,>=,<>,= , Between
Exemplu: # 1/12/2001# dat calendaristic n format ll/zz/aaaa: 12 ianuarie
2002;
# 5/3/2002 4:30:05# dat calendaristic ce include i ora;
Date() +3 expresie de tip dat calendaristic: data curent plus 3 zile;
[Data-nastere] between # 3-ian-1952 # and 3-dec-2000.

"
Funcii standard uzuale pentru date calendaristice:
1. DATE() ntoarce data curent (sistem);
2. NOW() ntoarce data i ora sistem;
3. ISDATE(exp) testeaz dac expresia este o dat calendaristic.
Date logice
Folosite pentru date care pot lua doar valorile adevrat sau fals; aparin tipului
Yes/No (la cmpuri) sau Boolean (la variabile).
Operatorii logici sunt Not, And, Or, Xor, Eqv, Imp (implic).
Yes, true, No, false = constante logice;
Exemplu: [Pret]<5e6 and [cant] >100 expresie logic cu valoarea Yes dac
preul este mai mic ca 5 milioane i cantitatea mai mare dect 100.
Funcii standard comune tuturor tipurilor de date:
1. IIF(expresie logic, expresie1, expresie2) ntoarce expresie1 dac primul
parametru este adevrat, sau expresie2 dac acesta este fals.
Exemplu: iif(varsta>18,major,minor) va ntoarce irul minor dac varsta=6.
2. FORMAT(expresie,sablon) ntoarce expresia sub o anumit form indicat
de ablon.
Exemplu: Format(#6/25/98#,mmm dd,yyyy) va ntoarce June 25, 1998.
ablonul este un ir de caractere de cod. Se folosete pentru expresii
numerice, iruri, date calendaristice.

Baza de date Access


Orice activitate n Access se desfoar asupra unei baze de date, deci prima
operaie pe care o face un utilizator cnd intr n mediul Access este s deschid
baza de date dac aceasta exist sau s creeze una nou.
1. Crearea unei baze de date se face prin FileNewBlank Database. Se va
deschide fereastra Database Design.
2. Deschiderea unei baze de date se face prin FileOpen.
3. nchiderea bazei de date se face odat cu nchiderea ferestrei asociate sau
prin FileClose Database.
4. tergerea unei baze de date se face prin tergerea fiierului .Mdb care o
conine.
Toate activitile se desfoar avnd deschis fereastra bazei de date DataBase
Window care permite att crearea, deschiderea sau nchiderea tuturor obiectelor ei,
ct i evidena acestor operaii.

#
Pentru fixarea efectului ctorva funcii va trebui s creai/deschidei o baz de date i
s apelai editorul VBA(Visual Basic) prin obiectul
modulesnew. Apoi deschidei fereastra Imme-
diate prin meniul ViewImmediate window.
Comanda ? va permite afiarea efectului funciei.
Observai captura ferestrei pentru funcia
DateAdd.
ncercai funciile i expresiile din cele dou coloane; notai efectul:
Dateadd(d,10,date()) Mid(alba ca zapada, 1,4)
Date() - #24.01.1952# Left(alba ca zapada,4)
Dateadd(m,3,date()) Right(alba ca zapada,4)
Dateadd(yyyy,2,date()) Format(#6/25/97#,mmm, dd)
dateDiff(m, Date, 2/2/2004) Format(123.45, (999)-999.999)
month(date()) Time()+*
dateDiff(yyyy,Date, 2/2/2004) Len(albatros)
year(date()) - 1990 Format( 1.5, 000.000)
day(date()) +2 Format( 1234.5, 00)
Iif(month(date()=1,ianuarie,eroare Format( #6/25/97#,yyyy mmm)
Now() Format( 1.5895, #.00)
#24.01.1952# + date() Val(012)
Isdate(#12/12/2000#) Str(123.45)
Trim(albatros) Format( #6/25/97#,mmm)
Format( 1.5, 00) Format( 1.5, ##)

ntrebri recapitulative
1. Cum este corect s spunem despre aplicaia Access c este o baz de date sau
c este un SGBD?
2. Care pot fi proprietile unei ferestre? La ce aciuni rspunde o fereastr?
3. Ce operaii pot fi efectuate cu iruri, numere, date calendaristice?
4. Care sunt obiectele gestionate de aplicaia Access?

$
Lecia
3 Proiectarea tabelelor
Access
Tipuri de date dintr-o tabel
Proiectarea structurii unei tabele n diferite moduri de lucru

O baz de date Access are ca model conceptual modelul relaional. Putem


astfel regsi toate caracteristicile de baz discutate n capitolul precedent: o tabel
este o colecie de date legate ntre ele, memorate sub form de nregistrri compuse
din unul sau mai multe cmpuri. Ca regul general, un utilizator oarecare are acces
la tabela de date prin intermediul unor formulare, interogri i/sau rapoarte. Desigur,
pentru proiectantul bazei de date, Access ofer posibilitile de acces direct la
structur i la coninut.
Definirea structurii tabelelor se face din fereastra Database Table New, n
trei moduri de lucru: Design, Datasheet i Wizard. Dup salvarea informaiilor de
structur se pot introduce, vizualiza sau edita date prin DatabaseTableOpen.
Reluarea proiectrii se permite prin DatabaseTableDesign.

3.1. Mediul de lucru


Pentru operaiile directe asupra tabelelor beneficiem de un obiect de interfa
deosebit de util bara de butoane Table Design care conine, printre alte butoane
necunoscute utilizatorilor mediului Windows, i cteva butoane specifice lucrului cu
tabele.

Primul buton permite trecerea de la un mod de lucru la altul: de la introducerea


de date (Datasheet) la proiectarea structurii (Design), a unei interogri (PivotTable)
sau a unui grafic (PivotChart) etc.
Butonul Indexes permite deschiderea ferestrei pentru editarea indexurilor.
Butonul Primary Key permite specificarea/tergerea cheilor primare.
Butonul Insert Rows permite inserarea noilor rnduri (cmpuri n structur).
Butonul Delete Rows permite tergerea cmpurilor selectate.
Butonul Properties deschide fereastra de proprieti asociat tabelei.
Butonul Relationships deschide fereastra de proiectare/editare a legturilor dintre
tabele.
Butonul Show Table permite adugarea/tergerea tabelelor n fereastra Rela-
tionships.
Butonul Database Window permite trecerea la fereastra principal a bazei de
date.
Butonul Builder deschide utilitarul Table Wizard pentru construirea rapid a
structurii, prin selectarea cmpurilor din tabelele predefinite.
%
Crearea tabelelor n modul Design View
Modul Design View presupune introducerea
informaiilor de structur de ctre utilizator: numele,
tipul i proprietile fiecrui cmp, precum i cheia
principal a tabelei.
Numele cmpului poate fi orice ir de maxim 64
de caractere. O descriere mai larg a cmpului,
care va fi afiat pe linia de stare a ferestrei
principale Access atunci cnd se introduc date n
cmpul respectiv, poate fi dat n coloana
Description.
Tipul cmpului se alege din lista deschis prin butonul DataType.
Text Pentru iruri de maxim 255 caractere. Delimitatori: ghilimelele.
Se poate fixa alt lungime prin proprietatea Size:
Number Pentru numere ntregi sau zecimale. Se poate particulariza.
Exemplu: tipul Byte permite reinerea valorilor de la 0 pn la
255 i ocup un byte memorie.
Currency Pentru valori monetare. Folosii tipul currency pentru a evita
rotunjirea n timpul calculelor. Tipul currency ofer o precizie
de 15 cifre ntregi i 4 zecimale.
Date/Time Pentru date calendaristice. Se poate fixa formatul dorit.
Yes/No Pentru datele logice. Constantele logice sunt Yes, No.
Memo Pentru iruri cu lungime mai mare dect 65536 caractere.
AutoNumber Pentru serii incrementate automat cu 1 sau valori aleatoare.
De obicei este folosit pentru cheia principal a tabelei.
OLE Object Pentru legarea/ncorporarea obiectelor prin mecanismul OLE:
documente Word, imagini, fiiere de sunet, tabele Excel etc.
Hyperlink Pentru reinerea adreselor URL.
Exemplu: Pagina_scolii # http://www.liis.edu.ro#evenimente
Lookup Wizard Pentru selectarea valorilor posibile dintr-o list de constante
sau dintr-un cmp al unei tabele.
Cheia principal a tabelei se declar astfel:
se poziioneaz cursorul pe cmpul care dorim s devin cheia tabelei.
din meniul Edit activm opiunea Primary Key sau din bara de instrumente
apsm pe butonul ;
urmrim apariia aceluiai simbol n dreptul cmpului care va avea rolul de
cheie unic pentru tabel n cazul nostru cmpul Cod.
Dac se folosesc mai multe cmpuri pentru cheia primar trebuie selectate
toate i apoi apsat butonul Primary Key. Dac ai salvat tabela fr s fixai cheia
primar, Access v va avertiza despre acest aspect i v va da posibilitatea de a
reveni n modul de proiectare Design, sau va ataa automat un cmp cu rol de
cheie, de tip AutoNumber, numindu-l ID.
De fiecare dat cnd se deschide tabela, articolele sunt ordonate dup cmpul
cheie primar.

&
Proprietile cmpului:
a. Field size permite fixarea mrimii zonei
alocate coloanei. Implicit, pentru texte se
rezerv 50 de caractere. La tipul numeric
se asociaz lungimea n funcie de
varianta folosit: Byte, Double etc.
b. Format determin modul n care va
fi afiat cmpul. Mai multe tipuri de date
dispun de formate predefinite.
Exemplu:
Vrem ca numrul de telefon s
fie automat mprit n 2 zone printr-o
linie (de exemplu: 032-22445678).
Vom folosi tipul text i la format vom
plasa linia pe poziia dorit. Simbolul
@ nlocuiete orice caracter.

c. Input mask permite introducerea unui ablon care s controleze modul de


introducere a datelor. Se folosesc simboluri ca 0 sau 9 care oblig la
introducerea unei cifre, L oblig la introducerea unei litere etc.
d. Decimal Places precizarea numrului de zecimale. Valoarea Auto va indica
faptul c numrul de zecimale este dat de proprietatea Format.
e. Default Value permite precizarea valorii iniiale, n cmpul respectiv, pentru
un nou articol.
f. Caption denumirea sub care va aprea coloana n formularele sau rapoartele
utilizator. Implicit este trecut numele cmpului.
g. Validation Rule permite specificarea unei condiii la introducerea valorii.
Exemple de reguli de validare:
<> 0 Intrarea trebuie s fie diferit de zero.
> 1000 Or Is Null Intrarea trebuie s fie mai mare ca 1000 sau vid.
Like A???? Intrarea trebuie s fie pe 5 caractere i s nceap cu
litera A.
>= #1/1/96# And Intrarea s fie o dat calendaristic a anului 1996.
<#1/1/97#
g. Validation Text specific mesajul afiat n cazul introducerii valorilor eronate.
h. Required specific acceptarea sau nu a valorilor nule n coloan.
O valoare nul sau vid este o valoare zero (pentru coloana de tip numeric sau
currency), irul vid (tip text, Memo), data vid #//# (tip date), No (tip boolean Yes/
No). Se asociaz implicit dac nu se precizeaz alt valoare ca proprietate Default
Value.
Dac ntr-un cmp se dorete memorarea valorilor nenule, trebuie setat
proprietatea Required pe valoarea Yes. Dac se permit i valori nule, atunci se
seteaz proprietatea Required pe valoarea No.
Implicit, pentru cmpurile definite drept cheie primar se interzice existena
valorilor nule.
i. Allow Zero Length permite tratarea unui ir de lungime zero drept valoare
valid sau nu. Se folosete pentru tipul Text sau Memo. Aceast setare este
independent de valoarea proprietii Required.

'
j. Indexed indic prezena sau absena unui index pentru coloan. Pe valoarea
NO (No Duplicates) valorile permise sunt unice, iar pe YES (Duplicates)
valorile coloanei sunt oarecare.
k. New Value este o proprietate a tipului autonumber i arat modul cum va
fi generat noua valoare: prin incrementare (Increment) sau aleator (Ran-
dom).
Definirea cmpurilor de cutare Lookup Wizard
Uneori este necesar ca la intro-
ducerea datelor ntr-un cmp s avem
o list de valori din care s putem alege
valoarea dorit. Elementele listei pot fi
introduse manual de ctre proiectant
odat cu proiectarea structurii tabelei
sau pot fi preluate automat dintr-un
cmp al unei alte tabele printe sau dintr-o interogare. De exemplu, dorim ca n
tabela ELEVI s putem alege clasa fiecrui elev dintr-o list. Lista este nchis i
se deschide la plasarea cursorului i execuia unui click-mouse pe cmp. Dup
selectarea unei valori i trecerea cursorului pe alt coloan se nchide lista.
Definirea tipului Lookup se realizeaz n fereastra de proiectare a tabelei
Design. Pentru cmpul dorit cu acest tip se selecteaz din list Lookup Wizard
asistentul care va construi lista de cutare n mai muli pai:
Pasul 1. Se cere proiectantului
indicarea modului de completare
cu valori a listei. Vom aduga
varianta de introducere manual.
Pasul 2. Se completeaz lista cu
valori. Este de preferat s introducem o list ordonat mai ales pentru
listele lungi astfel nct s poat fi rapid localizat valoarea dorit.
Pasul 3. Se confirm coloana fixat ca fiind de tip cutare i se salveaz
definiia coloanei atribuindu-i un nume. Se ataeaz cmpului un obiect tip
list nchis Combo Box.

3.3. Crearea unei tabele n modul Datasheet View


Modul datasheet permite realizarea simultan a dou obiective: crearea structurii
tabelei i popularea ei cu date. Se aseamn cu foaia de calcul Excel: fiecare linie
reprezint un articol, iar fiecare coloan reprezint un cmp n structura tabelei.

Se afieaz o tabel vid, coloanele fiind numite iniial field1, field2, Se


introduc date n aceste cmpuri i, n funcie de valorile introduse, Access va asocia
coloanei tipul corespunztor. Coloanele lsate libere fr valori vor fi terse la


salvarea tabelei. Pentru fixarea cheii primare a tabelei se poate folosi sugestia
Access sau se editeaz structura n modul Design View i se precizeaz cheia.
Redenumirea unei coloane:
a. se execut dublu-clic pe numele coloanei, se introduce noul nume i se
confirm cu <enter>;
b. se selecteaz coloana, se alege FormatRename Column i se editaz noul
nume.
Inserarea unei coloane: se realizeaz prin opiunea InsertColumn.
Selectarea unei coloane: se poziionaz cursorul deasupra coloanei pn apare
o sgeat i se execut un clic de mouse pe coloan.
tergerea unei coloane: se execut comanda EditDelete Column.
Schimbarea ordinii coloanelor: se execut manevra Drag&Drop.
Redimensionarea unei coloane:
a. poziionm cursorul mouse-ului pe linia separatoare dintre coloana pe care
dorim s o redimensionm i o coloan adiacent pn se modific forma n
dubl sgeat.
b. inem apsat butonul stng al mouse-ului i mutm cursorul n noua poziie.
Adaptarea dimensiunii coloanei la lungimea datelor coninute:
a. se poziioneaz cursorul mouse-ului ntre numele coloanei pe care dorim s
o redimensionm i cel al coloanei din dreapta. Atunci cnd cursorul ia forma
dublei sgei realizm redimensionarea automat prin dublu-clic.
b. o alt variant este activarea meniului contextual pe numele coloanei i
selectarea comenzii Column WidthBest Fit.
Ascunderea unei coloane i reafiarea acesteia:
Operaia de ascundere a unei coloane se realizeaz din modul de lucru Datasheet
prin comanda FormatHide Column i are ca efect ascunderea datelor din coloan,
nu i eliminarea ei din structura afiat de Design View.
Reafiarea coloanelor ascunse se obine din Datasheet View prin comanda
FormatUnhide Columns.

3.4. Crearea tabelelor cu Wizard Table


Access dispune de o serie de definiii de tabele grupate pe domenii. Se poate
alege tabela dorit i apoi se pot selecta cmpurile necesare i se pot fixa relaiile.
De asemenea, se pot fixa legturile ntre tabela curent i alte tabele din baza de
date. Odat tabela creat se poate folosi modul Table Design pentru modificarea
proprietilor sau modul Datasheet pentru introducerea datelor.


3.5. ncrcarea structurii (popularea tabelei)

Utilizatorul poate introduce date direct, prin intermediul ferestrei Table.

Trecerea de la un cmp la altul se


face prin tasta <Tab> sau <Shift><tab>.
Pentru cmpul boolean se apas tasta
<Space> sau clic de mouse pentru
valoarea Adevrat (Yes). Adugarea de
noi articole se face la sfritul tabelei
pe linia marcat cu stelu. Repetarea
valorii din articolul anterior se face astfel:
se fixeaz cursorul pe coloana unde se
dorete repetarea valorilor i se intro-
duce Ctrl+ (apostrof). Se observ copierea valorii anterioare.
Pentru introducerea obiectelor OLE se folosete meniul principal, opiunea In-
sert Object. Se deschide o fereastr de dialog prin care vom alege tipul obiectului
dorit. Butonul radio Create New lanseaz aplicaia care va permite crearea obiectului
ce va fi inserat. Butonul Create from permite introducerea obiectului deja existent.
Editarea cmpului ce conine obiectul OLE se face prin meniul Edit. Observai
editarea unui obiect de tip Bitmap.

Problema 3.1.

Sarcini suport pentru noile cunotine Folosii...


1. Creai o nou baz de date cu numele SCOLI New database
2. Creai un tabel pornind de la datele sale. De exemplu, Datasheet View
introducei urmtoarele date: Introducere date

3. Denumii coloanele: nume_scoala, localitate, adresa, telefon, Nume coloan


data_infiintarii.
4. Inserai o coloan ntre telefon i data_infiintarii cu numele Inserare coloan
nr_fax i trecei aceleai valori ca la telefon far prefix (deci
fr linie separatoare).
5. Schimbai ordinea cmpurilor astfel nct nr_elevi s fie imediat Schimbare
dup nume_scoala. ordine
6. Adugai o coloan cu numele are_camin? cu valori Yes i No. Tipul logic
7. Salvai cu numele SCOALA. Lsai sistemul Access s includ o Salvare
cheie pentru tabel.
8. Proiectai structura tabelei ELEVI n modul de lucru Design. Design view
Care va fi cheia tabelei?
9. Fragmentai numele elevului separnd numele de familie de Insert Row /
prenume. Putei realiza acest lucru n ambele ferestre? Insert column
10. Inserai un cmp pentru numele tatlui pe exact 10 poziii. Size
11. Adugai cmpul absn. Completai-l cu valori oarecare. Insert row
Urmrii n Datasheet deplasarea coloanelor.
12. tergei coloana de adrese. Refacei apoi structura. Delete record
13. Ascundei coloana de adrese n modul Datasheet. Intrai n Hide Column
modul Design. S-a ters cmpul? Reafiai.
14. Mutai coloana adresa n locul coloanei specialitate. S-au Mutare coloan
inversat i cmpurile n structur?
15. Impunei o condiie de validare la cmpul absn: sa fie mai mare Validation rule
sau egal cu zero. Introducei valori negative.
16. Punei condiia ca data naterii elevului s fie mai mic dect Validation
data curent. Dai mesaj adecvat. Fixai data ca format format
zi.luna.an.
17. Folosii obiecte diferite pentru un cmp de tip OLE: foi de Tip OLE
calcul, imagini, documente. Observai modul de editare.
18. Folosii tipul Autonumber pentru o nou coloan numit matricol. Tip Autonumber
Observai evoluia valorilor dac tergei linii sau dac adugai
linii. Putei modifica valorile cmpului tip Autonumber?
19. Folosii tipul Currency pentru taxa de camin cu unitatea Leu; Tip Currency
fixai numrul de zecimale la 2. format
20. Reproiectai tipul coloanei clasa de la text la Lookup. Tip Lookup-cu
Observai dac s-au pierdut datele!
21. Inserai o nou coloan hobby, asociai-i tipul Lookup i Tip Lookup
scriei diverse valori. Introducei date? Observai ce tip a
primit cmpul n Design View.

Problema 3.2*
FOTBAL. Fie structura conceptual proiectat n tema P1.1:
JUCATORI (cod_jucator, nume, data_natere, foto, CV, stare_civila?, adresa,
venit_declarat), ECHIPE (cod_echipa, nume, data_infiinare, sediu, patron), PARTICIPARI
(cod_echipa, cod_jucator, data_intrare, data_iesire) MECIURI (cod_meci, cod_echipa_1,
cod_echip_2, goluri_echipa_1, goluri_echipa_2, stadion, data, ora)
Executai urmtoarele sarcini, folosind mediul Access:
1. Creai o nou baz de date FOTBAL.

!
2. Proiectai structura tabelei JUCATORI folosind tipurile de date adecvate.
3. Populai cu date de test.
4. Schimbai formatul datei calendaristice i observai modul de introducere a valorilor.
5. Introducei mai multe articole, fictive, n tabel, prin copierea ultimei linii.
6. Proiectai structura tabelei ECHIPE.
7. Proiectai structura tabelei PARTICIPARI tiind c se vor prelua valori din tabelele ECHIPE
i JUCATORI.
8. Redenumii coloana Juctori.data_nastere, pentru data naterii, prin alt identificator. S-au
pstrat datele?
9. Proiectai tabela MECIURI, prelund numele echipelor din tabela ECHIPE.
10. Folosii tipul DateTime pentru tabela MECIURI, pentru a reine data i ora desfurrii
unui meci. Fr secunde! Data s fie sub forma ll/zz/aaaa. Ce lungime implicit are?
Cum se introduc datele?
11. Folosii tipul Currency pentru un cmp nou Jucatori.venit_declarat; introducei valori.
Cte zecimale are?
12. Completai cmpul Juctori.Cv de tip Memo.
13. Redimensionai cmpul nume de tip Caracter prin mrire i apoi prin micorare. Urmrii
efectele n fereastra Browse. Se pierd datele dac mrii lungimea cmpului CNP la 15?
Dar dac micorai la 5?
14. Schimbai tipul unor cmpuri, de la numeric la text i invers; de la dat calendaristic
la numeric i invers. Observai de fiecare dat efectul.
Problema 3.3.
1. Proiectai o tabel CARTI ntr-o nou baz de date cu numele BIBLIOTECA, avnd n
structur urmtoarele atribute:
CARTI (numar_inventar, titlu, autor, editura, editia, colectia, data_intrarii_in_biblioteca,
data_iesirii_din_evidenta, pretul, numarul_de_pagini, scurta_prezentare_in_word_a_cartii,
fotografia_copertii, date_despre_autori, tipul_cartii_daca_este_manual_sau_nu).
2. Fixai cmpul numar_inventar drept cheie.
3. Fixai cerina completrii obligatorie a cmpurilor: titlu, autor, tipul_cartii,
data_intrarii_in_biblioteca, editia.
4. Fixai urmtoarele cerine de validare:
4.1. data_intrarii_in_biblioteca>=data curent
4.2. editie<=anul_curent
4.3. numrul_de_pagini>0
5. Fixai anul curent ca valoare implicit pentru editia i data curent pentru
data_intrarii_n_biblioteca.
6. Proiectai n modul Datasheet tabela CITITORI cu informaii despre cititorii bibliotecii
(cod numeric personal, nume, ocupaie, adres). Introducei direct valorile pe liniile
tabelei. Scriei pe ultima coloan un numr cu 13 cifre pentru codul numeric personal.
Denumii apoi coloanele.
7. Modificai structura tabelei CITITORI astfel nct s adugai cmpurile cod_cititor,
locul_de_munca, data_nastere, data_inscrierii_in_biblioteca.
8. Fixai cheia primar ca fiind cmpul cod-cititor, cu tipul Autonumber.
9. Fixai indexurile tiind c se vor cere situaii ordonate dup ocupaii, nume, vrst, loc
de munc.
10. Fixai pentru cmpul data_nastere un format care s pun pe prima poziie anul, urmat
de lun i apoi ziua!
11. Fixai pentru data_inscrierii_in_biblioteca o restricie (de exemplu, s fie anterioar datei
curente).

"
Lecia
4 Operaii elementare
asupra tabelelor Access
Deplasarea n tabel; actualizarea datelor
Sortarea i filtrarea; indexarea tabelelor

4.1. Deschiderea / nchiderea unei tabele


Deschiderea unui fiier tabel se realizeaz prin
butonul Open, iar nchiderea prin butonul de nchidere al
ferestrei tabelei.

4.2. Deplasarea n tabela de date


Posibilitatea poziionrii pe un anumit articol este o facilitate acordat utilizatorilor.
Bara de deplasare plasat pe ultima linie a ferestrei tabelei permite:
Poziionarea pe primul articol al tabelei
Devansarea cu un articol ctre nceputul tabelei
Afiarea numrului articolului curent
Avansarea ctre sfritul fiierului cu un articol
Salt la ultima nregistrare a tabelei
Adugarea i poziionarea pe un articol vid
Poziionarea fizic pe un anumit articol se poate face i prin EditGoTo.

4.3. Sortarea datelor din tabele


Prin sortare se obin datele aranjate cresctor sau descresctor dup valorile
unor chei. O modalitate simpl i rapid este folosirea butoanelor sort dup
ce ne-am plasat cursorul pe coloana folosit drept cheie de sortare. O alt modalitate
este folosirea meniului principal RecordsSortSort Ascending/Descending sau a
celui contextual.

4.4. Adugarea articolelor


n fereastra Datasheet se poziioneaz cursorul pe o nregistrare vid cu butonul
aflat pe bara de stare i se introduc noile valori. Se poate folosi meniul prin-
cipal, opiunea InsertNew Record.

4.5. tergerea articolelor


Se marcheaz articolele pe care dorim s le tergem prin glisarea mouse-ului
pe verticala din stnga tabelei i apoi se apas tasta Delete, sau se folosete
opiunea EditDelete. La mesajul sistem putem confirma tergerea sau putem
anula operaia prin Cancel.

#
4.6. Modificarea valorilor din articole
Dup poziionarea pe linia
unde dorim efectuarea coreciei
se observ semnul creion care
se pstreaz pn la terminarea
coreciei i trecerea la alt linie.

4.7. Anularea coreciei


Access pstreaz informaia anterioar coreciei, dnd utilizatorului posibilitatea
anulrii modificrilor efectuate i revenirii la forma iniial. Pentru a anula modificrile din
coloana curent apsm tasta Esc, iar din linia curent apsm Esc de dou ori. Dac
s-a trecut deja la alt nregistrare anularea se face prin EditUndo Saved Record.

4.8. Duplicarea sau copierea tabelelor


Operaia de copiere a unei tabele ntr-o
alta de acelai tip se face prin FileExport.
Se deschide o fereastr de dialog prin care se
precizeaz locul i numele tabelei destinaie.
Se poate copia doar structura sau
coninutul mpreun cu structura.

4.9. Filtrarea articolelor


Pentru filtrarea articolelor din
fereastra Datasheet se folosesc
diferite metode: fie prin meniul prin-
cipal RecordsFilter, fie prin meniul
contextual.
Modaliti de filtrare
1) Filter By Selection cnd dorim selectarea articolelor care conin o anumit
valoare pe care ne-am poziionat anterior:
a. Ne poziionm pe valoarea cutat la unul din articole.
b. Se apas butonul Filter by Selection sau din meniul RecordsFilterFilter
by selection.
c. Se pot repeta paii a i b pn cnd obinem setul de date dorit.
De exemplu, dorim s aflm elevii cu media 10 din clasa 12a. Observai ferestrele
Datasheet obinute prin selecii repetate! Ce selecie s-a fcut prima dat?
1. 2.

3.

$
Activarea sau anularea filtrului se face prin butonul Apply /Remove filter.
2) Filter Excluding Selection atunci cnd dorim selectarea articolelor care
nu conin o anumit valoare. De exemplu, dorim s aflm elevii care nu sunt n clasa
12a!
a. Ne poziionm pe valoarea excepie i o selectm.
b. Activm filtrul din fereastra RecordsFilterFilter Excluding Selection.
c. Repetm aciunile a i b pn obinem rezultatul dorit.
3) Advanced Filter/Sort pentru indi-
carea unor condiii compuse de filtrare. De
exemplu, dorim s aflm elevii din clasele
12a sau 12c, cminiti, cu media 10.
a. Din Datasheet apelm
RecordFilterAdvanced Filter/Sort.
b. Se deschide fereastra de proiectare a interogrii unde vom preciza condiia
de filtrare. Se poate folosi aceeai fereastr i pentru indicarea cheilor de sortare,
dac dorim un rezultat ordonat dup una sau mai multe chei.

4.10. Cutare i modificare


Una dintre funciile importante ale unui SGBD este accesarea rapid a tabelei
n vederea poziionrii pe o anumit nregistrare, pentru afiarea coninutului i/sau
modificarea lui. Operaiile de care ne ocupm acum se realizeaz prin comenzile
Find/Replace i GoTo, lansate din meniul Edit.

Cutarea dup o anumit valoare a unui cmp se poate face direct prin comanda
sau butonul Find . Se deschide o fereastr de dialog pentru precizarea valorii
cutate i locul de cutare.
Observai poziionarea pe prima apariie a valorii introduse n banda Find What.
Putem anula cutarea sau putem continua pn la terminarea articolelor. Cutarea
are loc pe o anumit coloan sau n tot tabelul. De asemenea, se poate specifica
sensul cutrii spre primul articol (UP), spre ultimul (DOWN) sau peste tot (ALL).
Modificarea valorii cutate se precizeaz prin tab-ul Replace al ferestrei Find.
Modificarea are loc secvenial, pe msur ce valoarea cutat se gsete (Replace),
sau automat peste tot (Replace all).

%
4.11. Indexarea tabelelor
Indexarea este vzut de utilizatori ca o metod de accesare rapid, ntr-o
manier ordonat, a coninutului unei tabele fr a duplica datele propriu-zise, fr
a le depune n alt tabel i a avea grij de ele. Alte avantaje sunt date de posibilitatea
folosirii expresiilor drept criteriu de ordonare, selectarea dup criterii unice,
actualizarea prompt a indexurilor odat cu datele propriu-zise etc.
Tipuri de indexuri:
Index (Duplicates OK) este folosit pentru selectarea ordinii de parcurgere din
cmpurile non-cheie, ale cror valori nu trebuie s fie neaprat unice;
Unique Index este folosit pentru selectarea ordinii de parcurgere bazat pe
prima apariie a valorii n cmpul specificat;
Index (No duplicates) este folosit n tabelele incluse ntr-o baz de date care
au deja fixat indexul primar, dar care doresc verificarea;
Primary Index este folosit n contextul unei tabele incluse ntr-o baz de date
i asigur introducerea valorilor unice pentru cheia articolelor. O tabel are un singur
index primar.
a) Crearea unui index care are drept
coninut un singur cmp
Dac dorim ca un singur cmp s fie
folosit pentru sortarea datelor sau pentru
cutare, atunci se definete acest lucru ca
proprietate a cmpului. Se deschide tabela
n modul Design View. n cmpul unde dorim
fixarea indexului se alege proprietatea
Indexed.
b) Crearea unui index care are drept coninut mai multe cmpuri ale tabelei
Se deschide tabela n modul
Design View. Se apas butonul
Index care deschide o fe-
reastr de definire a indexurilor.
Observai c au fost trecute
indexurile simple chiar dac
le-am definit ca proprietate a
cmpurilor.
Pentru a defini un index for-
mat din mai multe cmpuri vom
trece aceste cmpuri pe linii
diferite, n coloana FieldName.
n exemplu dorim o aranjare rapid a elevilor pe clase, n cadrul clasei, n ordine
alfabetic. Dac dorim s se evite duplicrile legate de acest index, n partea de jos
a ferestrei de definire a indexurilor vom plasa tipul indexului Unique pe valoarea NO.
c) tergerea unui index
Operaia de anulare a unui index se face fie prin fereastra Design View asociat
tabelei, fie prin fereastra Indexes deschis cu butonul .

&
Problema 4.1.
Creai tabela PROFESORI (ID, nume, adresa, telefon sex, studii, nivel_studii specialitate,
mod_angajare, data_angajare, salarii, cv, foto) unde pentru mod_angajare pot fi valorile:
titular; suplinitor; plata cu ora; pentru nivel_studii pot fi valorile: L=liceale; U=universitare;
P=postuniversitare

Sarcini suport pentru noile cunotine Folosii...


1. tergei articolele 2 i 5. EditDelete
record
2. Afiai care sunt profesorii cu acelai salariu ca al primului articol Find Filter
by selection
3. tergei toate persoanele necalificate (au nivelul studiilor liceal) Filter by
selection delete
4. Cutai i modificai la unele persoane titulare gradul didactic Find replace
5. Afiai toi profesorii care NU aparin catedrei de matematic Filter excluding
Selection
6. Afiai persoanele pe catedre Sort
7. Aflai care sunt titularii, netitularii i persoanele care au doar Advanced Filter
bacalaureatul
8. Modificai peste tot n cmpul specializare valoarea mate cu Replace all
matematica
9. Realizai o copie a tabelei PROFESORI n aceeai baz de Fileexport
date sub numele ISTORIC
10. Afiai persoanele n ordinea descresctoare a vrstei Sort
11. Realizai indexuri pe cmpurile urmtoare: nume, studii, CV, Index
salarii, data_nasterii, titular? Ce atribut nu a putut fi folosit
drept index?

Problema 4.2.
1. Creai o nou baz de date cu numele FARMACII.
2. Creai tabela MEDICAMENTE (cu structura farm, medicam, cant, pret, data_exp, um,
reteta, prospect, aspect), unde:
farm=codul unei farmacii este de forma fx unde x este o singur cifr (de exemplu, f1,
f5 etc.);
medicam=numele ntreg al medicamentului;
cant=cantitatea existent n farmacie; maxim 250 uniti;
Pret=preul unitar n lei; trebuie s fie ntre 5-1000 lei;
um=unitatea de msura va avea valorile: g, mg, bucat, fiol, cutie etc.;
data_exp=data expirrii medicamentului; se va impune folosirea formatului zi/luna/an,
cu valoare implicit 31.12.2003;
reteta=yes dac se cere reet; implicit este No.;
prospect=reine prospectul medicamentului ca document Word;
aspect=ambalajul medicamentului este scanat i se reine imaginea.

'
c. Asociai filtrului din prima coloan o interogare din cele date n coloana a doua.
Filtru Interogare
A. a. Afiai medicamentele
din farmacia numrul 1
care expir la 1 ianuarie
2002;

B. b. Afiai medicamentele
cu reet din farmacia
numrul 2 sau numrul 3;

C. c. Sortai medicamentele
pe farmacii i alfabetic,
dup nume;

D. d. Sortai medicamentele
cu stoc peste 200 uniti,
n ordinea descresctoare
a acestuia;

E. e. Sortai medicamentele
care se gsesc n cantiti
mai mari de 200 uniti, n
ordine alfabetic;

F. f. Sortai medicamentele
pe farmacii, descrestor
dup stocuri i, la aceeai
valoare a stocului, n ordi-
nea alfabetic a medica-
mentelor existente;

G. g. Sortai medicamentele
cu prescripie special n
ordinea alfabetic a
acestora;

!
H. h. Sortai farmaciile care
au aspirin, peste 200buc,
n ordinea cresctoare a
preurilor;

I. i. Afiai medicamentele
care au data expirrii
cuprins ntre 01 ian 2002
i 01 ian 2003;

J. j. Afiai medicamentele
din prima farmacie;

K. k. Afiai liniile ce cores-


pund farmaciei f1 sau se
refer la medicamentul
aspirin;

L. l. Afiai medicamente
care se vnd cu peste 200
lei gramul.

ntrebri recapitulative
1. Care sunt manevrele directe prin care se poate actualiza o tabel Access?
2. Ce avantaje ofer indexarea?
3. Enumerai 5 proprieti comune tuturor tipurilor de date.
4. Ce nseamn validarea datelor?
5. Dac dorim s obinem mai puine linii ntr-un tabel aplicm Sort sau Filter?

!
Lecia
5 Relaionarea tabelelor
ntr-o baz de date Access
Proiectarea relaiilor
Integritatea referenial

5.1. Tipuri de relaii definite n Access


SGBDR Access gestioneaz o baz de date relaional n care tabelele pot fi
sau nu legate. Relaia se stabilete ntre o tabel numit printe i o tabel numit
copil i poate fi:
Relaia 1-1: un articol al tabelei printe are legtur cu un singur articol al
tabelei copil sau cu nici unul.
Relaia 1-n: unui articol al tabelei printe i corespunde unul sau mai multe
articole ale tabelei copil i unui articol al tabelei copil i corespunde un singur
articol n tabela printe.
Relaiile ntre tabelele unei baze de date sunt permanente (persistente), n
sensul c intr automat n vigoare la deschiderea bazei de date i sunt valabile pe
tot parcursul lucrului cu aceasta. Relaiile sunt memorate ca pri integrante ale
bazei de date.
Uneori pot fi realizate i relaii temporare pentru o interogare, un raport, un
formular etc.
Cerine pentru definirea relaiilor:
tabela copil este indexat dup aceeai expresie ca i a legturii;
nu sunt permise cicluri: o tabel nu poate fi i printe i copil al uneia i
aceleiai tabele;
tabela poate fi legat de mai multe tabele prin chei distincte;
legturile unei tabele se numeroteaz n ordinea definirii lor.

5.2. Proiectarea unei relaii


Pentru proiectarea unei relaii se parcurg urmtorii pai:
Pasul 1. Identificarea tipului relaiei.
Pasul 2. Pregtirea tabelelor.
Pasul 3. Proiectarea relaiei prin fereastra Relationship.
Tipul relaiei va fi dat de tipul indexului din tabela copil. Dac indexul este
cheie unic, atunci relaia va fi 1-1; dac este cheie neunic, atunci relaia va fi
1-n. Ambele indexuri trebuie s fie de acelai tip i s aib aceleai expresii de indexare.
De exemplu, dorim stabilirea legturii 1-n ntre tabelele Clase Elevi. n exemplul
nostru tabela printe (Clase) se indexeaz unic dup cheia de legtur (clasa este
cmpul index i este de tip primary key). Tabela copil se indexeaz neunic, dup
cmpul clasa.
Proiectarea legturii se face prin fereastra Relationship, astfel:
se deschide fereastra RelationShip prin meniul ToolsRelationship sau butonul

!
Relationship . Apare o fereastr de proiectare a relaiilor i un meniu pe
lina zero;
se deschid tabelele ntre care dorim fixarea legturii prin Show Table ;
se fixeaz sau se verific cheile de legtur existente n fiecare tabel intrnd
n modul Design;
realizarea legturii ntre cele
dou tabele se face astfel:
poziionm mouse-ul pe cheia
tabelei printe i executm
drag&drop peste cheia strin
aparinnd tabelei copil.
Automat, se deschide fereastra
de editare a legturii, avnd
plasate informaiile legate de
chei, tabelele legate, tipul
legturii. Putem schimba
cmpul unei tabele care
particip la o relaie.
Putem fixa tipul concatenrii
realizate cu aceast legtur
prin butonul JoinType, care
deschide fereastra de selecie
a modului de concatenare.

5.3. Tipuri de asocieri (concatenri) ale tabelelor legate (Join)


Tipul asocierii datelor dintre tabelele relaionate nu afecteaz relaia ci doar
modul cum sunt regsite informaiile din cele dou tabele legate. Rezultatul unei
relaii poate fi vzut ca o alt tabel, care are pe fiecare linie valori att din prima
tabel ct i din a doua.
Inner join rezultatul asocierii include numai acele rnduri din ambele tabele
care au valori egale ale cheii de legtur. Deci, vom obine selectiv numai elevii
pentru care avem informaii despre clasele lor.
Outer join este vzut ca opusul lui Inner Join. Se includ linii dintr-o tabel chiar
dac nu exist corespondent n cealalt tabel. Poate fi de tip:
left join cnd se includ toate articolele tabelei printe i numai acele linii
din tabela copil pentru care exist corespondent. De exemplu, vom obine
toate clasele care au fost deja nregistrate i elevii acestora;
right join cnd se includ toate articolele tabelei copil i doar acele linii ale
tabelei printe care au corespondent. De exemplu, vom obine toi elevii i
clasele acestora.
Fie cele dou tabele CLASE1-nELEVI legate prin codul clasei. Observai c
sunt nregistrai elevi dintr-o clas care nu se regsete n tabela CLASE (Enache,
Elefteriu 12e). De asemenea, n tabela CLASE sunt linii care nu au corespondent
n tabela ELEVI (de exemplu, clasa 12b nu are nici un elev).

!!
Printr-o legtura inner join obinem numai acele clase (12a, 12c) care au elevi
nregistrai. Din tabela ELEVI lipsesc cei din clasa 12e! Din tabela CLASE lipsete
12b!

Printr-o legtur Outer right Join obinem toi elevii (tabela copil va fi n
ntregime parcurs) cu informaii despre clasele lor (din tabela printe).
Observai c lipsete clasa 12b!

Printr-o legtur Outer left join obinem toate clasele (tabela printe este
parcurs n ntregime) cu informaiile legate ctre fiecare elev. Lipsesc elevii
din clasa 12e!

5.4. Subseturi de date


Odat fixat o legtur de tip 1-n ntre tabela CLASE i ELEVI se pot edita rapid
elevii fiecrei clase (n fereastra Datasheet), ca subset de date asociat clasei.
Deschidem tabela CLASE i observm n faa primului cmp butonul +. Dac
apsm, se va deschide o subfereastr de valori ale tabelei legate (ELEVI) care
corespunde cheii de legtur.

!"
Se creeaz un subset de date ataat fiecrui articol din tabela printe. Putem
expanda toate liniile prin comanda: FormatSubdatasheetExpand All sau putem
reveni prin Collapse All.

5.5. Crearea automat a relaiei 1-n prin Lookup Wizard


O posibilitate de fixare a relaiei 1-n dintre dou tabele este oferit de asistentul
Lookup Wizard la definirea cmpului de cutare, prin preluarea valorilor dintr-o alt tabel.
Cmpul de cutare poate s extrag valori dintre valorile altei tabele. S
presupunem c avem tabelele CLASE i ELEVI. Adugarea informaiilor pentru un
elev presupune alegerea clasei sale dintre valorile nregistrate deja n tabela CLASE.
Cum se procedeaz?
Pasul 1. Vom apela Lookup Wizard din modul de lucru Design Table.
Pasul 2. Vom fixa modalitatea de completare a listei prin folosirea unei tabele
(primul buton radio).
Pasul 3. Se precizeaz tabela surs.
Pasul 4. Se alege dintre cmpurile existente n tabela surs coloana din care vor
fi preluate valorile listei de cutare.
Pasul 5. Valorile sunt afiate i pot fi completate cu altele noi. De asemenea, se
hotrte dac va fi vizibil coloana care face legtura dintre cele dou
tabele i se poate ajusta limea listei.
Pasul 6. Se salveaz definiia cmpului. Microsoft Access va realiza o asociere a
celor dou tabele de tipul CLASE1-nELEVI.

5.6. tergerea/modificarea unei relaii


Pentru editarea unei relaii se poate folosi meniul contextual deschis atunci
cnd, fiind poziionai pe legtur (ea este mai intens colorat), se apas butonul din
dreapta al mouse-ului. Comanda Edit RelationShip deschide ecranul de dialog.
tergerea unei relaii se realizeaz, de asemenea, din meniul contextual sau
prin acionarea direct a tastei Delete.

!#
5.7. Proiectarea regulilor de integritate ale bazei de date
Bazele de date permit, aa cum tim din leciile anterioare, meninerea integritii
datelor din tabelele sale. Acest lucru se realizeaz prin intermediul unor proceduri
stocate (Stored Procedures).
Premiza de baz este c valorii unei chei externe dintr-o tabel copil trebuie
s-i corespund o valoare deja plasat n cheia primar din tabela printe.
Mecanismul de integritate referenial trateaz nregistrrile care nu ndeplinesc
aceste condiii drept invalide. Prin analogie, putei fi un printe fr copii, dar nu
putei avea un copil fr a fi printe. De asemenea, nu pot fi terse articole din
tabela printe dac exist articole cu aceeai valoare a cheii n tabela copil. Deci,
nu putem lsa orfani!
Apelul utilitarului Referential Integrity Builder se face din fereastra de editare a
legturilor, prin butonul Enforce Referential Integrity.
La apelul utilitarului se activeaz cele dou comutatoare pentru actualizare i tergere.
1. Comutatorul Cascade Update Related Fields actualizeaz toate articolele
legate n tabela copil cu noile valori ale cheii modificate din tabela printe.
De exemplu, dac modificm codul clasei de la 12a la 13a n tabela
CLASE, atunci aceast modificare se va face automat la toi elevii respectivei
clase. Dac nu activm aceast regul, atunci cnd se modific o valoare a
cmpului clas n tabela CLASE i sunt elevi care au n cmpul clas vechea
valoare, nu se permite modificarea!
2. Comutatorul Cascade Deleted Related Records terge toate articolele cu
aceeai valoare a cheii strine ca i a cheii primare terse. De exemplu, dac
se desfiineaz clasa 13a atunci vor fi teri i elevii si. Altfel, se interzice
tergerea dac n tabela COPIL sunt articole cu aceeai valoare a cheii
strine ca i cea a cheii terse. Deci nu pot fi articolele orfane n tabela
COPIL.
Dac modificm structura tabelelor implicate n mecanismul de integritate
referenial, indexurile sau relaiile permanente, trebuie s rulm din nou utilitarul
Referential Integrity Builder. n acest fel codul surs din baza de date va fi revizuit.

Deschidei baza de date SCOALA. Verificai s existe


tabelele CLASE (clasa, diriginte, profil), ELEVI (nume, clasa,
adresa, media, caminist, ...) i PROFESORI (cod, nume,
specialitatea, grad_didactic, ...)
Problema 5.1.

Sarcini suport pentru noile cunotine Folosii...


1. Deschidei tabela CLASE i modificai codul clasei 12a la Tabele izolate
99a. Observai ce s-a ntmplat cu tabela referit ELEVI?
S-au modificat peste tot valorile clasei 12a la 99a? Cum
vom putea face aceast modificare? Revenii la vechea
valoare 12a plecnd tot din tabela CLASE.
2. Proiectai legtura CLASE1-nELEVI Relationship

!$
3. Obinei imaginea urmtoare, n care putem vizualiza elevii Subseturi de
fiecrei clase! date

4. Efectuai unele corecturi asupra elevilor de la clasa 12a. Editarea


De exemplu, adugai un nou elev cu numele XX i tergei subseturilor
primul elev (Avram). nchidei tabela CLASE. Deschidei tabela de date
ELEVI i observai codul clasei primit de noul elev. Este 12a?
S-a pstrat tergerea elevului Avram?
5. tergei relaia i deschidei tabela CLASE. Mai putem obine Modificri n
elevii fiecrei clase ca subset de date? Deschidei tabela CLASE tabele
Modificai codul clasei 12a la 99a. Observai ce s-a relaionate
ntmplat cu datele din tabela ELEVI? S-au modificat peste
tot valorile cmpului clasa? Revenii la vechea valoare 12a
n tabela CLASE.
6. Refacei relaia CLASE1-nELEVI. Editarea relaiilor
7. Plasai-v n tabela CLASE i adugai o nou linie, fictiv, Enforce
pentru clasa 99a. n fereastra ELEVI adugai doi elevi Referential
pentru aceast clas. Salvai i nchidei. Activai mecanismul Integrity
Enforce Referential Integrity. Este semnalat eroarea?
8. Impunei restricia de integritate legat de actualizare. Cascade Update
Plasai-v n tabela CLASE i modificai codul clasei 99a Related fields
la 99x. Urmrii n tabela ELEVI reflectarea modificrii cheii
strine! Revenii asupra valorii 99a.
Sfat: Este mai comod s avei ambele ferestre deschise!
9. Plasai-v n tabela ELEVI i adugai o nou linie pentru un Enforce
elev din clasa 99x (care nu exist n tabela CLASE). Referential
Se permite? De ce credei c nu? Ce manevr ar trebui Integrity
fcut iniial?
10. Editai relaia i impunei restricia de tergere. Plasai-v n Cascade delete
tabela CLASE i tergei linia corespunztoare clasei 99a. records
Urmrii n tabela ELEVI reflectarea acestei manevre. Anulai
manevra de tergere! Putei?
11. Schimbai n structura tabelei CLASE cmpul diriginte ca fiind Lookup
de tip Lookup, cu valori din tabela PROFESORI. Ce se ntmpl Format
cu vechile valori? Atribuii noi valori. Subdatasheet
Deschidei fereastra Relationship. Ce legtur s-a creat ntre remove
cele dou tabele?
Deschidei tabela PROFESORI. Ce va conine subsetul de date?
Putei anula subsetul de date?

!%
12. Obinei pentru fiecare profesor informaii despre clasa unde Subdata
este diriginte.
13. Obinei ncadrarea fiecrui profesor ca subset de date Insert
Subdatasheet

Problema 5.2.
1. Proiectai structura bazei de date BIBLIOTECA, cu tabelele CARTI, CITITORI i OPERATII,
respectiv cu relaiile CARTI1-nOPERATII i CITITORI1-nOPERATII.
2. Aflai pentru fiecare carte care sunt cititorii.
3. Aflai pentru fiecare cititor care sunt crile citite.
4. Proiectai restriciile de integritate innd cont c:
vom interzice adugarea n tabela OPERATII a unei nregistrri pentru o carte care
s nu fie gsit n tabela CARTI;
vom interzice adugarea n tabela OPERAII a unui articol pentru care codul cititorului
s nu fie nregistrat deja n tabela CITITORI;
modificarea codului unei cri n tabela CARTI va determina i modificarea codului-
carte n tabela OPERATII;
modificarea codului unui cititor va determina modificarea codului n OPERATII;
tergerea unei cri din fiierul CARTI va determina tergerea tuturor articolelor din
fiierul OPERATII;
nu vom putea terge o operaie dac n tabela CITITORI exist codul cititorului.

ntrebri recapitulative
1. Cheia de legtur ntre dou tabele trebuie s fie index?
2. Cheia de legtur ntre dou tabele se numete cheie extern?
3. Dac avem un cmp de cutare ntr-o tabel suntem siguri c tabela este printe
pentru o alta?
4. Ce relaii pot fi definite n Access?
5. Dac ntr-o relaie este impus integritatea referenial, care sunt lucrurile interzise
unui utilizator?
6. Dorim s stabilim o relaie 1-1 ntre dou tabele; ce pai urmm?
7. Dorim s stabilim o relaie 1-N ntre dou tabele; ce pai urmm?
8. Dorim s stabilim o relaie N-n ntre dou tabele; ce pai urmm?

!&
Lecia
6 Normalizarea
bazei de date
Proiectarea structurii corecte pentru o tabel activitatea de normalizare
Folosirea Table Analyzer Wizard

Proiectarea unei baze de date relaionale ncepe prin definirea entitilor i a


relaiilor ntre ele. Apoi se definesc tabelele, care vor memora att datele din entiti
ct i relaiile dintre acestea. Atenia proiectanilor trebuie ndreptat ctre construirea
unor tabele care s evite anomaliile de actualizare i dificultile de prelucrare.
O tabel de date este corect formulat, adic este o relaie conform restriciilor
impuse de teoria relaiilor a lui A.F. Codd, dac:
are nume distinct n cadrul unei baze de date;
fiecare celul a relaiei conine o singur valoare;
fiecare atribut are un nume distinct;
orice valoare a unui atribut face parte din domeniul pe care a fost definit acesta;
ordinea dispunerii atributelor n relaie nu prezint importan;
orice linie este distinct de celelalte;
ordinea liniilor nu influeneaz coninutul informaional al relaiei.

6.1. Forme normale


Exemplu: S presupunem c tabelul urmtor reine codurile produselor solicitate
pe o comand, precum i numrul, data i valoarea comenzii:

com data furn adr cod1 cod2 cod3 cod4 cant val
006 01.03.98 f1 Bc a23 b66 c33 10 12980
007 01.09.98 f1 Bc c33 12 12000

Verificm s fie o relaie conform definiiei date mai sus: nu sunt linii identice, nu
sunt valori de tipuri diferite n coloane, cheia este atributul Com (numr comand). Dar:
a) cine ne garanteaz c nu pot fi comenzi cu mai mult de 4 produse?
b) cine ne garanteaz c toate produsele, chiar dac sunt cel mult 4, au aceeai cantitate?
c) unde trecem preul fiecrui produs?
d) prelucrri de tipul valoarea total a comenzilor pentru produsul b66 necesit
verificarea tuturor coloanelor i nsumarea rezultatelor pentru ntreaga baz
de date, lucru care conduce la un timp mare de rspuns.
Deci, se impune eliminarea cmpurilor care se repet i astfel se ajunge la
prima form normal:

comanda data furn adr codprod cant pret valoare


006 01.03.98 f1 Bc a23 10 100 12980
006 01.03.98 f1 Bc b66 10 200 12980
006 01.03.98 f1 Bc c33 10 150 12980
007 01.09.98 f1 Bc c33 12 150 12000

!'
n aceast tabel cheia este compus din atributele comanda i codprod. Dar:
a. Observm c anumite date se repet n mai multe linii (data i valoarea
pentru fiecare comand, numele i adresa furnizorului etc.).
b. Ce se ntmpl dac se modific adresa unui furnizor? Va trebui s cutm
n toat tabela unde apare numele furnizorului, pentru a-i modifica adresa!
c. Fiecare comand are mai multe linii corespunztoare produselor comandate.
Ce se ntmpl dac scriem greit valoarea comenzii pe o linie? Valoare unei
comenzi este o informaie calculat din suma valoric a produselor ei. Ce se
ntmpl dac am uitat s mai trecem o linie pentru o comand? Suma
produselor pre*cantitate n cazul unei comenzi va da alt valoare dect cea
reinut n coloana valoare. Deci, exist riscul de a avea n baza de date
anumite date posibil inexacte. De obicei, reinerea unei valori calculabile
se justific numai printr-o cerin legat de scurtarea timpului de rspuns.
Spunem c tabela prezint redunda i, ca urmare a acesteia pot fi anomalii
de actualizare i prelucrare. Acest lucru se datoreaz reinerii n aceeai tabel a
informaiilor despre obiecte diferite: comenzi, furnizori, produse.
Ideea de baz este separarea informaiilor care se refer la obiecte distincte, n
tabele distincte.
Operaia de spargere a relaiei care manifest anomalii, n alte relaii, poart
numele de normalizare.

COMENZI FURNIZORI PRODUSE


com data furn val furn adr com codprod cant pret
006 01.03.98 F1 12980 F1 Bc 006 a23 10 100
007 01.09.98 F2 12000 F2 Gl 006 b66 10 200
006 c33 10 150
007 c33 12 150

6.2. Normalizarea tabelelor cu Table Analyzer Wizard


Un instrument pus la ndemna proiectanilor unei baze de date, care ofer sugestii
de normalizare, este Table Analyzer Wizard deschis prin ToolsAnalyzeTable.
Tabela surs este verificat s nu conin date care se repet. Dac da, atunci se
fragmenteaz datele n una sau mai multe tabele, stabilindu-se i relaiile dintre ele.
Am proiectat o tabel cu stocurile de medicamente pe farmacii, ca n imaginea
urmtoare:

Am supus analizei aceast tabel prin ToolsAnalyzeTable i am obinut


dou tabele: o tabel cu datele despre medicamente (MED) i o tabel cu datele
despre farmacii (FAR).

"
Astfel, s-au separat, n tabele distincte,
informaiile despre farmacii de cele despre
medicamente.
Cum s-a realizat acest lucru?
Pasul 1. Am apelat asistentul prin meniul ToolsAnalyzerTable.
Pasul 2. Am indicat tabela pe care dorim s o normalizm.
Pasul 3. Am decis s lsm asistentul s decid normalizarea.
Pasul 4. Am primit o sugestie de spargere a tabelei iniiale, cu care am fost de
acord. n plus am hotrt redenumirea tabelelor noi prin butonul Rename.
Pasul 5. Asistentul asociaz o cheie unic
fiecrei tabele numind-o ID de tip
Autonumber.
Pasul 6. Urmtoarea aciune a asistentului ne
farmec de tot. Se creeaz o nou
tabel (de fapt un fiier Query), care
arat ca i tabela iniial, astfel nct
rapoartele sau formularele pe care le-am realizat pe baza tabelei surs s nu
fie reproiectate. Tabela iniial primete alt nume, dar nu se terge.

Observai existena tuturor cmpurilor din tabela iniial i, n plus, coloana nou
Lookup to Far (este referina ctre tabela FAR).
Analyze Table Wizard ne ajut s compunem o nou structur!
Normalizarea folosind Table Analyzer Wizard.
S presupunem c elevii pot avea mai multe hobby-uri i pot
desfura mai multe activiti sportive. Fie tabela PERS, ce conine
cmpurile elev, hobby, sporturi.

elev hobby sporturi


Popa muzica atletism
Popa muzica tenis
Luca foto atletism
Mircea film tenis
Mircea muzica tenis

Rezolvare
ntr-o situaie ca aceasta analizatorul nu ofer nicio soluie i atunci putem decide noi
normalizarea, dar tot cu sprijinul asistentului.

"
Pasul 1. Ne hotrm s ne lum soarta n mini!
Pasul 2. Selectm cmpurile care au valori duplicat. Ele vor forma o alt tabel. n cazul
nostru Hobby i Sporturi.
Fiecare cmp este agat i tras ctre exteriorul ferestrei. Automat se creeaz
o nou tabel.
Pasul 3. Denumim tabela.
Pasul 4. Decidem cheia tabelei. Ne este mai comod s folosim cheia generat automat de
asistent.
Pasul 5. Pentru c tabela iniial nu a fost sursa unui raport sau unei interogri nu vom
decide construirea tabelei Query.
Pasul 6. Salvm.
Pasul 7. Pentru a vedea noua structur vom deschide fereastra Relationship, ca n captur!

Problema 6.1. Fie urmtoarea tabel care reine stocurile de medicamente din mai multe
farmacii din Moldova. Analizai i normalizai manual.

Problema 6.2. Folosii Table Analyzer Wizard pentru a verifica dac normalizarea voastr
a fost la fel cu cea dat de asistent.
Problema 6.3*. Se dau imagini ale tabelelor obinute prin aciunea Analizorului asupra
unei tabele pierdute printr-o manevr defectuoas. Putei s o reconstruii? Aflai care este
tabela surs a aciunii Table Analyzer Wizard din problema anterioar.

"
Problema 6.4*. Cum normalizai tabela? Cod_elev reprezint numrul curent n clas.
Clasa Cod_elev nume_elev adresa Diriginte
12a 1 Avram Iasi Popa
12a 2 Barbu Iasi Popa
12b 1 Gagea Iasi Ionescu

Problema 6.5*. Fie tabela urmtoare ce conine numele cursurilor, profesorii, numrul
de ore pentru aceste cursuri, precum i numele elevilor care au optat pentru cursuri.
Cum ar putea arta baza de date normalizat?
nume_curs nume_prof nume_elev nr_ore grad
Astrologie popa Albu 100 prof.def
Astrologie popa Barbu 100 prof.gr.1
Meteorologie florea Doltu 200 lector

Problema 6.6. Normalizai urmtoarea relaie cu situaia nchirierii, de ctre diferii


clieni, a slilor dintr-un complex sportiv.
client nume_sala taxa
Popa biliard 1200
Ion minigolf 2000
Gaby tenis 3000
Popa cafenea 1200

Problema 6.7. Evidena cazrilor turitilor n hotelurile unei staiuni este tabela TURIST.
Credei c este corect?
turist BI hotel taxa/loc
apopei eduard as123456 lido 1200
dorneanu mihai gf345675 lido 1200
enache sorin bv512345 parc 1400

Problema 6.8. Fie un tabel care evideniaz situaia stocurilor pe depozite. Normalizai!
depozit material furnizor Stoc
d1 suruburi Astra 10
d1 suruburi Zalau 20
d2 carcase Metalcar 19
"!
Lecia
7 Interogarea
bazei de date Access
Ce sunt interogrile? Cum se proiecteaz o interogare n limbajul QBE?
Interogri de selecie a informaiilor, interogri i totalizatoare
Interogri de aciune

Sub numele de interogare sau cerere sunt referite acele solicitri de date
specificate de utilizator n mod direct, fr indicarea modului de obinere. O interogare
este o modalitate de selecie i combinare a datelor provenind din una sau mai
multe surse care s serveasc la realizarea rapoartelor, formularelor, coloanelor de
cutare etc.
O interogare va fi reinut ntr-un fiier de cereri i, la execuie, va determina
obinerea unui set dinamic de date numit Dynaset. Orice modificare a datelor n
tabelele surs conduce la modificarea rezultatului (a Dynaset-ului). De asemenea,
orice modificare n Dynaset conduce la modificri n tabelele surs. Seturile de date
dinamice obinute la execuia interogrii nu se memoreaz ca atare, ci se genereaz
automat la lansarea interogrii. Spunem c rezultatul interogrii este un fiier virtual
de date.
Tipuri de interogri:
simple de selecie select query;
pentru actualizare delete query, update query i append query;
ncruciate sau bidimensionale (numite crosstab query).
Interogrile se pot crea interactiv prin intermediul ferestrei QBE (Query By
Exemple), prin folosirea Query Wizard, sau prin scrierea unor comenzii SQL.
Paii definirii unei interogri prin fereastra QBE sunt:
1. deschiderea ferestrei QBE;
2. specificarea surselor de date (tabele sau alte interogri);
3. precizarea cmpurilor care vor forma coloanele rezultatului sau care vor fi
folosite la selecia articolelor;
4. precizarea cheilor de ordonare/grupare;
5. precizarea condiiei de selecie a articolelor;
6. rularea (lansarea n execuie).
Mediul de lucru
Urmtoarele butoane sunt mai des folosite n proiectarea interogrilor:

Datasheet view Afieaz setul de date dinamic

Design view Trece n fereastra de proiectare

Run Lanseaz n execuie interogarea

""
Meniul Query asociat operaiilor cu interogri.
Lansarea n execuie
Vizualizarea tabelei
tergerea tabelei
Interogare de selecie
Interogare ncruciat
Interogare tabelar
Interogare de actualitate
Interogare de adugare
Interogare de tergere
Alte comezi SQL
Definirea parametrilor
Fereastra QBE
Fereastra de proiectare a unei interogri are dou pri:
prima, n partea de sus, prezint sursele de date, tabelele i
relaiile dintre ele. A dou parte conine o gril pe care se
precizeaz coloanele ce vor forma rezultatul i criteriile pe
baza crora este definit interogarea.
Fereastra Show Table
Definirea surselor de date se face prin intermediul ferestrei
Show Table care apare automat la crearea unei noi interogri
sau o putem deschide oricnd pe parcursul lucrului, folosind
meniul contextual sau meniul principal QueryShowTable.
Fereastra de proprieti
Se deschide prin meniul principal cu QueryProperties
i pemite fixarea unor proprieti pentru ntreaga interogare.
Output all fields: pe Yes va introduce n rezultat
toate cmpurile tabelelor/interogrilor;
Top value: returneaz primele n sau n% articole;
Unique value: returneaz articolele unice;
Run Permission: interogarea ruleaz numai cu drepturile proprietarului;
Source Database: numele bazei de date folosite ca surs a interogrii;
Filter: permite plasarea unui filtru pe rezultatul interogrii dac n modul
Datasheet folosim RecordsFilter by Form/ by Selection/Advanced Filter.

Proiectarea interogrilor de selecie


Select Query
Interogrile de selecie sunt cele mai folosite
dintre toate formele de interogare pentru c ofer
posibilitatea extragerii informaiilor din una sau
mai multe tabele.
Fie baza de date SCOALA cu tabela ELEVI.
Dorim s obinem lista elevilor din clasa 12a.
Pasul 1. Vom deschide fereastra de proiectare
a interogrii prin butonul Query i New
din fereastra Database.

"#
Pasul 2. Pentru nceput vom alege modul de proiectare Query Design. Se va
deschide fereastra de proiectare Select Query.
Pasul 3. Vom deschide tabela ELEVI prin fereastra Show Table.
Pasul 4. Pentru indicarea faptului c toate cmpurile din tabela ELEVI vor constitui
ieire din interogare, ne poziionm pe prima linie a tabelei (unde este
asterisc *) i executm drag&drop la prima coloan, pe linia Fields.
Pasul 5. Vom executa drag&drop pe cmpul clasa pentru introducerea condiiei de
filtrare. O alt cale de a introduce n grila rezultat un cmp este deschiderea
listei de cmpuri prin click pe linia Fields.
Pasul 6. Specificm valoarea seleciei. n cazul nostru plasm valoarea 12a pe
linia Criteria a coloanei clasa.
Pasul 7. Vom lansa n execuie prin butonul Run. O alt posibilitate de vizualizare
a setului de date dinamic obinut este prin butonul Datasheet View. Putem
reveni n proiectare prin butonul Design.
Pasul 8. Vom salva, observnd aranjarea interogrii n fereastra Database/
subfereastra Query.

Operatori n selecie
Operatorul AND
aplicat la nivel de cmp i
ntre cmpuri:
Exemplu: selecia
elevilor din clasa 12a care au media cuprins ntre 8 i 10.
Condiiile impuse cmpurilor clasa i media sunt pe aceeai linie.
Operatorul OR aplicat la acelai cmp:
Obinem toi elevii din clasa 12a
sau 12c.
Termenii expresiei logice unite
prin operatorul OR sunt plasai n
aceeai coloan, dar pe rnduri
diferite.
Operatorul OR
aplicat la cmpuri diferite:
Obinem elevii care
sunt din clasa 12a sau
au media 10.
Observai plasarea
condiiei pe rnduri diferite!
Folosirea mtilor pentru selectarea unei submulimi
de valori:
Se poate preciza un ablon care conine caracterele
de substituire *, pentru nlocuirea unui grup de caractere
i ?, pentru nlocuirea unui singur caracter, cel de pe
poziia indicat n ablon.
Exemplu: obinem numele elevilor care au prima liter A sau a.
Cuvntul Like este automat asociat de sistem atunci cnd folosim ablonul de
selecie.

"$
Condiiile IS NULL i IS NOT NULL:
Dac dorim s selectm
articole care au valori vide ntr-o
coloan, vom folosi condiia IS
NULL. De exemplu, pentru ca s
obinem elevii care nu au com-
pletat media, vom trece condiia
IS NULL pe coloana media.
Folosirea numelui de cmp
drept operator:
Obinem elevii care au nregis-
trat greit data naterii. Observai
ncadrarea numelui de cmp ntre
paranteze ptrate i funcia sistem
date().

Proiectarea interogrilor cu parametri


Dac dorim ca filtrul aplicat asupra datelor s fie variabil vom introduce numele
variabilei ntre paranteze ptrate, vom deschide fereastra de definire a parametrilor
din meniul QueryParameters i vom preciza numele i tipul variabilelor folosite
drept parametru. Pentru o interogare de felul: care sunt elevii clasei... Cls?, unde
Cls este o variabil ce va reine numele clasei primit din exterior la rularea interogrii,
ecranul de proiectare arat astfel:

Folosirea cmpurilor calculate


Uneori se dorete ca printre coloanele rezultat al interogrii s fie i expresii obinute
din cmpurile tabelelor surs. Pentru aceasta se introduce formula de calcul i se
precizeaz numele coloanei. Atenie! numele coloanei trebuie urmat de dou puncte.

Folosirea funciilor Access


Funciile Access pot in-
tra n componena expresiilor,
ca n orice alt limbaj. Sunt

"%
peste 160 de funcii standard. De exemplu, Year (<data>) extrage anul din data
calendaristic dat ca parametru.

Vizualizarea comenzii SELECT SQL


Pentru a vedea comanda SELECT generat de sistem se folosete butonul SQL
View sau meniul contextual din care alegem comanda SQL View.
Exemplu: comanda generat prin proiectul anterior care folosete cmpuri calculate:
Select elevi.nume, elevi.absm, elevi.absn, [absm]+[absn] as total
from ELEVI

Vizualizarea proprietilor cmpurilor i ale interogrii


Proprietile cmpurilor stabilite odat cu proiectarea structurii tabelei se
pstreaz, dar pot fi asociate altele pentru cazul folosirii interogrii la rapoarte sau
formulare. Pentru fiecare cmp rezultat al interogrii se pot stabili anumite proprieti
prin meniul contextual Properties, cum ar fi:
a. Description: pentru descrierea cmpului pe maxim 255 caractere;
b. Format: pentru specificarea modului de afiare a coloanei;
c. Decimal Places: pentru fixarea numrului de zecimale;
d. Display Control: pentru asocierea unui anumit controler cmpului, astfel nct
la proiectarea tuturor formularelor bazate pe aceast surs s fie utilizat acelai
obiect de control.
e. Caption: pentru schimbarea numelui cmpului la afiarea sa pe datasheet sau
pe formular.

Proiectarea interogrilor de sortare


Putem folosi interogarea de selecie pentru indicarea mai multor cmpuri drept
chei de sortare. Ordinea acestor cmpuri d prioritatea cheilor.
De exemplu, dorim elevii ordonai pe clase, n cadrul clasei ordonai descresctor
dup medii, iar la aceeai medie ordonai alfabetic. Vom proceda astfel:
1. Deschidem fereastra de proiectare pentru o nou interogare din ecranul
DatabaseQueryNew i includem tabela ELEVI.
2. Plasm primul cmp, clasa, indicnd la linia Sort opiunea Ascending.
3. Plasm a doua coloan media, indicnd la linia Sort opiunea Descending.
4. Plasm pe a treia coloan cmpul nume, indicnd la linia sort opiunea
Ascending.

Limitarea numrului de articole


Exemplu: dorim s aflm primii 10 elevi cu mediile cele mai mari din coal.
Pentru aceasta vom folosi o interogare de selecie. Vom specifica pentru coloana

"&
media sortarea descresctoare i, din fereastra
de proprieti pentru interogare, vom fixa la 10
linia Top Value.

Proiectarea interogrilor totalizatoare


n multe situaii este necesar gruparea
articolelor pentru a obine anumite valori statistice. Se pot folosi funciile:
COUNT() numr nregistrrile grupului
SUM() nsumeaz valorile pentru grup
AVG(...) calculeaz media valorilor articolelor din grup
MIN() extrage valoarea minim a expresiei din grup
MAX() extrage valoarea maxim din grup
STDEV(..) calculeaz abaterea standard
VAR(..) calculeaz dispersia

Cum realizm o interogare totalizatoare?


Exemplu: dorim s calculm numrul de elevi din fiecare clas i valoarea
medie a absenelor nemotivate.
1. Deschidem fereastra de proiectare pentru o nou interogare din ecranul
DatabaseQueryNew;
2. Adugm tabela ELEVI prin Show Table n fereastra Query;
3. Activm opiunea Total din meniul ViewTotals;
4. Plasm pe prima coloan cmpul clasa prin drag&drop i fixm acest cmp
drept criteriu de grupare;
5. Trecem pe coloana a doua cmpul absn i alegem funcia sum din lista deschis
pe linia Total;
6. Pentru a putea numra codurile distincte din fiecare clas alegem funcia COUNT
pentru cmpul cod;
7. Plasm cmpul media i funcia AVG;
8. Pentru titlul coloanelor folosim alt identificator din fereastra de proprieti, deschis
cu ViewProperties. Numele coloanelor vor fi trecute n Caption;
10. Rezultatul interogrii:

11. Fereastra de proiectare:

"'
Proiectarea interogrilor ncruciate de tip Crosstab
O ncruciare este rezultatul unei interogri speciale care permite analizarea relaiei
dintre un cmp al tabelei de date i alt cmp al aceluiai tabel. De exemplu, pentru
tabela ELEVI vrem s aflm numrul de elevi, cu aceeai medie, din fiecare clas.

Proiectarea interogrii prin folosirea utilitarului Crosstab Query:


1. Apelm generatorul prin fereastra DatabaseQueryNew;
2. n fereastra de proiectare selectm tabela surs ELEVI;
3. Alegem forma interogrii prin meniul QueryCrosstab Query. Se observ n
fereastr linia Crosstab;
4. Plasm pe prima coloan cmpul clasa care va fi folosit pentru linii. Din lista
Crosstab alegem RowHeading, iar pe linia Total trecem Group By;
5. Plasm cmpul media folosit pentru coloanele interogrii i alegem din lista
Crosstab opiunea Column Heading. Pe linia Total trecem Group By;
6. Plasm cmpul cod, folosit drept coninut al matricei, pentru care vom alege pe
linia Crosstab opiunea Value, iar pe linia Total trecem funcia Count.
ObservaI fereastra de proiectare:

Proiectarea interogrilor de tergere Delete Query


Cu ajutorul interogrilor putem obine seturi de date care pot fi supuse operaiei
de tergere. De exemplu, dorim s tergem toi elevii clasei 12a. Pentru a defini
operaia se procedeaz astfel:
1. Apelm generatorul de interogri din fereastra
DatabaseQueryNew;
2. Selectm tabela surs ELEVI;
3. Alegem din meniul QueryDelete Query.
Observm linia Delete.
4. Prin drag&drop completm cmpurile care vor fi folosite fie la identificarea
articolelor, fie la filtrarea lor. n cazul nostru vom completa prima coloan din
interogare cu Clasa i vom impune pe linia criteria condiia =12a. Observm
pe linia Delete opiunea Where completat deja.
5. Vizualizm setul de date dinamic care va fi ters prin butonul Datasheet View;
6. Dac suntem de acord lansm comanda Run.

#
Proiectarea interogrilor de corecie Update Query
Corecia mai multor articole care verific o anumit condiie cu aceeai valoare
se poate face printr-o interogare de tip Update.
De exemplu, dorim modificarea clasei tuturor elevilor promovai de la 11b la
12b. Vom proceda astfel:
1. Aplem generatorul de interogri din fereastra
Database Query New Design View;
2. Selectm tabela surs ELEVI prin comanda
Show table;
3. Executm comanda QueryUpdate pentru
tipul interogrii. Observai adugarea liniei Update To;
4. n fereastra de proiectare vom trece cmpul care sufer modificarea: clasa la
valoarea 12b;
5. Pentru c filtrul se aplic pe acelai cmp, vom completa aici criteriul de selecie
clasa=11b;
6. Previzualizm articolele care
vor suporta corecia, prin
butonul View;
7. Dac dorim s vizualizm i
alte cmpuri, pe lng cele
care vor suferi corecii, este necesar s se execute drag&drop pe acele cmpuri
i s se treac numele acestora ntre paranteze ptrate pe linia Update To;

Proiectarea interogrilor pentru adugare Append Query


n vederea adugrii unui set de articole dintr-o tabel n alt tabel, se poate
folosi o interogare care va selecta datele ce trebuie adugate i le va trimite n
cmpurile tabelei destinaie.
De exemplu, din tabela ELEVI dorim s copiem numele elevilor cminiti n
tabela CAMINISTI, creat deja.
1. Apelm generatorul de interogri din fereastra Database Query New Design
View; vom selecta tabela surs ELEVI, prin comanda Show Table;
2. Selectm cmpurile elevilor transferai sau cele care folosesc la filtrare: nume
elev i caminist;
3. Punem condiia de filtrare Caminist=Yes;
4. Alegem forma interogrii din meniul QueryAppend Query;
5. Observm linia Append To n
fereastra de proiectare a interogrii;
6. Indicm tabela destinaie
CAMINISTI;
7. Precizm pe linia Append nu-
mele cmpului destinaie
(numai n cazul n care nu are
acelai nume).

#
Proiectarea interogrilor de tip Make Table
O interogare de tip Make realizeaz o nou tabel cu date provenind din una
sau mai multe tabele sau din alt interogare.
De exemplu, dorim s copiem elevii de la informatic sau cei care sunt n clasa
a 12-a n tabela ELEVDIR.
Pentru a crea o interogare de tip Make Table se deschide Query Designer i se
selecteaz opiunea QueryMake Table din meniul principal.

Se deschid tabelele CLASE i ELEVI i se fixeaz coloanele care permit selecia


articolelor.
De asemenea, se precizeaz coloanele care vor alctui structura noii tabele.
Putem redenumi un cmp printr-o construcie de forma <noul nume>:<vechiul nume>.
Putem vedea noua tabel, nainte de a fi creat, trecnd n modul Datasheet View.
Tabela este static, deci orice modificare a datelor din tabelele surs nu se
reflect automat. Trebuie rulat din nou interogarea pentru actualizarea acesteia. La
reluarea execuiei datele se vor suprascrie peste vechile valori n acelai tabel!

Proiectarea interogrilor simple prin


Query Wizard
Ne propunem s construim o
interogare pentru aflarea numrului de
ore pe care l are fiecare clas i a
numrului de discipline, folosind
Query Wizard.
Vom folosi tabelele CLASE (cls,
diriginte)(1,n)OBIECTE (cls,
obiect, prof, nr_ore).
Pasul 1. Din fereastra New Query
Simple Query Wizard
specificm tabelele surs. n
cazul nostru vom lua din CLASE doar codul clasei i
din OBIECTE numrul de ore.
Pasul 2. Specificm operaia de nsumare a numrului de ore
i de numrare a articolelor
pentru aceeai valoare a
clasei.
Pasul 3. Salvm. Observaie: numele
coloanelor totalizatoare este
automat creat n funcie de
operaia efectuat. Schim-
#
barea acestor denumiri se face deschiznd interogarea n modul Design i
modificnd linia Field.

Realizarea interogrilor ncruciate prin folosirea asistentului Crosstab Wizard


Ne propunem s aflm numrul de elevi din fiecare clas cu aceeai medie.
Apelm utilitarul pentru generarea interogrii Database Query New
Crosstab Wizard.
Pasul 1. Alegem tabela care va constitui
sursa de date, n cazul nostru
tabela ELEVI. Putem selecta i o
interogare realizat anterior numai
dac am selectat butonul radio
Query;
Pasul 2. Alegem cmpul clasa ale crui
valori vor reprezenta liniile
rezultatului.
Pasul 3. Alegem cmpul media ale
crui valori vor constitui coloa-
nele interogrii.
Pasul 4. Precizm funcia care se calculeaz la intersecia liniei cu coloana (count);
vom numra elevii dintr-o clas care au o anumit medie (4, de exemplu).
Se previzualizeaz forma interogrii n partea de jos a ferestrei. Putem
inversa cmpurile, astfel
nct s avem pe linii
mediile i pe coloane
clasele.
Pasul 5. Se atribuie un
nume interogrii i se salveaz. Se poate intra n fereastra de proiectare
pentru a schimba atributele coloanelor.

Proiectarea interogrilor pentru gsirea duplicatelor


cu Find Duplicates Query Wizard
Ne propunem s gsim toi elevii care sunt nscui n aceei dat.
Pasul 1. Selectm New QueryFind Duplicates. Introducem numele tabelei surs.
Pasul 2. Selectm cmpul dup care dorim cutarea valorilor identice (n cazul
nostru data_nastere).
Pasul 3. Selectm celelalte cmpuri care vor fi afiate la interogare. De exemplu,
numele elevului, clasa, adresa.

#!
Pasul 4. n final, putem schimba numele interogrii i putem decide n ce mod va
afia interogarea (View = afiare n modul Datasheet, Modify = afiare n
modul Design).
Interesant este forma interogrii creat de Wizard:

Proiectarea interogrilor de cutare a nregistrrilor fr corespondent,


prin Find Unmatched Query Wizard
Ne propunem s aflm pentru care clas/clase nu au fost (nc) introduse
informaii despre elevi. Vom folosi tabelele CLASE (cls,diriginte) 1-n ELEVI (cls,
nume),
Pasul 1. Vom deschide fereastra de
proiectare a unei noi interogri
prin QueryNew Find
Unmatched Query Wizard i vom
specifica numele tabelei
printe.
Pasul 2. Se solicit numele tabelei
copil.
Pasul 3. Trebuie indicate cmpurile
corespondente din cele
dou tabele.

Pasul 4. Trebuie specificat sursa de


date i cmpurile care se vor
afia.
Pasul 5. Salvm.
Observai proiectul interogrii
realizate de Wizard pentru gsirea
claselor fr elevi.
Observai comanda SELECT
scris de utilitar:
Select clase.cls from clase
left join ELEVI on
clase.cls=elevi.clasa
where ((elevi.clasa) Is null)

#"
Proiectarea unei interogri pentru cmpul de tip Autonumber astfel
nct valoarea sa iniial s fie diferit de 1!
S presupunem c exist o tabel CONTRACTE unde numrul contractului
ncepe de la valoarea 1001, cu pasul 1. Cmpul este cheie i este de tip
Autonumber. Pentru a iniializa valoarea de start la cmpul Autonumber se procedeaz astfel:
1. Se creeaz structura tabelei CONTRACTE cu toate cmpurile. Vom specifica tipul
Autonumber pentru cmpul nr_contr.
2. Se creeaz o tabel de manevr cu un singur cmp
de tip numeric, cu numele cod.
3. Se adaug un singur articol avnd n cmpul cod
valoarea de start (n cazul nostru 10001).
4. Se creeaz o interogare de tip Append pentru tabela
manevr, astfel:
a. se deschide fereastra de proiectare pentru o nou
interogare (Database Queries New Design
View);
b. se precizeaz n fereastra Show Table numele
MANEVRA i se apas butonul Add;
c. se execut drag&drop de la cmpul cod din tabela
MANEVRA la zona Fields de precizare a
coloanelor rezultat;
d. se deschide meniul Query i se alege opiunea
Append Query;
e. se precizeaz numele tabelei care va primi
rezultatul interogrii, tabela CONTRACTE;
f. se plaseaz pe linia Append To numele cmpului
nr_contr;
g. se nchide interogarea (i se salveaz cu numele
Pune-primul-cod);
h. se lanseaz n execuie (butonul Open);
i. trebuie rspuns cu atenie la mesajele sistem
legate de operaie:
De fiecare dat cnd se va executa interogarea
se va aduga un nou articol cu acest cod; deci va fi corect pentru prima dat, dar
incorect pentru eventualele reluri ale interogrii de adugare. De aceea este necesar
s fie tears interogarea de pe disc prin butonul delete i, desigur, tabela MANEVRA.
j. se vizualizeaz tabela CONTRACTE prin butonul Open.

Problema 7.1. Deschidei baza de date SCOALA. Verificai s existe tabelele ELEVI
(cod_elev, clasa, nume, media, data_nasterii, absente_nemotivate, absente_motivate) CLASE
(cod-clasa, diriginte, profil), OBIECTE (cod_obiect, clasa, nume, cod_profesor), PROFESORI
(cod_profesor, nume, specialitate).

Obinei interogrile urmtoare prin Query Design Folosii...


1. lista elevilor din clasa 12a Select query
2. care sunt elevii din clasa 12a care au media cuprins ntre Criterii de
8 i 10 selecie;
operator and

##
3. elevii din clasa 12a sau 12c Criterii de selecie;
operator or
4. elevii care sunt din clasa 12a sau au media 10 Criterii de selecie;
operator or
5. numele elevilor care au prima liter A sau a Mti de selecie;
operator like
6. elevii care nu au completat media Criterii de selecie;
valori vide:
funcia ISNULL
7. elevii care au nregistrat greit data naterii (presupunem Criterii de selecie;
c vrsta unui elev poate fi de maxim 18 ani!) folosirea numelui
de cmp drept
operator; funcia
DATE
8. care sunt elevii clasei... Cls? Interogri cu
parametri
9. care este clasa elevului... numeX? Interogri cu
parametri
10. afiai numrul total de absene al fiecrui elev Cmpuri calculate
(motivate + nemotivte)
11. care este vrsta fiecrui elev? Funcii YEAR, NOW
12. elevii pe clase, n cadrul clasei descresctor dup medii Introgri de sortare
i la aceeai medie alfabetic
13. primii 10 elevi ordonai dup medie (din tabela ELEVI) Interogri sortare cu
limitare valori
14. calculai numrul de elevi din fiecare clas i valoarea Interogri
medie a absenelor nemotivate totalizatoare
15. din tabela ELEVI am dori numrul de elevi din fiecare Interogri
clas pe medii ncruciate
16. tergei toi elevii clasei 12a Delete query
17. modificai clasa tuturor elevilor promovai de la 11b la 12b. Update query
18. copiai numele elevilor cminiti din tabela ELEVI Append query
n tabela CAMINISTI (creat deja)
19. copiai elevii de la informatic sau pe cei care sunt n clasa Make Table
a 12-a n tabela ELEVDIR. Presupunem c profilul fiecrei
clase se gsete n tabela CLASA relaionat cu ELEVI

Problema 7.2. Scriei numele funciei pentru obinerea valorilor statistice din coloana a
doua.

Funcia Efect
numr nregistrrile grupului
nsumeaz valorile pentru grup
calculeaz media valorilor articolelor din grup
extrage valoarea minim a expresiei din grup
extrage valoarea maxim din grup

#$
Problema 7.3. Presupunem c n tabela CLASE au fost nregistrate informaii despre
unele clase (nu neaprat toate). De asemenea, n tabela ELEVI sunt inclui elevii unor
clase care se regsesc n tabela CLASE sau nu. Proiectai relaia ntre tabelele CLASE
i ELEVI.
Proiectai interogrile urmtoare, cu date din mai multe tabele, n Query Design:

1. Afiai informaii numai despre clasele care au introduse Asociere Inner Join
date despre elevii lor.
2. Obinei toate clasele i, eventual, elevii lor. Asociere Left Join
3. Obinei toi elevii i, eventual, date despre dirigini i Asociere Right Join
profilul clasei lor (dac aceste informaii au fost nregistrate).
4. Obinei pentru fiecare elev numele dirigintelui i profilul clasei
(se vor selecta doar elevii care nu sunt orfani) Inner join

Problema 7.3. Proiectai interogrile urmtoare prin Query Wizard:

a. Afiai numrul total de ore pe care l are fiecare clas i


numrul disciplinelor. Simple query
b. Afiai numele elevilor nscui n aceei zi. Find Duplicates Query
c. Aflai pentru care clas/clase nu au fost (nc) introduse Find Unmatched
informaii despre elevi. Query
d. Afiai numrul de elevi pe clase i pe medii. Crosstab query

*Problema 7.4.
a. Deschidei baza de date BIBLIOTECA. Actualizai datele astfel nct s cuprind tabelele
CARTI (nr_inventar, titlu, autor, pret, numar_exemplare, editia, editura, data_intrare,
data_iesire, este_manual?, stare), CITITORI (cod, nume, data_nasterii, ocupatia), OPERATII
(cod_carte, cod_cititor, data_imprumut, data_restituire). Presupunem c ocupatia poate avea
valorile elev, student, prof, alte_ocup, iar cmpul stare poate avea valorile fbuna,
buna, veche, deteriorat, pierdut.
b. Proiectai interogri pentru a da rspunsuri la urmtoarele ntrebri:
1. Care sunt crile existente (autor, pre, numr de exemplare) al cror nume ncepe cu
informatica?
2. Care sunt crile din colecia SF?
3. Ce cri din colecia SF au preul cuprins ntre 100.000 i 200.000 de lei?
4. Ce cri au fost scoase din inventar dup 1999?
5. Care sunt titlurile crilor intrate n bibliotec n intervalul x-y?
6. Ce crile ale lui M.Eminescu sunt n bibliotec? Sau ce cri de poezii sau poeme?
7. Sunt cri la care nu s-a completat numele autorului. Care sunt acestea?
8. Dorim s selectm crile care se refer la
programare. De exemplu: Arta programrii,
Programe C++, Tehnici de programare etc.
9. Care sunt crile din colecia Info ordonate
cronologic dup data intrrii n bibliotec?
10. Care sunt crile autorului X?
11. Care este preul pe pagin, calculat la fiecare carte
a autorului X, n ordinea descresctoare a acestor valori?
12. Care a fost durata de staionare a crilor? Se va calcula n ani i se va afia n ordinea
cesctoare a acestei durate.
13. Care sunt cititorii elevi nscrii la bibliotec?
14. Lista crilor cele mai scumpe din fiecare colecie?
15. Ci cititori sunt elevi?

#%
16. Afiai toate operaiile de mprumut (cu sau fr restituire) cu data, numele cititorului i
numele crii.
17. Determinai mprumuturile care nu au fost returnate.
18. Afiai numrul de zile ntre data mprumutului i data restituirii.
19. Putei determina situaiile n care numrul de zile ntrziere este >14?
20. Afiai cititorii care nu au napoiat crile mprumutate. Pentru carte se va folosi o
singur coloan, cu titlul i autorul acesteia.
21. Care sunt cititorii restanieri la data curent? Pentru fiecare cititor se va afia numele,
numele crii nerestituite, precum i data cnd a fost mprumutat. Restanieri se
consider cei pentru care numrul de zile de la data mprumutului depete 14. Calculai
penalizarea pentru ntrziere, presupunnd c nu se cer mai mult de 200 de lei/zi
ntrziere.
22. Cartea X se gsete pe raft sau este la un cititor? Care cititor?
23. Cte cri sunt n bibliotec, ordonate pe edituri i pe colecii?
24. Cte manuale sunt n biblioteca?
25. Numrul de manuale pe edituri.
26. Care sunt editurile care au publicat manuale scolare?
27. Care sunt crile mprumutate de cititorul X?
28. Cine a citit cartea X?
29. Care sunt crile mprumutate n ziua X? De cine au fost mprumutate?
30. Cine i cnd a mprumutat cri ale lui Mihai Eminescu?
31. Care sunt crile mprumutate n luna iunie anul curent (numele cititorului i numele
crilor)?
32. Situaia numrului de cri mprumutate pe luni i cititori.
33. Afiai cititorii nscrii care nu au mprumutat nicio carte sau care au mprumutat, dar
nu n acest an.
34. Numrul cititorilor pe ocupaii.
35. Evidena tuturor operaiilor ordonate dup data mprumutului, fiecare operaie cuprinznd
numele cititorului i titlul crii.
36. Numrul crilor intrate i numrul crilor scoase din inventar, ordonat pe ani. De
exemplu, ntre 1999 i 2003.
37. Valoarea total a crilor din bibliotec.
38. Afiai ca subset de date restanele fiecrui cititor.
39. Afiai toi cititorii elevi nscrii la bibliotec, ordonati dup clas, cu mesajul dac au
sau nu restane!
40. Afiai cele mai scumpe cri (primele 10!) existente n bibliotec.
41. Sunt cri pierdute care trebuie scoase din eviden. Pentru acestea se folosete cmpul
stare. Trecei n alt eviden crile deteriorate i, apoi, tergei-le din tabela CARTI.
42. Scoatei din eviden crile autorului X!
43. Pentru toate crile aprute n bibliotec nainte de anul 1990 majorai preul cu 0,1%.
44. Editura Albatros i-a schimbat numele n Pinguin la 1septembrie 1992. Se cere
introducerea acestei modificri pentru toate crile publicate anterior redenumirii.
45. Mutai n alt eviden manualele colare. Apoi reconstruii tabela CARTI.
46. S presupunem c n baza de date FARMACII (existent) dorim o nou tabel cu
aceeai structur ca a tabelului CITITORI. Tabela nou o vom numi PERSOANE. Cum
putem face? Putem copia doar structura sau articolele?
47. Numele autorului G.B.SHAW a fost scris greit sub forma G.B.SOU sau g.b.sou.
Efectuai corecia!
48. Modificai preul crii Poezii de Mihai Eminescu, aprut la Editura Pinguin, de la
preul de 2.000 la 200.000 lei.

#&
*Lecia
8 Elemente de programare
n SQLAccess
Comanda de selecie SELECT
Comenzile de actualizare INSERT, UPDATE, DELETE
Comanda de creare a tabelelor CREATE TABLE

Interogrile ca modalitate comod de obinere i actualizare a informaiilor


dintr-o baz de date de ctre utilizatori, nu neaparat programatori pot fi proiectate
n mod vizual prin instrumentele Design/ Buider/ Wizard. Dar nu toate cererile de
informaii pot fi astfel descrise. Pentru solicitri mai complicate putem folosi limbajul
SQL. Vom prezenta cteva comenzi utile operaiilor de interogare i actualizare a
datelor. Editarea acestor comenzi se face n fereastra SQL View operabil dup ce
am intrat n proiectarea unei interogri prin Query Design.

8.1. Instruciunea SELECT


Considerat cea mai important i mai folosit instruciune SQL, SELECT permite
specificarea datelor care vor constitui ieirea din interogare, precum i sursa acestora.
SELECT [domeniu] [*]/[<coloane>] FROM [<tabele>]
[WHERE<exp>][GROUP BY<lista_chei>][HAVING<exp>]
[ORDER <exp>]
Clauza SELECT precizeaz coloanele care vor forma rezultatul. Clauza domeniu
poate conine: All specific faptul c toate articolele vor forma rezultatul; Distinct se
vor elimina din rezultat articolele duplicat create pe baza listei de coloane specifi-
cate; Distinctrow va elimina din rezultat toate dublurile pe baza tuturor coloanelor
din tabele.
Asteriscul (*) indic faptul c vor fi incluse toate cmpurile tabelelor surs
precizate n clauza FROM.
Clauza coloanele poate conine cmpuri aparinnd tabelelor definite n clauza
FROM, constante, funcii sau expresii cu acestea. Coloanele pot primi un alt nume,
prin clauza AS. Pot fi utilizate funcii cum sunt: AVG(<exp>) calculeaz media
aritmetic, COUNT(<art selectat>) numr seleciile, SUM(<art-selectat>) calculeaz
suma, MIN(<art-selectat>), MAX(<art-selectat>) determin extremul.
Clauza FROM specific lista fiierelor de intrare n prelucrare. Ca i n cazul
expresiilor, se pot stabili aliasuri pentru tabele n clauza AS.
Exemplu: Fie baza de date SCOALA cu tabelele ELEVI (cod, nume, cls, med,
absn, absm) i CLASE (cls, profil, diriginte)
Numele tuturor elevilor select nume from elevi
Numele claselor (distincte!) din select distinct cls as cod_clasa from elevi
coal folosind tabela Elevi
Tot coninutul fiierului ELEVI select * from elevi
Media general a elevilor select avg(med) as med_gen from elevi
* Tem suplimentar

#'
Numrul elevilor din coal Select count(*) as nr_elevi from ELEVI
Numrul claselor din coal Select count(distinct cls) from ELEVI
Diriginii claselor Select diriginte,cls, profil from CLASE
Numrul elevilor i cea mai Select count(*) as numar-elevi, min([media])
mic medie as media_minima from ELEVI
Clauza WHERE permite introducerea filtrelor i a legturilor ntre tabele.
Exemple:
Care sunt elevii cu medii ntre select nume, med from ELEVI where med between
8 i 10 din toate clasele 8 and 10 and cls Like 12*
a 12-a.
Care sunt diriginii claselor Select diriginte, cls from CLASE where
de informatic? profil=informatica
Care sunt elevii cu media 10? Select elevi.nume, elevi.cls, clase.profil from
De la ce clase i de la ce ELEVI, CLASE where elevi.cls=clase.cls and
profil sunt ei? elevi.med=10
Care sunt elevii dirigintelui X? Select elevi.nume, from ELEVI, CLASE where
clase.cls=elevi.cls and clase.diriginte=x
Clauza GROUP BY permite gruparea rezultatelor.
Exemplu:
Care sunt elevii cu media 10 Select elevi.cls, clase.diriginte elevi.nume
pentru fiecare clas (precum from ELEVI, CLASE; where elevi.cls=clase.cls
i numele diriginilor lor)? and elevi.med=10 group by cls
Clauza HAVING fixeaz restricii de afiare a grupului.
Exemplu:
S se calculeze numrul Select elevi.cls, count(*) from ELEVI, CLASE
elevilor pe clase, dar numai where elevi.cls=clase.cls; group by cls having
de la profilul info. clase.profil=info
Clauza ORDER BY specific expresia de ordonare i sensul ordonrii.
Exemple:
Lista claselor pe profiluri. Select * from clase Order by profil
Lista alfabetic a elevilor Select elevi.nume from ELEVI, CLASE where
dirigintelui Popa. elevi.cls=clase.cls and clase.diriginte=Popa
order by elevi.nume asc

Folosirea parametrilor
Dac expresia de filtrare conine un ir ntre paranteze ptrate, Access consider
c este vorba de un parametru i, la execuie, va solicita introducerea valorii sale.
De exemplu, comanda pentru obinerea elevilor unei clase oarecare dat de utilizator
este:
Select elevi.nume_elev, elevi.media, elevi.clasa
from ELEVI
where (((elevi.clasa)=[cod-clasa]))
order by elevi.media DESC;

$
Asocieri ntre tabele
1. O modalitate prin care se specific legtura dintre dou tabele a fost deja
folosit clauza WHERE. n principal sintaxa pentru o asociere, numai de tip
Inner Join, este:
SELECT lista-coloane from lista-tabele
WHERE tabela1.coloana1=tabela2.coloana2
2. O alt posibilitate de definire a asocierilor este prin clauza FROM. Avantajul
folosirii acestei clauze pentru asocieri este dat i de posibilitatea referirii la
toate cele 3 tipuri de asociere Inner, Left i Right Join.
SELECT <lista-coloane> FROM (<tabela1>
[INNER/LEFT/RIGHT] JOIN <tabela2> ON <conditia1>)
WHERE<conditie>
Exemple:
Toi elevii de la profilul Select elevi.nume from CLASE inner join elevi
informatic on clase.cls=elevi.cls
WHERE clase.profil= informatica
Toate liniile tabelei CLASE i Select clase.cls, clase.profil, elevi.nume from
elevii acestor clase CLASE left join elevi on clase.cls=elevi.cls
Toi elevii i diriginii lor chiar Select clase.cls, clase.profil, elevi.nume from
dac nu au corespondent CLASE right join elevi on clase.cls=elevi.cls
n tabela ELEVI
3. Asocieri multiple. Atunci cnd sunt mai multe tabele putem realiza asocierile
ntre acestea prin urmtoarea form a comenzii SELECT:
Select <coloane> FROM (<tabela1>
[<tip>] JOIN <tabela2> ON <conditia1>)
[<tip>] JOIN <tabela3> ON <conditia2>)
[<tip>] JOIN <tabela4>)
WHERE<conditie>
Exemplu: Fie tabelele SCOLI (codscoala, nume, adresa), CLASE (codscoala,
codclasa, profil) ELEVI (cod, codclasa, nume, media). Dorim s obinem pentru
toate colile din Iai lista cu numele elevilor i cu profilul la care sunt nscrii.
SELECT scoli.nume, clase.profil, elevi.nume
From ((scoli inner join clase on scoli.codscoala=clase.codscoala)
Inner join elevi on clase.codclasa=elevi.codclasa)
Where ((scoli.adresa) like *IASI*)

Interogri de tip Union


Interogrile de tip Union sunt de fapt reuniuni ale rezultatelor obinute prin mai
multe interogri. De obicei, coloanele rezultate din fiecare interogare care particip
la reuniune sunt aceleai ca nume, numr, tip. De exemplu, avem ntr-o tabel elevii
vechi ai colii i n alta elevii admii la examenul de admitere. Structura celor dou

$
tabele poate s coincid n ceea ce privete doar cmpurile nume, data_naterii,
adresa. Dorim o interogare care s returneze toi elevii mai vechi sau mai noi care
stau n Iai.
Select nume, adresa, data_nasterii from ELEVI
UNION
Select nume, adresa, data_nasterii from ADMITERE

Subinterogri
De regul, o interogare poate fi inclus n alt interogare, fie n clauza WHERE,
fie n clauza SELECT. De exemplu, dorim s testm dac n coal sunt elevi care
au avut drept medie de admitere o valoare mai mic dect ultima medie de anul
acesta. Fie tabelele urmtoare: ELEVI (nume i prenume, adresa, media...) i
ADMITERE (nume_elev,adresa, media...).
Select elevi.[nume si prenume], elevi.media
from ELEVI
where (((elevi.media)<(select min(media) from admitere)));

8.2. Comanda INSERT


Permite adugarea articolelor dintr-o tabel la sfritul altei tabele. Face apel la
instruciunea SELECT, care va identifica liniile i coloanele care se transfer. O alt
form a comenzii permite adugarea unei singure nregistrri n tabel i completarea
acesteia cu date:
INSERT INTO <tabela> <instructiune-SELECT>/VALUE<valori>
Exemple:
S se adauge elevul Ionescu Insert into ELEVI(nume_elev, clasa, media)
Mircea din clasa 9a cu values (ionescu Mircea, 9a, 9.75)
media 9,75 n tabela ELEVI.
S se adauge n tabela Insert into ELEVIMAN (nume_elev,clasa,media)
ELEVIMAN toi elevii cminiti Select elevi.nume_elev,elevi.clasa, elevi.media
din tabela ELEVI. from ELEVI where elevi.caminist=YES;

8.3. Comanda DELETE


Permite tergerea din tabela specificat a articolelor care ndeplinesc anumite
condiii date n clauza Where:
DELETE FROM <nume-tabela> WHERE <cond>
Exemplu: tergerea elevilor din clasa 9a:
Delete from ELEVI where cls=9a

$
8.4. Comanda UPDATE
Permite actualizarea valorilor dintr-o tabel.
UPDATE <tabela> SET <camp>=<exp>,...WHERE <cond>
Exemple:
Modificarea clasei elevului Popescu la valoarea 9f:
Update ELEVI set clasa=9f where nume_elev=Popescu
Situaia elevilor de la profilul informatica care nu mai stau la cmin:
Update CLASE inner join ELEVI
on clase.clasa=elevi.clasa
set caminist=NO
where (clase.profil=informatica);

8.5. Comanda CREATE TABLE


Permite definirea structurii tabelelor fr ieirea dintr-o aplicaie i intervenie
direct n ferestrele de proiectare. Formatul simplificat al comenzii este:
CREATE TABLE <fis.dbf> (<lista campuri>)
Exemplu:
Create table PERSOANE (cod N(2),nume C(30),adresa M,data_nastere D);

Problema 8.1. Fie baza de date SCOALA cu tabelele CLASE (cls, profil, diriginte). ELEVI
(cod, nume, cls, med, absn, absm). Scriei comenzi SQL.

Sarcini suport pentru noile cunotine Folosii...


1. Afiai numele tuturor elevilor. Select
2. Afiai numele claselor (distincte!) din coal folosind Select distinct
tabela ELEVI.
3. Afiai tot coninutul fiierului ELEVI. Select *
4. Afiai media general a elevilor. Avg
5. Afiai numrul elevilor din coal. Count(*)
6. Afiai numrul claselor din coal. Count(distinct)
7. Afiai diriginii claselor. Select
8. Afiai numrul elevilor si media cea mai mare. Max
9. Afiai elevii cu medii ntre 8 i 10 din toate clasele a 12-a. Where; Between
10. Afiai diriginii claselor de informatic. Where
11. Afiai elevii cu media 10, precum i profilul cruia aparin. Where
12. Afiai care sunt elevii dirigintelui X. Where
13. Afiai elevii cu media 10 pentru fiecare clas, precum i Where group
numele diriginilor.

$!
14. S se calculeze numrul elevilor pe clase dar numai de la Group having
profilul info.
15. Afiai lista claselor pe profiluri i, n cadrul fiecrui profil, Order
ordonai cresctor dup codul clasei.
16. Afiai lista alfabetic a elevilor dirigintelui Popa. Order
17. Afiai toi elevii de la profilul informatic. Select;Where
Inner Join
18. Afiai toate liniile tabelei CLASE i elevii acestor clase. Left Join
19. Afiai toi elevii i diriginii lor chiar dac nu au corespondent Right Join
n tabela ELEVI.
20. Afiai lista elevilor unei clase oarecare dat de utilizator. Folosirea
parametrilor
21. S se adauge elevul Ionescu Mircea din clasa 9a cu media Insert Value
9,75 n tabela ELEVI.
22. S se adauge elevii cminiti n tabela ELEVIMAN existent. Insert Select
23. S se terarg elevii din clasa 9a. Delete
24. S se modifice clasa elevului Popescu la valoarea 9f. Update
25. Toi elevii de la profilul informatica nu mai stau la cmin. Update
S se efectueze modificarea n baza de date.
26. Exist o tabel ADMISI, cu elevii reuii la examenul de Select union
admitere n coal, care are aceeai structur cu a tabelei
ELEVI. S se obin toi elevii!
27. Fie tabelele SCOLI (codscoala, nume, adresa), CLASE Select; asocieri
(codscoala, codclasa, profil) ELEVI (cod, codclasa, nume, multiple
media). Dorim s obinem pentru toate colile din Iai lista cu
numele elevilor i cu profilul la care sunt nscrii.
28. Fie tabelele ELEVI (cu elevii liceului) i ADMISI (cu noii elevii Select
reuii anul acesta la liceu). Fiecare tabel are coloana Media cu subinterogri
(de admitere!). Aflai dac sunt elevi n coal care au avut
drept medie de admitere o valoare mai mic dect ultima
medie de anul acesta.
29. Aflai primii 10 elevi din tabela ELEVI cu cele mai mari medii. Select top 10

Problema 8.2* Rezolvai prin comenzi SQL sarcinile de la laboratorul 6.


Problema 8.3* Presupunem c profesorii propun diferite cursuri opionale la care elevii
se pot nscrie. Un elev poate s se nscrie la cel mult 3 cursuri. Un profesor poate s
propun oricte cursuri.
Presupunem c baza de date este alctuit din tabelele PROFESORI (cod_prof, nume,
specialitatea, grad_didactic...), OPTIONALE (Cod_prof, cod_obiect, nume_obiect, numar_ore),
INSCRIERI (ID, cod_elev, cod_obiect), ELEVI (cod_elev, nume, clasa...).
Construii interogrile urmtoare:
1. Care sunt elevii care s-au nscris i la ce cursuri?
2. Ce elevi nu i-au ales (nc!) obiectul opional?
3. Care profesor nu a propus niciun obiect opional?
4. La ce profesori i la ce cursuri nu s-a nscris niciun elev?
5. Dorim s afiam un mesaj pentru fiecare profesor dac are sau nu vreun curs opional
propus.

$"
6. Presupunem c se pun note la fiecare opional. Dac media obinut la toate opionalele
este mai mic dect 5 se consider elevul nepromovat. Proiectai o tabel MEDII (cod_elev,
cod_obiect, media) i o interogare prin care obinem media general pentru fiecare elev.
7. Care este numrul de elevi care s-au nscris la fiecare curs?
8. Care este lista cursurilor profesorului X?
9. Afiai situaia nscrierilor pentru clasa X: numele fiecrui elev i cursurile sale.
10. Afiai o situaie centralizat pentru totalul elevilor, din care s rezulte numrul de elevi
nscrii la 0,1,2,3 sau mai multe cursuri.
Problema 8.4. tiind c nc din anul 1990 se ine evidena participanilor la faza naional
a olimpiadelor pentru toate disciplinele de concurs (matematic, limba romn, limba englez
etc.), determinai:
1. La ce olimpiade au obinut premii reprezentanii judeului X? n ce ani?
2. Care sunt participanii din Iai la olimpiada de matematic, anul curent?
3. Care este judeul cu cele mai multe premii 1 n anul x i la ce olimpiade s-au obinut
aceste premii?
4. Lista participanilor la internaionala de informatic din anul trecut.
5. Exist vreun jude care nu a obinut niciun premiu anul acesta?
6. De cte ori s-a luat premiul X n judeul Y?
7. Calculai numrul de premii (1/2/3) pe fiecare jude, n anul 2000.
8. Realizai o interogare care s afieze pentru fiecare jude, corespunztor fiecrui an,
numrul total de premii 1, premii 2 sau premii 3, tiind c tipul premiului este dat ca
parametru.

ntrebri recapitulative
1. Ce este o interogare i cum se poate realiza ea?
2. Care sunt tipurile de interogri?
3. De ce este important s specificm tipul uniunii (join) dintre tabele, ntr-o interogare?
4. Ce este o interogare cu parametri i prin ce difer ea de o interogare de selecie fr
parametri?
5. Care sunt interogrile de aciune?
6. Cnd se folosesc interogri ncruciate?
7. Care sunt clauzele comenzii SELECT dac dorim calcularea numrului total de absene
pentru fiecare clas a 9-a i dispunem de o tabel cu date despre elevi (nume, clas, numr
de absene)

$#
Lecia
9 Obinerea informaiilor din
baza de date sub forma
rapoartelor
Rapoarte. Generatorul de rapoarte Report Designer
Etichete. Generatorul de etichete Label Designer
Grafice. Utilitarul GENGRAPH

9.1. Rapoarte
Rapoartele sau situaiile finale constituie o modalitate de valorificare a coninutului
informaional al bazei de date, servind ca instrument de cunoatere a aspectelor
pozitive (i negative) dintr-o situaie pentru care au fost culese date, transportate,
verificate i depozitate ntr-o baz de date. innd seama de aceste aspecte, raportul
apare ca un instrument al cunoaterii, care conine o cantitate mare de informaii
selectate, prelucrate i sistematizate dup anumite reguli de prezentare, n
concordan cu cerinele de informare ale utilizatorilor.
Editarea unui raport presupune o anumit succesiune de operaii:
1. Definirea coninutului informaional al raportului (se stabilesc datele care vor
compune raportul, fiierele care le conin, denumirea i ordinea cmpurilor din structura
unei nregistrri, din liniile raportului). Principalele categorii de informaii sunt:
datele propriu-zise ale raportului;
indicatori totalizai pe diverse nivele de centralizare;
capul de tabel;
titlul raportului;
datele sau nivelele de grupare i totalizare;
informaii centralizatoare de sfrit de raport/pagin.
2. Colectarea datelor care compun raportul (operaii de selecie, interclasare,
ordonare, ventilare a datelor care vor compune raportul).
3. Efectuarea calculelor matematice (dac este cazul, pentru rapoartele care
conin indicatori, acetia vor fi calculai i memorai n cmpuri ale interogrilor).
4. Definirea machetei raportului este o operaie complex de definire a formei de
prezentare i explicitare a informaiilor ntr-un cadru limitat (pagina sau ecranul),
innd seama de cerinele utilizatorilor.
Realizarea rapoartelor se poate face prin intermediul unui asistent Wizard sau
prin utilitarul Report Designer.

Mediul de lucru
1. Fereastra Fields permite afiarea tuturor cmpurilor din tabel sau interogarea
surs pentru ataarea rapid a acestora la obiectul TextBox.
Manevra necesar este selectarea cmpului din lista deschis n fereastra Fields
i executarea operaiei drag&drop la locul dorit n raport.
2. Fereastra de sortare i grupare se deschide prin meniul View i permite
introducerea cmpurilor folosite pentru gruparea i ordonarea articolelor n
raport.
$$
3. Fereastra de proprieti, ataat fiecrui obiect, permite fixarea sau schimbarea
proprietilor acestuia.

4. Fereastra de proiectare conine benzi de lucru pe


care sunt aranjate obiectele de control.
Report header cuprinde informaii afiate o singur dat
la nceputul raportului.
Page header cuprinde informaii afiate la nceputul
fiecrei pagini a raportului.
Detail informaiile propriu-zise ale raportului, preluate din
tabela de date sau din interogarea indicat drept surs
de date pentru raport.
Page footer cuprinde informaii afiate la fiecare sfrit
de pagin. n ideea c un raport are mai multe pagini,
se va trece numrul paginii, data, eventual alte mesaje.
Report footer cuprinde informaii afiate la terminarea
raportului.
n plus, dac este un raport cu grupe de informaii, se
pot folosi benzile:
Group header cuprinde informaii afiate la fiecare nceput de grup.
Group footer cuprinde informaii afiate la terminarea unui grup.
Realizarea unui raport se poate face folosind asistentul Report Wizard sau
Report Designer. Pasul cel mai important este definirea datelor surs. Dac datele
provin din mai multe tabele sau dac trebuie s fie filtrate, ordonate, respectiv s
conin anumite expresii calculate, atunci este necesar crearea unei interogri.

$%
Proiectarea rapoartelor cu Report Wizard
Report Wizard este folosit pentru rapoarte simple, caz n care asistentul va cere
doar fiierele i cmpurile pe care dorim s le folosim. Sunt mai multe forme de
rapoarte pe care le putem realiza cu instrumentul Wizard: rapoarte simple, pe baza
unui singur fiier, sau rapoarte cu date din mai multe fiiere legate dintr-o baz de
date, rapoarte tip etichet sau chiar rapoarte de tip grafic. Asistentul Report Wizard
se apeleaz prin fereastra Database Report New Report Wizard.

Ne propunem s afim elevii cu numele, media i


absenele motivate, ordonai pe clase, iar la final, s calculm
media aritmetic a elevilor fiecrei clase, respectiv totalul
absenelor.
Pasul 1. Apelm asistentul Report Wizard din Database Window Report New
Report Wizard.
Pasul 2. Precizm numele sursei de date. Se deschide tabela i se selecteaz
cmpurile care vor forma raportul. Dac sunt tabele legate atunci acestea
se deschid pe rnd i se selecteaz cmpurile dorite. De obicei, legtura
fixat ntre tabele se menine.
Dac nu suntem siguri de
aceasta vom deschide fereas-
tra Tools Relationship i vom
vizualiza/edita legtura dintre
tabelele noastre.
Pasul 3. Se fixeaz cmpurile de grupare. n cazul nostru vom alege cmpul clasa.
Pasul 4. Se fixeaz cmpurile de odonare, pentru fiecare clas; dorim aranjarea
elevilor dup medii, iar la medii egale ordonai alfabetic;
Pasul 5. La terminarea raportului pentru o clas dorim media clasei i numrul
total de absene, iar la terminarea raportului dorim aceiai indicatori pentru
toat coala. Vom fixa n fereastra de dialog Summary Options aceste
calcule. Este important s examinm modalitatea de afiare: toate
articolele i tota-
lul (opiunea De-
tail and sum-
mary) sau numai
banda de totali-
zare (oiunea
Summary Only).
Pasul 6. Ne alegem forma raportului din formele prestabilite ale asistentului.
Pentru fiecare format putem observa fereastra
de previzualizare n colul stnga sus.
Pasul 7. Ne alegem un stil din cele standard oferite;
Pasul 8. Ultima fereastr permite alegerea formei de
finalizare; astfel, raportul poate fi previzualizat
pe ecran (Preview), se poate da un titlu (Enter
a title for your report), se poate salva pentru o
folosire ulterioar (Save report for later use),
se salveaz odat cu afiarea (Save and print

$&
report) sau se deschide fereastra de proiectare a raportului pentru a se
face unele corecii.
Pasul 9. Putem previzualiza raportul prin butonul Preview.

Pasul 10. Putem realiza modificarea raportului prin butonul Design;


Putem modifica textele explicative, fontul, culorile, putem deplasa obiectele etc.
De fapt aceasta este o manier rapid de a proiecta rapoartele. Cu ajutorul asistentului
Wizard dm doar o prim form a raportului, pe care o ajustm i o dezvoltm
ulterior prin Designer.

Editarea rapoartelor cu Report Designer


Editorul de rapoarte permite ca utilizatorul s defineasc el nsui forma i
coninutul raportului. Modalitatea de lucru o vom explica pe msur ce rezolvm o
problem simpl.
Ne propunem, din motive didactice, proiectarea aceluiai raport pe care l-am realizat cu
Wizard n exemplul anterior: o situaie a mediilor i a absenelor elevilor pe clase.
Pasul 1. Din Database Window vom apela editorul de rapoarte cu
ReportNewDesign View. Vom deschide tabela ELEVI.
Atenie! n fereastra de dialog pentru crearea unui nou raport trebuie deschis
tabela sau interogarea pe baza creia se realizeaz raportul.
Pasul 2. Vom deschide benzile de nceput i sfrit raport i pagin din View
Page Header/ Footer i ViewReport
Header/ Footer;
Pasul 3. Vom deschide dac nu sunt deja
deschise ferestrele Fields i Proper-
ties i bara cu obiecte de control
Toolbox;
Pasul 4. Deoarece dorim o list a elevilor grupai
pe clase, vom deschide fereastra
Sorting and Grouping i vom selecta
din lista nchis Field/
Expression cmpul clasa,
dup care se va face
gruparea.
Fixm modul de sortare,
dup aceast cheie,
cresctor, iar n seciunea
proprietilor de grup
indicm prezena unui antet
de grup (pe care vom trece
codul clasei) i a unui sfrit
de grup (pe care vom
calcula media i totalul
absenelor). Observm c
au fost adugate benzile
corespunztoare n fereastra de proiectare a raportului.

$'
Pasul 5. Vom plasa pe banda Report heading titlul raportului: de exemplu, Situaia
mediilor i absenelor pe clase prin apsarea butonului Label i apoi
configurarea poziiei i dimensiunii obiectului pe banda dorit. Putem
observa c n fereastra de proprieti s-a fcut atribuirea irului pentru
Caption. Vom schimba fontul, dimensiunea, culoarea etc.
Pasul 6. Vom scrie capul de tabel pe banda Page header prin butonul Label.
Chenarul l-am obinut prin proprietatea Special Effects=Shadowed.
Pasul 7. Vom plasa numele clasei pe banda de antet de grup prin manevra
drag&drop, de la cmpul clasa din fereastra Fields pn la banda de
grup.
Observm c, automat, cmpul este precedat de numele su (obiect
Label).
Pasul 8. Vom plasa obiecte Textbox pentru numele elevilor, media i numrul de
absene pe banda Detail prin manevrele urmtoare:
a) apsm butonul TextBox;
b) plasm i dimensionm obiectul cu ajutorul mouse-ului;
c) atribuim obiectului sursa de date prin proprietatea Control Source (un clic
de mouse pe aceast linie va deschide o list cu numele cmpurilor din
tabela sau interogarea surs).
Pasul 9. Completm banda de terminare a grupului clasa astfel:
a) vom plasa un obiect Label avnd textul (proprietatea Caption)=Total
absente i un obiect Textbox avnd asociat o expresie. n proprietatea
Control Source apsm butonul pentru a deschide constructorul de
expresii. Expresia ncepe cu semnul =. Vom alege funcia SUM i vom
trece ca parametru cmpul absn. Deci, proprietatea control
Source=sum([absn]).
Observaie: nu uitai s ncadrai cmpul ntre paranteze ptrate!
b) vom plasa un obiect Label cu textul media clasei i un textbox avnd
asociat o expresie Control Source=avg ([media]).
Pasul 10. Vom completa banda Page Footer cu numrul curent al paginii, selectnd
domeniul Common Expressions din fereastra constructorului de expresii
(deschis prin butonul de pe linia Control Source, asociat obiectului
Textbox pe care l-a creat anterior).
Pasul 11. Se stabilesc caracteristicile globale ale raportului prin intermediul ferestrei
de dialog FilePage Setup. Se poate preciza numrul de coloane, distana
pn la prima coloan (Left Margins), limea coloanelor (Width), i
distana dintre ele (Spacing).
Raportul poate fi structurat pe coloane sau pe linii prin butonul Column
Layout.
Pasul 12. Raportul se poate vizualiza anticipat prin meniul ViewPreview.
Prin previzualizare se observ comportarea raportului pe setul de date.
Observai bara utilitar asociat. Se rentoarce n modul de proiectare
prin ViewDesign sau prin nchiderea ferestrei Preview. Se salveaz
prin <CTRL><W> sau prin meniul FileSave.

%
9.2. Etichete
O alt modalitate de afiare a datelor este sub forma unor etichete (Labels).
Etichetele pot avea declarat o dimensiune ca numr de linii i coloane, pot fi
afiate cte una sau mai multe pe limea hrtiei.
S ne gndim la necesitatea scrierii unor etichete pentru medicamente, colete
potale, cri de vizit. Tot etichete pot fi fluturaii cu salariul fiecrei persoane
dintr-o unitate sau cu informaiile despre situaia colar a fiecrui elev trimis de
diriginte.

SITUATIE SCOLARA SITUATIE SCOLARA


ELEV: Antom M. CLASA: 12a ELEV: Avram E. CLASA: 12a
ADRESA: Iasi, Str. Culturii, nr. 8 ADRESA: Iasi, str. Lunga nr. 897
MEDIA ANUALA; 9 MEDIA ANUALA; 8.99
a achitat taxa de 200 lei in fondul a achitat taxa de 450 lei in fondul
scolii scolii
Diriginte, Diriginte,

Aceast form special de raport poate fi proiectat prin intermediul utilitarului


Label Designer. Utilitarul este asemntor cu Report Designer, folosete aceleai
instrumente (meniu, fereastr de proiectare, bar utilitar). Singura diferen const
n mrimea paginii folosite: dac Report Designer seteaz o pagin ntreag, Label
Designer i seteaz o mrime potrivit ncadrrii informaiilor n etichet.
S proiectm etichetele pentru situaia colar pe baza tabelei ELEVI.
Pasul 1. Se apeleaz din meniul sistem prin Database Window Report New
Label Wizard i se deschide tabela sau interogarea surs (n cazul nostru
deschidem tabela ELEVI). Asistentul deruleaz un numr de ferestre de
dialog prin care se stabilesc forma i coninutul etichetei.
Pasul 2. Se selecteaz forma etichetei dintre cele prestabilte.
Pasul 3. Selectarea fontului i culorii de scriere.
Pasul 4. Construirea machetei etichetei prin indicarea coninutului (texte i cmpuri
din tabela selectat).
Pasul 5. Ordonarea datelor; pentru previzualizare se folosete butonul Preview .
Pasul 6. Salvarea etichetei i/sau modificarea acesteia. Pentru corecii se folosete
butonul Design .

%
9.3. Grafice
Un alt tip de raport, pe care l putem realiza n mediul Windows prin intermediul
SGBDR Access i pe baza coninutului tabelelor gestionate de acesta, este cel sub
form grafic. Dac o balan de pli a beneficiarilor se poate reprezenta sub forma
unui tabel, fiele de cont ale clienilor arat bine realizate de Label Designer, un
raport privind situaia vnzrilor lunare pe magazine este mult mai sugestiv sub
forma unui grafic. Desigur, o histogram se
poate realiza printr-un program de afiare, dar
pentru muli este o activitate destul de dificil.
Utilitarul care realizeaz grafice este Wizard
Graph apelat din Database Report
NewChart Wizard.
Ca i la celelalte programe de asisten,
parcurgnd paii indicai, se poate realiza un
grafic rapid plecnd de la o tabel surs.
Exemplu: pentru fiierul ELEVI (nume, clasa, media, ...) dorim un grafic al
variaiei numrului de elevi pe clase.
Pasul 1. Se realizeaz o interogare care
s calculeze pentru fiecare
clas numrul de elevi.
Modalitatea de creare a
interogrii nu o mai prezentm.
Observai fereastra Query
Design. Salvm interogarea
sub numele qrynrelevi.
Pasul 2. Se apeleaz utilitarul de
reprezentare a graficelor prin
Database Report New
Chart Wizard i vom indica
sursa de date: interogarea qrynrelevi.
Pasul 3. Se selecteaz cmpurile pentru grafic.
Pasul 4. Se alege forma graficului din cele
prestabilite.
Pasul 5. Se vor indica valorile pentru axe. Asistentul
ofer o sugestie n ecranul de dialog.
Pasul 6. Se poate vizualiza graficul prin fereastra Preview.
Pasul 7. Se salveaz. Dac ai uitat s dai titlu graficului (implicit este numele sursei
de date), se poate intra n modul Design, unde, prin dublu clic pe titlu sau
pe alt element al graficului se selecteaz obiectul i, prin meniul contextual
(butonul drept al mouse-ului) se
poate terge sau edita.

Afiarea la imprimant a rapoartelor


Dup ce raportul este proiectat se
verific si apoi se poate scoate la
imprimant. Fixarea ncadrrii n pagin, a
caracteristicilor de pagin se face prin
FilePage Setup.
%
Deschidei baza de date SCOALA. Verificai s existe eventual completai tabelele
CLASE (clasa, profil, cod_diriginte), PROFESORI (nume, specialitate, studii, stare_civil,
adresa, salariu, telefon...etc.)
Problema 9.1. Afiai datele despre profesori folosind Autoreport tabular i Report
Wizard.
Problema 9.2. Modificai raportul anterior pentru a avea o alt ordine a coloanelor i alt
titlu. Linia de sfrit de pagin se vede cu data i numrul paginii scris n romnete.
Atenie! Folosii Page Setup i
fixai dimensiunea paginii astfel
nct dup cei 6 profesori s apar
sfritul de pagin.
Problema 9.3. Afiai profesorii
grupai pe nivel_studii folosind
Report Wizard. Pentru banda
de titlu ncercai Special effects,
din meniul contextual.
Problema 9.4. Afiai un
raport cu informaii (date de
utilizator) despre obiectele i
profesorii unei clase. Folosii
Report Wizard cu mai multe
tabele.

Problema 9.5*. Realizai o list a absenelor elevilor pe clase: Folosii


Report Wizard
cu funcii de
grup i nsumare

Crearea unor
noi obiecte prin
copierea unora
existente

Folosirea Report
Designer pentru
mbuntirea
raportului

Inserarea unor
cmpuri
calculate pentru
total absene
si numr curent
Proprietile
benzilor de grup
i nsumare

%!
Problema 9.6. Realizai modificarea raportului anterior insernd Report Designer
o imagine n banda de titlu i numele colii, respectiv pentru imagine,
corectnd numele coloanelor i dimensionnd corect chenare obiecte
liniile care ncadreaz capul de tabel; scoatei tip Label
chenarul de la sumele finale.
Problema 9.7. Realizai acelai raport al profesorilor ca n Report Designer
problema 9.2 folosind proiectarea pas cu pas. cu benzile de titlu,
detaliu i sfrit
de pagin
Problema 9.8. Realizai acelai raport, al profesorilor grupai Report Designer cu
pe studii, ca n problema 9.3, folosind proiectarea pas benzile de grup
cu pas.
Problema 9.9. Realizai acelai raport, al absenelor pe clase, Report Designer cu
ca n problema 9.6, folosind proiectarea pas cu pas. funcii de nsumare
Problema 9.10. Realizai urmtorul raport:
SITUATIE SCOLARA SITUATIE SCOLARA
ELEV: Antom M. CLASA: 12a ELEV: Avram E. CLASA: 12a
ADRESA: Iasi, Str. Culturii, nr. 8 ADRESA: Iasi, str. Lunga nr. 897
MEDIA ANUALA; 9 MEDIA ANUALA; 8.99
Label Designer
a achitat taxa de 200 lei in fondul a achitat taxa de 450 lei in fondul
scolii scolii
Diriginte, Diriginte,

Problema 9.11. Realizai un grafic al variaiei numrului de


elevi i de clase pe coli.

Wizard Chart

Problema 9.12. Deschidei baza de date BIBLIOTECA.


1. Presupunem c un manual are, pe lng
titlu, un ir cls urmat de numrul cores-
punztor anului de studiu, ca n imaginea
urmtoare. Afiai situaia manualelor colare
pe clase, cu titlul lor, autorul, preul i numrul
de exemplare. Pentru fiecare manual se va
calcula valoarea stocului, iar pentru fiecare
clas numrul total (exemplare) de cri i
totalul valoric.
2. Afiai situaia restanierilor (cei care nu au returnat cartea mprumutat!) i a penalitilor
la zi.

%"
Lecia
10 Proiectarea
formularelor
Formulare Form Designer i Form Wizard
Proiectarea obiectelor de control

Interfaa cu utilizatorul este una dintre cele mai importante pri ale aplicaiei
deoarece aceasta este prima i deseori singura pe care o va vedea utilizatorul.
Dac este confuz sau neclar, utilizatorii nu au posibilitatea efectiv de a comunica
cu aplicaia i nu pot accesa liber toate facilitile prevzute. Un formular servete
la introducerea datelor, dar poate avea i un rol de meniu sau de prezentare general
a unor informaii. Este un obiect de interfa de tip container cu peste 70 de proprieti
pe care se gsesc obiectele grafice ale interfeei cu utilizatorul (butoane, zone de
editare, liste deschise sau nchise, imagini etc.).
Un formular are toate proprietile unei ferestre i poate fi n diferite stri: Activ
inactiv; focalizat-nu; disponibil-nu; ascuns-afiat; minimizat-maximizat-normal.
Fereastra activ este fereastra curent cu care utilizatorul interacioneaz la
momentul respectiv. O fereastr activ se numete focalizat atunci cnd toate
intrrile de la tastatur ale utilizatorului sunt direcionate ctre ea. Dac fereastra
activ conine alte obiecte de control atunci doar unul din acesta este focalizat.
Focalizarea altui obiect se face prin mouse, tasta tab, sgei etc.
Evenimentele principale ale unui formular
1 Load Imediat dup deschiderea formularului
2 Unload La nchidere dar nainte s fie ters de pe ecran
3 Resize La modificarea dimensiunilor formularului
4 Activate/deactivate Cnd formularul devine activ/pierde focalizarea
5 Initialize Cnd formularul primete focalizarea (este reafiat)
6 Lostfocus Cnd formularul urmeaz s piard focalizarea
7 Click/ Dblclick Cnd se apas butonul mouse-ului pe o zon a formularului
(neacoperit)

Metode interne asociate unui formular


1 Refresh Conduce la reafiarea formularului
2 Move Conduce la deplasarea formularului
3 Show Afiare
4 Hide Ascunde formularul
5 Setfocus Mut focus-ul ctre un formular (dup Show)

Cum ne referim la proprietile sau metodele unui formular sau obiect?


Pentru referirea la un formular sau obiect de pe formular se folosete construcia
cu punct.
<nume formular> [. <obiect>]. <proprietate> =<valoare>
<nume formular>[.<obiect>] . <metoda> [<parametri>]

%#
Exemple:
Forms ! [frmelevi].refresh Indicm o metod pentru Formularul
frmelevi care permite reafiarea
valorilor pentru toate obiectele acestuia.
Me.caption=formular elevi Fixare titlu pentru formularul curent
Me ! [txtnume].setfocus Predm controlul obiectului textbox
din formularul curent.
Forms! [Elevi]![combo16].ControlSource=clasa Fixm proprietatea ControlSource
pentru obiectul Combo16 de pe
formularul Elevi.

10.1. Tipuri de formulare


a. Formulare pentru vizualizarea, introducerea i editarea datelor cel mai
des folosite. Pot folosi ca surs date dintr-o singur tabel (formulare simple) sau
din dou tabele legate n relaie 1-n (Formulare complexe (cu subformular)). Iat,
de exemplu, un formular complex pentru culegerea, vizualizarea sau editarea datelor,
realizat cu asistentul Wizard n Access.

Este de fapt o fereastr standard Windows. Pe ultima linie a ferestrei este


plasat bara cu butoane pentru deplasarea n tabela de date. Coninutul formularului
permite actualizarea/vizualizarea simultan a dou tabele legate ntre ele: CLASE i
ELEVI. Pentru un articol din tabela printe se afieaz n subformularul tip Grid
toate articolele existente cu aceeai cheie. Subformularul are i el posibilitile de
deplasare printre articole, precum i de adugare, tergere etc.
b. Formulare numai pentru adugare de noi nregistrri. Nu este necesar
deplasarea n fiier, nici vizualizarea celorlalte articole, ci doar introducerea valorilor
care vor forma noile nregistrri la salvarea lor. Proprietatea principal este Data
Entry=NO.
c. Formulare Read Only numai pentru vizualizarea mesajelor, imaginilor sau
a coninutului unor nregistrri, fr posibilitatea de a le corecta. Se folosesc
proprietile: Allow Edits=no; Allow Deletions=no; Allow Additions=no; Locked=yes,
Enabled=no, Tab Stop=no.
d. Formulare de comutare conin numai butoane care permit nchiderea/
deschiderea altor formulare; prin acestea se controleaz aciunile unui program
(funcioneaz ca un meniu).

%$
10.2. Proiectarea unui formular folosind asistentul Form Wizard
Access dispune de un asistent pentru realizarea rapid a formularelor cu aspect
profesionist. Un astfel de formular v permite nu numai cutarea i poziionarea n
tabela de date, ci i actualizarea sa.
Asistentul Wizard creeaz dou tipuri de formulare, pentru editarea sau
interogarea datelor simple, bazate pe un singur tabel, i a celor complexe, bazate
pe dou tabele legate de obicei n relaia 1-n.
Pasul 1. Se apeleaz FORM WIZARD prin fereastra Data-
base Form New Form Wizard.
Pasul 2. Se deschid tabelele i se selecteaz cmpurile
care vor forma macheta. Dac tabelele sunt legate
se procedeaz astfel: se deschide tabela printe i se
selecteaz cmpurile ei, apoi se deschide tabela copil i se
selecteaz cmpurile acesteia din urm.
Pasul 3. Se alege aspectul machetei viitoare dintre formele prestabilite.
Urmrii n fereastra de sus previzualizarea formatului ales.
Pasul 4. Se denumete formularul; se poate executa imediat sau ulterior prin
butonul sau comanda Run. Se poate modifica intrnd n modul Design
View.

10.3. Proiectarea formularelor prin Form Design


Pentru realizarea machetelor ecran utilizatorul are posibilitatea, ntocmai ca pe
o tabl de scris, s aranjeze textele, imaginile, liniile sau chenarele care se vor
afia, s defineasc obiectele prin intermediul crora se vor introduce, afia sau
edita valorile unor cmpuri, s introduc mesaje explicative etc.
Utilitarul de generare a formularelor dispune de urmtoarele elemente de interfa:
1. Bara de butoane ToolBox pentru includerea obiectelor de control.
2. Fereastra de proiectare propriu-zis (Form Designer) pe care se vor depune
obiectele de control. Un formular are fereastra de proiectare mprit n mai
multe zone numite benzi de lucru.
Form Header antet de formular, va conine informaii comune tuturor
nregistrrilor, imagini, caset pentru alte operaii cum ar fi imprimarea, filtrarea
etc.
Page Header antetul de pagin pentru acele formulare cu informaii ntinse
pe mai multe pagini;
Detail zona de vizualizare/editare pentru un singur articol din tabela/
interogarea surs;
Page Footer subsolul paginii, conine informaii utile la terminarea fiecrei
pagini, cel mai des un numr de pagin;
Form Footer subsolul formularului, poate conine informaii centralizate.
3. Fereastra Fields conine numele cmpurilor din tabel sau interogarea deschis
la apelarea utilitarului. Se deschide prin ViewFields.

%%
4. Fereastra Properties afieaz att obiectele coninute de machet, ct i
proprietile i metodele acestora;
Proprietile uzuale pentru un formular sunt:
Record Source indic numele tabelei sau al interogrii care formeaz
sursa de date pentru formular;
Allow Edits: =Yes permite modificarea nregistrrilor;
Allow Deletions: =Yes permite tergerea articolelor;
Allow additions: =Yes ofer posibilitatea adugrii de noi articole;
Data Entry: =Yes deschide automat o nregistrare nou, fr date. Utilizatorul
nu are acces la celelalte articole, ci se adaug doar unul singur, cel completat
n formular; =No se permite editarea tuturor articolelor;
RecordSet Type: =Dynaset permite editarea datelor din obiectele vizuale
asociate cmpurilor ce provin din mai multe tabele; =Dynashot nu permite
editarea cmpurilor;
RecordLocks: =No permite accesul mai multor utilizatori la date, n mod
simultan;
Caption afieaz textul pe bara de titlu a formularului.
CloseButtons, Moveable, MaxMinButtons, ControlBox: =Yes ofer
ferestrei proprietile de a putea fi nchis, mutat, de a avea butoanele de
maximizare, minimizare i meniul standard din colul din stnga sus.
View Allowed: =Yes permite vizualizarea datelor n modul Datasheet prin
butonul corespunztor atunci cnd suntem n Form View;
=No este util atunci cnd dorim s nu se vad datele n
modul Datasheet (asigur consisten interfeei);
ScrollBars: = No elimin la formular barele de derulare;
RecordSelectors: =No elimin bara vertical cu triunghiul ce indic
nregistrarea selectat (cum un formular prezint de obicei un singur articol,
nu este nevoie s fie activat).
Navigation buttons: =Yes afieaz bara de navigare pe ultima linie a
formularului. Este util pentru deplasarea n fiier.

%&
5. Meniul contextual la nivelul generatorul de machete:
permite selectarea constructorului de expresii, de macro-uri
sau de proceduri (cod)
permite fixarea ordinii de parcurgere a obiectelor pe formular
inserarea (lipirea) obiectului existent n Clipboard
deschide fereastra de selecie a culorilor
afieaz sau nu rigla
afieaz sau nu caroiajul pentru proiectare
afieaz sau nu bara cu obiecte
deschide banda pentru antetul i subsolul paginii
deschide banda pentru antetul i subsolul paginii
deschide fereastra de proprieti

Pai n proiectarea formularului


Pasul 1. Apelai generatorul de machete prin Database Window Form New
Form Design.
Pasul 2. Deschidei tabela, astfel nct toate cmpurile acesteia s fie afiate n
fereastra Fields.
Pasul 3. Deschidei ferestrele de proprieti din ViewProperties i bara de obiecte
ViewToolbox.
Pasul 4. Din lista Fields, poziionai-v pe fiecare cmp pe care dorii s-l aezai
pe suprafaa de lucru i executai drag&drop. Observai poziionarea
automat a dou obiecte de control: Textbox i Label. Eticheta Label are
numele cmpului, dar poate fi schimbat. Pentru manevrarea distinct a
celor dou obiecte asociate unui cmp, se selecteaz unul din ele i la
apariia cursorului n form de mn, n colul stnga sus, se poate separa
obiectul.
Pasul 5. Previzualizai forma machetei prin butonul View.
Pasul 6. Revenii n proiectare prin Design.
Pasul 7. nchidei i salvai.

10.4. Obiecte de interfa pe un formular


Fiecare element de pe un formular este un obiect de control.
Operaii generale cu obiectele de intefa:
Selectarea obiectului se realizeaz prin clic cu mouse-ul poziionat pe suprafaa
obiectului.
Selectarea mai multor obiecte se realizeaz prin activarea butonului select
de pe bara utilitar i ncadrarea zonei cu obiecte.
Mutarea obiectului selectat se realizeaz prin drag&drop la noua poziie sau
prin Clipboard cu operaiile Edit Cut i Edit Paste.
Copierea unui obiect se realizeaz prin intermediul Clipboard-ului prin operaiile
EditCopy i EditPaste. Automat, copia are aceleai proprieti i metode ca i
originalul.
Redimensionarea unui obiect selectat se obine prin poziionarea cursorului
pe o margine a obiectului pn apare sgeata dubl i apoi prin drag&drop la noua
dimensiune.

%'
tergerea unui obiect selectat se realizeaz cu tasta
Delete.
Dispunerea obiectelor pe formular se realizeaz
dup dorina utilizatorului. Pentru o aranjare facil suprafaa
formularului este mprit n ptrate.
Stabilirea ordinii obiectelor implicit, ordinea de
parcurgere a obiectelor este ordinea crerii lor. Dup
apsarea butonului Tab Order fiecare obiect va avea ataat
un numr; schimbarea acestuia se face prin apsarea
butonului mouse-ului pe obiecte, n ordinea dorit.
Schimbarea fontului i culorii se realizeaz pentru
obiectele care afieaz text prin proprietile FontName i
FontSize. De asemenea, se pot seta caracteristicile de
ngroare (FontBold), nclinare (FontItalic), subliniere
(FontUnderline). Pentru culoarea textului este folosit
proprietatea ForeColor, iar pentru specificarea culorii pe
care o va avea obiectul atunci cnd va fi dezafectat se
folosete proprietatea DisabledForeColor.
Atribuirea unui nume obiectului se realizeaz
automat de ctre sistem sau de ctre proiectant, prin
proprietatea Name.
Stabilirea poziiei pe suprafaa de lucru se
realizeaz automat prin aciunea de plasare a obiectului
cu tehnica drag&drop pe suprafaa formularului sau a
raportului. Proprietile sunt Top poziia fa de marginea
de sus a ferestrei mam, Left poziia fa de marginea
din stnga, Width limea, Height nlimea, AutoCenter plasarea automat
n centrul ecranului;
Stabilirea titlului obiectului se realizeaz prin proprietatea Caption;
Stabilirea modului de vizualizare a obiectului Show, pentru vizualizarea
pe ecran, Hide, pentru ascunderea obiectului;
Activarea/dezactivarea obiectului se realizeaz la diferite evenimente prin
metodele Activate sau Deactivate. De obicei, activarea se realizeaz prin plasarea
mouse-ului pe obiect i apsarea butonului stng. Activarea unui obiect nseamn
dezactivarea celui precedent, pentru c la un moment dat un singur obiect este
activ.

10.5. Tipuri de obiecte de control


1. Obiecte nelegate la o surs de date: imagini, linii, chenare, etichete descrip-
tive, butoane care conduc operatorul ctre alte ferestre sau aplicaii.
2. Obiecte legate la o surs de date: zone de editare, liste, butoane radio sau
comutatoare, crora le corespunde un cmp n tabela/interogarea surs. Valoarea
editat n obiect va fi plasat n articolul curent, n coloana indicat drept surs
(proprietatea Control Source). Obiectul ataat motenete proprietile cmpului:
Caption, Input Mask, Format.

&
10.6. Proiectarea obiectelor de control pe formular
Ne propunem s proiectm pas cu pas un formular complex pentru culegerea
datelor despre clase i elevi, folosind diferite obiecte de control. Odat cu folosirea
obiectului vom prezenta cteva proprieti mai importante.

A. Proiectarea textelor explicative = Obiecte tip Label


Obiectul de tip text explicativ se proiecteaz prin butonul Label. Astfel, n exemplul
nostru, deschidem banda Form Header pentru a introduce numele colii printr-un
obiect tip Label.
Liceul de Informatic Gr. Moisil Iai
Proprietile uzuale ca Top, Left,
Width, Height se stabilesc automat la
plasarea obiectului i aranjarea n
fereastr. Textul explicativ va fi o valoare
a proprietii Caption. Alinierea textului
n cadrul obiectului se face prin
alignment, care poate lua valorile: 0=la
stnga (implicit), 1=la dreapta, 2=centrat.
Pentru text sunt utile proprietile:
FontName, FontSize, FontBold,
FontItalic, FontUnderline etc. Culoarea
cernelii este dat de Forecolor i cea a
fundalului de Backcolor. O proprietate interesant este Visible, care d posibilitatea
ascunderii unui mesaj sau plasrii n acelai loc a unor mesaje diferite.

B. Proiectarea cmpurilor de editare = Obiecte TextBox


Definirea unui obiect de acest tip se face prin butonul TextBox situat pe bara
utilitar. Proprietile de amplasare i dimensionare sunt deja cunoscute. Cmpul de

&
editare trebuie s permit citirea
i/sau modificarea fie a unei
variabile, fie a unui cmp dintr-o
tabel de date care se va
specifica n proprietatea Control
Source.
Dac dorim ca valoarea din
obiect s nu poat fi dect citit
vom folosi proprietatea Locked
= Yes.

C. Comutatoare = Obiecte CheckBox


Comutatoarele sau casetele de validare se pot proiecta prin butonul Checkbox.
De obicei, acestea se asociaz cmpurilor cu valori booleene.
Pentru exemplul nostru, s-a proiectat ca obiect pentru cmpul are_ore (reine
faptul c orele sunt la seral sau nu) printr-un
CheckBox caset de validare. Prin activare
se transmite valoarea Yes.
O metod folosit este OnClick, care
va trebui s precizeze aciunea la apsarea
butonului mouse-ului. Acest lucru se face
prin scrierea codului corespunztor direct n
fereastra de ediare, deschis cu butonul
asociat metodei OnClick. Putem crea un
macro i putem asocia butonului execuia
acestuia, aa cum vom vedea n leciile
urmtoare.

D. Proiectarea listelor nchise = Obiecte ComboBox


Lista nchis este un obiect de interfa care se proiecteaz prin butonul
ComboBox. La deschidere se afieaz toat lista i se permite selectarea unei
valori. Elementul selectat este memorat n cmpul pe care l asociem proprietii
ControlSource. Alegerea valorii se face prin tasta Enter sau prin clic de mouse. n
cazul n care cmpul este de tip numeric va primi poziia elementului selectat, dac
este de tip caracter va primi chiar valoarea elementului. Elementele afiate pot
proveni din surse diferite, specificate prin proprietile RowSource i RowSourcetype.
Proiectarea listelor combo beneficiaz de un asistent Combo Wizard apelat
imediat ce se ncearc plasarea butonului pe suprafaa de lucru. De fapt, modul de
lucru cu asistentul Combo Wizard este cunoscut din lecia de proiectare a cmpurilor
de cutare de tip Lookup.

E. Proiectarea listelor deschise = Obiecte ListBox


Obiectele de tip Listbox se prezint ca liste deschise ce afieaz valori luate fie
dintr-o tabel/interogare, fie definite local la proiectare.

&
Odat cu plasarea butonului de pe bara ToolBox pe suprafaa de lucru este
apelat asistentul List Wizard care deruleaz ferestrele de dialog similare Combo
Wizard.

F. Proiectarea declanatoarelor = Obiecte CommandButton


Obiectele de tip CommandButton sunt folosite pentru declanarea unei aciuni.
Pentru proiectarea lor beneficiem de
un asistent (Wizard) care permite
alegerea aciunii i formei butonului.
n exemplul nostru dorim un set
de butoane plasat pe banda Form
Footer, care s ofere posibilitatea
afirii la imprimant, tergerii sau
cutrii articolelor.
Vom aciona butonul Command
i ne vom poziiona pe suprafaa de
lucru. Apare imediat asistentul Wizard prin care ni se permite indicarea tipului de
aciune dorit pentru buton i chiar alegerea textului sau a imaginii plasate pe buton.
Butoanele de comand pot fi proiectate i fr asistent, asta nsemnnd ca la
evenimentul OnClick care declaneaz aciunea s trecem procedura scris
de noi (se folosete Visual Basic for Aplication) sau o macroinstruciune, care va fi
creat tot de noi, dar alegnd comenzile dorite i ordinea acestora.
Dup specificarea aciunii se poate da un text explicativ butonului sau i se poate
asocia o imagine.

G. Proiectarea opiunilor = Obiecte OptionGroup


Obiectele Optin Group sunt obiecte de tip container care conin mai multe
obiecte de acelai fel: butoane radio, declanatoare etc.
n exemplul nostru ne propunem s folosim obiectele OptionGroup pentru
selectarea profilului clasei.
Pentru proiectarea acestui tip
de obiect beneficiem de asis-
tentul Option Group Wizard.
Pasul 1. Primul pas este s
fixm numrul acestor
obiecte prin definirea
textelor asociate fiec-
rei opiuni.
Pasul 2. Se precizeaz valoa-

&!
rea implicit a butonului
i se acord o valoare
numeric fiecrei opiuni.
Dac tipul cmpului re-
ceptor este text,
atunci, acesta va primi
valoarea dat prin
selecie ca ir de
caractere; dac tipul
este numeric atunci se
va atribui valoarea numeric asociat opiunii.
Pasul 3. Se fixeaz tipul butonului i chiar un stil de afiare.
Pentru c asistentul doar construiete grupul de butoane, obiectul nu are asociat
niciun cmp. Trecei, n fereastra de proprieti Controlsource, cmpul care dorii
s rein valoarea butonului selectat din grup.

H. Proiectarea subformularelor = Obiecte Subform


Un formular care s conin un subformular se
realizeaz pentru tabele legate cu relaia 1-n. Este
avantajos, ca odat cu introducerea informaiilor despre
o clas, s introducem i datele despre elevii si.
Formularul printe va fi pentru CLASA, iar subformularul
va fi pentru tabela ELEVI. Legtura 1-n este realizat
prin cmpul clasa.
Cum se poate realiza acest lucru?
1. Putem proiecta mai nti un formular pentru Elevi
(s-l numim frmsub_elevi). Preferm ca forma
acestuia s fie Datasheet (matrice sau tabel,
pentru coerena informaiilor pe ecran!), apoi l vom include n formularul de
baz pentru Clase prin manevrarea butonului Subform. Asistentul Subform
Wizard va fi apelat automat i ne va permite s indicm numele
subformularului, precum i cmpul de legtur.
2. Putem folosi avantajul realizrii rapide a subformularului chiar de ctre asistent.
Noi va trebui sa alegem primul buton radio: Use existing Tables i s
precizm tabela sau interogarea surs. Legtura dintre cele dou tabele e
bine s fie fixat anterior, ocazie cu care vom revedea tipul legturii i dac
cheia extern este indexat.

I. Proiectarea obiectelor imagine = Obiecte Image


Formularele de culegere a datelor sau de vizualizare sunt mai atractive dac au
anumite desene, imagini, sigle. Proiectarea ntr-o zon a machetei a obiectelor
imagine, care sunt de fapt fiiere .bmp, se realizeaz cu butonul Image de pe
Toolbox, prin drag&drop i conturarea zonei.

J. Proiectarea obiectelor de tip OLE


Tehnica OLE este deja cunoscut din leciile anterioare de programare a
aplicaiilor Windows, tehnic ce permite interacionarea aplicaiilor Windows prin

&"
intermediul obiectelor suportate de acestea. Obiectele pot fi legate (Linked Objects)
sau incluse (Embedded Objects). n momentul execuiei, obiectele se pot edita
folosind aplicaia care le-a generat.
Ele sunt obiecte OLE, n sensul c sunt create de alte aplicaii. Important este
c ele au propriul lor set de proprieti i evenimente/metode pe care le putem
modifica la proiectare.

K. Proiectarea obiectelor de tip Line i Shape


Obiectele grafice ca linii, respectiv chenare au
scopul de a mbunti aspectul unui formular.
BorderColor culoarea; BorderStyle modul
de desenare (0=transparent, 1=continuu, 2=linie
ntrerupt etc.); BorderWidth grosimea n pixeli;

Sarcini suport pentru noile cunotine Folosii...


Problema 10.1. Proiectai un formular pentru navigarea i editarea Autoform tabular
ntregii tabele PROFESORI; denumii formularul frm_prof1.
Deplasai-v prin tabel, introducei noi articole, modificai
unele valori, tergei un articol.
Problma 10.2. Folosii formularul anterior i vizualizai doar Folosirea Filter
profesorii care au gradul 1; denumii formularul frm_prof2. by selection
Executai cteva corecii asupra salariului i observai apoi n
fereastra Datasheet efectele asupra tabelei de date. Anulai
filtrul.
Problema10.3. Folosii formularul anterior i vizualizai profesorii, Folosirea
n ordinea alfabetic a catedrelor. Revenii. RecordSort
sau proprietatea
Order by

Problema 10.4. Folosii formularul anterior pentru adugarea Data Entry


unor noi profesori, fr a-i vizualiza i pe cei existeni deja.
Problema 10.5. Proiectai un formular pentru navigarea i editarea Autoform
tabelei ELEVI sub form tabelar; denumii formularul datasheet
frm_prof3.
Problema 10.6. Folosii formularul pentru filtarea, sortarea i
editarea unor noi articole, ca n exerciiile anterioare.
Problema 10.7. Proiectai un formular care s vizualizeze i s Form Wizard
editeze doar cmpurile nume, specialitatea, adresa i telefonul,
din tabela PROFESORI; denumii formularul frm_prof4.

&#
Problema 10.8. Folosii formularul anterior i interzicei tergerea, Allow Edits,
respectiv adugarea articolelor. Deletions

Problema 10.9. Proiectai un formular care s v lase s vizualizai Form Wizard cu


doar salariul unei persoane X (numele este dat la intrare!); sursa de date
denumii formularul frm_salar_profX. Ce manevr trebuie s query
facei pentru a avea acces prin acest formular numai la
profesorii titulari? Dar pentru a-i afia doar pe cei cu studii
superioare din catedra de matematic, ordonai dup gradul
didactic?

Problema 10.10. Proiectai formularul urmtor pentru actualizarea Form Wizard.


simultan a celor dou tabele CLASE i ELEVI. Subformularul
este inclus n
formularul printe
Problema 10.11. Rearanjai obiectele de pe formular; tergei Form Design.
eticheta asociat de generator la plasarea cmpului pe Manipulare
formular; schimbai mrimea obiectelor. obiecte
Problema 10.12. Realizai actualizarea simultan a dou tabele Form Wizard.
CLASE1-nELEVI, prin formulare legate: Subformularul
legat de formular.
Obiect tip
command button

&$
Problema 10.13. Proiectai un formular care s permit editarea Form Wizard
simultan a 3 tabele SCOLI1-n CLASE1-n ELEVI. pentru 3 tabele

Problema 10.14. Proiectai un formular care s ocupe ntregul Form Design +


ecran sub forma urmtoare: Observai c nu are bara de atributele unui
defilare a nregistrrilor! Numii formularul frm_principal. formular

Problema 10.15. Adugai pe formularul frm_principal butoane Form design+


pentru deschiderea formularelor proiectate anterior (frm_prof1, Obiectul Form
frm_prof2, frm_prof3, frm_prof4). Fiecare buton va avea un Command Button
text asociat ca explicaie suplimentar, afiat la micarea Proprieti
mouse-ului n dreptul obiectului. De exemplu, pentru butonul Caption
din imagine observai textul explicativ. ControlTip Text

&%
Problema 10.16. Realizai un formular pentru adugarea unui Form Design +
singur articol n tabela PROFESOR. Formularul nu permite obiecte form
defilarea, nu are posibilitatea de redimensionare i nici textbox
nchidere de pe bara de titlu. Butonul Adauga va permite Label Command
adugarea informaiei, din zona de editare n cmpul nume al button
unui nou articol; butonul Sterge va permite anularea operaiei
anterioare de salvare. Formularul se nchide doar prin butonul
proiectat de voi. Verificai tabela PROFESORI, dup efectuarea
fiecrei operaii.

Problema 10.17. Modificai formularul anterior pentru a introduce mai Form Design
multe articole! Observai formularul propus n imaginea urmtoare:

ntrebri recapitulative
1. Care sunt fazele proiectrii unui raport?
2. Ce nseamn generarea unui auto-raport?
3. Care sunt seciunile unui raport?
4. Prin ce se deosebesc operaiile de grupare i sortare?
5. Cum putem parametriza un raport?
6. Cnd folosim un formular? Dai exemple.
7. Formularele pot fi o cale uoar de a ascunde unele date. Corect?
8. Dai 3 exemple de proprieti ale formularelor i 3 exemple de proprietI ale
obiectelor de control.
9. Cum se poate transforma un formular creat prin Auto-form ntr-un formular de
introducere a unui singur articol?

&&
*Lecia
11 Macro-instruciuni
Access
Mediul Windows este un mediu condus de evenimente. Majoritatea
evenimentelor sunt iniiate de utilizatori atunci cnd deplaseaz mouse-ul sau cnd
nchid un formular. Sistemul de operare Windows depisteaz tipul evenimentului
survenit i d curs codului asociat vorbim de proceduri eveniment. Dar uneori
este necesar s scriem propriile noastre subrutine, fr s fie asociate unui anumit
obiect sau eveniment. Ele pot fi apelate de oriunde din aplicaia noastr, pentru
tratarea erorilor, pentru inializarea unor variabile etc.
Microsoft Access dispune de un limbaj pentru programarea aplicaiilor cu baze de
date Visual Basic pentru Aplicaii (VBA) limbaj puternic de care v putei folosi i
n celelalte aplicaii Microsoft Office. Limbajul VBA este un limbaj care permite
programarea structurat i modular, precum i programarea orientat ctre obiecte.
n 1993 Microsoft a decis ca un subset al VBA s devin limbajul de macro-uri
comun aplicaiilor pentru platformele Windows, Windows NT i Apple.
Un macro este o secven de instruciuni
care reprezint operaii de interaciune a
utilizatorului cu aplicaia. Pentru a putea crea o
macroinstruciune, MS Access dispune de
utilitarul Macro Builder.
De exemplu, putem folosi un macro pentru
a aplica un filtru, pentru a deschide, a nchide
sau a redenumi un obiect, pentru a tipri un
formular sau un raport.
Problem: pentru un formular existent ne
propunem ca, la lansarea sa n execuie, acesta
s se maximizeze, iar la terminare s afieze
un mesaj, folosind macroinstruciuni.
Evenimentul care va permite maximizarea
este ncrcarea formularului, deci vom folosi la evenimentul OnLoad sau OnOpen
macro-ul mcrmaxim, iar pentru macro-ul de afiare a mesajului (mcrminim) ne
vom servi de evenimentul OnUnload sau OnClose.
O prim modalitate este s construim macro-ul din fereastra Database Window
i s-l atam evenimentului. O alt modalitate ar fi s ne poziionm pe evenimentul
dorit n fereastra de proprieti i apoi, prin butonul Build , s construim direct
macroinstruciunea. De reinut c, dac
macro-ul exist, atunci numele lui apare
n lista deschis prin butonul asociat
evenimentului.
Indiferent de alegere se apeleaz
acelai Macro Builder. Deci:
Pasul 1. Se apeleaz utilitarul Macro
Builder prin Database
Macro New.
&'
Utilitarul are propria fereastr de proiectare
ce cuprinde pe prima coloan aciunile care
vor forma macro-instruciunea, n a doua
colon comentariile, iar n partea de jos
anumite atribute asociate ca argumente
comenzilor.
Pasul 2. n coloana Action se deschide o list cu
aciunile care pot fi trecute n macro i se alege aciunea dorit.
Pasul 3. Se completeaz dac este necesar argumentele aciunii. n cazul
nostru, vom scrie chiar mesajul. Pot fi i aciuni fr argumente!
Pasul 4. Uneori este necesar ca execuia macro-istruciunii s fie condiionat de
o anumit valoare a unui cmp. De exemplu, ntr-un formular de introducere
a datelor despre elevi trebuie menionat c media nu se va trece dac
elevul este corigent sau repetent! Mesajul de atenionare va fi afiat prin
intermediul unui macro la evenimentul Before Update al textbox-ului Media.
Dar va fi condiionat de valoarea cmpului situaie!
Pentru realizarea unui macro condiionat de o anumit valoare calculat
se folosete butonul de condiie situat pe bara cu butoane: . La
apsarea acestui buton fereastra de proiectare se modific cu nc o
coloan, pe care se trece condiia.
Pasul 5. Se salveaz.

Macro-comanda AutoExec
Exist posibilitatea ca la fiecare deschidere a bazei de date s se execute
automat o macro-instruciune, dac se va salva cu numele AutoExec.
Ce aciuni ar putea realiza aceast macro-comand? n primul rnd ar putea
ascunde fereastra Database i s dea controlul unui formular principal al aplicaiei
care va conduce utilizatorul ctre toate aciunile dorite. n Access 2000 exist
posibilitatea indicrii formularului principal al aplicaiei, lansat automat la deschiderea
bazei de date prin StartUP.

Problema 11.1*. Vrem s realizm un formular care s


afieze numai anumii profesori, filtrai dup specialitate.
Numele specialitii l vom primi printr-un alt formular care
este de tip caset de dialog (observai c nu are bara de
deplasare, butoane de nchidere sau de dimensionare).
Imediat dup deschiderea formularului cu datele filtrate
i caseta de dialog trebuie s se nchid.
Atenie!
Declanarea evenimentelor de access cum ar fi deschiderea unui formular, executarea
unui click-mouse I selectarea unei opiuni dintr-un meniu pot fi automatizate prin intermediul
utilizrii macro-comenzilor sau a limbajului de programare Visual Basic for Application.

'
P11.2* Realizai un formular de editare a
tabelei n care folosii aceste cmpuri.
Dorim ca atunci cnd n obiectul checkbox
pentru cmpul este_casatorit trecem valoarea
yes, s fie afiat un mesaj de atenionare!
Problema 11.3*. Proiectai o baz de date
abonamente cu tabelele REVISTE (codul i
numele revistei, editura, preul, periodicitatea),
CHITANTE (numrul chitanei, codul revistei,
perioada abonamentului i suma).
Proiectai formulare pentru actualizarea
tabelelor. Proiectai un raport n care
pentru fiecare revist se vor afia
chitanele corespunztoare abona-
mentelor, precum i suma total.

Realizai o aplicaie care s grupeze operaiile de vizualizare


i actualizare a tabelelor, precum i afiarea unui centralizator al
abonamentelor pe reviste, printr-un buton meniu realizat prin
macro-instruciuni.

'
*Lecia
12 Organizarea aplicaiei:
meniuri i ferestre de
prezentare
Ferestre de prezentare
Pagini de comutare: Switchboard Manager
Proiectarea meniului principal sub forma unei bare cu butoane

n general, o aplicaie cuprinde o multitudine de tabele, machete-ecran, interogri,


rapoarte, macro-uri care au fost scrise pentru un scop comun i care urmeaz s
fie cuprinse ntr-o singur aplicaie executabil. Pentru buna funcionare a ansamblului
este necesar ca toate operaiile pe care le face aplicaia s poat fi lansate din
opiunile unui meniu.
De regul exist o fereastr de prezentare a aplicaiei care permite fie deschiderea
altei ferestre numite meniu principal, fie prsirea programului.

Proiectarea unei ferestre de prezentare a


aplicaiei
Exemplu: dorim s realizm un formular cu
dou butoane; un buton (continu) care s ne
conduc mai departe la afiarea altui formular i
alt buton (ieire) care s ne ntoarc n fereastra
Database.
1. Vom intra n modul Design View de proiectare
a unui nou formular.
2. Vom seta proprietile ca n imaginea
alturat. Atenie! Pentru a nu aprea banda
cu butoanele de deplasare trebuie setat
proprietatea Navigation Button =No.
3. Pentru a afia o imagine de fundal alegem
imaginea i setm proprietatea Size
Mode=Stretch dac nu ne intereseaz
proporiile (altfel, ncercai Size Mode=Zoom).
4. Vom proiecta primul buton cu textul ieire
(proprietatea Caption=iesire), indicnd n
fereastra Command Control Wizard
operaiunea pe care o va efectua.
Pentru aceasta, alegem Form Operations
(din lista category) i apoi, din caseta Action
alturat, selectm Close Form.
5. Pentru butonul continu vom indica n fereastra de proiectare a utilitarului
Command button wizard categoria Form Operation i ca aciune (lista Action)
Open Form. Imediat apare fereastra n care ni se permite s selectm formularul
pe care dorim s-l deschidem.

'
Proiectarea unui formular de comutare sau panou de bord
Un mod de prezentare a funciunilor aplicaiei noastre se poate realiza prin
intermediul unor formulare speciale care au doar butoane de comand. Unele butoane
deschid pagini subalterne, altele lanseaz n execuie imprimanta, pentru afiarea
unor rapoarte, sau doar deschid tabele, formulare, execut anumite aciuni etc.
Pasul 1. Organizm aplicaia i gsim gruparea care ne avantajeaz.

Pasul 2. Apelm utilitarul de construire a paginilor


de comutare, prin Tools Database
UtilitiesSwitchboard Manager. Apare
o fereastr ca n imaginea alaturat.
Implicit, formularul principal se numete
Main Switchboard.
Pasul 3. Specificm prin butonul New intenia noastr de a realiza alte dou pagini
ancorate de pagina principal MainSwitchboard. Dm nume acestor pagini
numele va fi afiat pe bara de titlu a paginii.

Pasul 4. Pentru fiecare pagin trebuie s specificm


opiunile (items). Prin butonul Edit ne poziionm
n pagina dorit i apoi, prin New, specificm
numele opiunilor din pagin.
De exemplu, pentru pagina Rapoarte ne-am
poziionat pe linia sa n fereastra Main i am
apsat butonul Edit.
Prin butonul New am anunat dorina de a cuprinde
trei opiuni rapoarte: situaia elevilor, situaia
elevilor pe clase i situaia mediilor.
Pentru fiecare item (buton) trebuie s
precizm aciunile. Pentru itemul
situaia elevilor comanda va fi Open
Report, iar din lista ataat vom alege
raportul.

'!
Pasul 5. Este normal ca atunci cnd am
deschis o pagin s ne punem
problema revenirii la pagina
anterioar sau dac este pagina
central s revenim n mediul
Access sau Windows.
De exemplu, butonul introduceri-editri
date va deschide o pagin cu numele
introducere-editare date (pe care noi am
definit-o deja n fereastra de proiectare a
Managerului).
Observai un buton revenire care deter-
min revenirea, din pagina unde este definit, n pagina principal.
Pasul 6. nchidem fereastra utilitarului Switchboard Manager. Vom observa, dac
am lucrat corect, n lista formularelor, numele noului formular de comutare
(Switchboard) i n lista tabelelor noua tabel creat de utilitar, cu acelai
nume standard Switchboard Items.

Pasul 7. Lansarea sau deschiderea complexului de pagini se realizeaz prin


comanda Open, dup poziionarea pe formularul Switchboard!

Realizarea meniului aplicaiei folosind bara de butoane Windows


O facilitate oferit proiectanilor de aplicaii vizuale de ctre sistemul Microsoft Windows
este posibilitatea personalizrii barei cu instrumente prin opiunea Customize a
meniului ViewToolbars.
1. Pentru a deschide o bar
de butoane construit
deja, se activeaz comu-
tatorul asociat numelui
barei n fereastra Toolbars.
2. Pentru a crea o nou bar
cu butoane se acioneaz butonul New din fereastra Toolbars i se atribuie un
nume barei: implicit este un Custom.
3. Operaiile de tergere/redenumire a barei sunt efectuate prin butoanele Delete/
Rename.
4. Pentru a aduga un buton la o bar activ se procedeaz astfel:
a. Se deschide tab-ul Commands din fereastra Customize.
b. Se alege bara destinaie din lista Categories.
c. Se alege butonul din lista butoanelor, prezentate ca nume i pictogram,
asociate din fereastra Commands.
d. Se plaseaz cursorul mouse-ului pe buton i se execut drag&drop ctre
bara unde va fi plasat butonul.
'"
5. Pentru a aduga un buton tip
submeniu la o bar cu instru-
mente existent se folosete
tab-ul Commands i din
fereastra Categories se selec-
teaz opiunea New Menu. n
fereastra Commands va
aprea un buton cu numele
New Menu pe care l putei
plasa pe bara cu instrumente
dorit prin drag&drop.
Se denumete butonul,
folosind meniul contextual
deschis prin click dreapta pe
opiunea Name. Se includ apoi opiunile acestui meniu, prin selectarea i plasarea
butoanelor.
6. Pentru editarea proprietilor barei (de exemplu, poziia acesteia, posibilitatea
mutrii, a redimensionrii etc.) se deschide o fereastr de dialog prin butonul
Properties din fereastra Toolbars.
7. Pentru a terge un buton de pe bara de instrumente activ se poziioneaz
cursorul mouse-ului pe butonul dorit a fi eliminat i se execut drag&drop ctre
exteriorul barei.

Proiectarea unui buton-meniu prin macro-comenzi


O alt modalitate de a organiza aplicaia prin meniuri
este folosirea macro-instruciunilor i a metodei AddMenu.
De exemplu, meniul urmtor, care deschide un
formular pentru introducerea sau editarea tabelei ELEVI
sau un raport despre elevi poate fi agat ca buton pe
prima linie a formularului sau poate fi proiectat ca meniu
contextual al ferestrei aplicaiei.
Pasul 1. Realizm un macro pentru cele 2 opiuni ale
meniului contextual. Vom deschide MacroNew i activm butonul pentru

inserarea coloanei Macro Name .


Acolo vom trece textul asociat opiunii.
La aciune vom deschide formularul Elevi
i pentru a doua opiune vom deschide
raportul (atenie! la parametrul View-
trebuie dat valoarea Print Preview dac
dorim afiarea pe ecran altfel va trebui
s avem imprimanta deschis!).
Salvm cu numele Mac_meniu_elevi.
Pasul 2. Realizm un nou macro. El va avea
rolul s deschid meniul anterior
proiectat prin macroul Mac_meniu_elevi.
La aciune vom pune comanda
AddMenu i vom specifica numele

'#
macro-instruciunii care compune
meniul. Vom salva cu numele
Mac_lansare_mnu_elevi.
Pasul 3. Asociem acest macro formularului de
prezentare a aplicaiei, la proprietatea
Shortcut menu bar.
Pasul 4. Verificm funcionarea formularului cu
meniul shortcut asociat.

Sarcini suport pentru noile cunotine Folosii...


Problema 12.1*. S se proiecteze o bar-meniu care s conin Meniu bar cu
cte un buton pentru fiecare tabel din baza de date butoane simple
(asociindu-i fiecruia aciunea de deschidere a tabelei)
pe care s o plasai pe linia cu instrumente Access.
Observai imaginea sugestie!

Problma 12.2*. Plecnd de la formularele i rapoartele din baza Tools


de date SCOALA, proiectate n laboratoarele anterioare, realizai Customize
un buton tip meniu al aplicaiei pe care s-l deschidei pe Pentru realizarea
bara principal de butoane Database, ca n imaginea alturat. unui Buton tip
Atenie! Ultima opiune v permite de exemplu ieirea meniu
din Access.

Problema 12.3*. Pentru aceeai baz de date SCOALA s realizm Proiectarea unei
urmtorul meniu pentru organizarea formularelor i rapoartelor bare-meniu prin
proiectate deja. Observai c bara orizontal este format Customize
din dou opiuni tip submeniu. ViewToolbars

'$
Problerma 12.4.* Organizai aplicaia SCOALA prin intermediul Switchboard
paginilor decomutare realizate automat prin Switchboard Manager
Manager.

Dorim gruparea formularelor i a rapoartelor de tip text, etichet sau grafic, pe pagini
separate.
Pagina principal (Main switchboard) v permite:
1. deschiderea unei pagini de comutare pentru selectarea formularelor de editare
propriu-zise (o vom numi pg_1_formulare).
2. deschiderea unei pagini de comand pentru selectarea formelor de raportare (o vom
numi pg_2_rapoarte). Fiecare buton al acestei pagini deschide cte o pagin pentru
selectarea rapoartelor propriu-zise:
a. pg_2_1_rap_tabele (pentru selectarea rapoartelor sub form tabelar);
b. pg_2_2_rap_label (pentru selectarea rapoartelor sub form de etichet);
c. pg_2_3_rap_graf (pentru selectarea graficelor).

Main
Pg_1_formulare Pg_2_rapoarte
pg_2_1_tabele pg_2_2_label pg_2_3_graf

Problema 12.5*. Proiectai un Form Design +


formular de prezentare a aplicaiei. Metodele open
Un buton va permite continuarea form i close
adic va lansa pagina central de form
comutare proiectat anterior. Alt
buton va permite prsirea
aplicaiei.

Problema 12.6. Asociai Meniuri


formularului de prezentare un contextuale
submeniu. De exemplu, pentru utiliznd un
operaii rapide asupra tabelei macro
ELEVI.

Problema 12.7*. Proiectai un meniu tip buton pe prima linie a Buton meniu cu
formularului central prin macro-instruciuni. submeniuri
macro-uri

'%
Lecia
13 Proiectarea legturilor
aplicaiilor cu exteriorul
Hyperlink-uri n tabelele Access
Folosirea hiperlegturilor n formulare i rapoarte
Publicarea datelor sub forma paginilor web
Importul i exportul datelor de la i ctre alte aplicaii

Hyperlink-uri n tabelele Access


O facilitate oferit utilizatorilor bazelor de date Access este posibilitatea legrii
nregistrrilor dintr-o baz
de date Access la obiecte
din reeaua Internet.
De exemplu, dorim ca
pentru fiecare persoan s
reinem adresa de e-mail. Vom trece n modul Design de proiectare a structurii i
vom aduga noul cmp.
Cmpul care reine o astfel de legtur este de tip hyperlink i stocheaz 3
informaii separate prin #: textul ce va fi afiat, adresa URL a paginii Web pe care
o va deschide i subadresa ca seciune n cadrul paginii.
Exemplu: pagina_mea#www.liis.edu.ro#profesorx.html
Atenie! Dup introducerea adresei observm schimbarea aspectului prin colorare
i/sau subliniere; de asemenea, la plimbarea cursorului mouse-ului deasupra zonei
respective apare mna, caracteristic legturilor. Orice clic va face ca aplicaia
Access s urmeze legtura i s ncarce obiectul referit n browser-ul sau aplicaia
prestabilit.
Pentru a edita adresa
va trebui s focalizm
cmpul cu ajutorul tasta-
turii i apoi s apsm F2
sau, s deschidem
meniul contextual cu
butonul drept al mouse-
ului i s folosim Hyper-
link Edit Hyperlink.
tergerea valorii din
cmpul hyperlink se face
prin butonul Remove
Link.

Folosirea hyperlink-urilor n formulare i rapoarte


Modul de afiare Datasheet nu este singurul loc n care putem edita i vizualiza
datele de tip hyperlink. ntr-un formular sau ntr-un raport putem asocia un obiect de
control acestui cmp, care va permite utilizatorilor lansarea browser-ului cu adresa
specificat n nregistrarea curent.
'&
Proiectarea paginilor Web pentru vizualizarea datelor pe Internet
Este util, uneori, s facem cunoscute anumite date publicului larg, pentru reclam
sau alte activiti. i cum Internet-ul este cea mai eficient cale de comunicare, ne
vom ocupa de proiectarea documentelor web pentru vizualizarea informaiilor din
baza de date Access pe Internet.
Pentru vizualizarea datelor coninute ntr-o baz de date Access, pe Internet, se
folosete un tip special de formular numit Pagin de acces la date. Utilizatorii unei
astfel de pagini pot vedea, edita sau terge datelele dintr-o baz de date.

O pagin are urmtoarea structur: titlul, coninutul (format din textbox-uri i


label) i bara de navigaie.
Se pot realiza paginile de acces la Internet n modul Design sau utiliznd asistentul
Wizard.
Datele coninute ntr-un astfel de document depind de grupul int; de exemplu,
dac dorim, putem s popularizm rezultatele unui grup/clas/coal la nivelul fiecrui
individ sau informaiile sintetice, globale. Pagina trebuie s aib butoane de sortare
i de cutare rapid. De asemenea, trebuie s oferim posibilitatea editrii unor date.
Pagina de acces poate s conin date obinute prin interogri ncruciate (Pivot
Table) sau grafice, foi de calcul. Pagina de acces este conectat direct la baza de
date. Cnd utilizatorii afieaz pagina n Internet Explorer ei vd o copie a datelor
propriu-zise. Asta nseamn c filtrarea, sortarea sau alte modificri pe care utilizatorii
le efectueaz sunt memorate ntr-o baz de date colateral. Totui, modificrile
asupra datelor sunt vizibile i altor vizitatori ai paginii pe Internet.
Operaia de creare a unei pagini Web este posibil prin Database Window
Page New Page Wizard.
Pasul 1. Se selecteaz tabela/interogarea.
Pasul 2. Se selecteaz cmpurile care vor fi afiate.
Pasul 3. Se d posibilitatea specificrii cheii de grupare.
Pasul 4. Se precizeaz ordinea de afiare a datelor.
Pasul 5. Se salveaz ca document .html.

''
Un exemplu de folosire a unei pagini Web:

n formularul asociat tabelei Pers dorim un buton care s deschid o pagin


HTML cu explicaii suplimentare.
Cum am realizat acest lucru?
1. Am creat o pagin nou prin Design View cu textul dorit.
2. Am deschis formularul asociat tabelei, am proiectat butonul de comand cu
ajutorul asistentului Wizard i am ales din lista Categories Form Operations
aciuni pentru Open Pages.
3. Am ales pagina creat anterior din fereastra cu pagini Web.

Importul i exportul de date


Microsoft Access poate transmite informaiile
dintr-o tabel n fiiere de alt tip gestionate de Excel,
n editoare de texte Word, n FoxPro sau n Oracle.
De asemenea, poate recepta datele create de alte aplicaii n fiiere cu structura
particular a tabelei de date Access.
a. Importul de date
Se apeleaz utilitarul Import Wizard prin ecranul Database TableNew.
Pasul 1. Este necesar indicarea tipului de fiier care va fi importat ntr-o tabel
Access. Pentru exemplificare, am ales Text files.


Pasul 2. Precizarea delimitatorilor de cmp (exemplu: virgula, tab-ul, spaiul sau alt
delimitator precizat de operator).
Pasul 3. Alegerea delimitatorului pentru cmpuri i pentru iruri. Se precizeaz dac
primul rnd conine denumirea coloanei.

Pasul 4. Precizarea locului de importare: fie ntr-un fiier existent, fie ntr-un nou
fiier.
Pasul 5. Atribuirea unui nume, a unui tip i specificarea indexului pentru fiecare
coloan din fiierul surs.

Pasul 6. Stabilirea cheii primare. Se poate acorda sistemului Access dreptul de a


defini o cheie sau se poate indica de ctre utilizator.
b. Exportul de date
Trecerea coninutului unei tabele Access ntr-un fiier de alt tip se poate face
prin FileExport.


Pasul 1. Specificarea tipului de fiier ctre care dorim transmiterea datelor. Noi am
ales text file.
Pasul 2. Se solicit detalii pentru export. n cazul textelor se fixeaz modul de
separare a cmpurilor: fie prin caracterele virgul sau tab, fie prin spaii.
Pasul 3. Se pot da i alte specificaii pentru export.
Pasul 4. Se solicit numele sub care se export datele.

Sarcini suport pentru noile cunotine Folosii...


Problema 13.1. Realizai o pagin Web pentru tabela SCOLI cu Page Wizard.
urmtorul aspect. Facei adugri, corecii, tergeri. Aranjai Tabela SCOLI
datele alfabetic dup numele colii. Filtrai datele pentru
profilul vocaional.

Problema 13.2. Realizai o pagin Web folosind tabela PROFESORI. Page Wizard +
Grupai datele dup specialitate. Observai cum funcioneaz Tabela
pagina. Putei face corecii asupra datelor? PROFESORI.
Grupare corecii,
cu Design Page

Problema 13.3. Realizai o pagin a Inspectoratului colar pentru Surs de date,


afiarea informaiilor despre coli, ca n imaginea urmtoare. de tip interogare,
Pentru fiecare coal este afiat numrul de clase i elevi ntr-o pagin
(desigur, existeni n baza de date). Web. Asistentul
Page Wizard.
Modificri prin
Page Design


Proiect final
Indicaii metodologice pentru realizarea proiectului final
Tematica propus
Studiu de caz

V propunem s realizai la nivelul clasei/grupei un sistem informatic economic


simulnd funcionarea unei uniti de dimensiuni reduse. Fiecare subsistem va modela
o funciune economic: aprovizionare, contabilitate, personal etc.
Trecem n revist cteva activiti grupate pe funciuni:
A. Aprovizionarea cu materii prime i materiale:
evidena stocurilor de materii prime i materiale (pe fia de gestiune se
nregistreaz toate intrrile i consumurile de materiale, precum i stocul
final);
calculul necesarului de aprovizionat n funcie de planul de producie i de
stocul existent;
recepia materialelor de la furnizori;
elaborarea notelor de recepie pentru marfa intrat i/sau a proceselor verbale
de constatare a diferenelor pentru marfa ce difer calitativ sau cantitativ de
contractul ncheiat;
ncheierea contractelor de aprovizionare cu furnizorii de materiale pentru
acoperirea necesarului;
urmrirea realizrii contractelor, pentru fiecare furnizor de materiale, n ce
cantiti au fost contractate i ce anume s-a facturat. Diferenele pot fi
penalizate;
elaborarea unui grafic de aprovizionare;
evidena intrrilor pe categorii de materiale i furnizori.
B. Producia:
elaborarea planului anual de producie n funcie de capacitile existente sau
previzionate a se achiziiona i de previziunile pieii de desfacere. Planul va
indica ce produse se vor fabrica i n ce cantitate;
detalierea planului pe uniti de producie i de timp;
repartizarea sarcinilor de plan pe posturi de lucru inducnd reperele sau
operaiile care trebuie s fie executate. Fiecare post de lucru trebuie s
cunoasc ce produs/reper are de executat i n ce cantitate pe unitatea de
timp specific (ex. zi/lun);
determinarea ncrcrii utilajelor;
nregistrarea executrii produselor (postul de lucru, produsul executat/reperul
i cantitatea), evidena rebuturilor;
urmrirea realizrii planului de fabricaie pe secii i sectoare de activitate
(depiri, ntrzieri).
C. Desfacerea produciei
Unitatea are mai multe depozite de produse finite care gestioneaz aceleai
produse. Desigur, unele depozite au o anumit exclusivitate gestionnd numai anumite
produse finite.

!
gestiunea stocurilor de produse finite pe gestiuni. nregistrarea intrrilor din
producie i a ieirilor ctre magazinele de vnzare;
repartiia produselor pentru vnzare la diferite magazine, puncte de desfacere;
acoperirea planului de producie cu contracte de desfacere;
evidena contractrilor pe beneficiari;
elaborarea unui grafic pentru defacerea produselor n funcie de termenele
de livrare contractate;
urmrirea realizrii contractelor de desfacere pe beneficiari. Se vor observa
ntrzierile n livrare.
D. Evidena mijloacelor fixe:
elaborarea i inerea la zi a fiei fiecrui mijloc fix, nregistrarea valorii de
inventar;
planificarea i executarea reviziilor i reparaiilor;
calculul amortizrilor lunare/anuale i transferul lor ctre aplicaia de
contabilitate;
inventarierea mijloacelor fixe pe locuri de munc.
E. Transport:
Pentru desfacerea produciei i pentru aprovizionare unitatea dispune de un
parc de maini. Acesta presupune:
evidena mainilor (numr de nmatriculare, tip) i a foilor de parcurs;
fixarea/actualizarea normativelor pentru consumul de combustibil i pentru
orele de parcurs;
evidena oferilor, a orelor lucrate;
graficul de transport: cine i unde plec. Este necesar comunicarea cu
aplicaiile de aprovizionare i de desfacere pentru a corela graficul de
aprovizionare cu cel de vnzare/distribuire marf.
F. Contabilitate i financiar
preluarea notelor contabile din aplicaiile de salarii, gestiune materiale, mijloace
fixe etc.;
evidena contabil n lei i valut pornind de la documentele primare;
ntocmirea situaiilor centralizatoare: cartea mare, balan, bilan;
calculele pentru impozitul pe profit i compunerea documentelor aferente;
elaborarea anumitor documente primare (dispoziii de plat, chitane);
elaborarea fielor de cont i a registrului general;
situaia obligaiilor neachitate i a creanelor nencasate;
situaia veniturilor i a cheltuielilor.
G. Personal i salarizare:
evidena personalului pe locuri de munc, pe funcii; situaia militar;
calculul salariilor: indexare, compensare;
situaia cartelelor de mas;
situaia reinerilor pe tipuri de reineri (rate la cas, mobil, obiecte de uz
comun etc.)
determinarea fondurilor pentru concediile medicale i de odihn;
afiarea documentelor: tat de salarii, list de avans chenzinal, adeverin de
salarizare, pontaj, declaraie lunar ctre bugetul asigurrilor de stat;
ntocmirea notelor contabile i trimiterea lor ctre aplicaia de contabilitate;
ntocmirea dispoziiilor de plat.

"
Indicaii metodologice pentru realizarea unui proiect informatic
1. Organizarea echipei
Grupa va fi mprit n echipe de 23 elevi, fiecare ocupndu-se de un subsistem
informatic.
Proiectul va fi coordonat de un ef de proiect care va ine controlul ntregului
demers i va asigura legtura ntre subsisteme.
2. Activitatea de formulare a problemei
V sugerm ca, studiind domeniile de activitate din mediul economic, s alegei
o problem i s o definii stabilind cerinele funcionale. Culegei datele necesare
completrii problemei cu toate informaiile de natur s o clarifice.
3. Analiza situaiei existente
V sugerm s citii sau s culegei date nu numai despre domeniul de activitate
specific temei, ci i legturile cu celelalte domenii.
ntocmii fie de analiz identificnd activitile care pot fi informatizate:
documentele specifice purttoare de informaii, fluxurile informaionale, prelucrrile
specifice.
Realizai evaluarea (critic) a situaiei existente.
Imaginai mai multe variante de rezolvare a problemei i analizai efectele
fiecreia. Alegei o variant.
4. Proiectarea aplicaiei
Identificai fluxurile de prelucrri, intrrile i ieirile, legturile dintre ele. Stabilii
entitile cu proprietile (atributele, tipul i lungimea lor) i cerinele de validare.
Determinai legturile dintre entiti. Desenai schema conceptual. Normalizai.
Proiectai machetele pentru culegerea datelor, pentru vizualizare i pentru editare.
Proiectai forma rapoartelor utilizator: situaii centralizatoare sau grafice.
Proiectai panoul de bord cum va fi prezentat aplicaia, cum vor fi selectate
operaiile specifice acesteia: meniuri, butoane, taste funcionale.
Proiectai schema de sistem a aplicaiei.
5. Construirea i testarea aplicaiei
Se va crea baza de date.
Se vor popula tabelele cu date de test.
Se va construi formularul de culegere/vizualizare a datelor.
Se vor construi interogrile i formularele/rapoartele de vizualizare a
informaiilor solicitate.
Se vor construi machetele rapoartelor.
Se va construi panoul de bord al aplicaiei.
Se vor pregti datele de test i se va realiza testarea componentelor pe rnd
i apoi integrate n proiectul final.
6. Implementarea aplicaiei
Se va realiza un grafic de implementare, cunoscnd legturile dintre subsisteme.
7. Documentarea
Fiecare echip va realiza dou tipuri de documentaii:
a. documentaie de prezentare n PowerPoint unde vor fi prezentate
informaile generale care s fac atractiv aplicaia pentru client;
b. documentaie de utilizare n Word pentru clarificarea tuturor aspectelor
legate de aplicaie.

#
Parcurgerea etapelor de realizare a unei aplicaii informatice
Problem
n vederea vnzrii publicaiilor pe baz de abonament, editurile trimit
la oficiile potale oferta de abonamente cu numele revistei la care se
poate face abonament, preul, periodicitatea apariiei, precum i comisionul
oferit oficiului potal pentru acest serviciu. Oficiul potal nregistreaz oferta
ntr-un registru de oferte.
n momentul sosirii unui client care solicit abonarea la o anumit publicaie se va cuta
n registrul de oferte numele revistei i, dac se poate face abonament, se elaboreaz o
chitan-abonament n dou exemplare. Un exemplar este dat clientului, iar cel de-al doilea
se nregistreaz n registrul de abonamente.
La sfritul unei zile, respectiv anual se calculeaz totalul sumelor obinute din
abonamente, pe baza registrului de abonamente.
La nceputul fiecrei luni oficiul potal elaboreaz urmtoarele situaii:
1) lista abonailor pe strzi se trimite factorilor potali n vederea organizrii distribuiei
revistelor; cuprinde date despre abonat, precum i numele revistelor care trebuie
distribuite acestuia n luna curent.
2) lista abonamentelor pe edituri se trimite la edituri odat cu banii cuvenii din
contractarea abonamentelor n luna precedent (minus comisionul oficiului); cuprinde
pentru fiecare revist a editurii numrul de buci solicitate n fiecare lun i totalul
sumelor corespunztoare.
Oficiul potal a cumprat un computer i solicit o aplicaie informatic pentru activitile
legate de abonamente.

Analiza problemei
Vom sistematiza datele problemei pe baza unor formulare de analiz. De cele
mai multe ori, problema nu este suficient de clar definit i atunci este ideal s
putem lmuri lucrurile discutnd cu beneficiarul lucrrii. n cazul nostru ne vom
imagina anumite situaii i le vom trece la capitolul ipoteze de lucru (notate cu I
ipoteza).
F1. Lista activitilor ne intereseaz s vedem dac nu cumva o anumit
activitate este mai bine s fie automatizat sau s fie lsat la nivelul manual de
execuie.

Ce face? Cnd? Ar putea fi automatizat?


Primete oferta Ocazional Nu primirea documentelor trebuie fcut
personal.
nregistreaz oferta La sosirea Nu chiar dac nlocuim registrul cu un fiier
n registru ofertei pe disc introducerea datelor trebuie fcut
manual.
Consult registru La sosire client Da. Imaginm o interfa a programului care
s permit dialogul cu operatorul de la ghieu.
Vom afia o list, cu toate revistele la care se
poate face abonamente, din care se poate
alege cea solicitat.
Elaboreaz chitana Da chiar dac este un document tipizat poate
fi creat o machet adecvat i afiat chitana
la imprimant.

$
nregistreaz chitana Da odat acceptat abonamentul se
n registru memoreaz pe disc operaia.
Calcul sume din Zilnic Da printr-o filtrare pentru toate abonamentele
chitane din ziua curent.
Elaborare situaie nceput de lun Da filtrare abonamente contractate pentru
pe strzi luna curent:
grupare pe strzi
afiare client, revist, numr bucti
totalizare numr buci, pe strzi i pe
reviste
Elaborare situaie nceput de lun Da filtrare chitane din luna anterioar
pe edituri grupare pe edituri ordonare pe reviste
i luni
totalizare sume i comision pe edituri
Trimite banii la edituri nceput de lun Nu la acest nivel al automatizrii noastre.
Putem doar s afim suma datorat fiecrei
edituri.

F2. Lista documentelor ca purttori de informaii ne intereseaz s vedem


dac sunt cumva anumite documente care nu i-ar justifica prezena n momentul
folosirii suporturilor magnetice de memorare.

Document Proprieti, rol Poate fi eliminat?


Oferta Vine de la editur; justific abonarea la o anumit NU
revist sau comisionul
Chitana Pleac la client. Dovada achitrii sumei i NU
solicitrii unei reviste
Registrul de Este un document staionar pentru facilitarea Da, dac folosim o
oferte cutrilor legate de abonare sau preuri, colecie pentru
comision etc. aceleai date
Registrul de Este un document staionar, utilizat pentru Da, dac folosim o
abonamente evidena abonamentelor i obinerea unor situaii colecie pentru
aceleai date

F3. Cum arat documentele i ce coninut au?

%
Proiectarea entitilor bazei de date
Ne propunem ca baza de date s conin dou entiti:
OFERTE (nume-editur, adresa, nume-revist, pre,
comision) i CHITANTE (nume client, numar-chitan, adresa,
nume-revist, nume-editur, pre, l1,l2,...,l12, suma)
Relaiile dintre ele sunt de tipul 1-n: pentru o ofert se pot
nregistra mai multe abonamente. Un abonament face referire
la o singur ofert.

Normalizarea bazei de date


S continum operaia de proiectare a bazei de date prin activitatea de
normalizare. Tabelele sunt:

OFERTE
Editura Adresa Revista Pre Comision
ALFA Galati, str. Oltului, nr. 55 Licurici 10000 20
ALFA Galati, str. Oltului, nr. 55 Ping-Pong 20000 19
MINERVA Lugoj, str. Iubirii, bl. 6/3 Ghici? 50000 20

CHITANTE
Nr-chit Client Adresa Revista Pre L1 L2 .. L 12 Suma
12 POPA str. Vasile Banu, 5 Ping-Pong 20000 2 0 0 0 40000
13 LUNGU Podu Ros, nr. 120 Ping-Pong 20000 1 1 1 1 240000

Observaii:
1. numele i adresa editurii se repet la fiecare ofert;
2. numele clientului i adresa se repet la fiecare abonament;
3. lipsete data chitanei;
4. preul revistei este acelai, indiferent cine o cumpr;
5. pentru simplificarea exemplelor vom face abonamente doar pe primele 6 luni;
6. suma este un cmp calculat.
n vederea remedierii acestor deficiene vom stabili structura conceptual a
bazei de date format din urmtoarele tabele:
EDITURI (Cod_editura, nume, adresa)
REVISTE (Cod_editura, cod_revista, nume, pret)
OFERTE (cod_editura, cod_revista, comision)
CLIENTI (cod_client, nume, strada, nr)
CHITANTE (nr_chitanta, data_chitanta, cod_client, cod_revista, l1,l2,l3,l4,l5,l6)

&
Fixarea relaiilor
EDITURI1-n REVISTE1-1OFERTE; REVISTE1-nCHITANTE;
CLIENTI1-nCHITANTE
Cheile tabelelor sunt ngroate.

Precizri:
a. Exist o ordine a proiectrii tabelelor, n funcie de relaiile dintre ele, tiind
c n mod automat se pot fixa aceste relaii dac folosim cmpurile Lookup.
Deci vom proiecta mai nti tabelele EDITURI i CLIENTI, apoi tabela REVISTE
i apoi CHITANTE i OFERTE.
Cmpurile tip Lookup vor fi cod_editura din REVISTE, cod_revista din OFERTE
i CHITANTE i cod_client din CHITANTE.
b. Codurile editurii, clientului i revistei le vom putea lsa de tip autonumber, de
la valoarea iniial 1 le fixm drept cheie prin butonul Key de pe bara cu
butoane!
c. Pentru numrul chitanei de acelai tip autonumber presupunem c se
ncepe cu o valoare diferit de 1 (noi am ales valoarea 1000).
Obsevaie:
Pentru a realiza aceast inializare vom proceda astfel: salvm definiia tabelei
CHITANTE. Proiectm o nou tabel MANEVRA ce conine un singur cmp, numit
start, cu valoarea 1000. Apoi proiectm o interogare de tip append pentru tabela
MANEVRA. Plasm coloana start din manevr i indicm, n linia Append To, numele
cmpului unde dorim s facem copierea valorii: nr_chitanta din tabela CHITANTE.
Salvm i rulm o singur dat!

Proiectarea formularelor de introducere a datelor


Pentru fiecare tabel putem realiza rapid un formular de introducere/editare a
datelor cu Form Wizard. Formularul pentru introducerea chitanelor va trebui s
afieze i valoarea de achitat n funcie de preul revistei i de numrul exemplarelor
cumprate n fiecare lun:

'
Pasul 1. Pregtim datele necesare acestui formular i a altor rapoarte, printr-o
interogare care s conin toate cmpurile din tabelele bazei de date; vom
introduce cmpul calculat suma (valoric) nu este asociat unei chitane,
ca produs ntre preul revistei i suma abonamentelor. Numim aceast
interogare edituriQuery.
Pentru aceast interogare important este s deschidem tabelele dorite cu
legturile dintre ele. La poziionarea pe o chitan avem acces prin legturi
la toat linia corespunztoare din revista solicitat i putem folosi preul
revistei ca i cnd ar exista alturi de chitan!

Pasul 2. Deschidem Form Designer i aranjm cmpurile pe suprafaa de lucru.


Denumim formularul Chitante.

Proiectarea rapoartelor
Dintre situaiile solicitate vom examina o list a abonamentelor pe reviste, care
s totalizeze numrul de exemplare la nivelul fiecrei chitane, i pe luni, la nivelul
revistei. De asemenea, dorim s se calculeze valoarea cuvenit pe fiecare revist
i comisionul total.
Pai. Vom pregti datele necesare printr-o interogare din tabelele REVISTE
1-1OFERTE i REVISTE1-nCHITANTE. Vom extrage numele revistei, preul


din REVISTE, comisionul din OFERTE, respectiv numrul chitanei, numele clientului
i lunile abonate din CHITANTE. Vom grupa datele pe reviste. Vom insera un cmp
calculat cu totalul numeric al revistelor, la nivelul chitanei.

Realizarea panoului central al aplicaiei

Pentru realizarea panoului de bord vom folosi utilitarul Switchboard Manager,


lansat din ToolsDatabases Utilities.


Rezolvri i indicaii
Problema 1.2. Se cer informaii despre persoane i locuinele lor.
Un imobil are mai multe apartamente. O persoan are mai multe proprieti
(imobile sau apartamente). Un imobil sau un apartament poate s fie n proprietatea
mai multor persoane.
Baza de date poate fi format din urmtoarele entiti:

Tabelele sunt:
IMOBILE (cod-imobil, strada, numar, bloc, scara, apartament)
APARTAMANTE (cod_imobil, cod_apartament, nr_camere, suprafata, tip_incalzire etc.),
unde tip_nclzire poate fi cu gaze, cu lemne, fr nclzire etc.
PERSOANE (BI, date_pers, ocupatie, data_nasterii)
PROPRIETARI (cod_apartament, cod_persoana, data_cumpararii etc.)
LOCUITORI (cod_apartament, cod_persoana).
Problema 3.3.
Observai structura tabelei CARTI pentru cmpul
data_intrarii_n_biblioteca, unde am pus
obligativitatea completrii (proprietatea este Re-
quired), valoarea implicit (Default) i condiia de
validare Validation Rule. Observai, de asemenea,
funcii pentru date calendaristice: funcia sistem
Date(), Year(<data_calendaristica>)
Este bine, ca odat fixat o anumit condiie de
validare, s fie compus i textul care va fi afiat de
sistem.
Problema 4.2. c.
F-1; E-2; H-3; D-4; C-5; I-6; B-7; A-8; G-9; L-10; K-11; J-12.
Problema 6.3.
Tabelele existente sunt TABLE2 (indicatii), TABLE3 (mod_vanzare), TABLE4
(farmacii, adresa, banca). Lipsete TABLE1, dar aceasta este vizibil prin subseturile
de date afiate de celelalte tabele.
TABLE1 (medicam, cant, pret, lookup to TABLE2, lookup to TABLE3, lookup to
TABLE4):


Cum am judecat?
TABLE4 deschide subset de date pentru coloana farmacii; astfel, este folosit n
tabela TABLE1 cmpul farmacii drept cmp de cutare ctre TABLE4 (Lookup to
TABLE4). Deci este stabilit o relaie TABLE4(1-n)TABLE1.
TABLE2 are ca subset de date coloana indicatii, deci, o coloan cu numele
indicatii va exista n tabela xxx i corespunztoare una cu numele Lookup to TABLE2
n TABLE1. Relaia este TABLE2(1-n)TABLE1.
TABLE3 are ca subset de date asociat coloanei mod_vanzare. Deci, n aceast
coloan relaia este TABLE3(1-n)TABLE1.
b. Tabela veche este XXX (farmacii, adresa, banca, medicament, indicatii,
mod_vanzare, cant, pret).
Problema 6.4.
O vom normaliza i obinem dou tabele ELEVI (clasa, cod-elev, nume, adresa)
i CLASE (cod_clasa, diriginte)
Problema 6.5.
Cheia poate fi grupul (nume_curs + nume_prof + nume_elev) i observm
dependenele funcionale. Atributul nr_ore depinde numai de nume_curs i, even-
tual, de profesorul care ine cursul. Gradul didactic depinde de nume_prof. Se impune
normalizarea: CURSURI (nume_curs, cod_curs, nr_ore, cod_prof), PROFESORI
(cod_prof, nume_prof, grad) i OPTIUNI (cod_curs, nume_elev).
Problema 7.4.
Deschidem baza de date BIBLIOTECA. Verificm s existe tabelele CARTI (id,
nr_inv, titlu, autor, editura, ediia, data_intr, data_ies, stare, este_manual?, colectia,
rezumat, coperta, etc.), CITITORI (cod, nume, adresa, telefon, ocupatie, loc_munca,
data_nasterii, cnp etc.) i OPERATII (cod_carte, cod_cititor, data_imp, data_rest).
Relaiile sunt CARTE1-nOPERATII (carte.id=operatii.cod_carte)
i CITITORI1-nOPERATII (cititori.id=operatii.cod_cititor).

1. Care sunt crile existente (autor, pre, numr de


exemplare) al cror nume ncepe cu informatica?
Select * from CARTI where
titlu like informatica*

2. Care sunt crile din colecia SF?


Select * from CARTI where colectia=SF

3. Ce cri din colecia SF au


preul cuprins ntre 100.000 i
200.000 de lei?
Select* from CARTI where
colectia=SF and pret between 100
and 200

4. Ce cri au fost scoase din inventar dup 1999?


Select * from CARTI where Data_ies >=#1.1.2000#

!
5. Care sunt titlurile crilor intrate n bibliotec n
intervalul x-y?
Select * from CARTI where data_intrare
between [X] and [Y]

6. Crile de poezii sau poeme sau ale lui


M.Eminescu.
Select carti.titlu, carti.autor from
CARTI
where carti.titlu=poezii or
carti.titlu=poeme or carti.autor Like
*eminescu

7. Sunt cri la care nu s-a completat numele autorului. Care


sunt acestea?
Select* from CARTI where autor =is Null

8. Dorim s selectm crile care se refer la


programare.
Select * from CARTI where
carti.titlu like *program*

9. Care sunt crile din colecia


Info ordonate cronologic dup
data intrrii n bibliotec?
Select carti.*, carti.colectia,
carti.data_intr from CARTI
where (((carti.colectia)=INFO))
order by carti.data_intr;

10. Care sunt crile autorului X?


Select carti.*, carti.autor
from CARTI
where (((carti.autor)=[x]));

11.Care este preul pe pagin calculat la fiecare carte a autorului X, n ordinea


descresctoare a acestor valori?

Select [pret]/[nr_pagini] as pret_pe_pagina, carti.autor


from CARTI where(((carti.autor)=[dati numele autorului]))
order by [pret]/[nr_pagini] DESC;

"
12. Care a fost durata de staionare a crilor (desigur care au ieit din eviden)?
Se va calcula n ani i se va afia n ordinea cresctoare a acestei durate.

Select DateDiff(yyyy,[data_intr],[data_ies]) as durata, carti.titlu


from CARTI
where (((DateDiff(yyyy,[data_intr],[data_ies])) Is Not Null));
13. Care sunt cititorii elevi nscrii la bibliotec?
Select nume from ELEVI
where ocupatie=elev
14. Lista crilor cele mai scumpe din
fiecare colecie?
Select carti.colectia,
Max(carti.pret) as max_pret
from CARTI
group by carti.colectia;

15. Ci cititori sunt elevi?


Deschidem banda de grupare i totalizare
prin ViewTotals
Select Count(cititori.ID) as nr_pers
from CITITORI
group by cititori.ocupatie having
cititori.ocupatie=elev;
16. Afiai toate operaiile de mprumut (cu sau fr restituire) cu data, numele
cititorului i numele crii. Vom construi o interogare pornind de la cele 3 tabele. Va
trebui s parcurgem ns tabela OPERATII n ntregime, deci asocierea va fi legat
de acest lucru. Observai aranjarea sugestiv a tabelelor.

Am editat fiecare legtur i am verificat asocierea dorit. De la OPERATII1-1CARTI


i OPERATII1-1CITITORI.

#
Select operatii.ID, carti.titlu, cititori.nume,
operatii.data_rest, operatii.data_impr
from (OPERATII inner join CITITORI on
operatii.cod_cititor = cititori.ID) inner join CARTI on
operatii.cod_carte = carti.ID;
17. Aflai numai acele mprumuturi care nu au fost returnate.

Select operatii.ID, carti.titlu, cititori.nume,


operatii.data_rest, operatii.data_impr
from (OPERATII inner join CITITORI on
operatii.cod_cititor = cititori.ID) inner join CARTI on
operatii.cod_carte = carti.ID
where (((operatii.data_rest) Is Null));
18. Afiai numrul de zile ntre data_imprumutului i data restituirii.

Select operatii.ID, carti.titlu, cititori.nume,


operatii.data_rest, operatii.data_impr,
DateDiff(d,[data_impr],[data_rest]) as nr_zile
from (OPERATII inner join CITITORI on
operatii.cod_cititor = cititori.ID) inner join CARTI on
operatii.cod_carte = carti.ID;

$
19. Ai putea afla care sunt situaiile
n care numrul de zile ntrziere ntre
mprumut i restituire este >14?
Select operatii.ID,
carti.titlu,
cititori.nume,
operatii.data_rest,
operatii.data_impr,
DateDiff(d,[data_impr],[data_rest]) as nr_zile
from (OPERATII inner join CITITORI on
operatii.cod_cititor = cititori.ID) inner join CARTI on
operatii.cod_carte = carti.ID
where (((DateDiff(d,[data_impr],[data_rest]))>14));
21. Care sunt cititorii restanieri la data curent? Pentru fiecare cititor se va afia
numele, numele crii nerestituite, precum i data cnd a fost mprumutat. Restanieri
se consider cei pentru care numrul de zile de la data mprumutului depete 14.
Calculai penalizarea pentru ntrziere, presupunnd c se cer 200 lei/zi ntrziere.
Select [titlu] & de & [autor] as carte,
cititori.nume, operatii.data_impr, operatii.data_rest,
DateDiff(d,[data_impr],Date()) as nr_zile,
200*[nr_zile] as penaliz
from CITITORI inner join (CARTI inner join OPERATII on
carti.ID = operatii.cod_carte) on cititori.ID = operatii.cod_cititor
where operatii.data_rest Is Null and
DateDiff(d,[data_impr],Date())>14
order by cititori.nume;

22. Cartea X se gsete pe raft sau este la un cititor? La care?


O variant este de a afia numele cititorului care a mprumutat i nu a restituit
cartea x.

Select cititori.nume, carti.nr_inv, operatii.data_impr,


operatii.data_rest
from CITITORI inner join (CARTI inner join OPERATII on
carti.ID = operatii.cod_carte) on cititori.ID = operatii.cod_cititor
where (((operatii.data_impr) Is Not Null) and
((operatii.data_rest) Is Null));

%
23. Cte cri sunt n biblio-
tec pe edituri i pe co-
lecii?
Vom apela Crosstab Query
Wizard i ca surs tabela CARTI.
Transform count(carti.ID)
as countOfID
select carti.editura from CARTI group by carti.editura
pivot carti.colectia;
24. Cte manuale sunt n bibliotec?
Select count(carti.ID) as nr_carti
from CARTI
group by carti.[este_manual?]
having (((carti.
[este_manual?])=True));

25. Numrul de manuale pe edituri


(Crosstab Query).
Transform count(carti.ID)
as countOfID
Select carti.editura
from CARTI group by
carti.editura
pivot carti.colectia;

26. Care sunt editurile care au publicat manuale colare?

Select distinct carti.[este_manual?], carti.editura


from CARTI
where (((carti.[este_manual?])=Yes));

27. Care sunt crile mprumutate de cititorul X? Cea mai recent operaie s fie
prima!
Select Query cu parametru pe nume cititor, sursa de date fiind cele 3 tabele
legate ca la punctul 15.
Select operatii.data_impr, carti.titlu, cititori.nume
from CITITORI right join (CARTI right join OPERATII on
carti.ID = operatii.cod_carte) on cititori.ID = operatii.cod_cititor
where (((cititori.nume)=[x]))
order by operatii.data_impr DESC;

&
28. Cine a citit cartea X?
Select Query cu surs de date cele 3 tabele relaionate.
Select operatii.data_impr, carti.nr_inv, carti.titlu, cititori.nume
from CITITORI right join (CARTI right join OPERATII on
carti.ID = operatii.cod_carte) on cititori.ID = operatii.cod_cititor
where (((carti.nr_inv)=[x]))
order by operatii.data_impr DESC;

29. Care sunt crile mprumutate n ziua X? De cine au fost mprumutate?


Select Query cu parametru pe operatii.data_impr, sursa de date fiind cele 3
tabele legate.
30. Cine i cnd a mprumutat cri ale lui Mihai Eminescu?
Select Query avnd criteriu Autor=M.Eminescu, sursa de date fiind cele 3 tabele
legate.
31. Care sunt crile mprumutate n luna iunie anul curent (numele cititorului i
numele crilor)?

Select DatePart(m,[data_impr]) as luna, [titlu] &


[autor] as Carte, cititori.nume

'
from CITITORI inner join (CARTI inner join OPERATII on
carti.ID = operatii.cod_carte) on cititori.ID = operatii.cod_cititor
where (((DatePart(m,[data_impr]))=6));

32. Situaia numrului de cri mprumutate pe luni i pe cititori.


Pasul 1. Realizm o interogare pentru a grupa informaii din cele 3 tabele, precum
titlul, cititorul i luna mprumutului. O vom numi carti_pe_luni:
Select DatePart(m,[data_impr]) as luna, [titlu] &
[autor] as Carte, cititori.nume
from CITITORI inner join (CARTI inner join OPERATII on
carti.ID = operatii.cod_carte) on cititori.ID = operatii.cod_cititor;

Pasul 2. Deschidem Query Wizard Crosstab avnd ca surs de date interogarea


anterioar. Specificm cmpul luna pentru coloan, cmpul nume pentru linie i
funcia Count pentru zona de date. Observm interogarea realizat de Wizard n
modul Design.

Transform Count(carti_pe_luni.Carte) as CountOfCarte


select carti_pe_luni.nume, Count(carti_pe_luni.Carte) as [Total Of Carte]
from carti_pe_luni group by carti_pe_luni.nume pivot carti_pe_luni.luna;

33. Afiai cititorii nscrii care nu au mprumutat nicio carte sau care au
mprumutat, dar nu n anul curent.
Putem realiza o interogare de cutare a articolelor fr corespondent, prin Find
Unmatched query Wizard, pe care o completm cu cerina suplimentar ca anul
mprumutului s fie diferit de anul curent.

Select cititori.nume, cititori.adresa


from CITITORI left join OPERATII on cititori.ID = operatii.cod_cititor
where (((operatii.cod_cititor) Is Null)) or
(((operatii.cod_carte) Is Not Null) and
((DatePart(yyyy,[data_impr]))<>Year(Date())));

 
34. Numrul cititorilor pe ocupaii.
Folosim Query Design; inserm banda
de totalizare prin ViewTotals.
Select count(cititori.ID) as nr_pers,
cititori.ocupatie
from CITITORI
group by cititori.ocupatie;

35. Evidena tuturor operaiilor, ordonate dup data mprumutului, fiecare operaie
cuprinznd numele cititorului i titlul crii.
Vom deschide o nou interogare i vom aduga cele 3 tabele. De aceast dat
vom verifica s fie introduse toate operaiile i numai acele linii din tabela CARTI
care corespund cheii de legtur. Observai poziia tabelelor n fereastra de proiectare
a interogrii i editarea legturilor.

Select operatii.data_impr,
carti.titlu, cititori.nume
from CITITORI right join
(CARTI right join OPERATII on
carti.ID =
operatii.cod_carte) on
cititori.ID =
operatii.cod_cititor
order by operatii.data_impr
DESC;

36. Numrul crilor intrate i numrul


crilor ieite din inventar, pe ani (de
exemplu, ntre 1999 i 2003).
Pasul 1. Construim o interogare plecnd
de la tabela CARTI i asociem fiecrei cri
anul intrrii i anul ieirii. Numim interogarea
Ani-intr-ies.

 
Select Year([data_intr]) as anul1, Year([data_ies]) as anul2, carti.ID
from CARTI;

Pasul 2. Calculm numrul crilor intrate


pe ani, plecnd de la interogarea anterioar,
n interogarea Nr-intr_ani.
Select [ani-intr_ies].anul1,
count([ani-intr_ies].ID) as nr_intr
from [ani-intr_ies]
group by [ani-intr_ies].anul1;
Pasul 3. Realizm o tabel de manevr cu anii dorii. Cheia
tabelei este chiar cmpul ani.
Pasul 4. Calculm numrul de cri ieite, pe ani, n interogarea
Nr_ies_ani.
Select [ani-intr_ies].anul2, count([ani-intr_ies].ID)
as nr_ies
from [ani-intr_ies]
group by [ani-intr_ies].anul2;
Pasul 5. Realizm interogarea ultim care
leag tabela ANI de interogrile anterioare,
n vederea aflrii numrului de cri intrate
i numrului de cri ieite anual.
Select ani.ani, nr_ies_ani.nr_ies, nr_intr_ani.nr_intr
from (ANI left join nr_ies_ani on ani.ani = nr_ies_ani.anul2)
left join nr_intr_ani on ani.ani = nr_intr_ani.anul1;

37. Valoarea total a crilor din bibliotec.


Select Sum([pret]) as total
from CARTI;


38. Afiai ca subset de date restanele fiecrui cititor.

Pasul 1. Deschidem tabela CITITORI prin Database Window.


Pasul 2. Verificm prezena cmpului Id n interogarea Restante, pentru a putea
realiza legtura ntre cele dou tabele.
Pasul 3. Prin comanda InsertSubdatasheet fixm ca subsetul s fie din
interogarea Restane pe care am realizat-o n sarcina anterioar. Alegem cheia de
legtur ca fiind codul cititorului din ambele tabele.
39. Afiai toi cititorii elevi nscrii la bibliotec,
ordonat dup clas, i, alturat, un mesaj
dac au sau nu restane!
Select distinct cititori.ID, cititori.nume,
iif([restante].[cod_cit]
Is Null,nu,da) as [are_res?]
from CITITORI left join Restante on
cititori.ID = restante.cod_cit;
Pasul 1. Deschidem o nou interogare pentru tabela CITITORI i interogarea
Restante obinut n sarcinile anterioare. Verificm s existe codul cititorului!
Pasul 2. Fixm relaia ntre tabela CITITORI i interogarea Restante astfel nct
s obinem toi elevii. Asocierea va fi Right Join.
Pasul 3. Specificm cmpurile dorite. Atenie la ultima coloan!

Pasul 4. Pentru a obine fiecare cititor cu mesajul


dorit este necesar s indicm unicitatea valorilor. Deci,
deschidem fereastra Properties i alegem Unique
Value=yes.

 !
40. Afiai cele mai scumpe cri (primele 10!) existente n bibliotec.
Select top 10 carti.titlu, carti.pret
from CARTI order by carti.pret DESC;

41. Sunt cri pierdute care trebuie scoase din eviden. Pentru acestea se
folosete cmpul stare. Trecei n alt eviden crile deteriorate i, apoi,
tergei-le din tabela CARTI.
Pasul 1. Salvm crile pierdute n alt
tabel. Vom construi o interogare tip Make-
table.
Select carti.* into PIERDUTE
from CARTI
where (((carti.stare) Like pierdut*));

Pasul 2. Rulm interogarea pentru a crea o nou tabel.


Verificm datele!
Tabela iniial rmne nemodificat!
Pasul 3. Construim o interogare de tergere cu acelai
criteriu stare.
Delete carti.stare
from CARTI
where (((carti.stare)=pierduta));
42. De fapt, toate crile autorului X ar trebui s fie scoase
din eviden!
Delete carti.autor=[x] from CARTI where carti.autor=[x]
43. Toate crile aprute n bibliotec nainte de anul 1990 au preul majorat cu
0,1%.
Pasul1. Realizm o interogare
de actualizare. Impunem condiia
ca data intrrii crii s fie dup
2003.
Cmpul care se modific va fi
preul.
Observaie: De obicei, marca zecimal este punctul, noi am setat-o la virgul!
Pentru cmpul nr_inv nu facem nicio corecie, dar l folosim pentru recunoaterea

 "
valorilor care vor fi actualizate naintea operaiei efective. Nu uitai s vizualizai

datele care vor suporta aciunea de actualizare prin butonul Datasheet View.
Expresia de actualizare poate fi i cea din figura urmtoare!
Update CARTI set carti.pret = [pret]*1.01,
carti.nr_inv = [nr_inv]
where (((carti.data_intr)>#1/1/2003#));

44. Editura Albatros i-a schimbat numele


n PINGUIN la 1septembrie 1992.
Update CARTI set carti.editura =
PINGUIN
where (((carti.editura)=Albatros) and
((carti.data_intr)>#9/1/2002#));
45. Mutai n alt eviden manualele
colare. Apoi reconstruii tabela CARTI.
Pasul 1. Construim o interogare tip Make-table
pentru tabela CARTI cu filtru pe cmpul
Este_manual? Vom indica numele tabelei noi,
MANUALE, n aceeai baz de date.
Tabela nou va avea aceleai coloane ca i
tabela iniial.
Select carti.* into MANUALE
from CARTI where (((carti.[este_manual?])=Yes));
Pasul 2. Proiectm o interogare de tergere pentru
manulele colare din tabela CARTI
Delete carti.[este_manual?]
from CARTI
where (((carti.[este_manual?])=True));
Pasul 3. Vizualizm datele din cele dou tabele CARTI i MANUALE.
Pasul 4. Dorim s refacem tabela CARTI prin
adugarea coninutului tabelei MANUALE. Pentru
aceasta proiectm o interogare Append Query.
Deschidem tabela MANUALE i specificm tipul
interogrii prin meniul principal Query Append
Query. Indicm coloanele, apoi numele tabelei
destinaie CARTI.
Insert into CARTI
select manuale.*
from manuale;
46. Dorim s copiem datele din tabela CITITORI ntr-o
nou tabel, n baza de date FARMACII (existent
deja). Tabela se va numi PERSOANE i va avea
doar structura tabelei CITITORI
Pasul 1. Construim o interogare Make-table, indicm
numele noii tabele, respectiv baza de date unde va fi
construit.

 #
Select cititori.* into PERSOANE in
D:\manuale\laborator\farmacii.mdb
from CITITORI
Pasul 2. Deschidem baza de date FARMACII i
vizualizm tabela PERSOANE. Dac am lucrat corect
aceasta exist i va conine toate articolele tabelei
CITITORI. Vom terge toate liniile!
Pasul 3. Construim interogarea de tergere a liniilor
acestei tabele. Pentru c
numele persoanei era
obligatoriu pus, fixm
condiia de selectare a articolelor care vor fi terse prin
nume is not null.
Delete persoane.nume
from PERSOANE
where (((persoane.nume) Is Not Null));
47. Numele autorului G.B.SHAW a fost scris greit
sub forma G.B.SOU sau g.b.sou. Efectuai
corecia!
Update CARTI set carti.autor = G.B. Show
where (((carti.autor)=G.B.SOU))
or (((carti.autor)=g.b.sou));
Problema 8.2.-vezi rezolvri 7.4
Problema 8.3. Baza de date este format din tabelele PROFESORI (cod_prof,
nume, specialitatea, grad_didactic...), OPTIONALE (cod_prof, cod_obiect,
nume_obiect, numar-ore), INSCRIERI (ID, cod_elev, cod_obiect), ELEVI (cod_elev,
nume, clasa...).

a) Dorim s aflm care sunt elevii care s-au nscris i la ce cursuri.


Select elevi.nume_elev, elevi.clasa, profesori.nume, optionale.nume_obiect
from ELEVI inner join ((OPTIONALE inner join INSCRIERE on
optionale.cod_obiect = inscriere.cod_obiect) inner join PROFESORI on
optionale.cod_prof = profesori.cod_prof) on
elevi.cod_elev = inscriere.cod_elev;

 $
b) Dorim s aflm ce elevi nu i-au ales (nc!) obiectul opional.
Vom folosi o interogare care parcurge tabela ELEVI i, pentru fiecare elev, va
reine numele i clasa numai dac n tabela INSCRIERE exist o linie care s
conin codul elevului. Folosim deci o subinterogare care s ntoarc, din fiierul
INSCRIERE, articolele care au codul elevului pe care suntem poziionai n interogarea
principal. Dac rezultatul acestei subinterogri este zero, atunci predicatul Exists
va avea valoarea fals.
Select elevi.nume_elev, elevi.clasa
from ELEVI where (((Exists (select * from INSCRIERE where
inscriere.cod_elev= elevi.cod_elev))=False));

c) Dorim s aflm care profesor nu a propus nicio disciplin opional:


select profesori.nume from PROFESORI
where (((Exists (select * from OPTIONALE where
optionale.cod_prof= profesori.cod_prof))=False));

d) Dorim s aflm la ce profesori i la ce cursuri nu s-a nscris niciun elev.


Vom folosi dou interogri: prima, pe relaia OPTIONALE i INSCRIERE, afl
codurile profesorilor; a doua folosete interogarea precedent i face legtura cu
PROFESORI pentru determinarea numelui acestora.
Pasul 1. Realizm o interogare de manevr i aflm numele cursurilor i codul
profesorilor care nu au elevi nscrii. Am numit-o Query6.

Select nume_obiect, cod_obiect, cod_prof


from OPTIONALE
where (((exists(select * from INSCRIERE where
inscriere.cod_obiect= optionale.cod_obiect))=false));

 %
Pasul 2. Folosim interogarea anterioar i aflm numele profesorilor.
Select profesori.nume,
query6.nume_obiect from
query6 inner join PROFESORI on
query6.cod_prof=profesori.cod_prof
e) Dorim s afim un mesaj pentru fiecare
profesor dac are sau nu vreun curs opional propus:
Select profesori.nume, iif(Exists (select * from
OPTIONALE where
optionale.cod_prof=profesori.cod_prof),da,nu)
as [are propus optional?]
from PROFESORI;

f) Presupunem c se pun note la fiecare opional. Dac media obinut la toate


opionalele este mai mic dect 5 se consider elevul nepromovat. Am proiectat
o tabel MEDII (cod_elev, cod_obiect, media) i o interogare prin care obinem
media general pentru fiecare elev.

Select elevi.nume_elev, Avg(medii.media) as


media_optionale, iif([media_optionale]>=5,da,nu) as [promovat?]
from ELEVI inner join (OPTIONALE inner join MEDII on
optionale.cod_obiect = medii.cod_obiect) on elevi.cod_elev = medii.cod_elev
GROUP BY elevi.nume_elev;
Problema 9.5.
Pentru a ataa numrul curent al
elevului n clas vom folosi un obiect
Field (prin copiere!) i vom scrie
proprietile Control Source=1;
Running Sum=Over Group.

 &
Problema 9.12.
Pasul 1. Interogarea pregtitoare este realizat din tabela CARTI.

Pasul 2. Realizm un raport simplu cu grupare prin Report Wizard. Grupul va fi


dat de coloana clasa a interogrii surs. Specificm dorina de a nsuma numrul
de exemplare la nivelul grupului i al raportului.
Pasul 3. Editm raportul intrnd n modul
Design.
1. trecem un cmp calculat pe banda Detail
pentru valoare ca fiind egal cu expresia
pret*nr_exemplare.
2. trecem un cmp calculat pe banda
de subsol la nivelul grupului, pentru
calcularea sumei valorice a manualelor
clasei.
Funcia folosit este sum avnd ca
parametru produsul dintre pre i numr
de exemplare. Se poate edita direct pe
linia Control Source sau deschidem
fereastra ZOOM prin <shift>+F2.
3. trecem un cmp calculat pe banda
de subsol raport, pentru calcularea
totalului valoric.
Observai proiectul de raport i
proprietile importante ale acestui cmp.
Control Source folosete tot funcia Sum,
dar vom seta proprietatea Running Sum
=over All.
Problema 9.12.2. Restanierii si penalizrile lor.
Baza de date este format din cele 3 tabele relaionate, iar o interogare care s
obin restanierii o avem rezolvat deja vezi rezolvrile din lecia 6.

Am imaginat dou variante de rezolvare: una n care numrul de zile i penalizarea

 '
sunt calculate n interogare i cealalt, n care se folosesc cmpurile calculate ale
raportului. Suma pentru penalizarea corespunztoare unei zile ntrziere este
parametru n interogare.
Varianta 1. Vom construi o interogare cu toate coloanele pentru raport. Observai
modul cum am introdus parametrul: n expresia de calcul a penalizrii (ntre paranteze
ptrate!)

La execuia interogrii se va afia caseta de dialog i, n funcie de valoarea


introdus, se afieaz coloana penaliz.
Raportul l realizm cu ajutorul Report Wizard, avnd ca surs de date interogarea
anterioar.
Varianta 2. Interogarea
va conine doar coloanele
titlu, autor, nume cititor,
data mprumutului, data
restituirii i numr zile ntrziere. Pe baza interogrii construim, prin Report Wizard,
un raport pe care l modificm apoi prin Design Report. Astfel:
Pasul 1. Pe banda de titlu
adugm obiectul textbox avnd
Control Source=suma penalizare
unitara pe care o primim ca
parametru.
Pasul 2. Pe banda Detail
proiectm obiectul textbox nr_zi
avnd Control Source=Datediff(D,[data_impr],date()).
Pasul 3. Pe banda Detail
proiectm obiectul textbox
pentru penalizare avnd
Control Source= [suma
penalizare unitara]*[nr_zi].
Deschidem raportul i
observm funcionarea lui.

Problema 10.4.
RecordData Entry sau proprietatea Data Entry=Yes.
Problema 10.6.
Se vor specifica coloanele n Form Wizard.
Folosii formularul anterior i interzicei operaiile de tergere i de adugare de
articole; Allow Deletions=NO; Allow Additions=NO; Allow Edits=YES.

!
Problema 10.7.
Pasul 1. Vom proiecta mai nti o interogare cu parametru, ca n imaginea alturat,
pe care o denumim interogarea profesor_x.
Pasul 2. Vom folosi Form Wizard indicnd ca surs de date interogarea anterioar.
Pasul 3. Vom fixa proprietile care s interzic editarea datelor. Putem folosi i
proprietatea RecordSet type=snapshot, cu acelai efect.
Pasul 4. Vom seta proprietile de afiare a formularului Record Selector=No;
Navigation Buttons=No Scroll Bars=neither. Caption=profesor x.

Problema 10.8.
Crearea unui formular pentru deplasarea i editarea a 2 tabele CLASE1-n
ELEVI
Pasul 1. Vom deschide Form Wizard fr s specificm sursa de date n prima
fereastr.
Pasul 2. n fereastra a doua a utilitarului vom indica tabela CLASE i cmpurile
acesteia i apoi, fr s trecem la pasul urmtor, tabela ELEVI i coloanele acesteia.
Pasul 3. Vom indica tabela printe: CLASE. Tabela copil ELEVI este folosit
pentru construirea automat a unui formular care poate fi inclus n formularul de
editare a clasei sau este separat i deschis la aciunea operatorului. n cazul nostru
am optat pentru un subformular inclus (Form with subforms).
Pasul 4. Trebuie specificat forma subformularului. Este de preferat un tip tabelar,
pentru a nu aglomera fereastra de editare (are deja datele despre clase).
Pasul 5. Atribuim nume formularului principal i subformularului.
Pasul 6. Executm, prin deschiderea formularului printe (Clase).
Problema 10.12.
Proiectai formularul pentru introducerea/editarea datelor a 2 tabele legate.
Pasul1. n primul rnd observm c pentru diriginte avem chiar numele
profesorului, nu codul acestuia, care este n tabela CLASE; deci, va trebui s
construim o interogare folosind tabelele CLASE i PROFESORI (avem legtura
clase.cod_dirig=profesori.id) Numim interogarea Clase_cu_nume_dirig.
Pasul 2. Proiectm un nou formular folosind Form Wizard i indicm n ordine
coloanele interogrii anterioare (Clase_cu_nume_dirig este un query i, pentru c
acest tabel este printe, formularul primete acest nume implicit!) i apoi cmpurile
tabelei ELEVI.
Pasul 3. Specificm gruparea i faptul c formularele sunt legate (Linked forms).
Pasul 4. Salvm i verificm funcionarea formularelor.

!
Pasul 5. Intrm n Form Design, corectm textul asociat butonului care deschide
subformularul (proprietatea Caption=Vezi elevii!) i schimbm mrimea i fontul
Font Name=arial, Font Size=11.
Pasul 6. Deschidem banda de sfrit de formular i includem un obiect Label cu
textul dorit (proprietatea Caption=actualizarea claselor si a elevilor).
Problema 10.13.
Proiectarea unui ansamblu de formulare pentru editarea a 3 tabele!
SCOLI1-nCLASE1-n ELEVI.

Pasul 1. Verificm baza de date i, dup caz, aplicm coreciile necesare. Trebuie
s existe tabela SCOLI (cod, nume, adresa, tip_scoala etc.). Dac nu, o vom crea!
Vom verifica s existe un cmp de legtur la tabela CLASE (exemplu cod_scoala
de tip Lookup, cu valori din tabela SCOLI). Vom verifica s existe tabela ELEVI, cu
legtura la CLASE prin cmpul cls.
Observaie: Pentru noua situaie este normal s corectm valorile asociate
cmpului cls: astfel, vom aduga la codul anterior o cifr pentru a codifica unic
clasele. Dac tabela ELEVI are cmpul cls de tip Lookup nu mai este necesar
modificarea manual a valorilor (dup cum tim orice modificare a cheii din tabela
PARINTE se reflect automat i asupra cheii de legtur din tabela COPIL).
Pasul 2. Proiectarea interogrii pentru asocierea numelui dirigintelui se face ca
n exemplul anterior. S denumim tabela CLASE_CU_NUME_DIRIG.
Pasul 3. Vom proiecta un formular prin Form Wizard ncepnd cu tabela SCOLI,
vom indica coloanele, apoi cu tabela CLASE_CU_NUME_DIRIG, respectiv cu tabela
ELEVI.
Pasul 4. Vom intra n modul Design pentru
formularul Scoli i vom schimba textul asociat butonului
care deschide formularul Clase_cu_nume_dirig. Ne
interesaz subformularul coninut de acesta, pentru
a-i schimba forma de afiare a datelor.
Pentru aceasta, aflm numele asociat de
Form Wizard subformularului de pe formularul
Clase_cu_nume_dirig.
Vom selecta obiectul subformular i, prin fereastra
Properties, cutm proprietatea Name (exemplu,
name=elevi subform2).
Vom intra n editarea subformularului elevi
subform2 din fereastra Data Design i, n fereastra

!
de proprieti, fixm valoarea Default View = Continuous forms (de la Default
View=Datasheet - implicit).
Celelalte manevre cu obiectele sunt deja nvate!
Problema 10.14.
Proiectai un formular care s ocupe ntregul ecran sub forma
urmtoare. Numii formularul frm_principal.
Caption=fereastra cu imagine; Scroll bars=neither; Record
Selections=No
Navigation bars=No; Border Style=Sizable; Picture =C:imag.jpg; Picture
sizeMode=stretch; Name=frm_principal.
Problema 10.15.
Adugai pe formularul frm_principal butoane pentru deschiderea formularelor
proiectate anterior (frm_prof1, frm_prof2, frm_prof3, frm_prof4).
Pasul 1. Proiectm un buton de comand, prin manevra drag&drop de la toolbox
ctre formular i conturm zona ocupat de obiect. Editm textul explicativ.
Pasul 2. Indicm aciu-
nea efectuat la eveni-
mentul click(), prin selec-
tarea acesteia dintr-o list
deschis de utilitar. n cazul
nostru vom deschide un
formular al crui nume l
putem alege la pasul urmtor.
Odat construit butonul observm n fereastra de proprieti adugarea la
evenimentul On CLick.
Observaie: pentru afiarea unui text explicativ la poziionarea mouse-ului pe
buton se folosete proprietatea ControlTip Text.
Problema 10.16.
Realizai un formular pentru adugarea unui singur articol n tabela PROFESORI.
Pasul1. Vom deschide Form Design i vom indica tabela PROFESORI ca surs
de date.
Pasul 2. Fixm proprietile formularului: Record
Selectors=No; Navigation Buttons=No; Data
Entry=Yes (nu vedem celelalte articole ci doar cel
pe care l introducem); Record Source=
PROFESORI (este valoarea implicit dac am
deschis tabela la intrarea n Form Design);
Caption=introducere date despre un profesor;
Close button=No; MinMaxButton=None
Pasul 3. Proiectm zona de editare pentru
numele profesorului mpreun cu textul explicativ,
prin manevra drag&drop, de la numele cmpului
din Field List la fereastra de proiectare. Se
asociaz dou obiecte grupate Label (pentru
numele cmpului) i TextBox (pentru valoarea
cmpului). Dorim s deplasm separat cele dou
obiecte! Va trebui s selectm separat fiecare

!!
obiect, apoi s fixm mouse-ul pe colul stnga sus pn apare simbolul mn i
apoi s agm obiectul n noua poziie.
Pasul 4. Proiectarea butoanelor de
comand se face prin selectarea obiectului
Command Button de pe Toolbox i
desenarea cu mouse-ul a formei acestuia
pe suprafaa de lucru. Automat, se
activeaz utilitarul de construire a
butonului care ne permite s asociem
acestuia aciunea la evenimentul Click.
Trebuie aleas aciunea dup ce am fixat
categoria acesteia. Vom proiecta un buton
care s salveze valorile introduse ntr-un
nou articol (deci Save Records), un buton
care s anuleze valorile pe care le-am introdus (deci Delete Record) i un alt buton
care va servi la nchiderea formularului desigur, putem s-l nchidem prin butonul
de pe bara de titlu, dar, ne place s controlm noi aciunea, aa nct vom avea
butonul de nchidere formular (Close Form).
Fiecare buton are alt text explicativ pe care l introducem prin proprietatea Caption.
Precedm litera folosit pentru Shortcut de caracterul ampersant &.
Vom putea folosi <alt>+<s> pentru a manevra cu tastele butonul de tergere.
Problema 10.17
Modificai formularul anterior pentru a putea introduce i alte date.
Pasul 1. Cmpurile adresa i studii sunt cmpuri de tip text i prin manevra
drag&drop asociaz obiectele corespunztoare.
Pasul 2. Cmpurile este_casatorit? i are_copii sunt de tip boolean i prin manevra
drag&drop obinem obiectele de tip CheckBox (precedate de obiectele Label cu
numele cmpului). Proprietatea important pentru un obiect de control tip Checkbox
este Control Source; acesta primete numele cmpului din tabela PROFESORI.
Pasul 3. Cmpul grad_di-
dactic este de tip text i i
asociem un obiect tip List.
Dup manevra de poziionare
i desenare a zonei ocupat
de lista deschis se activeaz
asistentul care ne pemite
introducerea valorilor i indicarea cmpului unde va fi reinut valoarea selectat.
Observai proprietile importante n imaginea alturat.
Pasul 4. Cmpul nivel_studii a fost folosit pentru a memora selecia din obiectul
tip Options Group. i aici asistentul este cel care ne cluzete pas cu pas.
Este bine de tiut ce valoare este memorat
n cmp la selectarea unui buton. De exemplu, 1
pentru liceale, 2 pentru universitare i 3 pentru
studii post-universitare.
Vom selecta obiectul pe toolbar i vom contura
zona acestuia pe formular. Asistentul va solicita informaii legate de tipul controlului
i stilul acestuia.
De asemenea, se solicit numele cmpului care va primi valoarea selectat de
operator (n cazul nostru cmpul este nivel_studii).
!"
Pasul 5. Cmpul specialitate a fost folosit pentru a
memora valoarea selectat dintr-o list deschis (obiectul
ComboBox). Dup poziionare i dimensionare, asistentul
ne permite s indicm sursa de date (noi vom introduce
direct lista valorilor mai importante, urmnd ca pe par-
cursul folosirii formu-
larului s putem aduga
alte valori!). Paii sunt
aceiai ca la proiec-
tarea obiectului ListBox.
Observai princi-
palele proprieti ale
obiectului.
Pasul 6. Proiectarea
obiectului OLE Bound
Control se poate face prin drag&drop de la cmpul Foto din tabel sau prin selectarea
obiectului de pe bara Toolbox i dimensionarea zonei ocupate de obiect. Proprietatea
important este ControlSouce=foto.
Pasul 7. Verificm funcionarea obiectelor prin deschiderea formularului,
introducerea valorilor i urmrirea liniilor noi n tabela PROFESORI.
Problema 11.1
Realizarea unui macro pentru deschiderea unui formular i nchiderea altuia.
Pasul 1. Pregtim formularul tip caset de dialog.
Fixm proprietile la nivelul formularului. Mai importante sunt:
Name=frm_special; Caption=introduceti specialitatea; Scroll bars=Neither;
Record selectors=No; Navigation Button=No; Autocenter=Yes; Border Style=dialog;
Controlbox=No; MinMaxButton =Both enabled.
Pasul 2. Proiectm obiectul textbox,
prin selectarea acestuia de pe toolbox i
dimensionarea zonei ocupate de acesta
pe formular. tergem obiectul Label
asociat textbox-ului implicit (numele
aciunii va fi scris pe banda de titlu a
formularului). Fixm proprietatea Name=
txtspecial.
Observaie: Este important de reinut
acest nume al obiectului, deoarece
valoarea ntoars de obiect va fi folosit
la selectarea datelor din formularul apelat.
Pasul 3. nchidem, deocamdat, i salvm cu numele frm_special.
Trebuie s pregtim cellalt formular pentru c butonul Ok va trebui s-l deschid,
deci trebuie s cunoatem numele formularului apelat.
Pasul 4. Pregtim datele surs pentru formularul de navigare i editare.
Vom folosi tabela PROFESORI, filtrnd datele dup valoarea introdus de opera-
tor. De aceea, vom realiza o interogare cu parametru.

!#
Vom filtra liniile care au n coloana specialitate aceeai valoare ca cea ntoars
de obiectul txtspecial din formularul frm_special. Observai modul de calificare a
cmpurilor i a obiectelor pe formular. Proprietatea Value reine coninutul obiectului
la un moment dat.
profesori.specialitate=forms![frm_special]!txtspecial.value
Salvm interogarea (numele su sugernd faptul c primim un parametru din alt
formular) cu prof_specx_din_alt_frm.
Pasul 5. Proiectm cu Form
Wizard un formular pentru
navigare i editare avnd ca
surs de date interogarea
anterioar. l vom salva cu
acelai nume ca i interogarea
surs: prof_specx_din_alt_frm.
Pasul 6. Proiectm un macro
pentru aciunile dorite.
6.1. Deschidem din Database MacroNew i indicm aciunile dorite.

Atenie! Macro-ul va deschide nti


formularul Prof_specx_din_alt_frm i
apoi va nchide formularul printe
Frm_special.
6.2. Salvm, cu numele
Mac_activ_si_inchid.
Pasul 7. Deschidem, pentru
completare, formularul caseta de dia-
log.

!$
7.1 Proiectm primul buton de comand, prin selectarea din Toolbox i conturarea
zonei pe formular. Anulm sugestia asistentului de a ne ajuta n desemnarea aciunii.
Fixm proprietatea Name=cmd_ok.
Fixm pentru evenimentul Click() =mac_activ_si_inchid.
7.2. Proiectm al doilea buton; pentru aciunea declanat de acesta preferm s
scriem noi codul (deci, nchidem asistentul).
n fereastra de proprieti fixm Name=cmd_cancel, iar la evenimentul Click()
vom folosi metoda Close.
Problema 11.2. Macro pentru avertizare
Pasul 1. Realizm o macro-instruciune condiionat prin Macro Builder.
Atenie! Butonul pentru inserarea coloanei Condition n fereastra de proiectare a

macro-ului este . Observai modul de precizare a condiiei: dac valoarea


obiectului chk_este_casatorit? de pe formularul frm_profesori are valoarea Yes,
atunci macro-ul va trebui s afieze mesajul atentie

Pasul 2. Atam macro-ul la


evenimentul AfterUpdate al obiec-
tului. Deci, aciunea se va declana
dup ce obiectul chk_este_casatorit?
i schimb valoarea.
Problema 11.3.
Pasul 1. Se deschide baza de
date ABONAMENTE cu tabelele
REVISTE, CHITANTE etc.
Pasul 2. Se deschide fereastra
de proiectare a unui nou macro prin
MacrosNew.
Pasul 3. Se fixeaz opiunile
meniului. Observai comenzile de
deschidere a formularelor i rapoar-
telor aplicaiei. Fiecare comand din
macro primete ca nume chiar textul
ce va fi afiat n lista de opiuni a
meniului. Ultima opiune va deter-
mina prsirea mediului Access.

!%
Atenie! Dup selectarea comenzii de
deschidere formular sau raport (n zona
Actions) trebuie ales numele formularului sau
al raportului din Lista Form Name a zonei
Actions Arguments.
Pasul 4. Se nchide macro-ul. Se salveaz
(de exemplu cu numele Macro1).
Pasul 5. Se deschide fereastra de
proiectare a unui nou macro. De aceast dat
la Action vom alege comanda AddMenu, iar
la Arguments vom da un text ce va fi afiat
pe buton (Menu Name), numele macro-ului anterior care definete aciunile meniului
(Manu Macro Name) i, eventual, un text afiat pe Satus Bar.
Pasul 6. Se nchide macro-ul i se denumete (n exemplul nostru, Macro1).
Pasul 7. Se proiecteaz sau se deschide un formular de prezentare a aplicaiei.
La nivelul acestuia se deschide fereastra de proprieti i se asociaz metodei
MenuBar macro-ul Macro1.
Pasul 8. Se ruleaz prin butonul View.
Problema 12.1. Proiectarea unui meniu bar cu butoane simple prin Toolbars
Customize
Pasul1. Se deschide fereastra View
ToolbarsCustomize.
Pasul2. Se creeaz o nou bar cu
numele Scoala prin butonul New al ferestrei
Customize, tab-ul Toolbars. Observai bara
vid plasat n dreapta ecranului de dia-
log!
Pasul 3. Se deschide tab-ul Commands
i, n fereastra Categories, se selecteaz
AllTable.
Pasul 4. Se alege tabela pe care dorim
s o deschidem printr-un buton i executm
drag&drop ctre bara Scoala.
Pasul 5. Schimbm textul asociat pentru
buton implicit este numele tabelei i pictograma asociat prin meniul contextual
deschis cu butonul drept al mouse-ului.
Problema 12.2. Proiectarea unui buton tip meniu
Pasul 1. Pregtim modelul arborescent pentru
meniu i alegem care tabele, formulare i
rapoarte vor fi folosite.
Pasul 2. Deschidem fereastra View-Customize.
Pasul 3. Proiectm o nou bar prin butonul
New, apoi ne poziionm n tab-ul Commands i
selectm din lista Categories New Menu. Apare,
n fereastra alturat Commands, linia NewMenu pe care executm drag&drop la
bara principal. Prin butonul drept al mouse-ului deschidem meniul contextual ataat
butonului i atribuim numele: Aplicatii-scoala.

!&
Pasul 4. Dorim s includem acum opiunile acestui meniu. Fiecare opiune va fi
tot un buton tip menu. Vom repeta deci manevrele pasului 3, de aceast dat
plasnd butonul meniu ca opiune a meniului principal. Vom da nume fiecrei opiuni:
introduceri de date, rapoarte i iesire.
Pasul 5. Realizm ultimul nivel. Vom selecta din lista AllTable tabela ELEVI i
vom executa drag&drop ctre butonul introduceri de date. Vom repeta manevrele
pentru toate obiectele necesare din listele AllTable, AllQueries sau AllForms.
Pasul 6. Pentru opiunea Iesire se va deschide din tab-ul Commands categoria
AllMacros i alegem macro-ul care realizeaz ieirea.
Problema 12.6. Realizarea unui meniu contextual
Pasul 1. Realizm un macro pentru cele 2 opiuni ale meniului contextual. Vom
deschide MacroNew i activm butonul pentru inserarea coloanei Macro Name.
Acolo vom trece textul asociat opiunii. La aciune vom deschide formularul Elevi i
pentru a doua opiune vom deschide raportul (atenie la parametrul View-trebuie dat
Print Previw dac dorim afiarea pe ecran). Salvm cu numele Mac_meniu_elevi.

Pasul 2. Realizm un macro care s


deschid meniul.
La aciune vom trece comanda AddMenu
i vom specifica numele macro-instruciunii
care compune meniul. Vom salva cu numele
Mac_lansare_mnu_elevi.

Pasul 3. Asociem acest macro


formularului de prezentare a aplicaiei,
realizat ca sarcin anterioar la
proprietatea Shortcut menu bar.

!'
Problema 12.7. Proiectarea unui buton tip menu_bar prin macro-instruciune
Pasul 1. Proiectm 2 macro-uri. Unul cu numele Mac_frm va conine opiunile
submeniului pentru formulare, iar cellalt Mac_rap va conine submeniul pentru
rapoarte.

Pasul 2. Vom crea macro-ul Mac-menu care va deschide cele dou submeniuri.
Observai parametrii metodei AddMenu pentru formulare i pentru rapoarte.

Pasul 3. Realizm macro-ul care s


formeze meniu-principal.

Pasul 4. Specificm n formular numele


acestul macro, n proprietatea Menu Bar.

"
Anexe
Evenimentele unui formular
1 Open La deschiderea formularului nainte s se afieze prima nregistrare
2 Load Dup deschiderea formularului i ncrcarea articolelor
3 Resize La modificarea dimensiunilor formularului
4 Activate Cnd formularul devine activ, dar nainte de a selecta o nregistrare
5 Current Cnd formularul primete focalizarea (este reafiat)
6 Unload La nchiderea formularului, dar nainte s fie ters de pe ecran
7 Deactivate Atunci cnd formularul pierde focalizarea
8 Close Atunci cnd Access nchide i elimin de pe ecran

Tipuri de date n VBA i domeniul de valori


Tip de dat Memorie (octei) Domeniu de valori
Byte 1 cod complementar 0-255
Boolean 2 True/false
Integer 2 cod complementar -32678-32767
Long 4 cod complementar -2E9 2E9
Single 4 virgul mobil simpl precizie -3E38 - +3E38
Double 8 virgul mobil dubl precizie -1E308- +4E308
Currency 8 virgul mobil dubl precizie -9E14- +9E14
Date 8 virgul mobil dubl precizie 01.01.100- 31.12.9999
Object 4 referin la un obiect
String 10+ LUNGIME SIR 0- 2 MILIARDE
Variant 16 pentru Numere Orice numr pn la limitele Double
22 lungime pentru iruri Orice ir pn la 2 miliarde caractere

Funcii interne MS Access


Domeniu Nume Descriere
Conversii CByte Convertete o expresie la tipul Byte
CStr Convertete o expresie la tipul String
Val Returneaz o valoare numeric dintr-un ir de caractere
Data i ora Date, Now,Time Returneaz ora sistemului si timpul
DateAdd Adaug un anumit interval de timp la o dat
DateDiff Returneaz intervalul dintre dou date
DatePart Returneaz o parte a unei date
DateValue Returneaz o dat dintr-un ir de caractere
Day/month/year Returneaz ziua, luna i anul din dat ca valori numerice
Hour/minute Returneaz ora/minutul ca valoare numeric
WeekDay Returneaz ziua sptmnii ca valoare numeric
Year Returneaz anul unei date

"
Domeniu Nume Descriere
Funcii agregat DAvg Calculeaz media pentru un set de valori
DCount Numr nregistrrile unui domeniu
DLookup Returneaz valoarea cutat dintr-un set de nregistrri
DMax, Max Calculeaz maximul pentru un set de valori
DMin, Min Calculeaz minimul pentru un set de valori
DSum, Sum Calculeaz suma pentru un set de valori
Testri IsDate Testeaz dac o expresie poate fi convertit ntr-o dat
IsEmpty Testeaz dac o variabil a fost iniializat
IsNumeric Testeaz dac o expresie poate fi evaluat numeric
IsNull Testeaz dac o expresie conine date valide
Fiiere CurDir Returneaz calea directorului curent
i directoare Dir Caut un fiier sau director
EOF Testeaz dac s-a ajuns la sfritul unui fiier
Loc Returneaz poziia curent dintr-un fiier
Seek Stabilete poziia curent ntr-un fiier
Funcii DDB Returneaz deprecierea unui bun
financiare FV Valoarea n viitor a unei rate
IPmt Dobnda pe o perioad
NPer Numrul ratelor
NPV Valoarea net curent a unei investiii
Pmt Valoarea pltit a unui mprumut
PPmt Valoarea principal pltit a unui mprumut
PV Valoarea curent a unei investiii
Rate Rata dobnzii unui mprumut
Funcii Abs Valoarea absolut a unui numr
matematice Eval Evalueaz o expresie
Fix, Int Returneaz partea ntreag
Sgn Semnul
Sqr Ridicare la ptrat
Diverse CodeDB Numele bazei de date curente
CurrentUser Numele utilizatorului curent
Error Returneaz mesajul unei erori
InputBox Afieaz o caset pentru introducerea datelor
MsgBox Afieaz o caset de mesaj
QBColor Returneaz codul RBG corespunztor unei culori
RBG Returneaz un ntreg reprezentnd valoarea
corespunztoare unei culori
Rnd Genereaz un numr aleator
Shell Pornete o alt aplicaie

"
Selecii Choose Selecteaz o valoare dintr-o list de argumente
IIf Dup evaluarea expresiei returneaz una dintre cele dou valori
Switch Returneaz valoarea corespunztoare primei expresii adevrate
dintr-o list
Lucru cu texte Asc Returneaz codul ASCII al primului caracter dintr-un ir
Chr Caracterul corespunztor unui cod ASCII
Format Formateaz o expresie
InStr Caut un ir de caractere ntr-un alt ir
InCase Transform toate literele mari n litere mici
UCase Transform toate literele mici n majuscule
Left Right Mid Partea din stnga/dreapta/interioar a unui ir de caractere
LTrim, RTrim, nltur spaiile de la nceputul/ sfritul sau ambele capete
Trim ale unui ir de caractere
Space Creeaz un ir format dintr-un numr dat de spaii
Str Convertete un numr n caracterul pe care l reprezint
StrComp Compar dou iruri de caractere
String Creeaz un ir format dintr-un anumit caracter repetat

"!
Bibliografie
1. *** colecia PC Report 19981999.
2. 88 *** documentaia Microsoft Access.
3. Allen Browne, Alison Balter, Bazele Access 95, Teora, Bucureti, 1996.
4. Annette Marquis, Ghidul dumneavoastr pentru Access, All,1998.
5. Blan Gheorghe Curele, Visual Basic, Introducere n programarea vizual a
aplicaiilor Windows, Editura Done, 1994.
6. Eduard Koller, Monica Rocule, Programare n Access 97, Teora, Bucureti,1999.
7. Fotache Marin, Baze de date relaionale. Organizare, interogare, normalizare,
Editura Junimea, Iai, 197
8. Mariana Panru, Ionu Panru, Irina Panru, Informatic, Baze de date varianta
Visual FoxPro, Editura L&S Infomat, Bucureti, 2001.
9. Sprcu Claudiu, Loptan Ionu, POO-analiza, proiectarea i programarea orientat
spre obiecte, Editura Teora, Bucureti, 1995.
10. Susan Harkins, Ken Hansen, Tom Gerhard, Utilizarea MS Access 2000, Teora,
Bucureti, 2000.
11. V. Florescu i alii, Baze de date, Editura Economic, Bucureti, 1999.
12. Virgil Chichernea, Sistemul Access, Editura Sylvi, Bucureti, 2000.

""
MINISTERUL EDUCAIEI I CERCETRII

TEHNOLOGIA INFORMAIEI
I A COMUNICAIILOR
Manual pentru clasa a 9-a
RADU MRANU / RZVAN BOLOGA /
ANA RAMONA LUPU

lice
9
obat
Apr 2004
MEC

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