Sunteți pe pagina 1din 216

Cornel GIULVEZAN

Gabriela MIRCEA
Diana TÂRNĂVEANU

Timişoara, 2008
2
REFERENŢI ŞTIINŢIFICI:
Prof. univ. dr. Mihaela MUNTEAN
Prof. univ. dr. Ioan BANDU

3
4
5
CUPRINS

CUPRINS..................................................................................................5
OBIECTIVELE CURSULUI..................................................................9
PARTEA TEORETICĂ.........................................................................11
Cap.1. INTRODUCERE........................................................................11
1.1. Rezumatul capitolului...................................................................11
1.2. Conceptele de Dată şi Fişier.........................................................11
1.3. De ce baze de date?.......................................................................15
1.4. Autoevaluare.................................................................................17
Cap.2. BAZE DE DATE – CONCEPTE..............................................19
2.1. Rezumatul capitolului...................................................................19
2.2. Conceptul de bază de date............................................................19
2.3. Modelarea baze de date.................................................................21
2.4. Obiectivele datelor în baze de date...............................................24
2.5. Sisteme de gestiune a bazelor de date...........................................27
2.6. Funcţiunile sistemului de gestiune al bazei de date......................30
2.7. Componentele unui mediu SGBD................................................32
2.8. Limbaje pentru baze de date.........................................................34
2.9. Proiectarea bazei de date...............................................................35
2.10. Modelul de date relaţional..........................................................39
2.11. Întrebări teoretice de auto-evaluare.............................................48
CAP.3. MICROSOFT ACCESS...........................................................51
3.1. Rezumatul capitolului...................................................................51
3.2. Noţiuni generale privind bazele de date ACCESS........................51
3.2. Tipuri de fişiere în ACCESS.........................................................55
3.3. Lucru cu ACCESS........................................................................55
3.4. Noţiuni practice în ACCESS.........................................................57
3.5. Întrebări teoretice de auto-evaluare..............................................81
CAP.4. LIMBAJUL VISUAL BASIC PENTRU APLICAŢII...........83
4.1. Rezumatul capitolului...................................................................83
4.2. Macro-comenzi sau VBA?............................................................83
4.2. Mediul de dezvoltare pentru VBA (IDE)......................................84
4.3. Configurarea editorului VBA.......................................................89
4.4. Completarea automată a instrucţiunilor în editorul VBA.............89
4.5. Modelul obiect din ACCESS........................................................91
4.6. Principiile utilizării obiectelor şi colecţiilor.................................94
4.7. Crearea de referinţe pentru obiecte...............................................98
4.8. Crearea unei proceduri în VBA....................................................98

6
4.9. Elementele limbajului VBA........................................................100
4.9.1. Variabile, constante şi tipuri de date....................................100
4.9.2. Structurile de decizie şi selecţie...........................................107
4.9.3. Operatori în VBA.................................................................112
4.9.4. Instrucţiuni utilizate cu obiecte în VBA..............................114
4.9.5. Regulile de scriere a codului sursă VBA.............................120
4.9.6. Numele procedurilor, variabilelor şi constantelor................121
4.9.7. Clase de obiecte în VBA......................................................122
4.9.8. Exploratorul de obiecte în ACCES......................................127
4.9.9. Gestionarea evenimentelor în ACCESS..............................130
4.9.10. Proprietăţi şi metode ale obiectelor ACCESS....................137
4.10. Recomandări pentru optimizarea codului VBA....................146
4.11. Întrebări de auto-evaluare.....................................................146
CAP.5. LIMBAJUL SQL.....................................................................149
5.1. Rezumatul capitolului.................................................................149
5.2. Prezentarea limbajului SQL........................................................149
5.3. Limbajul SQL ŞI VBA...............................................................150
5.4. Descrierea limbajului SQL.........................................................151
5.5. Exemple de utilizare a interogărilor SQL...................................158
5.6. Teste de auto-evaluare.................................................................160
CAP. 6. MANIPULAREA OBIECTELOR WORD ŞI EXCEL ÎN
VBA.......................................................................................................161
6.1. Rezumatul capitolului.................................................................161
6.2. Tehnologia OLE..........................................................................161
6.3. Comunicarea cu Word.................................................................163
6.4. Comunicarea cu EXCEL............................................................168
6.5. Protocolul DDE...........................................................................172
6.6. Întrebări de auto-evaluare...........................................................176
PARTEA PRACTICĂ..........................................................................177
Cap.7. Aplicaţii practice rezolvate......................................................177
7.1. Rezumatul capitolului.................................................................177
7.2. Aplicaţia 1...................................................................................177
7.2.1. Aplicaţie propusă.....................................................................184
7.2.2. Aplicaţie propusă.....................................................................185
7.3. Aplicaţia 2...................................................................................185
7.3.1. Aplicaţie propusă:....................................................................192
7.4. Aplicaţia 3...................................................................................192
7.4.1. Aplicaţie propusă.....................................................................199
7.5. Aplicaţia 4...................................................................................199
7.5.1. Aplicaţie propusă.....................................................................202
7.6. Aplicaţia 5...................................................................................202

7
7.6.1 Aplicaţie propusă......................................................................206
GLOSAR DE TERMENI....................................................................207
Bibliografie...........................................................................................213

8
9
OBIECTIVELE CURSULUI

Evoluţia diferitelor metode şi tehnici de organizare a datelor, pe


suporturi tehnice adresabile (memorii externe), a fost determinată de necesitatea
de a avea un acces cât mai rapid şi mai uşor la un volum cât mai mare de date.
Sistemele de gestiune a bazelor de date reprezintă modalitatea
principală de structurare şi organizare a datelor în cadrul sistemelor informatice.
Obiectivul unei bazei de date este de a separa descrierea datelor faţă de
programele de aplicaţii, ajungîndu-se la abstractizarea datelor memorate.
Obiectivele cursului sunt însuşirea noţiunilor fundamentale şi
conceptelor de bază din domeniu, precum şi capacitatea de a iniţia, proiecta şi
implementa o bază de date. Ne propunem să răspundem la întrebările: ce este o
bază de date, cum este structurată aceasta, cum se proiectează?
Pentru aceasta considerăm necesare:
 înţelegerea impactului tehnologiilor informaţiei şi a comunicaţiilor
(TIC) în societate, a conexiunilor dintre informatică şi alte obiecte de
studiu, precum şi identificarea posibilităţilor de utilizare a SGBD-urilor
în disciplinele specializării de bază;
 familiarizarea cu instrumentele oferite de sistemele de gestiune a
bazelor de date (tabele, formulare, interogări, rapoarte, macro-uri,
proceduri VBA);
 dezvoltarea abilităţii de a crea o aplicaţie user-friendly, cu o interfaţă
grafică atractivă;
 iniţierea în limbajul SQL – Structured Query Language;
 dezvoltarea unei culturi informatice.

10
11
PARTEA TEORETICĂ

CAP.1. INTRODUCERE

1.1. Rezumatul capitolului

Organizarea datelor în vederea prelucrării pe calculator este o activitate


cel puţin la fel de importantă ca şi scrierea progamelor. În acest prim capitol vor
fi prezentate noţiuni legate de modul de organizare a datelor, plecând de la
conceptele de bază de „dată” şi „fişier”, prezentând o clasificare a datelor, a
tipurilor de structuri de date existente şi a organizării datelor în fişiere.
Sistemele informatice pot fi realizate fie cu ajutorul unor aplicaţii care
utilizează fişiere independente sau integrate, fie cu ajutorul unor aplicaţii care
accesează o structură complexă numită bază de date. Sistemului informatic are
două componente principale şi anume datele şi programele, acestea fiind într-o
strânsă interdependenţă. O bază de date are mijloace proprii pentru crearea şi
evoluţia în timp a structurii, realizând o departajare între datele stocate şi
programele care le accesează.

1.2. Conceptele de Dată şi Fişier

Apariţia şi dezvoltarea rapidă a bazelor de date se datorează unei


multitudini de factori de natură tehnică şi socio-economică. Creşterea
necesarului şi implicit a consumului de informaţie a avut ca prim rezultat
creşterea cantităţii de informaţie stocată pe suporturi de memorare externă şi
optimizarea tehnicilor de stocare şi regăsire a informaţiei.
Chiar de la primele aplicaţii informatice realizate cu ajutorul
calculatorului s-a pus problema utilizării unor tehnici eficiente de organizare,
stocare şi regăsire a datelor. O informaţie codificată şi stocată pe
un suport de memorare reprezintă ceea ce numim „dată”.
Din punctul de vedere al prelucrării de calculator, în cadrul aplicaţiilor, datele se
definesc cu ajutorul unui nume (identificator), a atributelor pe care le are şi de o
valoare. Rezolvarea problemelor concrete cu ajutorul calculatorului presupune
definirea unui algoritm adecvat pentru rezolvarea fiecărei probleme. Un
algoritm este definit ca fiind o succesiune finită, corect
definită şi fără ambiguităţi de operaţii elementare care se

12
aplică asupra unei mulţimi de date de intrare pentru a se
obţine un rezultat. Algoritmul trebuie sa conducă la acelaşi rezultat de
fiecare dată când se aplică asupra aceleaşi mulţimi de date de intrare.
Calculatorul prelucrează doar date reprezentate cu ajutorului unui cod binar,
motiv pentru care datele sunt din punctul de vedere al calculatorului şiruri de
cifre binare, de biţi. Semnificaţia şirurilor de biţi depinde de codul pentru
codificarea informaţiei, de modul de utilizare a acesteia de către programator în
cadrul aplicaţiei informatice şi de limbajul de programare folosit. Fiecare limbaj
de programare are reguli specifice pentru definirea şi utilizarea datelor.
Organizarea datelor reprezintă procesul de identificare, definire,
evaluare, structurare şi memorare a informaţiilor, în cadrul unui sistem
informaţional. Prin organizarea datelor se realizează gruparea datelor în colecţii
de date omogene, se stabilesc care sunt relaţiilor dintre date, dintre elementele
colecţiilor şi dintre colecţii, precum şi modul de stocare a datelor pe suportul
fizic de memorare.
Datele pot fi clasificate în funcţie de modul de
alocare al memoriei, astfel existând date de tip static şi
date de tip dinamic. La datele de tip static, memoria este
alocată la începutul execuţiei programului, rămânând
ocupată de respectivele date pe întreaga durată a
execuţiei, pe când la datele de tip dinamic memoria este
alocată în momentul execuţiei programului, existând
instrucţiuni care permit alocarea memoriei atunci când
datele sunt necesare şi alte instrucţiuni care permit
eliberarea respectivei zone de memorie în momentul în
care datele nu mai sunt necesare.
Datele trebuie privite sub două aspecte: fizic şi
logic. Din punct de vedere fizic, în cazul stocării şi
prelucrării cu ajutorul calculatorului datele sunt şiruri de
biţi. Din punct de vedere logic, datele au o anumită
semnificaţie şi sunt de mai mult tipuri, funcţie de
semnificaţia lor.
Datele pot fi simple (elementare), respectiv
compuse (structurate).
Datele simple (elementare) sunt date independente
unele de altele din punctul de vedere fizic, adică al
reprezentării pe suportul de memorare, chiar dacă din

13
punct de vedere logic există interdependenţe. Tipul de
dată precizează care sunt valorile datei. Dacă pe
parcursul procesului de prelucrare data păstrează aceeaşi
valoare este numită dată constantă. Pentru datele
constante se utilizează ca identificator valoarea acestora.
Dacă valorile datei sunt modificate în timpul procesului de
prelucrare datele se numesc date variabile sau variabile.
În mod uzual pentru date elementare se folosesc ca tipuri
de dată:
- tipul numeric – include numerele întregi, reale si
complexe având diferite reprezentări (virgulă fixă,
virgulă mobilă, precizie simplă, precizie dublă, etc.).
Asupra lor se pot realiza operaţii de adunare,
scădere, înmulţire, împărţire etc.;
- tipul logic (boolean) – utilizat pentru reprezentarea
valorilor logice “Adevărat”, respective “Fals” cu
ajutorul unor valori numerice, asupra acestora
putându-se efectua operaţii logice precum negaţia,
conjuncţia, disjuncţia;
- tipul caracter (text, string) – permite reprezentarea
unor succesiuni de caractere folosind mulţimi de
simboluri alfanumerice, reprezentarea pe suporturile
de memorare utilizând codul ASCII. Asupra acestora
se pot defini operaţii de căutare, concatenare,
ordonare;
- tipul dată calendaristică, timp (Date, Time,
DateTime) – reprezentarea internă a acestora
făcându-se de regulă cu ajutorul unor valori
numerice.
Datele compuse numite şi structuri de date sunt
colecţii (mulţimi) de date elementare între care există
relaţii structurale, omogene din punct de vedere al
descrierii şi al prelucrării. Componentele unei structuri
formează un întreg astfel încât prelucrarea se poate face
atât la nivelul structurii de date cât şi la nivelul fiecărei
componente, care poartă numele de câmp.

14
Majoritatea limbajelor de programare operează cu
două categorii de structuri: structuri interne şi structuri
externe.
Structurile de date interne se referă la modul de
amplasare în memoria internă a datelor elementare
aparţinând unei colecţii. În această categorie sunt incluse
structurile de tip tablou (masiv), înregistrare (articol),
mulţime, lista şi arbore.
Structurile externe se referă la modul de memorare a datelor pe
suporturi de memorare externă. Din această categorie fac parte fişierele şi
bazele de date.
Datele, văzute iniţial ca şiruri de caractere, care
reproduceau caracteristicile unor obiecte, fenomene,
fapte, evenimente, respectiv concepte din lumea reală,
datorită factorului de repetare au fost organizate în
structuri care poartă numele de fişier. Fişierul este o
structură care grupează date dintr-un anumit domeniu
care au anumite caracteristici comune. Fişierele pot fi cu
organizare definită, respectiv nedefinită. Accesul la datele ce
formează fişierul depinde de structura ce defineşte fişierul, adică de organizarea
datelor şi de suportul de memorare. Există doi parametrii ce măsoară
performanţele accesului la date: cantitatea de date transferată şi timpul de
răspuns. Suportul de memorare poate fi adresabil sau nu, poate fi reutilizabil sau
nu, poate fi magnetic, optic sau de altă natură. Accesul la date poate fi
secvenţial sau direct. Accesul direct este permis doar de suporturile de
memorare adresabile, adică acele suporturi de memorare care permit accesul
direct pe baza unei adrese la o anumită zonă de pe suportul de memorare,
numită locaţie sau bloc. Principiile de organizare a fişierelor şi tehnicile de
regăsire a datelor stocate în fişiere reprezintă o transpunere în cadrul aplicaţiilor
informatice a tehnicilor utilizate în sisteme de prelucrare manuală a informaţiei.
Fişierul fiind o colecţie de date trebuie considerat ca având două structuri
distincte suprapuse, şi anume, o structură fizică şi una logică, cea logică fiind
dată de semnificaţia datelor. Din punct de vedere fizic fişierul este o colecţie
finită de înregistrări fizice, iar din punctul de vedere al semnificaţiei, o colecţie
de înregistrări logice, numite şi articole.
Fişierul ocupă un anumit spaţiu pe suportul de memorare extern, spaţiul
alocat putând fi continuu sau nu. Componentele sistemului de operare

15
gestionează în mod transparent alocarea fizică pe suportul de memorare externă
precum şi accesul la fişiere.
Din punctual de vedere al sistemului de operare
fişierul are un nume şi eventual o extensie de fişier, are
asociată o mulţime de atribute care depind de sistemul de
operare (Read Only, Hidden, System, Archive, etc); informaţii
privind momentul creării, al ultimei modificări, al ultimei accesări, privind
dimensiunea ca număr de octeţi etc. Extensia oferă sistemului de operare
informaţii privind conţinutul fişierului.
Din punctul de vederea al aplicaţiilor fişierul are un conţinut
informaţional, un anumit mod de organizare, permite unul sau mai multe
moduri de acces etc.
Datele într-un fişier sunt structurate în înregistrări. Organizarea
înregistrărilor într-un fişier poate fi privită atât ca organizare logică cât şi ca
organizare fizică.
Din punctul de vedere al organizării fizice datele ce formează fişierul
sunt structurate în înregistrări fizice. Organizarea fizică reprezintă o organizare
internă care depinde de resursele fizice ale calculatorului şi este supusă rigorilor
sistemului de operare. Înregistrarea fizică reprezintă numărul de octeţi care se
transferă între memoria internă a calculatorului şi suportul de memorare extern
(scriere), respectiv de pe suportul extern în memorie (citire). Pentru optimizarea
transferului se folosesc zone de memorie numite zone tampon, sau buffer, prin
intermediul cărora se transferă mai multe înregistrări fizice vecine cu
înregistrarea de care este nevoie.
Din punct de vedere al organizării logice datele
conţinute într-un fişier sunt structurate în înregistrări
logice. În principiu, un fişier conţine acelaşi tip de înregistrări logice, dispuse
într-o anumită ordine. Mulţimea înregistrărilor logice conţinute într-un fişier
reprezintă o mărime finită şi caracterizează, în mod direct, mărimea oricărui
fişier.
Din punct de vedere al utilizatorului, înregistrarea logică reprezintă şi
unitatea de acces la datele conţinute într-un fişier. Organizarea logică a
înregistrărilor în fişier, ca mod de organizare externă a datelor, este impusă de
natura aplicaţiilor şi cerinţele de prelucrare.
Datele conţinute într-o înregistrare logică caracterizează o entitate
informaţională, se referă la o clasă de obiecte, fenomene, procese etc., în timp
ce datele ce formează o înregistrare fizică caracterizează o unitate de stocare
fizică pe suportul de memorie a calculatorului. Utilizatorul operează cu
concepte, privind organizarea datelor, la nivel logic, în vreme ce sistemul de

16
operare stochează şi manipulează datele, pe suportul de memorie, numai la nivel
de înregistrare fizică. În funcţie de natura şi complexitatea datelor, lungimea
unei înregistrări logice poate să corespundă sau nu cu lungimea unei înregistrări
fizice. O înregistrare fizică poate să conţină mai multe înregistrări logice,
respective o înregistrare logică poate fi stocată în mai multe înregistrări fizice.

1.3. De ce baze de date?

Totalitate informaţiilor care definesc şi menţin în funcţiune un sistem


real formează sistemul informaţional al sistemului real, iar în cadrul sistemului
informaţional putem delimita sistemul informatic, care reprezintă acea parte a
sistemului informaţional în care informaţia este stocată şi procesată cu ajutorul
tehnicii de calcul. Sistemele informatice pot fi realizate fie cu ajutorul unor
aplicaţii care utilizează fişiere independente sau integrate, fie cu ajutorul unor
aplicaţii care accesează o structură complexă numită bază de date. Baza de date
are mijloace proprii pentru crearea şi evoluţia în timp a structurii. Organizarea
datelor în fişiere aparţinând fiecărei aplicaţii reprezintă o metodă rigidă care are
mai multe dezavantaje pentru utilizatori. Cel mai mare dezavantaj este acela că
modificările în structura unui fişier obligă la modificarea tuturor programelor
care utilizează fişierul a cărui structură a fost modificată. Din punctul de vedere
al utilizatorului sistemele bazate pe fişiere reprezintă un progres extraordinar
faţă de sistemele manuale, totuşi acestea fiind dependente de programele de
aplicaţie, orice interogare necesită scrierea unui program şi integrarea acestuia
în sistemul implementat, obţinerea de noi informaţii spontan fiind practic
imposibilă.
Realizarea sistemelor informatice cu ajutorul aplicaţiilor independente
presupune ca fiecare astfel de aplicaţie să definească şi să întreţină propriile
structuri de date organizate de regulă în fişiere. În acest caz are loc separarea şi
izolarea datelor, precum şi legarea acestora de fiecare aplicaţie. Datorită
modului de abordare descentralizat are loc o creştere a redundanţei datelor,
adică datele vor fi multiplicate necontrolat. Redundanţa reprezintă o
proprietate a unei colecţii de date care se referă la faptul
că unele componente ale colecţiei de date sunt memorate
de mai multe ori pe suportul de memorare. Multiplicarea datelor
implică costuri suplimentare şi în plus, creşte riscul alterării integrităţii datelor,
adică apariţia de neconcordanţe. În cazul sistemelor reale complexe creşterea
redundanţei are ca efect apariţia de erori frecvente datorate neconcordanţei

17
informaţiilor memorate în fişiere aparţinând unor aplicaţii diferite, rezultând
costuri de actualizare mărite corespunzător.
Sistemului informatic are două componente principale şi anume datele
şi programele, acestea fiind într-o strânsă interdependenţă.
În codul program al fiecărei aplicaţii creat într-un limbaj de programare
clasic se definesc structurile de date, atât cele interne ale aplicaţiei respective
cât şi structura logică a fişierelor utilizate de aplicaţia respectivă, împreună cu
modul de acces la datele stocate în aceste fişiere. În cazul în care structura
logică a unei înregistrări este modificată prin adăugarea unui câmp, sau
schimbarea dimensiunii unui câmp, toate programele care operează cu fişierul a
cărui structură a fost modificată trebuie actualizate. De asemenea orice
modificare a semnificaţiei, respectiv a modului de reprezentarea a informaţiei
respective în sistemul real impune modificarea tuturor aplicaţiilor care folosesc
informaţia respectivă, ceea ce reprezintă în cazul sistemelor informatice
complexe un efort de programare considerabil, precum şi costuri ridicate.
Această caracteristică a sistemelor bazate pe fişiere este cunoscută sub
denumirea de dependenţă program-date. Deoarece structura fişierului este
încorporată în programele de aplicaţie, ea este dependentă de limbajul în care
sunt scrise programele în este realizată aplicaţia respectivă.
Atunci când datele sunt izolate în fişiere aparţinând unor aplicaţii
independente, accesarea datelor de care este nevoie la un moment dat se
realizează cu mare greutate deoarece programatorul trebuie să sincronizeze
prelucrarea simultană a tuturor fişierelor aplicaţiilor, dificultatea crescând odată
cu numărul de fişiere. Structura fişierelor este încorporată în programele de
aplicaţie, fiind dependentă de limbajul de programare folosit pentru fiecare
aplicaţie. Mai mult chiar, fiecare interogare a fondului de date stocate în
fişierele independente se realizează doar prin intermediul programelor de
aplicaţie, interogarea fiind dependentă de programatorul care a realizat aplicaţia
şi chiar mai mult de limbajul de programare folosit. În sistemele complexe,
odată cu creşterea necesarului de informaţie există riscul ca satisfacerea
necesarului de informaţie prin noi programe să nu poată fi realizată într-un timp
optim. Reducerea timpului alocat analizei precum şi proiectării de noi aplicaţii
are ca rezultat obţinerea de programe inadecvate sau ineficiente pentru
îndeplinire cerinţelor utilizatorilor, de regulă cu o documentaţie limitată şi greu
de întreţinut. În astfel de condiţii securitatea datelor devine limitată, iar
integritatea datelor est practic imposibil de asigurat.
Limitele sistemelor bazate pe fişiere independente se datorează
următorilor doi factori:
- definiţia datelor este încorporată în programele de aplicaţie,

18
- controlul accesului şi cel al manipulării datelor se realizează exclusiv
prin intermediul programelor de aplicaţie.
Pentru a fi eficient un sistem informatic este necesară o nouă abordare
care să scoată în afara programelor de aplicaţie definirea, controlul şi
manipularea datelor. Aceasta se poate realiza cu ajutorul bazei de date şi a
sistemului de gestiune a bazelor de date.

1.4. Autoevaluare

1. Explicaţi:
a. Noţiunea de dată
b. Organizarea datelor
c. Date constante, date variabile
d. Noţiune de fişier
e. Tipuri de date simple
f. Date compuse
g. Redundanţa datelor
h. Înregistrare fizică şi înregistrare logică
i. Dependenţa date-program

2. Analizaţi critic noţiunile de dată elementară şi dată compusă.

19
20
CAP.2. BAZE DE DATE – CONCEPTE

2.1. Rezumatul capitolului

Baza de date realizează separarea definiţiei datelor de programele de


aplicaţie. Ne propunem o trecere în revistă a avantajelor ce decurg din
organizarea datelor în baze de date, precum şi a principalelor concepte din
teoria bazelor de date. Vom prezenta mai multe puncte de vedere legate de
definiţia bazei de date, insistând asupra principalelor caracteristici ale bazelor
de date, modelarea bazei de date, obiectivele datelor în baze de date, definiţia,
funcţiunile şi componentele unui sistem de gestiune a bazelor de date. Am
considerat necesare prezentarea conceptelor de limbaje pentru baze de date,
principalele principii pe care se bazează proiectarea bazelor de date şi modelul
de date relaţional.

2.2. Conceptul de bază de date

Pentru conceptul de bază de date există un număr foarte mare de


definiţii, adesea contradictorii, cu atât mai mult cu cât conceptul a fost în
continuă evoluţie.

Baza de date:
- reprezintă o colecţie partajată de date, între care există relaţii
logice (şi o descriere a acestor date), proiectată pentru a
satisface necesităţile informaţionale ale unei organizaţii;
- este o colecţie de date operaţionale folosite de către aplicaţiile
sistem ale unei organizaţii;
- este un ansamblu structurat de date coerent, fără redundanţă
inutilă, astfel încât aceasta pot fi prelucrate eficient de mai
mulţi utilizatori într-un mod concurent;
- reprezintă un ansamblu de date înregistrate pe suporturi
accesibile calculatorului pentru a satisface simultan mai mulţi
utilizatori de o manieră selectivă şi într-un timp oportun;
- se defineşte ca un ansamblu de date elementare sau structurate,
accesibile unei comunităţi de utilizatori.

Baza de date este un ansamblu structurat de date legate structural între


ele, un depozit de date unic definit o singură dată şi utilizat simultan de mai
mulţi utilizatori. Baza de date este o resursă comună şi partajată. Baza de date

21
conţine nu numai date ci şi descrierea acestora. Descrierea datelor este
cunoscută sub denumirea de dicţionar de date (catalog de sistem, sau meta-
date) şi reprezintă date despre date. Prin faptul ca baza de date conţine şi
descrierea datelor se realizează independenţa program - date. Baza de date
realizează separarea definiţiei datelor de programele de aplicaţie. Prin această
abstractizare a datelor devine posibilă modificarea definiţiei unei date fără a
afecta utilizatorii acesteia cu condiţia ca semnificaţia datei respective, adică
definiţia externă a acesteia, să rămână aceeaşi.
Ceea ce este important de reţinut referitor la conceptul de bază de date
este aceea că el nu poate fi definit complet decât dacă se au în vedere două
unghiuri de vedere diferite şi legătura dintre acestea:
- caracteristicile bazei de date din punctul de vedere al utilităţii în
cadrul sistemului real în care se implementează, respectiv locul şi
rolul bazei de date în cadrul sistemului informaţional-decizional,
schema externă, nivelul extern (viziunea externă);
- caracteristicile tehnice ale bazei de date, respectiv locul şi rolul
bazei de date în cadrul sistemului de prelucrarea datelor, schema
internă, nivelul intern (viziunea internă);
- legătura dintre cele două viziuni, cea externă şi cea internă este
realizată de schema conceptuală (nivelul conceptual), care are
rolul de a constitui schema logică a întregii baze de date, adică
reprezintă o imagine completă a cerinţelor organizaţiei privind
datele, fiind independentă de orice consideraţii privind stocarea.
Standardizarea în domeniul bazelor de date s-a impus de la începutul
anilor 70 impunându-se pentru baza de date trei niveluri de abstractizare, adică
trei niveluri distincte la care pot fi descrise datele. Aceasta formează o
arhitectură cu trei niveluri, cuprinzând un nivel extern, unul conceptual şi unul
intern. Pentru fiecare nivel se defineşte o schemă corespunzătoarea a bazei de
date. Obiectivul arhitecturii cu trei niveluri este separarea vederii fiecărui
utilizator asupra bazei de date de modul în care ea este reprezentată fizic.
Viziunea utilizatorului individual se numeşte vedere externă sau model
extern, la nivel extern existând o mulţime de vederi externe, de sub-scheme
externe, corespunzătoare fiecărui utilizator individual. O vedere externă poate
fi considerată ca fiind din punctul de vedere al utilizatorului individual
conţinutul bazei de date, adică ceea ce „vede” el din baza de date. Acest nivel
descrie acea parte a bazei de date care este relevantă pentru fiecare utilizator
schema externă fiind formată din mulţimea de sub-schemelor externe. Schema
conceptuală este o reprezentare a tuturor informaţiilor conţinute de baza de
date într-o formă abstractă. Ea reprezintă o viziune, o vedere a datelor aşa cum
sunt ele în realitate, fără a ţine cont de modul în care vede datele fiecare

22
utilizator. Nivelul conceptual reprezintă o vedere generală a bazei de date. Acest
nivel descrie ce date sunt stocate în baza de date şi relaţiile dintre acestea.
Pentru o bază de date există o singură schemă conceptuală. Vederea internă
precizează modul în care se memorează efectiv datele ce formează baza de date
şi este descrisă de schema internă a bazei de date. Nivelul intern este
reprezentarea fizică a bazei de date pe calculator. Acest nivel descrie cum sunt
stocate datele în baza de date precum şi metodele de acces, criteriile de
ordonare şi regăsire pe baza unor criterii de performanţă şi flexibilitate care
asigură performanţe optime. Pentru baza de date există o singură schemă
externă.
Pentru a stabili corespondenţa între fiecare schemă externă şi schema
internă, în cadrul bazei de date există mecanisme care folosesc informaţiile din
schema conceptuală. Fiecare sub-schemă externă este o imagine a schemei
conceptuale.
Trebuie să se facă distincţie între descrierea bazei de date, care
constituie schema bazei de date şi baza de date însăşi. Schema bazei de date este
definită în cursul procesului de proiectare a bazei de date, modificările
ulterioare fiind nesemnificative. Datele reale din baza de date pot fi modificate
frecvent. Mulţimea de valori concrete stocate, la un moment dat, se numeşte
instanţă a bazei de date.
Descrierea generală a bazei de date se numeşte schema bazei de date şi
vizează structurile de date, legăturile dintre date şi regulile care asigură coerenţa
datelor. Pentru o bază de date există trei tipuri diferite de scheme care sunt în
concordanţă cu nivelurile de abstractizare ale arhitecturii bazei de date.

2.3. Modelarea baze de date

Numim model de date o colecţie integrată de concepte, necesare


descrierii datelor, a relaţiilor dintre date şi a constrângerilor asupra datelor dintr-
o organizaţie. Modelul de date este o reprezentare abstractă a obiectelor şi a
evenimentelor lumii reale şi a asocierilor dintre acestea, cu ajutorul căruia se
reprezintă o organizaţie. Un model de date este definit sub trei aspecte, şi anume
o componentă structurală, care cuprinde regulile de definire a datelor, o
componentă de manipulare datelor, care defineşte tipurile de operaţii permise
asupra datelor şi o mulţime de reguli care garantează integritatea şi coerenţa
datelor. Pentru modelarea datelor la nivel conceptual şi extern se folosesc
modele de date bazate pe obiecte şi modele de date bazate pe înregistrări,
iar la nivel fizic modele de date fizice. Modelele de date bazate pe obiecte

23
utilizează conceptele: entitate, atribut şi relaţie. Cele mai cunoscute tipuri de
modele de date bazate pe obiecte sunt modelul Entitate - Relaţie, modelul
semantic, modelul funcţional şi modelul orientat spre obiecte. Modelul
Entitate – Relaţie reprezintă un model de date conceptual de nivel înalt,
neformalizat, care descrie structura bazei de date, precum şi tranzacţiile de
regăsire, respectiv de reactualizare asociate. Acest model, permite o
reprezentare a unui sistem real, grupând elementele sistemului real în entităţi şi
asocieri (legături) între entităţi. Modelul de date orientat spre obiecte extinde
definiţia conceptului entitate în sensul că se descrie atât starea prin atribute, cât
şi comportamentul prin acţiunile asociate. Obiectul încapsulează starea şi
comportamentul. Modelarea conceptuală presupune realizarea unui model de
date pentru informaţiile care există în cadrul unei organizaţii independent de
detaliile de implementare.
Analiza necesităţilor informaţionale ale unei organizaţii presupune
identificarea entităţilor, a atributelor acestora şi a relaţiilor dintre entităţi. O
Entitate (entity) este un obiect care poate fi identificat în mod distinctiv
(persoană, loc, concept, activitate, eveniment), care este semnificativ pentru
sistemul real, un obiect despre care dorim să înregistrăm informaţii. Un atribut
(attribute) este o proprietate care descrie un aspect oarecare al obiectului pe
care dorim să îl definim. Entităţile similare care pot fi descrise prin aceleaşi
atribute formează un tip de entitate (entity type), iar colecţia formată din toate
entităţile de acelaşi tip formează o mulţime de entităţi (entity set). Entitatea
este descrisă de atributele sale relevante. Fiecare atribut reprezintă o
caracteristică semnificativă, atributele având rolul de a defini conţinutul unei
identităţi. Pentru fiecare atribut există o mulţime de valori posibile, potenţiale,
care formează un domeniu de valori. Atributele pot fi simple sau compuse.
Atributul simplu are o singură componentă cu existenţă independentă. Atributul
compus este format din mai multe componente, fiecare având o existenţă
independentă. Prin valori concrete date atributelor ce definesc o entitate se
obţine o realizare, o apariţie, o instanţă a respectivei entităţi. Un atribut poate
avea o singură valoare, sau mai multe valori pentru o anumită entitate. Este
posibil ca valoarea unui atribut să fie derivabilă din valoarea unui alt atribut sau
din valorile mai multor atribute ale respectivei entităţi sau ale altor entităţi.
Numim cheie candidat atributul sau mulţimea de atribute ale unei entităţi care
identifică în mod unic apariţiile individuale ale unui tip de entitate. Un tip de
entitate poate avea mai multe chei candidat. Pe baza unor consideraţii privind
pricind caracterul unic, precum şi de structura cheilor candidat din mulţimea de
chei candidat se alege o cheie candidat care va fi numită cheie primară, iar
celelalte vor fi numire chei alternative. O cheie candidat formată din mai multe
atribute va fi numită cheie compusă.

24
Numim tip de relaţie o asociere semnificativă între tipuri de entităţi.
Un tip de relaţie are asociată o anumită funcţie. Fiecare prezenţă unic
identificabilă a unui tip de relaţie se numeşte relaţie. Numim relaţie
(relationship) o asociere, o comunicare, o corespondenţă între două sau mai
entităţi. Relaţia exprimă raportul existent între respectivele entităţi şi există doar
dacă entităţile există. O valoare a unei relaţii este o comunicare între valorile
entităţilor pe care le leagă. Entităţile implicate într-o anumită relaţie se numesc
participanţi în relaţie. O relaţie în care o anumită entitate participă mai mult
decât o dată având roluri diferite se numeşte relaţie recursivă. O relaţie este
caracterizată prin gradul relaţiei, care exprimă numărul de entităţi participante.
Din punctul de vedere al numărului de mulţimi de entităţi participante entităţile
pot fi binare, respectiv multiple. Asocierile binare sunt de trei tipuri după
numărul elementelor din fiecare dintre cele două mulţimi puse în
corespondenţă:
- asocierea unul - la - unul (one-to-one);

- asocierea unul – la - mai multe (one-to-many) şi mai multe – la -


unul (many-to-one);

- asocierea mai multe – la - mai multe (many-to-many)

Constrângerile care pot fi impuse entităţilor participante într-o relaţie


trebuie să reflecte restricţiile asupra relaţiilor, aşa cum sunt ele în sistemul real.
Există două tipuri de constrângeri asupra relaţiilor, numire constrângeri de
cardinalitate şi constrângeri de participare. Regulile care definesc
cardinalitatea sunt numite reguli de afaceri. Toate regulile de afaceri din
sistemul real trebuie identificate şi reprezentate în modelul de date. Prin

25
constrângerile de participare se stabileşte Atunci când existenţa unei entităţi
depinde de o altă entitate de care este legată printr-o relaţie spunem că există o
constrângere de participare. Constrângerea de participare poate fi totală
(obligatorie) atunci când existenţa unei entităţi necesită existenţa unei entităţi
asociate printr-o relaţie, respectiv constrângere de participare este parţială
(opţională) atunci când constrângerea nu condiţionează când existenţa entităţii.
Baza de date este o transpunere fizică, în calculator, a modelului de
date, care conţine entităţile, atributele ce definesc entităţile şi relaţiile dintre
entităţi.

2.4. Obiectivele datelor în baze de date

Datele reprezintă suportul real pentru informaţia necesară


subsistemului de decizie. Datele sunt stocate în structuri complexe
numite baze de date. Utilizarea bazelor de date în cadrul sistemelor
informatice are următoarele obiective fundamentale din punctul de
vedere al datelor:
1. Independenţa fizică – reprezintă obiectivul esenţial, şi anume,
realizarea independenţei structurilor de stocare în raport cu
structurile de date din sistemul real. În baza de date mulţimea de
date se defineşte fără a ţine cont de forma datelor în sistemul real,
luând în considerare doar accesul rapid la date cu performanţe
prestabilite. Aceasta se realizează prin asigurarea independenţei
fizice a datelor faţă de programele de aplicaţie, adică orice
modificare organizării interne a datelor şi a structurilor de
înregistrare nu va afecta programele de aplicaţie.
2. Independenţa logică – presupune că fiecare utilizator, respectiv
grup de utilizatori are o sub-schemă externă particulară proprie
fără a afecta schema generală a bazei de date. Fiecare grup poate
să cunoască doar o parte a semanticii datelor, să vadă doar o
submulţime a datelor şi numai în forma de care are nevoie.
Schema conceptuală a bazei de date fiind o sinteză a schemelor
externe nu va fi afectată de evoluţia în timp a unei sub-scheme
particulare, fiecare grup de utilizatori putând să-şi modifice
propria sub-schemă fără a afecta schema conceptuală.
3. Manipularea datelor direct de către utilizatorul final – face ca
datele să fie văzute de utilizatori independent de implementarea
datelor în baza de date şi pot manipula datele cu ajutorul unor
limbaje ne-procedurale foarte apropiate de limbajul natural.

26
Utilizatorul poate obţine informaţii din baza de date fără să
cunoască în întregime organizarea complexă a bazei de date.
Realizarea acestui obiectiv are ca rezultat îmbunătăţirea
accesibilităţii datelor şi a capacităţii de răspuns. Utilizatorul va
putea accesa baza de date cel mai adesea prin intermediul unei
interfeţe prietenoase în asociere cu un limbaj ne-procedural, care
permit un dialog simplu şi eficient pentru actualizarea şi
exploatarea bazei de date. Utilizatorii nu cunosc structura întregii
baze de date, dar pot, prin utilizarea un limbaj apropiat de
limbajul natural să acceseze procedurile de actualizare, interogare
şi afişarea datelor din baza de date. Sistemul informaţional are o
mult mai mare funcţionalitate potenţială deoarece prin utilizarea
unor instrumente adecvate devine posibilă interogarea ad-hoc a
colecţiei de date de către utilizatorul final, consumatorul de
informaţie, eliminându-se astfel intermediarul, adică personalul
calificat care are menirea de a crea aplicaţia informatică.
4. Asigurarea unei redundanţe minime şi controlate a datelor –
este al doilea obiectiv major al organizării datelor în baze de date.
Aceasta înseamnă că se urmăreşte pe cât posibil ca fiecare dată să
apară numai o singură dată în baza de date, indiferent de numărul
de utilizatori care o accesează . Duplicarea datelor se păstrează
doar pentru a asigura coerenţa bazei de date, redundanţa, trebuie
redusă la minim şi menţinută sub control. Redundanţa minimă se
asigură prin tehnicile de proiectare a bazei de date.
5. Creşterea cantităţii de informaţii disponibile – prin stocarea în
baza de date a datelor generate de un departament al unei
organizaţii devine posibilă accesarea lor de toţi membrii
organizaţiei. Prin utilizarea bazei de date, aceasta fiind o colecţie
unică de date împreună cu legăturile logice existente între date,
utilizatorul poate obţine toate datele legate logic de o anumită
dată pe care acesta o foloseşte. Prin integrarea datelor devine
posibil accesul la date pentru toţi membrii unei organizaţii pentru
care o anumită date este semnificativă.
6. Coerenţa şi integritatea datelor – coerenţa datelor se realizează
prin verificarea tuturor dependenţelor existente între date în
sistemul real. Consistenţa datelor este asigurată prin faptul că
actualizarea datelor va fi percepută de fiecare utilizator al bazei
de date nu doar de utilizatorii care au realizat actualizarea în plus
datorită unicităţii datei stocate în baza de date orice actualizare a
valorii sale trebuie efectuată o singură date, iar noua valoare va fi

27
disponibilă instantaneu pentru toţi utilizatorii. Integritatea datelor
se referă la validarea şi coerenţa datelor stocate şi se realizează
prin unicitatea datelor, precum şi prin validarea datelor introduse
sau actualizate în baza de date. Informaţia trebuie să satisfacă
constrângeri statice sau dinamice, locale sau generale.
7. Administrarea şi controlul centralizat al datelor –
administrarea datelor presupune definirea structurii datelor şi a
modului de stocare a datelor. Administrarea este centralizată şi
permite o organizare coerentă şi eficace a informaţiei. Fiecare
utilizator are propriile cerinţe care pot intra în conflict cu ale altor
utilizatori. Administrarea centralizată are rolul de a optimiza
performanţele pentru organizaţie luată în ansamblu.
8. Partajabilitatea datelor – permite ca datele să fie partajate între
membrii unei organizaţii fiecare utilizator va accesa datele ca şi
cum ar fi singur, fără a şti că în acelaşi timp un alt utilizator va
accesa pentru a le modifica. Prin mecanisme proprii de control
baza de date va permite accesul concurent la date menţinându-se
în acelaşi timp coerenţa datelor. Acest obiectiv face posibilă
dezvoltarea de noi aplicaţii ce necesită poate chiar extinderea,
respectiv modificarea aplicaţiilor aflate deja în funcţiune.
9. Securitatea datelor – baza de date trebuie să fie protejată pentru
distrugeri logice prin actualizări eronate, respectiv distrugeri
fizice. Securitatea va fi asigurată prin mecanisme proprii care
permit refacerea bazei de date în cazul apariţiei unei erori.
Prevenirea distrugerii accidentale a datelor, obligă la instituirea
unui set de proceduri de autorizare, dar şi de confirmare a
operaţiilor de ştergere, adăugare, precum şi realizarea unor copii
de siguranţă, a unor jurnale de urmărire a actualizărilor şi
proceduri de refacere a bazei de date, de restaurare a acesteia, în
caz de incidente.
10. Confidenţialitatea datelor - datele vor fi protejate de accesul
neautorizat. Baza de date are mecanisme proprii care permit
identificarea şi autentificarea utilizatorilor, precum şi accesul
autorizat şi diferenţiat. Accesul depinde de date şi de utilizatori.

28
2.5. Sisteme de gestiune a bazelor de date

În cadrul oricărei organizaţii este necesar ca resursa de date să fie bine


definită şi documentată, bine organizată şi controlată, partajabilă şi relevantă
pentru deciziile luate în cadrul organizaţiei.
Sistemul de Gestiune al Bazei de Date (SGBD) reprezintă un pachet
de programe specializat pentru definirea, crearea, întreţinerea şi accesul
controlat la baza de date.
Obiectivul principal al unui SGBD este de a separa datele de
programele de aplicaţie. SGBD constituie o interfaţă între utilizatori şi baza de
date şi constă din programe care interacţionează cu programele de aplicaţie ale
utilizatorului şi cu baza de date. Un SGBD are o structură complexă şi include
module program specializate pentru a îndeplini anumite funcţiuni:
- gestionarea bazei de date;
- definirea datelor (descrierea datelor);
- manipularea datelor (actualizare şi interogarea bazei de date);
- controlul şi securitatea datelor (controlul integrităţii, accesul
concurenţial şi securitatea datelor);
- utilitare.
SGBD trebuie să asigure trecerea de la un nivel de abstractizare la altul,
adică să poată interpreta „comenzile” exprimate în termen de schemă externă,
pentru a le transpune prin intermediul schemei conceptuale în operaţii de
intrare-ieşire la nivel fizic. SGBD gestionează la nivel conceptual un dicţionar
de date. Modulele program de gestiune a bazei de date realizează accesul fizic
la date în conformitate cu cerinţele exprimate printr-o „comandă”. Modulele
program de definirea datelor permit traducerea unui limbaj specializat care
realizează descrierea naturii datelor şi a legăturii logice dintre date la nivel
global conform schemei conceptuale, precum şi schemelor externe specifice
fiecărei aplicaţii program externe. Modulele program de manipulare a datelor
permit utilizatorilor prin intermediul unui limbaj specializat să găsească, să
insereze, să modifice, respectiv să elimine datele din baza de date. Modulele
program pentru controlul şi securitate datelor au rolul de a asigura
confidenţialitate a şi integritatea datelor, precum şi rezolvarea problemelor de
concurenţă. Modulele program utilitare permit întreţinerea, manipularea
exploatarea corectă şi facilă a bazei de date.
Sistemele SGBD evoluează continuu şi trebuie să se extindă pentru a
rezolva eficient noile cerinţe ale utilizatorilor.

29
Istoria sistemelor de gestiune a bazelor de date delimitează trei generaţii
care sunt caracterizate de modelele logice folosite:
- sisteme de tip ierarhic şi de tip reţea,
- sisteme relaţionale;
- sisteme avansate, care se reperă la sistemele orientate obiect, la cele
deductive, multimedia, active, etc.
SGBD de tip ierarhic (hierarchical database) şi reţea (network
database) reprezintă din punct de vedere istoric primele generaţii de SGBD. În
modelele ierarhice şi reţea datele sunt reprezentate la nivel de articol prin
legături ierarhice de tip arbore, respectiv de tip graf. Structurile de date
corespunzătoare acestor modele pot fi descrise la nivel logic cu ajutorul unei
structură de date abstract numit diagramă. Diagrama este în acest caz un graf
orientat prin care se reprezintă tipuri de entităţi şi legăturile funcţionale dintre
acestea. Sistemele de gestiune a bazelor de date bazate pe modelul de date reţea,
respectiv cel ierarhic, poartă numele de sisteme navigaţionale şi au fost
dezvoltate în perioada 1960-1970.
A doua generaţie de SGBD o reprezintă modelul relaţional care
tratează entităţile ca relaţii. Sistemele de Gestiunea Bazelor de Date
Relaţionale sunt caracterizate de structuri de date simple şi intuitive, de
operatori care se aplică relaţiilor pentru a defini, căuta, şi reactualiza datele.
Bazele de date relaţionale asigură independenţa completă a descrierii logice a
datelor în termeni de relaţii şi în descrierea fizică a datelor în termen de fişiere.
În prezent există câteva sute de sisteme SGBD relaţionale pentru toate tipurile
de calculatoare. Modelul relaţional asigură o independenţă completă în ceea ce
priveşte descrierea logică şi fizică a datelor. În plus SGBD relaţionale pun
includ limbaje specializate pentru descrierea şi manipularea datelor. Modelul
relaţional are capacităţi limitate de modelarea datelor. SGBD relaţionale nu
folosesc obiecte complexe şi dinamice, nu realizează gestiunea distribuită a
datelor şi nici gestiunea de cunoştinţe.
Conceptul de programare orientată obiect sau programarea
calculatoarelor cu ajutorul obiectelor utilizează conceptele de obiect şi clasă de
obiecte. Obiectul este definit de o mulţime de proprietăţi numite atribute şi are
un anumit comportament care în cazul obiectelor folosite în programare se
concretizează prin metode, care sunt programe care se execută în mod automat
atunci când în mediul extern sau cel extern al obiectului apare un anumit
eveniment. Numim obiect o entitate unic identificabilă, care conţine atât
atributele care definesc starea unui obiect din lumea reală, cât şi acţiunile
asociate acestuia. Obiectele de acelaşi tip formează o clasă de obiecte care
reprezintă o generalizare a noţiunii de tip de dată. Clasa include definiţia datelor
şi a metodelor. Conform principiului încapsulării datelor, datele clasei sunt

30
vizibile doar metodelor clasei, iar conform principiului moştenirii sau al
derivării o clasă poate fi definită folosind o clasă existentă. Conceptul de
încapsulare presupune că un obiect conţine atât structura de date, cât şi
mulţimea de operaţii care pot fi utilizate pentru al manipula. Ascunderea
informaţiilor semnifică separarea aspectelor externe ale unui obiect de detaliile
sale interne, care sunt ascunse de lumea exterioară. În acest mod, detaliile
interne ale unui obiect pot fi modificate fără a afecta aplicaţiile care îl utilizează
cu condiţia ca detaliile externe să rămână neschimbate. Includerea tehnicilor de
programare orientată obiect în domeniul bazelor da date a condus la apariţia
Sistemelor de Gestiune a Bazelor de Date Orientate Obiect, care realizează o
modelare superioară a informaţiei luând în considerare aspectele dinamice şi
integrarea descrierii structurale şi comportamentale. Prin utilizarea principiului
programării orientate obiect în domeniul bazelor de date relaţionale a apărut
Sistemele de Gestiune a Bazelor de Date Relaţionale Orientate Obiect.
O relaţia este o mulţime de înregistrări ce reprezintă fapte. Cunoştinţele
sunt aserţiuni generale şi abstracte asupra faptelor. Pe baza cunoştinţelor se
deduc fapte noi prin deducţie plecând de la fapte cunoscute. Pentru a rezolva
problema gestiunii de cunoştinţe au apărut bazele de date deductive, care
utilizând programarea logică gestionează cunoştinţe relativ la baze de date. Un
Sistem de Baze de Date Deductiv posedă un limbaj de definire a datelor care
permite definirea structuri predicatelor sub formă de relaţii şi constrângeri de
integritate asociate, un limbaj de manipulare a datelor care permite pe lângă
actualizarea datelor şi formularea de cereri, un limbaj de reguli de deducţie care
să permită construirea predicatelor derivate.
Sistemele distribuite reprezintă calculatoare interconectate printr-o reţea
de comunicaţie utilizate pentru un scop global. Gestionarea datelor aflate pe
calculatoare diferite, eterogene din punctul de vedere al sistemului de operare
folosit se realizează cu ajutorul unei baze de date distribuite. Bazele de date
distribuite sunt sisteme de baze de date cooperante care sunt rezidente pe
calculatoare diferite şi situate în locuri în locaţii diferite. Sistemul de gestiune al
unei baze de date distribuite face posibil accesul programelor de aplicaţie la
date rezidente pe mai multe calculatoare fără ca localizarea datelor să fie
cunoscută. Bazele de date distribuite folosesc ca instrument principal pentru
prelucrarea datelor distribuite modelul relaţional.
Integrarea mai multor baze de date autonome şi eterogene conform unei
scheme globale cu scopul de a realiza accesul uniform şi integrat la fiecare din
bazele de date componente a condus al conceptul de sistem multibază de date.
Avantajul major al acestui model constă în faptul că printr-o singură interogare
pot fi accesate date din mai multe baze de date fără a afecta aplicaţiile care
manipulează datele din fiecare bază de date componentă a sistemului integrat.

31
Fiecare bază de date din sistemul integrat poate folosi propriile limbaje de
interogare.
Bazele de date permit stocarea unei cantităţi foarte mari de informaţie,
care poate fi folosită în mod pentru elaborarea deciziilor operative, dar şi a celor
strategice. Pentru elaborarea deciziilor operative se folosesc date aferente
activităţii curente, date aferente unei perioade scurte de timp. Acestea sunt
generate şi preluate în sistem în mod dinamic pentru optimizarea procesului de
decizie. Prelucrarea acestor date se realizează în pe baza unor scenarii de tip
procesarea de tranzacţii în timp real (OLTP – On Line Transaction
Processing). Necesitatea analizării unor cantităţi foarte mari de date a condus la
conceptul de magazie de date (Data Warehouse), care utilizează pentru
atingerea acestui scop scenarii de tip procesare analitică în timp real (OLAP
– On Line Analytical Processing). Baza de date analitică permite realizarea de
interogări multidimensionale instantanee, fără a fi necesar ca acestea sa fie
definite anterior. Magazia de date este proiectată pentru a facilita analiza
multidimensională a datelor şi reprezintă un sistem care include informaţii
despre o organizaţie structurate în mai multe baze de date, numite în acest caz
rafturi de date (Data Marts). Data Warehouse reprezintă o bază de date
proiectată pentru a facilita analiza datelor fiind orientată spre dimensiuni.
Structurile de date multidimensionale sunt vizualizate cel mai bine sub forma
unor cuburi de date şi a unor cuburi în cadrul cuburilor. Fiecare faţă a unui cub
reprezintă o dimensiune. Bazele de date multidimensionale reprezintă o
modalitate compactă pentru vizualizarea şi manipularea elementelor de date
care pot avea multe inter-relaţii.

2.6. Funcţiunile sistemului de gestiune al bazei de date

Sistemul de gestiune al bazei de date (SGBD) reprezintă o interfaţă


între utilizatori şi baza de date, care permite crearea, actualizarea şi consultarea
bazei de date. În 1982 E.F. Codd a enunţat opt servicii listă completată ulterior
cu încă două servicii pe care trebuie să le furnizeze un SGBD complet:
1. Stocarea, regăsirea şi reactualizarea datelor reprezintă funcţia
fundamentală a unui SGBD. SGDB trebuie sa ascundă faţă de utilizator detaliile
privind implementarea fizică internă.
2. Un catalog sistem accesibil utilizatorului. SGBD va asigura
utilizatorului şi a SGBD la un catalog sistem integrat (dicţionar de date - Data
Dictionary) care va conţine date despre scheme, utilizatori, aplicaţii şi
reprezintă un depozit de informaţii care descrie datele din baza de date, date
despre date. Catalogul sistem conţine descrierea şi localizarea datelor,

32
denumirile, tipurile şi dimensiunile articolelor de date, denumirile relaţiilor,
constrângerile de integritate asupra datelor, numele utilizatorilor autorizaţi care
au acces la date, schemele externe, conceptuale şi interne, precum şi
transpunerile dintre ele, statistica utilizării. Catalogul sistem permite ca
informaţiile despre date să fie colectate şi gestionate central, permite ca definiţia
datelor să fie accesibilă tuturor posibililor utilizatori, comunicarea fiind
simplificată deoarece de sensul exact al datelor este stocat.
3. Asigurarea tranzacţiilor. Tranzacţia reprezintă o mulţime de acţiuni,
realizate de un utilizator sau un program de aplicaţie prin care se accesează sau
se modifică conţinutul bazei de date. Dacă o tranzacţie eşuează în timpul
execuţiei baza de date va intra într-o stare de incoerenţă, motiv pentru care este
necesar ca baza de date baza de date să fie readusă în stare de coerenţă care a
precedat lansarea în execuţie a tranzacţia. Acesta se realizează printr-un
mecanism propriu al SGBD care este capabil să anuleze modificările efectuate
asupra bazei de date de tranzacţia eşuată, care nu a fost efectuată în întregime ci
doar parţial.
4. Servicii de control concurente. SGBD trebuie să furnizeze un
mecanism care să garanteze că baza de date este corect reactualizată atunci când
mai mulţi utilizatori efectuează simultan tranzacţii asupra bazei de date.
Interogarea concurentă trebuie sa fie capabilă să asigure simultan tuturor
utilizatorilor aceeaşi informaţie, chiar şi în cazul reactualizării datelor şi să
garanteze că nu vor avea loc interferenţe atunci când mai mulţi utilizator
accesează baza de date.
5. Servicii de reconstituire. SGBD trebuie să furnizeze un mecanism
propriu de reconstituire a bazei de date în cazul deteriorării datorită unei cauze
interne sau externe.
6. Servicii de autorizare. SGBD trebuie să furnizeze un mecanism prin
care să garanteze că doar utilizatorii autorizaţi pot accesa datele. Termenul de
securitate se referă la protecţia bazei de date împotriva accesului ne-autorizat
intenţionat sau accidental. Fiecare utilizator trebuie sa acceseze doar datele care
îi sunt necesare şi pentru care are definit accesul autorizat.
7. Suport pentru comunicarea datelor. SGBD trebuie sa poată fi
integrat într-un pachet de programe de comunicaţie din care va primi cereri sub
formă de mesaje şi va răspunde în acelaşi mod.
8. Servicii de integritate. SGBD trebuie sa furnizeze mijloace care să
asigure că atât datele din baza de date, cât şi modificării acestora respectă
anumite reguli. Integritatea bazei de date se referă la corectitudinea şi coerenţa
datelor stocate şi se exprimă în termeni de constrângeri, care reprezintă reguli
de coerenţă pe care baza de date trebuie să le respecte.

33
9. Servicii pentru promovarea independenţei de date. SGBD trebuie să
permită ca programele de aplicaţie să fie independente de structura reală a bazei
de date. Pentru realizarea acestui obiectiv se utilizează mecanisme de
vizualizare, sau sub-scheme externe.
10. Servicii utilitare. Serviciile utilitare asigură suport pentru
administrare efectivă a bazei de date. Prin acestea se asigură suport pentru
importul şi exportul de date, facilităţi de monitorizare, analiză statistică,
reorganizarea datelor, realocarea spaţiului, eliminarea informaţiei perimate etc.

2.7. Componentele unui mediu SGBD

Un mediu SGBD este un sistem informatic care foloseşte baze de date. În


structura unui astfel de sistem în se pot delimita cinci componente principale:
hardware, software, date, proceduri şi persoane.
1. Hardware.
Reprezintă suportul fizic pentru SGBD şi poate fi format de un singur
calculator personal, un calculator mainframe, sau chiar o reţea de calculatoare.
Elementele specifice de hardware depind de cerinţele organizaţiei şi de SGBD
utilizat. Fiecare SGBD impune cerinţe minimale pentru echipamentele fizice
necesare funcţionării optime.
2. Software.
Componenta software include programele ce formează SGBD,
programele de aplicaţie, sistemul de operare local şi atunci când este cazul
software de reţea. Programele de aplicaţie se realizează folosind limbaje de
programare de generaţia treia sau chiar a patra, ele nu fac parte din SGBD, dar
accesează baza de date prin intermediul SGBD. Programele de aplicaţie nu au
rolul de a gestiona datele ci doar de a prezenta informaţia în termeni specifici
aplicaţiei prin intermediul unei interfeţe.
3. Date.
Reprezintă cea mai importantă componentă a unui mediu SGBD şi
include atât meta-datele cât şi datele propriu-zise.
4. Proceduri.
Procedurile includ regulile care guvernează proiectarea şi utilizarea bazei
de date. Activitatea utilizatorilor sistemului şi a personalul care administrează
baza de date se desfăşoară conform unor proceduri documentate privind modul
de folosire şi funcţionare a sistemului. Aceste instrucţiuni se referă la
deschiderea şi închiderea unei sesiuni de lucru, utilizarea unor facilităţi SGBD
şi a programelor de aplicaţie, activarea şi dezactivarea SGBD, arhivarea datelor,
utilizarea copiilor de siguranţă, tratarea defecţiunilor hardware, respectiv

34
software, refacerea bazei de date în caz de incident, modificarea şi
reorganizarea bazei de date.
5. Persoane.
În mediul SGBD se identifică patru tipuri distincte de persoane implicate:
administratorii, proiectanţii, programatorii de aplicaţie şi utilizatorii finali.
- Baza de date reprezintă o resursă în cadrul organizaţiei care este
gestionată de doi administratori: administratorul de date şi de administratorul
bazei de date. Administratorul de date (Data Administrator) gestionează
resursele de date, fiind responsabil de proiectarea conceptuală şi logică a bazei
de date, de planificarea bazei de date, de realizarea şi întreţinerea standardelor, a
politicilor şi a procedurilor bazei de date. Este persoana sau grupul de persoane
responsabil de dezvoltarea bazei de date în direcţia susţinerii obiectivelor
generale ale organizaţiei, fiind un foarte bun cunoscător al organizaţiei. El
determină cerinţele organizaţiei privind datele, răspunde de proiectarea
conceptuală şi logică a bazei de date, dezvoltă modelul general de date conform
cu progresul din domeniul tehnologiei informaţiei şi al afacerilor, creează
standarde de colectarea datelor, stabileşte necesităţile şi protecţia privind
accesul la date, gestionează dicţionarul de date şi răspunde de asigurarea unei
documentaţii complete care va include modelul de date, standardele, politicile,
procedurile, utilizarea dicţionarului de date şi controlul asupra utilizatorilor
finali. Administratorul bazei de date (Database Administrator) este persoana
sau grupul de persoane responsabil de proiectarea, implementarea şi realizarea
fizică a bazei de date, de securitatea şi controlul integrităţii, de întreţinerea
întregului sistem. El monitorizează performanţele sistemului şi reorganizarea
baze de date, atunci când este cazul, defineşte constrângerile de securitate şi
integritate, răspunde de selectarea SGBD şi de implementarea proiectului de
bază de date, de instruirea utilizatorilor şi de realizarea copiilor de siguranţă.
Este persoana care trebuie sa cunoască foarte bine SGBD folosit precum şi
mediul sistemelor de operare.
- Proiectanţii bazei de date sunt persoanele implicate în proiectarea
logică şi cea fizică a bazei de date. Proiectarea conceptuală şi logică presupune
identificarea entităţilor, a relaţiilor dintre entităţi, a constrângerilor asupra
datelor ce vor fi stocate în baza de date. Proiectantul de bază de date
conceptuale şi logice trebuie sa cunoască amănunţit şi complet toate datele din
cadrul organizaţiei, precum şi a regulilor interne şi externe conform cărora
funcţionează organizaţia. Aceste reguli descriu principalele caracteristici ale
datelor aşa cum sunt ele în cadrul organizaţiei respective. În etapa de proiectare
a bazei de date proiectantul va implica toţi presupuşii utilizatori. Proiectarea
conceptuală este independentă de detaliile privind implementarea, iar
proiectarea logică este presupune utilizarea unui model de date. Proiectantul de

35
hibază de date fizice preia modelul logic de date şi îl implementează folosind
un anumit SGBD, el alege strategia de stocare adecvată ţinând cont de modul de
utilizare.
- Programatorii de aplicaţie realizează şi implementează programele
de aplicaţie care conferă funcţionalitatea cerută de utilizatorii finali. Programele
de aplicaţie se realizează în conformitate cu documentaţia elaborată în etapa de
proiectare. Fiecare program de aplicaţie este realizat fie cu ajutorul unu limbaj
extern sau cu unul propriu SGBD şi efectuează o anumită operaţie asupra bazei
de date: extragere, inserare, reactualizare şi ştergere de date.
- Utilizatorii finali reprezintă clienţii bazei de date şi pot fi grupaţi în
două categorii: utilizatori simpli şi utilizatori specialişti. Utilizatorii simpli nu
percep baza de date şi nici SGBD ci doar accesează baza de date prin
intermediul programelor de aplicaţie. Utilizatorii specialişti cunosc structura
bazei de date şi facilităţile oferite de SGBD. Ei sunt capabil să efectueze
instantaneu interogări ale bazei de date, pentru aceasta folosind fie un limbaj
extern, fie unul intern al SGBD pentru a efectua anumite operaţii asupra bazei
de date, fiind capabili să realizeze chiar propriile programe de aplicaţie.

2.8. Limbaje pentru baze de date

În limbajele de programare clasice declaraţiile de date şi instrucţiunile


executabile aparţin limbajului respectiv. Limbajele de programare sunt grupate
în generaţii de limbaje. Limbajele de programare clasice sunt incluse în
generaţia a treia de limbaje (3GL – 3 Generation Language) fiind limbaje de
programare procedurale. Generaţia a patra de limbaje de programare (4GL)
reprezintă limbaje de programare ne-procedurale şi au fost create pentru a mării
productivitatea în programarea calculatoarelor folosind instrumente de tip
generator (de formulare, de rapoarte, de structuri de interogare, de grafice, de
aplicaţii) care permit ca în mod interactiv fără a scrie cod program să fie
generate în mod automat programe complexe. Limbajele procedurale precizează
ce date sunt necesare şi cum trebuie să fie obţinut rezultatul unei acţiuni tratând
înregistrările în mod individual, iar cele neprocedurale precizează doar ce
trebuie obţinut, operând asupra unor mulţimi de înregistrări.
În sistemele de gestiune a bazelor de date funcţiile de declarare, de
manipulare şi de control al datelor sunt realizate cu ajutorul unor limbaje
diferite. Acestea sunt numite sub-limbaje de date deoarece includ doar
facilităţii specifice funcţiei pe care o au. Ele pot fi încorporate într-un limbaj
gazdă de nivel înalt. SGBD asigură suport pentru utilizarea în mod interactiv a
acestor limbaje proprii.

36
Limbajul pentru definirea datelor (LDD – Data Description Language)
este un limbaj specific pentru fiecare SGBD fiind utilizat pentru a specifica
schema bazei de date. Este un limbaj descriptiv care permite administratorului
bazei de date, respectiv utilizatorului final sa descrie şi să definească entităţile
din baza de date precum şi relaţiile existente între entităţi, adică să definească o
schemă sau să o modifice. Nu include facilităţi pentru manipularea datelor. Prin
compilarea instrucţiunilor limbajului de definirea datelor se obţin tabele, care
vor fi incluse în catalogul sistem (dicţionar de date, sau director de date) şi care
descriu datele, relaţiile, strategiile de acces la date, criteriile de confidenţialitate
şi de validare a datelor. Teoretic pot fi identificate limbaje de definire a datelor
aferente fiecărei scheme din arhitectura bazei de date: internă, conceptuală şi
externă.
Limbajul pentru manipularea datelor (LMD – Data Manipulation
Language) este un limbaj care asigură un set de procedee ce permit operaţiile de
bază pentru manipularea datelor din baza de date. Operaţiile executate în cadrul
bazei de date presupun existenţa unui limbaj specializat în care comenzile se
exprimă prin fraze ce descriu acţiuni asupra bazei de date. Manipulările de date
se efectuează la cele trei niveluri extern, conceptual şi intern. O comandă va
preciza operaţia, criteriul de selecţie, modul de acces şi forma de editare.
Operaţia poate fi de calcul aritmetic sau logic, deschidere-închidere, căutare,
extragere, adăugare, ştergere, reactualizare şi chiar de editare. Cele mai
importante comenzi sunt cele de regăsire. Limbajele de manipulare a datelor
sunt de două tipuri: procedurale şi neprocedurale (declarative). Setul de
instrucţiuni din cadrul limbajului de manipulare a datelor responsabil de
regăsirea datelor de numeşte limbaj de interogare.
Limbajul pentru controlul datelor (LCD – Data Control Language)
este un limbaj specific care include comenzi pentru asigurarea confidenţialităţii
şi integrităţii datelor, pentru salvarea informaţiei cu scopul menţinerii integrităţii
bazei de date şi chiar pentru rezolvarea problemelor de acces concurenţial la
date.

2.9. Proiectarea bazei de date

Sistemul informaţional cuprinde totalitatea resurselor care permit


colectarea, administrarea, controlul şi propagarea informaţiilor în cadrul unei
organizaţii. Datele reprezintă o resursă importantă din cadrul organizaţiei şi
trebuie gestionată similar celorlalte resurse. Sistemul informatic poate fi realizat
cu ajutorul unei baze de date şi reprezintă cea mai importantă componentă a
sistemului informaţional din cadrul organizaţiei, baza de date fiind o

37
componentă fundamentală a sistemului informaţional. Sistemul informaţional
evoluează în timp, parcurge anumite etape, are un ciclu de viaţă. Etapele din
ciclul de viaţă al unui sistem informaţional sunt: planificarea, colectarea şi
analiza cerinţelor, proiectarea, realizarea prototipului, implementarea, testarea
şi întreţinerea operaţională. În practică, însă, aceste etape nu sunt rigide. Pot
exista întrepătrunderi importante şi proiectul poate repeta unele etape înainte de
a trece la altele. Aceste etape sunt parcurse şi în cazul sistemelor ce folosesc
baze de date. În fiecărei etapă a ciclului de viaţă sunt desfăşurate anumite
activităţi.
1. Planificarea bazei de date, este prima etapă a ciclului de viaţă şi
include activităţile care permit realizarea eficientă a etapelor din ciclul de viaţă.
Planificarea bazei de date trebuie să fie integrată în strategia generală a
organizaţiei stabilind prin aceasta care sunt cerinţele informaţionale viitoare ale
organizaţiei pentru a susţine planurile de afaceri şi scopul organizaţiei. Pentru a
susţine planificarea bazei de date se va realiza un model general de date, care va
include datele importante, relaţiile dintre acestea, precum şi legătura cu
componentele funcţionale ale organizaţiei. În această etapă vor fi dezvoltate de
standarde pentru modul de colectare a datelor şi de specificare a formatelor,
pentru documentaţia necesară, fiind stabilite modalităţile de realizare a
proiectării şi implementării. Utilizarea standardelor asigură suport pentru
controlul calităţii. Cerinţele organizaţiei cu privire la date fi documentate
corespunzător.
2. Definirea sistemului este a etapa în care se identifică scopul şi
limitele noului sistem, inclusiv domeniile de aplicaţie şi grupurile de utilizatori.
La definirea noului sistem va fi precizat în mod necesar şi modul în care se va
realiza interfaţa cu celelalte componente ale sistemului informaţional din cadrul
organizaţiei.
3. Colectarea şi analiza cerinţelor (Analiza) este etapa de cea mai
mare importanţă în care, folosind diferite metode şi tehnici adecvate, vor fi
colectate şi analizate cerinţele informaţionale ale organizaţiei cu privire baza
data. Informaţiile necesare proiectării bazei de date vor fi colectate folosind
metoda interviului individual, metoda interviului de grup, metoda
chestionarelor, observarea organizaţiei în funcţiune, examinarea documentelor
din cadrul organizaţiei, toate asociate cu experienţa anterioară a echipei de
analiză. Fără o analiză adecvată nu se va putea determina ceea ce utilizatorul
doreşte de la noul sistem, infrastructura tehnică în cadrul căreia se va
implementa, respectiv care sunt constrângerile impuse datele. O analiză
inadecvată, la un moment ulterior, poate fi foarte costisitoare sau poate conduce
chiar la încetarea proiectului. O cerinţă reprezintă o caracteristică care trebuie
inclusă în noul sistem. Informaţiile colectare pentru fiecare domeniu de aplicaţie

38
şi grup de utilizatori se vor concretiza sun forma unui set de documente care
descriu activităţile şi sub-activităţile din diferite puncte de vedere şi va include
documentaţia folosită şi elaborată, detaliile privind tranzacţiile, precum ordinea
de prioritate a cerinţelor. Cantitate de date colectată depinde de politica
organizaţiei şi de aria de cuprindere a noului sistem. Colectarea şi analiza
cerinţelor reprezintă etapa preliminară a proiectării conceptuale a bazei de date.
Pentru structurarea cerinţelor se folosesc tehnici speciale de specificare a
cerinţelor cum sunt analiza şi proiectarea structurată, diagramele de flux de
date, proiectarea asistată de calculator.
4. Proiectarea bazei de date (Design-ul) este procesul de realizare a
proiectului de bază de date care va trata toate operaţiile şi obiectivele
organizaţiei, este etapa în care se va realiza proiectare conceptuală, logică şi
fizică a bazei de date. Se va realiza reprezentarea datelor şi a relaţiilor dintre ele
conform specificaţiilor stabilite în etapa de analiză, va fi elaborat un model de
date care va fi capabil să accepte efectuarea tuturor tipurilor de tranzacţii
necesare asupra datelor, se va realiza o structurare adecvată pentru realizarea
cerinţelor inclusiv cele privind performanţele noului sistem şi a sistemului
informaţional în ansamblu. Modelul de date este optim atunci când este simplu,
expresiv, extensibil, nonredundant, permite validarea structurală, permite
partajarea datelor, asigură integritatea datelor şi oferă posibilitatea unei
reprezentări schematice. Unul din scopurile principale a procesului de design
este stabilirea de scheme pe baza căreia se poate construi baza de date.
Proiectarea se poate realiza folosind o metodă de tip „de jos în sus”, „de sus în
jos”, „din interior spre exterior”, respectiv „strategia compusă” care
combină primele două metode. Metoda de proiectare de jos în sus se foloseşte
în cazul bazelor de date simple şi începe de la nivelul fundamental al atributelor
ce definesc entităţile car sunt grupate în relaţii care reprezintă tipuri de entităţi şi
asociaţii ale acestora, după care prin procesul numit normalizare se identifică
atributele necesare şi dependenţa funcţională a acestora. Strategia de proiectare
de tip de sus în jos se foloseşte pentru baze de date complexe şi începe cu
realizarea unor modele de date care conţin entităţi şi relaţii relevante, după care
prin rafinări succesive de sus în jos se identifică toate entităţile şi relaţiile
existente între acestea. Tratarea de tip din interior spre exterior este foloseşte
proiectarea de jos în sus pentru entităţile principale, care apoi se extinde pentru
a cuprinde toate entităţile şi relaţiile.
Sub-etapa de proiectare fizică a bazei de date presupune cunoaşterea
SGBD care va fi utilizat, motiv pentru pe baza cerinţelor curente şi viitoare ale
organizaţiei va fi alea cel mai potrivit SGBD. Alegerea SGBD poate fi
considerată o etapă din ciclul de viaţă a sistemului informatic, care se poate

39
parcurge în orice fază, dar înainte de proiectarea fizică. În această etapa se vor
elabora în mod obligatoriu şi toate documentaţiile aferente.
5. Realizarea prototipului este etapa în care se construieşte un model
de lucru, care nu are toate caracteristicile cerute şi nu acoperă întreaga
funcţionalitate. Scopul creării prototipului este de a oferi utilizatorilor
posibilitatea de a utiliza un sistem apropiat de cel real pentru identifica
caracteristicile incluse deja, de a le verifica cu scopul de a clarifica cerinţele
utilizatorilor.
6. Implementarea este etapa care include realizarea fizică a bazei de
date prin utilizarea limbajului de definire a datelor al SGBD şi implementarea
programelor de aplicaţie realizate în limbajul ales de echipa de proiectare.
Tranzacţiile din baza de date vor fi efectuate cu ajutorul limbajului de
manipularea datelor. În această etapă pot fi folosite instrumentele de tip
interactiv ale SGBD pentru definirea şi accesarea datelor. Transferarea datelor
din vechiul sistem are o foarte mare importanţă pentru reducerea timpului
necesar pentru implementare. Acest transfer face ca datele preluate să fie
corecte chiar dacă este necesară conversia datelor în formatul cerul de noul
sistem. În etapa de implementare vechiul sistem şi noul sistem funcţionează în
paralel, iar echipa de implementare poate reduce semnificativ efortul
utilizatorilor prin preluarea datelor pentru noul sistem din vechil sistem cu
ajutorul unor proceduri automate.
7. Testarea este etapa în care vor fi detectate eventualele erori ale nolui
sistem. Există un număr de practici pentru asigurarea calităţii, pe care le putem
aplica proiectului, dar cea mai bună este testarea. Testarea trebuie făcută
conform unui plan de testare bine pus la punct, care este esenţial atât pentru
sistem cât şi pentru verificarea reacţiei utilizatorului. Baza acestui plan trebuie
să fie documentarea obţinută în timpul etapei de analizare a cerinţelor. Acest
plan de testare trebuie să definească nu doar exact ceea ce trebuie verificat ci şi
ce rezultate trebuie generate de noul sistem inclusiv de programele de aplicaţie.
Testarea poate fi făcută „de sus în jos”, „de jos în sus”, „pe fir”, sau la
„suprasolicitare”. Testarea de „de sus în jos” permite testare la nivel de
subsistem şi permite detectarea erorilor în fazele iniţiale ele proiectului.
Testarea „de jos în sus” pleacă de la fiecare modul individual. Testarea „pe fir”
este folosită pentru testarea sistemelor care funcţionează în timp real, testându-
se răspunsul sistemului la fiecare eveniment. Testele la „suprasolicitare” au
menirea de a testa componentele sistemului în toate situaţiile posibile.
8. Întreţinerea operaţională reprezintă procesul de monitorizare şi
întreţinere a noului sistem. Sunt monitorizate performanţele sistemului şi se
încorporează noi cerinţe atunci când este cazul. Este etapa care se întinde pe
întreaga durată de viaţă a sistemului. Monitorizarea presupune urmărireqa

40
sistematică a performanţelor şi înregistrarea eventualelor anomali de
funcţionare.

2.10. Modelul de date relaţional

Modelul relaţional a fost propus de E. F. Codd în 1970 care prin


articolul „Un model relaţional de date pentru bănci de date partajate de
dimensiuni mari” a stabilit cerinţele teoretice pentru modelul de date relaţional.
Modelul relaţional este un model formal de organizare conceptuală a datelor,
destinat reprezentării legăturilor dintre date şi bazat pe teoria matematică a
relaţiilor. Modelul relaţional a fost definit cu rigoare matematică deosebită, fiind
un mijloc performant de studiu al proprietăţilor logice ale unui sistem de baze
de date. Modelul relaţional este orientat spre mulţimi în timp ce sistemele
ierarhice şi reţea sunt orientate spre fişiere. În modelul relaţional relaţiile sunt
utilizate pentru a reprezenta informaţiile despre obiectele reprezentate în baza
de date. Conform modelului relaţional datele sunt structurate logic sub formă de
tabele care definesc relaţii. Fiecare relaţie are o denumire şi este definită prin
atribute care sunt coloanele tabelei. O relaţie este reprezentată printr-un tabel
bidimensional, în care coloanele corespund atributelor, iar liniile corespund
înregistrărilor individuale. Ordinea coloanelor (atributelor) este arbitrară, relaţia
fiind invariantă la modificarea ordinii atributelor. Pentru fiecare atribut există un
domeniu de valori posibile. Domeniile pot fi diferite pentru fiecare atribut, dar
este posibil ca mai multe atribute să aibă acelaşi domeniu. Conceptul de
domeniu permite definirea sensului şi a sursei de valori pentru fiecare atribut.
Un element unei relaţii este numit tuplu, şi corespunde unei linii a tabelei.
Tuplurile pot apărea în orice ordine fără a modifica semnificaţia relaţiei fiind
formate din valori concrete pentru toate atribute ce definesc relaţia. Numim
intensitate a relaţiei componenta fixă, invariantă, în timp a unei relaţii, formată
din structura relaţiei împreună cu domeniile de valori pentru atribute şi
eventualele restricţii asupra valorilor posibile. Numim extensie (stare) a
relaţiei partea care se modifică în timp, adică tuplurile. Gradul relaţiei
reprezintă numărul de coloane (atribute), iar cardinalitatea relaţiei numărul de
linii (tupluri) pe care le are tabela ce defineşte relaţia. Gradul relaţiei este o
parte a intensităţii relaţiei. Cardinalitatea exprimă starea relaţiei la un moment
dat şi se modifică prin adăugarea, respectiv ştergerea de tupluri. Spunem că o
relaţie este normalizată dacă este structurată adecvat. Baza de date relaţională
este o mulţime de relaţii normalizate. Numim schemă a relaţiei denumirea
relaţiei urmată de o mulţime de perechi atribut, domeniu.

41
Un domeniu este o mulţime de valori care poate fi definită fie
enumerând elementele componente, fie definind o proprietate distinctă a
domeniului valorilor. Fie atributele A1, A2, . . ., An şi domeniile finite D1, D2, . . .,
Dn, nu neapărat disjuncte. Mulţimea {A1:D1, A2:D2, . . ., An:Dn} reprezintă
schema de relaţie. Numim tuplu, sau n-tuplu, un element (V1,V2, . . .,Vn) al
produsului cartezian D1  D2  . . .  Dn al domeniilor D1, D2, . . ., Dn, unde V1є
D1, …, Vn є Dn.
O relaţie R pe mulţimile D1, D2, . . ., Dn este o submulţime a produsului
cartezian D1  D2  . . .  Dn, adică o mulţime de tupluri. Mulţimea numelor
atributelor corespunzătoare unei relaţii o numim schemă relaţională şi o notăm
cu R (A1, A2, . . ., An). Putem reprezintă o relaţie printr-un tabel bidimensional în
care fiecare linie corespunde unui tuplu, iar fiecare coloană unui domeniu din
produsul cartezian, de fapt unui atribut. Atunci când se reprezintă o relaţie sub
forma unui tabel în care antetul coloanelor sunt înscrise numele atributelor, iar
fiecare linie reprezintă tuplurile (V1,V2, . . .,Vn) în care fiecare valoare este luată
din domeniul corespunzător. Numele atributului exprimă semnificaţia valorilor
din calcul coloanei respective. Numărul atributelor defineşte gradul relaţiei, iar
numărul de tupluri din relaţie defineşte cardinalitatea relaţiei.
O relaţie are următoarele proprietăţi:
- are o denumire care identifică relaţia în mod unic;
- fiecare element (celulă) al relaţiei conţine exact o valoarea atomică
(singulară);
- fiecare atribut are o denumire unică în cadrul relaţiei;
- toate valorile unui tribut aparţin domeniului de valori al atributului;
- ordinea atributelor nu este semnificativă;
- fiecare tuplu este distinct; nu există tupliri duplicate;
- ordinea tuplurilor nu este semnificativă, dar poate optimiza accesul
individual la fiecare tuplu.
Atunci când inserăm tupluri într-o relaţie, este posibil ca un atribut să
fie necunoscut sau nedefinit. Pentru a reprezenta acest tip de atribut a fost
introdusă o valoare convenţională în relaţie, şi anume valoarea null, care
reprezintă o modalitate de a trata datele incomplete sau deosebite. Există
sistemele relaţionale care nu acceptă conceptul de null, care nu are
corespondent în logica booleană, din care face parte calculul predicatelor folosit
pentru modelul relaţional.
Numim relaţie de bază o relaţie caracterizată printr-o denumire, care
corespunde unei entităţi din schema conceptuală, ale cărei tupluri sunt
memorate în baza de date. O vizualizare este rezultatul dinamic al mai multor
operaţii relaţionale, care acţionează asupra relaţiilor de bază pentru a realiza o
altă relaţie. Numim relaţie virtuală o vizualizare. Spunem că un tabel este de

42
tip virtual (view, vizualizare, vedere), dacă reprezintă o relaţie virtuală. Relaţia
virtuală nu există fizic ca tabel în baza de date, ci doar ca definiţie a relaţiei,
deoarece datele pe care le conţine nu sunt în realitate memorate, ele fiind
incluse în alte tabele reale care reprezintă relaţii reale. Tabelul de tip view
(vizualizare, filtru, relaţie virtuală) reprezintă o filtrare a unui tabel iniţial, sau
mai multor tabele legate între ele, necesară unei anumite abordări, unei anumite
aplicaţii. Utilizarea vizualizărilor asigură securitatea tabelelor iniţiale şi permite
prezentarea informaţiei în conformitate cu drepturile de acces al fiecărui
utilizator, asigură accesul la date personalizat pentru fiecare utilizator şi în plus
simplifică operaţiile complexe asupra relaţiilor de bază. Deoarece vizualizările
sunt relaţii virtuale toate reactualizările efectuate asupra relaţiilor de bază care
sunt folosite la definirea relaţiilor virtuale trebuie să fie imediat reflectate
imediat de toate vizualizările afectate.
Pentru o relaţie trebuie să fie posibilă identificarea în mod unic a
fiecărui tuplu prin valorile atributelor ce definesc relaţia. Numim supercheie un
atribut sau o mulţime de atribute care identifică în mod unic fiecare tuplu
relaţiei. Numim cheie candidat o supercheie pentru care nici o submulţime de
atribute nu este supercheie. Cheia candidat are două proprietăţi: unicitatea şi
ireductibilitatea. Numim cheie primară cheia candidat selectată pentru a
identifica în mod unic tuplurile din cadrul relaţiei. Cheile candidat care nu sunt
cheie principală se numesc chei alternative. Numim cheie străină un atribut
sau o mulţime de atribute care sunt identice cu cele din cheia candidat ale unei
alte relaţii.
Model relaţional este caracterizat de trei elemente:
- structura relaţională a datelor;
- operatorii de tip relaţional folosiţi în model;
- regulile de integritate care se aplică asupra cheilor în model.
În anul 1985, E.F. Codd a publicat un set de 13 reguli de fidelitate pe
baza cărora se apreciază dacă un sistem de gestiune de baze de date poate fi
considerat relaţional. Majoritatea sistemelor de gestiune de baze de date
considerate ca fiind de tip relaţional nu respectă absolut toate regulile definite
de Codd, mai mult, în prezent, lista este reformulată şi cuprinde 100 de regulii.
Regula 0 – regula gestionării datelor: Un SGBD considerat ca fiind
relaţional trebuie să fie capabil să gestioneze o bază de date prin posibilităţile
sale relaţionale. Aceasta înseamnă că SGBD nu va folosi pentru definirea şi
manipularea datelor operaţii care nu sunt de tip relaţional. Practic, majoritatea
implementările existente de SGBD nu respectă această regulă.
Regula 1 – regula reprezentării datelor: Într-o bază de date
relaţională, informaţia este reprezentată explicit la nivel logic sub forma unor
tabele ce poartă numele de relaţii. Este regula cea mai importantă şi conform

43
lui E.F. Codd şi în cazul în care un SGBD care nu respectă această regulă, nu
poate fi considerat relaţional. Referirea la nivelul logic precizează că elemente
de construcţii logice, cum sunt indecşi, nu au obligatoriu o reprezentare sub
formă de tabele.
Regula 2 – regula accesului garantat la date: Fiecare valoare de dată
(valoare atomică) dintr-o bază de date trebuie să poată fi adresată în mod logic
printr-o combinaţie formată din numele relaţiei, valoarea cheii primare şi
numele atributului. Se poate regăsi orice valoare aparţinând oricărui atribut al
unei relaţii, dacă sunt specificate numele relaţiei, numele atributului şi valoarea
cheii primare.
Regula 3 – regula reprezentării informaţiei necunoscute (tratarea
sistematică a valorilor null): Un sistem relaţional trebuie să permită
utilizatorului definirea unui tip de date numit null pentru reprezentarea unei
informaţii necunoscute la momentul respectiv indiferent de tipul de dată. Într-un
SGBD relaţional trebuie să putem face diferenţa între valoarea zero, un şir vid
de caractere şi o valoare necunoscută.
Regula 4 – regula dicţionarelor de date (catalog dinamic on-line,
bazat pe modelul relaţional): Asupra descrierii bazelor de date (informaţii
relative la relaţii, vizualizări, indecşi, etc) trebuie să se poată aplica aceleaşi
operaţii ca şi asupra datelor din baza de date. Descrierea bazei de date este
reprezentată la nivel logic sub forma unor tabele care pot fi accesate în acelaşi
mod ca şi datele efective.
Regula 5 – regula limbajului de interogare (sub-limbaje de date
cuprinzătoare): Trebuie să existe cel puţin un limbaj care să permită: (1)
definirea datelor, (2) definirea vizualizărilor, (3) manipularea datelor
(interactiv sau prin intermediul programului), (4) constrângerile de integritate,
(5) autorizarea, (6) limitele tranzacţiilor (început, execuţie, reluare). În general,
toate implementările SQL respectă această regulă. Limbajul permite
utilizatorilor să definească relaţii şi vizualizări, să regăsească informaţia şi să o
poată actualiza, să verifice şi să corecteze datele de intrare etc.
Regula 6 – regula de reactualizare a vizualizării: Toate vizualizările
care sunt teoretic reactualizabile pot fi reactualizate de sistem. Un SGBD
trebuie să poată determina dacă o vizualizare poate fi actualizată şi să stocheze
rezultatul interogării într-un dicţionar de tipul unui catalog de sistem. Trebuie să
existe un mecanism prin care să se poată determina dacă anumite vizualizări pot
fi actualizate sau nu. Majoritatea implementărilor SQL stabilesc aceasta, în
funcţie de variantele instrucţiunii de selecţie utilizate.
Regula 7 – regula limbajului de nivel înalt (operaţiile de inserare,
reactualizare şi ştergere de nivel înalt): Regulile de manipulare asupra unei
relaţii luată ca întreg sunt valabile atât pentru operaţiile de regăsire a datelor,

44
cât şi asupra operaţiilor de inserare, actualizare şi ştergere a datelor. Un
SGBD relaţional nu trebuie să oblige utilizatorul să caute într-o relaţie, tuplu cu
tuplu, pentru a regăsi informaţia dorită. Operaţiile de manipulare a datelor pot fi
aplicate atât în mod interactiv cât şi prin program, într-un limbaj gazdă.
Regula 8 – regula independenţei fizice a datelor: Programele de
aplicaţie şi activităţile utilizatorilor nu depind de modul de stocare a datelor
sau de modul de acces la date. Într-un SGBD relaţional trebuie să se separe
aspectul fizic al datelor (stocare sau acces la date) de aspectul logic al datelor.
Regula 9 – regula independenţei logice a datelor: Programele de
aplicaţie şi activităţile utilizatorilor trebuie să fie transparente la modificările
de orice tip efectuate asupra datelor. Orice modificare efectuată asupra unei
relaţii, nu trebuie să afecteze operaţiile de manipulare a datelor, programele de
aplicaţie şi mecanismele de interogare directă nu sunt afectate de modificările
făcute asupra datelor.
Regula 10 – regula independenţei datelor din punct de vedere al
integrităţii: Constrângerile de integritate specifice unei baze de date
relaţionale nu vor fi definite programele de aplicaţie ci de sub-limbajul
relaţional de date, urmând a fi memorate în catalogul sistem. (Regulile de
integritate trebuie să fie definite într-un sub-limbaj relaţional, nu în programul
de aplicaţie). Limbajul SQL permite definirea de restricţii privind integritatea
datelor şi stocarea lor în catalogul de sistem prin aceasta asigurându-se controlul
centralizat asupra constrângerilor.
Regula 11 – regula independenţei datelor din punct de vedere al
distribuirii: Sub-limbajul de manipulare a datelor trebuie să permită utilizarea
aceloraşi programe de aplicaţie şi interogări (să fie invariante din punct de
vedere logic)pentru a accesa date centralizate sau distribuite (Distribuirea
datelor pe mai multe calculatoare dintr-o reţea de comunicaţii de date, nu
trebuie să afecteze programele de aplicaţie şi interogările, dacă şi ori de câte
ori datele sunt centralizate sau distribuite fizic). Independenţa de distribuţie
presupune ca un program de aplicaţie care accesează sistemul SGBD pe un
singur calculator trebuie să funcţioneze fără modificări şi într-o reţea chiar dacă
datele sunt mutate de pe un calculator pe altul, utilizatorul percepând datele fără
a cunoaşte locul în care sunt stocate. Programele de aplicaţie trebuie să
funcţioneze fără modifică şi într-o reţea, chiar dacă datele sunt transferate de pe
un calculator pe altul.
Regula 12 – regula versiunii procedurale a SGBD (nonsubversiune):
Orice componentă procedurală a unui SGBD trebuie să respecte aceleaşi reguli
de integritate ca şi componenta relaţională (orice limbaj de nivel inferior
trebuie să respecte aceleaşi reguli de integritate exprimate în limbajul
relaţional de nivel înalt).

45
Cele 13 reguli pot fi grupate în cinci domenii de funcţionalitate:
- reguli fundamentale (regula 0 şi regula 12);
- reguli structurale (regula 1 şi regula 6);
- reguli de integritate (regula 3 şi regula 10);
- reguli de manipulare a datelor (regula 2, regula 4, regula 5, regula 7);
- reguli privind independenţa de date (regula 8, regula 9 şi regula 11).

Un SGBD este minimal relaţional dacă datele din cadrul bazei de date
sunt reprezentate prin valori în tabele, nu există pointeri observabili de către
utilizatori, iar sistemul suportă operatorii relaţionali de proiecţie, selecţie şi
compunere naturală, fără limitări impuse din considerente interne.
Un SGBD este complet relaţional dacă este minimal relaţional şi, în
plus, sistemul suportă restricţiile de integritate de bază (unicitatea cheii primare,
constrângerile de referinţă, integritatea entităţii) şi precum şi toate operaţiile de
bază ale algebrei relaţionale.
Un SGBD relaţional îndeplineşte funcţiile unui SGBD, cu anumite
particularităţi care decurg din concepţia de organizare a datelor, respectiv din
modelul relaţional. Fiecare SGBD relaţional implementează modelul relaţional
într-o manieră proprie care îl diferenţiază de restul sistemelor relaţionale.
Caracterizarea unui SGBD relaţional se poate realiza la nivelul clasei de
SGBD relaţionale, în sensul caracterizării globale, unitare în raport cu celelalte
tipuri de SGBD, sau la nivelul unui SGBD relaţional individual în sensul
caracterizării particularităţilor sale, în raport cu alte SGBD de tip relaţional.
Realizarea funcţiilor unui SGBD relaţional se face cu ajutorul unor
instrumentele şi mecanisme de lucru specifice de tip relaţional, care le separă de
sistemele considerate ca fiind nerelaţionale:
- un limbaj relaţional pentru descrierea datelor la nivel fizic, logic şi
conceptual;
- un limbaj relaţional pentru manipularea datelor;
- mecanisme pentru controlul integrităţii semantice a datelor;
- mecanisme pentru optimizarea cererilor de date;
- mecanisme pentru asigurarea coerenţei datelor în condiţiile accesului
la date;
- utilitare pentru generarea de formulare şi rapoarte, utilitare pentru
generarea de aplicaţii, utilitare pentru generarea unor statistici
referitoare la starea şi activitatea bazei de date, etc.

Un obiectiv important a proiectării unei baze de date de tip relaţional îl


reprezintă gruparea atributelor în relaţii astfel încât redundanţa datelor să fie

46
minimă. Relaţiile care conţin date redundante pot crea probleme, denumite
anomalii de reactualizare, care clasificate în:
- anomalii de ştergere constau în faptul că anumite date care urmează
să fie şterse, fac parte din tupluri în care se găsesc şi alte date care
mai sunt necesare în continuare, ori ştergerea făcându-se la nivelul
tuplului, acestea se pierd;
- anomalii de inserare (adăugare) constau î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;
- anomalii de modificare 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.
Spunem că un atribut B al unei relaţii R depinde funcţional de un alt
atribut A, atunci când fiecărei valori a atributului A îi corespunde exact o
anumită valoare atributului B (AB). Dependenţa funcţională este o
proprietate a semnificaţiei sau a semanticii atributelor. Semantica indică modul
în care atributele sunt legate unele de altele şi specifică dependenţele
funcţionale ale acestora. Dependenţa funcţională este specificată ca o
constrângere între atribute. Dacă atributul B depinde funcţional de atributul A,
spunem că atributul A este determinatul atributului B. Spunem că o
dependenţă funcţională este totală sau completă dacă cele două atribute au o
dependenţă funcţională în ambele sensuri (AB şi BA). Pentru trei atribute
A, B şi C, în care AB şi BC spunem că C este dependent tranzitiv de A
prin intermediul atributului B, dacă avem şi AC. În acest caz spunem că
există o dependenţă tranzitivă.
Eliminarea acestor anomalii se realizează cu ajutorul operaţiei numite
normalizare, care este o tehnică formală care se bazează pe cheile primare,
respectiv cheile candidat ale relaţiilor şi pe dependenţele funcţionale. Tehnica
include o mulţime de reguli care pot fi utilizate pentru testarea relaţiilor
individuale. Dacă o anumită cerinţă nu este îndeplinită pentru o anumită relaţie,
atunci relaţia în cauză va fi descompusă în relaţii care satisfac în mod individual
cerinţele normalizării. Normalizarea presupune parcurgerea unei succesiuni de
paşi, fiecare pas corespunzând unei forme normale. Prin parcurgerea etapelor de
normalizare relaţiile devin progresiv mai restrictive ca format şi mai puţin
vulnerabile la anomaliile de actualizare. Procesul de normalizare a relaţiilor se
realizează în mai mulţi paşi, începând cu forma normală unu (1NF) şi ajungând
la forma normală cinci (5NF). Pentru modelul relaţional doar prima formă
normală (1NF) este de importanţă critică, celelalte forme normale fiind
opţionale. Pentru a înlătura aceste anomalii, E.F. Codd a stabilit iniţial trei

47
forme normale pentru relaţii şi a introdus procesul de normalizare care se
bazează pe noţiunea de dependenţă funcţională ca relaţie între atributele unei
entităţi care are un caracter invariant. Teoria normalizării se ocupă cu
îmbunătăţirea succesivă a schemei conceptuale, fiind satisfăcute, în acelaşi
timp, următoarele condiţii:
- conservarea datelor, adică în schema conceptuală finală să existe
toate datele din cadrul schemei iniţiale;
- conservarea dependenţelor dintre date, adică să se păstreze tipurile
de relaţii dintre entităţi;
- descompunerea minimală a relaţiilor iniţiale, adică în schema
conceptuală finală nici o relaţie nu trebuie să fie conţinută într-alta.
O relaţie este în forma normală unu (1NF), dacă şi numai dacă toate
atributele ei conţin numai valori atomice, adică o sigură valoare şi numai una. În
plus, un tuplu nu trebuie să conţină atribute sau grupuri de atribute repetitive.
Este forma de bază a relaţiilor, care figurează ca cerinţă minimală la majoritatea
sistemelor de gestiune a bazelor de date de tip relaţional.
O relaţie este în a doua formă normală (2NF), dacă este în forma
normală unu şi oricare dintre atributele non-cheie este dependent funcţional
complet de cheia primară a relaţiei.
O relaţie este în a treia formă normală (3NF), dacă se găseşte în forma
normală doi şi toate atributele non-cheie sunt dependente tranzitiv de cheia
primară.
În afara primelor trei forme normale au fost introduse şi formele
normale: forma normală Boyce – Codd (BCNF), a patra formă normală (4NF)
şi a cincia formă normală (5NF) care conduc la diminuarea redundanţei în baza
de date. Trecerea de la forma 3FN la 4FN şi 5FN se face operând asupra cheilor
compuse între ale căror atribute apar relaţii care generează dependenţe ce nu
sunt funcţionale, numite dependenţe multi-valoare.
O relaţie este în forma normală Boyce – Codd (BCNF), dacă fiecare
determinant este o cheie candidat.
A patra formă normală (4NF) elimină redundanţele datorate relaţiilor de
tip n:m, adică a dependenţelor multiple.
A cincia formă normală (5NF) elimină dependenţele multiple de tip
ciclic, având ca rezultat o descompunerea a relaţiilor de tip uniune fără
pierderi, din relaţiile rezultate în urma descompunerii putând fi reconstituită
relaţia iniţială. Dependenţa de tip uniune fără pierderi este o proprietate a
operaţiei de descompunere, care garantează că nu sunt introduse linii false
atunci când relaţiile rezultare în urma descompunerii sunt reunite printr-o
operaţie de uniune naturală.

48
Operatorii modelului relaţional

Operatorii modelului relaţional definesc operaţiile care pot fi efectuate


asupra relaţiilor, pentru realizarea funcţiilor de prelucrare asupra datelor din
baza de date. Modelul relaţional foloseşte operatori relaţie din algebra
relaţională şi calculul relaţional. Algebra relaţională şi calculul relaţional sunt
limbaje formale utilizate pentru bazele de date relaţionale ca suport pentru
limbajul de manipulare a datelor, de nivel înalt. Algebra relaţională a fost
introdusă de E.F. Codd în 1971 ca o mulţime de operaţii formale în care
operanţii şi rezultatul sunt relaţii şi care acţionează asupra uneia sau a mai
multor relaţii pentru a defini o nouă relaţie, fără a modifica relaţiile iniţiale. Cei
cinci operatorii fundamentali ai algebrei relaţionale sunt fie operatori folosiţi
pentru operaţiile de regăsire: selecţia (sau restricţia), proiecţia, produsul
cartezian, reuniunea şi diferenţa, şi alţi trei operatori pentru operaţiile de
uniune, intersecţie şi împărţire, adică operatori tradiţionali pe mulţimi (UNION,
INTERSECT, PRODUCT, DIFFERENCE) şi operatori relaţionali speciali
(PROJECT, SELECT, JOIN, DIVISION). Operatorii de selecţie şi proiecţie sunt
unari, operând asupra unei singure relaţii, iar ceilalţi sunt operatori binari,
acţionând asupra unei perechi de relaţii. În algebra relaţională se specifică în
mod explicit o anumită ordine pentru evaluarea oricărei expresii, ceea ce
implică o anumită strategie de evaluare a interogării bazei de date.
În calculul relaţional o interogare precizează ce va fi extras din baza de
date fără a se preciza modul de evaluare a unei interogări. Calculul relaţional
este o adaptare a calculului predicatelor din logica simbolică aplicat pentru
interogarea bazelor de date. În logica simbolică, un predicat este o funcţie de
mai multe variabile, care are o valoare de adevăr. Înlocuind variabile cu valori
se obţine o expresie numită propoziţie, care poate fi adevărată sau falsă.
Variabilele iau valori dintr-un domeniu dat. Calculul relaţional se prezintă sub
două forme: orientat spre tupluri şi orientat spre domenii. Pe baza unor
predicate iniţiale, prin aplicarea unor operatori ai calculului cu predicate
(conjuncţia, disfuncţia, negaţia, cuantificatorul existenţial şi cuantificatorul
universal) se pot defini noi predicate, noi relaţii.
J.D. Ullmann a demonstrat echivalenţa dintre algebra relaţională şi
calculul relaţional. Motiv pentru care orice relaţie posibil de definit în algebra
relaţională poate fi definită şi în cadrul calculului relaţional, şi reciproc.

49
Integritatea referenţială

Constrângerile de domeniu sunt restricţii care se aplică asupra


mulţimi de valori permise pentru atributele relaţiilor.
Regulile de integritate sunt constrângeri sau restricţii ce se aplică
tuturor instanţelor din baza de date, adică aserţiuni pe care datele conţinute în
baza trebuie să le satisfacă şi prin care se asigură corectitudinea datelor. Se face
distincţie între regulile structurale, care sunt inerente modelării datelor şi
regulile de funcţionare (comportament), care sunt specifice unei aplicaţii
particulare. Există trei tipuri de constrângeri structurale (de cheie, de referinţă,
de entitate) ce constituie mulţimea minimală de reguli de integritate pe care
trebuie să le respecte un SGBD relaţional şi care sunt definite în raport cu
noţiunea de cheie a unei relaţii. Integritatea entităţilor impune ca într-o relaţie
de bază (care corespunde unei entităţi în schema conceptuală) nici un atribut al
unei chei primare nu poate fi null. Conform reguli de integritate referenţiale
dacă o relaţie are o cheie externă atunci orice valoare a cheii externe va coincide
cu valoarea unei chei candidat a unui tuplu în relaţia de bază a acesteia sau este
o valoare null. Sunt formulate trei reguli de integritate structurală:
- unicitatea cheii: cheia primară trebuie să fie unică şi minimală;
- integritatea entităţii: atributele cheii primare trebuie să fie diferite de
valoarea null;
- integritatea referirii: o cheie externă trebuie ori să fie null în
întregime, ori să corespundă la o valoare a cheii primare asociate.

2.11. Întrebări teoretice de auto-evaluare

1. Explicaţi:
a. Conceptul de bază de date
b. Noţiunea de model de date
c. Modelul Entitate-Relaţie
d. Tipurile de chei în cadrul modelării bazei de date
e. Obiectivele datelor în baze de date
f. Sistemele de gestiune a bazelor de date. Obiective
g. Funcţiunile sitemelor de gestiune a bazelor de date
h. Componentele unui mediu SGBD

2. Analizaţi diferenţele dintre limbajele pentru definirea datelor, limbajele


pentru manipularea datelor şi limbajele pentru controlul datelor.

50
3. Prezentaţi principalele concepte din cadrul proiectării bazelor de date.

4. Modelul de date relaţional. Baza de date relţională.

5. Detaliaţi cele 13 reguli ale lui Codd.

6. Operatorii modelului relaţional. Integritate referenţială.

51
52
CAP.3. MICROSOFT ACCESS

3.1. Rezumatul capitolului

Capitolul curent îşi propune deprinderea noţiunilor şi operaţiilor


specifice pentru crearea bazelor de date Access. Datele sunt salvate în tabele.
Acestea pot fi actualizate sau consultate prin intermediul cererilor
(interogărilor) şi/sau a rapoartelor. Pentru a crea o interfaţă grafică cu
utilizatorul (GUI – Graphical User Interface) este necesară crearea formularelor.
Acţiunile pe care Access le realizează ca răspuns la un anumit eveniment
constituie o definiţie structurată salvată sub forma unui macro. Procedurile
definite de utilizator – scrise în limbajul de programare Visual Basic poartă
numele de module. Un obiect care conţine un obiect HTML şi alte fişiere suport
în vederea furnizării accesului la date prin intermediul unui browser Internet
poartă numele de Pages (pagini web).

3.2. Noţiuni generale privind bazele de date ACCESS

Sistemul de gestiune a bazelor de date (SGBD) Microsoft Access face


parte din pachetul de aplicaţii Microsoft Office exploatabil sub sistemele de
operare Windows 2000 şi Windows XP. Microsoft Access are caracteristicile
specifice unui sistem de gestiune a bazelor de date relaţionale; care reprezintă
totodată un instrument complex de dezvoltare a aplicaţiilor de baze de date.
Microsoft Access include facilităţile oferite de sistemul de operare Microsoft
Windows; în plus, permite şi facilităţi de tipul drag and drop. Microsoft Access
este compatibil cu tehnicile de legare şi încapsulare din tehnologia OLE
Microsoft. Caracteristicile definitorii ale SGBD Access sunt următoarele:
1. Posibilitatea creării unei baze de date care poate fi utilizată de către
un utilizator sau mai mulţi utilizatori în mod partajat;
2. Interogarea bazei de date se poate realiza în mod grafic prin interfaţa
QBE (Query By Example), sau prin limbajul SQL (Standard Query
Language);
3. Automatizarea unor activităţi/acţiuni prin macro-comenzi sau prin
aplicaţi program în limbajul VBA;
4. Realizarea importului/exportului de date către alte aplicaţii ale
pachetului Microsoft Office sau alte SGBD de tip relaţional;
5. Interfaţa utilizator este uşor de folosit şi respectă principiile de
utilizare caracteristice tuturor aplicaţiilor pachetului MS Office;
6. Asistenţă în dezvoltarea aplicaţiilor şi utilizarea bazei de date;

53
7. Existenţa componentei Help şi a facilităţilor de ajutor de tip
contextual;
8. Instrumente de lucru interactiv pe baze model de tip Wizard pentru a
ajuta utilizatorii în dezvoltarea de aplicaţii;

O bază de date ACCESS este bază de date relaţională orientată spre


obiecte, o colecţie de informaţii memorate într-un fişier având extensia .MDB
sau .MDE, conţinând diferitele obiecte. Prin utilizarea formatului .MDE pentru
baza de date ACCESS devine imposibilă modificarea obiectelor bazei de date şi
este ascuns codul program Visual Basic. Obiecte pe care le poate conţine o bază
de date ACCESS sunt:

Tabelele
Tabelele conţin datele propriu-zise corespunzătoare entităţilor din
baza de date, organizate sub forma unei matrice în care coloane reprezintă
atribute (câmpuri), iar liniile apariţiile, realizările entităţii (înregistrări). O
înregistrare este o linie dintr-un tabel, în care fiecare câmp conţine o valoare
concretă dintr-un domeniu de valori şi conţine informaţii care identifică o
anumită realizare concretă a entităţii; persoană, loc sau obiect. Un câmp este o
informaţie individuală din componenţa unei înregistrări, iar fiecare coloană din
tabelul Access reprezintă un câmp diferit. O bază de date Microsoft Access
poate cuprinde cel mult 32.768 de tabele, dintre care 254 pot fi deschise
simultan, dacă există suficiente resurse disponibile. Tabelele unei baze de date
au unul sau mai multe câmpuri ce identifică în mod unic fiecare înregistrare din
acel tabel şi formează cheia primară pentru tabela respectivă.
Câmpurile din tabele ACCESS sunt definite ca fiind de un anumit tip de
dată cu care se va încărca fiecare câmp:
- AutoNumber nu poate fi modificat manual. Deşi este incrementat secvenţial în
mod implicit, se poate stabili şi o incrementare aleatoare;
- Text este destinat informaţiei de tip şir de caractere (maxim 255 caractere);
- Lookup permite stocarea unei valori, dar afişează textul ce însoţeşte valoarea
respectivă. Acest tip de câmp poate fi legat de fapt de un alt tabel sau interogare,
de unde îşi extrage informaţiile pe care le afişează sub forma unui combo box;
- Number are mai multe sub-tipuri, determinate de proprietatea field size:
- Byte cu interval valoric între 0 şi 255;
- Integer cu interval valoric între–32.768 şi 32.767;
- Long Integer cu interval valoric între –2.147.483.648 şi
2.147.483.647;
- Single cu interval valoric între–3,4*1038 şi 3,4*1038;
- Double cu interval valoric între–1,797*10308 şi 1,797*10308;

54
- Decimal cu interval valoric între –22337203685477.5808 şi
922337203685477.5808;
- Memo este utilizat pentru text de lungime ce poate depăşi 255 de caractere;
- Obiecte OLE este tot un câmp pentru obiecte predefinite;
- Date/Time conţine informaţii de dată calendaristică şi/sau timp;
- Yes/No conţine date de tip logic una din cele două stări: yes/no, on/off,
true/false.

Interogările
Interogările sunt obiecte virtuale de tip tabelă, adică vizualizări,
care nu au corespondent fizic, fiind definite cu ajutorul tabelelor definite deja în
baza de date. Tabelele virtuale definite cu ajutorul interogărilor permit
efectuarea:
selecţiilor şi sortărilor în tabele;
calculelor simple şi analizelor încrucişate;
acţiunilor (adăugarea, ştergerea, actualizarea înregistrărilor);
operaţiilor SQL.

Formularele
Formularele sunt obiecte folosite pentru a consulta sau actualiza
datele dintr-un tabel sau o structură de interogare.

Rapoartele
Rapoartele sunt obiecte folosite pentru a sintetiza datele stocate
într-o tabela reală sau virtuală şi a oferi un rezultat tipărit al informaţiilor din
baza de date – un raport ACCES, de la cea mai simplă listă a unui tabel până la
rapoartele cele mai complexe ce conţin regrupări de înregistrări şi calcule.

Paginile de prezentare

Paginile de prezentare reprezintă obiecte specifice ACCESS care


permit afişarea într-un format accesibil care permite transmiterea rapidă a
datelor prin Internet sau Intranet.

Macro-urile

55
Macro-comenzile ACCESS reprezintă o modalitate optimă de
acces la date, care permit automatizarea mai multor sarcini folosind un limbaj
specific. Pentru a rezolva o sarcină mai complexă se poate construi un macro
(format dintr-o mulţime de acţiuni) sau o procedură (formată dintr-o
succesiune de instrucţiuni în Visual Basic).

Modulele
Modulele program conţin o parte a codului VBA al aplicaţiei, şi
anume declaraţiile de variabile şi constante, funcţiile şi procedurile globale ale
întregii aplicaţii. VBA reprezintă un mediu de programare orientat obiect.

Structura unui obiect: Un obiect este o entitate autonomă ce prezintă


caracteristici (proprietăţi: mărime, culoare, valoare etc.) şi comportamente
(metode) proprii. Unele obiecte au o reprezentare vizuală (Formular, Raport,
etc.) în timp ce altele nu sunt accesibile decât în cod VBA (DBEngine,
Container etc.) Marea majoritate a obiectelor vizuale au posibilitatea de a
reacţiona la evenimente (deschidere, actualizare etc.). Programarea VBA
permite declanşarea evenimentelor, comportamentelor specifice asupra
obiectelor prin intermediul codului program: metode, proceduri şi funcţii. Astfel
VBA permite o mare flexibilitate de funcţionare şi o întreţinere mai uşoară.
Evenimentul reprezintă acţiunea utilizatorului sau a sistemului asupra
unui obiect ceea ce declanşează execuţia codului program corespunzător.
Metoda constă în codul program predefinit ce se raportează la un tip de
obiect şi care se execută în momentul apariţiei unui eveniment.
Procedura este alcătuită dintr-un set de instrucţiuni (un modul program)
ce nu returnează nici o valoare ci execută o anumită acţiune.
Funcţia constă dintr-un set de instrucţiuni (un modul program) care în
urma execuţiei returnează o valoare de un anumit tip.

56
OBIECT

COMPORTAMENTE CARACTERISTICI

COD DATE LISTA DE EVENIMENTE

METODE
PROPRIETĂŢI
(PREDEFINITE)

PROCEDURI ŞI FUNCŢII

3.2. Tipuri de fişiere în ACCESS


Micrsosoft Access foloseşte mai multe tipuri de fişiere:
fişierul .MDB este fişierul Database/Bază de date propriu-zisă. Aici se
regăseşte întreg conţinutul bazei de date, şi anume, datele (Tabele),
legături (Relations/Relaţii), interfaţa vizuală (Formulare şi Rapoarte) şi
codul (Interogări, Macro-uri şi Module);
fişierul .ADP este un proiect Access ce permite crearea unei aplicaţii
client-server cu SQL Server 2000.
fişierul .MDE este un fişier ce poate fi generat pornind de la un
fişier .MDB şi care nu mai permite utilizatorului nici să modifice
formularele şi rapoartele nici să vadă codul.
fişierul .MDW (system.mdw) este o bază de date Work Group ce
stochează informaţiile de siguranţă despre utilizatori şi grupe, la fel ca
şi despre opţiunile Access.
fişierul .MDA este o bază de date Biblioteca/Library şi poate avea un
cod ce poate fi pus la dispoziţia altor baze de date, la fel ca şi
complemente pentru a extinde posibilităţile ACCESS.
fişierul .LBD conţine informaţii despre securizarea fişierului şi este
administrat automat de Access.

3.3. Lucru cu ACCESS


Ca majoritatea programelor Windows, Access poate fi lansat în execuţie
prin navigarea meniului butonului Start.

57
Pentru a porni, click pe butonul Start > meniul All Programs
>meniul MS Office > Microsoft Access . Meniul MS Office este
arătat mai jos.

Access se deschide pe ecran:

Bara de
instru-
mente
Access

Panoul cu
sarcini

Utilizarea barei meniu


Bara meniu este similara celorlalte programe Microsoft Office. Ea
conţine meniurile:
 File - cu opţiunile New, Open, Close, Save şi Print care sunt folosite
pentru acţiuni asupra fişierelor baze de date şi asupra conţinutului acestr
fişiere. Acest meniu conţine şi opţiunea Exit pentru încheierea unei
sesiuni de lucru Access.
 Edit - Cut, Copy, Paste, Delete

58
 View - Vizualizarea diferitelor obiecte datatabase (tables, queries,
forms, reports)
 Insert - Inserarea unui nou tabel, interogare, formular, raport (Insert a
new Table, Query, Form, Report, etc.)
 Tools - Conţine o varietate de instrumente pentru verificare spelling,
crearea de relaţii intre tabele, realizarea de analize şi diferite utilităţi
asupra conţinutului unei baze de date.
 Window - Switch între bazele de date deschise.
 Help - Obţinerea care activează un ansamblu de ferestre help în Access.
Meniul File.
1. Se deschide opţiunea File.
2. Se executa click pe comanda Open, punctele de suspensie indica faptul
ca selectarea comenzii va determina deschiderea unei casete de dialog
care va solicita informaţii suplimentare.
3. Se deschide caseta de dialog Open. Aici puteţi selecta directorul care
conţine fişierul pe care doriţi să-l deschideţi, după care puteţi selecta
fişierul. Executaţi click pe Cancel (revocare) pentru a închide caseta de
dialog fără a deschide un fişier.
Meniul View
1. Executaţi click pe opţiunea View dine bara de meniuri. Se deschide
meniul View.
2. Executaţi click pe intrarea Database Objects (obiecte de tip baza de
date). Este afişat un sub-meniu, în care sunt enumerate comenzi
suplimentare; executaţi click pe oricare dintre aceste comenzi, pentru a
o selecta.
3. Apăsaţi tasta ESC de pe tastatura sau executaţi click oriunde în afara
meniului deschis. Procedând astfel, închideţi meniul fără a selecta ceva.

3.4. Noţiuni practice în ACCESS

Crearea bazelor de date şi a tabelelor


Modul de vizualizare Design View introducerea câmpurilor cu
tipul de dată asociat şi descrierea corespunzătoare (modul în care se defineşte
structura tabelelor din baza de date).
Utilizatorul poate crea o baza de date nouă (fie fără înregistrări - de tip
blank, fie cu câteva tabele create interactiv cu database wizard), sau poate să
deschidă o baza de date existentă.

59
În general, la începutul unui proiect, trebuie creată o bază de date nouă,
de tip blank. După ce este creată o bază de date, aceasta se deschide utilizând
opţiunea Open existing database pentru a redeschide baza de date creată
anterior.
Observaţie - Dacă este creată o baza de date şi după aceea creaţi o alta
folosind acelaşi nume, noua baza se va suprascrie peste cea veche.
1. Daca nu este afişat panoul cu sarcini New File, deschideţi meniul File
şi selectaţi New.
2. în zona New din caseta de dialog New File, executaţi click pe legătura
Blank database (baza de date vidă).
3. se deschide caseta de dialog File New Databases. Parcurgeţi calea de
acces până la directorul în care doriţi să salvaţi noua bază de date.
4. în câmpul File name (nume de fişier) tastaţi un nume descriptiv pentru
noua bază de date.
5. executaţi click pe butonul Create.
6. Access creează o noua baza de date şi afişează fereastra bazei de date:

Bara de
Butonul instru-
Tables mente
Tables

Fereastra
bazei
Bara de de date
instru-
mente
Objects

Crearea tabelelor
1. După ce aţi creat sau deschis baza de date pentru care doriţi să creaţi un
table executaţi click pe optiunea Tables de pe bara Objects din
fereastra bazei de date
2. Executaţi dublu-click pe opţiunea Create table in Design view
(reprezintă modul cel mai eficient de creare a tabelelor) sau click pe
butonul Design situate in bara de instrumente Tables. Crearea unei
tabele utilizând instrumentul wizard permite adăugarea unor câmpuri
predefinite ce se afla în cadrul bibliotecilor de tabele standard ACCESS.

60
Nu se recomandă aceasta modalitate deoarece câmpurile din cadrul
tabelelor standard au fost create pentru sistemul de lucru anglo-saxon.
Create table by entering data, permite crearea tabelelor prin
introducerea de date şi reprezintă o forma rapida de a introduce datele.
Ea poate fi aplicata eficient în cadrul realizării unei aplicaţii complexe.
3. În fereastra design se deschide un tabel gol, conţinând coloanele Field
Name (Nume câmp), Data Type (Tip de date) şi Description
(descriere). În coloana Field Name se tastează un nume pentru primul
câmp, după care apăsaţi tasta Tab. La definirea câmpurilor unui tabel,
este important să se folosească nume de câmpuri sugestive, care să
ofere un înţeles clar al datelor conţinute.

Numele câmpurilor în Access poate avea lungimea de până la 64


caractere; este recomandat să nu fie folosite spaţii, în locul acestora, pentru
despărţirea cuvintelor folosindu-se caracterul liniuţă de subliniere (underscore).
4. Pentru a schimba tipul de date prestabilit, Text, cu altul, executaţi click
pe săgeata în jos din câmpul Data Type, şi selectati un nou tip de dată
din lista care apare pe ecran. După care apăsaţi tasta Tab.
5. Opţional tastaţi o descriere de câmp în coloana description. Acest text
apare pe bara de stare a ferestrei Table atunci când introduceţi date şi
acest câmp este selectat.
6. Repetaţi pentru a continua să adăugaţi câmpuri.
7. Pentru salvarea tabelului, deschideţi meniul File si selectaţi Save.
8. Se deschide caseta de dialog Save As. Tastaţi un nume pentru table si
executaţi click pe OK.
9. acces pa solicita să stabiliţi o cheie primară.
10. tabelul este salvat. Pentru a închide fereastra tabelului şi a reveni în
fereastra bazei de date, executaţi click pe butonul Close.

61
Vizualizarea structurii unei tabele în fereastra Design
11. Executaţi click pe tabelul pe care doriţi să-l deschideţi, pentru a-l
selecta.
12. Executaţi click pe butonul Design situate în bara cu instrumente din
fereastra bazei de date.
13. Tabelul este deschis în fereastra Design şi vă permite să efectuaţi
modificări în structura bazei de date:
- Adăugarea şi ştergerea unui nou câmp
- Adăugarea unei descrieri a câmpului
- Schimbarea unui nume de câmp
- Schimbarea tipului de date pentru un câmp
- Stabilirea dimensiunii unui câmp de text/numeric
- Stabilirea cheii principale(executaţi click pe butonul Primary Key
situate în bara de instrumente Standard din fereastra principală a
programului Access sau click dreapta şi Primary key.

Editarea structurii tabelelor din baza de date


Fie tabela angajat cu următoarea structură:

Afişarea proprietăţilor unui câmp


1. Executaţi click pe un câmp pentru a-i vizualiza proprietăţile;
2. Fereastra de proprietăţi aflată la baza ferestrei afişează diverse
proprietăţi pentru câmpul selectat în fereastra de structură.
3. executaţi click pe un alt câmp pentru ai vizualiza proprietăţile
4. se observa că proprietăţile diferă în funcţie de tipul de câmp. Pe lângă
proprietăţile comune, câmpurile au o mulţime de proprietăţi asociate
care pot fi afişate şi modificate. La orice modificare executată asupra
bazei de date, trebuie să salvaţi baza de date. În acest scop, executaţi
click pe butonul Save situat în bara cu instrumente Standard a
programului Access.

62
5. în cazul în care dorim să adăugăm un nou câmp se deschide tabelul in
vederea Design
6. ne poziţionăm cu cursorul pe câmpul înaintea căruia dorim să inserăm o
nouă linie şi din meniului asociat evenimentului click dreapta sau
meniu Insert > Rows (bara de instrumente Standard a programului
Access).
7. apoi se introduce câmpul, tipul de date, descrierea (opţional) şi
stabilirea proprietăţilor pentru respectivul câmp:

Utilizarea formatului de afişare


1. în fereastra proprietăţi click pe câmpul Format .
2. apare pe ecran o săgeată în jos, în dreapta câmpului
3. executaţi click pe săgeata în jos şi selectaţi din lista afişată pe ecran
formatul pe care doriţi să-l utilizaţi.
4. după selecţia formatului executaţi click pe butonul Save (bara
Standard), pentru a salva modificarea în tabel.

Utilizarea unei măşti de intrare


Validarea datelor folosind măştile de intrare – deoarece măştile de intrare
necesită introducerea unui anumit număr de caractere.
1. după selecţia tabelului (angajat) în fereastra Design executaţi click in
câmpul căruia doriţi să-i aplicaţi o mască de intrare;
2. în fereastra de proprietăţi, executaţi click în câmpul Input Mask
(masca de intrare). La dreapta câmpului apare un buton pe care se afla
puncte de suspensie;
3. executaţi click pe punctele de suspensie;
4. Access va solicita să salvaţi baza de date înainte de a continua.
Executaţi click pe YES;
5. Access lansează în execuţie Input Mask Wizard; primul ecran afişează
o lista de măşti de intrare disponibile. Selectaţi masca de intrare pe care
doriţi sa o aplicaţi acestui câmp. Daca selectam Edit list este posibilă

63
crearea unei noi intrări, utilizând sistemul de asistenta al programul
Access pentru instrucţiuni specifice;
6. pentru a testa masca tasaţi o valoare în caseta de text Try It. Dacă
sunteţi mulţumit de ceea ce aţi obţinut, executaţi click pe Next pentru a
continua.
7. Apare pe ecran următoarea fereastră a aplicaţie expert. În lista
Placeholder character (caracter de înlocuire), executaţi click pe
caracterul care doriţi sa fie afişat de Access ca marcaj de rezervare in
masca de intrare. Caracterul de înlocuire sunt acele care apar în foaia de
date atunci când introduceţi date în câmpul de intrare.
8. executaţi click Next.
9. Input Mask Wizard permite salvarea modificării – cu sau fără
simbolurile utilizate in masca de intrare. Selectaţi opţiunea dorită şi
executaţi click pe Next.
10. executaţi click Finish.
11. noua mască de intrare este adăugată la foaia de proprietăţi:

12. salvam (Save)


13. ne comutam la fereastra Datasheet
14. toate intrările vide din acest câmp conţin masca de intrare.

Realizarea unui format personalizat


1. click câmpul Format
2. se tastează operatorul >

3. click Save.

64
În urma introducerii operatorului “ >” toate caracterele introduce vor fi
transformate automat în majuscule. Datele existente vor fi şi ele afectate de
aceasta modificare.

Introducerea unei valori prestabilite


Daca introduceţi frecvent aceeaşi valoare într-un câmp, puteţi defini o valoare
prestabilita, datele existente nu sunt afectate de aceasta modificare. Doar noile
înregistrări vor fi utiliza valoarea prestabilită. Valoarea prestabilită poate fi
oricând modificată.
1. pentru a introduce o valoare prestabilită executaţi click pe câmpul
Default Value (Valoarea prestabilita)
2. se tastează valoarea prestabilită înscrisă între ghilimele.
3. valoare prestabilita este inclusa în structura tabelei baza de date
4. click Save.

Reguli de validare
Regulile de validare testează conform criteriului furnizat sub forma unei
expresii Access, valoarea introdusă într-un câmp.
1. în fereastra de proprietăţi click în câmpul Validation Rule.
2. executaţi click pe punctele de suspensie
3. apare ce ecran fereastra Expression Builder şi aici construiţi interactiv
regula de validare folosind operatori, identificatori, funcţii şi constante.
4. Ok
5. expresia este adăugată la lista de proprietăţi:

65
6. Save.
Textul de validare(Validation Text) reprezintă textul care va apărea în cazul in
care valoarea introdusă nu respecta criteriul impus de regula de validare.

Câmpuri care nu pot fi null


Pentru anumite câmpuri dorim să ne asigurăm că se vor introduce date.
Introducerea unei valori pentru un câmp este impusă prin activarea proprietăţii
Required pentru câmpul respectiv, astfel că utilizatorul va fi obligat să specifice
o valoare.
1. în foaia de proprietăţi click în câmpul Required (obligatoriu).
2. click săgeată în jos şi selectaţi Yes (imaginea de mai sus)
3. acest câmp necesită acum o intrare.
4. Save

Indexarea după un câmp


Dacă la definirea structurii unei tabele nu se specifică pentru un câmp anume că
reprezintă cheie primară, ACCESS include în structura tabelei un câmp cu
numele ID care reprezintă numărul de înregistrare şi care va fi desemnat de
sistem ca fiind cheie primară. Tabela poate avea mai multe chei alternante, sau
câmpuri care reprezintă chei de indexe. Aceste sunt necesare pentru a accelera
optimiza interogarea bazei de date. Deoarece indexarea câmpurilor creşte
timpul necesar pentru operaţiile de actualizare, este necesar ca numărul de
indecşi să fie minim. Când se specifică un câmp ca fiind cheie de index se poate
preciza că respectivul câmp conţine o intrare unica (adică nu conţine valori
duplicat) sau sunt permise valori duplicat. Lucru util pentru câmpurile care
conţin valori care ar trebui sa fie unice. Dacă încercaţi să introduceţi o noua
înregistrare cu o valoare care se repetă într-un câmp indexat care nu accepta
dubluri, veţi vedea pe ecran un mesaj de eroare.

66
1. click campul Indexed
2. click sageata în jos şi din lista care apare pe ecran executaţi Click Yes
(Duplicates OK) sau No (No Duplicates).
3. Save.
Pentru a stabili care este cheia principală se selectează câmpul după care se

selectează butonul primary key .

Selectarea unei valori dintr-o lista predefinita de valori


În cazul în care pentru un cîmp exită o listă de valori prestabilite se poate asocia
lista respectivă cîmpului şi astfel la introducerea datelor valoarea va fi selectată
din listă. Ordonarea elementelor listei nu se realizează automat, fiind sarcina
utilizatorului.
1. Se deschide fereastra Design View de definire a structurii tabelei;
2. Se selectează câmpul;
3. În secţiunea Field Properties se selectează opţiunea Lookup;
4. În lista ascunsă Display Control, se selectează Combo Box;
5. În Row Source Type, se selectează Value List;
6. În Row Source, se introduc valorile separate prin virgula.

Introducerea datelor în tabele


Modul de vizualizare Datasheet View permite introducerea de date în
tabel.
1. După de aţi deschis baza de date care conţine tabelul pe care doriţi să-l
deschideţi, executaţi click pe opţiunea Tables din bara Objects pentru a
afişa tabelele disponibile in respective baza de date.
2. Executaţi click pe butonul Open situate în bara cu instrumente din
fereastra bazei de date, sau dublu-click mouse.
3. Tabelul se deschide în vederea Datasheet. Dacă aţi introdus înregistrări
în tabel, acestea sunt vizibile în caz contrar, tabelul este vid.
4. În această fereastră, câmpurile (coloanele) apar ca şi cap de tabel în
partea superioara a ferestrei, iar imediat sub ele se completează
înregistrările propriu-zise ale tabelului. În partea de jos a ecranului
observaţi numărul afişat de înregistrări conţinute de tabel. Pentru un
tabel vid apare afişată doar o singură linie goală.
5. Pentru a adăuga înregistrări în tabel (liniile tabelei reprezintă date
propriu-zise), se tastează simplu valorile corespunzătoare fiecărui câmp
în parte. Pentru deplasarea printre câmpurile unei înregistrări se
foloseşte tasta Tab, iar pentru deplasarea printre înregistrările tabelului
tastele săgeată sus şi jos.

67
6. Salvarea datelor introduse se face automat la închiderea ferestrei.
7. Pentru a naviga printre înregistrările tabelului se foloseşte bara
navigation bar din partea inferioara a ecranului:

8. Pentru a modifica datele existente, se navighează pe înregistrarea dorita,


se deplasează în câmpurile de interes şi se modifica valorile existente cu
alte valori noi.
9. Pentru a şterge o înregistrare se navighează pe înregistrarea de interes şi
apoi se foloseşte fie comanda Delete din meniul Edit, fie aceeaşi
comandă Delete din meniul asociat evenimentului click dreapta
mouse.
10. Pentru a adăuga o nouă înregistrare, executaţi click pe butonul New
Record (bara de navigare) a ferestrei tabelului sau click dreapta New
record. Când se apasă tasta Tab, după ce aţi completat ultimul câmp al
liniei curente, Access salvează înregistrarea din acea linie şi creează o
înregistrare nouă şi goală, pregătită pentru a primi noi înregistrări.

Fixarea coloanelor
Dacă o tablă are multe coloane, astfel încât nu le putem vedea pe toate în
fereastra de vizualizare. În acest caz se poate fixa coloana de care avem nevoie,
astfel încât aceasta să rămână pe ecran.
1. selectarea coloanei pe doriţi să o fixaţi.
2. se deschide meniul Format > Freeze Columns.
3. coloana este fixată. În momentul in care am “fixat” coloana, Access o
mută pe primul luc în fereastra de vizualizare.
4. pentru a anula, deschideţi meniul Format > Unfreeze All Columns.

Ascunderea coloanelor
O modalitate simplă de a va concentra pe anumite câmpuri din tabel este
ascunderea coloanelor, care nu sunt relevante pentru ceea ce lucraţi în acel
moment.
1. executaţi click pe coloana pe care doriţi sa o ascundeti.
2. deschideţi meniul Format şi selectaţi Hide Columns
3. coloana este ascunsa. Pentru a afişa din nou coloana ascunsă, deschideţi
meniul Format > Unhide Columns
4. se deschide caseta de dialog Unhide Columns, afişând coloanele din
tabel. Fiecare coloana este însoţită de o caseta de validare. Coloanele

68
însoţite de o caseta de validare sunt ascunse. Executaţi click pentru a o
bifa şi a afişa coloana.
5. Close.
6. coloanele ascunse vor fi afişate.

Redimensionarea coloanelor
Toate coloanele unui tabel au aceeaşi mărime. Totuşi, le putem re-
dimensiona în funcţie de necesităţi.
1. plasaţi cursorul mouse pe marginea din dreapta a coloanei pe care doriţi
să o redimensionaţi. Cursorul mouse-ului îşi sugerând poziţionare pe
marginea coloanei.
2. executaţi click pe marginea coloanei şi după fixare ţinând butonul
mouse apăsat deplasaţi mutaţi marginea spre stânga, respectiv dreapta,
pentru a micşora, respectiv mări coloana.
3. coloana este redimensionată.
4. pentru a redimensiona liniile se procedează similar.

Rearanjarea coloanelor
Schimbarea structurii tabelului propriu-zisa nu este afectata de schimbarea
ordinii coloanelor în fereastra de vizualizare.
1. selectaţi coloana pe care doriţi să o mutaţi;
2. trageţi coloana în noua poziţie. In timp ce trageţi, se afişează o linie
verticală;
3. când linia verticală a ajuns în poziţia dorită, eliberaţi butonul mouse;
4. coloana este mutată.

Ştergerea unei înregistrări


O ştergere nu poate fi anulata, adică înregistrarea ştearsă nu poate fi refăcută.
1. selectaţi înregistrarea pe care doriţi sa o ştergeţi
2. deschideţi meniul Edit şi selectaţi Delete Records
3. Access vă solicită să confirmaţi ştergerea. Executaţi click pe Yes
4. înregistrarea este ştearsă.

Copierea unei înregistrări


1. selectaţi înregistrarea pe care doriţi sa o copiaţi
2. deschideţi meniul Edit şi selectaţi Copy
3. executaţi click în linia goală de la baza tabelului
4. deschideţi meniul Edit şi selectaţi Paste Append
5. înregistrarea copiată este scrisă şi poate fi editată funcţie de necesităţi.

69
Procedeul poate fi utilizat şi pentru a muta o înregistrare dintr-un loc în altul,
dar în loc să utilizaţi Edit > Copy utilizaţi Edit > Cut.

Sortarea înregistrărilor în fereastra Datasheet


1. executaţi click în câmpul sau coloana după care doriţi sa se realizeze
sortarea;
2. executaţi click pe butonul Sort Ascending/Sort Descending;
3. înregistrarea a fost sortată.

Daca doriţi să aveţi posibilitatea de a reveni la ordinea iniţială, includeţi în


structura tabelului un câmp de tip Autonumber, care numerotează în mod
automat înregistrările din tabel. După aceea puteţi sorta înregistrările din tabel
după acest câmp, pentru a reveni la ordinea iniţială.
Pentru sortare se poate utiliza comenzile din meniul Records > Sort > Sort
Ascending sau Sort Descending.

Regăsirea datelor şi înlocuirea datelor


1. executaţi click pe coloana sau câmpul după care doriţi să efectuaţi
căutarea;
2. deschideţi meniul Edit şi selectaţi Fiind;
3. caseta de dialog Find and Replace se deschide, afişând rubrica fiind. În
câmpul Find What tastaţi valoare de căutat şi atunci când este cazul
noua valoare pentru înlocuire;
4. opţional pentru a căuta în tabel, executaţi click pe săgeata în jos de
lângă câmpul Look in şi selectaţi numele de tabel care apare pe ecran.
5. executaţi click pe săgeata în jos de lângă câmpul Match şi selectaţi
Whole Field, Any Part of Field sau Start of Field;
6. executaţi click pe butonul Find Next;
7. Access localizează şi selectează înregistrarea care conţine prima intrare
care corespunde datelor căutate. Dacă nu este înregistrarea de dcare este
nevoie, executaţi click pe butonul Find Next pentru a găsi următoarea
apariţie a valorii căutate. Se repetă operaţia de care ori este necesar.
8. Access anunţa când nu mai găsesc alte apariţii. Executaţi click pe OK.
Pentru a închide caseta de dialog Find and Replace, executaţi click Cancel.

Formatarea conţinutului ferestrei Datasheet


1. deschidem meniul Format > Datasheet
2. apare pe ecran caseta de dialog Datasheet Formatting
3. selectati Flat (plat), Raised (reliefat) sau Sunken (adancit) din zona
Cell Effect pentru a preciza cum ar trebui să arate celulele din tabelă;

70
4. pentru a aplica o culoare de fundal tabelului, executaţi click sageata in
jos de lângă câmpul Background Color şi selectaţi o culoare din lista
care apare pe ecran.
5. pentru a schimba culoarea liniilor de grila din tabel, executaţi click pe
săgeata în jos de lângă câmpul Gridline Color şi selectaţi o culoare din
lista care apare pe ecran.
6. pentru a schimba stilul de linie al chenarului tabelei, al liniilor de grila
sau al sublinierii titlului de coloană, selectaţi articolul de schimbat din
lista derulanta din partea stângă, din zona Border and Line Styles
7. executaţi click săgeata în jos de lângă câmp situate în extremitatea
dreapta în zona Border and Line Styles şi selectaţi un stil de linie
pentru chenarul tabelei, liniile de grila, respectiv sublinierea titlurilor de
coloană.
8. Zona Sample din caseta de dialog Datasheet Formatting afişează o
imagine în care puteţi vedea schimbările înainte de aplicarea acestora.
Daca sunteţi mulţumit de noul aspect al tabelei, executaţi click pe OK;
9. inversarea ordinii coloanelor - pentru a inverse ordinea coloanelor,
selectaţi butonul de opţiune Right-to-left al casetei de dialog Datasheet
Formatting
10. tabelul este formatat cu elementele selectate.

Pentru exemplificări folosim o bază de date numită Aprovizionare care are patru
tabele cu următoarea structură:
Furnizor
Denumire
Semnificaţie Tip
câmp
Codfz Codul furnizorului Number(Long Integer) PK
Denfz Denumirea furnizorului Text(50)
Adrs Adresa furnizorului Text(50)
Codf Codul fiscal al furnizorului Number(Long Integer)
Banca Banca unde are deschis cont Text(30)
furnizorul
Cont Numarul contului in banca Text(24)

Factura
Denumire
Semnificaţie Tip
câmp
Nrfact Numarul facturii Number(Long Integer) PK
Datafact Data la care a fost emisa factura Date/Time
Codfz Codul furnizorului Text(50) FK

71
Linie_factura
Denumire
Semnificaţie Tip
câmp
Nrlinie Numar linie factura Number(Long Integer) PK
Nrfact Numarul facturii Number(Long Integer) FK
Codp Codul produsului Number(Long Integer) FK
Cant Cantitatea intrata Number(Long Integer)

Produs
Denumire
Semnificaţie Tip
câmp
Codp Codul produsului Number(Long Integer) PK
Denp Denumirea produsului Text(50)
Um Unitatea de masura Number(Long Integer)
Pretu Pretul unitar Number(Long Integer)

Crearea de relatii între tabele(Relationships)


Din punct de vedere al momentului creării relaţiilor, exista 2 tipuri de relaţii
între tabelele unei baze de date Access şi anume:
1. Relaţii permanente – care se stabilesc după definirea tabelelor şi sunt
considerate de modelul relaţional ca făcând parte din structura bazei de
date. Acestea se realizează de obicei prin corespondentele cheie primară
– cheie externă şi sunt memorate în baza de date.
2. Relaţii temporare – se stabilesc între tabele cu ocazia definirii unor
cereri de interogare, nefiind înregistrate în structura bazei de date.
În baza de date nu este obligatoriu ca între tabele să existe relaţii.
Relaţiile care se pot stabili între tabele sunt de 3 tipuri:
 unu la unu (one to one);
 unu la mai mulţi (one to many);
 mai mulţi la mai mulţi (many to many).
După definirea mai multor tabele în baza de date, acestea pot fi relaţionate pe
baza câmpurilor comune. O relaţie funcţionează pe baza unor câmpuri comune
ale tabelelor, astfel încât să se poată proiecta pe baza lor structuri de interogare,
formulare şi rapoarte care să extragă date din tabelele bazei de date. În
majoritatea cazurilor, aceste câmpuri comune sunt: cheia primara a unui tabel
(primary key care furnizează o identificare unică a fiecărei înregistrări din
tabelul respectiv) şi cheia externa (foreign key) a unui alt tabel. Explicitarea
acestei relaţii in Access se face prin intermediul ferestrei Relationships. Access

72
va utiliza aceasta informaţie atunci când va proiecta rapoarte, formulare si
structuri de interogare care vor avea folosi mai multe tabele.
Se urmează paşii de mai jos pentru crearea relaţiei între doua tabele:
În fereastra bazei de date meniul Tools > Relationships sau de pe bara de
instrumente Standard butonul :

sau

1. se deschide caseta de dialog Show Table, cu rubrica Tables in


prim-plan. Executaţi click pe primul tabel pentru care doriţi sa
stabiliţi o relaţie pentru a fi selectat;
2. executaţi click pe butonul Add;
Daca adăugaţi din greşeala un tabel în fereastra Relationships, îl puteţi şterge
din fereastra executând click – dreapta pe fereastra tabelului si selectand Hide
Table din meniul rapid care este afişat.
3. pe ecran este afişata o fereastra reprezentând tabelul (tabelele)
adaugate:

4. după ce tabelele au fost selectate click pe butonul Close;


5. pentru a stabili legătura dintre doua tabele se trage (drag) câmpul
primary key al tabelului părinte (furnizor în acest caz), şi se
eliberează peste (drop) acelaşi câmp din tabelul copil (factura in
acest caz);
6. se deschide caseta de dialog Edit Relationships, unde se pot stabili
opţiuni privind funcţionarea relaţiei pe care a-ţi stabilit-o. Verificaţi
sa fie enumerate drept câmpuri legate câmpurile corecte.

73
7. Select Enforce Referential Integrity

Aceasta opţiune are o acţiune de constrângere astfel încât o înregistrare din


tabelul furnizor nu poate fi creat fără a avea un client valid in codfz, iar Access
va preveni de asemenea utilizatorul în momentul în care ar dori să şteargă o
înregistrare din tabelul furnizor care are înregistrari relaţionate în tabelul
factura.
- Atunci când opţiunea Update Related Fields este bifată, orice schimbare in
tabela primara va determina modificarea automata a valorilor corespunzătoare
din înregistrările relaţionate.
- Atunci când opţiunea Cascade Delete Related Records este bifată, ştergerea
unei înregistrări din tabela părinte va determina ştergerea automata a tuturor
înregistrărilor corespondente din tabelul relaţionat.

8. Click pe Create şi salvaţi relaţia. Ecranul Relationships va reapare


astfel:

74
Simbolul "1" indică partea "One" a relaţiei şi simbolul infinit indică partea
"Many" a relaţiei. Pentru a şterge o relaţie vom da click pe linia creată pentru a
o selecta şi apoi se apasă tasta Delete de pe tastatură.
9. executaţi click pe butonul Save ca sa salvaţi relaţia.
10. executaţi click pe butonul Close din fereastra Relationships, ca să
o închideţi.

Utilizarea sub-foilor de date


Atunci când sunt legate două tabele avem posibilitatea ca în fereastra de
vizualizare a tabelei părinte să activăm o sub-fereastră prin intermediu căreia
puteţi consulta înregistrarea fiică cu care este legată. Datele din sub-foaie pot fi
editate. Dacă aţi configurat relaţia impunând integritatea referenţială,
modificările vor fi efectuate şi salvate în tabelul original, legat.
1. se deschide tabel părinte, se dă click pe semnul plus de lângă
înregistrarea a cărei sub-foaie de date doriţi să o vedeţi.

2. datele din tabelul corelat cu acesta sunt afişate. Pentru a ascunde sub-
foaia de date, se execută click pe semnul minus de lângă înregistrare.

3. sub-foaia de date este ascunsă.

Structuri de interogare (Query)


O interogare (query) este o definiţie unei tabele virtuale care foloseşte date din
tabele reale. Această structură include câmpuri din tabele legate, criteriile de
selecţie, ordinea de sortare. Structura unei interogări indică datele care se vor
extrage, Microsoft Access oferind următoarele posibilităţi:
 selectarea anumitor câmpuri semnificative din înregistrările unei tabele;

75
 selectarea înregistrărilor care satisfac anumite criterii;
 sortarea înregistrărilor într-o ordine precizată de utilizator;
 interogarea mai multor tabele; o interogare permite combinarea
înregistrărilor din mai multe tabele şi afişarea rezultatului într-un singur
tabel virtual;
 interogarea altor baze de date existente în sisteme de gestiune a bazelor
de date cum sunt FoxPro, Paradox, dBase, Btrieve, Microsoft SQL
Server;
 crearea de câmpuri pentru afişarea rezultatelor unor calcule;
 crearea de rapoarte, formulare sau alte interogări.
Rolul fundamental al structurilor de interogare (Queries) este acela de a accesa
şi afişa date din tabele. Interogările pot accesa un tabel sau mai multe tabele.
Fereastra de definire a structurii de interogare Query Design view are două
secţiuni principale. În secţiunea superioară va afişa tabelul (tabelele) folosit(e)
de interogare împreună cu câmpurile respective disponibile, iar secţiunea
inferioară este o grilă care va conţine acele câmpuri selectate pentru a fi afişate.
Fiecare câmp are câteva opţiuni asociate:
 Field - Numele câmpului din tabel
 Table - Tabelul din care provine câmpul selectat
 Sort - Ordinea de sortare în cadrul câmpului (Ascending, Descending
sau Not Sorted)
 Show - Se bifează sau nu după cum se doreşte sau nu afişarea câmpului
respectiv ca rezultat al rulării interogării.
 Criteria - Indică criteriul după care sunt filtrate înregistrările - criteriul
se specifică în câmpul (câmpurile) în care se aplică filtrarea valorilor
respective.
Odată construită, o structură de interogare poate fi sursă de înregistrări
pentru crearea unui formular sau a unui raport. Interogările afişează datele
conţinute în cel mult 16 tabele. Cu ajutorul lor se poate indica modul în care să
fie prezentate datele, alegând tabelele care conţin interogarea şi cel mult 255 de
câmpuri ale acestora. În Access se pot crea următoarele tipuri de interogări:
interogări de selecţie, interogări de acţiune, interogări încrucişate,
interogări parametrice.
Interogările de selecţie extrag informaţii din unul sau mai multe tabele şi le
afişează sub formă de listă. Ele permit şi modificarea rezultatului afişat,
modificare ce va fi văzută şi în tabelul sursă. De asemenea, permit şi folosirea
de parametri, cum este reuniunea de câmpuri din tabele între care nu există nici
o legătură.

76
Interogările uni-tabel sunt utilizate pentru vizualizări de date dintr-un tabel,
care:
 afişează doar anumite câmpuri (coloane);
 sortează înregistrările într-o ordine particulară;
 efectuează calcule folosind expresii de anumite tipuri;
 filtrează înregistrările folosind anumite criterii;
Realizarea de interogări asupra mai multor tabele folosind relaţiile stabilite între
tabele pentru a manipula astfel datele care satisfac cerinţele interogării.
Interogările de acţiune creează un nou tabel în baza de date sau realizează
modificări majore ale unui tabel existent. În general, toate interogările de
acţiune pot fi realizate pe baza unei interogări de selecţie. Ele permit adăugarea,
modificarea sau ştergerea de înregistrări într-un tabel. Există patru tipuri de
interogări de acţiune:
1 • interogări de generare a unui nou tabel din datele conţinute în
setul de rezultate al interogării;
2 • interogări de adăugare a noi înregistrări într-un tabel;
3 • interogări de ştergere a unor înregistrări dintr-un tabel;
4 • interogări de actualizare a unor înregistrări dintr-un tabel,
conform cu o condiţie ce trebuie îndeplinită.
Acţiunile acestora sunt ireversibile asupra datelor din tabelele sursă, iar în cazul
ultimelor trei dintre ele, trebuie urmărită păstrarea integrităţii referenţiale atunci
când prin intermediul lor se acţionează asupra mai multor tabele legate.
Interogările încrucişate centralizează în formatul unei foi de calcul tabelar
datele din unul sau mai multe tabele. Datele rezultate după execuţia unei astfel
de interogări sunt prezentate într-un format potrivit pentru analiza datelor şi
crearea de grafice.
Interogările parametrice nu sunt un tip special de interogări, o funcţie
parametru putând fi folosită pentru toate celelalte interogări prezentate mai sus;
ele folosesc în mod repetat o interogare, efectuând modificări în criteriile de
selecţie.

Crearea manuală a interogărilor se realizează prin intermediul utilitarului


Query Design care foloseşte o interfaţa grafică de tip Query by Example
(QBE). Aceasta permite utilizatorilor să găsească şi să afişeze informaţiile de
care au nevoie. Alegerea tipului de interogare se face selectând opţiunea
corespunzătoare din meniul Query. Pentru a crea o nouă structură de
interogare în modul Query Design, se vor parcurge următorii paşi:
1. selectarea tabelelor din care se doresc a fi afişate/prelucrate datele;
2. selectarea câmpurilor care se vor transforma în coloanele tabelului
virtual rezultat al interogării;

77
3. stabilirea criteriilor de selecţie şi a câmpurilor asupra cărora vor fi
aplicate; se poate apela la un singur criteriu de selecţie sau la mai multe
criterii, aplicate fie unor câmpuri diferite, fie formând un criteriu
compus aplicat aceluiaşi câmp;
4. stabilirea parametrilor de selecţie. Parametrii funcţionează pentru
interogări asemănător criteriilor de selecţie, cu deosebirea că la fiecare
execuţie trebuie specificată valoarea parametrului în funcţie de care se
va realiza selecţia;
5. stabilirea tipului de sortare a datelor afişate ca rezultat şi a câmpurilor
asupra cărora va acţiona;
1 6. specificarea expresiilor de calcul pentru câmpurile care sunt
rezultatul unor operaţii executate asupra unora dintre câmpurile deja
existente. Acest lucru se poate face fie prin scrierea directă a formulei,
fie prin apelarea constructorul de expresii un utilitar inclus în ACCESS;
2 7. alegerea tipului de interogare prin selectarea din meniul Query a
uneia dintre opţiunile: de selecţie, încrucişată, de generare a unui
tabel, de adăugare într-un tabel, de ştergere dintr-un tabel, de
actualizare a unui tabel.
3 În funcţie de opţiunea aleasă, Access modifică designul interogării
şi cere informaţii suplimentare astfel:
 pentru generarea unui tabel – numele tabelului ce
urmează a fi creat;
 pentru adăugarea într-un tabel – numele tabelului ce
urmează a fi încărcat cu date, precum şi câmpurile
destinaţie;
 pentru actualizare – condiţiile de actualizare şi valoarea la
care se doreşte actualizarea;
 pentru ştergere – numele tabelului din care se va şterge şi
condiţia de ştergere.
Pentru a rula interogarea avem la dispoziţie butonul din bara de instrumente pe
care este desenat semnul exclamării de culoare roşie sau, în mod echivalent,
putem folosi opţiunea Run a meniului Query.

Formulare ACCES

Formularele (formele) sunt machete (ferestre) folosite pentru consultarea


şi reactualizarea datelor. Formularul are ca destinaţi ecranul, dar poate fi
tipărit şi la imprimantă. Este folosit pentru un acces aleator la înregistrări.
Spre deosebire de rapoarte, dacă se tipăreşte un formular la imprimantă

78
apar şi culorile de fundal, împreună cu butoanele de comandă, casetele de
text şi alte controale. Formularul se defineşte pentru un tabel real sau
virtual. În funcţie de modul de afişare, sunt disponibile următoarele tipuri de
formulare:
- Single form afişează doar înregistrarea curentă;
- Continuous form permite vizualizarea mai multor înregistrări;
- Datasheet form afişează datele sub formă de linii şi coloane, la fel ca o
foaie de calcul tabelar;
Chart form afişează datele sub formă grafică.
Formularele din Access creează interfaţa utilizatorului cu tabelele. Ele
permit realizarea unor obiective ce nu pot fi îndeplinite prin lucrul în mod direct
cu tabelele. Prin intermediul lor se poate opere direct asupra datelor fie dintr-un
tabel. Formularele sunt compuse din obiecte de control, care sunt o colecţie de
elemente specifice de proiectare destinate fie afişării datelor.

Crearea formularelor
ACCESS oferă următoarele metode de realizarea a formularelor:
- Design View permite crearea manuală a formularelor.
Utilizatorului i se pune la dispoziţie un tabel liber şi caseta cu
instrumente Toolbox;
- Form Wizard generează un formular pe baza câmpurilor
selectate din unul sau mai multe tabele sau interogări;
- AutoForm: Columnar creează un formular în care fiecare
câmp apare pe o linie separată având în stânga numele,
fiecare înregistrare reprezentând un nou tabel;
- AutoForm: Tabular creează un formular în care numele
câmpurilor apare o singură dată în capătul de sus al
formularului, iar înregistrarea datelor se face pe linie;
- AutoForm: Datasheet creează un formular în care datele sunt
afişate sub forma foilor de calcul tabelar;
- AutoForm: PivotTable creează un formular în care sunt
afişate date calculate – vezi punctul 9 pentru mai multe
detalii;
- AutoForm: PivotChart creează un formular în care sunt
afişate sub formă grafică date calculate;
- Chart Wizard creează un formular în care datele sunt afişate
sub forma unui grafic;
- Pivot Table Wizard creează un formular în care sunt afişate
datele calculate; programul foloseşte aplicaţia Microsoft
Excel pentru a crea tabelul pivot, în timp ce în Microsoft

79
Access se creează formularul în care acesta va fi inclus. Sunt
numite astfel pentru că li se poate schimba în mod dinamic
aranjarea astfel încât să analizeze datele selectate în diverse
moduri.
Crearea manuală a formularelor cu Design View realizează în mod
interactiv folosind o sursă de date (tabel real sau virtual) care va conţine date
pentru care se defineşte formularul folosind o fereastră, de definire formular
(formă), în care vor fi inserate diverse tipuri de obiecte. Lista obiectelor ce pot
fi inserate în formular este pusă la dispoziţia utilizatorului prin intermediul
grupului de butoane Toolbox. În formularele Access se pot insera trei tipuri de
obiecte de control:
1. obiecte de control asociate sunt obiecte ataşate unui câmp din sursa
de date a formularului, ele afişând şi actualizând valorile datelor
câmpului asociat din înregistrarea curentă. Toate obiectele de acest fel
sunt însoţite de etichete ce afişează titlul câmpului căruia îi sunt ataşate;
2. obiecte de control neasociate sunt obiecte care afişează datele
independente de sursa de date a formularului; ele pot sau nu să fie
însoţite de etichete;
3. obiecte de control calculate sunt obiecte ce folosesc expresiile
calculate, ca sursă de date.
Principalele obiecte de control vizibile pe caseta Toolbox sunt:
- caseta de text Text Box creează o casetă ce afişează şi permite editarea datelor
de tip text;
- caseta de listă List Box creează o casetă ce cuprinde o listă derulantă de
opţiuni;
- caseta combinată Combo Box creează o casetă combinată for-mată dintr-o
casetă de text editabilă şi o casetă de listă. Poate avea ca sursă chiar un alt tabel
decât sursa de date;
- casetă de validare Check Box creează o casetă de validare care comută între
stările on şi off;
- buton comutator Toggle Button creează un buton cu două stări on/off,
corespunzătoare stărilor - yes (-1), respectiv no (0);
- buton de opţiune Option Button creează un buton rotund cu un comportament
identic cu cel al unui buton comutator;
- grup de opţiune Option Group creează o casetă în care se pot plasa butoane
comutatoare, de opţiune sau casete de validare. În cadrul unui astfel de grup
poate fi activ un singur obiect de control;
- buton de comandă Command Button creează un buton care la selectare comută
un eveniment ce execută o macroinstrucţiune sau o procedură VBA;
- etichetă Label creează o casetă ce conţine un text;

80
- submachetă Subform ataşează unei machete o sub-machetă deja existentă.

Pentru a crea manual un formular se parcurg următorii paşi:


1. stabilirea surselor de date care pot fi unul sau mai multe tabele/interogări;
2. stabilirea tipului de formular dorit, în funcţie de forma de afişare;
3. alegerea obiectelor de control necesare şi configurarea lor conform cu
necesităţile de afişare şi editare în cadrul formularului;
4. configurarea zonelor de antet şi de subsol atât la nivelul întregului raport cât
şi la nivelul fiecărei pagini;
5. crearea unui sub-formular dacă este necesar;
6. adăugarea sub-formularului şi crearea legăturilor cu formularul de origine.

Rapoarte ACCES

Raportul este formatul extern, final, de prezentare a informaţiilor extrase


din baza de date în formă tipărită. Raportul constituie cea mai bună
modalitate de a tipări informaţiile extrase din baza de date.
În ACCESS există şase tipuri de rapoarte de bază:
1. rapoartele cu o singură coloană afişează pentru fiecare înregistrări din
sursa de date toate câmpurile plasate unul sub altul;
2. rapoartele dispuse pe linii furnizează câte o coloană pentru fiecare
câmp al sursei de date, plasând valoarea fiecărui câmp al înregistrării pe
linii plasate sub capul de coloană. Dacă există mai multe coloane şi nu
încap pe o pagină, se tipăresc mai multe pagini suplimentare, în ordine
până la epuizarea numărului de coloane; apoi, se tipăreşte următorul grup
de înregistrări;
3. rapoartele multi-coloană se obţin din rapoartele cu o singură coloană,
prin divizarea paginii în mai multe coloane asemănător tipăririi ziarelor;
4. rapoartele cu grupare/totalizare sunt similare rapoartelor create de alte
aplicaţii de gestiune a bazelor de date. Ele însumează datele pe grupuri de
înregistrări şi adaugă la sfârşitul raportului informaţii statistice de tip
total general;
5. etichetele pentru corespondenţă constituie un tip deosebit de raport
multicoloană, proiectat pentru a tipări în mod grupat nume şi adrese sau
alte informaţii provenite din mai multe câmpuri;
6. rapoartele neasociate conţin subrapoarte care au la bază surse de date
nelegate, cum ar fi tabele sau interogări.
Primele patru tipuri de rapoarte utilizează ca sursă de date o
tabelă sau o structură de interogare. Ele se numesc rapoarte asociate

81
sursei de date. Raportul principal al unui raport neasociat nu este legat la
o tabelă sau structură de interogare. Însă subrapoartele conţinute într-un
raport neasociat trebuie să fie asociate unei surse de date.
Raportul parcurge secvenţial înregistrările sursei de date, tabelă
reală sau virtuală, pentru a tipăriri datele oferind posibilitatea de a insera
totaluri, subtotaluri şi rezumate, de a grupa datele pe un număr de până la
10 niveluri diferite şi subrapoarte imbricate pe maxim trei niveluri.
Raportul nu permite editarea şi modificarea datelor. Machetele de raport
pot fi stocate pe disc pentru a fi tipărite ulterior.
Raportul este structurat pe următoarele secţiuni:
- Report Header zonă rezervată începutului de raport;
- Page Header zonă rezervată începutului de pagină;
- Detail zonă rezervată pentru descrierea linilor curente
(de detaliu) din cadrul raportului, putând fi grupate 10
nivele;
- Page Footer zonă rezervată pentru sfârşitul de pagină;
- Report Footer zonă rezervată sfârşitului de raport.

Crearea rapoartelor
Modul de generare a unui raport prin folosirea programelor Wizard este
asemănător cu cel prin care se generează formularele folosind
ReportWizard:
- Opţiunine AutoReport realizează un raport într-un singur pas, limitările
constau dint posibilitatea selectării datelor dintr-o singură sursă.
- Opţiunea Design View permite construirea manuală a unui raport. Prin
selectarea acestei opţiuni se va deschide o fereastră de proiectare raport şi
instrumentele de lucru. Crearea unui nou raport este asemănătoare cu cea
de creare a formularelor, trecând prin aceleaşi etape şi folosind aceleaşi
obiecte de control. Spre deosebire de formulare, rapoartele au mai multe
posibilităţi de sortare, grupare şi calculare a datelor. Access permite
manipularea rapoartelor prin programele de aplicaţie, însă nu şi crearea
acestora. Pot fi modificate proprietăţile obiectelor de control din cadrul
unui raport astfel încât să fie actualizat în mod dinamic.

82
3.5. Întrebări teoretice de auto-evaluare

1. Explicaţi:
a. Caracteriticile definitorii ale SGBD-ului Access
b. Pe scurt noţiunile de tabel, interogări, rapoarte, pagini de
prezentare macro-uri şi module
c. Tipurile de fişiere în Access
d. Bara de meniuri

2. Să se explice fiecare tip de interogare suportat de Access.

3. Formulare Access şi tipuri de controale utilizabile.

4. Rapoarte Access.

83
84
CAP.4. LIMBAJUL VISUAL BASIC PENTRU
APLICAŢII

4.1. Rezumatul capitolului

Limbajul Visual Basic for Application (VBA) este un limbaj orientat pe


obiecte şi pe evenimente. În acest capitol ne propunem prezentarea avantajelor
folosirii VBA, prezentarea mediului de dezvoltare pentru VBA, configurarea
editorului VBA, modelul obiect din Access şi principiile utilizării obiectelor şi
colecţiilor. Pentru început se crează o procedură VBA utilizând variabile,
constante, tipuri speciale de date, folosind mai multe tipuri de structuri de
decizie şi selecţie, precum şi structuri interative. Ulterior se pot crea clase de
obicte. Este prezentată gestionarea evenimentelor în Access, proprietăţile şi
metodele obiectelor Access precum şi unele recomandări privind optimizarea
codului VBA.

4.2. Macro-comenzi sau VBA?

VBA Access este un limbaj de programare orientat obiect, dezvoltat de


Microsoft folosind limbajul Visual BASIC adaptat la cerinţele specifice ale
sistemelor de gestiune de baze de date.

De ce folosim VBA ?
Avantajele VBA sunt următoarele:
 VBA permite furnizarea unor funcţionalităţi complexe,
 VBA facilitează întreţinerea bazelor de date deoarece procedurile
eveniment Visual Basic pot fi sunt integrate în definiţia formelor
(fomularelor), respectiv a rapoartelor),
 permite realizarea acţiunilor la nivelul sistemului,
 Se pot intercepta şi prelucra erorile cu ajutorul VBA,
 VBA este mai rapid de executat decât macro-comenzile,
 Utilizarea VBA face baza de date mai uşor de întreţinut,
 Utilizarea VBA permite interacţiunea cu alte aplicaţii,
 Utilizarea VBA conferă controlul programării,
 VBA este mai uşor de citit,
 VBA este comun pentru majoritatea aplicaţiilor Microsoft.

Macro-comenzile (Macro-uri) reprezintă un mod simplu de a administra


înlănţuiri de acţiuni simple, de exemplu deschiderea şi închiderea formularelor.

85
Ele sunt recomandate pentru utilizatorii specialişti. Programele de aplicaţie vor
fi realizate întotdeauna de programatori care folosesc VBA. Macro-urile pot fi
convertite în module program VBA:
Conversia macro-urilor într-un fomular sau un raport
deschideţi obiectul în modul Design şi, în meniul Tools, deschideţi
opţiunea Macro şi Convert Macros to Visual Basic.
Conversia macro-urilor globale
faceţi clic pe Macros pe bara de obiecte a ferestrei Databases,
în meniul File, alegeti optiunea Save As,
în căsuţa de dialog Save As, faceţi clic pe Module apoi pe OK.

Majoritatea elementelor manipulate în Access sunt obiecte de tip tabel


real sau virtual, formular, raport etc.
Obiectele, respectând principiile programării orientate spere obiecte,
sunt organizate după un model ierarhic, adică anumite obiecte conţin altele
care la rândul lor conţin altele. De exemplu, obiectul Application este alcătuit
din mai multe obiecte Form (formulare de aplicaţie), care conţin mai multe
obiecte Control (controalele unui formular). Un ansamblu de obiecte de aceeaşi
natură constituie o colecţie (colecţia Forms: ansamblu de formulare sau obiecte
Form ale aplicaţiei). Un obiect dispune de un ansamblu de caracteristici numite
proprietăţi (ex: dimensiune, culoare pentru un control dintr-un formular) şi de
compartimente sau acţiuni numite metode (ex: metoda Close al obiectului
Form permite închiderea acestuia). Obiectul răspunde unor evenimente
provocate de către utilizator (ex: clic pe un buton de comandă) sau de către
sistem. Clasele sunt modele ce permit crearea obiectelor de aceeaşi natură.
Obiectele provenite din aceeaşi clasă moştenesc caracteristici de la toate
metodele, proprietăţile şi evenimente clasei lor originare. Se pot crea clase de
obiecte cu VBA Access utilizând modulele de clasă predefinite. Există mai
multe tipuri de obiecte în Access:
- obiecte generale (formulare, rapoarte, etc.),
- obiecte de acces la date (model DAO),
- obiecte de date ActiveX (model DAO).
Fiecare ansamblu poate fi reprezentat sub forma unui model ierarhic.

4.2. Mediul de dezvoltare pentru VBA (IDE)

IDE (Integrated Development Environment) este mediul în care se poate


crea, modifica şi testa codul VBA. Acest mediu este de numit şi VBE (Visual
Basic Editor). IDE pune la dispoziţie numeroase instrumente ce facilitează

86
programarea şi punerea la punct a codului VBA: instrumente de Debugg
(folosită în procesul de depanare a aplicaţiilor), asistenţă pentru crearea de
obiecte, explorator de obiecte, etc.
Există mai multe modalităţi de a deschide IDE din Access:
- folosind combinaţia de taste Alt+F1,
- făcând clic pe icoana din bara de instrumente Database,
Formulare şi Rapoarte,
- făcând clic pe un modul şi apoi selectând opţiunea Code din meniul
View, făcând dublu clic pe un modul,
- selectând o procedură eveniment dintr-un formular sau un raport,
- făcând clic pe icoana New sau Modify din lista de module a ferestrei
Database.

Ferestre ale mediului IDE


Toate ferestrele mediului IDE pot fi afişate din meniul View

Bara de instrumente Standard:

View Microsoft Access


Insert/Inserare modul, modul de clasă sau procedură (Funcţie sau
Sub)

87
Save/Salvare
Cut/Tăiere
Copy/Copiere
Paste/Lipire
Find/Căutare
Undo/Anulare
Redo
Run Macro
Break

End
Design Mode
Project Explorer/Exploratorul de proiecte
Properties Window/Fereastra Proprietăţi

Object Browser/Exploratorul de obiecte


Controlul Toolbox

Microsoft Visual Basic He

Exploratorul de proiecte

Toate modulele bazelor de date sau ale proiectului VBA sunt afişate în
exploratorul de proiecte într-o structură arborescentă şi sunt organizate în trei
grupe:
modulele de formulare sau de rapoarte,
modulele standard,
modulele independente de clasă.

88
Fereastra Proprietăţi

Aceasta permite afişarea proprietăţilor diferitelor module. Pentru


afişarea proprietăţilor unui formular sau ale unui raport, acesta trebuie deschis
în Access; dacă nu este cazul, se selectează un formular sau un raport în
exploratorul de proiect şi se alege opţiunea Object/Obiect din meniul
Display/Afişare.

Fereastra de Cod program

În această fereastră se găsesc două zone de liste derulante:


zona obiect afişează lista de obiecte
ale modului,
zona procedură afişează procedurile
sau evenimentele obiectului selectat în zona obiect. Evenimentele
folosite deja apar îngroşate.

89
Auto List

O listă derulantă se afişează automat când se tastează numele obiectului


urmat de punct, şi conţine lista de metode, proprietăţi şi constante disponibile
pentru acest obiect.

Fereastra Variabile locale

Aceasta conţine toate valorile variabilelor accesibile în timpul aplicaţiei în curs.

Fereastra Watches

Aceasta afişează valorile variabilelor ce au fost definite drept variabile


de urmărit, watches.

Exploratorul de obiecte

90
Permite vizualizarea proprietăţilor, metodelor şi constantelor fiecărui
obiect.

4.3. Configurarea editorului VBA

Parametrii pentru culorilor implicite folosite de editorul VBA


Cuvintele cheie, funcţiile şi instrucţiunile VBA sunt afişate în albastru,
obiectele, metodele şi proprietăţile în negru, iar comentariile în verde.
Instrucţiunile ce conţin erori sunt afişate în roşu.
Stilul (culoare, font, mărime) diferitelor părţi de cod se poate modifica
prin selectarea Options/Opţiuni din meniul Tools şi activarea secţiunii Format
Editor.
Parametrii pentru prezentarea codului program
Generarea şi reactualizarea codului program VBA sunt realizate cu
ajutorul unor instrumente care asistă programatorul, acestea realizează în plus
verificarea automată a sintaxei, declararea obligatorie a variabilelor, Auto List
Members, etc.
Pentru activarea acestor instrumente, se selectează Options/Opţiuni din
meniul Tools şi se face clic pe secţiunea Editor.

4.4. Completarea automată a instrucţiunilor în editorul


VBA

Editorul VBA dispune de o tehnologie ce îi permite să asiste utilizatorul


în manipularea obiectelor. În momentul scrierii unui nume de obiect recunoscut
de VBA, urmat de un punct, lista derulantă a metodelor şi proprietăţilor acestui
obiect este afişată. Dacă se selectează o metodă, asistentul ajută în generarea
diferitelor argumente pe care acesta le conţine.
Exemplu:
Dacă se scrie numele de obiect Docmd urmat de un punct, este
derulată următoarea fereastră:

91
Pictograma reprezintă metodele, icoana reprezintă proprietăţile.
Elementele listei derulante pot fi definite tastând primele litere ale metodei,
proprietăţii sau colecţiei căutate. Pentru a selecta un element din listă, se face
dublu clic pe el. Se tastează un punct dacă s-a selectat un obiect şi se doreşte
vizualizarea listei de proprietăţi ataşate. Dacă s-a selectat o metodă, se apasa
tasta spaţiu pentru generarea listei de parametrii ai metodei.
Drept exemplu, selectaţi metoda OpenForm apoi lăsaţi un spaţiu:

Lista de argumente a metodei este apoi afişată pe măsură ce sunt scrise


argumentele.
Argumentele facultative se găsesc între paranteze drepte. Argumentul curent
este îngroşat. Dacă pentru un argument dat există o listă de valori predefinite,
lista derulantă a constantelor corespunzătoare este afişată.
Drept exemplu, generaţi numele parametrilor transmişi de funcţie, şi anume,
StrFormName, urmat de trei virgule (pentru cei doi parametrii opţionali)

92
În exemplu, este afişată lista de valori posibile pentru argumentul DataMode.
Asistentul poate fi activat şi în modul următor:
- se plasează cursorul în urma punctului,
- se face clic dreapta pentru a afişa meniul contextual,
- se selectează opţiunea List Proprieties /Methods,
- se utilizează combinaţia de taste: CTRL+J

4.5. Modelul obiect din ACCESS


Diagrama de alături permite distingerea principalelor obiecte globale
din Access. Notaţia utilizată în diagramă face distincţie între: Colecţii, Obiecte

93
Application

Forms (Form) CurrentProject

Controls(Contro) AllForms(AccessObject)

Proprieties(Control) AllMacros(AccessObject)

Module AllModules(AccessObject)

Proprieties(Form) AllReports(AccessObject)

Reports(Report) AllDataAccessPages(AccessObject)

Controls(Control) AccessObjectProprieties)

Proprieties(Control) CurrentData

Module AllTables(AccessObject)

Proprieties(Form) AllQueries(AccessObject)

Modules(Module) AllView(AccessObject)

References(Reference) AllStoredProcedures(AccessObject
)
Printers(Printer) AllFunctions(AccessObject)

DataAccessPages AllDatabaseDiagrams(AccesObject
)
WebOptions CodeProject

Screen AllForms(AccessAbject)

DoCmd AllMacros(AccessObject)

VBE AllModules(AccessObject)

DefaultWebOption AllReports(AccessObject)

Assistant AllAccessPages(AccessObject)

CommandBars(CommandBar) AccessObjectProprieties

Assistant CodeData

DBEngine AllTables(AccessObject)

FileSearch AllQueries(AccessObject)

FileDialog AllViews(AccessObject)

COMAddIns(COMAddln) AllStoredProcedures(AccessObject)

AnswerWizard AllFunctions(AccessObject)

LanguageSettings AlldatabaseDiagrams(AccessObject)

94
Tabelul de mai jos reia rolul principalelor obiecte şi colecţii ale diagramei.

Obiect Descriere

Application Obiect care se referă la aplicaţia activă Microsoft Access.


Forms Colecţie ce conţine toate formularele (obiecte Form)
deschise în baza de date activă. Pentru a inventaria toate
formularele bazei de date, fie ele deschise sau închise, se
foloseşte colecţia AllForms al obiectului
CurrentProject.
Reports Colecţie ce conţine toate rapoartele (obiecte Report)
deschise în baza de date activă. Pentru inventarierea
tuturor rapoartelor, deschise sau închise, se foloseşte
colecţia AllReports al obiectului CurrentProject.
Modules Colecţie ce conţine toate modulele standard şi de clasă
deschise în baza de date activă.
References Colecţie ce conţine toate referinţele la bibliotecile
obiectelor altor aplicaţii (fişiere dll, controale ActiveX)
selectate în acel moment (referinţele sunt selectate din
căsuţa de dialog Reference din meniul Tools).
Printers Colecţie ce conţine obiectele Printer reprezentând toate
imprimantele disponibile în sistem.
DataAccessPage Colecţie ce conţine toate paginile de acces la datele
deschise într-un proiect Microsoft Access (.adp) sau într-o
bază de acces (mdb).
Screen Obiectele ce permit accesul la formular, raport sau control
activat.
DoCmd Obiect ce permite conversia acţiunilor Macro în Visual
Basic. Marea majoritate a macro-urilor pot fi astfel
convertite în VBA.
DefaultWeb Obiect ce conţine caracteristicile aplicaţiilor globale
Options utilizate de către Microsoft Accesss în timpul înregistrării
unei pagini de acces la date ca şi o pagină Web sau în
timpul deschiderii unei pagini Web.
Assistant Obiect ce reprezintă asistentul Office pus la dispoziţie de
Microsoft. Proprietatea Visible se foloseşte pentru a afişa
asistentul iar proprietatea On pentru a activa asistentul.

95
CommandBars Colecţie de obiecte CommandBar ce reprezintă barele
de comandă a aplicaţiei active.
FileSearch Obiect ce permite căutarea fişierelor dintr-un document
File.
FileDialog Obiect ce permite accesarea unor fişiere similare celor din
căsuţa de dialog Open şi Save.
COMAddIns Colecţie de obiecte ComAddIn ce furnizează informaţii
despre complementul COM înscris în registrul Windows.
AnswerWizard Obiect ce reprezintă ajutorul intuitiv Microsoft Office.
Language Obiect ce returnează informaţii despre parametrii
Settings limbajului aplicaţiei.
CurrentPage Obiect ce conţine mai multe colecţii de obiecte Access
specifice (AllForms: colecţiile tuturor tabelelor bazei).
CurrentData Obiecte ce conţine mai multe colecţii de obiecte Access
de accesare a datelor (AllTables: colecţie a tuturor
tabelelor bazelor de date).

4.6. Principiile utilizării obiectelor şi colecţiilor

Proprietăţi
Acestea servesc la descrierea obiectelor. Anumite proprietăţi sunt Read
Only şi nu pot fi modificate de codul VBA.

Sintaxă:
{<obiect>| <obiect variabil>}.<proprietate>

Proprietăţile referitoare la obiecte


Obiectele globale şi cele scrise în cod pornind de la clasele
furnizate de VBA, posedă proprietăţi a căror valoare este actualizată
automat de sistem.

Proprietate Obiect Conţinut


ActiveControl Screen Control activ.
ActiveForm Screen Formular activ.
ActiveData Pagină activă sau conţinând un
Screen
AccessPage control activ.
ActiveReport Screen Raport activ.
Application Obiecte multiple Obiectul aplicaţie Access.

96
DBEngine Application Obiectul DBEngine.
Obiect Form asociat controlării
Form Control subformular
unui subformular.
Obiect Form sau Report al cărui
Me Form sau Report
cod este în curs de executare.
Modulul obiectului Form sau
Module Form sau Report
Report.
Obiect sau colecţie conţinând
Parent Obiecte multiple
obiectul.
PreviousControl Screen Obiectul control activ anterior.
Un Recordset clonă a setului de
RecordsetClone Form înregistrare subadiacent
formularului.
Obiect Report asociat
Report Control subraport
controlului subraportului.
Secţiune a unui formular sau
Section Form, Report
raport.

Metode
Acestea permit efectuarea acţiunilor proprii obiectelor. Codul program
VBA este scris în unităţi de program denumite proceduri. O procedură conţine o
serie de instrucţiuni VBA care efectuează o operaţie sau calculează o valoare. O
procedură eveniment este o procedură care se execută ca răspuns la un
eveniment iniţiat de un cod al utilizatorului sau al programului, sau lansată de
sistem. Un eveniment este o acţiune specifică care are loc în sau cu un anumit
obiect. Evenimentele sunt în general rezultatul acţiunilor utilizatorilor dar pot fi
şi ale sistemului. Cu ajutorul unei proceduri eveniment, avem posibilitatea de a
adăuga propriile răspunsuri particularizate ca răspuns la un eveniment care are
loc într-un formular, raport sau control. O procedură este o parte de cod
program care conţine o succesiune de instrucţiuni.
Metodele se prezintă ca şi proceduri:
- pot sau nu folosi argumente,
- anumite metode pot returna o valoare (la fel ca şi procedurile
Function), altele nu (ca şi procedurile Sub).

Sintaxa unei metode ce nu returnează o valoare:


{<object> | <obiect variabil>} . <metode> [ <liste de argumente>]

97
Sintaxa unei metode ce returnează o valoare:
Variabila = {<object> | <obiect variabil>} . <metode> [<liste de
argumente>]

Evenimentele
Un eveniment este o acţiune specifică un obiect. Microsoft Access este
în măsură să răspundă la mai multe tipuri de evenimente: deschiderea sau
închiderea formularelor, clic mouse, modificarea datelor etc. Utilizarea unei
proceduri eveniment permite asocierea propriului cod ca răspuns la un
eveniment ce are loc într-un formular, raport sau control.
Exemplu:
Când utilizatorul dă clic pe butonul de comandă Quit, este afişată o căsuţă de
dialog cerând o confirmare.

Private Sub cmdTerminare_Click()


If MsgBox (Prompt:=”Doriţi să părăsiţi aplicaţia ?”, _
+ vbQestion + vbYesNo,_Then
DoCmd.Quit
End If
End Sub

Colecţii
Pentru a face o referinţă la obiectul unei colecţii, se poate folosi una din
sintaxele următoare:

NameCollection! NameObject
NameCollection! [NameObject]
NameCollection! („NameObject”)
NameCollection (var)

unde „var” reprezintă o variabilă de tipul String ce conţine numele obiectului.

NameCollection (index)

unde index reprezintă numărul de index în colecţie al obiectului.


Pentru a asigura o mai bună lizibilitate a codului se recomandă folosire
aceleiaşi sintaxe.

98
Observaţie:
Atenţie la primul element din majoritatea colecţiilor care are indexul 0.
Indexul nu se foloseşte decât pentru parcurgerea unei colecţii. Se recomandă
evitarea, de exemplu, Me.controls (5) pentru a face referinţă la un control
fiindcă indexul unui control se poate schimba dacă formularul este modificat.
Exemple:
Referinţa la controlul txtDataDeb al formularului Formation (Collections
Forms and Controls):
MsgBox Forms (“Formations”).Controls (txtDateDeb”).Value
sau
MsgBox Forms! Formations.Controls! [txtDateDeb].Value
Data creării unui tabel al bazei curente (Collection AllTabels):
MsgBox CurrentData.AllTables![Formations].DataCreated
MsgBox CurrentData.AllTables(„Formations”).DataCreated
Parcurgerea unei colecţii. Acest cod modifică fontul şi culoarea
zonelor control din text:
Dim Ctl As Control
Dim intI As Integer
For intI = 0 To Me.Controls.Count – 1
Set Ctl = Me.Controls(intI)
If TypeOf Ctl Is TextBox Then
Ctl.ForeColor = vbBlue
Ctl.FontItalic = True
Ctl.FontBold = True
End If
Next intI

Colecţiile by default
Definiţie:
O colecţie by default (implicit) conţine obiecte la care se poate face
referinţă prin intermediul obiectului colecţiei, adică fără a face referinţă
direct la colecţie.
Obiecte ce posedă o colecţie by default
Obiect Colecţie
Container Documents
Database TableDefs
DBEngine Workspace
Form Controls
Group Users

99
Index Fields
QueryDef Parameters
RecordSet Fields
Relation Fields
Report Controls
TableDef Fields
User Groups
Workspace Databases
Exemplu:
Referinţă la controlul txtDateDeb al formularului Formations
(colecţia Controls este colecţia by default a unui formular).
Forms! [Formulations].[txtDateDeb].Value
Sau
Forms! Formulations.txtDateDeb.Value
sau
Forms! Formulations! txtDateDeb.Value

4.7. Crearea de referinţe pentru obiecte

Pentru a putea utiliza un obiect de acces la date, un obiect de


automatizare sau un control ActiveX specific, trebuie create referinţe pentru
bibliotecă, corespunzătoare obiectului. În general, o bibliotecă de obiecte este
un fişier .DLL sau .OCX care conţine codul obiectului. Se pot adăuga referinţe
făcând clic pe butonul de comandă Browse.

4.8. Crearea unei proceduri în VBA

Etapa 1: Crearea unui nou modul


Pornind de la fereastra Bază de date/Database:
se face clic pe butonul Module de pe bara de obiecte, apoi se
face clic pe butonul New în partea superioară a ferestrei.

Etapa 2: Crearea unei proceduri


În fereastra VBA activată pe ecran se va introduce secvenţa de program
corespunzătoare, după care se salvează secvenţa introdusă folosind butonul

100
Save , sau opţiunea Save după care codul program poate fi lansat în
execuţie.

Etapa 3: testarea procedurii


Pentru realizarea codului procedurii:
se poziţionează cursorul pe codul procedurii introduse,
se face clic pe butonul Run Macro de pe bara de instrumente
standard sau se foloseşte tasta F5,
după care pentru exemplul de program de mai sus se va introduce o dată
calendaristică în caseta de dialog afişată şi se dă clic pe butonul de
comandă OK, conform instrucţiunilor programului:

Şi se continuă pentru exemplul nostru cu afişarea următorul mesajul va


fi afişat:

101
după care se dă clic pe OK.Dacă ziua introdusă este luni, de exemplu,
va apărea următorul mesaj: “Succes la Seminarul de Info”.

4.9. Elementele limbajului VBA


4.9.1. Variabile, constante şi tipuri de date
Tipuri de variabile
Variabilele permit stocarea valorilor intermediare în orice moment al
execuţiei codului VBA pentru a putea fi folosite ulterior pentru a efecua calcule,
comparaţii, teste etc. Variabilele sunt identificate printr-un nume ce le permite
să facă referinţă la valoarea pe care o au, şi printr-un tip ce determină natura
datelor pe care le pot stoca.

Tipuri NUMERICE
Tip Domeniu Dimensiune
(în octeţi)
Byte (octet) 0 la 255 1
Integer (întreg) -32768 la 32767 2
Long (întreg lung) -2 147 483 648 la 2 147 483 647 4
Single (simplă -3,402823E38 la 1,401298E-45 4
precizie) (valori negative)
1,401298E-45 la 3,40282E38
(valori pozitive)
Double (dublă -1,79769313486231E308 la 8
precizie) 4,94065645841247E-324
(valori negative)
4,9406545841247E-324 la
1,979769313486231E308
(valori pozitive)
Currency -922 337 203 685 477,5808 la 8
(valută cu virgulă 922 337 203 685 477,5807
fixă)

102
Tip Domeniu Dimensiune
(în octeţi)
Decimal +/-79 228 162 514 264 337 593 12
543950335 fară separator zecimal
+/-
7,9228162514264337593543950335
cu 28 cifre în dreapta separatorului
zecimal; cel mai mic număr diferit de
zero este
+/-
0.0000000000000000000000000001

Tipul ŞIR DE CARACTERE:


Tipul String: există două tipuri de astfel de şiruri:
- şirurile de lungime variabilă pot conţine în jur de 2 miliarde de
caractere,
- şirurile de lungime fixă pot conţine de la 1 la aproximativ 64 Ko de
caractere
Exemplu:
’ sir de lungime variabila
Dim Adresa As String
’ sir de lungime fixa(20 caractere)
Dim Nume As String*20

Tipul BOOLEAN: variabila poate lua valoarea True (Adevărat) sau


False (Fals) care este valoarea sa implicită. Ocupă doi octeţi.

Tipul DATE: variabila poate lua valori de dată şi oră începând cu 1


ianuarie 100 până în 31 decembrie 9999. Ocupă opt octeţi.

Tipul VARIANT: variabila permite stocarea valorilor de date diferite:


date, numere cu virgulă mobilă, şiruri de caractere, referinţe la obiecte,
etc. Ocupă 16 octeţi plus unul pentru fiecare caracter dacă valoarea este
un şir.

Tipul OBJECT: variabila permite stocarea referinţei la un obiect sub


forma unei adrese cu 4 octete. Acesta este un tip generic, însă pentru a
obţine performanţe superioare este preferabilă folosirea unui nume de

103
obiect aşa cum acesta este definit în zona Classes al Exploratorului de
obiecte.
Exemplu:
Deschiderea bazelor de date Access folosind tipul generic Object sau
pornind de la obiectul Database.
Dim dbsEmp As Object
Dim dbsArt As Database
Set dbsEmp = OpenDatabase(“D:\Carte_VBA “ & “Angajati.mdb”)
Set dbsArt = OpenDatabase(“D:\Carte_VBA” & _ “Articole.mdb”)

Tipul DEFINIT DE UTILIZATOR (USER DEFINED): este folosit


în special pentru declararea variabilelor ce conţin mai multe tipuri de
informaţii. Definirea acestui tip nu se poate face decât în secţiunea de
declarare a modulului.
Exemplu:
Declararea unui nou tip definit de utilizator, Angajaţi:
Public type Angajati
Matricola As String*5
Nume As String*30
Varsta As Integer
Departamentul*10
End Type

Utilizarea tipului Angajaţi:


Dim NouAngajat As Angajat
NouAngajat.Matricola= ”15235”
NouAngajat.Nume= ”Popescu”
...

Declararea variabilelor
Există două modalităţi de a declara variabilele: implicit şi explicit.

Declararea implicită
În momentul în care VBA întâlneşte o variabilă care nu face obiectul unei
declaraţii explicite, o va declara în mod implicit, oferindu-i un tip Variant.
Tipul Variant permite stocarea succesivă a unor valori de tip diferit în aceeaşi
variabilă. Tipul variabilelor evoluează în funcţie de valoarea care îi este
atribuită.

104
Exemplu:
Private Sub Atribuire()
’ Tipul variabilei devine String
var = “Buna ziua”
MsgBox TypeName(var)
’ Tipul variabilei devine Integer
var = 12
MsgBox TypeName(var)
’ Tipul variabilei devine Double
var = 6.55957
MsgBox TypeName(var)
’ Tipul variabilei devine Boolean
var = True
MsgBox TypeName(var)
EndSub

Declararea explicită
Variabila este declarată înainte da a fi folosită.
Este posibil să se impună declararea explicită a variabilelor folosind
instrucţiunea Option Explicit din secţiunea de declarare a fiecărui model.
Pentru ca această instrucţiune să fie definită by default în VBA, se activeză
opţiunea Declararea obligatorie a variabilelor din meniul Tools → Options
→ Edit.
Declararea explicită a variabilelor se poate face în secţiunea de declarare a
modulelor sau în cadrul unei proceduri sau funcţii.
Declararea este realizată de către una dintre următoarele patru instrucţiuni ce
folosesc aceeaşi sintaxă:
- la nivelul unei proceduri sau funcţii sintaxa este următoarea:
Dim <Numevariabila> [As Type]
Static <Numevariabila> [As Type]

- la nivelul unui modul, sintaxa este următoarea:


Private <Numevariabila> [As Type]
Public <Numevariabila> [As Type]

De fiecare dată când instrucţiunea Dim este executată, variabila este


reiniţializată (0 pentru tipul numeric, mulţime vidă pentru tipul String, Empty
pentru tipul Variant). Dacă este necesară păstrarea valorii precedente, trebuie
folosit Static în locul instrucţiunii Dim.

105
Observaţie:
Dacă nu se precizează nici un tip (ex: dim var), tipul Variant este atribuit
implicit variabilei.

Domeniul variabilelor
O variabilă este numită locală, a unei funcţii sau proceduri dacă este declarată în
cadrul unei funcţii sau proceduri cu Dim sau Static. Aceasta nu este
recunoscută în afara funcţiei sau procedurii.
O variabilă poate fi vizibilă din toate procedurile sau funcţiile unui modul
(standard, de clasă, formular sau raport) dacă este declarată în secţiunea de
declarare a modulului Private (sau Dim).
O variabilă este publică întregii aplicaţii, adică este vizibilă din orice loc al
aplicţiei, dacă este declarată în secţiunea de declarare a modulului Public.
Observaţie:
Pentru a se face referinţă unei variabile publice ce se găseşte într-un alt
modul, trebuie folosită sintaxa următoare:

Forms! <NumeFormular>.<NumeVariabila>
Reports! <NumeRaport>.<NumeVariabila>

Tipul TABLOU
Un tablou se declară în acelaşi mod ca şi variabilele, cu ajutorul instrucţiunilor
Dim, Static, Private sau Public.
Un tablou este o variabilă ce prezintă mai multe compartimente ceea ce îi
permite să stocheze tot atâtea valori.
Un tablou poate avea până la 60 de dimensiuni.
Se poate face referinţă la un tablou în mod global sau în mod individual,
atribuind elementelor sale notaţia cu indici.
Oricare ar fi tipul elementelor, un tablou necesită 20 de octeţi de memorie,
cărora li se adaugă 4 octeţi pentru fiecare dimensiune şi numărul de octeţi
ocupaţi de către date.
Dacă tipul de date nu este specificat, elementele tabloului declarat primesc tipul
Variant.
Primul element al unui tabel îşi atribuie indicele 0, implicit. Este posibilă însă
stabilirea acestei valori implicit la 1 folosind instrucţiunea Option Base 1 din
secţiunea de declarare.
În acelaţi timp, folosire unei clauze, To, permite definire explicită a indicilor de
la început la sfârşit.

106
Exemple:
Declararea unor tablouri diferite:
‘ 12 elemente indexate de la 0 la 11
Dim Cheltuieli (11) As Single
‘ 12 elemente indexate de la 1 la 12
Dim Plati (1 To 12) As Single
‘ 2 dimensiuni: prima indexata de la 0 la 10 si ‘a doua de la 1
la 15
Dim Facturi (10, 1 To 15) As String
Option Base 1
‘ 12 elemente indexate de la 1 la 12
Dim Plati (12)

Folosirea unui tablou bidimensional. Exemplul următor permite crearea unui


tabel de înmulţire: fiecare element din tabelul Multiply este egal cu rezultatul
înmulţirii indicilor săi.
Dim Multiply(1 To 10, 1 To 10) As Integer
Dim i,j As Integer
‚Initializarea tabloului
For i = 1 To 10
For j = 1 To 10
Multiply(i,j) = i*j
Next j
Next i
MsgBox (Multiply(4,7)
MsgBox (Multiply(7,4)

Tablouri dinamice
Este vorba de tablourile ale căror dimensiuni sunt definite în momentul
execuţiei. Aceasta permite optimizarea spaţiului de memorie ocupat.
Declararea tablourilor:
Dim Table ()

Utilizare:
Înaintea utilizării, tabloul trebuie dimensionat cu ajutorul instrucţiunii ReDim:
ReDim Table (15 To 50)

Instrucţiunea ReDim se poate folosi pentru a modifica tabloul dinamic de atâtea


ori cât este nevoie. Implicit, valorile prezentate, în tablou sunt anulate.

107
Instrucţiunea ReDim Preserve permite întinderea unui tablou în acelaşi timp
păstrând valorile existente.
ReDim Preserve Table (15 To 70)

Constante în VBA
O constantă reprezintă o valoare numerică sau de tip şir, ce nu trebuie
modificată. Instrucţiunea Const permite declararea unei constante şi definirea
valorii sale fixe. Odată declarată, o constantă nu mai poate fi modificată, nici nu
mai poate primi o valoare nouă. Declararea unei constante se realizează într-o
procedură sau în secţiunea de declarare a unui modul.
Constantele la nivelul modulului sunt private, implicit.
Pentru a declara o constantă publică, este necesar ca instrucţiunea Const să fie
precedată de cuvântul cheie Public.
Exemple:
Declarare:
Public Const Societate = „Editura Mirton”
Const Black = &Ho&

Utilizare:
NameSocietate= Societate
Form!Angajati!Prenume.BlackColor = Black

Constantele intrinseci
Acestea sunt constante puse la dispoziţie chiar de către aplicaţii. Astfel, Access
2002 posedă propriile sale constante intrinseci care sunt vizibile în exploratorul
de obiecte.
O constantă intrinsecă poate fi folosită într-un macro sau în codul VBA.
Constantele intrinseci sunt caracterizte de un prefix de 2 litere ce identifică
biblioteca de obiecte unde constanta este definită.
Constantele bibliotecii Microsoft Access primesc Prefixul „ac”; constantele
bibliotecii Visual Basic au ca prefix „vb”.
Exemple:
acForm
vbCurrency

Există mai multe categorii de constante intrinseci: constante de acţiune,


constante de proceduri eveniment, etc.

108
4.9.2. Structurile de decizie şi selecţie
Deseori este necesară testare condiţiilor specifice înaintea executării
instrucţiunilor. Structurile de decizie sunt numite şi alternative, permit alegerea
alternativei, la sfârşitul unei evaluări.
Se disting două structuri de decizie şi selecţie:
IF...THEN...ELSE
SELECT...CASE
Funcţia IIF poate fi utilizată şi pentru a defini o valoare în funcţie de o condiţie.

INSTRUCŢIUNEA IF
IF
Permite executarea instrucţiunilor în funcţie de rezultatul unei condiţii.
În general, instrucţiunile IF...THEN...ELSE pot conţine alte structuri de
decizie de atâtea ori cât este necesar.
Sintaxa multilinie cu indentarea corespunzătoare este mai uşor de utilizat.
Sintaxa 1 (pe o singură linie)
If <conditie> Then <instructiuni> [Else <instructiuni>]
<instructiuni> poate fi alcătuit de mai multe instrucţiuni separate de :
Sintaxa 2 (pe mai multe linii)
If <conditie 1 > Then
<secventa de instructiuni 1>
[ElseIf <conditie 2 > Then
<secventa de instructiuni 2>]
[Else
<secventa de instructiuni 3>]
EndIf
Alte posibilităţi:
If <conditie 1 > Then
<secventa de instructiuni 1>
[Else
If <conditie 2 > Then
<secventa de instructiuni 2>]
[Else
<secventa de instructiuni 3>]
EndIf]
EndIf

109
Exemplu:
Afişarea rezultatului comparaţiei între A şi B:
If A>B Then
MsgBox „A>B”
Else
If A=B Then
MsgBox „A=B”
Else
MsgBox „A<B”
EndIf
EndIf

INSTRUCŢIUNEA SELECT...CASE
Select Case
Execută secvenţele de instrucţiuni specificate în funcţie de valoarea unei
expresii. Permite înlocuirea lui ELSE IF în instrucţiunile IF...THEN...ELSE în
timpul comparaţiei între o expresie şi mai multe valori.
Sintaxa:
Select Case <expresia de testat>
[Case <lista de expresii 1>
<secvenţa de instrucţiuni 1>]
[Case <lista de expresii 2>
<secvenţa de instrucţiuni 2>]
[Case Else
<secvenţa de instrucţiuni 3>]
End Select
<listă de expresii> poate lua formele următoare:
 Valoare (Ex. Case 10)
 listă de valori (Ex. Case 1, 5, 10)
 plajă de valori (Ex. Case 1 To 5)
 expresie condiţionată(Ex. Case Is >= 5)
Exemplu:
Afişarea unui comentariu despre temperatură
Select Case Temperatura
Case 0
MsgBox(„Ger”)
Case 1 to 10
MsgBox(„Frig”)
Case 10 to 16

110
MsgBox(„Răcoare”)
Case 17, 18, 19
MsgBox(„Temperatura interioară iarna”)
Case 20 to 25
MsgBox(„Agreabil”)
Case Is > 25
MsgBox(„Cald”)
Case Else
MsgBox(„Temperatura nereferenţiată”)
End Select

FUNCŢIA IIF
IIf
Returnează o valoare în funcţie de o condiţie.
Sintaxa:
IIf (<conditie>, <valoare dacă Adevărat>, _ <valoare dacă Fals>)
Exemplu:
Dim bln As Boolean
Bln = IIF(A=B, True, False)
Este posibilă utilizarea mai multor imbricări ale funcţiei IIF.
Exemplu:
Dim IntI As Integer
IntI = IIf(A = B, IIf(B = C, 1, 0),0)

STRUCTURI ITERATIVE
Structurile iterative sau repetitive permit repetarea execuţiei unui ansamblu de
acţiuni.
Se pot distinge mai multe tipuri de structuri iterative:
Do...Loop
While...Wend
For..Next
For Each...Next

Do...Loop şi While...Wend repetă o prelucrare a datelor până când o anumită


condiţie este realizată, în timp ce For..Next efectuează o prelucrare de un număr
stabilit de ori, în funcţie de contor.
For Each...Next permite parcurgerea elementelor unei colecţii.

111
INSTRUCŢIUNEA DO...LOOP
Do ...Loop
Execută o secvenţă de instrucţiuni în timp ce (While) sau până când (Until)
condiţia specificată este verificată.
Sintaxa 1: secvenţă de instrucţiuni neexecutată (condiţia a fost testată înaintea
secvenţei).
Do [{While|Until}<conditions>]
<Secventa de instructiuni>
[Exit Do]
<Secventa de instructiuni>
Loop
Sintaxa 2: secvenţă de instrucţiuni executată cel puţin odată (condiţie testată
după secvenţă).
Do
<Secventa de instructiuni>
[Exit Do]
<Secventa de instructiuni>
Loop [{While|Until}<conditions>]
Observaţie:
Exit Do este deseori folosită după evaluarea unei condiţii interne
iteraţiei şi permite ieşirea din aceasta fără verificarea condiţiei de
control.
Exemplu:
Calcularea şi afişarea cheltuielilor anuale:
Dim intCpt Integer
Dim CheltAn As Currency
CheltAn = 0
IntCpt = 0
Do
IntCpt = IntCpt + 1
CheltAn = CheltAn + CheltTot(IntCpt)
Loop Until IntCpt = 12
MsgBox („Cheltuieli Anuale = ” & CheltAn)

INSTRUCŢIUNEA WHILE...WEND
While...Wend
Execută o secvenţă de instrucţiuni atâta timp cât condiţia specificată este
verificată.

112
Sintaxă:
While <conditie>
< secvenţă de instrucţiuni>
Wend
Exemplu:
Calcularea şi afişarea cheltuielilor anuale.
Dim intCpt Integer
Dim CheltAn As Currency
CheltAn = 0
IntCpt = 1
While IntCpt <= 12
CheltAn = CheltAn + CheltTot(IntCpt)
IntCpt = IntCpt + 1
Wend
MsgBox („Cheltuieli Anuale = „ & CheltAn

INSTRUCŢIUNEA FOR...NEXT
For...Next
Permite repetarea executării unei secvenţe de instrucţiuni în funcţie de un
contor.

Sintaxă:
For <contor> = <inceput> to <sfarsit> [Step p]
<secventa de instructiuni>
[Exit For]
<secventa de instructiuni>
Next <contor> [, <contor 2>] [,...]]
Observaţie:
Exit For, deseori amplasată după evaluarea unei condiţii, permite ieşirea
forţată dintr-o iteraţie.
Exemplu:
Calcularea şi afişarea cheltuielilor anuale
Dim intCpt Integer
Dim CheltAn As Currency
CheltAn = 0
For IntCpt 1 To 12
CheltAn = CheltAn + CheltTot(IntCpt)
Next
MsgBox („Cheltuieli Anuale = „ & CheltAn)

113
Cuvântul cheie Step permite incrementarea şi decrementarea printr-un pas
specificat a variabilei contor.
Exemplu:
Variabila contor j este incrementată cu 5 la fiecare iteraţie. La sfârşirea
iteraţiilor, totalul corespunzând sumei de la 5 la 10, 15 şi 20.
Dim j As Integer
Dim total As Integer
total = 0
For j =5 To 20 Step 5
Total = total + j
Next j
MsgBox („Totalul este de” & total)

INSTRUCŢIUNEA FOR EACH...NEXT


For Each...Next
Permite parcurgerea tuturor elementelor unui tablou (sau a unei colecţii).
Sintaxă:
For Each <element> In <tablou>/<colecţie>
<secvenţă de instrucţiuni>
[Exit For]
<secvenţă de instrucţiuni>
Next [element]
Exemplu:
Afişarea cheltuielilor lunare (conform exemplului For...Next):
Dim Cheltuieli As Currency
For Each Cheltuieli In CheltLunare
MsgBox (“Cheltuieli”)
Next

4.9.3. Operatori în VBA

Operatorii permit efectuarea operaţiilor aritmetice cu variabile şi/sau constante,


comparaţia variabilelor între ele, testarea mai multor condiţii, etc.
Se disting mai multe categorii de operatori:
 Operatori aritmetici
 Operatori relaţionali
 Operatori logici
 Operatori de concatenare

114
Observaţie:
Operatorul de atribuire este semnul egal „=”. Valoarea expresiei din dreapta
semnului este atribuită variabilei situate la stânga semnului (ex: IntA=12,
IntA=IntB*12).

OPERATORII ARITMETICI
Permit efectuarea calculelor aritmetice pornind de la variabile şi/sau de la
constantele numerice.
Operator Operaţie
+ Adunare
- Scădere
/ Împărţire având ca rezultat un număr cu virgulă mobilă
Mod Restul împărţirii dintre două numere
\ Împărţire având ca rezultat un număr întreg.
* Înmulţire
^ Ridicare la putere

OPERATORI RELAŢIONALI
Permit compararea a două valori numerice sau a două şiruri de caractere.
Operator Operaţie
< Mai mic decât...
<= Mai mic sau egal cu...
> Mai mare decât...
>= Mai mare sau egal cu...
= Egal cu...
<> Diferit de...

Instrucţiunea Option Compare utilizată la nivelul modulului permite definirea


metodei de comparare implicită, care este cea mai potrivită pentru compararea
şirurilor de caractere. Aceasta poate lua trei valori:
Compare Binary (opţiune implicită) furnizează compararea între şiruri bazate
pe un ordin de triere provenit din reprezentarea binară internă a caracterelor.
Compare Text furnizează comparaţii între şiruri bazate pe un ordin de triere ce
nu face distincţia dintre literele mari şi cele mici.
Compare Database furnizează comparaţii între şiruri bazate pe un ordin de
triere determinat de către identificatorul de parametrii ai bazei de date curente.

115
OPERATORI LOGICI
Permit testarea simultană a două (sau mai multe) valori logice sau expresii ce
returnează acest tip de valoare. De obicei, aceşti operatori sunt folosiţi cu
instrucţiunea IF.

Operator Operaţii
And Dacă toate expresiile au valoarea True, rezultatul este True.
Dacă una din expresiile are valoarea False, rezultatul este False.
Or Dacă cel puţin una dintre valori are valoarea True, rezultatul
este True.
Xor Dacă doar una dintre expresii are valoarea True, rezultatul este
True (sau exclusiv).
Not Returnează contrariul expresiei.
Eqv Returnează True dacă cele două expresii sunt identice.

OPERATORUL DE CONCATENARE
Operatorul de concatenare este semnul „&”. Aceasta permite alipirea şirurilor
de caractere, valori şi expresii. Rezultatul este un şir de caractere.

Prioritatea operatorilor
Atunci când mai mulţi operatori apar în aceeaşi expresie, fiecare este evaluat
într-o ordine predefinită, numită prioritatea operatorilor.
Operatorii sunt evaluaţi în ordinea următoare: operatori aritmetici, operatori
relaţionali, operatori logici. Operatorii relaţionali au aceeaşi prioritate, adică
sunt evaluaţi în ordinea apariţiei lor, de la stânga la dreapta.
Operatorii aritmetici şi logici sunt evaluaţi în ordinea următoare de prioritate (de
la stânga la dreapta):
 aritmetici: ^, *, /, Mod, +, -
 logici: Not, And, Or, Xor, Eqv

4.9.4. Instrucţiuni utilizate cu obiecte în VBA

INSTRUCŢIUNEA WITH
Permite accesul repetat la acelaşi obiect numindu-l doar o singură dată.
Oferă mai multe avantaje.
- optimizează timpul de executare a codului,
- câştigă timp în scriereea codului,
- face codul mai lizibil.

116
Sintaxa:
With <object>
<cod utilizând metode şi proprietăţi>
<ce se raportează la obiect>
EndWith
Exemplu:
Obiect formular activ
With Screen.ActiveForm
.Caption = „Formular de plata”
.Controls(„CmdValidare”).Enabled = False
GoToPage2
EndWith

INSTRUCŢIUNEA FOR EACH...NEXT


Permite trecerea în revistă a obiectelor unei colecţii sau a elementelor unui
tabel.
Sintaxă:
For Each <element> In <tabel>|<colecţie>
<secvenţă de instrucţiuni>
[Exit For]
<secvenţă de instrucţiuni>
Next <element>
Exemplu:
Exemplul următor permite atribuirea unei culori de font fiecărui
Control al formularului „Angajat”, în funcţie de tipul său (proprietate
ControlType). De asemenea, acesta foloseşte colecţia
by default al obiectului Form (Screen .ActiveForm .Controls)
Dim ctl As Control
For Each ctl In Screen.ActiveForm
`Parcurgerea controalelor formularului activ
With ctl
Select Case.Control Type
` Etichete
Case acLabel
.ForeColor = vbBlue
` Zone de text
Case acTextBox
.Forecolor = vbYellow
` Liste derulante

117
Case acListBox, acComboBox
.ForeColor =vbRed
EndSelect
EndWith
Nextctl

3.4.3. INSTRUCŢIUNEA IF...TYPE OF


Permite testarea tipului de obiect.
Sintaxă:
If TypeOf <object> Is <TypeObject> Then
<cod ce foloseşte metode şi proprietăţi>
<ce se raportează la obiect>
EndIf
Exemplu:
If TypeOf ctl Is acListBox Then...

INSTRUCŢIUNEA SET
Permite atribuirea unei referinţe de obiect unei variabile, numite variabilă
obiect.
Această instrucţiune poate fi utilizată pentru crearea unei referinţe spre un
obiect nou (utilizând eventual o metodă ce permite crearea unui obiect) sau
pentru atribuire unei referinţe unui obiect deja existent.
Sintaxă:
Crearea unei referinţe la un obiect nou
Set <NameObject> = New <expression object>
sau
Set <NameObject> = <metode ce permit crearea unui obiect>
<NameObject> numele variabilei obiect
<expression object> numele unui obiect sau a unei variabile obiect de
acelaşi tip.
Cuvântul cheie New permite crearea unei noi instanţe de clasă. Dacă variabila
obiect conţine deja o referinţă, aceasta este ştearsă.
Observaţie:
Nu se poate folosi cuvântul cheie New pentru a face referinţă la un
obiect decât dacă componenta ActiveX a obiectului furnizează o
bibiliotecă (ex: obiecte ADO, obiecte Excel).

118
Atribuirea unei referinţe unui obiect existent:
Set <NameObject> = <expresie obiect>

<NameObject> numele variabilei obiect


<expression object> numele unui obiect sau a unei variabile obiect
de acelaşi tip.

Reiniţializarea variabilelor obiect


Set <NameObject> = Nothing
Nothing permite reiniţializarea variabilei obiect şi eliberarea totalităţii
resurselor sistem şi memorie asociate obiectului.
Exemple:
Crearea referinţelor la un obiect nou.
Exemplele 1 şi 2 permit crearea unui index nou sau completarea bazei de date
curente. Pentru efectuarea acestor exemple, trebuie selectată referinţa
proiectului Microsoft DAO 3.6 Object Library. (Tools-References)

Exemplul 1: Utilizarea cuvântului cheie New


Dim tdfClient As DAO.tabledef
Dim fld As DAO.Field
` Creează definiţia tabelului
Set tdfClient = New DAO.tabledef
tdfClient.Name = „Clienti”
` Creează primul camp
Set fld = New DAO.Field
With fld
.Name = „Cli_Nume”
.Type = dbText
.Size = 40
End With
tdfClient.Fields.Append fld
` Creează al doilea câmp
Set fld = New DAO.Field
With fld
.Name = „Cli_Efectivi”
.Type = dbInteger
End With
tdfClient.Fields.Append fld

119
`Adaugă tabelul la baza de date curentă
Application.CurrentDb.TableDefs.Append tdfClient
`Reiniţializează variabila obiect
Set tdfClient = Nothing
Set fld = Nothing

Exemplul 2: Aceeaşi prelucrare a datelor, utilizând metodele


Dim tdfClient As DAO.tabledef
Dim fld As DAO.Field
` Crează definiţia tabelului
Set tdfClient = CurrentDb.CreateTableDef(„Clienţi”)
With tdfClient
` Crează primul câmp
Set fld =.CreateField(„Clienţi_Nume”,dbText,40)
.Fields.Append fld
` Crează al doilea câmp
Set fld =.CreateField(„Clienţi_efectiv”,dbInteger)
End With
`Adaugă tabelul la baza de date curentă
CurrentDb.TableDefs.Append tdfClient
`Reiniţializează variabila obiect
Set fld = Nothing
Set tdfClient = Nothing

Exemplul 3: Crearea unui formular cu o zonă de texte şi etichetă.


`Obiect formular
Dim frmEmploye As Form
`Numele formularului
Dim strName As String
`Obiect control
Dim ctl As Control
`Crearea unui formular nou
Set frmEmploye = Application.CreateForm
With frmEmploye
`Titlul formularului
.Caption = „Total”
`Lăţimea şi lungimea formularului
.Width = 5000
.Section(acDetail).Height = 2000

120
`Ştergerea butoanelor de depalsare
.NavigationButtons =False
`Şterge selectorul de înregistrare
.RecordSelectors =False
`Centrează formularul în aplicaţie
.AutoCenter = True
`Numele aplicaţiei
strName =frmEmploye.Name
End With
`Adăugarea zonei de text „numele angajatului”
Set ctl = Aplication.CreateControl(strName,_
acTextBox, ,” „,” „ 2000, 500, 2500,300)
`Redactarea zonei de text
With ctl
`Numele zonei de text
.name =”txtNom”
`Culori
.BackColor = vbWhite
.ForeColor = vBlack
.FontBold = True
EndWith
`Adăugarea etichetei „numele angajatului”
Set ctl = Application.CreateControl(strName,_
acLabel, ,” „, „ „,500, 500, 1500, 300)
`Redactarea etichetei
With ctl
`Numele etichetei
.Name = „lblNom”
`Titlul etichetei
.Caption = „Numele angajatului:”
`Culori
.BackColor = vbWhite
.ForeColor = vbBlue
End With
`Salvarea formularului
DoCmd.Save, „Angajaţi”
Docmd.close

121
4.9.5. Regulile de scriere a codului sursă VBA

COMENTARIILE
Permit explicarea unui program pentru a-l face mai uşor de înţeles.
Sintaxă:
Rem <commentariu>
sau
’<commentariu>

Exemplu:
Rem Procedura ce permite comparatia zonei de txtA cu txtB
Private Sub cmdRezultat_Click()
If txtA > txtB Then
labelRezultat.caption = „A>B”
Else
If txtA = txt B Then
labelRezultat.caption = „A = B”
Else
labelRezultat.caption = „A<B”
EndIf
EndIf
End Sub

CARACTERUL DE CONTIUARE (LINIUŢA DE SUBLINIERE)


O instrucţiune VBA poate fi scrisă pe mai multe linii cu ajutorul liniuţei de
subliniere precedată de un spaţiu ( _ )
Exemplu:
If a _
> _
b then _

Bineînţeles acest exemplu nu necesită o programare structurată, însă atrage


atenţia asupra faptului că o linie de cod poate fi scindată în orice loc.

INDENTAREA
Este important ca instrucţiunile de acelaşi nivel să se găsească în acelaşi aliniat.
Începutul şi sfârşitul procedurii fiind aliniate la stânga, conţinutul trebuie
decalat puţin în interior, la dreapta.
Aceste indentări permit structurii procedurii să devină mai uşor de citit.

122
4.9.6. Numele procedurilor, variabilelor şi constantelor

Numele procedurilor, variabilelor şi constantelor trebuie să respecte următoarele


reguli:
- să înceapă cu o literă,
- să nu fie alcătuit din mai mult de 225 de caractere,
- pot fi compuse din litere, cifre şi din liniuţa de subliniere ( _ ),
- nu pot include semne de punctuaţie sau spaţii,
- să nu corespundă cuvintelor rezervate,
- să fie unice într-un program.

CONVENŢIILE DE DENUMIRE ÎN VBA


Se recomandă folosirea convenţiilor de denumire pentru variabile, controale şi
obiecte. Acestea permit standardizarea codului.

CONVENŢIILE DE DENUMIRE A VARIABILELOR


Se recomandă folosirea a două prefixe:
 primul pentru a preciza domeniul variabilei: g – globală, m – modul,
nici un prefix pentru o variabilă locală,
 al doilea, pentru a preciza tipul variabilei.

Exemplu:
gstrName - variabilă globală de tip String.
intQuantity – variabilă locală de tip Integer.

Tip de variabilă Prefix


Boolean Bin
Byte Byt
Currency Cur
Date, Ora Dtm
Double Dbl
Error Err
Integer int
Long lng
Object obj
Single sng
String str
User Defined udt
Variant var

123
CONENŢIILE DE DENUMIRE A CONTROALELOR
Ca şi pentru variabile, numele controalelor, formularelor şi rapoartelor
trebuie prefixate după tipul lor.
Control Prefix
ADO Data ado
CheckBox chk
Zonă de listă cbo
modificabilă
Command Button cmd
Frame fra
Option Group grp
Image img
Label lbl
Option Button opt
Zona de text txt

CONVENŢIILE DE DENUMIRE A OBIECTELOR


Obiectele Access pot fi de asemenea prefixate.
Control Prefix
Table tbl
Query qry
Form frm
Report rpt
Macro mac
Index adx
Camp fld
Colectie col
Property pty
Pagină de acces la date pag

4.9.7. Clase de obiecte în VBA

O clasă este un fel de tipar de unde provin obiectele. Obiectele din aceeaşi clasă
moştenesc sistematic trăsături din toate metodele (coduri), proprietăţi (date) şi
evenimentele claselor lor de origine. Prin urmare, caracteristicile şi
comportamentul fiecăruia vor putea fi adaptate în funcţie de necesităţile
aplicaţiei. De fapt, orice obiect Acess provine dintr-o clasă.

124
MODULELE DE CLASĂ
Modulele de clasă permit crearea şi manipularea propriilor tipuri de obiecte în
aplicaţii.
Prezintă caracteristicile următoare:
- poartă numele obiectului,
- cuprind procedurile Sub şi Function ce corespund metodelor proprii
obiectului,
- includ procedurile Property Get ce permit citirea valorilor
proprietăţilor obiectului şi procedurlor Property Set/Property Let
permiţând fixarea valorilor acestor proprietăţi.
Odată ce ansamblul acestor proceduri sunt descrise în cadrul modulului de
clasă, este posibilă crearea unui nou obiect de tipul definit mai sus. Pentru
aceasta, este suficientă crearea unei noi instanţe de clasă prin intermediul unei
variabile obiect de tipul clasei:

Dim <object name> As New <class name>.

Modulele de clasă sunt rar utilizate în programarea VBA, adresându-se în


special specialiştilor.

EXEMPLE DE MODULE DE CLASE


Acest exemplu este un ghid pas cu pas în crearea şi utilizarea unui modul de
clasă. Modulul creat va permite afişarea mesajelor utilizatorului.
Acest modul prezintă următoarele elemente:
- o metodă Confirmation ce afişează o căsuţă de dialog care invită
utilizatorul să răspundă „Da” sau „Nu” la o întrebarea şi primeşte
răspunsul utilizatorului,
- două proprietăţi: proprietatea IsBeep indică dacă un beep trebuie emis
înaintea afişării mesajului; proprietatea Title ce conţine titlul căsuţei de
dialog.

Exemplu:
Pentru a crea un modul de clasă, se selectează opţiunea Class Module (modul
de clasă) al meniul Insert.

125
Se defineşte numele clasei în câmpul Name.

Dacă fereastra Properties nu este afişată, se alege opţiunea Window


Properties din meniul View sau se foloseşte tasta F4.
Pentru utilizarea proprietăţilor în modulul de clasă Message, se definesc
variabilele necesare. Variabila strTitle este asociată proprietăţii Title, iar
variabila blnBeep proprietăţii IsBeep.

Option Compare Database


Option Explicit
`Emiterea beep-ului
Dim blnBeep As Boolean
`Titlul ferestrei MsgBox
Dim strTitle As String

Proprietăţile IsBeep şi Title sunt create folosind opţiunea Procedure din


meniul Insert.

126
Sunt create pentru fiecare proprietate procedurile Property Get şi Property
Set; pentru obţinerea codului următor, acestea sunt modificate:

Public Property Get IsBeep() As Boolean


Is Beep = blnBeep
End Property
Public Property Let Is Beep(ByVal blnNewValue As Boolean)
blnBeep = blnNewValue
End Property

Public Property Get Title() As String


Title = strTitle
End Property

Public Property Let Title(ByVal strNewValue As String)


StrTitle = strNewValue
End Property

Apoi se crează metoda confirmării folosind opţiunea Procedure al meniului


Insert.

127
Se modifică procedura Confirmation pentru obţinerea codului următor:

Public Function Confirmation(strMsg) As Boolean


Is MsgBox(strMsg, vbYesNo, strTitle) = vbYes Then
Confirmation = True
Else
Confirmation = False
EndIf
If blnBeep Then Beep
EndFunction

Se poate observa că această metodă foloseşte cele două variabile, strTitle şi


blnBeep. Metoda a fost creată ca o funcţie deoarece returnează răspunsul
utilizaărului sub forma unei variabile logice (boolean).
Odată creată, această clasă va fi utilizată pornind de la un formular. În acest
scop, se va crea un formular Angajaţi cu două butone de comandă cmdClose şi
cmdQuit. Se atribuie codul de mai jos evenimentelor click:

128
Private Sub CmdInchidere_Click()
`Obiect mesaj
Dim Msg as New Message

`Fără emiterea unui beep


msg.IsBeep = False
`Titlul căsuţei de dialog
msg.Title = „Aplicatie gestiunea personalului”
`Cerere de confirmare
If msg.Confirmation(„Doriti inchiderea _
formularului” & „?”) Then
DoCmd.Close
EndIf
EndSub

Private Sub CmdTerminare_Click()


`Obiect mesaj
Dim msg As New Message
`Emiterea unui beep
msg.IsBeep = True
` Titlul casutei de dialog
msg.Title = „Aplicatie gestiunea personalului”
`Cerere de confirmare
If msg.Confirmation(„Doriti sa parasiti aplicatia ?”
Then _
DoCmd.Quit
EndIf
EndSub
Apoi se tastează formularul. Căsuţa de mesaj afişată de metoda Confirmation
utilizează cele două proprietăţi şi returnează răspunsul utilizatorului.
Modulul de clasă Message poate fi îmbunătăţit definind proprietăţile şi
metodele noi (ex: mesajele în caz de eroare).

4.9.8. Exploratorul de obiecte în ACCES

Ţinânând cont de numărul important de obiecte Access şi de diversitatea lor,


este utilă căutarea rapidă a informaţiilor despre acestea.
Exploratorul de obiecte permite afişarea informaţiilor referitoare la obiecte,
metode, proprietăţi, evenimente şi constante.
Exploratorul poate fi afişat în moduri diferite:

129
- alegând opţiunea Object Browser din meniul View,
- folosind tasta F2,
- făcând dublu clic pe icoana .

unde:
- listă de biblioteci de obiecte.

-elemente căutate: obiect, proprietate, colecţie,


eveniment, metodă, etc.

- rezultatul căutării: lista claselor de obiecte (obiecte şi colecţii) şi a


componentelor sale (obiect, colecţie, proprietate, eveniment sau metodă).
Cuvântul căutat se poate găsi în lista claselor sau în aceea a componentelor.

130
- obiecte ale bibliotecii, clasa obiectului selectat este inclus
în lista Result.

- metode, proprietăţi, evenimente şi constante


raportându-se la obiectul selectat sau inclus în lista din stânga. Componentul
selectat este inclus în lista Result.

- detaliu al elementului selectat.

CĂUTAREA CU EXPLORATORUL DE OBIECTE


Pentru a efectua o căutare în exploratorul de obiecte, se procedează astfel:
- se tastează cuvântul căutat în a doua linie derulantă,
- se face clic pe icoana Search ,
- dacă fereastra Results afişează mai multe linii, deplasaţi-vă pe aceea
care vă interesează şi partea de jos a ferestrei este actualizată.

131
4.9.9. Gestionarea evenimentelor în ACCESS

ASOCIEREA CODULUI VBA LA UN EVENIMENT


Un cod VBA poate fi atribuit unui obiect în două modalităţi:
- pornind de la compartimentul Eveniment al ferestrei de proprietăţi al
obiectului în Acces

- pornind de la listele derulante de obiecte şi evenimente editorul Visual


Basic

CATEGORII DE EVENIMENTE
Listele următoare de evenimente sunt clasate după tip, şi cuprind:
 numele evenimentului,
 numele proprietăţii corespunzătoare din fereastra de proprietăţi ale
obiectului (între paranteze),
 descrierea evenimentului,
 coloana din dreapta (Anulare) arată dacă evenimentul poate fi
anulat. Anularea unui eveniment face obiectul paragrafului 6.3.

132
EVENIMENTELE DE TIP FORMĂ (FEREASTRĂ)
Anulare
Open Are loc la deschiderera formularului dar înaintea afişării
primei înregistrări. Are loc la deschiderea unu raport dar DA
înaintea listarii
Load (la încărcare) Are loc la deschiderea formularului când
NU
este afişată prima înregistrare.
Resize (la redimensionare) Are loc la prima afişare a
NU
formularului şi la modificările aduse mărimii acestuia.
UnLoad (la descărcare) Are loc la închidere când înregistrările
DA
sunt descărcate, însă înainte ca formularul să dispară.
Close (la închidere) Are loc atunci când formularul sau
NU
raportul dispar la închidere.

EVENIMENTE DE TIP FOCUS


Aceste evenimente se pot aplica formularelor (Activate, Deactivate, GotFocus,
LostFocus) sau controalelor (Enter, Exit, SetFocus, LostFocus).
Se spune despre obiect că are focus atunci când poate accepta schimbări în urma
acţiunilor utilizatorului prin intermediul mouse-ului sau a tastaturii. Obiectele
care au focus sunt numite obiecte active (ActiveForm sau ActiveControl).

Anulare
Activate (la activare) Are loc atunci când fereastra
NU
formularului sau a raportului este activată.
Deactivate (la dezactivare) Are loc atât la activarea unei
alte ferestre, (însă înainte ca aceasta să fie NU
activată), cât şi la închiderea ferestrei.
Enter (la intrare) Are loc înainte ca un control să
primească focus, pornind de la un alt control, NU
sau la deschiderea formularului.
Exit (la ieşire) Are loc înainte ca un control să îşi
piardă focus-ul în faţa unui alt control din DA
acelaşi formular sau din altul.
GotFocus (la primirea focusului) Are loc atunci când un
control sau un formular fără control activ NU
primeşte un focus.
LostFocus (la pierderea focus-ului) Are loc atunci când un
NU
control sau un formular pierde focus-ul.

133
EVENIMENTE DE TIP DATE

Se aplică formularelor asociate unei surse de date (proprietatea RecordSource


pornind de la numele unui tabel sau de la o interogare). Acest tip de evenimente
se mai aplică controalelor asociate unui câmp al sursei de date a formularului
(proprietatea ControlSource).

Anulare
AfterInsert (după inserare) Are loc după adăugarea unei
NU
noi înregistrări în tabel.
AfterUpdate (după MAJ) Are loc după actualizarea unui
control sau a unei înregistrări cu date NU
modificate.
AfterDel (după ştergere) Are loc după ce utilizatorul a
NU
Confirm răspuns cererii de ştergere a înregistrătilor.
BeforeInsert (înaintea inserării) Are loc când se tastează
primul caracter al unei noi înregistrări, însă DA
înaintea înregistrării propriu-zise.
BeforeUpdate (înainte de MAJ) Are loc înaintea actualizării
unui control sau a unei înregistrări cu date DA
modificate.
BeforeDel (înaintea ştergerii) Are loc după ce
Confirm utilizatorul a a şters înregistrările dar înainte DA
ca Access să ceară confirmare.
NotInList (la absenţa din listă) Are loc atunci când
tastarea unei valori nu se găseşte pe listă şi NU
proprietatea limitată la listă este adevărată.
Current (în momentul activării) Are loc atunci când
focus-ul trece dintr-o înregistrare în alta. De
NU
asemenea, are loc la deschidere înainte ca
prima înregistrare să devină cea curentă.
Change (în momentul efectuării unei schimbări) Are
loc în momentul modificării conţinutului
NU
unei zone text sau listă (tastatură sau
macro/Visual Basic).
Updated (la MAJ) Are loc atunci când datele unui
NU
obiect OLE au fost modificate.
Delete (la ştergere) Are loc înaintea ştergerii
DA
propriu-zise.

134
Anulare
Dirty Se produce atunci când conţinutul unui
formular sau a părţii text al unei zone de listă
DA
se schimbă şi la trecerea de la o pagină în
alta a unui control.

EVENIMENTE DE TIP MOUSE


Anulare
Click Are loc când de efectuează clic stânga pe un
NU
control sau o zonă nouă a unui formular.
DblClick Are loc când se efectuează dublu clic stânga pe
DA
un control sau o zonă nouă a unui formular.
MouseDown Are loc la apăsarea unui buton al mouse-ului pe
DA
un control sau un formular.
MouseMove Are loc atunci când utilizatorul deplasează
NU
mouse-ul pe un formular sau un control.
MouseUp Are loc atunci când utilizatorul nu mai apasă cu
NU
mouse-ul pe un control sau formular.

EVENIMENTELE DE TIP TASTATURĂ


Anulare
KeyDown Are loc la apăsarea unei taste sau la executarea
instrucţiunii SendKeys. Însă obiectul poate fi
împiedicat să fie afectat de tastatură atribuind NU
valoarea 0 argumentului Keycode al procedurii
KeyDown al obiectului.
KeyPress Are loc la apăsarea unei taste ce generează un
caracater ANSI standard
DA(cu
Obiectul poate fi împiedicat să fie afectat de
macro sau
acţiunea tastei atribuind valoarea 0
VBA)
argumentului KeyAscii al procedurii KeyPress
al obiectului.
KeyUp Are loc atunci când utilizatorul nu mai apasă
tasta sau când se execută SendKeys. Obiectul
poate fi împiedicat să fie afectat de acţiunea NU
tastei atribuind valoarea 0 argumentului
KeyCode al procedurii KeyUp al obiectului.

135
Proprietatea KeyPreview a unui formular determină dacă procedurile
eveniment de tastatură la nivelul formularului sunt apelate înaintea celor de la
nivelul controalelor. Proprietatea KeyPreview poate fi folosită pentru a crea
o procedură de gestionare la nivelul unui formular.
Exemplu:
Exemplul următor demonstrează cum se afişează un formular când utilizatorul
acţionează pe tasta F1, oricare ar fi controlul activ.
Private Sub Form_Load()
KeyPreview = True
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, _
Shift As Integer)
`Dacă tasta este F1, formularul Find este afişat
`KeyCode este reiniţializat pentru a afişa Microsoft _ `Access
Help
If KeyCode = vbKeyF1 Then
DoCmd.OpenForm”Afisare”
KeyCode = 0
End If
End Sub

EVENIMENTELE DE TIP PRINT


Aceste evenimente se aplică rapoartelor Access:
Anulare
Format (la formatare) Are loc când Microsoft Access
DA
determină care date aparţin căror secţiuni.
Print (la listare) Are loc atunci când se redactează o
DA
secţiune pentru listare.
Retreat (la reformatare) Are loc când Microsoft Access
revine la o secţiune precedentă în timpul redactării NU
unui raport.
NoData Are loc atunci când Microsoft Access a redactat un
raport în scopul listării sale şi când acesta nu conţine DA
data.
Page Are loc după ce Microsoft Access a redactat o pagină
a unui raport pentru listarea acestuia, dar înaintea
listării propriu-zise a paginii.
NU
Observaţie
:

136
Evenimentele Format, Print şi Retreat se aplică secţiunilor rapoartelor.
EVENIMENTELE DE TIP FILTRU
Anulare
ApplyFilter Are loc atunci când utilizatorul aplică un filtru. DA
Filter Are loc când utilizatorul crează un filtru. DA

EVENIMENTELE DE TIP ERROR ŞI TIMER


Anulare
Error Are loc când survine o eroare. NU
Timer Are loc când o întârziere specifică s-a scurs. NU

ANULAREA UNUI EVENIMENT


În anumite cazuri, este indicată anularea unui eveniment. Există două modalităţi
de a realiza aceasta:
- Specificând numele unui macro ce conţine acţiunea CancelEvent, ca
şi parametrul proprietăţii de tip eveniment corespunzătoare, de
exemplu, pentru a anula actualizarea unui control sau pentru a plasa
numele macro-ului ce conţine acţiunea CancelEvent pe proprietatea
sa Before MAJ. Acţiunea CancelEvent în VBA foloseşte acţiunea
identică din obiectul Docmd.
- Conferind valoarea True argumentului Cancel a unei proceduri.
Exemplu:
Dacă data este incorectă, evenimentul Exit este anulat: cursorul este
poziţionat pe câmp.
Private Sub txtDateSfarsit_Exit(Cancel As Integer)
If IsNull(txtDateSfarsit) Then Exit Sub
`Data trebuie să fie corectă
If Not IsDate(txtDateFin) Then
MsgBox(„Date incorecte”), vbCritical
Cancel = True
Exit Sub
End If
`Data de sârşit trebuie să fie >= ca data de început
If DateValue(txtDateFin) < DateValue(txtDateDeb) Then
MsgBox(„Data de sfarsit trebuie sa fie mai _
mare decat data de inceput:”), vbCritical
Cancel = True
Exit Sub
End If

137
End Sub
Observaţie:
Nu toate evenimentele pot fi anulate (vezi tablourile precedente de
categorii de evenimente).

SECVENŢE TIPURI DE EVENIMENTE


O acţiune utilizator sau sistem generează un eveniment în mod direct, însă, în
acelaşi timp, pot fi activate mai multe evenimente subordonate.
Urmează o suită de secvenţe tipuri de evenimente:
 Deschiderea unui formular:
Open → Load → Resize → Activate → Current

 Închiderea unui formular:


UnLoad → Deactivate → Close

 Intrarea într-un control:


Enter → GotFocus

 Trecerea dintr-un formular în altul:


Exit → Lost Focus

 Modificarea unei zone de text:


Deactivate Form1 → Activate Form2

 Actualizarea unei zone de text:


KeyDown → KeyPress → Change → KeyUp → Exit (zona1) →
→LostFocus (zona2) →GotFocus (zona2)

 Actualizarea unei înregistrări:


KeyDown → KeyPress → Change → KeyUp → Before Update
(Zone de texte) →AfterUpdate (Zone de Texte) →BeforeUpdate (Zone de
Texte) →Before (Formulare) →AfterUpdate(Formulare)

 Introducerea unei înregistrări în primul câmp:


KeyDown → KeyPress → BeforeUpdate (Formular) →Change
→ KeyUp

 Ştergerea înregistrărilor:

138
Delete → Current → BeforeDelConfirm → AfterDelConfirm
EVENIMENTE DE ACTUALIZARE
În Microsoft Access evenimentele de actualizare intervin la două nivele:
 actualizarea unui control,
 actualizarea unei înregistrări.

În cazul actualizării unui control, sunt executate evenimentele BeforeUpdate şi


AfterUpdate ale controlului în cauză.
În cazul actualizării unei înregistrări, sunt executate evenimentele
BeforeUpdate şi AfterUpdate ale formularului.
Evenimentele de actualizare a controlalelor sunt executate înaintea
evenimentelor de actualizare a formularului.

4.9.10. Proprietăţi şi metode ale obiectelor ACCESS

Această parte descrie proprietăţile şi metodele obiectelor utilizate în Access.


Obiectele Form şi Report vor fi descrise în capitolul 8.
Pentru a obţine lista exhaustivă a obiectelor, proprietăţilor şi metodelor, se
foloseşte asistentul VBA sau se utilizeazâ exploratorulde obiecte.

OBIECTUL APPLICATION
Obiectul Application face referinţă la aplicaţia activă Microsoft Access.
Proprietăţi:
CodeContextObject Returnează obiectul în care un macro sau un alt cod
VBA este în curs de execuţie.
CurrentObjectName Returnează numele obiectului bază de date activ
(tabel, interogare, formular, raport, macro, modul).
CurrentObjectType Returnează tipul obiectului de bază de date activ.
FeatureInstall Specifică sau determină felul în care Microsoft
Access administrează apelările metodelor şi
proprietăţilor ce necesită instalare.
IsCompiled Returnează o valoare de tip boolean care indică dacă
proiectul Visual Basic se găseşte într-un raport
compilat.
MenuBar Determină bara de meniuri de folosit pentru baza de
date.
Name Identifică numele obiectului.
Parent Permite realizarea referinţei la obiectul părinte.
ProductCode Determină identificatorul universal, unic lui

139
Microsoft Access.
ShortcutMenuBar Specifică meniul contextual ce apare atunci când
utilizatorul face clic dreapta.
UserControl Determină dacă aplicaţia Microsoft Access în curs a
fost lansată de utilizator sau de o altă aplicaţie.
Visible Permite ascunderea aplicaţiei.

Metode:
AccessError Returnează şirul descriptiv asociat unei erori
Microsoft Access sau a unei erori DAO.
AddToFavorites Adaugă o adresă de legătură hypertext în dosarul
Favorite (Documents).
BuildCriteria Permite construirea uşoară a criterilor unui filtru.
CloseCurrentDatabase Închide baza de date în curs pornind de la o altă
aplicaţie care a deschis o bază de date cu ajutorul
Automation.
DefaultWorkspaceClone Creaază un nou obiect Workspace fără a obliga
utilizatorul să se reconecteze.
Echo Specifică dacă Microsoft Access trebuie să
redescrie ecranul.
FollowHyperLink Deschide documentul sau pagina Web specificată
de o adresă hyperlink.
GetOption Returnează valoarea în curs a unei opţiuni a
căsuţei de dialog Options.
NewCurrentDataBase Crează o nouă bază de date în fereastra Microsoft
Access.
OpenCurrentDatabase Deschide o bază existentă ca bază de date
curentă.
Quit Permite părăsirea Access.
RefreshDataBase Permite actualizarea ferestrei Database atunci
Window când un tabel, o interogare, un formular, raport,
macro sau modul au fost creaţi, şterşi sau
redimensionaţi.
RefreshTitleBar Actualizează bara de titlu a Microsoft Access.
Run Permite executarea unei proceduri Function sau
Sub specificate de Microsoft Access sau definite
de utilizator.
RunCommand Permite executarea unei comenzi integrate din
meniu sau bara de instrumente.
SetOption Defineşte valoarea în căsuţa de dialog Options.

140
Exemplu:
Buton de comandă ce permite părăsirea Access salvând toate obiectele.
Sub cmdQuit_Click()
Application.Quit acSaveYes
End Sub

Exemplu: Codul următor permite modificarea culorilor implicite a paginilor de


date (conţinut în DataSheet al căsuţei de dialog Options din Access).
`Culoarea fontului: albastru închis
Application.SetOption „Default Font color”, 4
` Culoarea backgraund-ului: alb
Application.SetOption „Default Background Color”, 15
`Culoarea bordurilor: albastru
Application.SetOption „Default Gridlines Color”, 12

OBIECTUL DOCMD
Obiectul DoCmd permite executarea majorităţii acţiunilor pornind din Visual
Basic, via macro-uri.
Fiecărei acţiuni macro îi corespunde o metodă. Argumentele acţiuni devin
argumentele metodei. Obiectul DoCmd nu dispune de proprietăţi proprii.

Observaţie:
Acţiunile macro ce corespund metodelor sunt indicate între paranteze.

Executarea acţiunii:
CancelEvent Anulează un eveniment
OpenQuery Deschide o interogare.
Quit Părăseşte Access.
RunCommand Execută o comandă dintr-un meniu sau din bara de
meniuri.
RunMacro Execută un macro.
RunSql Execută o interogare SQL.

Datele formularelor şi rapoartelor:


ApplyFilter Aplică un filtru unui tabel, formular sau raport.
FindNext Continuă căutarea.
FindRecord Căutarea unei înregistrări.

141
GotoControl Deplasarea focus-ului asupra unui control.
GotoPage Deplasarea focus-ului asupra primului control al paginii
indicate din formularul activ.
GotoRecord Găseşte înregistrarea.

Importarea/Exportarea datelor:
OutputTo Permite exportarea unui obiect Access (tabel, formular)
într-o altă bază Access sau un alt tip de fişier (Excel,
XML).
SendObject Trimiterea unui obiect.
TransferDatabase Importă sau exportă o bază de date.
TransferSpread Importă sau exportă o foaie de calcul.
Sheet
TransferText Importă sau exportă codul ASCII.
Manipularea obiectelor:
Close Închide un obiect (formular, raport,etc.).
CopyObject Permite copierea unui obiect Accesss în aceeaşi sau în
altă bază.
DeleteObject Şterge un obiect.
Maximize Măreşte o fereastră.
Minimize Micşorează o fereastră sau o icoană.
MoveSize Deplasează sau redimensionează o fereastră.
OpenForm Deschide un formular.
OpenModule Deschide un modul VBA.
OpenQuery Deschide o interogare.
OpenTable Deschide un tabel.
OpenView Deschide o pagină de acces la datele bazei.
PrintOut Listează.
Rename Redenumeşte un obiect.
RepaintObject
Requery Actualizează datele (relansează interogarea sursă a
obiectului).
Restore Redă mărimea normală ferestrei.
Save Salvează obiectul specificat sau cel activat.
SelectObject Selectează un obiect al bazei de date.
ShowAllRecords Dezactivează un filtru şi reafişează toate înregistrările.

Diverse:
AddMenu Permite crearea unei bare de meniu sau a unui meniu
contextual.

142
Beep Emite un sunet.
Echo Maschează sau afişează rezultatul unui macro în
momentul executării sale.
Hourglass Clepsidra cursorului de mouse.
SetMenuItem Permite definirea raportului (activat sau neactivat, bifat
sau nu), elementelor din meniul personlizat sau global.
SetWarnings Activează / Dezactivează afişarea mesajelor standard de
avertizare.
ShowToolbar Afişează/Ascunde o bară de instrumente.

Acţiuni de care obiectul DoCmd nu ţine cont:


MsgBox Funcţia cutie de mesaje.
Shell Executarea aplicaţiei.
ExecuteCode Apelarea directă a funcţiei în Visual Basic.
SendKeys Utilizarea instrucţiunii SendKeys.
Acţiunile StopAllMacros şi StopMacro nu au un echivalent în Visual Basic.

OBIECTUL SCREEN
Face referinţă la un obiect activat fie că este vorba de un formular, o pagină de
acces la date, un raport sau un control.
Este folosit în principal în procedurile eveniment ale diferitelor obiecte. Acest
obiect nu conţine decât proprietăţi.
Proprietăţi:
ActiveControl Asigură o referinţă la un control activ.
ActiveDataPage Asigură o referinţă la o pagină de acces la datele
active.
ActiveForm Asigură o referinţă la o foaie activă de date.
ActiveReport Asigură o referinţă la raportul activ.
Application Permite accesul la obiectul Application şi
proprietăţile acestuia.
MousePointer Permite specificarea tipului de cursor de mouse.
Parent Asigură o referinţă la obiectul cadru al unui control,
unei acţiuni, unui subformular, etc.
PreviousControl Asigură o referinţă la ultimul control activat înaintea
controlului curent.

Exemplu:
`Afişează numele controlului precedent
Dim ctl As Control
Set ctl = Screen.PreviousControl

143
MsgBox ctl.Name
`Transformă cursorul de mouse în clepsidră
Screen.MousePointer = 11
`Reafişează cursorul by default
Screen.MousePointer = 0
`Afişează numele formularului activ
Dim frm As Form
Set frm = Screen.ActiveForm
MsgBox frm.Name
`Modifică titlul formularului
frm.Caption = „ Formular de plată”

OBIECTUL FILESEARCH
Acest obiect permite căutarea fişierelor în funcţie de un ansamblu de criterii şi
obţinerea informaţiilor relevante despre aceste fişiere.
Proprietăţi:
Creator Returnează codul de 4 caractere al aplicaţiei în care
obiectul specificat a fost creat (nu se poate folosi decât
în mediul Macintosh).
FileName Returnează sau defineşte numele fişierului ce trebuie
căutat.
FileType Returnează sau defineşte tipul fişierului ce trebuie
căutat.
LastModified Returnează sau defineşte o constantă care indică
timpul scurs de la ultima modificare a fişierului.
LockIn Returnează sau defineşte folderul care se bazează
căutarea specificată.
MatchText Arată dacă căutarea specificată nu se bazează decât pe
Exactly fişierele ale căror corp de texte sau proprietăţi conţine
exact cuvântul sau fraza specificată.
SearchSubFolders Arată dacă căutarea include toate subfolderele
folderului specificat.
TextOrProperty Returnează sau defineşte cuvântul sau fraza de căutat
în corpul de texte sau în proprietăţile fişierului.

Obiecte şi colecţii:
FoundFiles Obiect reprezentând lista de fişiere returnate de căutare
PropertyTests Colecţie de obiecte PropertyTests reprezentând
ansamblul criteriilor căutării.
SearchFolders Colecţie de obiecte ScopeFolder reprezentând

144
ansamblul folderelor căutare.

Metode:
Execute Lansează căutarea fişierelor specificate
NewSearch Stabileşte valorile implicite a tuturor criteriilor de
căutare.
RefreshScopes Actualizează lista de obiecte ScopeFolder (foldere)
disponibile.
Exemplu:
Codul următor permite stocarea într-un tablou a listei de fişiere
Excel într-un director din My Documents.
Dim strFileName()As String
Dim i,j As Integer
With Application.FileSearch
.NewSearch
.LookIn = „C:\My Documents”
.SearchSubFolders = True
.FileName = „xls”
.MatchTextExactly = True
.Execute
j = .FoundFiles.Count
ReDim strFileName(j)
For i = 1 To j
strFileName(i) = .FoundFiles(i)
Next i
End With

COLECŢIA REFERENCES
Colectia References conţine obiectele References ce corespund biblotecilor de
obiecte provenite din alte aplicaţii.
Pentru a adăuga (sau şterge) o referinţă la o bibliotecă de obiecte, se alege
opţiunea References din meniul Tools. Fereastra următoare permite selectarea
referinţelor dorite:

145
Proprietăţi:
Count Determină numărul obiectelor referenţiate
Parent Nu este folosit.

Metode:
AddFromFile Creează o referinţă la o bibliotecă pornind de la
numele unui fişier.
AddFromGuid Creează o referinţă la o bibliotecă pornind de la
GUID-ul său (identificator global unic în registrul
Windows).
Item Returnează o referinţă în funcţie de poziţia sa în
colecţia References.
Remove Şterge un obiect referinţă din colecţia References.

Proprietăţile obiectului Reference


BuiltIn Arată dacă o referinţă implicită este necesară pentru buna
funcţionare în Access.
FullPath Returnează o cale de acces şi numele fişierului bibliotecii
referenţiate.
Guid Returnează GUID-ul, identificatorul bibliotecii în registrul
Windows.
IsBroken Arată dacă o referinţă validă este atribuită obiectului în
registrul Windows.
Kind Indică tipul de referinţă.
Major Indică principalul număr de versiune al aplicaţiei căreia îi

146
este asociată o referinţă.
Minor Indică numărul minor de versiune al aplicaţiei.
Name Numele referinţei.

Exemplu:
Dim Ref As References
`Afişează numărul total de referinţe
MsgBox(„Nr. total de referinte este:” & references.Count
`Parcurge referinţele, afişează numele şi calea de acces ale
acestora
For Each ref In Application.References
MsgBox(„nume:” & ref.name & „ „ vbCr & vbCr & _
ref.FullPath
`Şterge referinţele neobligatorii pentru Access
If Not ref.BuiltIn Then
References.Remove ref
EndIf
Next ref
`Adaugă biblioteca de obiecte Excel
Application.References.AddFromFile „Excel9.olb”
`Adaugă biblioteca de obiecte Word
Application.References.AddFromFile „MsWord.olb”

COLECŢIA PRINTERS
Conţine obiectele Printer ce reprezintă fiecare imprimantă disponibilă în sistem.
Observaţie:
Obiectul Printer nu există în versiunile precedente ale Access.

Proprietăţile obiectului Printer:


BottomMargin Împreună cu proprietăţile TopMargin, RightMargin şi
LeftMargin, această proprietate permite specificarea
marginilor unei pagini.
ColorMode Arată dacă imprimanta trebuie să listeze în culori
(acPRCMColor) sau alb-negru (acPRCMMonochrome)
ColumnSpacing Indică dispunerea pe verticală a secţiunilor Detail a unui
formular.
Copies Indică numărul copiilor de listat.
DataOnly Permite doar listarea datelor unui tabel sau interogarea în
modul DataSheets.
DeviceName Indică numele perifericului.

147
DriverName Indică numele driverului utilizat de imprimantă.
Duplex Indică felul în care imprimanta administrează listarea faţă-
verso.
Orientation Indică orientare imprimării (acPRORPortrait sau
acPRORLandscape).
PaperBin Indică PaperBin ce trebuie folosit de către imprimantă.
PaperSize Indică mărimea hârtiei.
Port Indică portul la care este conectată imprimanta.
PrintQuality Indică rezoluţia folosită de imprimantă pentru listare.

Celelate proprietăţi (ColumnSpacing, RowSpacing, ItemSizeHeight, etc.)


permit formatarea din secţiunea Detail a unui formular sau raport.

4.10. Recomandări pentru optimizarea codului VBA


Pentru a optimiza funcţionarea VBA, unele comenzi pot accelera viteza de
execuţie a codului creat.
Întotdeauna variabilele trebuie să fie declarate în mod explicit.
Tipul de variabile trebuie să fie întotdeauna cât mai explicit posibil.
Pentru a crea referinţa proprietăţilor, controalelelor şi obiectelor de
acces la date, se preconizează variabilele.
Cuvântul rezervat Me trebuie folosit pentru a se face referinţă la un
formular sau un raport în cadrul procedurii eveniment.
Se recomandă folosirea constantelor cât de frecvent posibil.
Modulele trebuie să fie organizate pentru a nu supraîncărca memoria.
Un modul este salvat doar dacă una din procedurile sale este apelată de
alte coduri.
Codul trebuie compilat regulat.

4.11. Întrebări de auto-evaluare


1. Explicaţi:
a. Avantajele utilizării VBA
b. Modelul obiect din Access
c. Proprietăţile referitoare la obiecte
d. Evenimente
e. Proceduri in VBA
f. Noţiunile de variabile, constante şi tipuri de date
g. Instrucţiunea If. Exemple
h. Instrucţiunea Select... Case. Exemple

148
i. Instrucţiunea Do...Loop. Exemple
j. Instrucţiunea While... Wend. Exemple
k. Instrucţiunea For... Next. Exemple
l. Instrucţiunea For Each... Next. Exemple
m. Operatori în VBA
n. Instrucţiunea With... End with. Exemple
o. Instrucţiunea For Each... Next. Exemple
p. Instrucţiunea If.. Type Of. Exemple
q. Instrucţiunea Set. Exemple
r. Categoriile de evenimente existente în VBA
s. Obiectul DoCmd. Exemple

2. Descrieţi mediul de dezvoltare pentru VBA (IDE-ul).

3. Reguli de scriere a codului sursă VBA.

4. Module de clasă.

5. Proprietăţile şi metodele obiectelor Access.

6. Recomandări pentru optimizarea codului Vba.

149
150
CAP.5. LIMBAJUL SQL

5.1. Rezumatul capitolului

Unul dintre cele mai puternice limbaje structurate pentru interogarea


datelor, SQL (Structured Query Language), a devenit un standard pentru o gamă
din ce în ce mai largă de sisteme pentru gestiunea bazelor de date. Vom prezenta
comanda Select – care permite realizarea interogării bazelor de date, precum şi
instrucţiunile care permit actualizarea datelor (adăugarea, modificarea şi
ştergerea datelor prin comenzi SQL).

5.2. Prezentarea limbajului SQL

Limbajul SQL (Structured Query Language sau limbajul structurat


de interogări) este un limbaj de interogări şi gestionare a bazelor de date
relaţionale. Access foloseşte SQL ca limbaj de interogare. În momentul
creării unei interogări în modul de interogare Design, Access construieşte
în paralel instrucţiunile SQL echivalente. De altfel, majoritatea
proprietăţilor interogărilor în modul de interogare Design prezintă clauze
echivalente şi opţiuni accesibile în limbajul SQL.
Exemplu: Dechideţi o interogare în modul Design View:

Faceţi clic pe opţiunea Mode SQL al icoanei View

151
Se va obţine instrucţiunea SQL corespunzătoare interogării

Observaţie:
Această operaţie este foarte interesantă în special pentru cei
nefamiliarizaţi cu limbajul SQL: se poate crea interogarea în Access şi
recupera instrucţiunea SQL astfel generată pentru a o include în codul
VBA.

Anumite interogări SQL, numite interogări specifice limbajului SQL, nu pot


fi create în grila de generare a interogărilor, ci trebuie să fie scrise direct în
modul SQL. Este vorba de:
- interogările directe ce permit operarea directă cu tabele în server,
- interogările definiţii de date ce permite crearea, ştergerea sau
modificarea structurilor tabelelor,
- interogările Union ce permit regruparea câmpurilor de două tabele (sau
mai multe) în acelaşi câmp rezultat din interogare. Aceste interogări
sunt foarte utile în fuzionarea înregistrărilor ce provin din tabele
diferite.

5.3. Limbajul SQL ŞI VBA

Interogările SQL se integrează perfect în VBA şi pot fi utilizate pornind de


la metodele diverselor obiecte:
- metoda OpenRecordset a obiectelor DataBase şi Connection,

152
- metoda CreateQueryDef a obiectelor DataBase şi Connection,
- metoda Execute a obiectelor Command şi Connection, etc.
Interogările SQL sunt de asemenea foarte des utilizate în formulare:
- proprietatea RecordSource a unui formular sau raport,
- proprietatea RowSource a unei liste derulante, etc.
Majoritatea acestor proprietăţi pot fi modificate de codul VBA.
Avantajele utilizării instrucţiunii SQL în VBA sunt următoarele:
 Viteza de execuţie: o instrucţiune Select este mai rapidă decât
parcurgerea secvenţială a unui tabel.
 Performanţă mai bună: în modul client/server, interogările sunt
compilate de SGBD care le optimizează performaţele.
 Întreţinere mai uşoară: codul de instrucţiuni SQL este mai scurt, deci
mai uşor de citit, decât echivalentul său în VBA.
 Standardizare: limbajul SQL este standardul de interogare al bazelor de
date relaţionale.

5.4. Descrierea limbajului SQL

INSTRUCŢIUNEA SELECT

SELECT este cea mai folosită instrucţiune, corespunzând interogării


Selection din Access. Permite extragerea câmpurilor unui ansamblu de
înregistrări ce corespund unor criterii.

Sintaxă:
SELECT [ALL |DISTINCT <listă de câmpuri>
FROM <listă de tabele>
[WHERE ...]
[GROUP BY...]
[HAVING...]
[ORDER BY]

ALL Sunt luate în considerare toate înregistrările ce


corespund criteriilor.
Distinct Sunt omise toate înregistrările pentru care câmpurile
selectate conţin date în dublu exemplar.
<listă de câmpuri> Listă de câmpuri selectate, separate de virgule
* Indică faptul că toate câmpurile tabelului/tabelelor
specifcat(e) sunt selectate.

153
alias1, alias2 Indică numele ce trebuie folosite drept antete de
coloană în locul numelor coloanelor originale din
tabel.
<listă de tabele> Numele tabelului sau tabelelor ce conţin datele care
trebuie extrase.

CLAUZA FROM
Aceasta specifică tabelele sau interogările din care sunt extrase datele.
Sintaxă:
FROM table 1 [LEFT|RIGHT|INNER JOIN table2
ON TABLE1.camp1 <operator de comparare> TABLE2.câmp2

[LEFT|RIGHT| Aceşti operatori permit definirea tipului de imbricare


INNER] între tabele.

LEFT JOIN Se foloseşte pentru a crea o imbricare externă de


stânga. Rezultatul acesteia cuprinde toate
înregistrările provenite din primul tabel (cel din
stânga: <tabel1>) şi pe acelea pentru care există o
valoare corespunzătoare în al doilea tabel (cel din
dreapta: <tabel2>).

RIGHT JOIN Se foloseşte pentru a crea o imbricare externă de


dreapta. Rezultatul acesteia cuprinde toate
înregistrările provenite din al doilea tabel (cel din
dreapta: <tabel2>) şi pe acelea pentru care nu
există valoare corespunzătoare în primul tabel (cel
din stânga: <tabel1>).

INNER JOIN Se foloseşte pentru a crea o imbricare ce nu cuprinde


decât înregistrările în care datele câmpurilor sunt
identice.

<operator de Toţi operatorii de comparare relaţională ce sunt


comparare> utilizaţi (=, <, >, < =, > =).

Exemple:
Select Clients.Cli_societate, Commandes.Cde_DateCde
From Clients INNER JOIN Commandes ON
Clients.Cli_CodeCli =Commandes.Cde_CodeCli

154
Listă de comenzi lansate de societate. În primul exemplu, sunt selectaţi doar
clienţii care au facut deja comenzi.
Select Clients.Cli_societate, Commandes.Cde_DateCde
From Clients LEFT JOIN Commandes ON
Clients.Cli_CodeCli =Commandes.Cde_CodeCli

În al doilea exemplu, sunt selectaţi toţi clienţii.

CLAUZA WHERE
Permite filtrarea înregistrărilor după anumite criterii.
Condiţiile clauzei WHERE se exprimă cu ajutorul operatorilor următori:
- operatori de comparare: =, <, >, < =, > =, Is [Not] Null,
[Not] In, Between.
- operatori logici: And, Or, Not.

Exemplu:
SELECT * From Produse WHERE [Prod_Pret] = 500000
SELECT * From Produse WHERE [Prod_Pret]
BETWEEN 100000 AND 200000
SELECT * FROM Clienti WHERE [Cli_plata] In
(`France, `Italia, `Spania)

CLAUZA GROUP BY
Clauza GROUP BY corespunde „Totalului” interogărilor Access (numite
Regrupări în versiunile anterioare). Permite regruparea datelor într-unul
sau mai multe câmpuri. În principal, clauza este folosită pentru
executarea funcţiilor de agregare SQL, ca şi Sum (sumă), Count (calcul),
Avg (medie).
Exemple:
Această interogare returnează numărul comenzilor lansate de client.
SELECT Clienti.Cli_Societate, Count(Comenzi.Cde_DateCde
AS NbComenzi
FROM Clienti
LEFT JOIN Comenzi
ON Clienti.Cli_CodeCli = Comenzi.Cde_CodeCli
GROUP BY Clienti.Cli_Societate

155
Această interogare returnează totalul fiecărei comenzi.
SELECT Comenzi.Cde_NumCde, Sum([Cde_Pret]*[Cde_Buc]
AS TotalCde
FROM Comenzi
INNER JOIN [Detalii Comenzi]
ON Comenzi.Cde_NumCde = [Detalii Comenzi].Cde_NumCde
GROUP BY Comenzi.Cde_NumCde

CLAUZA HAVING
Specifică înregistrările regrupate ce trebuie afişate într-o instrucţiune
SELECT dotată cu o clauză GROUP BY. Odată ce regruparea este
efectuată se afişează lista de câmpuri a clauzei GROUP BY şi sunt
selectate doar înregistrările care respectă condiţia specificată în clauza
HAVING.
Exemplu:
Această interogare extrage comenzile ale căror total este mai mare de
2 000 000.
SELECT Comenzi.Cde_NumCde, Sum([Cde_Pret]*[Cde_Buc]
AS TotalCde, Commandes.Cde_DateCde FROM Comenzi
INNER JOIN [Detalii Comenzi]
ON Comenzi.Cde_NumCde = [Detalii Comenzi].Cde_NumCde
GROUP BY Comenzi.Cde_NumCde, Comenzi.Cde_DateCde
HAVING (Sum(Cde_Pret*Cde_Buc)> 2 000 000)

CLAUZA ORDER BY
Această clauză determină sortarea (aranjarea în ordine crescătoare sau
descrescătoare), înregistrările rezultă dintr-o interogare în funcţie de
câmpul/câmpurile specificat(e).
Sintaxă:
[ORDER BY camp1 [ASC|DESC][, camp2 [ASC|DESC]][,. . . ]]

ASC Ordine crescătoare.


DESC Ordine descrescătoare.

Exemplu:
SELECT Clienti.Cli_Soc, Count(Comenzi.Cde_DateCde)
AS NbComenzi
FROM Clienti

156
LEFT JOIN Comenzi
ON Clienti.Cli_CodeCli =Comenzi.Cde_CodeCli
GROUP BY Clienti.Cli_Soc
ORDER BY Count (Comenzi.Cde_DateCde) DESC

Instrucţiunea UPDATE
Corespunde unei interogări de actualizare care modifică valorile câmpurilor
într-un tabel specificat, pentru înregistrările ce corespund criteriului dat
(facultativ).
Sintaxă:
UPDATE table
SET câmp1=valoarenouă1,[câmp2=valoarenouă2] ...
[WHERE criteriu]
Observaţie:
Dacă nu se specifică nici o clauză WHERE, toate înregistrările sunt
actualizate.
Exemple:
Această interogare modifică codul ţării din toate înregistrările tabelului Clienţi.
UPDATE Clients SET Clients.Cli_Pays = „RO”

Această interogare modifică în tabelul Clienţi codul de ţară al înregistrărilor


clienţilor al căror oraş este „Timişoara”.
UPDATE Clients SET Clients.Cli_Pays = „RO”
Where Clienti.Cli_oras =”Timisoara

INSTRUCŢIUNEA DELETE
Corespunde unei interogări DELETE ce şterge înregistrările din tabelul
menţionat în clauza FROM, după criteriile date (facultativ).

Sintaxă:
DELETE FROM tabel
[Where criteriu]
Observaţie:
Dacă nu este specificată nici o caluză WHERE, toate înregistrările sunt
şterse.

157
Exemplu:
Această interogare şterge comezile de dinainte de 1997.
DELETE Comenzi.Cde_DateCde
FROM Comenzi
WHERE (( Comenzi.Cde_DateCde) < #1/1/1997#)

INSTRUCŢIUNEA INSERT INTO


Instrucţiunea SQL INSERT INTO corespunde unei interogări Add care adaugă
înregistrări într-un tabel.
Sintaxa:
Interogare Add de adăugare a unei singure înregistrări :
INSERT INTO <TabelDestinatie>[( câmp1 [, câmp2 [‚ ...] ] ) ]
VALUES ( valoare1 [, valoare2 [, ...]])
Observaţie:
Trebuie să existe tot atâtea valori câte coloane de valorificat, de acelaşi
tip şi în aceeaşi ordine.

Interogare Add cu una sau mai multe înregistrări:


INSERT INTO <TabelDestinatie>[( câmp1 [, câmp2 [‚ ...] ] ) ]
SELECT [<TabelSursa>.]câmp1 [, câmp2 [,...] ]
FROM <lista de tabele>
Observaţie:
Instrucţiunea SELECT trebuie să returneze atâtea valori în aceeaşi
ordine şi de acelaşi tip către coloanele de valorificat (câmpul
instrucţiunii INSERT).
Exemple:
Adăugarea unei înregistrări în tabelul Clienţi
INSERT INTO Clienti (Cli_CodCli, Cli_societate, Cli_oras,
Cli_plata)
VALUES( `Mirton`, `Editura Mirton`, `Timisoara~, `RO`)

Adăugarea unei înregistrări din tabelul Prospecte în tabelul Clienţi.


INSERT INTO Clienti
SELECT Prospecte.*
FROM Prospecte

158
ALTE INSTRUCŢIUNI
Interogare
TRANSFORM Crează o interogare imbricată.

UNION Crează o interogare ce fuzionează rezultatele a două sau


mai multe tabele sau interogări.

Crearea şi gestiunea de tabele


CREATE TABLE Crează un nou tabel.

CREATE INDEX Crează un nou index pentru un tabel existent.

ALTER TABLE Modifică structura unui tabel.

DROP TABLE Şterge tabelul din baza de date.

DROP INDEX Şterge indexul unui tabel.

Crearea şi gestiunea utilizatorilor şi a grupurilor


CREATE USER Crează unul sau mai mulţi utilizatori.

ADD USER Adaugă unul sau mai mulţi utilizatori grupului de


utilizatori existenţi

DROP USER Şterge unul sau mai mulţi utilizatori.

CREATE GROUP Crează una sau mai multe grupe de utilizatori.

DROP GROUP Şterge una sau mai multe grupe de utilizatori.

GRANT Oferă privilegii specifice unui utilizator sau a unui


grup de utilizatori existent.

REVOKE Retrage privilegiile specifice ale unui utilizator sau a


unui grup de utilizatori existent.

159
5.5. Exemple de utilizare a interogărilor SQL

Pentru a demonstra rezultatele limbajului SQL, exemplele următoare


propun două proceduri echivalente, una folosind limbajul SQL, cealaltă nu.
Pentru a realiza aceste exemple, se crează un tabel Clienţi având
câmpurile Cli_Societate, Cli_Ţară şi Cli_Oraş şi se tastează câteva înregistrări
în acest tabel.

ACTUALIZAREA ÎNREGISTRĂRILOR
Codul din exemplul următor permite modificarea conţinutului unui câmp
dintr-un tabel pentru înregistrările ce corespund criteriilor.
Codul VBA ce utilizează o interogare SQL de tip UPDATE
Private Sub Maj_Plati()
Dim cncDeviz As ADODB.Connection
Dim strSQL As Sring
`Actualizarea codului ţării din tabelul Clienţi
Set CncDeviz = CurrentProject.Connection
strSQL = „UPDATE Clients SET Clients.Cli_Plati = `RO` _
& „WHERE Clienti.Cli_Oras = „Timisoara”
cncDeviz.Execute strSQL
END SUB

Codul VBA echivalent fără interogarea SQL


Private Sub Maj_Plati()
Dim cncDeviz As ADODB.Connection
Dim rstClient As ADODB.RecordSet
` Deschidere pentru înregistrare
Set CncDeviz = CurrentProject.Connection
Set rstClient = New ADODB.RecordSet
rstClient.Open „Clienti”, cncDeviz, adOpenForwardOnly,_
adLockOptimistic
`Parcurgerea secvenţială a tabelului Clienţi
Do While Not rstClient.EOF
If rstClienti(„Cli_Oras”)= „Timisoara” Then
rstClient(„Cli_Plata”)= „RO”
rstClient.Update
EndIf
rstClient.MoveNext
Loop
End Sub

160
ÎNCĂRCAREA UNEI LISTE DERULANTE
Codul exemplului de mai jos permite afişarea într-o listă derulantă (controlul
zonă de listă) a numelui clienţilor a căror nume de Societate începe cu o listă
dată (litera este scrisă într-o zonă de text).
Pentru a testa acest exemplu:
- se crează un formular numit Clienţi
- se adaugă controalele următoare în acest formular:
- o zonă de text (txtNameSoc),
- o zonă de listă (IstSoc),
- un buton de comandă (cmdLista1).

Codul VBA ce utilizează interogarea SQL de tipul SELECT. Conţinutul


listei este rezultatul interogării SQL.
Private Sub cmdListe1_Click()
Dim strSQL As Sring
`Controlul numelui scris
If txt numeSoc = „ „ Then
MSGBOX(„Trebuie să tastaţi cel puţin o literă”, _
txtNumeSoc.SetFocus
Exit Sub
End If
`Proprietăţi ale listei derulante
`Lista conţine o interogare
Me.lstSoc.RowSourceType = „Table/Interogare”
strSQL = „SELECT Clienti.Cli_Societate Like `”& _
Me.txtNumeSoc & „*`
Me.lstSoc.RowSource = strSQL
`Reactualizarea datelor listei
Me.lstSoc.Interogare
End Sub

Codul VBA echivalent fără interogarea SQL.


Private Sub cmdListe1_Click()
Dim cncDeviz As ADODB.Connection
Dim rstClient As ADODB.RecordSet
Dim strNumeSoc as String
`Controlarea numelui scris
If txtNumeSoc = „ „ Or IsNull(txtNumeSoc) Then
MSGBOX(„Numele acesta a mai fost introdus”, vbExclamation)

161
txtNumeSoc.SetFocus
Exit Sub
End If
`Iniţializarea listei derulante
`Lista conţine o suită de valori
Me.lstSoc.RowSourceType = „Lista de valori”
Me.lstSoc.RowSource = „ „
Me.lstSoc.Requery
`Deschiderea unui set de înregistrări
Set cncDeviz = CurrentProject.Connection
Set rstClient = New ADODB.Recordset
rstClient.Open „Clienti”, cncDeviz, adOpenForwardOnly, _
adLockOptimistic
` Parcurgere secvenţială a tabelului şi adăugarea elementelor în
listă
Do While Not rstClienti.EOF
If Left(rst(Client(„Cli_Societate”),1) = _
Left(MetxtNumeSoc, Len(Me.txtNumeSoc)) Then
strNumeSoc = rstClient(„Cli_Societate”)
Me.LstSoc.AddItem strNumeSoc
End If
rstClient.close
End Sub

Observaţie:
1. Exemplele precedente constată faptul că codul ce utilizează SQL este
mai scurt şi execuţia sa este mai rapidă în special dacă tabelul client
conţine un număr important de înregistrări.

5.6. Teste de auto-evaluare


1. Explicaţi:
a. Instrucţiunea Select. Exemple
b. Instrucţiunea Update
c. Instrucţiunea Delete
d. Instrucţiunea Insert Into
2. Actualizarea înregistrărilor.
3. Încărcarea unei liste derulante.

162
CAP. 6. MANIPULAREA OBIECTELOR WORD ŞI
EXCEL ÎN VBA
6.1. Rezumatul capitolului
Uneori este necesară manipularea obiectelor unei alte aplicaţii (în
special cele care fac parte din pachetul Microsoft Office – cele mai uzuale fiind
MS Word şi MS Excel) direct din Access. Acest lucru se realizează cu ajutorul
tehnologiei OLE Automation. În acest capitol va fi prezentat modul de
comunicare cu cu cele două aplicaţii, modelele obiect asociate, obiectele şi
colecţiile specifice fiecăreia precum şi protocolul de schimb dinamic de date
dintre cele două aplicaţii, cu exemple.

6.2. Tehnologia OLE


Automation, numită şi OLE (Object Linking and Embedding) sau
OLE Automation, este tehnologia care permite manipularea obiectelor unei alte
aplicaţii, direct din Access sau din VBA Access. Pentru a putea funcţiona,
Automation are nevoie de un client şi un server numit server OLE. Serverul
este aplicaţia sau componentul care furnizează servicii clientului. Clientul,
numit şi controlor, utilizează aceste serviciii pentru a pilota aplicaţia server şi
manipula obiectele sale. Access este clientul şi Word este serverul OLE.
O bibliotecă de obiecte este un fişier prevăzut de obicei cu o
extensie .olb, furnizând informaţii ce permit maipularea obiectelor puse la
dispoziţia utilizatorului de un server. Se poate folosi Exploratorul de obiecte
pentru a examina conţinutul unei biblioteci de obiecte.
Pentru a accesa obiectele unei alte aplicaţii, se face referinţă la biblioteca
acesteia de obiecte în modul următor:
→ într-un modul, se selectează meniul Tools-References, se va
afişa o căsuţă de dialog References cu toate serverele OLE înregistrate
→ se activează referinţa dorită.
Cu ajutorul exploratorului de obiecte, consultarea listei de obiecte, metode şi
proprietăşi ale unui server OLE este mai simplă.
Utilizarea tehnologiei Automation
Pentru a putea manipula obiectele altei aplicaţii, se procedează astfel:
- se defineşte o variabilă obiect în codul VBA,
- se folosesc funcţiile CreateObject sau GetObject pentru a face
referinţă la obiect.

163
Exemple:
Dim AppWord As Object
Set AppWord ‚ CreateObject( “Word.Application”)
Sau,
Dim AppWord As NewWord.Application
Referire la un document Word existent:
Dim DocWord As New Word.Application
Set DocWord = GetObject(„C:\Clienti\Gabi.doc”)

Următoarele paragrafe descriu modul în care se poate pilota diferite softuri ale
Microsoft Office utilizând tehnologia Automation.
Observaţie:
Obiectele, colecţiile, metodele şi proprietăţile modelelor obiect din
Microsoft Office fiind foarte numeroase, doar cele mai des folosite sunt
descrise în cele ce urmează.

164
6.3. Comunicarea cu Word
MODELUL OBJECT WORD
Extrase din modelul Object Word.( Collections si Object).

Application

AddIns FontName

Answer Wizard Languages

Assistant LanguageSettings

AutoCaption ListGalleries

AutoCorrect MaillingLabel

Browser MailMessage

CaptionLabels NewFile

COMAddIns Options

CommandBars RecentFile

DefaultWebOptions Selection

Dialogs SynonymInfo

Dictionaries System

Documents TaskPanes

EmailOptions Tasks

FileConverters Templates

FileDialog Windows

FileSearch

165
OBIECTE ŞI COLECŢII WORD

Documents Colecţia tuturor claselor (obiecte Document) deschise.

Dictionaries Colecţia tuturor dicţionarelor personale active (obiectele


Dictionary).

E-Mail Obiect ce conţine caracteristicile globale pe care Microsoft


Options Word le foloseşte când utilizatorul crează sau modifică mesaje
electornice şi răspunsurile la acestea.

File Colecţia tuturor conversiilor de fişiere (obiecte FileConvert)


Converters disponobile pentru deschiderea şi înregistrarea fişierelor.

FontNames Obiect ce conţine lista numelor tuturor fonturilor disponibile.

Languages Colecţia limbilor (obiecte Languages) utilizate în Word pentru


verificările lingvistice şi pentru redactare.

ListGalleries Colecţia obiectelor ListGallery

MailMessage Obiect reprezentând mesajul electronic activ dacă Word este


editorul e-mailului.

Options Reprezintă opţiunile aplicaţiei şi documentului Word.


Majoritatea proprietăţilor obiectului Options corespund
elementelor căsuţei de dialog (meniul Tools).

Selections Reprezintă selectarea în curs a unei ferestre.

System Conţine informaţii despre calculatorul

Templates Colecţia tuturor modelelor (obiecte Template) disponibile la


un moment dat.

166
COLECŢIA DOCUMENTS

Metode:

Colecţia Documents este compusă din toate obiectele Document deschise în


Word:

Add Crează un nou Document şi alătură colecţia Documents.


Exemplu: Documents.Add Template:=”Normal”

Close Închide toate documentele Word deschise


Exemplu: Documents.Close

Open Deschide documetul specificat şi îl alătură colecţiei Documents.


Exemplu: Documents.Open
FileName:=”C:\Clienti\Balanta.doc”

Save Salvează toate documnetele deschise.


Exemplu: Documents.Save

OBIECTELE DOCUMENT
Un obiect Document permite cearea unei referinţe la un document Word. Active
Document desemnează documentul activ.
Metode:
Activate Activează un document deja deschis.
Exemplu: Documents(„ Cumpărători.doc”).Activate

Close Închide un document Word.


Exemplu: Documents(„ Cumpărători.doc”).Close
Sau ActiveDocument.close

PrintPreview Afişează un document în Print Preview înaintea printării.


Exemplu: ActiveDocument.PrintPreview

Range Returnează un obiect Range.


Exemplu: ActiveDocument.Range(0, 50).Bold =True

Save Salvează un document.


Exemplu: ActiveDocument.Save

167
SaveAs Salvează un document sub un nou nume şi/sau într-un nou
format.
Exemplu: ActiveDocument.SaveAs FileName:=strDocName

Obiecte şi colecţii:

Characters Colecţii de caractere dint-un document.

MailMerge Fuziune în Word.

PageSetup Descrierea setării în pagină


Exemplu: ActiveDocument.PageSetup.RightMargin =
InchesToPoint(1)

Paragraphs Colecţia paragrafelor unui document.

SmartTags Colecţia butoanelor active (obiecte SmartTag) al unui


document sau a unei plaje de text în cadrul unui document.

Words Colecţia de cuvinte a unui document.


Exemplu: ActiveDocument.Words.Count

Exemplu: Îngroşarea caracterelor unui document


Private Sub Word_Bold()
Dim appWord As New Word.Application
With appWord
.Documents.Open”C:\Clienti\gabi.doc”
.ActiveDocument.Select
.Selection.Font.Bold = True
.ActiveDocument.Close wdSaveChange
.Quit
End With
End Sub

168
Lansarea unui MailMerge.
Private Sub Relatii()
Dim appWord As Word.Application
Dim docWord As Word.Document
`lansarea în Word
Set AppWord = New Word.Application
appWord.Visible = True
`deschiderea unei scrisori tip
Set docWord = appWord.documents.Open („C:\clienti\gabi.doc”)
`pregătirea unei scrisori tip pentru toţi clienţii
With docWord.MailMerge
.Destination = wdSendNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
`lansarea unei scrisori tip
.Execute
End With
End Sub

169
6.4. Comunicarea cu EXCEL
MODELUL OBJECT EXCEL
Extras din modelul Object Excel ( Collections şi Object).

Application

AddIns WorkBook

Answer Workshets

Assistant Charts

AutoCorrect DocumentProperties

AutoRecover CustomViews

CellFormat CommandBar

COMAddIns Styles

CommandBar Borders

Debug Font

Dialogs Interior

DefaultWebOptions
Names

FileSearch

SmartTagOptions
Languages

Names WebOptions

RecentFiles Windows

SmartTagRecognizers

WorkSheetFunction

170
OBIECTELE ŞI COLECŢIILE EXCEL

Workbooks Colecţia tutror claselor (obiectele Workbook) deschise.

Worksheets Colecţia tuturor foilor de calcul (obiecte Worksheet) ale


unei clase.

Charts Colecţia tuturor obiectelor Name din aplicaţie. Fiecare


obiect Name reprezintă un nume definit pentru o plajă de
celule.

SmartTag Obiect reprezentând opţiunile referitoare la butoanele active.


Options
Exemplu: activarea tuturor butoanelor
ActivateWorkBook.SmartTagOptions_
.EmbedSmarttags = True

Styles Colecţia tuturor descrierilor de stil (obiecte Style)

CustomViews Colecţia de obiecte personalizate (obiecte CustomView).

COLECŢIA WORKBOOKS
Se compune din:
Add Crează un nou Workbook, care devine cel activ, şi îl alătură
colecţiei Workbooks.
Exemplu: WorkBook.add

Close Închide Workbook-ul Excel deschis.


Exemplu: WorkSheets.Close

Open Deschide Workbook-ul specificat care devine activ şi îl alătură


colecţiei Workbooks.
Exemplu:
WorkBook.Open Filename:=”C:\gabi\gabi1.xls”

Save Salvează toate Workbook-urile deschise.


Exemplu: WoorkBooks.Save

171
OBIECTELE WORKBOOK
Un obiect Workbook permite crearea unei referinţe la o clasa Excel.
Proprietatea Active Workbook desemnează o clasa activă.

Activate Activează un fişier deja deschis.


Exemplu: Documents(„Cumpărători.xls”).Activate
Close Închide un fişier Excel deschis.
Exemplu: Documents(„Cumpărători.xls”).Close

PrintPreview Afişează foaia activă în modul PrintPreview îniantea listării.


Exemplu: ActiveWorkbook.PrintPreview

Save Salvează un Workbook.


Exemplu: ActiveWorkbook.Save

SaveAs Salvează un Workbook sub un nou nume şi/sau sub un nou


format.
Exemplu: ActiveWorkbook.SaveAs
FileName:=”Gabi.xlt”

SCRIEREA DATELOR ÎN CELULELE EXCEL

Exemplu: Acest exemplu demonstrează cum se afişează conţinutul unui


tabel Access în Excel (Exportul datelor din Access in Excel):

Private Sub ExportXLS_Client()


`Obiecte Access
Dim dbsGabi as DAO.database
Dim stClient As DAO.RecordSet
Dim fld As DAO.Field
`Obiecte Excel
Dim appExcel As Excel.application
Dim wkbClient As Excel.Workbook
Dim wksClient As Excel.Woorksheet
`Variabile ciclice
Dim intLig As Integer
Dim intCol As Integer
` crearea unei mape Excel

172
Set appExcel = CreateObject(„Excel.Application”)
Set wkbclient = appExcel.Workbook.Add
Set wksClient = appExcel.ActiveSheet
appExcel.Visible = True
`Deschiderea tabelului Clienţi
Set dbsGabi = DbEngine.OpenDatabase(„C:\gabi\gabi1.mdb”)
Set rstClient = dbsOpenRecordSet(„Clienti”, dbOpenDynaset)
`Actualizarea unei foi active
With wksClient
`Antetele coloanelor completate de numele câmpurilor
intCol = 1
For Each fld In rstClient.Fields
.Cells(1,intCol).Value = fld.Name
intCol =IintCol + 1
Next fld
`Parcurgerea înregistrărilor
`Adăugarea unei linii pentru fiecare înregistrare
intLig = 2
Do While Not rstClient.Fields
Intcol =1
For Each fld In rstClient.Fields
.Cells(intLig, intCol).Value = fld.Value
intCol = intCol + 1
Next fld
intLig = intLig +1
rstClient.MoveNext
Loop

`Atribuirea unui nume foii Excel


.Name = „lista de clienti”
End With
`Înregistrarea mapei de lucru
wkbClient.SaveAs „C:\Clienti\Clienti.xls”
`Închide Excel
appExcel.Quit
End Sub

173
6.5. Protocolul DDE

DDE (Dynamic Data Exchange) este un protocol de schimb dinamic de


date între două aplicaţii Windows, una denumită Clineţi sau Destinaţie, cealaltă
denumită Server sau Sursă. Legătura este întreruptă dacă una dintre cele două
aplicaţii este închisă.
O legătură DDE cuprinde 3 faze principale:
- iniţierea: aplicaţia destinaţie caută aplicaţia sursă şi stabileşte un canal
(legătură) de comunicare,
- conversie: datele sunt schimbate prin acest canal,
- închidere: canalul de comunicare este închis.

INIŢIEREA
Funcţia DDEInitiate permite iniţierea conversaţiei între două aplicaţii,
returnând numărul de canal dacă comunicarea a fost stabilită. Dacă aceasta nu s-
a întâmplat, are loc o eroare.
Sintaxă:
DDEInitiate(<application>,<subject>)
Application Numele aplicaţiei sursă.
Subject Grupul de date care sunt folosite.

Exemplu:
`crează o legătură DDE cu foaia Excel
canal = DDEInitiate(„Excel”,”Foaie”)

LEGĂTURA
→ DDE
Funcţia DDE permite stabilirea unei conversaţii DDE cu o altă aplicaţie, de la
care se cere informaţii pentru a fi afişate într-un control al unui formular sau
raport.
Sintaxă:
DDE (<Application>, <Rubrica>, <Element>)
Application Expresie de tip şir ce identifică o aplicaţie.
Rubrica Fişier document sau fişier de date.
Element Referinţă la o dată a aplicaţiei Sursă.
Exemplu: Atribuie conţinutul celulei L1C1 unei zone de text via
proprietatea Source Control.
=DDE (“Excel”, “Mapa1”, “L1C1”)

174
→ DDESend
Funcţia DDESend permite stabilirea unei conversaţii DDE cu o altă aplicaţie şi
trimiterea unui element de informaţie acestei aplicaţii dintr-un control situat
într-un formular sau raport.
Sintaxă:
DDESend (<Application>, <Rubrica>, <Element>, <Date>

Application Expresie şir ce identifică o aplicaţie.


Rubrică Fişier document sau fişier de date.
Element Referinţă la o dată a aplicaţiei sursă.
Date Şir sau expresie conţinând datele care sunt transmise
aplicaţiei.
Exemplu: Atribuie conţinutului controlului celulei L1C1 unei zone de text
=DDESend(„Excel”,”Mapa1”, „L1C1”, [oras])

→ DDEPoke
Instrucţiunea DDEPoke trimite informaţii aplicaţiei Sursă print-un canal
deschis.
Sintaxă: DdePoke <Numărul de canal>, <Element>, <Date>

ChannelNumber Numărul de canal returnat de către funcţia DDEInitiate.


Element Referinţă la o dată a aplicaţiei Sursă.
Date Dată trimisă aplicaţiei Sursă.
Exemplu: Trimite valoarea 15 în celula L1C1
DDEPoke canal, ”L1C1”, „15”

→ DDERequest
Funcţia DDERequest cere informaţii aplicaţiei Sursă.
Sintaxă:
DDERequest ( <Numar canal>, <Element>)

ChannelNumber Numărul de canal returnat de către funcţia DDEInitiate.


Element Referinţă la o dată a aplicaţiei Sursă.

Exemplu: Atribuie conţinutul celulei L1C1 variabilei sumă.


Suma = DDEReqest (canal, „L1C1”)

175
→ DDEExecute
Instrucţiunea DDEExecute returnează un şir de comenzi unei alte aplicaţii în
curs de execuţie
Sintaxă:
DDEExecute (<Numar de canal>, <Comandă>)
ChannelNumber Numărul de canal returnat de către funcţia DDEInitiate.
Comandă Şir conţinând o comandă recunoscută de cealaltă
aplicaţie.
Exemplu: Crează o nouă foaie de calcul
DDEExecute Canal,”[New(1)]”

ÎNCHIDEREA
→ DDETerminate
Instrucţiunea DDETerminate închide un canal de comunicare DDE.
Sintaxă:
DDETerminate <Numar de canal>
ChannelNumber Numărul de canal returnat de către funcţia DDEInitiate.
Exemplu:
DDETerminate canal
→ DDETerminateAll
Această instrucţiune închide toate canalele de comunicare DDE.
Sintaxă:
DDETerminateAll

EXEMPLU GLOBAL
Arată cum se afişează conţinutul unui tabel Access în Excel.
Exemplu:
Private Sub TransferXLS_Clienti( )
`Variabilele Access Object
Dim dbs As DAO.Database
Dim rstClient As DAO.RecordSet
Dim fld As DAO.Field
`Variabile pentru utilizarea DDE
Dim Canal As Variant
Dim intLig As Integer
Dim intColas Integer

176
Dim strPozitie As String
`Variabile Excel
Dim strExcel as String
Dim blnRes As Boolean
On Error resume Next
Set dbs = CurrentDb
Set rstClient = dbs.OpenRecordSet(„Clienti”, dbOpenTable)
`Deschiderea unui canal DDE cu Excel
canal = DDEInitiate(„Excel”, „Foaie”)
`În caz de eroare se lansează aplicaţia Excel
If Err Then
Err = 0
`Caută aplicaţia Excel
With Application.FileSearch
.NewSearch
.LookIn = „C:\”
.SearchSubFolders = True
.FileName = „Excel.exe”
.FileType = „*.exe”
If .Execute( ) > 0 Then
strExcel = .FoundFiles(1)
End If
`Lansarea Excel
blnRes = Shell(strExcel, vbNormalFocus)
If Not blnRes Then
MsgBox (”Aplicaţia Excel nu a fost găsită”, _
vbExclamation)
Exit Sub
End If
Canal = DDEInitiate(„Excel”, „Foaie”)
End If
`Activarea ferestrei Excel
intLin = 1
intCol =1
`Antetul coloanelor conţinând numele câmpurilor
For Each fld In rstClient.Fields
strPositon = „L” & intLin & „C” & ”intCol
DDEPoke Canal, strPosition, rstClient.Fields _
(IntCol -1).Name
intCol = intCol + 1

177
Next fld
`Parcurgerea înregistrărilor de transferat
Do While Not rstClient.EOF
intLin = intLin + 1
intCol =1
For Each fld In rstClient.Fields
strPosition = „L” & intLin & „C” & intCol
DDEPoke Canal, strPozitia, rstClient(intCol – 1)
intCol = intCol + 1
Next fld
rstClient.MoveNext
Loop
EndSub

6.6. Întrebări de auto-evaluare

1. Explicaţi:
a. Conceptul OLE Automation.
b. Protocolul DDE.

178
PARTEA PRACTICĂ

CAP.7. APLICAŢII PRACTICE REZOLVATE

7.1. Rezumatul capitolului

Acest capitol propune un îndrumător pentru orele de laborator, în


vederea însuşirii deprinderilor practice de utilizare a programului Microsoft
Access 2003. Acesta va cuprinde atât aplicaţii rezolvate cât şi aplicaţii propuse
studenţilor pentru munca individuală. Suntem conştienţi că noţiunile prezentate
prin exemple în acest capitol nu acoperă toate facilităţile de prelucrare oferite de
Microsoft Access. Propunerea noastră este prezentarea unora dintre cele mai
utile instrumente de utilizare a SGBD-ului studiat în partea teoretică.

7.2. Aplicaţia 1

1. Să cere informatizarea activităţii unei firme. Furnizorii sunt identificaţi


prin cod furnizor, denumire furnizor (numele şi prenumele furnizorului),
localitatea, adresa, email, banca furnizor şi cont furnizor. Despre
produse se cunosc cod produs, denumire produs, unitate de măsură,
stoc, preţ unitar. Produsele sunt depozitate în magazii, pentru care se
cunosc cod magazie, denumire magazie, gestionar (numele persoanei
care are în gestiune depozitul respectiv). Operaţiunile se desfăşoară pe
baza unor facturi, care trebuie să conţină numărul facturii şi data
facturii. Fiecare factură va avea detaliate liniile facturii în tabelul
LiniiFact, care va conţine număr factură, cod produs şi cantitate.
2. Se cere afişarea tuturor produselor în ordinea alfabetică a denumirii
acestora.
3. Să se afişeze toate produsele cu unitatea de măsură bucăţi care au
cantitatea strict mai mare decât 2, ordonate alfabetic după denumirea
produsului.

179
Obiective:

- Crearea unei baze de date.


- Crearea tabelelor în Design View. Analiza informaţiilor şi stabilirea
structurii tabelelor. Stabilirea cheilor primare şi a indecşilor.
- Crearea relaţiilor dintre tabele.
- Afişarea unei liste ordonate şi aplicarea filtrelor pentru afişarea datelor
după anumite criterii.

Rezolvare

1. Propunem următoarea schemă de structurare a datelor:

În tabela LiniiFact se observă faptul că pentru câmpul nr_f nu poate fi


definită o cheie primară, de aceea vom adăuga câmpul ID.
Se ştie că un furnizor va apare pe mai multe facturi. Deci relaţia dintre
tabelele Furnizori şi Facturi este de tipul one-to-many. Pentru a crea această
relaţie, este necesară adăugarea câmpului cod_f în tabela Facturi. Într-o magazie
se găsesc mai multe produse, deci relaţia dintre tabela Magazii şi tabela Produse
este de tipul one-to-many. Pentru aceasta este necesară adăugarea câmpului
cod_m în tabela Produse. În acelaşi timp un produs se regăseşte de mai multe
ori (posibil) pe liniile unei facturi, sau pe liniile mai multor facturi. Deci relaţia
dintre tabela Produse şi tabela Liniifact este one-to-many. Pentru a o crea este
necesară adăugarea câmpului cod_p în tabela Liniifact. În final, o factură are
mai multe linii, deci relaţia dintre tabelele Facturi şi Liniifact este de tipul one-
to-many.
Pentru a realiza aceste leagături, unele tabele trebuie completate cu
anumite câmpuri suplimentare, care să permită crearea ulterioară a relaţiilor.
Pentru aceasta, în tabela copil, se adaugă câmpul pe care a fost creată cheia
primară din tabela părinte. Câmpurile de tip cheie primară alese vor fi: Furnizori
(cod furnizor), Produse (cod produs), Magazii (cod magazin), Facturi (nr fact) şi
Liniifact (ID). Deci tabelele părinte sunt: Furnizori, Magazii şi Facturi, iar

180
Produse şi Liniifact sunt tabele Copil. Adăugând şi rearanjând tabelele, acestea
vor arăta ca în figura următoare:

Primul pas este crearea bazei de date. Aceasta va purta numele Firme.
Pentru a crea baza de date, din meniul File se alege opţiunea New, iar din Task
Pane-ul New File se alege opţiunea Blank Database. Primul pas este alegerea
locaţiei în care va fi salvat fişierul, apoi denumirea propriu-zisă a acestuia.
După crearea bazei de date se trece la analiza fiecărui tabel în parte şi
alegerea tipului de câmp cel mai potrivit datelor care vor fi salvate în acesta.
Propunem următoarele:
- în tabela Furnizori: cod_f (codul furnizorului) – cheie primară, de tip
Number, Field Size: Integer, Decimal Places:0, Caption: cod furnizor,
Validation Rule: <=200, Validation Text: “Maxim 200 de furnizori”,
Required: Yes; den_f (denumirea furnizorului) – de tip Text, Field Size:
30, Format: >, Caption: denumire furnizor, Required: Yes, Allow Zero
Length: No, Indexed: Yes (Duplicates OK); loc_f (localitate) – de tip
Text, Field Size: 30, Caption: localitate, Default Value: Timisoara;
adresa – de tip Memo; email – de tip Hyperlink; banca – de tip Text,
Field Size: 30, Format: >, Required: Yes, Allow Zero Length: No; cont
(contul din bancă, IBAN) – de tip Text, Fields Size: 24, Input Mask:
"RO"99>AAAA0000099999999999.

După ce toate câmpurile au fost create, se salvează tabela alegând


butonul Save, apoi se apasă săgeata de pe butonul View, de unde se alege
Datasheet View, pentru a introduce datele a trei furnizori în tabelă.

181
- în tabela Magazii: cod_m (cod magazin) – Primary key, de tip Number,
Field Size: Byte, Caption: Cod magazin, Required: Yes; den_m – de tip
Text, Field Size: 15, Caption: Denumire magazie, Indexed: Yes
(Duplicates OK), gest – de tip Text, Field Size: 30, Caption: Gestionar.
Vom introduce în continuare 3 magazii, cu codurile magazilor 111, 112
şi 113;

- în tabela Produse: cod_p – Primary key, de tip Number, Field Size:


Long Integer, Caption: Codul produsului, Required: Yes; den_p
(denumirea produsului) – tipul câmpului Text, Field Size:15, Caption:
denumirea produsului; um (unitate de măsură) – de tipul Lookup
Wizard, apoi selectăm – I will type in the values that I want, la
opţiunea Number of Columns lăsăm 1, iar în lista col1 vom tasta pe
rând, una sub alta, valorile dorite: kg, l, cm, buc, selectând butonul
Next, apoi Finish; stoc (stocul disponibil în magazie) – de tip Number,
Field Size: Long Integer, Caption: unitate de masura, Required: Yes;
pret_u, de tip Currency, Caption: Pret unitary; cod_m (cod magazie) –
un câmp de tip Lookup Wizard – vom selecta opţiunea I want the
lookup column to lookup the values in a table or query, apoi se allege
tabela Magazii; selectăm câmpul cod_m (cod magazie):

182
Ordonarea va fi făcută după acelaşi camp cod_m, putându-se observa
valorile introduse anterior în tabela Magazii:

În continuare se selectează butonul Next, apoi Finish. Între cele două


tabele (Magazii (tabela părinte) şi Produse (tabela copil) va fi creată
automat o relaţie). Pentru ca această relaţie să fie de tipul one-to-many,
vom introduce minim 4 produse, 2 dintre ele găsindu-se în aceeaşi
magazine, de exemplu cea cu codul 113;

- tabela Facturi: nr_f (numărul facturii) – Primary key, de tip Number,


Field Size: Long integer, Caption: Numarul facturii, Required: Yes;
data_f – de tip Date/Time, Caption: Data Facturii, Required: Yes,
Format: Short date, cod_f (cod furnizor) – tipul de date Lookup Wizard,
ne legăm de tabela Furnizori, câmpul cod_f, Caption: Cod furnizor.
Tabela Facturi este copilul tabelei Furnizori. Având 3 furnizori în tabela
părinte, vom introduce minim 4 facturi, codul furnizorului 125
repetându-se de 2 ori:

- tabela Liniifact: ID – Primary Key, un câmp de tip Autonumber,


Caption: Numar curent; nr_f (numărul facturii) – un câmp de tip
Lookup Wizard, ne legăm de tabela Facturi, câmpul nr_f, Caption:

183
Numarul facturii; cod_p (codul produsului) – un câmp de tip Lookup
Wizard, ne legăm de tabela Produse, câmpul cod_p şi cant – un câmp
de tip Number, Field Size: Integer, Caption: Cantitate. Acest tabel fiind
copilul tabelelor Produse şi Facturi, vom introduce minim 5 înregistrări:

Pentru a verifica relaţiile şi a seta regulile de integritate referenţială, se

selectează butonul Relationships de pe bara de unelte: :

Pentru fiecare relaţie în parte, se apelează meniul contextual, se alege


opţiunea Edit Relationship... Pentru a seta regulile de integritate referenţială se
selectează opţiunea Enforce Referential Integrity, bifând opţiunea Cascade
Update Related Field. Dacă se doreşte modificarea tipului de relaţie dintre cele
două tabele, se selectează butonul Join Type..., alegând una dintre cele trei
tipuri de relaţii.

184
Selectând pentru fiecare relaţie în parte opţiunile respective, se obţine
următoarea situaţie:

2. Pentru a vizualiza datele într-o anumită ordine se pot folosi butoanele


de pe bara de unelte , sau:

Pentru aceasta trebuie să fim poziţionaţi pe o anumită coloană din tabel,


în modul de vizualizare Datasheet View.

3. Pentru a filtra datele dintr-o anumită tabelă putem selecta fie unul
dintre butoanele: Filter by selection, respectiv Filter by form, şi
Apply/Remove filter, fie una dintre opţiunile din următoarea figură. Opţiunea
Filter by Form ascunde înregistrările, permiţând fie selectarea valorii dorite
utilizând combo-box-ul corespunzător coloanei dorite, fie introducerea unei sau
mai multor valori, operatorul dintre condiţiile multiple fiind AND. Pentru a
vedea rezultatul, se selectează butonul Apply Filer de pe bara de unelte Table
Datasheet.

Opţiunea Filter by selection permite selectarea cu mouse-ul a valorii


căutate (efectuându-se un click în celula respectivă), rezultatul fiind vizibil
atunci când se apasă butonul Apply Filter. Dacă se doreşte anularea filtrului, se
selectează butonul Remove Filter (acest buton este un buton de tip On/Off).
Filter excluding selection funcţionează exact ca şi opţiunea Filter by selection,
diferenţa fiind operatorul NON pus în faţa condiţiei.

185
Ultima opţiune – Advanced Filer/Sort permite deschiderea unei
ferestre cu ajutorul căreia putem sorta şi compune condiţii compuse, putându-se
utiliza operatorul OR între condiţii:

7.2.1. Aplicaţie propusă

Se cere informatizarea activităţii unei societăţi de asigurări. Clienţii pot fi


persoane fizice sau juridice caracterizate printr-un număr unic, nume şi
prenume/denumire, adresă şi telefon. Aceştia pot să încheie diferite tipuri
de asigurări (de bunuri, de viaţă etc). Asigurările sunt încheiate de agenţii
ce sunt identificaţi printr-un cod unic, nume şi prenume. Contractul de
asigurare este caracterizat printr-un număr, data încheierii, obiectul
asigurării, perioada (în luni), valoarea asigurată şi prima ce va trebui să
fie plătită în fiecare lună de client. Clienţii efectuează plata primelor prin
ordin de plată (persoane juridice) sau direct la casierie (persoane fizice),
eliberându-se chitanţe. Documentul de plată conţine: numărul
documentului, data la care a fost întocmit şi suma plătită. În momentul
producerii riscului pentru care a fost întocmită asigurarea, societatea
plăteşte clientului despăgubiri. La plata despăgubirilor se întocmeşte un
proces verbal care este caracterizat prin nume, data încheierii, descrierea

186
cauzei ce a generat despăgubirea şi procentul în care este despăgubit
clientul.

7.2.2. Aplicaţie propusă

Se cere informatizarea activităţii la o filială CEC. Clienţii filialei sunt


identificaţi prin seria şi numărul de buletin, data eliberării buletinului,
nume, prenume şi adresă. Fiecare client poate să deţină unul sau mai
multe cecuri. Pentru fiecare cec se cunoaşte: seria, numărul, data la care a
fost eliberat, suma depusă în momentul eliberării şi tipul cecului (poate fi
la termen şi la vedere). De asemenea, fiecare cec poate să aibă unul sau
mai mulţi titulari. Fiecare client poate efectua depuneri şi restituiri.
Depunerile se efectuează prin intermediul unei foi de depunere (FD)
caracterizată prin: număr, data şi suma depusă. Restituirile se efectuează
prin intermediul foilor de restituire (FR) caracterizate prin: număr, data şi
suma restituită. Fiecare cec se poate lichida de către unul din titulari prin
intermediul unei foi de lichidare (FL) caracterizată prin: număr, data şi
suma din momentul lichidării. Dobânda acordată pentru cecuri se
modifică de la o zi la alta şi este diferită pentru cecurile la termen faţă de
cele la vedere.

7.3. Aplicaţia 2

1. Să se paroleze baza de date.


2. Pentru a vizualiza cât mai sugestiv relaţiile dintre tabele, se vor
crea formulare cu subformulare.
3. Formularele create vor fi modificate pentru a adăuga titluri,
butoane de comandă şi controale de tip Textbox pentru afişarea şi
calcularea valorilor TVA şi VALOARE.
4. Se cere crearea unei forme de meniu. Aceasta va apela cu ajutorul
butoanelor de comandă alte forme, câte una pentru fiecare table,
pentru vizualizarea datelor.
5. Se doreşte crearea unui panou de comandă (Switchboard) pentru
crearea unui meniu care să conţină toate formele.

187
Obiective:

- Protejarea bazei de date.


- Vizualizarea datelor cu posibilitatea efectuării unor operaţii
elementare asupra acestora.
- Afişarea unor valori calculate după anumite formule.
- Crearea unei interfeţe vizuale cu utilizatorul.

Rezolvare

1. Pentru a proteja baza de date cu o parolă, aceasta trebuie deschisă în


mod Exclusive. Pentru aceasta, vom închide baza de date, alegem opţiunea
Open, după selectarea bazei de date se apasă săgeata din dreptul butonului
Open, pentru a alege opţiunea Open Exclusive.

Apoi, pentru a seta o parolă, Tools/Security/Set Database Password:

188
2. Pentru a crea un formular pentru fiecare tabel în parte, se
selectează tabelul, apoi din meniul Insert se alege opţiunea Autoform.
De exemplu, pentru tabela Facturi, fiind tabela părinte tabelei
Liniifact, automat se va crea un formular cu un subformular.

3. Pentru a adăuga un titlu în antet şi butoane de comandă acestei


forme, vom utiliza butonul View pentru a trece în Design View:

Pentru a adăuga un antet/subsol, din meniul Insert vom alege opţiunea


Form Header/Footer. Pentru a adăuga controale pe formă este necesară
afişarea barei de unelte Toolbox, prin apăsarea butonului Toolbox de pe bara de
unelte.

Pentru a adăuga un titlu în partea de antet (Header), se utilizează

controlul Label de pe bara de unelte, , se tastează textul dorit, apoi se


formatează folosind butoanele de pe bara de unelte.

189
Pentru a adăuga un control de tip buton de comandă, trebuie ca butonul

Control Wizards să fie selectat. Apoi, se alege butonul Command

Button , dând un click în zona de subsol. Aceasta va porni asistentul


care permite construirea butonului. Acţiunile pe care le putem ataşa butonului
de comandă sunt grupate în mai multe categorii. De exemplu, pentru a închide o
formă, se selectează categoria Form Operations, selectând apoi acţiunea Close
Form. La apăsarea butonului Next asistentul vă ghidează pentru a alege fie o
imagine grafică asociată butonului, fie un text. Ultimul pas este dat de
denumirea butonului. După convenţiile cunoscute, orice buton de comandă are
un antet de 3 litere, cmd, deci numele acestuia va fi cmdIesire. Analog se
construiesc restul butoanelor dorite. Forma se va salva cu numele Facturi-
Liniifact. Analog se construiesc restul formelor.

Vom construi o formă care să conţină datele din tabelele Produse şi


Liniifact. Pentru aceasta, vom selecta opţiunea Create Form in Design View.
Vom deschide fereastra Properties pentru a selecta tabelele de unde vor fi
preluate datele. Pentru aceasta, fiind poziţionaţi pe formă, apelăm meniul
contextual (click-dreapta) şi alege Properties:

190
Dacă se alege obiectul Form, prima opţiune pe pagina All este Record
Source. Dacă dorim să extragem datele dintr-o singură tabelă, alegem una
dintre cele afişate atunci când este selectat combo-box-ul. Dacă se doreşte
extragerea datelor din mai multe tabele, se apasă butonul cu trei puncte. Din
fereastra Show Table vom alege cele două tabele, Liniifact şi Produse.

Vom alege din cele două tabele câmpurile nr_f, den_p, um, pret_u şi
cant. La închiderea ferestrei se salvează interogarea. Pentru a putea utiliza

câmpurile, dacă acestea nu apar implicit, se apasă butonul . Prin drag-and-


drop, aceste cîmpuri vor fi aşezate pe formă.

Pentru a calcula un câmp, acesta trebuie creat cu ajutorul controlului


Text-box de pe bara de unelte Toolbox. Selectând controlul şi dând un click pe
formă, vom observa o etichetă cu numele Text urmat de un număr, şi un text-
box în care apare completat Unbound. În locul textului se completează: TVA,
iar în locul lui Unbound se tastează =0,19*[cant]*[pret_u]. Pentru a formata
această casetă de text, din fereastra Properties, opţiunea Format, se alege
Currency.

191
Analog se calculează câmpul Valoare.

4. Pentru a crea o formă de meniu, se crează o formă cu ajutorul


opţiunii Create a Form in Design View, apoi se creează butoanele de comandă
(cu ajutorul asistentului Control Wizards), selectîndu-se de la categoria Form
Operation, acţiuneaOpen a form, urmând a selecta numele formei care se
doreşte a fi deschisă atunci când se execută click pe buton.

6. Pentru a construi un panou de comandă (Switchboard):

Dacă apare acest mesaj de eroare, se alege opţiunea Yes:

Din fereastra Switchboad Manager se alege opţiunea Edit, pentru a


edita panoul de comandă principal (Main).

192
Pentru a crea o nouă opţiune (un nou buton pe panoul de comandă) se
alege butonul New:

Analog se crează pentru fiecare formă o nouă opţiune. Pentru a crea un


buton care permite părăsirea aplicaţiei:

Putem alege oricare acţiune dintre următoarele:

Forma poate fi regăsită oricând în cadrul formularelor:

193
7.3.1. Aplicaţie propusă:
Să se creeze o interfaţă grafică cu utilizatorul cu ajutorul opţiunii
Switchboard, fiind create formulare cu subformulare, îmbogăţite cu butoane de
comandă şi câmpuri calculate, pentru baza de date de la Aplicaţia 7.2.1. şi 7.2.2.

7.4. Aplicaţia 3

1. Să se creeze o interogare care să permită afişarea informaţiilor de


pe toate facturile (nr_f, data_f, den_p, cant şi preţ unitar) pentru
data curentă.
2. Să se creeze o interogare pentru tabela Produse, afişându-se
pentru fiecare înregistrare TVA-ul şi Valoarea (cant*pret).
3. Să se creeze o interogare care să permită citirea interactivă în
momentul execuţiei a unui număr de factură şi afişarea
informaţiilor legate de aceasta.
4. Să se creeze o interogare care să permită afişarea tuturor
facturilor eliberate între 2 date calendaristice (operatorii Between
cu And).
5. Să se creeze prin intermediul unei interogări un nou câmp cu
numele Observaţii care va conţine textul “Produs eficient” dacă
valoarea este mai mare decât o anumită valoare sau “Produs
ineficient” daca valoarea este mai mică decât acea valoare.

194
6. Să se afişeze toate facturile eliberate luna aceasta.
7. Operatorul Like:
a. Să se afişeze toate produsele care încep cu litera p.
b. Să se afişeze doar produsele care sunt din 5 litere si încep
cu litera p.
8. Să se afişeze toate produsele care au preţurile 3 şi 5 lei.
9. Să se afişeze toate produsele care nu au completat câmpul
denprodus.
10. Să se determine pentru fiecare factură valoarea totală.
11. Să se creeze un nou tabel pe baza tabelelor Facturi, Produse şi
LiniiFact, rezultatul unei interogări, care să conţină toate datele
din toate tabele, suprimând apariţia dublată a câmpurilor de
legătură, tabelul fiind ordonat alfabetic după denumirea
produselor.
12. Să se numere câte produse au preţul mai mic decât 100 lei. Să se
salveze interogarea cu numele Minim.
13. Să se calculeze valoarea totală a facturii cu numărul citit de la
tastatură. Să se salveze interogarea cu numele ValoareTot.
14. Să se calculeze valoarea medie a valorii tuturor facturilor. Să se
salveze interogarea cu numele Medie.

Obiective:

- Crearea interogărilor de selecţie.


- Funcţii pentru date calendaristice.
- Crearea unor câmpuri calculate.
- Interogări cu parametru.
- Operatorii Between, Like, In, Is Null.
- Funcţia IIF.
- Interogări de tip Totals.
- Interogări de tip Make Table.

Rezolvare:

1. Pentru a crea o interogare, se alege obiectul Query, selectând apoi


opţiunea Create Query In Design View. În fereastra Show table vom selecta
pe rând tabelele Facturi, Liniifact şi Produse, apăsând apoi butonul Add, apoi
se închide fereastra. Pentru a alege câmpurile dorite, acestea se selectează prin
dublu-click. Pentru a selecta condiţia ne poziţionăm sub coloana data_f, pe linia
Criteria, unde tastăm =Date(). Se salvează interogarea apăsând pe butonul

195
Save. Pentru a vizualiza rezultatul interogării, de pe butonul View se alege
Datasheet View.

Observaţie: Dacă înterogarea nu returnează nici un rezultatul,


înseamnă că nici o înregistrare nu a verificat condiţia ca data facturii să fie data
curentă.
2. Pentru a crea a doua interogare, se alege tabela Produse din fereastra
Show Tables, apoi se calculează câmpurile TVA şi valoare, pe rând, pe linia
Field, prima coloană liberă: TVA: [pret_u]*[cant]*0,19, respectiv Valoare:
[pret_u]*[cant]*1,19. Se salvează şi vizualizeză rezultatul interogării. Pentru a
formata o anumită coloană din interogare (TVA şi Valoare), în Design View se
selectează coloana, se apelează meniul contextual opţiunea Properties, iar la
opţiunea Format se alege Currency. Analog se procedează şi cu coloana
Valoare.

Se salvează interogarea şi se vizualizează rezultatele.

3. Se selectează tabelele Facturi, Produse şi Liniifact, câmpurile: nr_f,


data_f, den_p, pret_u şi cant. Pentru a crea o interogare cu parametru, care să
permită citirea interactivă a numărului facturii de pe tastatură, pe coloana nr_f,
linia Criteria se tastează [Introduceti numarul facturii].

196
4. Se selectează tabela Facturi, Liniifact şi Produse, câmpurile: nr_f,
data_f, den_p, pret_u şi cant:

5. Se deschide interogarea de la punctul 2, în Design View, se salvează


cu alt nume (Save as). Se apelează meniul contextual asociat unui nou câmp, se
alege opţiunea Build Event:

Se selectează funcţia IIF, modificând-o astfel: Observatii:


IIf([valoare]>50;"Produs eficient";"Produs ineficient").

6. Vom folosi 2 funcţii care pot fi aplicate unor date calendaristice:


Datepart (o parte dintr-o dată calendaristică) şi funcţia Month (extrage luna
dintr-o dată calendaristică).

197
7. a). Se alege tabela Produse, câmpurile: den_p, pret_u, stoc, um şi
cod_m. Pe coloana den_p, linia Criteria se tasteauă condiţia: LIKE "p*".
b) Se deschide interogarea de la punctul a), se salvează cu alt nume,
se trece în modul de vizualizare Design View şi se modifică condiţia: LIKE
"p????".

8. Se alege tabela Produse, coloana pret_u, utilizându-se operatorul


IN.

9. Tabela aleasă va fi Produse, câmpurile: den_p, cant, cod_m. Pe


coloana den_p, linia Criteria se tastează IS NULL.

10. Deschidem interogarea de la punctul 2, unde avem calculată


valoarea. Salvăm interogarea cu un alt nume, trecem în Design View şi ştergem
sau modificăm restul câmpurilor, lăsând doar următoarele: nr_f şi valoare.

198
Se selectează butonul Totals de pe bara de unelte, iar sub valoare, pe
linia Total, se alege funcţia SUM.

11. Pentru a crea o nouă tabelă cu toate înregistrările din tabelele


Facturi, Produse şi Liniifact, se adaugă toate câmpurile din aceste tabele, fără
a duplica respectivele câmpuri, iar din meniul Query se alege opţiunea Make
Table Query, se dă un nume tabelei noi create, apoi se salvează interogarea, şi
apasă butonul Run pentru a executa acţiunea:

Mesajul următor este doar unul de avertizare, şi anume datele salvate în


tabele vor fi adăugate în tabelul nou creat. Deci vom apăsa butonul Yes.

12. Din fereastra Show Table se alege tabela Produse, utilizându-se


funcţia COUNT:

199
13. Pentru a calcula valoarea totală pe fiecare factură în parte, se
grupează datele după numărul facturii (interogări de tip Totals) şi se alege
funcţia SUM:

14. Pentru a calcula media se aplică funcţia AVG:

200
7.4.1. Aplicaţie propusă

Să se încerce toate tipurile de interogări din exemplul anterior pe


problemele propuse 7.2.1 şi 7.2.2.

7.5. Aplicaţia 4

1. Să se creeze un raport pentru tabelul Furnizori, datele fiind


grupate după localitate.
2. Să se creeze un raport pentru afişarea datelor de pe fiecare factură
în parte, calculându-se valoarea facturii şi valoarea totală a tuturor
facturilor.
3. Să se creeze rapoarte pentru fiecare tabel şi interogare create
anterior.

Obiective:

- Crearea rapoartelor cu ajutorul Wizard-ului.


- Crearea rapoartelor cu datele provenind din mai multe tabele.
- Adăugarea unor câmpuri calculate.

Rezolvare:
1. Pentru a crea un raport cu ajutorul asistentului, se alege opţiunea
Create Report by Using Wizard. La primul pas se alege tabela sau interogarea
pe baza căreia se va crea raportul (Tables/Forms). Din caseta Available Fields
se selectează câmpurile dorite, apoi se apasă butonul Next.

201
La pasul 2 se selectează criteriul de grupare, în cazul de faţă vom grupa
furnizorii după localitate. Dacă se apasă butonul Grouping Options se pot
alege mai multe variante de grupare: după prima iniţială, a doua, etc...

La pasul următor se selectează ordinea în care vor fi afişate


înregistrările în raport:

În continuare se selectează orientarea paginii (verticală, orizontală),


precum şi modul de afişare al informaţiilor pe pagină:

202
La pasul următor se alege un stil din lista afişată. Ultimul pas permite
modificarea titlului raportului (nu este vorba de numele cu care va fi salvat
raportul, ci doar textul care va apare în antentul raportului), apoi putem alege
între a vizualiza raportul şi a modifica raportul. Pentru a încheia crearea
raportului se alege opţiunea Finish.

Raportul în modul Design va apare ca în figura următoare:

Dacă datele care dorim să apară provin din mai multe tabele, sau avem
nevoie de unele câmpuri calculate, putem crea o interogare în care să selectăm
tabelele, calculând câmpurile dorite, apoi creăm raportul pe baza interogării.
Dacă se doreşte adăugarea unui câmp care va fi calculat, se alege de pe
bara de unelte Toolbox controlul TextBox. În caseta în care apare Unboand, se
începe cu simbolul =, apoi se tastează funcţia sau formula dorită. Numele
câmpurile vor fi trecute între paranteze drepte. De exemplu, un câmp valoare ar
putea fi calculat astfel =[cant]*[pret_u]*0,19.

203
2. Pentru a crea raportul, vom alege ca sursă a datelor interogarea cu
numele Valoare. Dacă în această interogare avem câmpuri de tip Numeric, la
pasul 3 se selectează butonul Summary Option, bifând check-box-urile de sub
funcţia SUM pentru câmpurile TVA şi Valoare.

Pentru a vizualiza raportul, de pe butonul View se alege opţiunea Print


Preview.

7.5.1. Aplicaţie propusă

Să se creeze rapoarte cu ajutorul Wizard-ului şi cu ajutorul opţiunii


Create Report in Design View pentru problemele propuse 7.2.1 şi 7.2.2.

7.6. Aplicaţia 5

1. Să se creeze următoarea formă de meniu.

204
Obiective:

- Crearea butoanelor de comandă fără ajutorul asistentului.


- Utilizarea ferestrei Properties pentru a customiza butonul.
- Prezentarea mediului de programare VBA.
- Utilizarea comenzii DoCmd cu metodele OpenTable, RunSQL şi Quit.
- Instrucţiuni VBA – citirea de la tastatură a datelor prin InputBox.
- Instrucţiuni SQL – inserarea unei noi înregistrări, modificarea valorii
unui câmp, selecţia datelor.

Rezolvare:

În acest caz se va folosi facilitatea Create form in Design View. De pe


bara de unelte Toolbox se verifică dacă butonul Control Wizard este
selectat. Acesta trebuie să fie deselectat pentru a permite crearea manuală a
controalelor, fără ajutorul asistentului. În continuare se alege butonul de

comandă Command Button , acesta fiind depozitat pe formă.


Apelând meniul contextual asociat butonului de comandă creat pe formă, se
selectează opţiunea Properties şi se modifică proprietăţile Name: cmdDesPr şi
Caption: Produse – Design. Analog se procedează pentru restul butoanelor.
Pentru a introduce instrucţiuni ataşate butoanelor trebuie să apelăm
editorul Visual Basic. Pentru aceasta, se apelează meniul contextual al fiecărui
buton în parte, se alege Build event, Code builder, OK.
Mediul de programare Visual Basic Application arată ca în figura
următoare:

205
În zona de declarare a variabilelor se tastează:

Butonul 1
Private Sub cmdDesPr_Click()
' se deschide tabela Produse pt. vizualizare in Design
DoCmd.OpenTable "Produse", acViewDesign
End Sub

Toate liniile care încep cu caracterul apostrof sunt comentarii, ele vor fi
ignorate de compilatorul Visual Basic.

Butonul 2
Private Sub cmdDescPr2_Click()
' se deschide tabela Produse pt. vizualizare in Datasheet View
DoCmd.OpenTable "Produse"

206
End Sub

Butonul 3
Private Sub cmdInsPr_Click()
'adaugarea unei noi inregistrari
DoCmd.RunSQL "insert into produse values (cod_produs, den_produs,
um_produs, stoc_produs, pret_produs, cod_mag)"
End Sub

Butonul 4
Private Sub cmdModDen_Click()
'modificarea denumirii unui produs la care este cunoscut codul
v_cod = InputBox("Introduceti codul produsului la care doriti sa ii modificati
denumirea:")
DoCmd.RunSQL "update produse set den_p=denumire where cod_p=" &
v_cod
End Sub

Butonul 5
Private Sub cmdCrTNou_Click()
'selectarea produselor cu stoc 0 si crearea unei tabele cu aceste produse
DoCmd.RunSQL "Select cod_p, den_p, um, stoc, pret_u, cod_m into StocNul
from produse where stoc=0"
DoCmd.OpenTable "StocNul"
End Sub

Butonul 6
Private Sub cmdViz_Click()
'vizualizarea produselor cu codul >= o valoare introdusa de la tastatura
v_cod = InputBox("Introduceti un cod pentru a fi afisate produsele cu codul
mai mare decat aceasta valoare")
DoCmd.RunSQL "Select cod_p,den_p,um,stoc, pret_u, cod_m into Temp1
from produse where cod_p>=" & v_cod
DoCmd.OpenTable "Temp1"
End Sub

Butonul 7
Private Sub cmdValoare_Click()
DoCmd.RunSQL "select cod_p, den_p, um, categorie, pret, cant, cant*pret as
valoare into Valoare from produse"
DoCmd.OpenTable "Valoare"
End Sub

207
Butonul 8
Private Sub cmdIesire_Click()
DoCmd.Quit
End Sub

7.6.1 Aplicaţie propusă


Să se creeze un formular cu opţiuni corespunzătoare tabelelor
existente create pentru problemele propuse 7.2.1 şi 7.2.2.

208
GLOSAR DE TERMENI

Dată o informaţie codificată şi stocată pe un suport de


memorare. Din punctul de vedere al prelucrării de
calculator, în cadrul aplicaţiilor, datele se definesc cu
ajutorul unui nume (identificator), a atributelor pe care
le are şi de o valoare.
Organizarea reprezintă procesul de identificare, definire, evaluare,
datelor structurare şi memorare a informaţiilor, în cadrul unui
sistem informaţional. Prin organizarea datelor se
realizează gruparea datelor în colecţii de date omogene,
se stabilesc care sunt relaţiilor dintre date, dintre
elementele colecţiilor şi dintre colecţii, precum şi modul
de stocare a datelor pe suportul fizic de memorare.
Fişierul este o structură care grupează date dintr-un anumit
domeniu care au anumite caracteristici comune. Din
punct de vedere fizic fişierul este o colecţie finită de
înregistrări fizice, iar din punctul de vedere al
semnificaţiei, o colecţie de înregistrări logice, numite şi
articole. Din punctual de vedere al sistemului de operare
fişierul are un nume şi eventual o extensie de fişier.
Redundanţa reprezintă o proprietate a unei colecţii de date care se
datelor referă la faptul că unele componente ale colecţiei de date
sunt memorate de mai multe ori pe suportul de
memorare. Creşterea redundanţei are ca efect apariţia de
erori frecvente datorate neconcordanţei informaţiilor
memorate în fişiere aparţinând unor aplicaţii diferite,
rezultând costuri de actualizare mărite corespunzător.
Baza de date este un ansamblu structurat de date legate structural între
ele, un depozit de date unic definit o singură dată şi
utilizat simultan de mai mulţi utilizatori. Baza de date
este o resursă comună şi partajată. Baza de date conţine
nu numai date ci şi descrierea acestora.
Modelul de este o colecţie integrată de concepte, necesare descrierii
date datelor, a relaţiilor dintre date şi a constrângerilor asupra
datelor dintr-o organizaţie, o reprezentare abstractă a
obiectelor şi a evenimentelor lumii reale şi a asocierilor
dintre acestea, cu ajutorul căruia se reprezintă o
organizaţie.

209
Modelul reprezintă un model de date conceptual de nivel înalt,
Entitate – neformalizat, care descrie structura bazei de date,
Relaţie precum şi tranzacţiile de regăsire, respectiv de
reactualizare asociate. Acest model, permite o
reprezentare a unui sistem real, grupând elementele
sistemului real în entităţi şi asocieri (legături) între
entităţi.
Cheie candidat este atributul sau mulţimea de atribute ale unei entităţi
care identifică în mod unic apariţiile individuale ale unui
tip de entitate. Un tip de entitate poate avea mai multe
chei candidat.
Cheie primară din mulţimea de chei candidat se alege un singură care
va fi numită cheie primară.
Chei alternative se numesc celelalte chei candidat, rămase nealese.
Cheie compusă este o cheie candidat formată din mai multe atribute.
Relaţie este o asociere, o comunicare, o corespondenţă între
(relationship) două sau mai entităţi. Relaţia exprimă raportul existent
între respectivele entităţi şi există doar dacă entităţile
există.
Sistemul de reprezintă un pachet de programe specializat pentru
Gestiune al definirea, crearea, întreţinerea şi accesul controlat la
Bazei de Date baza de date.
(SGBD)
Administratoru gestionează resursele de date, fiind responsabil de
l de date (Data proiectarea conceptuală şi logică a bazei de date, de
Administrator) planificarea bazei de date, de realizarea şi întreţinerea
standardelor, a politicilor şi a procedurilor bazei de date.
Administratoru este persoana sau grupul de persoane responsabil de
l bazei de date proiectarea, implementarea şi realizarea fizică a bazei de
(Database date, de securitatea şi controlul integrităţii, de
Administrator) întreţinerea întregului sistem.
Proiectanţii sunt persoanele implicate în proiectarea logică şi cea
bazei de date fizică a bazei de date. Proiectarea conceptuală şi logică
presupune identificarea entităţilor, a relaţiilor dintre
entităţi, a constrângerilor asupra datelor ce vor fi stocate
în baza de date.

210
Limbajul este un limbaj specific pentru fiecare SGBD fiind
pentru definirea utilizat pentru a specifica schema bazei de date. Este un
datelor (LDD – limbaj descriptiv care permite administratorului bazei de
Data date, respectiv utilizatorului final sa descrie şi să
Description
definească entităţile din baza de date precum şi relaţiile
Language)
existente între entităţi, adică să definească o schemă sau
să o modifice.
Limbajul este un limbaj care asigură un set de procedee ce permit
pentru operaţiile de bază pentru manipularea datelor din baza
manipularea de date. Operaţiile executate în cadrul bazei de date
datelor (LMD – presupun existenţa unui limbaj specializat în care
Data
comenzile se exprimă prin fraze ce descriu acţiuni
Manipulation
Language) asupra bazei de date.
Limbajul este un limbaj specific care include comenzi pentru
pentru asigurarea confidenţialităţii şi integrităţii datelor, pentru
controlul salvarea informaţiei cu scopul menţinerii integrităţii
datelor (LCD – bazei de date şi chiar pentru rezolvarea problemelor de
Data Control
acces concurenţial la date.
Language)
Tabelele conţin datele propriu-zise corespunzătoare entităţilor din
baza de date, organizate sub forma unei matrice în care
coloane reprezintă atribute (câmpuri), iar liniile
apariţiile, realizările entităţii (înregistrări).
Înregistrarea este o linie dintr-un tabel, în care fiecare câmp conţine o
valoare concretă dintr-un domeniu de valori şi conţine
informaţii care identifică o anumită realizare concretă a
entităţii; persoană, loc sau obiect
Câmpul este o informaţie individuală din componenţa unei
înregistrări, iar fiecare coloană din tabelul Access
reprezintă un câmp diferit.
Interogările sunt obiecte virtuale de tip tabelă, adică vizualizări, care
nu au corespondent fizic, fiind definite cu ajutorul
tabelelor definite deja în baza de date.
Formularele sunt obiecte folosite pentru a consulta sau actualiza
datele dintr-un tabel sau o structură de interogare.

211
Rapoartele sunt obiecte folosite pentru a sintetiza datele stocate într-
o tabela reală sau virtuală şi a oferi un rezultat tipărit al
informaţiilor din baza de date – un raport ACCES, de la
cea mai simplă listă a unui tabel până la rapoartele cele
mai complexe ce conţin regrupări de înregistrări şi
calcule.
Paginile de reprezintă obiecte specifice ACCESS care permit
prezentare afişarea într-un format accesibil care permite
transmiterea rapidă a datelor prin Internet sau Intranet.
Macro-urile reprezintă o modalitate optimă de acces la date, care
permit automatizarea mai multor sarcini folosind un
limbaj specific. Pentru a rezolva o sarcină mai complexă
se poate construi un macro (format dintr-o mulţime de
acţiuni) sau o procedură (formată dintr-o succesiune de
instrucţiuni în Visual Basic).
Modulele conţin o parte a codului VBA al aplicaţiei, şi anume
declaraţiile de variabile şi constante, funcţiile şi
procedurile globale ale întregii aplicaţii. VBA
reprezintă un mediu de programare orientat
obiect.
Evenimentul reprezintă acţiunea utilizatorului sau a sistemului asupra
unui obiect ceea ce declanşează execuţia codului
program corespunzător.

Metoda constă în codul program predefinit ce se raportează la un


tip de obiect şi care se execută în momentul apariţiei
unui eveniment.
Procedura este alcătuită dintr-un set de instrucţiuni (un modul
program) ce nu returnează nici o valoare ci execută o
anumită acţiune.
Funcţia constă dintr-un set de instrucţiuni (un modul program)
care în urma execuţiei returnează o valoare de un anumit
tip.
Visual Basic este un limbaj de programare orientat obiect, dezvoltat
Application de Microsoft folosind limbajul Visual BASIC adaptat la
(VBA) Access cerinţele specifice ale sistemelor de gestiune de baze de
date.
IDE (Integrated este mediul în care se poate crea, modifica şi testa codul
Development VBA.
Environment)

212
Limbajul SQL este un limbaj de interogări şi gestionare a bazelor de
(Structured date relaţionale.
Query
Language)
Instrucţiunea
este cea mai folosită instrucţiune, corespunzând
SELECT interogării Selection din Access. Permite extragerea
câmpurilor unui ansamblu de înregistrări ce corespund
unor criterii.
Clauza FROM specifică tabelele sau interogările din care sunt extrase
(SELECT) datele.

Clauza permite filtrarea înregistrărilor după anumite criterii.


WHERE
(SELECT)
Clauza GROUP este folosită pentru executarea funcţiilor de agregare
BY (SELECT) SQL, ca şi Sum (sumă), Count (calcul), Avg (medie).
Clauza specifică înregistrările regrupate ce trebuie afişate într-o
HAVING instrucţiune SELECT dotată cu o clauză GROUP BY.
(SELECT) Odată ce regruparea este efectuată se afişează lista de
câmpuri a clauzei GROUP BY şi sunt selectate doar
înregistrările care respectă condiţia specificată în clauza
HAVING.
Clauza ORDER determină sortarea (aranjarea în ordine crescătoare sau
BY (SELECT) descrescătoare), înregistrările rezultă dintr-o interogare
în funcţie de câmpul/câmpurile specificat(e).
Instrucţiunea corespunde unei interogări de actualizare care modifică
UPDATE valorile câmpurilor într-un tabel specificat, pentru
înregistrările ce corespund criteriului dat (facultativ).
Instrucţiunea corespunde unei interogări DELETE ce şterge
DELETE înregistrările din tabelul menţionat în clauza
FROM, după criteriile date (facultativ).
Instrucţiunea corespunde unei interogări ADD care adaugă
INSERT INTO înregistrări într-un tabel.
OLE (Object este tehnologia care permite manipularea obiectelor unei
Linking and alte aplicaţii, direct din Access sau din VBA Access.
Embedding) sau
OLE
Automation

213
Bibliotecă de un fişier prevăzut de obicei cu o extensie .olb, furnizând
obiecte informaţii ce permit maipularea obiectelor puse la
dispoziţia utilizatorului de un server. Se poate folosi
Exploratorul de obiecte pentru a examina conţinutul
unei biblioteci de obiecte.
DDE (Dynamic este un protocol de schimb dinamic de date între două
Data Exchange) aplicaţii Windows, una denumită Clineţi sau Destinaţie,
cealaltă denumită Server sau Sursă. Legătura este
întreruptă dacă una dintre cele două aplicaţii este
închisă.

214
BIBLIOGRAFIE

1.T.Connolly, C.Beg, A.Strachan, „Baze de date – proiectare,


implementare, gesionare”, Ed. Teora, Bucureşti, 2001;
2.S.Biriescu, „Baze de date în mediul Acces”, Ed. Mirton, Timişoara,
2006;
3.D.Dănăiaţă, C.Margea, D.Mogoşanu, A.Popovici, „Baze de date în
mediul Acces”, Editura Mirton, Timişoara, 2001;
4.I.Despi, G.Petrov, R.Reisz, A.Stepan, „Teoria generală a bazelor de
date”, Ed. Mirton, Timişoara, 2000;
5.C.Fehily, „SQL –visual quickstart guide”, Ed. All, Bucureşti, 2004;
6.V. Florescu, P.Năstase, F.Berbec, „Baze de date – fundamente teoretice
şi practice”, Ed. Infomega, Bucureşti, 2002;
7.C.Giulvezan, G.Mircea, „Baze de date. Teorie şi practică. Acces şi
VBA”, Ed.Universităţii de Vest, Timişoara, 2006;
8.M.J.Hernandez, „Proiectarea bazelor de date”, Ed. Tora, Bucureşti,
2003;
9.L.Hurbean, „Baze de date. Concepte teoretice şi abordare practică în
Microsoft Access”, Ed. Mirton, Timişoara, 2006;
10. F. Ionescu, „Baze de date relaţionale şi aplicaţii”, Ed. Tehnică,
Bucureşti, 2004;
11. M.Lupulescu, M.Muntean, C.Giulvezan, „FoxPro de la iniţiere
la performanţă”, Ed. de Vest, Timişoara, 1994;
12. M.Miloşescu, „Baze de date în Visual FoxPro”, Ed. Teora,
Bucureşti, 2003;
13. G.Mircea, „Access 2002. Tehnici de programare în VBA”, Ed.
Mirton, Timişoara, 2003
14. M.Muntean, „Note de curs – Baze de date”, 2007-2008;

215
15. M.Muntean, „Baze de date în sisteme informatice economice”,
Ed. Mirton, Timişoara, 2002;
16. P.Năstase ş.a. „Baze de date – Microsoft Access 2000”, Ed.
Teora, Bucureşti, 1999;
17. J.V.Petersen, „Baze de date pentru începători”, Ed. All,
Bucureşti, 2002;
18. I.Popescu, „Modelarea bazelor de date”, ed. Tehnică, Bucureşti,
2001;
19. R.Smith, D.Sussman, „Programare în ACCESS 97 VBA, pentru
începători”, Ed. Tora, Bucureşti, 1999;
20. M.Velicanu, I.Lungu, M.Muntean, „Dezvoltarea aplicaţiilor cu
Visual FoxPro”, Ed. All, Bucureşti, 2001;
21. ***, „Microsoft Visual Basic 6.0 – ghidul programatorului”, Ed.
Teora, Bucureşti, 1999.

216