Professional Documents
Culture Documents
Baze de date
004
2
CAPITOLUL I. DELIMITĂRI CONCEPTUALE ALE BAZELOR DE DATE .................... 6
1.1. Termeni specifici în lucrul cu bazele de date ........................................................... 6
1.2. Sisteme de gestiune a bazelor de date ...................................................................... 9
1.2.1. Noţiuni generale privind sistemele de gestiune a bazelor de date ....................... 9
1.2.2. Funcţiuni ale sistemelor de gestiune a bazelor de date ...................................... 10
1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru o bază de date
relaţională ................................................................................................................ 11
1.2.4. Sistemul de gestiune a bazelor de date ACCESS .............................................. 13
1.3. Scopul unei baze de date ........................................................................................ 14
1.4. Componentele aplicaţiei ACCESS .......................................................................... 15
1.5. Proiectarea bazelor de date..................................................................................... 16
1.5.1. Principii ale proiectării bazelor de date ............................................................ 16
1.5.2. Normalizarea unei baze de date relaţionale ...................................................... 18
1.5.3. Integritatea bazelor de date .............................................................................. 22
1.6. Operarea în mediul ACCESS .................................................................................. 24
1.6.1. Deschiderea aplicaţiei. Crearea unei noi baze de date ....................................... 24
1.6.2. Moduri de vizualizare ..................................................................................... 26
1.6.3. Deschiderea, modificarea, salvarea şi închiderea unei baze de date existente ... 27
1.6.4. Folosirea funcţiei ajutor .................................................................................. 29
1.6.5. Închiderea aplicaţiei ........................................................................................ 31
CAPITOLUL II. CREAREA ȘI UTILIZAREA TABELELOR ............................................ 32
2.1. Crearea unei tabele ................................................................................................ 32
2.1.1. Proprietăţile câmpurilor................................................................................... 33
2.1.2. Definirea unei chei primare ............................................................................. 37
2.1.3. Stabilirea unui index ....................................................................................... 37
2.1.4. Modificarea proprietăţilor unui câmp ............................................................... 38
2.2. Editarea datelor într-o tabelă .................................................................................. 39
2.2.1. Introducerea de date în tabelă .......................................................................... 39
2.2.2. Vizualizarea informaţiilor dintr-o tabelă .......................................................... 40
2.2.3. Modificarea datelor într-o tabelă ..................................................................... 40
2.2.4. Adăugarea de înregistrări într-o tabelă ............................................................. 41
2.2.5. Ştergerea de date într-o tabelă ......................................................................... 41
2.3. Crearea relaţiilor între tabele ................................................................................. 43
CAPITOLUL III. UTILIZAREA INFORMAŢIILOR DINTR-O BAZĂ DE DATE .............. 45
3.1. Conectarea la o bază de date existentă .................................................................... 45
3.2. Căutarea datelor cu ajutorul instrumentelor mediului Access .................................. 45
3.3. Crearea unei interogări simple ............................................................................... 46
3.4. Crearea interogărilor peste mai multe tabele ........................................................... 51
3.5. Selecţia şi sortarea datelor ..................................................................................... 56
3.6. Salvarea unei interogări ......................................................................................... 57
3.7. Adăugarea şi eliminarea filtrelor ............................................................................ 57
3
3.8. Limbaj Structurat de Interogare SQL (Structured Query Language) ......................... 59
3.8.1. Limbajul SQL ................................................................................................. 59
3.8.2. Comenzi destinate tabelelor ............................................................................. 62
3.8.3. Instrucţiunile de selecţie a datelor ................................................................... 63
3.8.4. Instrucţiunile pentru manipularea datelor ......................................................... 74
CAPITOLUL IV. CREAREA ŞI UTILIZAREA FORMULARELOR .................................. 77
4.1. Noţiuni generale ................................................................................................... 77
4.2. Controale ............................................................................................................... 80
4.3. Proiectarea unui formular legat de o sursă de înregistrări ........................................ 82
4.3.1. Proprietăţile esenţiale ......................................................................................... 82
4.3.2. Obiectele simple ............................................................................................. 84
4.3.3. Culorile obiectelor .......................................................................................... 85
4.3.4. Aranjarea obiectelor ........................................................................................ 86
4.3.5. Alte facilităţi .................................................................................................. 87
CAPITOLUL V. CREAREA ŞI UTILIZAREA RAPOARTELOR ...................................... 91
5.1. Crearea unui raport ................................................................................................ 91
5.2. Particularizarea antetului şi subsolului .................................................................. 94
5.3. Gruparea datelor într-un raport. Realizarea de totaluri şi subtotaluri ....................... 97
CAPITOLUL VI. LIMBAJUL VISUAL BASIC .............................................................. 103
6.1 Editarea modulelor Visual Basic for Application ................................................... 103
6.2 Elemente de sintaxă .............................................................................................. 105
6.3 Casete de dialog predefinite .................................................................................. 106
6.4 Variabilele în VBA ............................................................................................... 109
6.4.1. Declararea variabilelor .................................................................................. 109
6.4.2. Tipurile variabilelor în VBA ......................................................................... 111
6.4.3. Iniţializarea variabilelor ................................................................................ 113
6.5. Tablouri .............................................................................................................. 113
6.6 Funcţii şi proceduri definite de utilizator ............................................................... 114
6.7 Structura alternativă ............................................................................................. 119
6.8 Structura repetitivă ............................................................................................... 120
6.8.1. Structura repetitivă cu numărător ................................................................... 120
6.8.2. Structurile repetitive de tip Do … Loop ......................................................... 122
6.8.3. Structura repetitivă „pentru fiecare‖ .............................................................. 124
6.9 Programarea recursivă .......................................................................................... 125
6.10 Obiecte ACCESS 2000 ........................................................................................ 126
6.11 Programarea dirijată de evenimente în ACCESS 2000 .......................................... 128
6.12 Accesul cu programele la obiectele bazei de date ................................................. 131
CAPITOLUL VII. ÎNDRUMAR PENTRU REALIZAREA PROIECT ULUI LA DISCIPLINA
„BAZE DE DATE‖ ........................................................................................................ 140
7.1. Cerinţe minimale ................................................................................................. 140
7.2. Baza de date ........................................................................................................ 141
7.3. Documentaţia ...................................................................................................... 144
4
BIBLIOGRAFIE ............................................................................................................ 149
5
CAPITOLUL I. DELIMITĂRI CONCEPTUALE ALE
BAZELOR DE DATE
Gestiunea colecţii1or de date este una din cele mai importante probleme care
se rezolvă astăzi cu ajutorul calculatoarelor existente, de la cele mai simple PC-uri
(Personal Computers), până la calculatoarele foarte puternice. Aceste colecţii de date
pot fi memorate în diferite fişiere, care sunt apoi gestionate cu ajutorul limbajelor de
programare, sau în baze de date, care sunt gestionate de Sistemele de Gestiune a
Bazelor de date (SGBD).
Lucrul cu voume tot mai mari de date i-a făcut pe oameni să sporească din ce
în ce mai mult numărul calculatoarelor şi să le îmbunătăţească caracteristicile p e zi
ce trece, pentru a-şi uşura astfel munca.
Înregistări Câmpuri
RECORDS).
6
Un tabel este de fapt o colecţie a tuturor entităţilor de date dintr -un singur tip
de date (tip de entităţi sau clasă de date).
Înregistrările dintr-un tabel formează cardinalul, în vreme ce câmpurile
definesc structura tabelului, numărul de câmpuri, tipul lor şi dimensiunea lor.
O bază de date are o structură care poate fi reprezentată sub forma unei
colecţii de descrieri statice ale diferitelor tipurilor de entităţi, dar si a relaţiilor logice
dintre acestea. Aceste relaţii logice reprezintă de fapt, asociaţiile dintre mai multe
entităţi.
Astfel, o entitate poate fi definită ca o reprezentarea unică a unui obiect real.
Aceasta corespunde unei înregistrări şi este reprezentată prin luarea de valori pentru
diferite atribute ale sale.
Pentru a diferenţia două entităţi este necesar ca măcar un atribut să aibă valori
diferite.
Atributul este o proprietate importantă a unui obiect din lumea reală, fiind
necesar pentru a distinge entităţile între ele. Atributul mai poate fi definit ca fiind o
celulă sau o căsuţă dintr-un tabel.
La fel ca şi câmpurile, atributele pot fi de tip logic, numeric, dată
calendaristică, şir de caractere sau memo.
Domeniul de valori al atributului poate fi precizat la creearea bazei de date,
când se vor specifica şi intervalele de valori pentru fiecare câmp.
Pentru identificarea univocă a unei entităţi este necesară crearea unui atribut
sau a unei combinaţii de atribute care poartă denumirea de identificator sau cheie. În
ACCESS identificatorii sunt câmpuri cheie principale, aceştia fiind folosiţi pentru
crearea indexului principal al entităţii.
7
Bazele de date relaţionale sunt de fapt nişte tabele cu relaţii între ele. Aceste
baze de date relaţionale au redundanţă minimă şi controlată. Primul care a introdus
noţiunea de bază de date relaţională a fost E. F. Codd 1, în anul 1970.
Un exemplu de bază de date relaţională ar putea fi prezentat cu ajutorul celor
două tabele, a căror structură este redată mai jos:
Faptul că următoarele coloane: marcă, nume şi salar nominal , apar de două ori,
înseamnă că aceste coloane sunt redundante.
Pentru a putea stabili relaţii între tabele, câmpul care conţine marca trebuie să
fie inclus în ambele tabele. Nu este nevoie să fie denumit identic în ambele tabele, în
schimb trebuie să aibă acelaşi conţinut. Relaţiile între tabele pot fi stabilite şi pe
combinaţii de câmpuri (unele SGBD-uri permiţând şi descrierea de astfel de
combinaţii prin expresii aritmetice).
Astfel, se pot stabili mai multe tipuri de relaţii între tabele, după cum
urmează:
► Relaţii de unu-la-unu;
► Relaţii de unu-la-mai mulţi;
► Relaţii de mulţi-la-unu;
► Relaţii de mulţi-la-mulţi.
1
Edgar Frank Codd (23 august 1923, Insula Portland, Anglia – 18 aprilie 2003, Williams Island,
Florida, SUA) a fost un informatician american de origine engleză care, lucrând pentru IBM, a
inventat modelul relaţional pentru gestiunea bazelor de date, model care constituie baza teoretică a
bazelor de date relaţionale. (conform wikipedia.com)
8
1.2. Sisteme de gestiune a bazelor de date
1.2.1. Noţiuni generale privind sistemele de gestiune a bazelor de
date
Aplicaţiile care exploatează aceste date sunt cunoscute sub denumirea de
sisteme de gestiune a bazelor de date sau S.G.B.D.. Câteva astfel de sisteme de
gestiune a bazelor de date ar fi:
► ORACLE. Compania americană cu acest nume, a oferit, încă de la
începutul anilor ’80, cele mai robuste, rapide şi eficiente variante de
sisteme de gestiune a bazelor de date, pentru calculato are de toate
tipurile (mari, mini, micro), de tip client-server, pentru reţelele locale
sau pe Internet. Preţul ridicat, datorat standardelor de calitate ale
produselor şi serviciilor, fac ca în ţara noastră, recurgerea la soluţiile
Oracle să se facă doar pentru proiectele de sisteme informatice mari;
► FoxPro. Cu această denumire Compania Microsoft a promovat un
model de organizare a datelor, numit dBASE, existent din anul 1990.
Acest program este foarte popular în ţara noastră, deoarece crearea şi
evoluţia lui este sincronă fenomenului exploziv din anii 1990, prin care
firmele şi-au dezvoltat proiecte proprii de informatizare.
► SQL Server. Cu acest nume, compania Microsoft promovează sistemele
de gestiunea a bazelor de date, de tip client-server, pentru problemele
care depăşesc capacităţile ACCESS sau FoxPro;
9
► MySQL. Este un sistem de gestiune a bazelor de date foarte răspândit
datorită faptului că este gratuit (de tip Open Source);
► Aplicaţia Microsoft ACCESS, care este un sistem de gestiune a bazelor
de date relativ nou, aceasă aplicaţie făcând parte din suita de programe
de birou Microsoft Office.
Toate fişierele sunt în ultimă instanţă un lung şir de biţi, ceea ce face până la
urmă diferenţa între ele, redarea sunetelor din fişierele tip .wav sau a imaginilor din
fişierele .bmp sau .jpg, sunt programele dedicate acestor meniri.
Astfel, şi un sistem de gestiune a bazelor de date are menirea de a conferi unor
fişiere forma de tabele pentru ca informaţiile conţinute să fie accesibile utilizatori lor,
care să poată efectua cele patru operaţii (adăugare, regăsire, şt ergere, modificare).
Prin similitudine se poate spune că rolul unui sistem de gestiune a bazelor de date
pentru o bază de date este asemănător rolului unui Sistem de Operare pentru un
calculator.
Principalul scop al unui sistem de gestiune a bazelor de dat e este acela de a
pune la dispoziţia utilizatorilor mijloacele necesare pentru crearea bazelor de date,
dar şi pentru crearea unor programe care să folosească aceste date.
10
date luate din tabelele (dicţionarele), unde se află descrise structurile virtuale ale
bazei de date, precum şi structura logică la care va avea acces.
3. Administrarea bazei de date. O sarcină importantă a gestiunii bazei de date
se referă la supravegherea datelor din baza de date şi supervizarea programelor de
acces la aceste date. Persoana (sau grupul de persoane) care are aceste sarcini, este
numită administratorul bazei de date, iar atribuţiile îndeplinite se constituie în funcţia
de administrare a bazei de date. Un SGBD trebuie să includă mijloace le prin care un
administrator de baze de date să îşi poată îndeplini sarcinile (funcţiile) de bază, cum
ar fi:
a). Organizarea bazei de date prin stabilirea structurii şi încărcarea ei cu date
iniţiale;
b). Urmărirea funcţionării bazei de date prin:
► Păstrarea în baza de date a datelor corecte şi la zi;
► Asigurarea integrităţii şi confidenţialităţii datelor;
► Urmărirea performanţelor bazei de date, cu ajutorul unor programe
utilitare;
► Punerea la dispoziţia utilizatorilor a unor programe sau proceduri;
► Informarea continuă cu privire la observaţiile utilizatorilor bazei de
date.
c). Reorganizarea bazei de date prin actualizări ale structurilor sau ale
programelor de acces.
4. Protecţia informaţiilor din baza de date este o problemă la ordinea zilei
datorită generalizării bazelor de date cu acces partajat al mai multor utilizatori. Un
SGBD asigură protecţia datelor prin asigurarea:
► Confidenţia1ităţii, realizând protecţia împotriva accesului neautorizat
la date;
► Integrităţii, realizând protecţia împotriva alterării conţinutului bazei de
date, datorită unor erori de programare, defecte de echipament,
distrugeri rău intenţionate, etc.
De-a lungul timpului au fost concepute mai multe tipuri de sisteme de gestiune
a bazelor de date care s-au pretat diferitelor momente de evoluţie fizică a tehnicii de
calcul. În momentul de faţă sunt folosite tot mai des sistemele de gestiune a bazelor
de date relaţionale şi, mai nou, încearcă să se impună pe piaţă şi sistemele de
gestiune a bazelor de date distribuite. Acelaşi E. F. Codd a detaliat, în anul 1985,
caracteristicile care trebuie să fie îndeplinite de un sistem de gestiune a bazelor de
11
date pentru ca acesta să fie considerat relaţional, sub forma a 13 reguli. Aceste reguli
pot fi sintetizate astfel:
12
Regula 10. Independenţa integrităţii datelor, sau altfel spus restricţiile de
integritate trebuie să poată fi definite într-un limbaj şi să poată fi stocate într-un
catalog. În ACCESS se pot crea reguli de integritate cu ajutorul limbajului SQL.
Regula 11. Independenţa distribuţiei. Potrivit acestei reguli, capacităţile
sistemelor de gestiune a bazelor de date nu au voie să fie limitate datorită distribuţiei
unor componente ale acestora în baze de date separate.
Regula 12. Inexistenţa subminărilor, însemnând că dacă un sistem de gestiune
a bazelor de date relaţional are un limbaj de manipulare al unei singure înregist rări,
acest limbaj nu va putea fi folosit la ocolirea regulilor de integritate sau a
constrângerilor modelului relaţional. În ACCESS acest lucru înseamnă că nu se pot
încălca regulile de integritate.
Unul dintre cele mai actuale sisteme de gestiune a bazelor de date este
aplicaţia Microsoft ACCESS, prima variantă a acestei aplicaţii fiind lansată pe piaţă
de compania Microsoft în anul 1992, în cadrul suitei de programe de birou Microsof
Office. Din cadrul programelor Microsoft Office mai fac parte şi aplicaţiile :
Microsoft Word, Microsoft Excel sau Microsoft PowerPoint.
Principalele caracteristici ale sistemului de gestiune a bazelor de date
ACCESS sunt:
► Este componenta dedicată bazelor de date relaţionale din Microsoft Office;
► Este deschis comunicării cu alte sisteme de gestiune a bazelor de date cum
ar fi FoxPro, Paradox sau SQL Server (şi MSDE), un alt SGDBR creat de
Microsoft, obiectele ACCESS putând fi folosite în aceste SGBD-uri dar şi
în alte aplicaţii windows, sau invers, obiecte din aceste SGBD -uri pot fi
folosite în ACCESS;
13
► Beneficiază de tehnologii avansate, deoarece este creat de firma Microsoft.
Aceste tehnologii sunt:
Tehnologia ActiveX, care permite realizarea aplicaţiilor
client/server;
Permite accesul la baze de date din reţeaua Internet, fiind un
instrument util pentru publicarea informaţiilor în paginile Web;
Este autodocumentat prin ajutor (help), scris în HTML compilat,
ajutorul fiind apelabil contextual sau la cerere;
Permite crearea foarte simplă a obiectelor bazei de date cu
instrumentele expert (wizard);
Bazele de date pot fi personalizate.
► Permite protecţia accesului la obiecte prin administrarea de drepturi de
acces pentru utilizatorii ordonaţi în grupuri;
► Permite crearea de grupuri de obiecte definite de utilizator în cadrul bazei
de date;
► Limbajul propriu al SGBD-ului relaţional ACCESS este Visual Basic;
► E foarte răspândit, utilizarea lui este intuitivă şi este relativ uşor de învăţat .
Pune la dispoziţia utilizatorilor un mediu prietenos pentru crearea,
proiectarea, testarea şi administrare obiectelor bazelor de date proprii.
Aceste caracteristici, ne-au determinat să alegem pentru exemplificarea
noţiunilor despre baze de date aplicaţiile realizate cu ajutorul mediului ACCESS, în
capitolele următoare.
Pe de altă parte este adevărat că SGBD Access nu poate concura cu Oracle,
Informix, Microsoft SQL Server ca viteză sau concurenţă partajată de lucru. Din
acest motiv pentru proiectele mari trebuiesc alese aceste sisteme de gestiune a
bazelor de date, dar pentru proiectele mai mici avantajele de mai sus constituie
argumente serioase pentru alegerea aplicaţiei ACCESS.
Tabelele sunt obiecte definite de utilizator, în care sunt stocate datele primare.
15
Rapoartele sunt obiecte ale bazelor de date prin care sunt vizualizate sau
tipărite informaţii cu conţinut şi structură accesibilă şi conforme cerinţelor
utilizatorilor.
Interogările sunt obiecte care permit vizualizarea informaţiilor obţinute p rin
prelucrarea datelor din una sau mai multe tabele, şi/sau a altor cereri de interogare.
Paginile Web de accesare a datelor reprezintă obiecte care includ fişiere
HTML şi alte fişiere suport, în vederea furnizării accesului la date prin intermediul
browser-elor de Internet.
Comenzile Macro reprezintă obiecte care conţin o definiţie structurată a uneia
sau mai multor acţiuni pe care ACCESS-ul le realizează ca răspuns la un anumit
eveniment.
Modulele reprezintă obiecte care conţin proceduri definite de utilizator şi sunt
scrise în limbajul de programare Visual Basic for Applications (V.B.A.).
16
► De ce se doreşte realizarea bazei de date? (pentru a putea răspunde la
această întrebare se va porni mereu de la rapoartele care ar trebui listate);
► Ce resurse avem la dispoziţie? (cele mai importante resurse fiind în acest
caz calculatoarele, oamenii, informaţiile etc);
► Ce anume va fi de făcut?
Abia apoi se va trece la proiectarea tabelelor, ceea ce presupune def inirea
câmpurilor, a conţinutului lor şi a dimensiunilor acestora, dar şi determinarea
relaţiilor dintre acestea.
În demersul realizării unei baze de date, există trei niveluri de percepţie a
acesteia:
► nivelul extern, este nivelul în care sunt percepute bazele de date de
utilizatori. Ei îşi exprimă cerinţele informaţionale prin aşa -numitele
scheme externe. Pot exista o mulţime de sub-scheme, fiecare sub-schemă
corespunzând viziunilor unui utilizator al bazei de date;
► nivelul conceptual, este nivelul aferent administratorului bazei de date, în
viziunea căruia baza de date este o abstractizare a unei p ărţi din lumea
reală. Această viziune se concretizează într-o schemă conceptuală;
► nivelul intern, corespunzător programatorului, care realizează modul de
reprezentare a datelor pe suportul fizic.
Determinarea structurii unei baze de date se poate aborda ascendent,
realizându-se descrierea schemelor externe, urmată de elaborarea schemei
conceptuale, sau descendent, definind mai întâi schema conceptuală şi deduc ând
ulterior schemele externe posibil de obţinut. În acest scop îşi vor da concursul un
grup mai larg de persoane a căror activitate va fi influenţată de modificarea acestei
zone a sistemului informatic al instituţiei.
În momentul proiectării unei baze de date se vor urmării în primul rând
entităţile, atributele şi relaţiile, indecşii, machetele de introducere sau d e ieşire,
procedurile de calcul, precum şi schemele logice sau interogările, şi abia apoi se va
trece la încercarea de închegare a tabelelor, la normalizarea lor şi stabilirea relaţiilor
dintre ele.
Datele vor fi memorate în tabele şi fiecare tabel va conţine date doar despre un
singur subiect (ex: elevi, discipline, etc). Redundanţa, adică apariţia unei informaţii
de două ori în baza de date, trebuie să fie minimă şi controlată.
Proiectarea formularelor, a rapoartelor, a macrocomenzilor şi a modulelor ,
este influenţată în primul rând de calitatea structurii datelor. Însă trebuie să se ţină
cont de faptul că, de cele mai multe ori, aceste forme de reprezentare externă a
datelor se bazează pe interogări, nu direct pe tabele.
O bază de date bine proiectată conţine, de obicei, diferite tipuri de interogări
care prezintă informaţiile necesare.
17
În ajutorul aplicaţiei Microsoft Access (Help) sunt prezentaţi paşii care trebuie
parcurşi pentru proiectarea unei baze de date. Aceştia sunt:
► Stabilirea scopului bazei de date, a utilizatorilor, a cerinţelor lor .
Pornind de la listele necesare (rapoarte), se schiţează formulare le de
introducere a datelor. Se deduc apoi faptele ce trebuie memorate în baza de date şi
cărui subiect îi va aparţine fiecare. Aceste fapte corespund câmpurilor (coloanelor)
din baza de date, iar subiectele cărora le aparţin corespund tabelelor.
► Stabilirea câmpurilor necesare în baza de date.
Fiecare câmp este un fapt despre un anumit subiect. Nu trebuie să rămână
vreun fapt fără un câmp corespondent, iar câmpurile trebuie să fie detaliate în cele
mai mici părţi logice. De exemplu, o adresă trebuie să fie descompusă în stradă,
număr, bloc, scară, etaj, apartament. De asemenea în câmpuri nu se înscriu liste sau
valori calculate.
► Stabilirea tabelelor necesare în baza de date. Fiecare tabel trebuie să
conţină informaţii despre un subiect.
► Stabilirea apartenenţei fiecărui câmp la tabelul corespunzător.
► Identificare câmpurilor cu valori unice în fiecare înregistrare .
► Stabilirea relaţiilor dintre tabele.
► Îmbunătăţirea proiectului.
► Introducerea datelor şi crearea altor obiecte ale bazei de date .
► Utilizarea instrumentelor de analiză ale Microsoft ACCESS.
18
E. F. Codd a demonstrat că într-o anumită formă relaţiile posedă proprietăţi
nedorite, pe care le-a numit anomalii de actualizare. Aceste anomalii sunt:
► Anomalia de ştergere, care constă în faptul că anumite date care urmează
să fie şterse fac parte din tupluri în care se găsesc şi alte date care sunt
necesare şi în continuare, ori ştergerea făcându-se la nivelul tuplului,
acestea se pierd;
► Anomalia de adăugare, constă în faptul că anumite date care urmează să
fie adăugate fac parte din tupluri incomplete (pentru care nu se cunosc
toate datele), ceea ce face ca acestea să nu poată fi adăugate;
► Anomalia de modificare, care rezultă din faptul că este dificil de modificat
o valoare a unui atribut atunci când ea apare în mai multe tupluri ale
relaţiei.
Pentru a înlătura aceste anomalii, E. F. Codd a stabilit trei forme normale
pentru relaţii şi a introdus procesul de normalizare care se bazează pe noţiunea de
dependenţă funcţională (FD) ca relaţie între atributele unei entităţi cu caracter
invariant.
Procesul de normalizare a relaţiilor se realizează în mai mulţi paşi, începând
cu forma normală unu (1NF) şi ajungând (după ultimele cercet ări) la forma normală
cinci (5NF). Aceasta constă în descompunerea unei relaţii în conformitate cu
mulţimea dependenţelor funcţionale F, într-o colecţie de relaţii care să conserve
informaţiile şi dependenţele funcţionale din relaţia iniţială (descompunerea fără
pierderi).
O bază de date este în forma normală 1 dacă şi numai dacă toate câmpurile din
tabelele ei nu sunt repetate şi conţin numai valori atomice.
O bază de date este în forma normală 2 dacă şi numai dacă a trecut de forma
normală 1 şi în tabelele ei orice câmp non-cheie este complet dependent funcţional de
cheia primară.
O bază de date este în forma normală 3 dacă şi numai dacă a trecut de forma
normală 2 şi în tabelele ei fiecare câmp non-cheie este dependent numai de cheia
primară.
Fie următorul set de date, referitoare la vânzări:
Dencli Adrcli Telcli Nrfact Datafact Delegat DenProd UM Cant Pret Discount
SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu Zahar kg 15 3,1
SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu Ulei Fl 20 3,27
SC Secundul SRL Str.Verii nr 2 0261222222 2 22.10.2009 Dragoș Lapte l 30 2,9 5
SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir Zahar kg 25 3,1
SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir Ulei Fl 11 3,27
SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir Lapte l 20 2,9 5
SC Secundul SRL Str.Verii nr 2 0261222222 6 25.10.2009 Popescu Lapte l 15 2,9 5
SC First SRL Str Primaverii nr 1 0261111111 3 22.10.2009 Anton Lapte l 18 2,9
SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton Ulei Fl 12 3,27
SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton Lapte l 15 2,9
19
1. Prima formă normală, spune că toate coloanele unui tabel trebuie să
conţină valori atomice (indivizibile). Aşadar, nu trebuie să existe câmpuri ce conţin
liste de valori sau grupuri de date.
Tabelul respectă condiţiile cerute pentru această formă. Câmpul Adrcli ar
putea fi considerat un câmp complex şi divizat în stradă şi număr, dar deoarece
valorile incluse sunt manipulate, de obicei, în mod agregat, foarte mul ţi practicieni
stochează în acest mod informaţiile despre adrese.
2. A doua formă normală, conform căreia un tabel este în această formă dacă
a trecut de prima formă normală şi dacă toate câmpurile care nu sunt chei sunt
dependente de cheia primară.
Pentru transformarea în 1NF a tabelelor se încearcă găsirea unui identificator
(cheie primară) şi câmpurile care sunt dependente de identificator. S-a găsit Dencli
de care sunt dependente câmpurile Adrcli, Telcli. Pentru legătură introducem câmpul
Cocli. Acestea alcătuiesc un tabel pe care îl putem numi Clienţi. În mod similar se
procedează şi cu grupul de câmpuri DenProd, UM, Pret, pentru care s-a introdus
Codprod şi le vom grupa în tabelul Produse. Restul câmpurilor, la care adăugăm şi
cele două coduri pentru relaţii, constituie împreună un tabel pe care îl putem numi
Facturi, în care cheia o constituie combinaţia de câmpuri: Nrfact, Datafact şi
Codprod.
Codcli # Dencli Adrcli Telcli Nrfact Datafact Delegat CodProd CodCli Cant Discount
111111 SC First SRL Str Primaverii nr 1 0261111111 1 21.10.2009 Popescu 1075 222222 15
222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1009 222222 20
333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 2 22.10.2009 Dragos 7023 222222 30 5
5 24.10.2009 Trandafir 1075 333333 25
5 24.10.2009 Trandafir 1009 333333 11
5 24.10.2009 Trandafir 7023 333333 20 5
Codprod # DenProd UM Pret 6 25.10.2009 Popescu 7023 222222 15 5
1075 Zahar Kg 3,1 3 22.10.2009 Anton 7023 111111 18
1009 Ulei Fl 3,27 4 23.10.2009 Anton 1009 111111 12
7023 Lapte L 2,9 4 23.10.2009 Anton 7023 111111 15
Produse
Codprod # DenProd UM Pret
1075 Zahar Kg 3,1
1009 Ulei Fl 3,27
7023 Lapte L 2,9
FactGen
Nrfact# Datafact# Delegat CodCli
1 21.10.2009 Popescu 222222
2 22.10.2009 Popescu 222222
5 24.10.2009 Trandafir 333333
În cel de-al patrulea tabel, observăm că există câmpul Discount, care este
dependent în mod tranzitiv de cheia primară. Drept urmare, din acest tabel, vor fi
create două tabele care vor fi în 3NF.
FactProd
Nrfact# Datafact# CodProd# Cant
1 21.10.2009 1075 15
1 21.10.2009 1009 20
2 22.10.2009 7023 30
5 24.10.2009 1075 25
5 24.10.2009 1009 11
5 24.10.2009 7023 20
6 25.10.2009 7023 15
3 22.10.2009 7023 18
4 23.10.2009 1009 12
4 23.10.2009 7023 15
21
Discount
Codprod # CodCli# Discount
7023 333333 5
7023 222222 5
22
Relaţiile dintre tabele se realizează prin referinţe 2, stabilite între înregistrările
tabelelor şi cheile tabelelor. Viabilitatea acestor referinţe poate fi înfăptuită prin
integritatea referenţială, a cărei scop este de a împiedica apariţia înregist rărilor
solitare şi de a păstra sincronizate referinţele, astfel încât să nu apară înregistrări care
se referă la alte înregistrări care nu mai există. În ACCESS, integritatea referenţială
poate fi impusă atunci când se definesc relaţiile dintre tabele, pr in precizarea
actualizărilor şi ştergerilor în cascadă a câmpurilor corelate, precum este redat în
figura anterioară.
După activarea acestei impuneri pentru o relaţie dintre două tabele, ACCESS
nu va mai permite niciunei aplicaţii care utilizează baza de date încălcarea integrităţii
referenţiale pentru acea relaţie, adică nu sunt posibile actualizări care modifică ţinta
unei referinţe şi nici ştergeri care elimină ţinta unei referinţe. Mai mult chiar, orice
modificare a cheii primare se va propaga, în cascadă, şi în cheile străine, sau
ştergerea unui articol dintr-un tabelul de iniţiere a referinţei, va provoca ştergerea
tuturor articolelor din tabelul ţintă al referinţei, pentru care cheia străină are valoarea
pe care o are cheia primară a articolului şters. ACCESS permite chiar şi afişarea în
cascadă a relaţiilor dintre tabele, precum în figura de mai jos:
tabelul Clienţi, articolul care are valoarea pentru Codcli egală cu 222222, se va
2
de la verbul a referi
23
produce (bineînţeles după o atenţionare şi acceptul utilizatorului) ştergerea în
cascadă a celor 3 articole corelate din Factgen. Folosirea sintagmei în cascadă este
îndreptăţită în acest caz, deoarece cele 3 articole din tabelul Factgen, sunt corelate,
la rândul lor, cu articole din tabelul Factprod, după cheia compusă din câmpurile
Nrfact şi Datafact (4 articole: două corespunzătoare facturii 1, unul corespunzător
facturii 2 şi unul corespunzător facturii 6). Rezumând, în structura de cascadă di n
figură, ştergerea unui articol din tabelul Clienţi provoacă ştergerea a trei articole în
tabelul Factgen, provocând mai departe ştergerea a 4 articole în tabelul Factprod.
SGBD ACCESS face parte din pachetul de programe Microsoft Office, pachet
care este proiectat să ruleze
sub diverse versiuni ale
sistemului de operare
Windows. Desigur că într-un
sistem friendly user, orice se
poate face în câteva moduri,
pentru ca utilizatorul să poată
folosi metoda care i se pare cea
mai naturală.
O posibilitate de a lansa
SGBD-ul ACCESS este cea de
la butonul Start pe calea
programelor instalate:
Start>All programs>
Microsoft Office > Microsoft
Access.
La pornire, SGBD-ul
ACCESS afişează fesreastra
din figură (numită sugestiv Pagina Introducere în Microsoft Office Access), şi
utilizatorului îi sunt oferite mai multe posibilităţi.
Pentru crearea unei noi baze de date trebuie aleasă opţiunea: Bază de date
necompletată (Blank Access database) din partea a doua a panoului
24
După aceasta este afişată o fereastră cu titlul Fişier nou bază de date în care
utilizatorul are de stabilit:
► directorul în care va fi salvat fişierul;
► numele fişierului în care va fi stocată baza de date.
Creare
director nou Alegerea locului
Listă cu foldere şi de stocare
fişiere
Instrumente
Scrierea numelui Tipul fișierului
pentru fisiere
fişierului
26
formatărilor prevăzute într-un raport, datele legate de raportul curent.
În modul Vizualizare formular (Form view) sunt afişate, prin intermediul
formatărilor prevăzute într-un formular, datele legate de formularul curent, pentru a
putea fi modificate.
În modul Vizualizare aspect sunt afişate datele, prin intermediul formatărilor
prevăzute într-un formular sau raport şi se pot face unele modificări intuitive aspra
machetei obiectului prin care se expun datele.
Vizualizare SQL este un mod specific interogărilor. Utilizatorii bazelor de date
trebuie să înţeleagă că o interogare este în primul rând o comandă SQL (Structured
Query Language). Tabelele văzute în modul Foaie de date a interogărilor, conţin
datele rezultate în urma execuţiei comenzilor SQL. O interogare, vizualizată în
modul proiectare, mai este cunoscută şi sub numele de grilă QBE (acronim de la
sintagma din engleză Query by Example) şi vizualizează grafic comanda SQL.
Examinarea înaintea imprimării este o redare pe ecran a modului cum va fi
tipărit documentul (raport) pe hârtia de imprimantă.
Vizualizare PivotTable: e un mod de vizualizare care sintetizează şi analizează
datele dintr-o foaie de date sau dintr-un formular. Se utilizează diferite niveluri de
detaliere sau se organizează datele prin glisarea de câmpuri şi elemente, prin afişarea
sau ascunderea elementelor din listele verticale pentru câm puri.
Vizualizare PivotChart: este un mod de vizualizare care arată o analiză vizuală
a datelor dintr-o foaie de date sau dintr-un formular. Sunt vizibile diferite niveluri de
detaliere sau se indică aspectul prin glisarea de câmpuri şi elemente sau prin
expunerea şi ascunderea de elemente în listele verticale pentru câmpuri.
27
Dacă aplicaţia ACCESS este deja deschisă, se poate acţiona pe pictograma
din meniul ascuns legat de Butonul Office sau se alege opţiunea > Deschidere,
sau se apasă concomitent Ctrl + O. Şi în aceste trei ultime cazuri, se deschide
automat fereastra cu titlu Deschidere, cu a cărei elemente componente utilizatorul îşi
alege fişierul cu care doreşte să lucreze.
În fine, este posibil ca documentul care se doreşte a fi deschis să fi fost editat
recent şi să apară într-un istoric, conţinut în partea dreaptă a meniului ascuns legat
de Butonul Office , sau în prima parte a panoului de activitate Fişier nou, de unde
poate fi deschis.
Dar o bază de date ACCESS, concomitent cu aplicaţia Microsoft ACCESS, pot
fi deschise dintr-un File Manager, printr-un dublu clic pe orice document de tip bază
de date ACCESS cu extensia .mdb (versiuni anterioare anului 2007) sau .accdb
(versiuni ulterioare anului 2007), dacă aplicaţia ACCESS este instalată pe calculator.
Asupra unei baze de date deschise se pot face modificări ale obiectelor
încapsulate: se pot crea noi tabele, se pot modifica structurile sau conţinutul datelor,
se pot crea noi interogări, formulare, rapoarte, pagini Web, sau se pot face modificări
asupra celor existente.
ACCESS are opţiuni de salvare a principalelor tipuri de obiecte compuse care
apar în fereastra Bază de date. Salvarea se referă la obiectul curent, atunci când el
este vizualizat în modul proiectare (pentru interogări şi când sunt vizualizate în
modul SQL). În restul modurilor de vizualizare, pentru toate obiectele, salvarea, dacă
are sens, se referă la datele pentru care obiectul este interfaţă. Pentru obiectele
curente, se pot face salvări sub alt format: html, xml, pdf, xls, doc etc.
Pentru prima salvare a unor obiecte nou create, se foloseşte una dintre
comenzile: >Salvare ca… sau > Salvare. Se ajunge la o fereastră de salvare
unde se precizează numele sub care va fi salvat obiectul. Dacă se apelează comanda
>Salvare ca… mai este afişată şi o casetă de editare text combinată cu o listă
ascunsă din care se poate alege tipul obiectului, pe când, dacă se apelează la coma nda
> Salvare, această casetă combinată nu mai apare. Această salvare se poate face
şi cu combinaţia de taste Ctrl + S sau apăsând butonul al treilea din bara de
instrumente Standard cu pictograma:.
Dacă există deja o versiune a obiectului, salvată în baza de date, cu comanda
Salvare, versiunea veche se suprascrie. Dar, se poate salva noua versiune, cu un nou
nume sau ca alt tip de obiect bazat pe obiectul iniţial prin comanda > Salvare ca….
În modurile de vizualizare interactive, valorile stabilite pentru controalele
diferitelor obiecte se salvează automat după părăsirea controalelor, de aceea când
iese dintr-un obiect, dacă nu s-au făcut modificări în modul proiectare, utilizatorul nu
mai este atenţionat să facă salvare. Dacă utilizatorul a efectuat modificări asupra unu i
28
obiect în modul proiectare, chiar dacă trece într-un mod interactiv, utilizatorul este
atenţionat când părăseşte obiectul să-şi salveze modificările efectuate în modul
proiectare.
Pentru închiderea unei baze de date se alege opţiunea >Închidere.
Noutăţi Pornirea
29
Get help? este o facilitate a Microsoft Office de a explica elementele de
interfaţă din aplicaţiile sale. Alegând butonul care e plasat în colţul din dreapta
sus, se deschide o fereastră cu explicaţii dependente de context.
Ajutor pentru Microsoft ACCESS este funcţiunea care poate fi lansată şi
apăsând tasta F1 sau cu clic pe butonul . Se afişează o fereastră de ajutor
asemănătoare celei de mai jos cu posibilitatea de a vedea o listă complexă a
termenilor de ajutor. În partea de sus sunt câteva butoane folosite pentru răsfoirea
convenabilă a acestor pagini de ajutor.
În partea de jos sunt două cadrane de pagini. Prima are ca titlu Contents
(contents înseamnă cuprins), şi conţine lista de teme a documentaţie i numită Ajutor
Microsoft Access şi este structurată arborescent. Temele explicate pot fi simple sau
30
Temele care sunt compuse din alte subteme, pot avea la începutul rândului
unul dintre semnele sau . Dacă au semnul , atunci înseamnă că apar în lista
din stânga fără detalierea subtemelor incluse. Aceste teme incluse, pentru fiecare
temă complexă, pot fi afişate printr-un clic pe semnul de la începutul rândului.
Când tema apare într-o listă, expandată cu subtemele incluse, are la începutul
rândului semnul .
Deasupra cadranului din stânga are ca titlu Căutare (în limba engleză Search)
un instruent folosit pentru căutarea unor termeni în manualul aplicaţiei.
După căutare, sunt afişate subiectele unde apar termenii căutaţi, iar efectuarea
unui clic pe un subiect are ca rezultat afişarea acestuia în partea dreaptă a ferestrei de
ajutor.
31
CAPITOLUL II. CREAREA ȘI UTILIZAREA TABELELOR
32
Modul cel mai elegant, cel mai utilizat şi convenabil de creare şi apoi de
modificare a structurilor tabelelor rămâne utilizarea ferestrei de proiectare, precum în
figura de mai jos, în care este vizibilă automat ultima filă cu instrumente de
prelucrare a tabelelor, fila Proiectare.
3
vezi Specificaţii pentru baze de date, http://office.microsoft.com/ro -
ro/access/HA100307391048.aspx?pid=CH100621861048
33
Microsoft ACCESS identifică un câmp prin numele său de câmp. După
specificarea numelui de câmp, în Vizualizare proiect pentru tabel, numele poate fi
utilizat în expresii, proceduri Visual Basic şi instrucţiuni SQL. Setarea acestei
proprietăţi se efectuează în partea de sus a ferestrei deschise prin apelarea
instrumentului Proiectare tabel din fila Creare, sau prin redenumirea unei coloane în
fereastra deschisă prin apelarea instrumentului Tabel din fila Creare, sau utilizând un
limbaj de programare (de obicei limbajul Visual Basic).
► Ca tipuri sau subtipuri de date se pot folosi: text, memo, număr, dată/oră,
monedă, autonumerotare, da/nu, obiect OLE, etc.
Proprietatea Tip de date se utilizează pentru a preciza tipul de date stocat în
câmpul unui tabel. Fiecare câmp stochează date constând dintr-un singur tip de date.
Proprietatea Tip de date utilizează următoarele setări:
Setare Tip de date Dimensiune
Text (Implicit) Text sau combinaţie de text şi Până la 255 de caractere sau o lungime
numere, precum şi numere care nu mai mică setată prin proprietatea
necesită calcule, cum ar fi numerele de Dimensiune câmp. Microsoft ACCESS
telefon. nu rezervă spaţiu pentru porţiuni
neutilizate din câmpul text.
Memo Text lung sau combinaţii de text şi Până la 65.535 de caractere.
numere. Noile versiuni ale ACCESS-ului
înregistrează istoricul revizuirilor.
Număr Date numerice utilizate în calcule 1, 2, 4 sau 8 octeţi (16 octeţi dacă
matematice. proprietatea Dimensiune câmp este setată
la ID reproducere).
Dată/Oră Valori de date calendaristice şi ore pentru 8 octeţi.
anii cuprinşi între 100 şi 9999. Noile
versiuni ale ACCESS-ului oferă
asistenţă pentru alegerea datei într-un
calendar interactiv încorporat.
Monedă Valori monetare şi date numerice 8 octeţi.
utilizate în calcule matematice care
implică date având între unul şi patru
poziţii zecimale. Cu precizie de 15 cifre
în stânga separatorului zecimal şi de 4
cifre în dreapta lui.
AutoNu- Un număr secvenţial unic (incrementat 4 octeţi (16 octeţi dacă proprietatea
merotare cu 1). Dimensiune câmp este setată la ID
reproducere).
Da/Nu Valori şi câmpuri Da şi Nu care conţin 1 bit.
numai una din cele două valori (Da/Nu,
Adevărat/Fals sau Activat/Dezactivat).
Obiect Un obiect (cum ar fi o foaie de date Până la 1 gigaoctet (limitat la spaţiul-disc
OLE Microsoft Excel, un document Microsoft disponibil).
Word, grafică, sunete sau alte date
binare) legate sau încorporate într-un
tabel Microsoft ACCESS.
34
Hyperlink Text sau combinaţie de text şi numere Fiecare din aceste trei părţi ale tipului de
stocate ca text şi utilizate ca adresă date Hyperlink conţine până la 2048 de
hyperlink. caractere.
Atach Permite stocarea de diferite tipuri de Limitat la spaţiul de disc disponibil.
documente şi fişierele binare în baza de
date fără a creşte inutil dimensiunea
bazei de date. Microsoft Access 2007
comprimă automat ataşările, când este
posibil, pentru a minimiza utilizarea
spaţiului.
2.1.4. Modificarea
proprietăţilor unui câmp
Poziţionarea în cadrul tabelului se poate face cu mouse -ul sau cu tastele pentru
deplasare în cadrul foii (Tastele cu săgeţi, Insert, Home, PageUp, PageDown). În
plus, trecerea la câmpul următor se face cu tasta TAB sau apăsând ENTER după ce s-
au introdus date în celulă. Trecerea la câmpul anterior se face cu ajutorul combinaţiei
de taste Shift + TAB.
39
Articolul pe care este poziţionat cursorul este evidenţiat prin accent de
culoare. La editare se ţine cont de proprietăţile câmpurilor stabilite în modul
proiectare, nepermiţându-se violarea regulilor de integritate.
În tabelă se pot introduce date din alte zone ale tabel ului, din alte tabele sau
chiar alte aplicaţii (Word, Excel) prin intermediul ferestrei Clipboard, prin operaţiile
Decupare sau Copiere, cuplate cu operaţia Lipire.
Ca o particularitate generată de lucrul cu înregistrările, în A CCESS este
aproape omniprezent grupul de butoane de navigare cu semnificaţie similară
butoanelor de pe aparatele audio sau video.
40
Datele modificate dintr-o celulă sunt salvate imediat după părăsirea ei.
Revocarea modificărilor făcute în celula curentă se face apăsând ESC.
Pentru a revoca modificările din întreaga înregistrare, se face clic pe Anulare
din bara de instrumente de navigare în înregistrări sau opţiunea cu acelaşi nume din
meniul Editare. Această anulare nu mai este posibilă dacă se mai fac alte modificări
într-o altă înregistrare.
În modul Foaie de date, de obicei, este afişat în plus un articol gol evidenţiat
cu semnul „*‖. Acest articol nu este socotit în totalul articolelor. Dacă se
poziţionează cursorul pe acest articol, semnul * dispare până când se începe editarea
în articolul respectiv. În acel moment se adaugă imediat un nou articol gol marcat cu
„*‖.
De asemenea, un articol se adaugă imediat în plus în tabelă, când cursorul se
găseşte pe ultima celulă din ultimul rând şi se apasă tasta TAB sau Săgeată Dreapta.
Din panglica ferestrei ACCESS, pentru a se adăuga unui tabel o înregistrare
nouă, se poate utiliza instrumentul Nou, din grupul Înregistrări, fila Pornire.
Combinaţia de taste pentru realizarea acestei operaţii este Ctrl + +.
Într-o tabelă se pot adăuga mai multe articole din alte zone ale tabelului, din
alte tabele sau chiar alte aplicaţii (Word, Excel), prin intermediul ferestrei
Clipboard, prin operaţiile Decupare sau Copiere, cuplate cu operaţia Lipire.
Selectarea mai multor înregistrări dintr-un tabel se face glisând cu mouse-ul
pe zona de selecţie situată la începutul rândurilor. Odată selectate articolele dorite de
a fi adăugate, se selectează fila Pornire a panglicii ACCESS, opţiunea Decupare sau
Copiere, se selectează rândul din tabel marcat cu „*‖ şi apoi cu opţiunea Lipire (din
acelaşi grup de instrumente) se adaugă articolele, nu înainte de a se cere confirmarea
de la utilizator pentru a se realiza adăugarea acestor articole.
41
Dacă se selectează această opţiune din meniu, după ce sunt selectate mai multe
înregistrări, atunci aceste înregistrări vor fi şterse, împreună cu înregistrările în
cascadă, dacă sunt definite relații între tabele în bazele de adte.
În mod similar, dacă se selectează una sau mai multe coloane, şi se face clic
drepata pe selecţie, se pot şterge câmpuri din tabelă. şi această ştergere necesită
confirmarea operatorului. Câmpurile pot fi şterse şi cu instrumentul Ştergere din
grupul Câmpuri şi coloane, fila Instrumente tabel/Foaie de date.
Exerciţii:
42
2.3. Crearea relaţiilor între tabele
Relaţiile dintre tabele pot fi percepute logic în cadrul schemei conceptuale 4
sau pot fi specificate şi salvate în baza de date.
Specificarea unei relaţii dintre tabele în baza de date, se realizează cu
4
Schema conceptuală reprezintă descrierea fenomenelor din realitatea înconjurătoare cu ajutorul
entităţilor şi atributelor şi a legăt urilor dintre acestea.
43
O relaţie între tabele este reprezentată printr-o linie de relaţie trasată între
tabelele din fereastra Relaţii. O relaţie care nu are impusă integritatea referenţială
apare ca o linie subţire între câmpurile comune care acceptă relaţia. Când relaţia este
selectată, făcând clic pe linia sa, linia este afişată îngroşat. Cu dublu clic se pot
reedita condiţiile ei. Dacă este impusă integritatea referenţială pentru o relaţie, linia
apare îngroşată la fiecare capăt. În plus, numărul 1 apare deasupra porţiunii îngroşate
a liniei în partea unu a relaţiei, iar simbolul infinit (∞) apare deasupra liniei în
cealaltă parte.
Exerciţiu:
Creaţi relaţiile între tabelele create în ultimul exerciţiu al subcapitolului
precedent.
44
CAPITOLUL III. UTILIZAREA INFORMAŢIILOR
DINTR-O BAZĂ DE DATE
45
Se afişează fereastra cu titlul Căutare şi înlocuire, existentă în toate aplicaţiile
pachetului Microsoft Office, cu câteva particularităţi specifice pentru lucrul cu
bazele de date. În caseta de text De căutat, se scrie textul care trebuie căutat.
Ultimele şiruri căutate, rămân în istoricul din lista ascunsă ataşată casetei, şi
la nevoie pot fi readuse.
Cătarea se face doar în câmpul curent sau în întreg tabelul, în funcţie de
opţiunea aleasă din lista Privire în:.
Şirul căutat trebuie să se potrivească cu începutul câmpului, cu întreg câmpul
sau cu o parte oarecare din câmp, după cum se alege din lista Potrivire:. De exemplu,
dacă se caută textul os într-un catalog de produse, dacă se alege prima opţiune, se pot
găsi articole în care există câmpuri care încep cu textul os (osânză, os, ospen, etc);
dacă se alege a doua opţiune, se pot găsi doar acele articole în care există câmpuri
care conţin cuvântul os şi nimic altceva; dacă se alege a treia opţiune, se pot găsi
articole în care există câmpuri care conţin textul os (osânză, costume, costiţe, os,
ospen, etc). Articolele în care se caută pot fi: de la articolul curent în sus, în jos sau
printre toate articolele din tabel.
În fine, se poate bifa caseta de selecţie Potrivire litere mari şi mici dacă se
doreşte să se facă căutări insensibile la litere mari sau mici sau se poate bifa caseta
de selecţie Căutare în câmpuri după format pentru a se ţine cont de formatul de
afişare a datelor din câmpuri.
46
se numeşte SQL (abreviere pentru sintagma din limba engleză: structured query
language, care se traduce în limba română: limbaj structurat de interogare).
Rezultatul execuţiei unei cereri, în majoritatea limbajelor, se numeşte vedere,
deoarece este un cadru în care sunt accesibile o anumită parte a informaţiilor din
baza de date. Cele mai importante moduri de vizualizare a interogărilor sunt: mo dul
proiectare, foaie de date şi vizualizare SQL. Important de reţinut este faptul că e
vorba despre acelaşi conţinut, etalat în trei moduri diferite de vizualizare.
Dintre aceste posibilităţi, modul proiectare este cel mai recomandat pentru a
crea interogări în mod eficient (interogări simple).
Pentru a crea o cerere de interogare în modul proiectare se parcurg paşii:
Din fila Creare, din ultimul grup de instrumente se face clic pe butonul
Proiectare interogare.
47
Automat apare vizibililă ultima filă cu instrumente de lucru pentru
interogări, şi anume fila Instrumente interogări/Proiectare.
Câmpurile se pot prelua din structurile sursă prin glisarea lor din casetele de
structuri în primul rând al grilei QBE (rândul Câmp), unde se înscriu câmpurile
interogării rezultate. Câmpurile pot fi înscrise şi efectiv în această linie sau alese din
lista ascunsă ataşată liniei câmp din grilă.
Dacă se doreşte aducerea tuturor câmpurilor dintr-o tabelă, se scrie semnul
„*‖ în rândul câmpurilor, iar în rândul tabel se înscrie tabelul în cauză.
Pe lângă câmpurile preluate din tabelele sau interogările disponibile,
interogările pot conţine şi câmpuri calculate. Calculele se pot face linie cu linie sau
pe grupuri de înregistrări. Pentru a se obţine o coloană în primul caz, se înscrie în
linia Câmp formula de calcul care are forma generală:
Nume-rezultat: expresie_aritmetică_sau_logică
De exemplu: Valoarea: cantitate*[Pret unitar]
vârsta: (Date() - [data naşterii])/365
NB: Expresia Date() se referă reprezintă o funcţie care returnează data
sistemului.
Exerciţii:
48
Rezolvare:
1. În fila Creare a
panglicii, se alege
penultima opţiune
Proiectare interogare. În
caseta Afişare tabel se
selectează „Prod‖, se
apasă Adăugare şi apoi
Închidere.
Se glisează apoi
câmpurile DenProd şi UM
din caseta cu structura
tabelului „Clienti‖ în
rândul Câmp din grila
QBE, iar pentru al treilea câmp se scrie expresia "pret cu TVA": [pret]*1,19.
Lansarea în execuţie a interogării se face apăsând butonul cu semnul „!‖ din
fila specială de instrumente de proiectare interogări din panglică. Pentru eventualele
modificări se alege din nou modul proiectare din meniul primei op ţiuni, Vizualizare,
din fila mai sus amintită.
49
Exerciţiu:
Rezolvare:
50
2. Se creează o nouă interogare, în modul proiect, alegându-se ca sursă tabelul
„ANG‖. În grila QBE, prima coloană se alege câmpul „NrDept‖, iar în a doua se
alege câmpul „Sal‖. Se adaugă linia de total, în care se înscrie pentru prima coloană
Grupare după iar la a doua coloană se alege funcţia Sum.
Se lansează în execuţie interogarea, iar rezultatul şi comanda SQL
corespunzătoare sunt:
51
Explicarea stabilirii relaţiilor în interogări, o vom exemplifica cu ajutorul a
două tabele: „Prod” şi „FactProd”, care au structurile ce pot fi deduse din
conţinutul prezentat în figură:
52
Pentru prima posibilitate, relaţia este definită astfel încât, în asocierea celor
două tabele se iau înregistrările pentru care câmpurile de relaţie au valori egale. Este
cel mai întâlnit tip de relaţie, se numeşte echicompunere şi, în exemplul nostru, se
descrie în comanda SQL, astfel:
FROM [Prod] INNER JOIN FactProd ON Prod.Codpro = FactProd.Codprod
Pentru cea de a doua posibilitate, relaţia este definită astfel încât, în asocierea
celor două tabele se iau toate înregistrările din catalog, şi înregistrările din rulaj
pentru care câmpurile de relaţie au valori egale. Relaţia se numeşte compunere
externă stânga. În exemplul nostru, în comanda SQL, relaţia este descrisă astfel:
FROM [Prod] LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod
În cea de a treia posibilitate, relaţia este definită astfel încât, în asocierea celor
două tabele, se iau toate înregistrările din rulaj, şi înregistrările din catalog pentru
care câmpurile de relaţie au valori egale. Pentru exemplul nostru, în comanda SQL,
relaţia este descrisă astfel:
FROM [Prod] RIGHT JOIN FactProd ON Prod.Codpro = FactProd.Codprod
Exerciţiu:
53
Rezolvare:
DenProd
DenProd
DenProd
Datafact
Datafact
Datafact
Datafact
Nrfact
Nrfact
Nrfact
Nrfact
Val
Val
Val
Val
1 21.10.2009 Ulei 49,05 1 21.10.2009 Ulei 65,40 1 21.10.2009 Ulei 65,40 1 21.10.2009 Ulei 65,40
1 21.10.2009 Zahar 46,50 5 24.10.2009 Ulei 35,97 5 24.10.2009 Ulei 35,97 5 24.10.2009 Ulei 35,97
1 21.10.2009 Lapte 43,50 4 23.10.2009 Ulei 39,24 4 23.10.2009 Ulei 39,24 4 23.10.2009 Ulei 39,24
1 21.10.2009 Malai 33,75 1 21.10.2009 Zahar 46,50 1 21.10.2009 Zahar 46,50 1 21.10.2009 Zahar 46,50
1 21.10.2009 Ulei 65,40 5 24.10.2009 Zahar 77,50 5 24.10.2009 Zahar 77,50 5 24.10.2009 Zahar 77,50
1 21.10.2009 Zahar 62,00 2 22.10.2009 Lapte 87,00 2 22.10.2009 Lapte 87,00 2 22.10.2009 Lapte 87,00
1 21.10.2009 Lapte 58,00 5 24.10.2009 Lapte 58,00 5 24.10.2009 Lapte 58,00 5 24.10.2009 Lapte 58,00
1 21.10.2009 Malai 45,00 6 25.10.2009 Lapte 43,50 6 25.10.2009 Lapte 43,50 6 25.10.2009 Lapte 43,50
2 22.10.2009 Ulei 98,10 3 22.10.2009 Lapte 52,20 3 22.10.2009 Lapte 52,20 3 22.10.2009 Lapte 52,20
2 22.10.2009 Zahar 93,00 4 23.10.2009 Lapte 43,50 4 23.10.2009 Lapte 43,50 4 23.10.2009 Lapte 43,50
54
DenProd
DenProd
DenProd
DenProd
Datafact
Datafact
Datafact
Datafact
Nrfact
Nrfact
Nrfact
Nrfact
Val
Val
Val
Val
3 22.10.2009 Ulei 58,86
În primul caz, atunci când nu au fost definite legături între tabele, s -au făcut
asocieri pentru fiecare dintre cele 4 tupluri din primul tabel (cu structura DenProd –
câmp individual şi Pret – ca parte componentă pentru Val) cu fiecare dintre cele 10
tupluri din al doilea tabel (cu structura NrFact şi DataFact – câmpuri individuale şi
Cant – ca parte componentă pentru Val). Au rezultat 40 de articole.
În cel de-al doilea caz s-au făcut asocieri doar petru tuplurile care provin din
articole în care Prod.Codpro = FactProd.Codprod, rezultând 10 articole.
Pentru cel de-al treilea caz s-a făcut adăugare la rezultatul cazului doi,
tuplurile din tabelul Prod care nu au corespondent în tabelul FactProd (e vorba de
produsul Malai).
În cel de-al patrulea caz, s-ar fi făcut adăugiri la rezultatul cazului al doilea,
tupluri din tabelul FactProd care nu au corespondent în tabelul Prod, dar nu au fost
găsite.
Exerciţiu:
Să se extragă din tabelele „Clienti”, „FactGen”, „Prod” şi „FactProd‖
valorile din toate câmpurile şi din toate înregistrările, respectând relaţiile dintre
tabele.
Rezolvare:
Se creează o nouă interogare, în modul proiect alegându-se ca sursă tabelele
„Clienti”, „FactGen”, „Prod” şi „FactProd‖. Se glisează apoi câmpurile celor patru
tabele, avându-se grijă ca dintre câmpurile de relaţie să fie incluse doar o parte,
55
salvăm interogarea cu numele totul si toate.
totul si toate
Codcli Dencli Adresa Telcli Nrfact Datafact Delegat Codprod DenProd UM Cant Pret
222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1075 Zahar kg 15 3,1
222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1009 Ulei Fl 20 3,27
222222 SC Secundul SRL Str.Verii nr 2 0261222222 2 22.10.2009 Popescu 7023 Lapte l 30 2,9
333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir 1075 Zahar kg 25 3,1
333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir 1009 Ulei Fl 11 3,27
333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir 7023 Lapte l 20 2,9
222222 SC Secundul SRL Str.Verii nr 2 0261222222 6 25.10.2009 Popescu 7023 Lapte l 15 2,9
111111 SC First SRL Str Primaverii nr 1 0261111111 3 22.10.2009 Anton 7023 Lapte l 18 2,9
111111 SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton 1009 Ulei Fl 12 3,27
111111 SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton 7023 Lapte l 15 2,9
Exerciţiu:
56
Rezolvare:
Salvarea unei interogări se face la părăsirea ei, sau prin alegerea opţiunii de
meniu Salvare sau Salvare ca…, din meniul Butonului Office . O interogare
salvată poate fi folosită în obiecte ca şi cum ar fi un tabel, în special ca sursă de
înregistrări pentru formulare sau rapoarte. De asemenea, interesant es te faptul că o
interogare poate fi salvată sub formă de raport sau interogare.
57
Alegerea filtrului în locul înregistrărilor este motivată atunci când operaţia de
extragere de informaţii este mai simplă. Dacă extragerea de informaţii este mai
laborioasă, atunci este de preferat să se aleagă interogările.
Există mai multe categorii de filtre. Probabil, cel mai simplu este filtrul de
selecţie, stabilit prin acţionarea instrumentului cu acelaşii nume, din fila Pornire a
panglicii Accesss. Dacă un tabel sau o interogare este vizualizată în modul Foaie
date, atunci când cursorul este într-o anumită celulă şi se face clic pe butonul
Selecţie din grupu Sortare şi selecţie, se selectează din foaia de date toate
înregistrările care au în câmpul curent o valoare care faţă de valoarea aleasă poate fi:
aceeaşi; diferită; mai mică; mai mare; sau într-un interval.
Filtrarea se mai poate efectua cu un clic dreapta aplicat unui câmp, într -un
tabel se deschide un meniu care are ca prime opţiuni operaţii de filtrare:
Filtrare prin selecţie;
Filtrare cu excluderea selecţiei;
Filtrare pentru…;
Eliminare Filtrare/sortare.
Filtrarea prin selecţie e descrisă în alineatul precedent şi redată în figura
următoare.
58
Filtrarea cu excluderea selecţiei extrage articolele care nu apar în cazul
anterior.
La Filtrare pentru se poate da un criteriu de căutare în câmpul curent. Dacă
pentru criteriu de selecţie se dă un text simplu, practic funcţionarea este identică cu
Filtrarea prin selecţie. Dar acest filtru este mai complex deoarece în caseta pentru se
pot introduce expresii, ca de exemplu:
Mai mic „<‖ sau mai mare „<‖ decât anumite valori numerice sau literare;
caracterul joker „*‖ pentru realizarea de expresii de forma „contine text‖,
„începe cu textul‖, „se termină cu textul‖, sau negarea acestor expresii etc.
Filtrele se pot aplica prin suprapunere, mereu reducându-se numărul
înregistrărilor. Revenirea la situaţia iniţială se face selectând din meniu opţiunea
Comutare filtrare.
Filtrele mai complexe se pot executa cu opţiunea Filtrare complexă, prin care
utilizatorul este ajutat să efectueze filtrări ale datelor cu ajutorul unei grile
asemănătoare grilei QBE (Vezi figura):
Probabil că limbajul SQL este astăzi cel mai utilizat dintre limbajele
structurate pentru interogarea bazelor de date relaţi onale. SQL a devenit chiar un
standard pentru o gamă din ce în ce mai largă de sisteme de gestiune a bazelor de
date. Mai mult, toate limbajele de programare care vor să asigure utilizatorilor
posibilităţi de comunicare complexă şi rapidă cu bazele de date , au încorporată o
59
formă mai mult sau mai puţin dezvoltată de SQL. Pe lângă manipularea şi regăsirea
datelor, se efectuează şi operaţii complexe privind actualizarea şi administrarea bazei
de date.
SQL eare un set de comenzi în limba engleză, simple şi clare, care poate fi
utilizat atât de specialişti cât şi de nespecialişti. Nu este un limbaj procedural, nu are
proceduri de control, fiecare SGBD având un motor care are printre func ţiuni sarcina
optimizării cererilor.
Limbajul SQL foloseşte cuvintele select, insert, delete ca părţi ale setului de
comenzi.
SQL pune la dispoziţia programatorilor comenzi pentru rezolvarea unor
probleme ca:
date interogate;
inserarea, extragerea şi ştergerea rândurilor intr-un tabel;
crearea, modificarea şi ştergerea obiectelor de tip baza de date;
controlul accesului la baza de date şi la obiectele de tip baza de
date;
garantarea consistentei bazei de date.
60
În unele cazuri, ACCESS completează automat instrucţiunea SQL. De
exemplu, atunci când se utilizează un expert pentru a crea un formular sau raport care
preia date din mai multe tabele, ACCESS creează automat o instrucţiune SQL pe care
o utilizează ca setare pentru proprietatea Sursă înregistrări a formularului sau
raportului. Atunci când trebuie creată o casetă listă sau combo cu un expert, A CCESS
creează o instrucţiune SQL şi o utilizează ca setare pentru proprietatea Sursă
înregistrări a casetei listă sau a casetei combo.
De asemenea, SQL poate fi utilizat în:
► Argumentul Instrucţiune SQL al acţiunii de macrocomandă ExecuţieSQL.
Această facilitate este uzitată şi de limbajele clasice de programare pentru
acces la bazele de date.
► În cod, ca şir de caractere literale sau ca instrucţiune SQL care conţine
variabile şi controale.
► Proprietatea SQL a unui obiect QueryDef pentru a modifica instrucţiunea SQL
subordonată unei interogări.
61
► simbolurile „?‖ şi „*‖ sunt folosite pentru a desemna unul sau mai multe
caractere de înlocuire 5;
► valorile de tip dată/timp sunt încadrate cu caracterul „#‖.
CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2
type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]]) .
Printre cele mai importante tipuri de date folosite amintim: Character, Memo,
Number, Integer, Decimal, Logical, Date, OLE Object etc. Numele tabelei trebuie să
fie unic în cadrul bazei de date şi să respecte cerinţele identificatorilor. Aceleaşi
cerinţe apar şi pentru numele câmpurilor, în plus există posibilitatea duplicării lor în
cadrul bazei de date, dar se păstrează unicitatea în tabelă. Clauza NOT NULL arată că
în câmpul respectiv nu se pot stoca valori de tip NULL.
Un alt exemplu pentru crearea unei tabele ANG pe care o vom folosi în
capitolele următoare, este comanda:
CREATE TABLE ANG (NrAng integer NOT NULL, NumeA text(10 ), Fnc
text(10), CSf integer, DataAnga DATE, Sal currency, Rate currency, NrDept integer
NOT NULL);
5
Caractere jocker
6
A nu se confunda cu utilizarea acestor paranteze în metalimbaj cu utilizarea lor în VBA pentru
delimitarea numelor de identificatori compuse din mai multe cuvinte
62
Pentru modificarea structurii unui tabel se utilizează comanda ALTER TABLE
cu următoarea sintaxă (simplificată):
7
Conform ajutorului Access
63
DISTINCTROW: are în vedere înregistrările duplicate în ansamblul lor, nu
numai pe cele care au câmpuri duplicate;
TOP: are ca efect prezentarea primelor articole rezultate, ca procent din
total sau în număr absolut.
Ceea ce urmează după predicat în prima clauză formează o listă de selec ţie în
care sunt cuprinse toate câmpurile care vor apărea în tabelă cu rezultatele interogării.
Câmpurile adăugate în rândul Field din grila Query a machetei grafice QBE, care au
marcată caseta de validare Show, sunt aceleaşi cu cele menţionate în lista de selecţie.
Simbolul „*‖ are rol de caracter jocker.
De fapt în această listă pot fi incluse şi expresii care pot sau nu să fie
sensibile la articolele din tabelele sursă. De asemenea, în scrierea interogărilor de
selecţie simple SQL ACCESS este posibilă şi folosirea funcţiilor totalizatoare. Cele
mai importante funcţii din această categorie sunt:
COUNT: returnează numărul de înregistrări care respectă condiţii le
stabilite prin clauza WHERE;
SUM: redă suma tuturor valorilor dintr-un câmp, operează numai cu valori
numerice;
AVG: calculează valoarea medie a unui câmp numeric;
MAX: permite determinarea celei mai mari valori dintr-un câmp;
MIN: duce la obţinerea celei mai mici valori a unui câmp rămâne valabilă
şi aici restricţia privind clauza WHERE.
Clauza FROM specifică numele tabelei sau tabelelor care vor forma suportul
interogării. Dacă în lista_selecţie se includ câmpuri din mai multe tabele, în faţa
numelui acestora trebuie precizată tabela din care fac parte. Aşa cum arătam la
regulile de sintaxă, pentru separarea numelor de tabele se utilizează semnul „,‖
(virgulă). Trebuie să precizăm faptul că în cadrul acestei clauze se pot menţiona pe
lângă tabele, ca surse de informaţii pentru interogările SQL, şi interogări care au fost
deja create.
64
SELECT *
FROM ANG;
NrAng NumeA Fnc Csf DataAnga Sal Rate NrDept
2000 CHIVU SOFER 2956 23.02.1999 950 30
NUMEA SAL
CHIVU 950
CONTRA 1250
DOROS 2975
MARCU 3000
NEGRU 2850
OSAN 3000
POPA 1250
POPAN 800
RUSU 5000
TULIAN 1500
VUSCA 1600
ZIMAN 2450
65
SELECT NumeA, Sal *12 - Rate * 12
FROM ANG;
NumeA Expr1001
CHIVU
CONTRA 10200
DOROS
MARCU
NEGRU
OSAN
POPA 9000
POPAN
RUSU
TULIAN
VUSCA 15600
ZIMAN
SQL tratează corect valorile nule. Dacă apar în expresii, valorile nule
provoacă rezultatul Null, indiferent de tipul celorlaţi operatori implicaţi. Din păcate,
acest lucru se poate perpetua în obiectele în care aceste interogări vor fi folosite mai
departe. Pentru aceasta există funcţia Nz, care înlocuieşte expresiile Null cu o
anumită valoare, de obicei 0 pentru expresii care în mod firesc ar trebui să fie
numerice, "" pentru string, etc. Deci, pentru a face ca interogarea să funcţioneze
corect ea trebuie transformată sub următoarea formă:
66
SELECT NumeA, Sal*12 -Nz(Rate,0)*12 as
VenitAnual
FROM ANG;I
NumeA VenitAnual
POPAN 9600
RUSU 60000
TULIAN 18000
VUSCA 15600
ZIMAN 29400
Prin clauza WHERE se pot selecta numai anumite articole, şi anume acele a
care îndeplinesc criteriul descris. Parametrul criteriul ui de selecţie este o expresie
care are rezultatul obligatoriu logic. În expresia clauzei WHERE obligatoriu trebuie
să apară cel puţin un câmp. Clauza WHERE este opţională şi nu operează cu funcţii
totalizatoare. În cadrul condiţiei din clauza WHERE pot fi utilizaţi operatorii
relaţionali: (>, >=, <, <=, =, !=), logici: (AND, OR, NOT) şi SQL: (IN, BETWEEN,
LIKE, IS NULL). Apelând la aceştia, este posibilă construirea unor condiţii mai
complexe.
Dacă se doreşte să se extragă angajaţii ai căror salariu este între 1500 şi 3000:
67
SELECT ANG.NumeA, ANG.Fnc
FROM ANG
WHERE (((ANG.Sal)>1500 And (ANG.Sal)<3000))
ORDER BY ANG.DataAnga;
NumeA Fnc
NEGRU INGINER
VUSCA VANZATOR
ZIMAN INGINER
DOROS INGINER
Presupunem că dorim să găsim angajaţii care sunt şefi, au unul din numerele
de marcă aparţinând (CSf):
SELECT NrAng,NumeA,Fnc,Sal,NrDept
FROM ANG
WHERE Sal > 1500
AND Fnc = 'INGINER'
OR Fnc = 'VANZATOR';
NrAng NumeA Fnc Sal NrDept
2987 VUSCA VANZATOR 1600 30
2789 POPA VANZATOR 1250 30
2049 DOROS INGINER 2975 20
2555 CONTRA VANZATOR 1250 30
2956 NEGRU INGINER 2850 30
2643 ZIMAN INGINER 2450 10
2024 TULIAN VANZATOR 1500 30
68
SELECT NrAng,NumeA,Fnc,Sal,NrDept
FROM ANG
WHERE Sal 1500
AND (Fnc = 'INGINER'
OR Fnc = 'VANZATOR');
NrAng NumeA Fnc Sal NrDept
2987 VUSCA VANZATOR 1600 30
2049 DOROS INGINER 2975 20
2956 NEGRU INGINER 2850 30
2643 ZIMAN INGINER 2450 10
De fiecare dată când există dubiu despre care dintre două operaţii vor fi
executate mai întâi când o expresie este evaluată, se recomandă utilizarea
parantezelor pentru clarificarea semnificaţiei dorite şi obţinerii rezultatului scontat.
Clauza ORDER BY se utilizează atunci când se doreşte ca rezultatele
interogării să fie ordonate după unul sau mai multe câmpuri_criteriu (definite drept
chei de sortare). Sortarea este opţională şi se poate realiza în mod crescător (ASC)
sau descrescător (DESC), separat pentru fiecare câmp din listă.
Exemplificare a folosirii acestei clauze este comanda prin care se extrag în
ordinea crescătoare a vechimii (inversă a valorilor coloanei DataAnga) date din
tabelul ANG:
69
SELECT NumeA,Fnc,DataAnga
FROM ANG
ORDER BY DataAnga DESC;
NumeA Fnc DataAnga
OSAN ANALIST 19.12.2000
CONTRA VANZATOR 19.12.2000
DOROS INGINER 31.10.2000
ZIMAN INGINER 14.10.1999
VUSCA VANZATOR 15.09.1999
POPA VANZATOR 26.03.1999
MARCU ANALIST 19.03.1999
CHIVU SOFER 23.02.1999
RUSU DIRECTOR 19.02.1999
TULIAN VANZATOR 23.01.1999
POPAN SOFER 13.01.1999
NEGRU INGINER 11.01.1999
70
La prima vedere s-ar părea că clauza HAVING ar fi redundantă. Din contră, ea
este foarte necesară. Spre deosebire de WHERE, care acţionează înainte de a se
efectua gruparea înregistrărilor, HAVING va opera după definirea acesteia. Pentru
HAVING criteriul va fi aplicat câmpului definit ca argument al funcţiei agregat.
Altfel spus, când se foloseşte clauza GROUP BY şi este necesară şi o condiţie, se va
utiliza clauza HAVING.
Un exemplu edificator ar fi extragerea funcţiilor pentru care toţi angajaţii au
salariu mai mare decât 1500:
SELECT Fnc, MIN(Sal) as [salariu minim]
FROM ANG
GROUP BY Fnc
HAVING MIN(Sal) >= 1500
ORDER BY MIN(Sal);
Fnc salariu minim
INGINER 2450
ANALIST 3000
DIRECTOR 5000
Rezultatul este diferit de cel care de obține prin mutarea condiției la la clauza
WHERE. Interpretarea unei astfel de înregistrări ar fi: extragerea pe funcții a
salariului minim, pentru toți angajații cu salarii mai mari sau egale decât 1500:
SELECT Fnc, MIN(Sal) as [salariu minim]
FROM ANG
where Sal >= 1500
GROUP BY Fnc
ORDER BY MIN(Sal);
Fnc salariu minim
VANZATOR 1500
INGINER 2450
ANALIST 3000
DIRECTOR 5000
72
SELECT CLIENTI.Codcli, CLIENTI.Dencli, CLIENTI.Adresa, CLIENTI.Telcli,
FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod,
Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret
FROM Prod, Clienti, FactGen, FactProd
WHERE (CLIENTI.Codcli=FactGen.Codcli) AND
(FactGen.Nrfact=FactProd.Nrfact) AND
(FactGen.Datafact=FactProd.Datafact)AND
(Prod.Codpro=FactProd.Codprod) ;
Opțiunea JOIN a fost introdusă în standardul SQL din 1992, până atunci,
specificarea relațiilor s-a făcut prin clauza WHERE.
Prin parametrii RIGHT sau LEFT opțiunea JOIN a adus și o simplificare a
unor comenzi. Fie, de exemplu, interogarea de extragere a totalului valorii și
cantității pe produse:
SELECT Prod.DenProd, Prod.UM, Sum(FactProd.Cant) AS SumăalCant, Prod.Pret, Sum([Cant]*[PRET]) AS
SumăValoare
FROM Prod LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod
GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;
TOTAL VALOARE SI CANT
DenProd UM SumăalCant Pret SumăValoare
Lapte l 98,00 2,9 284,20
Malai kg 2,25
Ulei Kg 43,00 3,27 140,61
Zahar kg 40,00 3,1 124,00
Fără opțiunea JOIN, trebuie să se recurgă pentru relații la clauza WHERE și,
pentru adăgarea produselor pentru care nu s-a facturat nimic, la opțiunea UNION:
73
Scrierea unei interogări în cadrul alteia duce la apariţia unei subinterogări;
setul de rezultate obţinut de la o interogare va constitui argument pentru o alta.
Utilizatorul poate astfel să creeze legături între mai multe interogări SQL ACCESS,
pe baza unor câmpuri unice, cu rol de căutare în structura tabelelor. Subinterog ările
înlocuiesc interogările imbricate din versiunile precedente, cu performan ţe mult
îmbunătăţite. Pot fi construite şi prin varianta de lucru a machetei grafice QBE
ACCESS.
Cea mai simplă subinterogare are sintaxa următoare:
SELECT * FROM Tabela1
WHERE Tabela1.nume_ câmp operator
(SELECT nume_câmp FROM Tabela2 WHERE criteriul_de_selecţie);
74
INSERT INTO nume_tabelă [IN baza_de_date_externă] [(câmp1[, câmp2[, ...]])]
SELECT [sursă.]câmp1[, câmp2[, ...]
FROM listătabele
Exemplu:
Să se adauge un articol pentru un nou angajat, Paznic:
INSERT INTO Ang
values (8888, "VALCU" , "PAZNIC", 2553, #3/3/2009#,2000,null ,10)
Exemplu:
DELETE FROM ANG WHERE NrAng = 8888
75
Această comandă are rolul şi de a modifica valorile câmpurilor din
înregistrările existente. Ca şi în cazul instrucţiunii INSERT, se va urmări dacă în
câmpul cu valori de actualizat sunt permise numai valori unice.
Atunci când se doreşte actualizarea datelor din mai multe câmpuri se foloseşte
virgula ca separator între câmpuri şi valorile acestora. Se pot utiliza mai multe
condiţii, WHERE apelând la operatorul logic AND pentru a limita actualizarea la
înregistrări mai bine specificate.
Exemplu:
Să se mărească salariile VANZATORilor cu 15%:
UPDATE Ang SET Sal= Sal * 1,15 where Fnc=”VANZATOR”;
76
CAPITOLUL IV. CREAREA ŞI UTILIZAREA
FORMULARELOR
77
Datele provin din câmpurile provenite din sursa de înregistrări de bază.
Un calcul provine dintr-o expresie, care este memorată în forma formularului.
Textul descriptiv este şi el memorat în forma formularului.
Aceste elemente se numesc controale. Un control este un o biect grafic care
poate fi poziţionat pe un formular sau raport, putând afişa date, putând fi legat de
efectuarea unor acţiuni declanşate de evenimente intervenite în rularea aplicaţiei sau
pur şi simplu sunt create pentru mai buna lizibilitate sau pentru scop estetic.
Asupra controalelor acţionează utilizatorii cu mouse-ul sau tastatura. Acţiunea
se poate face la un moment dat doar asupra unui singur obiect, aspect numit
focalizare. Obiectul care a primit focalizarea este, în mod normal, indicat prin
evidenţiere grafică. Focalizarea poate fi setată de utilizator sau de aplicaţie cu
ajutorul metodei SetFocus.
78
beneficiază de tehnologii bazate pe obiecte şi - pentru sarcinile mai dificile - de
ajutorul limbajului Visual Basic. Ca şi în cazul tabelelor, odată cu creşterea
experienţei proiectanţilor, munca în modul Vizualizare proiect va fi preponderentă în
crearea sau particularizarea formularelor.
Spre exemplu formularul Produse este prezentat mai jos, în modul Proiectare
(în limba engleză: Design View).
Fereastra pentru
proiectarea
Panglica formularelor
Access
Instrumente pentru
crearea controalelor
Etichetă formularelor
Casetă
Casetă combinată
text
Panou
de
navigare Subformular
Foaia de
proprietăți
Dreptunghi
Buton Linia de
stare
79
totaluri, data şi ora curentă şi alte informaţii folositoare într -un formular. Se pot crea
proceduri particularizate de tratare a evenimentelor ocazionate de lucrul cu
controalele.
4.2. Controale
Instrument selecţie
Cadru independent
Buton de comutare
Inserare diagramă
Grup de opţiuni
Efect special
Casetă combo
Grosime linie
Dreptunghi
Tip linie
Linie Buton opţiune
Control filă
Inserare pagină
Cadru obiect legat
implicite control
Subformular/ subraport
Imagine
Inserare hyperlink
Ataşament
Culoare linie
Selectare totală
Stabilire proprietăţi
Casetă listă
Caseta de selectare
80
Toate aceste operaţii se fac în modul vizualizare proiectare (DesignView), şi
constituie activitatea preponderentă a proiectanţilor de aplicaţii de baze de date,
munca programatorilor de interfeţe de lucru cu informaţiile din baza de date.
Măiestria utilizării controalelor se deprinde odată cu experienţa, cu asimilarea
accepţiunii proprietăţilor şi reacţiei controalelor la evenimente. Instrumentele din
fila Instrumente proiectare formular, din panglica Access destinate proiectării
controalelor pentru formulare, care nu sunt prezentate împreună cu numele lor, le -
am prezentat în figura anterioară:
Proprietăţile unui obiect sunt disponibile pentru modificare dacă numele
acelui obiect se găseşte în titlul ferestrei de proprietăţi. Fereastra de proprietăţi este
disponibilă prin aplicarea unui clic pe instrumentul Foaie de Proprietăţi din panglica
Access sau făcând clic dreapta pe un obiect şi alegând ultima opţiune (Proprietăţi)
din meniul contextual.
Poate pentru începători găsirea proprietăţilor formularului este mai dificilă,
dar clic-ul dreapta trebuie făcut în afara zonei unde se aşează obiectele. Există
controale simple, nelegate de date, care nu au proprietatea Control source. Dintre
acestea amintim: etichetele, liniile, dreptunghiurile sau unele imagini.
Dar există controale cu mult mai complexe decât cele de mai sus, chiar mai
complexe decât casetele de text. Cele mai multe dintre ele, cânt sunt create în modul
design, apelează automat la un expert (wizard). Aşa sunt, de exemplu controalele tip:
Casetă combinată, Buton de comandă, Casetă cu listă sau Control de pagini.
Un regim oarecum diferit de cel al controalelor îl au subformularele.
Un subformular este un formular inclus într-un alt formular, pentru a permite
afişarea datelor din mai multe tabele sau cereri de interogare, aflate în general în
relaţii de tip unu la unu sau unu la mai mulţi. Astfel, în formularul principal vor fi
afişate datele din partea unu a relaţiei, iar în subformular cele din partea mai mulţi.
În mod implicit, legătura dintre un formular şi un subformular reflectă legătura dintre
tabelele pe care se bazează. Prin urmare, la un moment dat în formular va fi afişată o
81
Un subformular poate fi înglobat într-un formular în două moduri: foaie de
date (în limba engleză: Datasheet view) sau formular (în limba engleză: Form view).
Atunci când se include un subformular într-un formular principal trebuie
realizate următoarele operaţii:
se creează formularul principal;
se creează subformularul;
se adaugă obiectul subformular din ToolBox într-o manieră similară cu
adăugarea oricărui control. Dacă tabelele pe baza cărora sunt create
formularele sunt într-o anumită relaţie, ACCESS-ul propune stabilirea
acestei relaţii şi între cele două formulare.
Odată înglobat un subformular într-un formular, se poate verifica rezultatul
operaţiunii în modul Vizualizare machetă. Eventualele retuşuri se pot face în modul
Proiectare.
82
Pentru casete de text, ca de altfel pentru majoritatea controalelor, legătura cu
datele este realizată de proprietatea Sursă Control (în limba engleză: Control Source)
şi reprezintă de obicei câmpurile tabelului sau interogării de unde sunt luate valorile
pentru o înregistrare.
Pentru formular "Record Source" se poate stabili proprietatea mai târziu, în
modul Design view. Sunt disponibile pentru modificare proprietăţile unui obiect dacă
numele acelui obiect se găseşte în titlul ferestrei de proprietăţi.
Fie, de exemplu, tabelul CLIENTI, care are următoarea structură:
83
4.3.2. Obiectele simple
Această modificare se poate realiza după două clicuri pe etichetă, atunci când
cursorul mouse-ului devine |, sau după selecţia controlului (a etichetei, în cazul de
faţă), prin modificarea proprietăţii Legendă a filei Format, din Foaia de proprietăţi.
De altfel, prin acest procedeu se recomandă să fie particularizate toate proprietăţile
(caracteristicile) obiectelor plasate în formulare (inclusiv a formularului însuşi):
84
culoare, dimensiune, plasament, font (tip, dimensiune, stil, culoare), efecte speciale,
legendă, nume etc. Cu ajutorul instrumentelor din fila Aranjare pot fi aranjate
obiectele.
85
4.3.4. Aranjarea obiectelor
Unul sau mai multe obiecte selectate se pot muta cu ajutorul tastelor cu săgeţi
sau prin tragere cu mouse-ul atunci când cursorul este sub forma unei cruci de săgeţi.
În mod similar, unul sau mai multe obiecte selectate se pot redimensiona cu
ajutorul tastelor cu săgeţi apăsate concomitent cu tasta Shift sau prin tragere cu
mouse-ul de unul dintre cele opt puncte negre din colţuri sau mijloace de laturi,
atunci când cursorul este sub forma unei săgeţi cu vârfuri l a ambele capete.
Atunci când sunt suprapuse obiecte, se poate uzita de opţiunile: Aducere în
prim plan sau Trimitere în ultimul plan pentru a stratifica corect obiectele.
În fine, ordinea de parcurgere a controalelor se poate stabili cu opţiunea
Ordine de tabulare unde, în fereastra Ordine de tabulare se poate modifica, prin
glisare cu mouse-ul, ordinea de parcurgere, existentă la un moment dat.
A mai rămas de legat formularul şi controalele de date.
După ce este selectat formularul (clic în zona din exteriorul grilei din fereastra
formularului) se stabileşte valoare Clienti prin modificarea proprietăţii Sursă
înregistrări (sau se alege din lista ascunsă) a filei Date din Foaia de proprietăţi.
Apoi, pe rând, pentru fiecare casetă de text în parte, după ce se selectează, se alege
câmpul corespunzător din lista
ascunsă a proprietăţii Sursă control
a filei Date din Foaia de
proprietăţi.
După efectuarea acestor
operaţii, formularul este funcţional,
precum este redat în modul
86
Vizualizare formular, în figura alăturată:
87
În exemplul de mai jos caseta Text25, care va afişa valoarea, va avea la
proprietatea Control Source formula =[prettt]*[1.19] unde 'prettt' este numele unui
control. În loc de 'prettt' se putea scrie 'prettt.value' ca referire completă a proprietăţii
sau 'pret' ca referire a câmpului 'pret' dintr-o tabelă 'produs' care este stabilită la
proprietatea 'Record Source' a formularului.
Există controale mai complexe pentru plasarea cărora în formulare mediul
Access are prevăzute instrumente expert şi indică posibilităţile lor cele mai frecvente
casetele combo valorile introduse pot fi preluate fie din lista controlului, fie prin
tastarea lor într-o casetă text, componentă a controlului.
Sintagma Casetă combo defineşte combinarea a două tipuri de controale:
Caseta text şi Caseta listă.
88
Valorile din liste pot fi preluate din câmpuri de tabele s au interogări şi pot fi
utilizate mai departe pentru a fi stocate sau pentru a căuta valori în tabele, precum se
vede în figura de mai jos.
89
Aceşti parametrii pot fi modificaţi de utilizatori. De exemplu, dacă se
consideră că ar fi mai portrivită pentru acest control o listă de valori predefinită, nu
o interogare, se poate modifica proprietatea Tip sursă rânduri la valoarea Listă valori
şi se poate completa proprietatea Sursă rânduri cu expresia ‖Fl‖; ‖Kg‖; ‖L‖ .
Într-un formular pot fi folosite date şi din diverse tabele, sau interog ări, altele
decât cele precizate la proprietatea Sursă înregistrări a formularului, prin folosirea
unor proceduri de tratare a evenimentelor.
Utilizarea în controale a expresiilor din alte formulare se face prin sintaxa:
Forms![Nume formular]![Nume control].
Pentru a putea fi evaluate astfel de expresii, trebuie ca acele formulare de pe
care sunt referite controale să fie deschise în acel moment.
Utilizarea într-o expresie, de pe un formular, a unor controale din
subformular, se realizează prin:
[Nume subformular].Form![Nume control].
90
CAPITOLUL V. CREAREA ŞI UTILIZAREA
RAPOARTELOR
5.1. Crearea unui raport
91
În continuare, trebuie ataşate controalele. Procedura de ataşare a controalelor
este similară cu procedura plasare a acestora lor în formulare.
Raportele constituie unul din tipurile de obiecte fundamentale ale ACCESS -
ului.
Deoarece menirea lor de bază este de prezentare a informaţiilor di n bazele de
date, cele mai importante proprietăţi ale unui raport sunt proprietăţile referitoare la
date. Stabilirea tabelului sau cererii de interogare de unde raportul îşi va extrage
informaţiile se face prin proprietatea sursă de înregistrări (în limba engleză: Record
Source).
Precum la formulare, şi la rapoarte, stabilirea câmpului de unde provin
valorile afişate în controale, se face cu ajutorul proprietăţii sursă control (în engleză:
Control source).
Informaţiile provenite din celulele tabelelor vor fi afişate în secţiunea de
detaliu. Controalele inserate în această secţiune vor fi afişate în raport, în mod
repetat, pentru fiecare articol al sursei de înregistrări.
În rapoarte mai pot fi create anteturi şi subsoluri pe diferite niveluri: antet şi
subsol de raport, antet şi subsol de pagină, antet şi subsol de grup.
Exerciţiu:
Pe baza informaţiilor din interogarea totul şi toate creaţi un raport cu
produsele vândute clienţilor.
Rezolvare
După ce s-au stabilit sursele de date pentru întreg raportul, trebuie stabilite
controalele care vor fi conţinute în raport, proprietăţile lor şi, în mod special, pentru
93
fiecare control în parte, sursa datelor. Această activitate constituie particularizarea
unui raport.
Într-un raport se pot particulariza următoarele elemente:
Sursa de înregistrări. Se modifică tabelele şi interogările pe care se bazează
un raport.
Sortarea şi gruparea datelor. Se pot sorta date în ordine ascendentă sau
descendentă. De asemenea, se pot grupa înregistrări în unul sau mai multe
câmpuri şi afişa subtotaluri şi totaluri generale într -un raport.
Fereastra Raport. Se pot adăuga sau elimina butoanele Maximizare şi
Minimizare, modifica textul din bara de titlu şi alte elemente ale ferestrei
Raport.
Secţiuni. Se pot adăuga, elimina, ascunde sau redimensiona secţiunile antet,
subsol şi detaliu ale unui raport. De asemenea, se pot seta proprietăţile
secţiunilor pentru a controla aspectul şi imprimarea unui raport.
Controale. Se pot muta, redimensiona sau seta proprietăţile fonturilor unui
control. De asemenea, se pot adăuga controale pentru a afişa valori calculate,
totaluri, data şi ora curente şi alte informaţii utile într -un raport.
94
Antetul de pagină este utilizat pentru a afişa titlul, titluri de coloane, date
calendaristice sau numere de pagină în partea de sus a fiecărei pagini a unui formular
sau raport.
Subsolul de pagină este utilizat pentru a afişa rezumate de pagină, date
calendaristice sau numere de pagină în partea de jos a fiecărei pagini dintr -un
formular sau raport
Antetul şi subsolul de pagină apar în partea superioară şi cea inferioară a
fiecărei pagini.
Antet de grup este utilizat pentru a plasa informaţii, cum ar fi numele de grup
sau totalul de grup, la începutul unui grup de înregistrări.
Subsol grup se utilizează pentru a plasa informaţii, cum ar fi numele de grup
sau totalul de grup, la sfârşitul unui grup de înregistrări.
Antetul şi subsolul de grup apar în partea superioară şi cea inferioară a
grupărilor articolelor.
Antet/Subsol raport
Antet/Subsol pagina
Exerciţiu
Adăugaţi antet şi subsol raportului de la exerciţiul precedent. În antetul
raportului să se înscrie un antet de firmă, şi numele de coloane, iar la subsol să se
scrie data listării şi semnătura persoanei care a făcut listarea.
Rezolvare:
se deschide baza de date Facturi;
se alege din panoul de navigare raportul Raport TEST;
se comută în Vizualizare în mod proiectare;
se urmăreşte să existe setat Antet/subsol raport;
95
se glisează în antetul raportului, din bara de instrumente, etichet a pentru a se
scrie firma, în partea stângă sus şi ca titlu: Lista produselor vândute pe clienţi. Titlul
se poate face cu un font mai mare şi aldin;
se măreşte înălţimea antetului şi se adaugă în antet etichete pentru antetul
coloanelor, care se aliniază în linie cu cea mai de sus;
se trasează un dreptunghi, care să înconjoare etichetele, şi pentru ca să nu
acopere etichetele se setează proprietatea Stil fundal cu culoarea Roşu şi se plasează
în spatele etichetelor realizate cu instrumentul Trimitere în ultim plan din fila
Aranjare;
la subsolul raportului se adaugă etichetă cu conţinutul (legenda) Listat în data
şi o etichetă Întocmit / Semnătura;
se acţioneză pe instrumentul Data şi ora din panglică, şi pentru că se adaugă
etichete cu data şi ora sistemului în partea stângă a antetului, data trebuie glisată în
zona de subsol, lângă Listat în data, iar eticheta cu ora se poate şterge;
se trasează o linie în partea de subsol, pentru a delimita elementele acestuia de
articolele listate.
96
5.3. Gruparea datelor într-un raport. Realizarea de totaluri şi
subtotaluri
Pentru adăugarea de controale care vor reda totalul tuturor valorilor unui
câmp, la nivel de raport, se procedează în felul următor:
1. Se adaugă o casetă text în zona de subsol a raportului. Este de preferat ca
această casetă să fie o copie a unei casete pe care o totalizează (cu
operaţiile obişnuite de copiere şi lipire);
2. La proprietatea Sursă control se setează: =Sum([expresie]) unde expresie
poate lua valorile variabile, funcţie de înregistrări, care vor fi totalizate;
3. La proprietatea Execuţie sumă se setează valoarea Nu.
Exerciţii
Rezolvare:
98
4. În modul Vizualizare proiect, se selectează, cu un clic, caseta de text
corespunzătoare expresiei valoare, se copiază în clipboard, cu Ctrl + C
şi se lipeşte cu Ctrl + V. Cu mouse-ul se glisează caseta copiată, în
secţiunea Subsol DenProd. Se face o nouă lipire şi se glisează caseta în
secţiunea Subsol raport. Se reajustează înălţimea secţiunii de detaliu.
Pentru cele două casete copiate se setează următoarele proprietăţi de
dată:
Sursă control : =Sumă (Cant * Pret);
Execuţie sumă : Nu.
Se trasează un dreptunghi cu ajutorul instrumentului din fila
Instrumente raport/ Proiectare din panglică, se colorează cu galben prin
99
Rezultatul este prezentat în modul Vizualizare proiectare, în figură:
Exerciţii
100
informaţiile generale referitoare la Clienţi şi să se rectifice antetul
coloanelor.
Rezolvare:
101
5. Pentru a salva lista rezultată într-un document Word, în prealabil,
documentul trebuie vizualizat în modul Examinare aspect şi din linia cu
instrumente proprie acestui mod de vizualizare se alege pictograma
aplicaţiei Microsoft Word şi se produce deschiderea raportului cu
procesorul de texte. Nu sunt importate elementele grafice. Rezultatul
este redat mai jos:
SC DEPOZITUL SRL
LISTA PRODUSELOR VANDUTE PE CLIENTI
Cod Denumire Nr. Data Preţ/UM
Produs Produs Client Adresa Telefon factură factură Delegat UM Cantitate Val
7023 Lapte 2,9 /l
111111 SC First SRL Str Primaverii nr 1 26111111
1 4 23.10.2009 Antonescu 15 43,50
2 3 22.10.2009 Antonescu 18 52,20
Facturat clientului: 111111SC First SRL 95,70
222222 SC Secundul SRL Str.Verii nr 2 26122222
1 6 25.10.2009 Popescu 15 43,50
2 2 22.10.2009 Popescu 30 87,00
Facturat clientului: 222222SC Secundul SRL 130,50
333333 SC Terţa Parte SRL Str.Toamnei nr 3 26133333
1 5 24.10.2009 Trandafir 20 58,00
Facturat clientului: 333333SC Terța Parte SRL 58,00
Total pe produs: 7023Lapte 284,20
1009 Ulei 3,27/Kg
111111 SC First SRL Str Primaverii nr 1 26111111
1 4 23.10.2009 Antonescu 12 39,24
Facturat clientului: 111111SC First SRL 39,24
222222 SC Secundul SRL Str.Verii nr 2 26122222
1 1 21.10.2009 Popescu 20 65,40
Facturat clientului: 222222SC Secundul SRL 65,40
333333 SC Terța Parte SRL Str.Toamnei nr 3 26133333
1 5 24.10.2009 Trandafir 11 35,97
Facturat clientului: 333333SC Terța Parte SRL 35,97
Total pe produs: 1009Ulei 140,61
1075 Zahar 3,1 /kg
222222 SC Secundul SRL Str.Verii nr 2 26122222
1 1 21.10.2009 Popescu 15 46,50
Facturat clientului: 222222SC Secundul SRL 46,50
333333 SC Terţa Parte SRL Str.Toamnei nr 3 26133333
1 5 24.10.2009 Trandafir 25 77,50
Facturat clientului: 333333SC Terța Parte SRL 77,50
Total pe produs: 1075Zahar 124,00
Total pe produsul: 548,81
Listat în data:
8 mai 2010 Întocmit Semnătura
17:56:03
102
CAPITOLUL VI. LIMBAJUL VISUAL BASIC
Instrumente
Exploratorul Instrumente pentru
proiectelor depanare
Ferestra de
editare cod
Ferestra urmărire
Ferestra
variabile
Ferestra afișare
proprietăţilor
obiectelor
8
metodă de rezolvare a unei probleme, defalcată în etape succesive; func ţie executată de un
subprogram, parte din sintaxa limbajelor evoluate, conform www.dexonline.ro preluat din Marele
dicţionar de neologisme, Florin Marcu, Editura Saeculum, 2000
9
ib idem
103
pachetului Office. Produsele pachetului Office, ele însele, crează în unele situa ţii,
module scrise în VBA, a căror prezenţă şi rulare pot fi sesizate sau nu de utilizatori.
Unitatea elemetară prin care programatorii scriu un algorit m într-un limbaj de
programare este instrucţiunea. Un grup de instrucţiuni realizează o unitate de
program; în cazul VBA, o procedură.
Există mai multe tipuri de proceduri:
proceduri eveniment: O procedură executată automat ca răspuns la un
eveniment iniţiat de utilizator sau de codul program, sau activat de sistem prin
adăugarea de cod la un eveniment dintr-un formular sau raport.
proceduri Function : Procedură care returnează o valoare şi care poate fi
utilizată într-o expresie. Funcţia se declară cu instrucţiunea Function şi se
sfârşeşte cu instrucţiunea End Function.
proceduri Sub : Procedură care îndeplineşte o operaţiune. Spre
deosebire de o procedură Function, o procedură Sub nu returnează valori. O
procedură Sub se declară cu instrucţiunea Sub şi se încheie cu o instrucţiune End
Sub.
Procedurile sunt amplasate în module. Pentru crearea, testarea, depanarea
şi/sau rularea procedurilor utilizator, se recurge la instrumentele speciale asigurate de
mediul Visual Basic, care se iniţiază prin butonul , care este aşezat în capătul din
stânga al filei Instrumente baza de date a panglicii.
Procedurile sunt definite prin tastarea instrucţiunii Function sau Sub, eventual
precedate de specificatorul de domeniu Public sau Private. Pe acelaşi prim rând se
scrie efectiv un nume de procedură (funcţie sau subrutină) imediat urmat de toate
argumentele între paranteze iar la funcţie şi de comutator funcţiei. De exemplu,
următoarea declaraţie pentru funcţia Încărcat specifică şirNumeForm ca argument:
Function Încărcat (sirNumeForm As String) As Boolean
Sau, următoarea declaraţie pentru procedura Sub: AfişEveniment indică
NumeEveniment ca argument:
Sub AfişEveniment (NumeEveniment as String)
Corpul definirii procedurilor conţine liniile de cod în limbaj Microsoft Visual
Basic care vor efectua operaţiunile sau calculele necesare pentru realizarea
algoritmilor şi se termină cu linia de final End Sub sau End Function scrisă automat de
editor când s-a declarat procedura.
Pentru a facilita gestionarea obiectelor, a procedurilor în module, în editor
există pentru programatori fereastre de afişare a proprietăţilor şi de exploarare a
proiectelor, permiţându-se crearea de proceduri şi module, cătarea şi actualizarea sau
stergerea lor.
Editorul mediului are facilităţi de colorare a cuvintelor cheie, declaraţiilor
utilizator, frazelor eronate, comentariilor etc. Cea mai puternică facilitate a editorului
104
VBA este posibilitatea afişării contextuale în momentul scrierii instruc ţiunilor în
limbajul VBA, a elementelor care caracterizează un anumit context:
În fine, dar nu mai puţin important, este depanatorul, nelipsit din mediile de
programare deja de aproape 20 de ani.
În secţiunile următoare ale acestui capitol vom prezenta elemente de limbaj
VBA în scopul evidenţierii unor metode de access la obiectele bazei de date.
105
În general în Visual Basic dacă se doreşte să se scrie mai multe instruc ţiuni pe
o linie, aceasta sunt separate prin caracterul (:) .
Invers, dacă o declaraţie este prea mare se poate scrie pe mai multe linii,
pentru continuare se foloseşte caracterul continuator de linie ( _)(un spaţiu urmat de
o linie jos).
Algoritmii care sunt transformaţi în programe pot fi concepuţi iniţial prin
scheme logice. Schemele logice pot să fie sub forma unui pseudocod - care este un
limbaj mai puţin riguros decât un limbaj de programare, posibil şi cu termeni din
limba română - sau sub formă grafică.
Cele mai utilizate dintre aceste simboluri sunt:
start şi final de algorim
blocuri secvenţiale
operaţii de intrare-ieşire
bloc de decizie
apel de subprograme
conectori
În aproape toate limbajele care au formă Visual se pot folosi două funcţii
pentru a se putea realiza casete de dialog predefinite. Ev ident, formularele şi
rapoartele reprezintă o formă elegantă de introducere şi respectiv afişare a datelor
care se bazează în principal pe structura bazei de date. În afară de acestea, există în
VBA instrucţiuni pentru introducerea unor date izolate şi afi şarea de mesaje. Această
necesitate se simte mai ales în faza de test a unei proceduri sau funcţii, sau pentru
afişarea de mesaje către utilizatorul bazei de date. Şi mai mult chiar nici posibilitatea
Debug.Print nu este de înlăturată în această fază.
Pentru aceasta Visual Basic pune la dispoziţia programatorilor două funcţii:
InputBox care afişează o casetă de dialog ce permite preluarea datelor de la utilizator
şi MsgBox ce permite afişarea diferitelor informaţii.
Funcţia InputBox afişează o casetă de dialog modală care cere utilizatorului să
introducă date. Funcţia returnează o valoare de tip String formată din caracterele
introduse de utilizator în caseta cu text din fereastra de dialog dacă utilizatorul apasă
106
butonul OK; dacă se apasă butonul Cancel şirul returnat este şirul vid "". Sintaxa
este:
InputBox(prompt[,title] [,default] [,xpos] [,ypos] [,helpfile, context])
Unde:
prompt - un şir de caractere afişat ca mesaj în caseta de dialog. Numărul
maxim de caractere este de 1024;
buttons – o expresie numerică ce reprezintă suma valorilor care specifică
numărul şi tipul butoanelor afişate sau pictograma;
title – un şir de caractere ce va fi afişat drept titlu în bara de titlu a casetei
de dialog;
helpfile - un şir de caractere ce specifică fişierul Help ce va fi folosit
pentru a oferi asistenţă în lucrul cu caseta de dialog.
107
Constante Valoare Descriere afişare
vbOKOnly 0 Numai buton OK
VbOKCancel 1 Butoanele OK şi Cancel
VbAbortRetryIgnore 2 Butoanele Abort, Retry şi Ignore
VbYesNoCancel 3 Butoanele Yes, No şi Cancel
VbYesNo 4 Butoanele Yes şi No
VbRetryCancel 5 Butoanele Retry şi Cancel
VbCritical 16 Pictograma Critical Message
VbQuestion 32 Pictograma Warning Query
VbExclamation 48 Pictograma Warning Message
VbInformation 64 Pictograma Information Message
VbDefaultButton1 0 Primul buton este implicit
VbDefaultButton2 256 Al doilea buton este implicit
VbDefaultButton3 512 Al treilea buton este implicit
VbDefaultButton4 768 Al patrulea buton este implicit
VbApplicationModal 0 Modul de aplicaţie; Aplicaţia aşteaptă şi utilizatorul
trebuie să răspundă la caseta de dialog
VbSystemModal 4096 Modul de sistem; Toate aplicaţiile sunt suspendate
până la răspunsul la caseta de dialog
108
Exemplu:
MsgBox "Mesaj de atenţionare !", vbExclamation _
+ vbOKCancel + vbDefaultButton1+vbsystemmodal, "Sistemul stă!"
Unde:
NumeVaribilă este identificatorul variabilei;
TipVariabilă este numele unui tip de date din cele pe care le acceptă Visual
Basic. Dacă acesta lipseşte se consideră că variabila este de tipul Variant.
Exemple:
Dim iCant as Integer ´defineşte variabila iCant de tip Integer
Dim dtZiSal as Date ´defineşte variabila dtZiSal de tip date
109
Private sNume as String ´defineşte variabila sNume de tip String
Public lstListaPret as ListBox ´defineşte variabila lstListaPret ce va conţine o
referinţă către un obiect de tip ListBox
Un alt tip de variabile sunt cele statice. Acestea pot avea un domeniu de
valabilitate locală sau la nivelul unei proceduri, dar o durată de existenţă permanentă.
Declararea se face cu ajutorul cuvântului cheie Static. Chiar dacă sunt definite
la nivelul procedurilor, variabilele Static îşi păstrează valoarea şi după ce procedurile
gazdă îşi termină execuţia. Dacă procedura va fi din nou apelată variabila statică nu
va fi iniţializată automat de Visual Basic, lucru ce se întâmplă cu variabilele care nu
sunt statice, ci va avea valoare pe care a avut-o la ultima ei folosire.
Variabilele locale la nivelul unui modul sau publice se declară în secţiunea de
declaraţii a modulului (Declarations).
În unele versiuni de Visual Basic se permite declararea variabilelor şi implicit,
adică o variabilă este considerată declarată la prima ei folosire. Nu este necesară o
declarare prealabilă cu ajutorul cuvintelor cheie Dim, Private, Public. În mod
implicit Visual Basic le consideră de tip Variant pe toate. În VBA acest lucru nu este
permis.
Una dintre cele mai periculoase erori întâlnite la declararea unei variabile este
următoarea:
110
Dim a, b, c as Integer,
care la prima impresie pare că sunt definite trei variabile a,b,c de tip Integer
dar de fapt numai c este de tip Integer, celelalte fiind în mod implicit de tip Variant.
Corect este
Dim a as Integer, b as Integer, c as Integer
111
tipurile + 1 byte
precedente per
caracter
Exemple:
Const PI = 3.14159265358979
Const NR_CARACTERE = 256
Const ZI_DE_NASTERE = #02.04.1981#
Const NUME_DE_COD = "Şacalul"
112
6.4.3. Iniţializarea variabilelor
Exemple:
iOreLunar = 170 – variabila a va stoca valoarea 170;
sNume ="Popescu"&" Ioan" – variabila va stoca şirul de caractere
"Popescu Ioan"
dtDataAng=#13.06.2000# – variabila va stoca data 13.06.2000
s=s+1 – reprezintă primul şoc întâlnit de novicii în
informatică, care nu sesizează că e vorba
de operatorul de atribuire nu de
comparare, în cazul de faţă, în locaţia de
memorie s; va fi suprascris conţinutul
anterior incrementat cu 1
Unei variabile de tip obiect (tipul generic Object sau de tipul celorl alte obiecte
Access 2000) nu i se poate atribui un obiect în varianta clasică: variabila=expresie
sau variabila1=variabila2, ci utilizându-se instrucţiunea Set:
Set variabila_obiect = expresie_obiect.
În urma apelului acestei instrucţiuni, variabila_obiect va referi obiectul
returnat de expresia expresie_obiect.
Şi numele de proceduri pot fi considerate un caz particular de variabile.
6.5. Tablouri
113
indecşilor care redau un număr de ordine al elementelor pe fiecare dimensiune.
Bineînţeles, dacă tabloul este de tip Variant atunci elementele acestuia pot să conţină
diferite tipuri de date (numerice, şiruri de caractere, date calendaristice, obiecte). De
obicei un tablou unidimensional este numit vector iar unul bidimensional matrice.
Tablourile sunt intuitiv create în programare implicaţie a scopului declarat al
calculatoarelor programabile, acela de a efectua cu viteză operaţii de rutină, omogene
şi repetivive. Pentru gestionarea cât mai eficientă a elementelor tablourilor sunt de
mare folos structurile repetitive.
Declararea unui tablou cu dimensiune fixă se poate face astfel:
Dim|Public|Private _
NumeTablou([[NrPrimElement to] NrUltimElement], _
[[NrPrimElement to] NrUltimElement], ...) [As TipDată]
După declaraţie, elementele tabloului pot fi folosite în expresii sau în orice loc
unde poate fi utilizată o variabilă obişnuită. Deci:
zi(0)=”Luni” ‟ încarcă primul element al vectorului zi
‟ cu şirul”Luni”
114
modificare a proprietăţilor obiectelor sau răspunsului acestora la diferite evenimente
să-i corespundă câte un subprogram.
Pentru a da un grad de generalitate cât mai mare, funcţiile şi/sau procedurile
conţin în definirea acestora o listă de parametri formali. În momentul apelării unei
funcţii şi/sau proceduri se transmit către acestea valori pentru fiecare parametru al
procedurii sau funcţiei (sau nimic dacă nu există parametri).
Sintaxa pentru definirea unei proceduri este următoarea:
[{Private|Public}]Sub nume_procedură[([{ByRef|ByVal}] param_1 [as tip_date],…)]
[instrucţiuni]
....
[Exit Sub]
...
[instrucţiuni]
End Sub
Unde:
Private şi Public au semnificaţie similară cazului declarării variabilelor. O
procedură eveniment poate fi definită doar Private;
Sub permite ieşirea forţată dintr-o procedură; instrucţiunile care încep cu
Exit provoacă ieşirea forţată din blocurile de instrucţiuni ale anumitor
structuri;
Parametrii din definirea procedurii se numesc parametrii formali, ei
precizează (implicit sau explicit) doar tipul parametrilor;
{ByRef|ByVal} precizează modul de transmitere a parametrilor, care poate fi
prin valoare sau referinţă. Implicit se consideră a fi ByVal. Dacă se
utilizează ByVal modificările făcute argumentelor transmise procedurii se
pierd după ieşirea din procedură, pe când, dacă se utilizează ByRef
modificările făcute argumentelor transmise procedurii rămân şi după ieşirea
din procedură.
Sub test()
v=7
transmit v
115
MsgBox v
End Sub
Sub transmit(ByVal a)
a=a+3
End Sub
Procedura test de tip Sub apelează procedura transmit de tip Sub. Modul de
transmitere a parametrului este prin valoare. Prin rularea subrutinei test se afişează
valoarea 7, cu toate că în interiorul subrutinei transmit parametrul este modificat,
aceste transformări nu rămân la ieşirea din subrutină.
Dacă se schmbă modul de transmitere a parametrului prin ByRef, linia de
definirea a subrutinei apelate fiind Sub transmit(ByVal a), atunci rezultatul execuţiei
subrutinei test va fi afişarea valorii 10.
116
Function test1() As Integer
Dim v As Integer
MsgBox increment(7)
End Function
117
IsDate(expresie): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze este compatibilă cu o dată calendaristică;
IsEmpty(expresie): returnează valoarea adevărat (TRUE) dacă expresia
dintre paranteze nu conţine o valoare. Null este considerat valoare;
IsNumeric(expresie): returnează valoarea adevărat (TRUE) dacă expresia
dintre paranteze poate fi evaluată ca număr;
IsObject(expresie): returnează valoarea adevărat (TRUE) dacă identificatorul
dintre paranteze este de tip obiect;
IsError(expresie): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze conţine o eroare;
Lcase(şir_de_caractere): transformă literele mari dintr-un şir în litere mici;
Left(strŞir,intNrCaractere): extrage dintr-un şir de caractere primele
intNrCaractere din partea stângă a şirului;
Len(şir_caractere/variabilă): returnează numărul de caractere ale şirului de
caractere specificat sau numărul de octeţi necesari pentru a stoca conţinutul
unei variabile;
Mid((şir_caractere, poziţie_start[, lungimea])): extrage un şir de caractere
dintr-un alt şir de caractere;
Month(data_calendaristică): returnează numărul lunii din an;
Right(strŞir,intNrCaractere): extrage dintr-un şir de caractere primele
intNrCaractere din partea dreaptă a şirului;
Space(număr): returnează numărul de spaţii specificate;
Str(expresie_numerică): converteşte rezultatul evaluării expresiei numerice
dintre paranteze într-un şir de caractere;
Ucase(şir_de_caractere): transformă literele mici dintr-un şir în litere mari;
Val(şir_caractere): returnează conversia şirului de caractere specificat, într -
un număr;
WeekDate(dată_calendaristică,prima_zi): returnează numărul zilei din
saptămâna datei calendaristice;
Year(dată_calendaristică): returnează anul.
118
6.7 Structura alternativă
Da Nu
Condiţie
secvenţa secvenţa
instrucţiuni A instrucţiuni A
Terminare
120
For valc=vali To valf [Step valp]
[secvenţă instrucţiuni]
[Exit For]
[secvenţă instrucţiuni]
Next [valc ]
Schema logică de reprezentare a acestei structuri este redată alăturat sintaxei .
121
6.8.2. Structurile repetitive de tip Do … Loop
122
În schimb dacă condiţia este pe o linie cu Loop atunci structura este repetitivă
cu condiţie posterioară, deci instrucţiunile din corpul structurii vor fi executate ce l
puţin odată, indiferent de valoarea de adevăr a condiţiei.
Existenţa acestei instrucţiuni pluriforme este firească deoarece în algoritmi
sunt poate, întotdeauna substituibile instrucţiunile repetitive
Dacă este întâlnit rândul cu Exit Do, atunci controlul programului este
transmis forţat în afara buclei, la prima instrucţiune care se găseşte după linia Loop.
Redăm mai jos, schema logică şi codul sursă pentru algoritmul de calcul al
sumei primelor n numere naturale, folosind cele 4 variante ale instruc ţiunii.
Loop i=i+1
End Function
123
Function sum(n As Integer)_ Function Sum (n)
As Integer sum = 0
Dim i As Integer
i=1
sum = 0
i=1 sum = sum + i
Do i=i+1
sum = sum + i Da
i <= n
i=i+1
Loop While i <= n Ieşire
End Function
iv) Cazul Do Until cu condiţie posterioară:
Function Sum (n) '------------------------
Function sum(n As Integer)_
sum = 0
As Integer
i=1 Dim i As Integer
sum = sum + i sum = 0
i=1
i=i+1
Do
Nu sum = sum + i
i>n
i=i+1
Ieşire Loop Until i > n
End Function
124
obiect specific de variabilă. Pentru masive element poate fi doar de tipul variant.
grup este un nume de colecţie sau masiv.
Exemplul următor listează numele tuturor controalelor incluse în formularul
Produse. Pentru a fi accesate controalele, formularul trebuie să fi e deschis.
'------------------------------------
Sub Form()
Dim f As Form
Dim c As Control
Set f = Forms("Produse")
For Each c In f
Debug.Print c.Name
Next
End Sub
Redăm în figura de mai jos, rularea în mediul VBA alături de mediul Access
cu formularul deschis.
125
Un exemplu de funcţie recursivă, scris în VBA, cal culează suma primelor n
numere naturale:
„-------------------------
Function sum_rec(n As Integer)
If n > 0 Then
sum_rec = n+sum_rec(n –1)
End If
End Function
Apelul se poate face chiar din “Debug Window” prin linia: sum_rec(100).
Pentru a nu se apela la infinit, în subprogramele recursive trebuie plasat un
bloc de instrucţiuni care să conţină o secvenţă de oprire, oarecum similară
algoritmilor iterativi.
În programare, recursivitatea este inspirată din recursivitatea sau recurenţa din
matematică. Dacă efectiv subprogramul se apelează direct pe el însuşi atunci avem
recursivitate directă, pe când dacă un subprogram SP1 apelează un altul SP2 care
apelează la rândul lui pe SP1 atunci avem recursivitate indirectă. Prin aceasta se
ajunge la realizarea repetabilităţii unor blocuri de instrucţiuni. În general însă
recursivitatea nu face economie de memorie, deoarece trebuie menţinută o stivă cu
valorile de prelucrat, putîndu-se supraîncărca stiva şi memoria. În schimb pot
subprogramele recursive sunt lizibile şi uşor de depanat.
O baza de date Access este formată dintr-o mulţime de obiecte, care pot fi
accesate din VBA. Fiecare obiect are o serie de proprietăţi şi metode ataşate.
Reamintim că termenul de proprietate se referă la o dată încapsulată într-un obiect,
iar termenul de metodă se referă la un subprogram încapsulat într -un obiect.
Invocarea unei metode sau proprietăţi a unui obiect se face prin prefixarea acesteia
cu numele obiectului astfel:
nume_obiect.nume_metodă;
nume_obiect.nume_proprietate.
Specificarea unui obiect aparţinând unei colecţii se poate face conform uneia
din următoarele variante:
1. nume_obiect_colecţie![nume_obiect] – este nevoie de paranteze drepte
numai dacă numele obiectului conţine spatii,
2. nume_obiect_colecţie("nume_obiect"),
126
3. nume_obiect_colecţie(index_obiect) – număr care indică poziţia în
colecţie a unui obiect. Aceste numere de ordine încep de la zero.
Invocarea formularului sau raportului curent se poate face prin apelativul Me.
Printre numeroasele obiectele care pot fi utilizate de programatori sunt şi
obiectele Applicaton şi Form.
127
SetFocus se cedează controlul formularului specificat împreună cu metoda;
Undo - toate modificările făcute datelor afişate în formular se pierd.
128
Pentru a particulariza o procedură a unui eveniment legat de un obiect trebuie
parcurse următoarele etape:
se afişază Foaia de proprietăţi;
se selectează secţiunea Event;
se selectează evenimentul la care se doreşte ataşarea procedurii;
click pe butonul … pentru editarea procedurii respective. Sistemul deschide
în editorul VBA o procedură de tip Sub sau Function cu numele compus din
numele obiectului legat de numele evenimentului prin semnul _ .
Exerciţiu:
129
► la dublu-clic pe casetă1, caseta să devină lila.
Tip de
Nume Apare când
eveniment
Utilizatorul realizează o acţiune cu
de fereastră Close, Load, Open, Resize, Unload
formularul sau raportul
Activate, Deactivate, Enter, Exit, Obiectul primeşte sau pierde focalizarea
de focalizare
GotFocus, LostFocus sau devine activ respectiv inactiv
AfterDelConfirm,AfterInsert,
AfterUpdate,BeforeDelConfirm,
Se fac modificări ale datelor sau
de date BeforeInsert,BeforeUpdate,
înregistrărilor
Change,Current,Delete, NotInList,
Update
Click, DblClick, MouseDown,
de mouse Apare o acţiune cu mouse-ul
MouseMove, MouseUp
Utilizatorul apasă taste sau foloseşte
de tastatură KeyDown, KeyPressed, KeyUp funcţia SendKeys pentru transmiterea unei
acţiuni
Un raport este tipărit sau este formatat în
de tipărire Format, Print, Retreat
vederea tipăririi
Creat de Access la intervale de timp
de ceas Timer
definite de utilizator
130
Apare odată cu o eroare şi dă posibilitatea
de eroare Error
utilizatorului să o trateze
Cel mai important obiect din ADODB este obiectul Connection care defineşte
o sesiune de lucru pentru un utilizator al unei date particulare. Cum am mai spus, se
pot folosi în principal, informaţii din baze de date Access, SQL Server sau MSDE.
Pentru a ne conecta la baza de date, Data Source=C: \My
Documents\bdNelu.accdb, trebuie scris următorul cod:
'---------------------------------------
Public Sub conexiune()
Dim con As ADODB.Connection
' realizează o conectare
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;" _
& "Data Provider=Microsoft.ACE.OLEDB.12.0"; & _
"Data Source=C:\My Documents\bdNelu.accdb "
con.Open
MsgBox con.ConnectionString
set con= Nothing
End Sub
132
Deci trebuie declarată o variabilă pentru obiectul conexiune. Apoi trebuie
precizat conţinutul iniţial al şirului conexiunii, care conţine valorile pentru
proprietăţile conexiunii. Pentru a realiza conexiunea sunt obligatorii specificarea
proprietăţii Provider, Data Source şi User.
Însă de cele mai multe ori se lucrează cu datele din baza de date curentă. În
consecinţă codul se simplifică astfel:
'---------------------------------------
Public Sub conexiune()
Dim con As ADODB.Connection
' realizează o conectare
Set con = CurrentProject.Connection
MsgBox con.ConnectionString
set con= Nothing
End Sub
Până aici s-a prezentat doar prima chestiune care trebuie rezolvată în lucrul cu
datele. Obiectul care conţine informaţiile care vor fi procesate de rutine este
mulţimea de înregistrări (în limba engleză: RecordSet).
Pentru iniţializarea lucrului cu o mulţime de înregistrări se utilizează
următoarea secvenţă de instrucţiuni:
Dim mî as RecordSet
set mî = New ADODB.RecordSet
mî.Open Sursă, Conexiune, TipCursor, TipBlocare, Opţiuni
"mî" este numele variabilei prin care se face referire la mulţimea de î nregistrări,
iar ultima linie, bineînţeles că este prezentată ca ca sintaxă pe care o vom explica.
Parametrul "sursă" poate fi numele unui tabel sau numele unei interogări,
comenzi, intucţiuni SQL sau procedură ce are rezultat o mulţime de înregistrări.
Despre "conexiune" am scris puţin înainte.
Parametrul "tipcursor" poate fi specificat cu următoarele constante
predefinite: adOpenDynamic, adOpenKeyset, adOpenStatic sau adOpenForwardonly.
Diferenţele între aceste tipuri de cursoare apar de la modul cum e tr atată înregistrarea
referită la un moment dat, deplasarea prin înregistrări sau posibilitatea de a se seziza
modificările făcute de alţi utilizatori. Numele lor sugerează oarecum despre ce e
vorba.
133
Parametru "tipblocare" se referă la modul de tratare a î nregistrărilor pe timpul
editării lor, posibilitatea de acces la ele a altor utilizatori. Constantele predefinite
care stabilesc acest parametru sunt: adLockReadOnly, adLockPessimistic,
adLockOptimistic şi adLockBatchOptimistic.
Implicit ultimii doi parametrii sunt daţi de constantele: adOpenForwardonly şi
respectiv adLockReadOnly.
Pentru parametrul opţiuni se pot folosi următoarele constante VB: adCmdText,
adCmdTable, adCmdTableDirect, adCmdStoredProc, adCmdUnknown şi adCmdFile
care precizează modul cum este evaluat parametrul "sursă".
Acestea fiind precizate putem să trecem la prezentarea unor exemple mai
edificatoare.
134
End Sub
Acest exemplu
afişează valorile câmpurilor
înregistrărilor unui tabel
(dacă există câmpuri de tip
obiect OLE rezultatul e
imprevizibil). Apelul poate
fi făcut din fereastra
Immediate, acolo unde va
afişa:
135
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.Open "persoane", con, adOpenStatic, _
adLockOptimistic, adCmdTable
.Find "marca=50"
If Not .Eof Then
sirdate=""
For i = 0 To .Fields.Count - 1
sirdate =sirdate & .Fields(i).Value
Next
Dim rasp
rasp = InputBox("articolul cautat este" + vbCr _
+sirdate + vbCr + "m- modificare, d -stergere", "m")
If lCase(rasp)="d" Then
.Delete
Else
.Fields("Marca")=InputBox( _
"Altă valoare pentru Marca")
.Fields("Nume")=InputBox( _
"Altă valoare pentru Nume")
.Update
End If
End If
End With
rs.close
con.close
set rs=nothing
set con=nothing
End Sub
136
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
with rs
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.Open "persoane", con, adOpenStatic, _
adLockOptimistic, adCmdTable
.AddNew
.Fields("Marca")=InputBox( _
"Altă valoare pentru Marca")
.Fields("Nume")=InputBox( _
"Altă valoare pentru Nume")
.Update
End With
rs.close
con.close
set rs=nothing
set con=nothing
End Sub
137
tbl.Columns.Append "Nume", adVarWChar, 50
cat.Tables.Append tbl
Debug.Print "Table 'MyTable' is added."
'eliberarea memoriei obiectelor
Set cat.ActiveConnection = Nothing
Set cat = Nothing
Set tbl = Nothing
Exit Sub
CreateTableError:
Set cat = Nothing
Set tbl = Nothing
Odată create tabelele, structura lor poate fi modificată. Se pot adăuga noi
coloane, se pot şterge dintre cele existente se pot modifica dintre atributele lor, etc.
ADOX conţine obiecte şi pentru creare sau modificare de indecşi, creare sau
modificare de interogări, creare de indecşi. În fine, următorul exemplu modifică
comanda SQL a unei interogări stocate în baza de date:
138
'---------------------------------------
Public Sub ADOXSchimbSQL()
Dim cat As New ADOX.Catalog
Dim cmd As New ADODB.Command
' Deschiderea catalogului de tabele ale bazei de date
cat.ActiveConnection = CurrentProject.Connection
' Accesarea interogării
Set cmd = cat.Procedures(1).Command
' Modificarea comenzii
cmd.CommandText = "SELECT * FROM ANG;"
' Salcvarea noii comenzi
Set cat.Procedures(1).Command = cmd
Set cat = Nothing
Set cmd = Nothing
End Sub
139
CAPITOLUL VII. ÎNDRUMAR PENTRU REALIZAREA
PROIECTULUI LA DISCIPLINA „BAZE DE DATE”
7.1. Cerinţe minimale
Studenţii anului II, de la specializările „Finanţe şi bănci‖ şi „Management‖,
trebuie să întocmească, la finalul semestrului I, anul II de studii, la disciplina „Baze
de date‖, un proiect prin care să demonstreze posibilitatea folosirii produsului MS
ACCESS în gestionarea bazelor de date.
Pentru disciplina „Baze de date‖, nota finală obţinută de un student este
compusă din:
► 1 punct din oficiu;
► Max. 3 puncte pentru activitatea din timpul semestrului la această
disciplină;
► Max. 3 puncte pentru susţinerea proiectului;
► Max. 3 puncte pentru susţinerea examenului final.
140
Cerinţele prezentate mai sus pentru baza de date şi pentru documentaţia
aferentă sunt obligatorii şi minimale.
141
Tema problemei de rezolvat este aleasă de student, nu neapărat din listă şi se
va aprecia originalitatea. Este recomandabil, ca studenţii să-şi aleagă teme cu care au
avut tangenţă în experienţa lor profesională.
Bazele de date vor fi relaţionale, normalizate măcar până la forma normală 3
şi vor conţine informaţii neredundante.
b. Interogările
c. Formularele
Formularele
create trebuie să
conţină posibilităţi de
introducere a tuturor
datelor definite în
142
tabele.
Atunci când e necesar să se introducă date prin exploatarea unor relaţii dintre
tabele, se va apela la tehnica modulelor Visual Basic, a interogărilor (de tip join) sau
a subformularelor.
Mai mult de jumătate din numărul formularelor din proiect, trebuie să nu fie
create cu expertul.
d. Rapoartele
Rapoartele trebuie să poată lista toate informaţiile din tabele, sub diferit e
forme, în diferite moduri ordonare sau de grupare.
Mai mult de jumătate din numărul rapoartelor din proiect, trebuie să nu fie
create cu expertul.
Atunci când e necesar listeze date prin exploatarea unor relaţii dintre tabele,
se va apela la tehnica interogărilor (de tip join).
Cel puţin într-un raport, se vor plasa câmpuri care vor conţine valori rezultate
ale funcţiilor de grupare.
143
7.3. Documentaţia
Studentul va prezenta împreună cu baza de date o documentaţie a conţinutului,
listată şi îndosariată (cca 10-15 pagini), structurată pe următoarele secţiuni:
► motivaţia lucrării;
► descrierea datelor şi variabilelor utilizate;
► descrierea machetelor pentru formularele de introducere de date;
► descrierea machetelor pentru rapoartele de listare a informaţiilor
conţinute în tabele;
► listingul şi explicaţia diverselor interogări sau module utilizate;
► concluzii trase după realizarea proiectului şi propuneri de perfecţionare.
144
ACADEMIA COMERCIALĂ SATU MARE
PROIECT LA DISCIPLINA
BAZE DE DATE
Folosirea MS ACCESS
în gestionarea unei baze de date
conţinutul bazei de date
.
Autor student:
numele studentului, anul şi specializarea
145
Camp Tip Nul Explicaţii despre conţinut
întreg Numărul legitimaţiei are 6 cifre, e necesară o variabilă de tip
NrCarnet Da
lung Întreg lung, valori pozitive
Numele sportivului, nu depăşeşte 50 caractere, cu litere mari,
text
Nume Da fără diacritice. Dacă sunt mai multe cuvinte, între ele se
(50)
intercalează cratimă
Toate prenumele pe care le are sportivul, nu depăşeşte 70
text
Prenume Da caractere, cu litere mari, fără diacritice. Dacă sunt mai multe
(70)
cuvinte, între ele se intercalează cratimă
Una dintre valorile ―M‖ pentru sexul masculin, sau respectiv,
Sex text (1) Da
―F‖ pentru sexul feminine
Nascut date Da Data neşterii sportivului, în format zz.ll.aaaa
Titlul sau categoria sportivă. Pentru sportivii de sex
masculine sunt posibile valorile: ―NC‖ – neclasificat, ―III‖ –
categoria a III-a, ―II‖ – categoria a II-a, ―I‖ – categoria a I-a,
Titlu text (3) Da ―CM‖ – candidat de maestru, ―M‖ –maestru, ―FM‖ – maestru
FIDE, ―MI‖ – maestru internaţional, ―GM‖ – mare maestru
internaţional. Pentru sportive sunt posibile valorile
corespunzătoare: ―WCM‖, ―WM‖, ―WFM‖, ―WMI‖, ―WGM‖.
Coeficientul valoric al sportivului. Poate lua valori între 401
şi 1400, când e calculat de federaţia naţională, sau valori
CIV întreg Da între 1401 şi 2900, când e calculat de federaţia internaţională,
Valorile pot fi stocate într-un număr întreg pozitiv (pe doi
octeţi)
Numele întreg (inclusive calea de directoare) a fişierului acre
text
Poza Da conţine imagine pozei sportivului. E recomandat să existe un
(100)
camp cu lărgime considerabilă.
Codul acordat de federaţia internaţională pentru sportiv. Are
întreg
IdFide Da 7 cifre, e necesară o variabilă de tip Întreg lung, valori
lung
pozitive.
146
Machetele corespunzătoare formularelor (sau rapoartele) vor fi captate cu
ajutorul tastei „PrintScreen‖ şi inserate în documentaţie. Se vor prezenta toate
controalele incluse în fiecare formular (sau raport). Se vor prezenta toate
proprietăţile, metodele şi evenimentele la care s-a intervenit cu modificări, la nivel
global pentru formular (sau raport), sau pentru fiecare control în parte.
De exemplu:
Primul formular este destinat, după cum are şi numele, completării tabelului
CATALOG. Este un formular simplu, finisările care s -au făcut sunt:
scoaterea butoanelor de navigare;
introducerea unui combobox pentru selectarea articolelor după nume;
introducerea a 4 butoane de comenzi pentru ştergere, salvare,
restaurare şi adăugare articole.
De exemplu:
Interogarea următoare listează numele şi salariul şoferilor din ta belul „Ang‖:
Select NumeA, Sal from Ang where fnc=”SOFER”
Extragere SOFERI
numeA sal
Popan 800
Matus 1100
Chivu 950
147
Dacă proiectul conţine module VisualBasic, sursele acestora vor fi listate şi
explicate.
148
BIBLIOGRAFIE
149