Documente Academic
Documente Profesional
Documente Cultură
"
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
#
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).
%
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:
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.
'
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?
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:
Lecia
2 Prezentarea general
a aplicaiei MSAccess
Caracteristici SGBDR Access
Obiectele proprieti, evenimente, metode
Tipuri de date i operaii specifice fiecrui tip
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
!
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.
#
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
&
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.
'
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.
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.5. ncrcarea structurii (popularea tabelei)
Problema 3.1.
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.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.
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.
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
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;
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
!
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.
!!
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!
!"
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.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.
!$
3. Obinei imaginea urmtoare, n care putem vizualiza elevii Subseturi de
fiecrei clase! 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
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:
!'
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.
"
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.
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.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:
""
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.
"#
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().
"%
peste 160 de funcii standard. De exemplu, Year (<data>) extrage anul din data
calendaristic dat ca parametru.
"&
media sortarea descresctoare i, din fereastra
de proprieti pentru interogare, vom fixa la 10
linia Top Value.
"'
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 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 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.
#!
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 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).
##
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.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
#'
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*)
$
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.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);
Problema 8.1. Fie baza de date SCOALA cu tabelele CLASE (cls, profil, diriginte). ELEVI
(cod, nume, cls, med, absn, absm). Scriei comenzi SQL.
$!
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
$"
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.
$%
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.
$&
report) sau se deschide fereastra de proiectare a raportului pentru a se
face unele corecii.
Pasul 9. Putem previzualiza raportul prin butonul Preview.
$'
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.
%
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.
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,
Wizard Chart
%"
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)
%#
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.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.
%%
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
%'
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.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.
&
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.
&
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.
&!
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.
&"
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.
&#
Problema 10.8. Folosii formularul anterior i interzicei tergerea, Allow Edits,
respectiv adugarea articolelor. Deletions
&$
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.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.
'
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.
'
*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
'
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 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.
'#
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.
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.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
''
Un exemplu de folosire a unei pagini Web:
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 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.
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
Proiect final
Indicaii metodologice pentru realizarea proiectului final
Tematica propus
Studiu de caz
!
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.
$
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.
%
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.
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!
'
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!
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.
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).
!
5. Care sunt titlurile crilor intrate n bibliotec n
intervalul x-y?
Select * from CARTI where data_intrare
between [X] and [Y]
"
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 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.
$
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;
%
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));
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;
'
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));
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.
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;
Select Year([data_intr]) as anul1, Year([data_ies]) as anul2, carti.ID
from CARTI;
38. Afiai ca subset de date restanele fiecrui cititor.
!
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*));
"
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#));
#
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...).
$
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));
%
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;
&
Problema 9.12.
Pasul 1. Interogarea pregtitoare este realizat din tabela CARTI.
'
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!)
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.
!$
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
!%
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.
!'
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.
"
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
"
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