Sunteți pe pagina 1din 149

Ioan Doroș

Baze de date

Editura Cibernetica MC București 2010


Descrierea CIP a Bibliotecii Naţionale a României
DOROS, IOAN
Baze de date / Ioan Doros. - Bucureşti : Cibernetica, 2010
ISBN 978-973-88451-6-9

004

Editură acreditată CNCSIS cu codul 73

Tehnoredactare și corectură: Arabela Andor


Coperta: Adelina Muntean

2
CAPITOLUL I. DELIMITĂRI CONCEPTUALE ALE BAZELOR DE DATE .................... 6
1.1. Termeni specifici în lucrul cu bazele de date ........................................................... 6
1.2. Sisteme de gestiune a bazelor de date ...................................................................... 9
1.2.1. Noţiuni generale privind sistemele de gestiune a bazelor de date ....................... 9
1.2.2. Funcţiuni ale sistemelor de gestiune a bazelor de date ...................................... 10
1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru o bază de date
relaţională ................................................................................................................ 11
1.2.4. Sistemul de gestiune a bazelor de date ACCESS .............................................. 13
1.3. Scopul unei baze de date ........................................................................................ 14
1.4. Componentele aplicaţiei ACCESS .......................................................................... 15
1.5. Proiectarea bazelor de date..................................................................................... 16
1.5.1. Principii ale proiectării bazelor de date ............................................................ 16
1.5.2. Normalizarea unei baze de date relaţionale ...................................................... 18
1.5.3. Integritatea bazelor de date .............................................................................. 22
1.6. Operarea în mediul ACCESS .................................................................................. 24
1.6.1. Deschiderea aplicaţiei. Crearea unei noi baze de date ....................................... 24
1.6.2. Moduri de vizualizare ..................................................................................... 26
1.6.3. Deschiderea, modificarea, salvarea şi închiderea unei baze de date existente ... 27
1.6.4. Folosirea funcţiei ajutor .................................................................................. 29
1.6.5. Închiderea aplicaţiei ........................................................................................ 31
CAPITOLUL II. CREAREA ȘI UTILIZAREA TABELELOR ............................................ 32
2.1. Crearea unei tabele ................................................................................................ 32
2.1.1. Proprietăţile câmpurilor................................................................................... 33
2.1.2. Definirea unei chei primare ............................................................................. 37
2.1.3. Stabilirea unui index ....................................................................................... 37
2.1.4. Modificarea proprietăţilor unui câmp ............................................................... 38
2.2. Editarea datelor într-o tabelă .................................................................................. 39
2.2.1. Introducerea de date în tabelă .......................................................................... 39
2.2.2. Vizualizarea informaţiilor dintr-o tabelă .......................................................... 40
2.2.3. Modificarea datelor într-o tabelă ..................................................................... 40
2.2.4. Adăugarea de înregistrări într-o tabelă ............................................................. 41
2.2.5. Ştergerea de date într-o tabelă ......................................................................... 41
2.3. Crearea relaţiilor între tabele ................................................................................. 43
CAPITOLUL III. UTILIZAREA INFORMAŢIILOR DINTR-O BAZĂ DE DATE .............. 45
3.1. Conectarea la o bază de date existentă .................................................................... 45
3.2. Căutarea datelor cu ajutorul instrumentelor mediului Access .................................. 45
3.3. Crearea unei interogări simple ............................................................................... 46
3.4. Crearea interogărilor peste mai multe tabele ........................................................... 51
3.5. Selecţia şi sortarea datelor ..................................................................................... 56
3.6. Salvarea unei interogări ......................................................................................... 57
3.7. Adăugarea şi eliminarea filtrelor ............................................................................ 57

3
3.8. Limbaj Structurat de Interogare SQL (Structured Query Language) ......................... 59
3.8.1. Limbajul SQL ................................................................................................. 59
3.8.2. Comenzi destinate tabelelor ............................................................................. 62
3.8.3. Instrucţiunile de selecţie a datelor ................................................................... 63
3.8.4. Instrucţiunile pentru manipularea datelor ......................................................... 74
CAPITOLUL IV. CREAREA ŞI UTILIZAREA FORMULARELOR .................................. 77
4.1. Noţiuni generale ................................................................................................... 77
4.2. Controale ............................................................................................................... 80
4.3. Proiectarea unui formular legat de o sursă de înregistrări ........................................ 82
4.3.1. Proprietăţile esenţiale ......................................................................................... 82
4.3.2. Obiectele simple ............................................................................................. 84
4.3.3. Culorile obiectelor .......................................................................................... 85
4.3.4. Aranjarea obiectelor ........................................................................................ 86
4.3.5. Alte facilităţi .................................................................................................. 87
CAPITOLUL V. CREAREA ŞI UTILIZAREA RAPOARTELOR ...................................... 91
5.1. Crearea unui raport ................................................................................................ 91
5.2. Particularizarea antetului şi subsolului .................................................................. 94
5.3. Gruparea datelor într-un raport. Realizarea de totaluri şi subtotaluri ....................... 97
CAPITOLUL VI. LIMBAJUL VISUAL BASIC .............................................................. 103
6.1 Editarea modulelor Visual Basic for Application ................................................... 103
6.2 Elemente de sintaxă .............................................................................................. 105
6.3 Casete de dialog predefinite .................................................................................. 106
6.4 Variabilele în VBA ............................................................................................... 109
6.4.1. Declararea variabilelor .................................................................................. 109
6.4.2. Tipurile variabilelor în VBA ......................................................................... 111
6.4.3. Iniţializarea variabilelor ................................................................................ 113
6.5. Tablouri .............................................................................................................. 113
6.6 Funcţii şi proceduri definite de utilizator ............................................................... 114
6.7 Structura alternativă ............................................................................................. 119
6.8 Structura repetitivă ............................................................................................... 120
6.8.1. Structura repetitivă cu numărător ................................................................... 120
6.8.2. Structurile repetitive de tip Do … Loop ......................................................... 122
6.8.3. Structura repetitivă „pentru fiecare‖ .............................................................. 124
6.9 Programarea recursivă .......................................................................................... 125
6.10 Obiecte ACCESS 2000 ........................................................................................ 126
6.11 Programarea dirijată de evenimente în ACCESS 2000 .......................................... 128
6.12 Accesul cu programele la obiectele bazei de date ................................................. 131
CAPITOLUL VII. ÎNDRUMAR PENTRU REALIZAREA PROIECT ULUI LA DISCIPLINA
„BAZE DE DATE‖ ........................................................................................................ 140
7.1. Cerinţe minimale ................................................................................................. 140
7.2. Baza de date ........................................................................................................ 141
7.3. Documentaţia ...................................................................................................... 144

4
BIBLIOGRAFIE ............................................................................................................ 149

5
CAPITOLUL I. DELIMITĂRI CONCEPTUALE ALE
BAZELOR DE DATE

1.1. Termeni specifici în lucrul cu bazele de date

Gestiunea colecţii1or de date este una din cele mai importante probleme care
se rezolvă astăzi cu ajutorul calculatoarelor existente, de la cele mai simple PC-uri
(Personal Computers), până la calculatoarele foarte puternice. Aceste colecţii de date
pot fi memorate în diferite fişiere, care sunt apoi gestionate cu ajutorul limbajelor de
programare, sau în baze de date, care sunt gestionate de Sistemele de Gestiune a
Bazelor de date (SGBD).

Lucrul cu voume tot mai mari de date i-a făcut pe oameni să sporească din ce
în ce mai mult numărul calculatoarelor şi să le îmbunătăţească caracteristicile p e zi
ce trece, pentru a-şi uşura astfel munca.

O bază de date poate fi definită ca fiind o colecţie de tabele în care sunt


stocate clase de entităţi diferite.
Elementele generice ale unei baze de date sunt:
► Coloanele, care se numesc câmpuri (în
Nume
engleză FIELDS);
tabelă ► Rândurile, care se numite înregistrări,
articole sau tupluri (în engleză

Înregistări Câmpuri

RECORDS).

6
Un tabel este de fapt o colecţie a tuturor entităţilor de date dintr -un singur tip
de date (tip de entităţi sau clasă de date).
Înregistrările dintr-un tabel formează cardinalul, în vreme ce câmpurile
definesc structura tabelului, numărul de câmpuri, tipul lor şi dimensiunea lor.

Câmpurile unui tabel pot fi de tipul:


1. Logic, putând să suporte valorile Y, N, T, F;
2. Numeric, putând fi definite cu ajutorul numerelor întregi sau cu ajutorul
zecimalelor;
3. Dată calendaristică, câmpurile putând fi definite cu ajutorul unei date
valabile;
4. Şir de caractere, putând fi de diferite lungimi;
5. Memo, câmpurile putând conţine articole de lungimi variabile.

O bază de date are o structură care poate fi reprezentată sub forma unei
colecţii de descrieri statice ale diferitelor tipurilor de entităţi, dar si a relaţiilor logice
dintre acestea. Aceste relaţii logice reprezintă de fapt, asociaţiile dintre mai multe
entităţi.
Astfel, o entitate poate fi definită ca o reprezentarea unică a unui obiect real.
Aceasta corespunde unei înregistrări şi este reprezentată prin luarea de valori pentru
diferite atribute ale sale.
Pentru a diferenţia două entităţi este necesar ca măcar un atribut să aibă valori
diferite.
Atributul este o proprietate importantă a unui obiect din lumea reală, fiind
necesar pentru a distinge entităţile între ele. Atributul mai poate fi definit ca fiind o
celulă sau o căsuţă dintr-un tabel.
La fel ca şi câmpurile, atributele pot fi de tip logic, numeric, dată
calendaristică, şir de caractere sau memo.
Domeniul de valori al atributului poate fi precizat la creearea bazei de date,
când se vor specifica şi intervalele de valori pentru fiecare câmp.
Pentru identificarea univocă a unei entităţi este necesară crearea unui atribut
sau a unei combinaţii de atribute care poartă denumirea de identificator sau cheie. În
ACCESS identificatorii sunt câmpuri cheie principale, aceştia fiind folosiţi pentru
crearea indexului principal al entităţii.

O bază de date este un ansamblu structurat de date evolutive, organizate


pentru a fi prelucrate de programe informatice.
Bazele de date sunt fişiere stocate pe suporturi magnetice, împreună cu
aplicaţiile care le exploatează (utilizează).
Cele mai multe baze de date sunt relaţionale (în proporţie de 80%-90%).

7
Bazele de date relaţionale sunt de fapt nişte tabele cu relaţii între ele. Aceste
baze de date relaţionale au redundanţă minimă şi controlată. Primul care a introdus
noţiunea de bază de date relaţională a fost E. F. Codd 1, în anul 1970.
Un exemplu de bază de date relaţională ar putea fi prezentat cu ajutorul celor
două tabele, a căror structură este redată mai jos:

Marcă Nume Adresă Salar nominal

Marcă Nume Funcţii Salar nominal Deduceri Impozit

Faptul că următoarele coloane: marcă, nume şi salar nominal , apar de două ori,
înseamnă că aceste coloane sunt redundante.

Pentru a putea stabili relaţii între tabele, câmpul care conţine marca trebuie să
fie inclus în ambele tabele. Nu este nevoie să fie denumit identic în ambele tabele, în
schimb trebuie să aibă acelaşi conţinut. Relaţiile între tabele pot fi stabilite şi pe
combinaţii de câmpuri (unele SGBD-uri permiţând şi descrierea de astfel de
combinaţii prin expresii aritmetice).
Astfel, se pot stabili mai multe tipuri de relaţii între tabele, după cum
urmează:
► Relaţii de unu-la-unu;
► Relaţii de unu-la-mai mulţi;
► Relaţii de mulţi-la-unu;
► Relaţii de mulţi-la-mulţi.

Două tabele aflate în relaţie de unu-la-unu, sunt interclasabile şi pot fi privite


ca unul singur, articolele rezultate cuprind reuniunea câmpurilor celor două tabele.
Relaţiile de unu-la-mulţi şi mulţi-la-unu, se referă la acelaşi lucru, dar privit din părţi
diferite. În Access se utilizează relaţiile de unu-la-mai-mulţi. Relaţiile de tipul mulţi-
la-mulţi, nu pot fi incluse în bazele de date relaţionale.
Exemplificăm, în figura de mai jos, 4 tabele cu relaţii de unu-la- mai mulţi
(scris 1-∞), definite în ACCESS:

1
Edgar Frank Codd (23 august 1923, Insula Portland, Anglia – 18 aprilie 2003, Williams Island,
Florida, SUA) a fost un informatician american de origine engleză care, lucrând pentru IBM, a
inventat modelul relaţional pentru gestiunea bazelor de date, model care constituie baza teoretică a
bazelor de date relaţionale. (conform wikipedia.com)
8
1.2. Sisteme de gestiune a bazelor de date
1.2.1. Noţiuni generale privind sistemele de gestiune a bazelor de
date
Aplicaţiile care exploatează aceste date sunt cunoscute sub denumirea de
sisteme de gestiune a bazelor de date sau S.G.B.D.. Câteva astfel de sisteme de
gestiune a bazelor de date ar fi:
► ORACLE. Compania americană cu acest nume, a oferit, încă de la
începutul anilor ’80, cele mai robuste, rapide şi eficiente variante de
sisteme de gestiune a bazelor de date, pentru calculato are de toate
tipurile (mari, mini, micro), de tip client-server, pentru reţelele locale
sau pe Internet. Preţul ridicat, datorat standardelor de calitate ale
produselor şi serviciilor, fac ca în ţara noastră, recurgerea la soluţiile
Oracle să se facă doar pentru proiectele de sisteme informatice mari;
► FoxPro. Cu această denumire Compania Microsoft a promovat un
model de organizare a datelor, numit dBASE, existent din anul 1990.
Acest program este foarte popular în ţara noastră, deoarece crearea şi
evoluţia lui este sincronă fenomenului exploziv din anii 1990, prin care
firmele şi-au dezvoltat proiecte proprii de informatizare.
► SQL Server. Cu acest nume, compania Microsoft promovează sistemele
de gestiunea a bazelor de date, de tip client-server, pentru problemele
care depăşesc capacităţile ACCESS sau FoxPro;

9
► MySQL. Este un sistem de gestiune a bazelor de date foarte răspândit
datorită faptului că este gratuit (de tip Open Source);
► Aplicaţia Microsoft ACCESS, care este un sistem de gestiune a bazelor
de date relativ nou, aceasă aplicaţie făcând parte din suita de programe
de birou Microsoft Office.

Toate fişierele sunt în ultimă instanţă un lung şir de biţi, ceea ce face până la
urmă diferenţa între ele, redarea sunetelor din fişierele tip .wav sau a imaginilor din
fişierele .bmp sau .jpg, sunt programele dedicate acestor meniri.
Astfel, şi un sistem de gestiune a bazelor de date are menirea de a conferi unor
fişiere forma de tabele pentru ca informaţiile conţinute să fie accesibile utilizatori lor,
care să poată efectua cele patru operaţii (adăugare, regăsire, şt ergere, modificare).
Prin similitudine se poate spune că rolul unui sistem de gestiune a bazelor de date
pentru o bază de date este asemănător rolului unui Sistem de Operare pentru un
calculator.
Principalul scop al unui sistem de gestiune a bazelor de dat e este acela de a
pune la dispoziţia utilizatorilor mijloacele necesare pentru crearea bazelor de date,
dar şi pentru crearea unor programe care să folosească aceste date.

1.2.2. Funcţiuni ale sistemelor de gestiune a bazelor de date

Un sistem de gestiune a bazelor de date are următoarele funcţiuni:

1. Definirea bazei de date, în principal a structurii tabelelor, vederilor,


interogărilor, a relaţiilor sau a altor obiecte specifice SGBD-urilor. Partea din limbaj
specializată pentru aceste sarcini se constituie într-un Limbaj de Definire a Datelor
(abreviat în mod uzual: LDD), alcătuit din diferite comenzi (dacă un astfel de limbaj
nu există), şi/sau dintr-o interfaţă cu utilizatorul (variantă mult utilizată).
2. Manipularea informaţiilor din baza de date, este principalul scop al unui
SGBD perceput de utilizatorii obişnuiţi. Aceştia îşi doresc să poată introduce, regăsi
şi actualiza (modifica sau şterge), date prin aplicaţiile lor. Programatorii au la
dispoziţie, pentru a realiza acest lucru, un Limbaj de Manipulare a Datelor (abreviat
în mod uzual: LMD), şi/sau autorul unor comenzi (dacă nu există un astfel de
limbaj).
Este recomandabil ca în aplicaţii, părţile care implementează aceste prime
două funcţiuni să fie pe cât posibil distinct conturate, iar modificările aduse uneia să
nu afecteze bunul mers al celeilalte. Datele trebuie să aibă o stabilitate mai mare
decât programele. În plus, datele trebuie construite astfel încât să poată fi accesibile
mai multor programe, care sunt scrise în limbaje diferite şi care rulează pe mai multe
calculatoare. Aceste programe, scrise cu ajutorul LMD-ului, folosesc structurile de

10
date luate din tabelele (dicţionarele), unde se află descrise structurile virtuale ale
bazei de date, precum şi structura logică la care va avea acces.
3. Administrarea bazei de date. O sarcină importantă a gestiunii bazei de date
se referă la supravegherea datelor din baza de date şi supervizarea programelor de
acces la aceste date. Persoana (sau grupul de persoane) care are aceste sarcini, este
numită administratorul bazei de date, iar atribuţiile îndeplinite se constituie în funcţia
de administrare a bazei de date. Un SGBD trebuie să includă mijloace le prin care un
administrator de baze de date să îşi poată îndeplini sarcinile (funcţiile) de bază, cum
ar fi:
a). Organizarea bazei de date prin stabilirea structurii şi încărcarea ei cu date
iniţiale;
b). Urmărirea funcţionării bazei de date prin:
► Păstrarea în baza de date a datelor corecte şi la zi;
► Asigurarea integrităţii şi confidenţialităţii datelor;
► Urmărirea performanţelor bazei de date, cu ajutorul unor programe
utilitare;
► Punerea la dispoziţia utilizatorilor a unor programe sau proceduri;
► Informarea continuă cu privire la observaţiile utilizatorilor bazei de
date.
c). Reorganizarea bazei de date prin actualizări ale structurilor sau ale
programelor de acces.
4. Protecţia informaţiilor din baza de date este o problemă la ordinea zilei
datorită generalizării bazelor de date cu acces partajat al mai multor utilizatori. Un
SGBD asigură protecţia datelor prin asigurarea:
► Confidenţia1ităţii, realizând protecţia împotriva accesului neautorizat
la date;
► Integrităţii, realizând protecţia împotriva alterării conţinutului bazei de
date, datorită unor erori de programare, defecte de echipament,
distrugeri rău intenţionate, etc.

1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru


o bază de date relaţională

De-a lungul timpului au fost concepute mai multe tipuri de sisteme de gestiune
a bazelor de date care s-au pretat diferitelor momente de evoluţie fizică a tehnicii de
calcul. În momentul de faţă sunt folosite tot mai des sistemele de gestiune a bazelor
de date relaţionale şi, mai nou, încearcă să se impună pe piaţă şi sistemele de
gestiune a bazelor de date distribuite. Acelaşi E. F. Codd a detaliat, în anul 1985,
caracteristicile care trebuie să fie îndeplinite de un sistem de gestiune a bazelor de

11
date pentru ca acesta să fie considerat relaţional, sub forma a 13 reguli. Aceste reguli
pot fi sintetizate astfel:

Regula 0. Principiul de bază, conform căruia orice sistem de gestiune a


bazelor de date relaţional trebuie să gestioneze toată baza de date numai prin
posibilităţile modelului relaţional.
Regula 1. Stocarea informaţiei, potrivit căreia toate datele trebuie să fie
cuprinse în tabele de date, şi deci datele trebuie să fie memorate şi prelucrate în
acelaşi mod. În ACCESS de exemplu, acest lucru este posibil cu ajutorul aplicaţiei
Microsoft Jet.
Regula 2. Garantarea accesului la date, potrivit căreia fiecare element de
dată trebuie să fie accesibil logic, printr-o combinaţie de genul: cheie primară, nume
tabel şi nume câmp. În ACCESS spre exemplu, se pot defini chei primare.
Regula 3. Lipsa informaţiei, adică în tabele trebuie să poată exista valori nule
(vide), astfel de valori trebuie să specifice faptul că într-o celulă o valoare nu a fost
completată şi acest lucru nu trebuie să fie confundat cu valori 0 pentru tipul numeric
sau spaţiu pentru tipul text. În aplicaţia ACCESS există astfel de valori care poartă
denumirea de Null.
Regula 4. Catalogul de sistem, acest lucru însemnând că descrierea bazei de
date trebuie să se facă tot în tabele. În ACCESS acest lucru e posibil cu ajutorul
motorului Microsoft Jet.
Regula 5. Limbajul cuprinzător, un sistem de gestiune a bazelor de date
trebuie să conţină un limbaj cuprinzător pentru definirea datelor, descrierea tabelelor,
realizarea unor adăugări, actualizări sau ştergeri de câmpuri. ACCESS-ul de
exemplu, suportă limbajul SQL.
Regula 6. Actualizarea vederilor, însemnând că toate vederile trebuie să fie
actualizate de sisteme. În acest sens ACCESS-ul a fost primul sistem de gestiune a
bazelor de date pentru PC-uri, care a permis realizarea interogărilor pentru
actualizare.
Regula 7. Actualizări la nivel de mulţime. În tabele este necesar ca
modificările şi actualizările să se facă la nivel de mulţime de articole. În cadrul
aplicaţiei ACCESS acest lucru este posibil.
Regula 8. Independenţa fizică a datelor, altfel spus datele trebuie să fie fizic
independente faţă de programul aplicaţiei. O aplicaţie nu trebuie să se modifice dacă ,
spre exemplu, se adaugă sau se şterge un index. În ACCESS acest lucru se realizează
cu ajutorul aplicaţiei Microsoft Jet, care are motor logic de stocare.
Regula 9. Independenţa logică a datelor. Conform acestei reguli, schimbările
efectuate asupra relaţiilor dintr-o bază de date nu trebuie să afecteze programul de
aplicaţie.

12
Regula 10. Independenţa integrităţii datelor, sau altfel spus restricţiile de
integritate trebuie să poată fi definite într-un limbaj şi să poată fi stocate într-un
catalog. În ACCESS se pot crea reguli de integritate cu ajutorul limbajului SQL.
Regula 11. Independenţa distribuţiei. Potrivit acestei reguli, capacităţile
sistemelor de gestiune a bazelor de date nu au voie să fie limitate datorită distribuţiei
unor componente ale acestora în baze de date separate.
Regula 12. Inexistenţa subminărilor, însemnând că dacă un sistem de gestiune
a bazelor de date relaţional are un limbaj de manipulare al unei singure înregist rări,
acest limbaj nu va putea fi folosit la ocolirea regulilor de integritate sau a
constrângerilor modelului relaţional. În ACCESS acest lucru înseamnă că nu se pot
încălca regulile de integritate.

Folosindu-se de lucrările lui E. F. Codd referitoare la modelul relaţional şi la


limbajele bazate pe algebra relaţională sau calculul relaţional, din ce în ce mai mulţi
oameni de ştiinţă au încercat să redefininească şi să îmbunătăţească aceste concepte.
S-a ajuns astfel la dezvoltarea şi perfecţionarea unor limbaje relaţionale precum SQL
(Structured Query Language), QBE (Query-By-Example) sau QUEL(Query
Language).
Limbajul SQL se bazează pe calculul relaţional, având în vedere utilizarea de
variabile constituite din tupluri. Pentru a ajuta la extinderea acestui limbaj în întreaga
comunitate a producătorilor de baze de date, Institutul Naţional American pentru
Standarde (ANSI) a elaborat şi lansat standardele SQL, în 1986, potrivit cărora acest
limbaj foloseşte acelaşi set de comenzi şi structuri de bază standa rdizate, indiferent
de varianta de limbaj folosită.

1.2.4. Sistemul de gestiune a bazelor de date ACCESS

Unul dintre cele mai actuale sisteme de gestiune a bazelor de date este
aplicaţia Microsoft ACCESS, prima variantă a acestei aplicaţii fiind lansată pe piaţă
de compania Microsoft în anul 1992, în cadrul suitei de programe de birou Microsof
Office. Din cadrul programelor Microsoft Office mai fac parte şi aplicaţiile :
Microsoft Word, Microsoft Excel sau Microsoft PowerPoint.
Principalele caracteristici ale sistemului de gestiune a bazelor de date
ACCESS sunt:
► Este componenta dedicată bazelor de date relaţionale din Microsoft Office;
► Este deschis comunicării cu alte sisteme de gestiune a bazelor de date cum
ar fi FoxPro, Paradox sau SQL Server (şi MSDE), un alt SGDBR creat de
Microsoft, obiectele ACCESS putând fi folosite în aceste SGBD-uri dar şi
în alte aplicaţii windows, sau invers, obiecte din aceste SGBD -uri pot fi
folosite în ACCESS;

13
► Beneficiază de tehnologii avansate, deoarece este creat de firma Microsoft.
Aceste tehnologii sunt:
 Tehnologia ActiveX, care permite realizarea aplicaţiilor
client/server;
 Permite accesul la baze de date din reţeaua Internet, fiind un
instrument util pentru publicarea informaţiilor în paginile Web;
 Este autodocumentat prin ajutor (help), scris în HTML compilat,
ajutorul fiind apelabil contextual sau la cerere;
 Permite crearea foarte simplă a obiectelor bazei de date cu
instrumentele expert (wizard);
 Bazele de date pot fi personalizate.
► Permite protecţia accesului la obiecte prin administrarea de drepturi de
acces pentru utilizatorii ordonaţi în grupuri;
► Permite crearea de grupuri de obiecte definite de utilizator în cadrul bazei
de date;
► Limbajul propriu al SGBD-ului relaţional ACCESS este Visual Basic;
► E foarte răspândit, utilizarea lui este intuitivă şi este relativ uşor de învăţat .
Pune la dispoziţia utilizatorilor un mediu prietenos pentru crearea,
proiectarea, testarea şi administrare obiectelor bazelor de date proprii.
Aceste caracteristici, ne-au determinat să alegem pentru exemplificarea
noţiunilor despre baze de date aplicaţiile realizate cu ajutorul mediului ACCESS, în
capitolele următoare.
Pe de altă parte este adevărat că SGBD Access nu poate concura cu Oracle,
Informix, Microsoft SQL Server ca viteză sau concurenţă partajată de lucru. Din
acest motiv pentru proiectele mari trebuiesc alese aceste sisteme de gestiune a
bazelor de date, dar pentru proiectele mai mici avantajele de mai sus constituie
argumente serioase pentru alegerea aplicaţiei ACCESS.

1.3. Scopul unei baze de date


În mod intuitiv, atunci când avem de lucru cu colecţii mari de date avem
tendinţa de a realiza tabele care să ne ajute să gestionăm aceste date. Atunci când
aceste colecţii sunt prea mari pentru a le gestiona manual avem nevoie de calculator,
cu ajutorul căruia să construim aplicaţii care să gestioneze aceste baze de date.
Aceste aplicaţii trebuie să gestioneze bazele de date într -un mod mai eficient decât în
cazul în care am gestiona aceste date manual. Printre cele mai importante avantaje în
lucrul cu o bază de date electronică se numără:
► Viteza mărită şi posibilitatea de a stoca un volum mare de date;
► Introducerea şi editarea comodă a datelor, precum şi stocarea şi căutarea
uşoară a acestora;
14
► Posibilitatea de pregătire a unor rapoarte precise, în forma dorită şi
utilizând datele de la un moment dat;
► Asigurarea partajării datelor cu ajutorul altor aplicaţii sau a altor
calculatoare;
► Asigurarea securităţii datelor împotriva accidentelor.
În cazul utilizării aplicaţiei
ACCESS, principalele avantaje ar fi:
► Asigurarea unor posibilităţi
avansate de manipulare, stocare şi
selecţie a datelor;
► Stabilitatea aplicaţiei în contextul
sistemului de operare;
► Aplicaţia este uşor de învăţat;
► Aplicaţia este foarte directă în
ceea ce priveşte posibilităţile de
modificare a câmpurilor şi a
tabelelor;
► Aplicaţia este foarte răspândită în
întreaga lume.

1.4. Componentele aplicaţiei ACCESS


Aplicaţiile în ACCESS se constituie în jurul unei baze de date dată. Acestea
îşi stochează toate elementele de care are nevoie în containerul bazei de date. Astfel,
o bază de date ACCESS poate fi definită ca fiind o colecţie de obiecte: tabele
(tables), cereri de interogare (queries), formulare (forms), rapoarte (reports), pagini
Web (pages), comenzi macro (macros) şi module (modules).

Tabelele sunt obiecte definite de utilizator, în care sunt stocate datele primare.

Formularele sunt obiecte care permit introducerea datelor, editarea sau


afişarea acestora, sau controlul întregii aplicaţii. Un formular poate conţine:

15
Rapoartele sunt obiecte ale bazelor de date prin care sunt vizualizate sau
tipărite informaţii cu conţinut şi structură accesibilă şi conforme cerinţelor
utilizatorilor.
Interogările sunt obiecte care permit vizualizarea informaţiilor obţinute p rin
prelucrarea datelor din una sau mai multe tabele, şi/sau a altor cereri de interogare.
Paginile Web de accesare a datelor reprezintă obiecte care includ fişiere
HTML şi alte fişiere suport, în vederea furnizării accesului la date prin intermediul
browser-elor de Internet.
Comenzile Macro reprezintă obiecte care conţin o definiţie structurată a uneia
sau mai multor acţiuni pe care ACCESS-ul le realizează ca răspuns la un anumit
eveniment.
Modulele reprezintă obiecte care conţin proceduri definite de utilizator şi sunt
scrise în limbajul de programare Visual Basic for Applications (V.B.A.).

În cadrul aplicaţiei ACCESS utilizatorul poate apela la Vrăjitori (Wizards)


pentru a creea orice obiect (tabele, formulare, macro -uri etc). Aceste obiecte pot fi
însă create şi de către utilizator.

1.5. Proiectarea bazelor de date


1.5.1. Principii ale proiectării bazelor de date

Metoda clasică, şi de altfel singura metodă de proiectare pentru persoanele


care nu au experienţă în ceea ce priveşte utilizarea programelor informatice, este
recurgerea la hârtie şi creion.
Proiectarea unei baze de date presupune răspunderea la o serie de întrebări,
cum ar fi:

16
► De ce se doreşte realizarea bazei de date? (pentru a putea răspunde la
această întrebare se va porni mereu de la rapoartele care ar trebui listate);
► Ce resurse avem la dispoziţie? (cele mai importante resurse fiind în acest
caz calculatoarele, oamenii, informaţiile etc);
► Ce anume va fi de făcut?
Abia apoi se va trece la proiectarea tabelelor, ceea ce presupune def inirea
câmpurilor, a conţinutului lor şi a dimensiunilor acestora, dar şi determinarea
relaţiilor dintre acestea.
În demersul realizării unei baze de date, există trei niveluri de percepţie a
acesteia:
► nivelul extern, este nivelul în care sunt percepute bazele de date de
utilizatori. Ei îşi exprimă cerinţele informaţionale prin aşa -numitele
scheme externe. Pot exista o mulţime de sub-scheme, fiecare sub-schemă
corespunzând viziunilor unui utilizator al bazei de date;
► nivelul conceptual, este nivelul aferent administratorului bazei de date, în
viziunea căruia baza de date este o abstractizare a unei p ărţi din lumea
reală. Această viziune se concretizează într-o schemă conceptuală;
► nivelul intern, corespunzător programatorului, care realizează modul de
reprezentare a datelor pe suportul fizic.
Determinarea structurii unei baze de date se poate aborda ascendent,
realizându-se descrierea schemelor externe, urmată de elaborarea schemei
conceptuale, sau descendent, definind mai întâi schema conceptuală şi deduc ând
ulterior schemele externe posibil de obţinut. În acest scop îşi vor da concursul un
grup mai larg de persoane a căror activitate va fi influenţată de modificarea acestei
zone a sistemului informatic al instituţiei.
În momentul proiectării unei baze de date se vor urmării în primul rând
entităţile, atributele şi relaţiile, indecşii, machetele de introducere sau d e ieşire,
procedurile de calcul, precum şi schemele logice sau interogările, şi abia apoi se va
trece la încercarea de închegare a tabelelor, la normalizarea lor şi stabilirea relaţiilor
dintre ele.
Datele vor fi memorate în tabele şi fiecare tabel va conţine date doar despre un
singur subiect (ex: elevi, discipline, etc). Redundanţa, adică apariţia unei informaţii
de două ori în baza de date, trebuie să fie minimă şi controlată.
Proiectarea formularelor, a rapoartelor, a macrocomenzilor şi a modulelor ,
este influenţată în primul rând de calitatea structurii datelor. Însă trebuie să se ţină
cont de faptul că, de cele mai multe ori, aceste forme de reprezentare externă a
datelor se bazează pe interogări, nu direct pe tabele.
O bază de date bine proiectată conţine, de obicei, diferite tipuri de interogări
care prezintă informaţiile necesare.

17
În ajutorul aplicaţiei Microsoft Access (Help) sunt prezentaţi paşii care trebuie
parcurşi pentru proiectarea unei baze de date. Aceştia sunt:
► Stabilirea scopului bazei de date, a utilizatorilor, a cerinţelor lor .
Pornind de la listele necesare (rapoarte), se schiţează formulare le de
introducere a datelor. Se deduc apoi faptele ce trebuie memorate în baza de date şi
cărui subiect îi va aparţine fiecare. Aceste fapte corespund câmpurilor (coloanelor)
din baza de date, iar subiectele cărora le aparţin corespund tabelelor.
► Stabilirea câmpurilor necesare în baza de date.
Fiecare câmp este un fapt despre un anumit subiect. Nu trebuie să rămână
vreun fapt fără un câmp corespondent, iar câmpurile trebuie să fie detaliate în cele
mai mici părţi logice. De exemplu, o adresă trebuie să fie descompusă în stradă,
număr, bloc, scară, etaj, apartament. De asemenea în câmpuri nu se înscriu liste sau
valori calculate.
► Stabilirea tabelelor necesare în baza de date. Fiecare tabel trebuie să
conţină informaţii despre un subiect.
► Stabilirea apartenenţei fiecărui câmp la tabelul corespunzător.
► Identificare câmpurilor cu valori unice în fiecare înregistrare .
► Stabilirea relaţiilor dintre tabele.
► Îmbunătăţirea proiectului.
► Introducerea datelor şi crearea altor obiecte ale bazei de date .
► Utilizarea instrumentelor de analiză ale Microsoft ACCESS.

Microsoft ACCESS conţine două instrumente cu care se poate îmbunătăţiţi


forma unei baze de date:
1. Analizatorul de Tabel, care poate analiza forma unui tabel la un moment
dat şi, dacă este corespunzător, poate propune noi structuri de tabel şi
relaţii, şi poate scinda un tabel în noi tabele corelate, dacă o astfel de
corelaţie are sens.
2. Analizatorul de Performanţă, care poate analiza întreaga bază de date şi
poate efectua recomandări şi sugestii pentru îmbunătăţirea acesteia.
Expertul poate implementa de asemenea aceste recomandări şi sugestii.

1.5.2. Normalizarea unei baze de date relaţionale

Normalizarea unei baze de date este o tehnică de transformare a a unei baze de


date folosită pentru a elimina anomaliile de actualizare. În aplicare a acestei tehnici se
ţine cont de dependenţela funcţională dintre câmpuri. Prin normalizare datele sunt
cuprinse în mai multe tabele, cu relaţie între ele, iar redundanţa lor este minimă şi
controlată, astfel încât să conserve informaţiile şi dependenţele funcţionale din
relaţia iniţială (descompunerea fără pierderi).

18
E. F. Codd a demonstrat că într-o anumită formă relaţiile posedă proprietăţi
nedorite, pe care le-a numit anomalii de actualizare. Aceste anomalii sunt:
► Anomalia de ştergere, care constă în faptul că anumite date care urmează
să fie şterse fac parte din tupluri în care se găsesc şi alte date care sunt
necesare şi în continuare, ori ştergerea făcându-se la nivelul tuplului,
acestea se pierd;
► Anomalia de adăugare, constă în faptul că anumite date care urmează să
fie adăugate fac parte din tupluri incomplete (pentru care nu se cunosc
toate datele), ceea ce face ca acestea să nu poată fi adăugate;
► Anomalia de modificare, care rezultă din faptul că este dificil de modificat
o valoare a unui atribut atunci când ea apare în mai multe tupluri ale
relaţiei.
Pentru a înlătura aceste anomalii, E. F. Codd a stabilit trei forme normale
pentru relaţii şi a introdus procesul de normalizare care se bazează pe noţiunea de
dependenţă funcţională (FD) ca relaţie între atributele unei entităţi cu caracter
invariant.
Procesul de normalizare a relaţiilor se realizează în mai mulţi paşi, începând
cu forma normală unu (1NF) şi ajungând (după ultimele cercet ări) la forma normală
cinci (5NF). Aceasta constă în descompunerea unei relaţii în conformitate cu
mulţimea dependenţelor funcţionale F, într-o colecţie de relaţii care să conserve
informaţiile şi dependenţele funcţionale din relaţia iniţială (descompunerea fără
pierderi).
O bază de date este în forma normală 1 dacă şi numai dacă toate câmpurile din
tabelele ei nu sunt repetate şi conţin numai valori atomice.
O bază de date este în forma normală 2 dacă şi numai dacă a trecut de forma
normală 1 şi în tabelele ei orice câmp non-cheie este complet dependent funcţional de
cheia primară.
O bază de date este în forma normală 3 dacă şi numai dacă a trecut de forma
normală 2 şi în tabelele ei fiecare câmp non-cheie este dependent numai de cheia
primară.
Fie următorul set de date, referitoare la vânzări:
Dencli Adrcli Telcli Nrfact Datafact Delegat DenProd UM Cant Pret Discount
SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu Zahar kg 15 3,1
SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu Ulei Fl 20 3,27
SC Secundul SRL Str.Verii nr 2 0261222222 2 22.10.2009 Dragoș Lapte l 30 2,9 5
SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir Zahar kg 25 3,1
SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir Ulei Fl 11 3,27
SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir Lapte l 20 2,9 5
SC Secundul SRL Str.Verii nr 2 0261222222 6 25.10.2009 Popescu Lapte l 15 2,9 5
SC First SRL Str Primaverii nr 1 0261111111 3 22.10.2009 Anton Lapte l 18 2,9
SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton Ulei Fl 12 3,27
SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton Lapte l 15 2,9

19
1. Prima formă normală, spune că toate coloanele unui tabel trebuie să
conţină valori atomice (indivizibile). Aşadar, nu trebuie să existe câmpuri ce conţin
liste de valori sau grupuri de date.
Tabelul respectă condiţiile cerute pentru această formă. Câmpul Adrcli ar
putea fi considerat un câmp complex şi divizat în stradă şi număr, dar deoarece
valorile incluse sunt manipulate, de obicei, în mod agregat, foarte mul ţi practicieni
stochează în acest mod informaţiile despre adrese.
2. A doua formă normală, conform căreia un tabel este în această formă dacă
a trecut de prima formă normală şi dacă toate câmpurile care nu sunt chei sunt
dependente de cheia primară.
Pentru transformarea în 1NF a tabelelor se încearcă găsirea unui identificator
(cheie primară) şi câmpurile care sunt dependente de identificator. S-a găsit Dencli
de care sunt dependente câmpurile Adrcli, Telcli. Pentru legătură introducem câmpul
Cocli. Acestea alcătuiesc un tabel pe care îl putem numi Clienţi. În mod similar se
procedează şi cu grupul de câmpuri DenProd, UM, Pret, pentru care s-a introdus
Codprod şi le vom grupa în tabelul Produse. Restul câmpurilor, la care adăugăm şi
cele două coduri pentru relaţii, constituie împreună un tabel pe care îl putem numi
Facturi, în care cheia o constituie combinaţia de câmpuri: Nrfact, Datafact şi
Codprod.
Codcli # Dencli Adrcli Telcli Nrfact Datafact Delegat CodProd CodCli Cant Discount
111111 SC First SRL Str Primaverii nr 1 0261111111 1 21.10.2009 Popescu 1075 222222 15
222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1009 222222 20
333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 2 22.10.2009 Dragos 7023 222222 30 5
5 24.10.2009 Trandafir 1075 333333 25
5 24.10.2009 Trandafir 1009 333333 11
5 24.10.2009 Trandafir 7023 333333 20 5
Codprod # DenProd UM Pret 6 25.10.2009 Popescu 7023 222222 15 5
1075 Zahar Kg 3,1 3 22.10.2009 Anton 7023 111111 18
1009 Ulei Fl 3,27 4 23.10.2009 Anton 1009 111111 12
7023 Lapte L 2,9 4 23.10.2009 Anton 7023 111111 15

La rândul lui, datorită nedependenţei câmpurilor Delegat şi CodCli de cheia


compusă, tabelul facturi se descompune în două tabele:
 în primul pot fi trecute informaţiile generale despre facturi cu cheia
compusă din:
Nrfact# Datafact# Delegat CodCli
1 21.10.2009 Popescu 222222
2 22.10.2009 Dragoș 222222
5 24.10.2009 Trandafir 333333
6 25.10.2009 Popescu 222222
3 22.10.2009 Anton 111111
4 23.10.2009 Anton 111111
 în al doilea pot fi trecute informaţiile cu rândurile din facturi cu informaţii
despre produsele vândute:
20
Nrfact# Datafact# CodProd# CodCli Cant Discount
1 21.10.2009 1075 222222 15
1 21.10.2009 1009 222222 20
2 22.10.2009 7023 222222 30 5
5 24.10.2009 1075 333333 25
5 24.10.2009 1009 333333 11
5 24.10.2009 7023 333333 20 5
6 25.10.2009 7023 222222 15 5
3 22.10.2009 7023 111111 18
4 23.10.2009 1009 111111 12
4 23.10.2009 7023 111111 15

3. A treia formă normală, presupune ca tabelele să treacă de a doua formă şi


câmpurile ne-cheie să fie mutual independente pentru ca acestea să fie în această
formă normală. În bazele de date nu se pun câmpuri calculate.
Primele trei tabele respectă criteriile pentru 3NF:
Clineti
Codcli # Dencli Adrcli Telcli
111111 SC First SRL Str Primaverii nr 1 0261111111
222222 SC Secundul SRL Str.Verii nr 2 0261222222
333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333

Produse
Codprod # DenProd UM Pret
1075 Zahar Kg 3,1
1009 Ulei Fl 3,27
7023 Lapte L 2,9

FactGen
Nrfact# Datafact# Delegat CodCli
1 21.10.2009 Popescu 222222
2 22.10.2009 Popescu 222222
5 24.10.2009 Trandafir 333333

În cel de-al patrulea tabel, observăm că există câmpul Discount, care este
dependent în mod tranzitiv de cheia primară. Drept urmare, din acest tabel, vor fi
create două tabele care vor fi în 3NF.

FactProd
Nrfact# Datafact# CodProd# Cant
1 21.10.2009 1075 15
1 21.10.2009 1009 20
2 22.10.2009 7023 30
5 24.10.2009 1075 25
5 24.10.2009 1009 11
5 24.10.2009 7023 20
6 25.10.2009 7023 15
3 22.10.2009 7023 18
4 23.10.2009 1009 12
4 23.10.2009 7023 15

21
Discount
Codprod # CodCli# Discount
7023 333333 5
7023 222222 5

1.5.3. Integritatea bazelor de date

Integritatea bazelor de date se referă la anumite restricţii care asigură


corectitudinea datelor stocate. Astfel, la proiectarea bazelor de date se pot impune
anumite restricţii pentru a se realiza şi conserva integritatea bazelor de date, care are
două aspecte:
1. Integritatea în interiorul fiecărui tabel.
Acest aspect se referă la impunerea unor restricţii de validare a datelor,
specifice domeniului aplicaţiei. De exemplu: se va urmări ca datele calendaristice să
fie stocate în câmpuri corespunzătoare, domeniul de valori să fie respectat. Pe de altă
parte, se urmăreşte şi asigurarea integrităţii entităţii, care presupune că orice
componentă a cheii primare trebuie să ia o valoare unică , diferită de valoarea NULL,
pentru fiecare înregistrare introdusă în tabel.
2. Integritatea referenţială.
Conform integrităţii referenţiale, pentru fiecare valoare a cheii externe din
baza de date relaţională, diferită de valoarea NULL, trebuie să existe o valoare
corespunzătoare din acelaşi domeniu de valori şi de acelaşi tip, aceasta fiind cheia
primară.

22
Relaţiile dintre tabele se realizează prin referinţe 2, stabilite între înregistrările
tabelelor şi cheile tabelelor. Viabilitatea acestor referinţe poate fi înfăptuită prin
integritatea referenţială, a cărei scop este de a împiedica apariţia înregist rărilor
solitare şi de a păstra sincronizate referinţele, astfel încât să nu apară înregistrări care
se referă la alte înregistrări care nu mai există. În ACCESS, integritatea referenţială
poate fi impusă atunci când se definesc relaţiile dintre tabele, pr in precizarea
actualizărilor şi ştergerilor în cascadă a câmpurilor corelate, precum este redat în
figura anterioară.

După activarea acestei impuneri pentru o relaţie dintre două tabele, ACCESS
nu va mai permite niciunei aplicaţii care utilizează baza de date încălcarea integrităţii
referenţiale pentru acea relaţie, adică nu sunt posibile actualizări care modifică ţinta
unei referinţe şi nici ştergeri care elimină ţinta unei referinţe. Mai mult chiar, orice
modificare a cheii primare se va propaga, în cascadă, şi în cheile străine, sau
ştergerea unui articol dintr-un tabelul de iniţiere a referinţei, va provoca ştergerea
tuturor articolelor din tabelul ţintă al referinţei, pentru care cheia străină are valoarea
pe care o are cheia primară a articolului şters. ACCESS permite chiar şi afişarea în
cascadă a relaţiilor dintre tabele, precum în figura de mai jos:

De exemplu, în datele pe care le utilizăm, modificarea în tabelul Clienti, a


codului client (Codcli) pentru „SC Secundul SRL‖ la valoarea 999999, va determina
modificarea valorii câmpului Codcli, cu valoarea 999999, pentru articolele corelate
din tabelul Factgen (3 articole care au valoarea Codcli=222222). Dacă se şterge din

tabelul Clienţi, articolul care are valoarea pentru Codcli egală cu 222222, se va

2
de la verbul a referi
23
produce (bineînţeles după o atenţionare şi acceptul utilizatorului) ştergerea în
cascadă a celor 3 articole corelate din Factgen. Folosirea sintagmei în cascadă este
îndreptăţită în acest caz, deoarece cele 3 articole din tabelul Factgen, sunt corelate,
la rândul lor, cu articole din tabelul Factprod, după cheia compusă din câmpurile
Nrfact şi Datafact (4 articole: două corespunzătoare facturii 1, unul corespunzător
facturii 2 şi unul corespunzător facturii 6). Rezumând, în structura de cascadă di n
figură, ştergerea unui articol din tabelul Clienţi provoacă ştergerea a trei articole în
tabelul Factgen, provocând mai departe ştergerea a 4 articole în tabelul Factprod.

1.6. Operarea în mediul ACCESS


1.6.1. Deschiderea aplicaţiei. Crearea unei noi baze de date

SGBD ACCESS face parte din pachetul de programe Microsoft Office, pachet
care este proiectat să ruleze
sub diverse versiuni ale
sistemului de operare
Windows. Desigur că într-un
sistem friendly user, orice se
poate face în câteva moduri,
pentru ca utilizatorul să poată
folosi metoda care i se pare cea
mai naturală.
O posibilitate de a lansa
SGBD-ul ACCESS este cea de
la butonul Start pe calea
programelor instalate:
Start>All programs>
Microsoft Office > Microsoft
Access.
La pornire, SGBD-ul
ACCESS afişează fesreastra
din figură (numită sugestiv Pagina Introducere în Microsoft Office Access), şi
utilizatorului îi sunt oferite mai multe posibilităţi.
Pentru crearea unei noi baze de date trebuie aleasă opţiunea: Bază de date
necompletată (Blank Access database) din partea a doua a panoului

24
După aceasta este afişată o fereastră cu titlul Fişier nou bază de date în care
utilizatorul are de stabilit:
► directorul în care va fi salvat fişierul;
► numele fişierului în care va fi stocată baza de date.

Creare
director nou Alegerea locului
Listă cu foldere şi de stocare
fişiere
Instrumente
Scrierea numelui Tipul fișierului
pentru fisiere
fişierului

În fereastra Fişier nou bază de date se procedează în felul următor:


► În caseta pentru alegerea tipului fişierului se specifică extensia fişierului
sau se alege un tip din lista ataşată;
► Pentru a ajunge la directorul unde fişierul va fi stocat, ut ilizatorul se
foloseşte de lista ascunsă, din primul rând al fesrestrei, unde alege unitatea de stocare
şi apoi alege directorul sau fişierul dorit din lista cu directoare şi fişiere. Aceste
operaţii se repetă până când se ajunge la locaţia dorită;
25
► În caseta Nume fişier se va trece numele fişierului. Dacă numele fişierului
dorit apare în listă, se poate face un clic pe fişierul dorit şi numele lui va fi trecut
automat în caseta de scriere a numelui fişierului (Atenţie, în acest caz se va
suprascrie fişierul ales).
Operaţia se termină când se apasă butonul OK. Dacă se doreşte, se poate crea
un director nou sau se poate apela la instrumentele pentru fişiere pentru căutare a,
ordonarea, modul de afişare, adăugarea în lista de preferinţe sau afişarea
proprietăţilor.
Intrarea în noua bază de date se face atunci când este afişată fereastra bază de
date.

1.6.2. Moduri de vizualizare

Pentru a se lucra cu un obiect, acesta se alege din partea dreaptă a ferestrei


Bază de date, sau se realizează în succesiunea operaţiilor pe care le execută aplicaţia.
Obiectele sunt afişate în diferite moduri de vizualizare prezentate în figur a de mai
jos.
Se observă că multe moduri sunt comune pentru majoritatea obiectelor.
Modurile de vizualizare se selectează apăsând butonul Vizualizare din panglică.

Vizualizarea în modul proiectare (Design view) este posibilă pentru toate


obiectele. În acest mod se configurează conţinutul şi forma obiectelor.
În modul Foaie de date (Data view) sunt afişate, pentru a putea fi modificate,
datele legate de obiectul curent (tabele sau integogări).
În modul Vizualizare raport (Report view) sunt afişate, prin intermediul

26
formatărilor prevăzute într-un raport, datele legate de raportul curent.
În modul Vizualizare formular (Form view) sunt afişate, prin intermediul
formatărilor prevăzute într-un formular, datele legate de formularul curent, pentru a
putea fi modificate.
În modul Vizualizare aspect sunt afişate datele, prin intermediul formatărilor
prevăzute într-un formular sau raport şi se pot face unele modificări intuitive aspra
machetei obiectului prin care se expun datele.
Vizualizare SQL este un mod specific interogărilor. Utilizatorii bazelor de date
trebuie să înţeleagă că o interogare este în primul rând o comandă SQL (Structured
Query Language). Tabelele văzute în modul Foaie de date a interogărilor, conţin
datele rezultate în urma execuţiei comenzilor SQL. O interogare, vizualizată în
modul proiectare, mai este cunoscută şi sub numele de grilă QBE (acronim de la
sintagma din engleză Query by Example) şi vizualizează grafic comanda SQL.
Examinarea înaintea imprimării este o redare pe ecran a modului cum va fi
tipărit documentul (raport) pe hârtia de imprimantă.
Vizualizare PivotTable: e un mod de vizualizare care sintetizează şi analizează
datele dintr-o foaie de date sau dintr-un formular. Se utilizează diferite niveluri de
detaliere sau se organizează datele prin glisarea de câmpuri şi elemente, prin afişarea
sau ascunderea elementelor din listele verticale pentru câm puri.
Vizualizare PivotChart: este un mod de vizualizare care arată o analiză vizuală
a datelor dintr-o foaie de date sau dintr-un formular. Sunt vizibile diferite niveluri de
detaliere sau se indică aspectul prin glisarea de câmpuri şi elemente sau prin
expunerea şi ascunderea de elemente în listele verticale pentru câmpuri.

1.6.3. Deschiderea, modificarea, salvarea şi închiderea unei baze de


date existente

Pentru deschiderea unei baze de


date existente se poate proceda în mai
multe moduri.
Dacă se doreşte modificarea sau
consultarea unei baze de date creată
anterior, atunci când se lansează rularea
aplicaţiei ACCESS, în fereastra principală
se acţionează în partea dreaptă, în caseta Deschidere bază de date recentă a ferestrei
de start a aplicaţiei, de obicei pe opţiunea  Mai multe … şi se va deschide o
fereastră de dialog, cu titlul Deschidere, asemănătoare cu fereastra de dialog Fişier
nou bază de date, în care se selectează baza de date care se doreşte să fie modificată.
Spre deosebire de alte aplicaţii din Office, în ACCESS se poate lucra, la un
moment dat, doar cu o singură bază de date.

27
Dacă aplicaţia ACCESS este deja deschisă, se poate acţiona pe pictograma 
din meniul ascuns legat de Butonul Office sau se alege opţiunea > Deschidere,
sau se apasă concomitent Ctrl + O. Şi în aceste trei ultime cazuri, se deschide
automat fereastra cu titlu Deschidere, cu a cărei elemente componente utilizatorul îşi
alege fişierul cu care doreşte să lucreze.
În fine, este posibil ca documentul care se doreşte a fi deschis să fi fost editat
recent şi să apară într-un istoric, conţinut în partea dreaptă a meniului ascuns legat
de Butonul Office , sau în prima parte a panoului de activitate Fişier nou, de unde
poate fi deschis.
Dar o bază de date ACCESS, concomitent cu aplicaţia Microsoft ACCESS, pot
fi deschise dintr-un File Manager, printr-un dublu clic pe orice document de tip bază
de date ACCESS cu extensia .mdb (versiuni anterioare anului 2007) sau .accdb
(versiuni ulterioare anului 2007), dacă aplicaţia ACCESS este instalată pe calculator.
Asupra unei baze de date deschise se pot face modificări ale obiectelor
încapsulate: se pot crea noi tabele, se pot modifica structurile sau conţinutul datelor,
se pot crea noi interogări, formulare, rapoarte, pagini Web, sau se pot face modificări
asupra celor existente.
ACCESS are opţiuni de salvare a principalelor tipuri de obiecte compuse care
apar în fereastra Bază de date. Salvarea se referă la obiectul curent, atunci când el
este vizualizat în modul proiectare (pentru interogări şi când sunt vizualizate în
modul SQL). În restul modurilor de vizualizare, pentru toate obiectele, salvarea, dacă
are sens, se referă la datele pentru care obiectul este interfaţă. Pentru obiectele
curente, se pot face salvări sub alt format: html, xml, pdf, xls, doc etc.
Pentru prima salvare a unor obiecte nou create, se foloseşte una dintre
comenzile: >Salvare ca… sau > Salvare. Se ajunge la o fereastră de salvare
unde se precizează numele sub care va fi salvat obiectul. Dacă se apelează comanda
>Salvare ca… mai este afişată şi o casetă de editare text combinată cu o listă
ascunsă din care se poate alege tipul obiectului, pe când, dacă se apelează la coma nda
> Salvare, această casetă combinată nu mai apare. Această salvare se poate face
şi cu combinaţia de taste Ctrl + S sau apăsând butonul al treilea din bara de
instrumente Standard cu pictograma:.
Dacă există deja o versiune a obiectului, salvată în baza de date, cu comanda
Salvare, versiunea veche se suprascrie. Dar, se poate salva noua versiune, cu un nou
nume sau ca alt tip de obiect bazat pe obiectul iniţial prin comanda > Salvare ca….
În modurile de vizualizare interactive, valorile stabilite pentru controalele
diferitelor obiecte se salvează automat după părăsirea controalelor, de aceea când
iese dintr-un obiect, dacă nu s-au făcut modificări în modul proiectare, utilizatorul nu
mai este atenţionat să facă salvare. Dacă utilizatorul a efectuat modificări asupra unu i

28
obiect în modul proiectare, chiar dacă trece într-un mod interactiv, utilizatorul este
atenţionat când părăseşte obiectul să-şi salveze modificările efectuate în modul
proiectare.
Pentru închiderea unei baze de date se alege opţiunea >Închidere.

1.6.4. Folosirea funcţiei ajutor

Utilizatorii aplicaţiilor Microsoft sunt obişnuiţi să beneficieze de un sistem


complex de ajutor în lucru. De aceste facilităţi beneficiază şi utilizatorii ACCESS.
Probabil cel mai bun ajutor pentru utilizatori este realizarea interfeţei în
diverse limbi, altele decât limbile de circulaţie internaţională. Aşa este de exemplu şi
versiunea în româneşte a Microsoft Office, cu toate că încă se utilizează foarte multe
neologisme forţate. Aplicaţiile Office au toate elementele traduse: de la opţiunile de
meniu, mesajele din diferite ferestre sau casete, până la sistemul de ajutor (help) în
amănun, sau chiar mesajele care apar atunci când poziţionăm cursorul mouse-ului pe
unul din butoanele barelor de instrumente (text info control sau pe engleză: „Tool
Tip‖).
În Ajutorul din ACCESS, sunt traduse chiar şi explicaţiile pentru partea de
programare in limbajele VBA sau SQL.
Totuşi cea mai mare parte a funcţiunilor de ajutor pentru utilizatori este
concentrată în meniul „Ajutor‖. Ajutorul este sub formă de documente hypertext.
Opţiunile componentei de Ajutor a aplicaţiei ACCESS sunt următoarele:

Răsfoire Ajutor Access

Activarea Access Colectarea datelor

Noutăţi Pornirea

Accesibilitate Obţinerea Ajutorului

Pagini de date Ataşări

Macrocomenzi şi programabilitate Implementarea aplicaţiei

Access Developer Extensions Conversie

Particularizare Proiectarea bazelor de date

Expresii Date externe

Filtrarea şi sortarea Formulare şi rapoarte

Interogări Salvare şi imprimare

Securitate şi confidenţialitate Tabele

Lucrul cu site-uri SharePoint Adăugarea de diagrame, nomograme sau tabele

Gestionarea fişierelor şi datelor Lucrul în altă limbă

29
Get help? este o facilitate a Microsoft Office de a explica elementele de
interfaţă din aplicaţiile sale. Alegând butonul care e plasat în colţul din dreapta
sus, se deschide o fereastră cu explicaţii dependente de context.
Ajutor pentru Microsoft ACCESS este funcţiunea care poate fi lansată şi
apăsând tasta F1 sau cu clic pe butonul . Se afişează o fereastră de ajutor
asemănătoare celei de mai jos cu posibilitatea de a vedea o listă complexă a
termenilor de ajutor. În partea de sus sunt câteva butoane folosite pentru răsfoirea
convenabilă a acestor pagini de ajutor.
În partea de jos sunt două cadrane de pagini. Prima are ca titlu Contents
(contents înseamnă cuprins), şi conţine lista de teme a documentaţie i numită Ajutor
Microsoft Access şi este structurată arborescent. Temele explicate pot fi simple sau

compuse. O temă simplă are la începutul rândului o pictogramă cu semnul şi,


atunci când este selectată, se afişează explicaţia ei în partea dreaptă.

30
Temele care sunt compuse din alte subteme, pot avea la începutul rândului
unul dintre semnele sau . Dacă au semnul , atunci înseamnă că apar în lista
din stânga fără detalierea subtemelor incluse. Aceste teme incluse, pentru fiecare
temă complexă, pot fi afişate printr-un clic pe semnul de la începutul rândului.
Când tema apare într-o listă, expandată cu subtemele incluse, are la începutul
rândului semnul .
Deasupra cadranului din stânga are ca titlu Căutare (în limba engleză Search)
un instruent folosit pentru căutarea unor termeni în manualul aplicaţiei.
După căutare, sunt afişate subiectele unde apar termenii căutaţi, iar efectuarea
unui clic pe un subiect are ca rezultat afişarea acestuia în partea dreaptă a ferestrei de
ajutor.

1.6.5. Închiderea aplicaţiei

Încheierea lucrului cu aplicaţia ACCESS este similară cu închiderea oricărei


aplicaţii Microsoft Office: din meniu se alege opţiunea > Închidere bază de date.
Ieşirea din aplicaţie provoacă închiderea tuturor obiectelor deschise în acel moment.
Sistemul, înainte de închiderea fiecărui obiect, testează dacă s -a făcut salvarea
ultimelor modificări în modul proiectare, pentru fiecare obiect în parte, iar dacă nu s-
a realizat acest lucru se afişează mesajul de atenţionare, urmând ca alegerea
opţiunilor de salvare fişier, închidere fără salvare sau revocarea închiderii aplicaţiei
să se facă de utilizator.
Combinaţia de taste pentru închiderea aplicaţiilor Windows, deci şi a aplicaţiei
Microsoft ACCESS, este Alt + F4. Totodată, având o fereastră a sistemului şi
ACCESS-ul poate fi închis cu un clic pe butonul cu semnul X din colţul din dreapta
sus.

31
CAPITOLUL II. CREAREA ȘI UTILIZAREA TABELELOR

2.1. Crearea unei tabele


Începând cu versiunile ulterioare anului 2007 ale programelor Microsoft
Office, meniurile şi grupurile de instrumente care erau plasate sub meniu în fereastra
aplicaţiilor, au fost înlocuite de aşanumita panglică. Această noutate a ferestrei
aplicaţiei este proiectată cu scopul de a ajuta utilizatorii în a găsi rapid comenzile de
care au nevoie pentru a realiza o activitate. Comenzile sunt organizate în grupuri
logice care sunt grupate în file.
Fiecare filă are legătură cu un anumit tip de activitate, cum ar fi scrierea sau
asamblarea unei pagini. Pentru a reduce aglomerarea de pe ecran, unele file sunt
dependente de context, fiind afişate doar când sunt necesare. Este cazul, de obicei a
ultimei file, care conţine comenzi pentru obiectul curent în lucru, accesat sau
selectat.
Crearea unui tabel presupune crearea structurii sale. Acest lucru se poate
realiza în fila Creare, în grupul de instrumente pentru tabele, recomandabil prin
instrumentul Proiectare tabel:

Se mai poate apela la instrumentul Şabloane tabel. În ultimul timp se


obişnuieşte ca să se promoveze nişte structuri predefinite pentru a crea tabele sau
chiar baze de date, pentru diferite probleme. Neajunsul constă în faptul că structurile
predefinite sunt greu pliabile pe o problemă reală. Probabil lipsesc câmpuri, sau sunt
de tip necorespunzător şi nu în ultimul rând au denumiri greu de accep tat.
Crearea tabelelor se poate face şi cu instrumentul Tabel, prin introducerea de
date. Într-un format asemănător cu Excel se pot introduce date şi apoi în modul
proiectare (în limba engleză: Design) se pot reboteza şi restructura câmpurile.
Structuri de tabele pot fi realizate şi prin subprograme VBA, create de
utilizatori.

32
Modul cel mai elegant, cel mai utilizat şi convenabil de creare şi apoi de
modificare a structurilor tabelelor rămâne utilizarea ferestrei de proiectare, precum în
figura de mai jos, în care este vizibilă automat ultima filă cu instrumente de
prelucrare a tabelelor, fila Proiectare.

2.1.1. Proprietăţile câmpurilor

În cadrul acestei ferestre se definesc numele câmpului (Field Name), tipul de


date (Data Type) şi, opţional, o descriere a câmpului respectiv (Description). În
panoul de jos al acestei ferestre se introduc celelalte proprietăţ i ale câmpului:
► Numele câmpului, poate fi format, precum orice nume de obiecte ale unei
baze de date ACCESS 3, din maximum 64 de caractere (chiar şi diacritice!), poate să
conţină spaţiu, dar nu poate să conţină unele caractere, printre care: „ [‖, „]‖,„.‖, „!‖.
Atunci când în Microsoft ACCESS un nume de câmp este format din mai
multe cuvinte, trebuie folosite parantezele drepte, de exemplu: [Cod numeric
personal]. În majoritatea limbajelor de programare sau a SGBD-urilor, pentru a forma
nume de câmpuri complexe, în sintaxă se recurge la utilizarea caracterului „_‖
(denumit în engleză: underscore), scriindu-se Cod_numeric_personal.

3
vezi Specificaţii pentru baze de date, http://office.microsoft.com/ro -
ro/access/HA100307391048.aspx?pid=CH100621861048
33
Microsoft ACCESS identifică un câmp prin numele său de câmp. După
specificarea numelui de câmp, în Vizualizare proiect pentru tabel, numele poate fi
utilizat în expresii, proceduri Visual Basic şi instrucţiuni SQL. Setarea acestei
proprietăţi se efectuează în partea de sus a ferestrei deschise prin apelarea
instrumentului Proiectare tabel din fila Creare, sau prin redenumirea unei coloane în
fereastra deschisă prin apelarea instrumentului Tabel din fila Creare, sau utilizând un
limbaj de programare (de obicei limbajul Visual Basic).
► Ca tipuri sau subtipuri de date se pot folosi: text, memo, număr, dată/oră,
monedă, autonumerotare, da/nu, obiect OLE, etc.
Proprietatea Tip de date se utilizează pentru a preciza tipul de date stocat în
câmpul unui tabel. Fiecare câmp stochează date constând dintr-un singur tip de date.
Proprietatea Tip de date utilizează următoarele setări:
Setare Tip de date Dimensiune
Text (Implicit) Text sau combinaţie de text şi Până la 255 de caractere sau o lungime
numere, precum şi numere care nu mai mică setată prin proprietatea
necesită calcule, cum ar fi numerele de Dimensiune câmp. Microsoft ACCESS
telefon. nu rezervă spaţiu pentru porţiuni
neutilizate din câmpul text.
Memo Text lung sau combinaţii de text şi Până la 65.535 de caractere.
numere. Noile versiuni ale ACCESS-ului
înregistrează istoricul revizuirilor.
Număr Date numerice utilizate în calcule 1, 2, 4 sau 8 octeţi (16 octeţi dacă
matematice. proprietatea Dimensiune câmp este setată
la ID reproducere).
Dată/Oră Valori de date calendaristice şi ore pentru 8 octeţi.
anii cuprinşi între 100 şi 9999. Noile
versiuni ale ACCESS-ului oferă
asistenţă pentru alegerea datei într-un
calendar interactiv încorporat.
Monedă Valori monetare şi date numerice 8 octeţi.
utilizate în calcule matematice care
implică date având între unul şi patru
poziţii zecimale. Cu precizie de 15 cifre
în stânga separatorului zecimal şi de 4
cifre în dreapta lui.
AutoNu- Un număr secvenţial unic (incrementat 4 octeţi (16 octeţi dacă proprietatea
merotare cu 1). Dimensiune câmp este setată la ID
reproducere).
Da/Nu Valori şi câmpuri Da şi Nu care conţin 1 bit.
numai una din cele două valori (Da/Nu,
Adevărat/Fals sau Activat/Dezactivat).
Obiect Un obiect (cum ar fi o foaie de date Până la 1 gigaoctet (limitat la spaţiul-disc
OLE Microsoft Excel, un document Microsoft disponibil).
Word, grafică, sunete sau alte date
binare) legate sau încorporate într-un
tabel Microsoft ACCESS.

34
Hyperlink Text sau combinaţie de text şi numere Fiecare din aceste trei părţi ale tipului de
stocate ca text şi utilizate ca adresă date Hyperlink conţine până la 2048 de
hyperlink. caractere.
Atach Permite stocarea de diferite tipuri de Limitat la spaţiul de disc disponibil.
documente şi fişierele binare în baza de
date fără a creşte inutil dimensiunea
bazei de date. Microsoft Access 2007
comprimă automat ataşările, când este
posibil, pentru a minimiza utilizarea
spaţiului.

Câmpurile Memo, Hyperlink şi Obiect OLE nu se indexează. Este bine să se


utilizeze tipul de date Monedă pentru un câmp care necesită multe calcule implicând
date cu una până la patru zecimale. Câmpurile cu tipul de date Simplă precizie şi
Dublă precizie necesită calcule în virgulă mobilă. Tipul de date Monedă utilizează un
calcul în virgulă fixă, mai rapid.
► Proprietatea Dimensiune câmp se utilizează pentru a seta dimensiunea
maximă pentru datele stocate într-un câmp având tipul de date Text, Număr sau
AutoNumerotare. Setarea acestei proprietăţi se face în strânsă legătură cu setarea
proprietăţii tip de dată a câmpului (data type).
Pentru proprietatea Tip date setată la Text, dimensiunea poate fi un număr de
la 0 la 255. Setarea implicită este 50. Pentru AutoNumerotare, proprietatea
Dimensiune câmp se setează la Întreg lung sau ID reproducere. Pentru proprietatea
Tip date setată la Număr, setările proprietăţii Dimensiune câmp şi valorile lor sunt
corelate ca în tabelul de mai jos:
Setare Descriere Precizie Dimensiune
zecimală de stocare
Octet Numere de la 0 la 255 (fără fracţiuni). Fără 1 octet
38 38
Zecimal Numere între -10 –1 şi 10 –1. 28 12octeţi
Întreg Numere între -32.768 şi 32.767 (fără fracţiuni). Fără 2 octeţi
Întreg lung Numere de la –2.147.483.648 la 2.147.483.647 Fără 4 octeţi
(fără fracţiuni).
Simplă precizie Numere de la –3,402823E38 la 7 4 octeţi
–1,401298E-45 pentru valori negative şi de la
1,401298E–45 la 3,402823E38 pentru valori
pozitive.
Dublă precizie Stochează numere de la –1,79769313486231E308 la 15 8 octeţi
–4,94065645841247E–324 pentru valori negative şi
de la 4,94065645841247E–324
la 1,79769313486231E308 pentru valori pozitive.
ID Identificator unic global (GUID). N/A 16 octeţi
reproducere

Setarea acestei proprietăţi se efectuează numai din foaia de proprietăţi a


tabelului.
35
Valorile implicite ale dimensiunilor de câmp pentru câmpurile Text şi Număr
se pot seta prin modificarea valorilor de la opţiunea Designeri de obiecte, din
fereastra afişată la selecţia Opţiuni Access, după ce se face clic pe Butonul Microsoft
Office .
Este bine să se utilizeze cea mai mică posibil setare pentru proprietatea
Dimensiune câmp deoarece dimensiunile mai mici de date sunt prelucrate mai rapid
şi solicită mai puţină memorie.
► Numărul de zecimale (în limba engleză: Decimal places):
În cadrul acestei proprietăţi se stabileşte numărul cifrelor afişate la dreapta
separatorului zecimal, pentru valorile câmpului. Această setare are sens doar la
tipurile de date Număr şi Monedă şi poate stabili între 0 şi 15 cifre s au Auto pentru
determinarea automată a numărului de cifre pentru partea fracţionară.
► Format: formatul în care sunt afişate informaţiile. Important este de reţinut
că proprietatea Format se utilizează pentru stabilirea modului în care numere, date
calendaristice, timp şi text vor fi afişate şi tipărite şi nu afectează introducerea
datelor. Această sarcină revine proprietăţii Input mask.
► Formatul de introducere, masca de intrare (în limba engleză: Input Mask)
este şablonul de introducere a datelor
Setarea formatului de afişare şi al celui de intrare poate fi o operaţie
complexă şi anevoioasă. Este recomandabil ca de ea să facă uz programatorii
experimentaţi. Neînţelegerea conţinutului informaţiei datorită unui format ambiguu
poate duce la deteriorarea unor date.
► Legenda (în limba engleză: Caption), cu sensul pe care îl are în general în
programarea orientată pe obiecte, aceasta permite specificarea unui al doilea nume în
situaţiile în care primul nu este destul de semnificativ. El apare în antetul cererilor d e
interogare, a formularelor şi a rapoartelor.
► Valoarea implicită (în limba engleză: Default Value): este o valoare care
este atribuită automat de sistem, în momentul introducerii datelor, dacă utilizatorul
nu completează acel câmp.
► Regulă de validare (în limba engleză: Validation Rule): este o restricţie de
introducere a datelor care obligă datele să respecte expresia introdusă la această
proprietate. În expresie practic se folosesc regulile de sintaxă specifice A CCESS-
ului.
► Textul de validare (în limba engleză: Validation Text ): reprezintă textul
care va apărea pe bara de mesaje în cazul în care valoarea introdusă nu respectă
criteriul impus de regulă de validare.
► Obligatoriu (în limba engleză: Required): obligă sau nu completarea
respectivului câmp în fiecare înregistrare.
► Indexat (în limba engleză: Indexed): poate suporta trei posibilităţi:
a) Nu;
36
b) Da (Cu dubluri);
c) Da (Fără dubluri).

2.1.2. Definirea unei chei primare

După descrierea câmpurilor componente ale unei tabele este timpul să se


stabilească cheia primară a acesteia. Dacă se uită, ACCESS avertizează utilizatorul
de acest lucru şi automat creează un nou câmp şi-l propune ca şi cheie primară.
Un tabel care nu are cheie primară nu poate stabili relaţii de tipul unu la mai
mulţi cu alte tabele.
O cheie primară poate fi formată din unul sau mai multe câmpuri. Dacă cheia
primară este formată dintr-un singur câmp, se selectează acesta, se face clic dreapta
şi apoi se activează butonul cheie primară. Dacă cheia primară este formată din mai
multe câmpuri (cheie compusă)se selectează primul, iar celelalte se selectează în
combinaţie cu apăsarea tastei CTRL, după care se face clic dreapta pe unul dintre ele
şi apoi se activează butonul cheie primară.
În Microsoft ACCESS cheia primară a unei tabelei trebuie să fie indexată şi
fără dubluri. Într-un tabel poate exista o singură cheie primară.
Dacă mai există şi alte câmpuri, indexate, fără dubluri, acestea sunt numite
chei candidate.

2.1.3. Stabilirea unui index

Indecşii sunt utilizaţi pentru a mări viteza de găsire a informaţiilor.


Un index este o structură în funcţie de a cărei valori sunt ordonate
înregistrările unui tabel.
Un sistem de gestiune de baze de date se foloseşte de indecşii existenţi în
diverse operaţii, de multe ori fără ca acest lucru să îi fie evident utilizatorului. Este
recomandabil să se facă indecşi pe câmpurile după care se sortează rapoarte,
formulare, interogări sau foi de date sau pe câmpurile care apar în expresii pentru
realizarea relaţiilor dintre tabele.
Un index pentru un singur câmp se poate face prin stabilirea proprietăţii
indexat la Da (Cu dubluri) sau Da (Fără dubluri).
Pentru crearea unui index bazat pe mai multe câmpuri se foloseşte
instrumentul Indexuri, fila Instrumente tabel/ Proiectare.
Această filă este accesibilă, atunci când un tabel este accesat pentru
prelucrare, în modul vizulaizare proiect. În fereastra cu titlul Indexuri sunt cuprinşi
toţi indecşii tabelului curent. Fiecare index are un nume şi poate utiliza până la 10
câmpuri. Expresia de sortare este formată prin concatenarea câmpurilor în ordinea în
care apar în fereastră. De exemplu: indexul DenAdrTel este format din concatenarea
câmpurilor [Dencli] ordonat ascendent, [Adresa] ordonat ascendent şi [Telcli]
37
ordonat descendent, indexul Codcli este format din câmpul [Codcli] ordonat
ascendent, iar indexul
PrimaryKey este format doar
din câmpul [Codcli] în ordine
ascendentă.

2.1.4. Modificarea
proprietăţilor unui câmp

Proprietăţile unui câmp


se pot modifica uşor în modul
proiectare. Modificarea
proprietăţilor unui câmp nu afectează buna funcţionare a obiectelor în care apar date
din câmpul modificat. De exemplu, dacă în tabelul „Clienţi‖, numele câmpului
Adresa se modifică în Adrcli, atunci formularele, rapoartele sau interogările care
folosesc date din acest câmp sunt în mod automat modificate, astfel încât, vor prelua
datele din câmpul cu noul nume.
Mărirea dimensiunii unui câmp nu duce neapărat la mărirea dimensiunii bazei
de date, dar prelucrarea devine mai greoaie.
Dacă la un tabel, care deja conţine date, se micşorează dimensiunea unui
câmp, este posibilă pierderea unor date. Odată cu afişarea unei casete de atenţionare,
asemănătoare celei de mai jos, utilizatorul poate să -şi revoce acţiunea. Însă, dacă
utilizatorul selectează butonul Da în fereastra de mai jos, pierderea de informaţii
devine ireversibilă. De exemplu, dacă se modifică setarea Dimensiune câmp a unui
câmp de tip Text de la 100 la 50, partea de date care depăşeşte noua setare de 50
caractere se pierde.
Dacă într-un câmp de tip Număr, datele nu încap în dimensiunea câmpului,
numerele de după virgulă sunt rotunjite sau primesc valoarea Null. De exemplu, dacă
se modifică o dimensiune de câmp de la Simplă precizie la Întreg, valorile fracţionare
vor fi rotunjite la cel mai apropiat număr întreg, iar valorile mai mari decât 32.767
sau mai mici decât -32.768 vor deveni valori nule. Aceste modificări de date sunt
ireversibile.

Problema se complică atunci când se doreşte schimbarea tipului unui câmp.


Trebuie avut în vedere dacă sunt posibile conversiile datelor din vechiul tip în
noul tip. Conversia din tipul număr în tipul monedă, sau invers, se face fără
38
probleme. Şi conversiile din numere în date/oră şi invers se fac fără probleme. Partea
întreagă a numerelor se transformă în dată iar p artea fracţionară se transformă în oră.
Numărul 0 se transformă în #1.1.1900#. Pentru numerele negative, se scade din 1
ianuarie 1900, un număr de zile egal cu valoarea numărului. Pentru ore se face
ora
 partea fracţionară . De exemplu: ora 12 se transformă în
corespondenţa 24

0,5=12/24, ora 1 se transformă în 0,04167=1/24, ora 14h45’ devine 0,614583333=14


¾ : 24, etc.
Dacă se doreşte transformarea din text în numere cu format obişnuit, este
necesar ca în toate celulele să existe doar caracterele necesare pentru a scrie numere:
cifre, marcatorul zecimal şi semnele „+‖ şi „-‖.

2.2. Editarea datelor într-o tabelă


2.2.1. Introducerea de date în tabelă

În cadrul aplicaţiilor ACCESS datele pot fi introduse în tabele printr -o


multitudine de metode, user-friendly, asigurate de însăşi SGBD. Cea mai directă este
printr-o fereastră Foaie de date (în limba engleză: Datasheet). În cadrul acestei
ferestre se pot vizualiza, şi/sau modifica datele deja introduse sau se pot introduce
date noi. Stilul de editare urmează de obicei convenţiile din aplicaţiile pachetului
Office.
Un exemplu de introducere de date în modul foaie de date este redat în
exemplul figură.

Poziţionarea în cadrul tabelului se poate face cu mouse -ul sau cu tastele pentru
deplasare în cadrul foii (Tastele cu săgeţi, Insert, Home, PageUp, PageDown). În
plus, trecerea la câmpul următor se face cu tasta TAB sau apăsând ENTER după ce s-
au introdus date în celulă. Trecerea la câmpul anterior se face cu ajutorul combinaţiei
de taste Shift + TAB.

39
Articolul pe care este poziţionat cursorul este evidenţiat prin accent de
culoare. La editare se ţine cont de proprietăţile câmpurilor stabilite în modul
proiectare, nepermiţându-se violarea regulilor de integritate.
În tabelă se pot introduce date din alte zone ale tabel ului, din alte tabele sau
chiar alte aplicaţii (Word, Excel) prin intermediul ferestrei Clipboard, prin operaţiile
Decupare sau Copiere, cuplate cu operaţia Lipire.
Ca o particularitate generată de lucrul cu înregistrările, în A CCESS este
aproape omniprezent grupul de butoane de navigare cu semnificaţie similară
butoanelor de pe aparatele audio sau video.

Pentru introducere/editare de informaţii totuşi nu se obişnuieşte utilizarea


ferestrei Datasheet. De obicei programatorii proiectează formulare, cu po sibilităţile
oferite de SGBD, pentru introducerea de date în tabele. Totuşi, pentru tabele mici, nu
se justifică efortul pentru a se crea formulare.

2.2.2. Vizualizarea informaţiilor dintr-o tabelă

Vizualizarea informaţiilor dintr-o tabelă se face selectând din meniul generat


prin acţiunea asupra butonului Office , opţiunea Imprimare > Examinare înaintea
imprimării.
ACCESS desenează automat un tabel şi îl vizualizează în pagini, în funcţie de
setările imprimantei.
Dar, în mod frecvent, vizualizarea informaţiilor dintr -o tabelă se face prin
modul Foaie de date. În acest mod vizualizarea este însoţită de posibilitatea de
modificare a informaţiilor. Tot cu actualizare, se pot vizualiza informaţiile din tabele
cu ajutorul unor formulare sau interogări create pe baza tabelului.

2.2.3. Modificarea datelor într-o tabelă

Datele în tabele se modifică la în modul Foaie de date la nivel de celule.


Pentru a modifica date, întâi trebuie să se ajungă la celula în cauză. Nu este
posibilă editarea câmpurilor de grup şi a câmpurilor calculate. Datele pot fi
modificate numai în câmpurile unde există posibilitatea să se insereze un cursor de
introducere de la tastatură; existenţa unui astfel de cursor semnifică acceptarea
editării în coloana respectivă.
Deplasarea în cadrul celulelor tabelului se face cu tastele săgeţi. Trecerea de la
o celulă, la celula vecină din dreapta sau la prima din rândul imedia t următor se face
cu tasta TAB. Deplasarea în sens invers se face apăsând concomitent Shift + TAB.

40
Datele modificate dintr-o celulă sunt salvate imediat după părăsirea ei.
Revocarea modificărilor făcute în celula curentă se face apăsând ESC.
Pentru a revoca modificările din întreaga înregistrare, se face clic pe Anulare
din bara de instrumente de navigare în înregistrări sau opţiunea cu acelaşi nume din
meniul Editare. Această anulare nu mai este posibilă dacă se mai fac alte modificări
într-o altă înregistrare.

2.2.4. Adăugarea de înregistrări într-o tabelă

În modul Foaie de date, de obicei, este afişat în plus un articol gol evidenţiat
cu semnul „*‖. Acest articol nu este socotit în totalul articolelor. Dacă se
poziţionează cursorul pe acest articol, semnul * dispare până când se începe editarea
în articolul respectiv. În acel moment se adaugă imediat un nou articol gol marcat cu
„*‖.
De asemenea, un articol se adaugă imediat în plus în tabelă, când cursorul se
găseşte pe ultima celulă din ultimul rând şi se apasă tasta TAB sau Săgeată Dreapta.
Din panglica ferestrei ACCESS, pentru a se adăuga unui tabel o înregistrare
nouă, se poate utiliza instrumentul Nou, din grupul Înregistrări, fila Pornire.
Combinaţia de taste pentru realizarea acestei operaţii este Ctrl + +.
Într-o tabelă se pot adăuga mai multe articole din alte zone ale tabelului, din
alte tabele sau chiar alte aplicaţii (Word, Excel), prin intermediul ferestrei
Clipboard, prin operaţiile Decupare sau Copiere, cuplate cu operaţia Lipire.
Selectarea mai multor înregistrări dintr-un tabel se face glisând cu mouse-ul
pe zona de selecţie situată la începutul rândurilor. Odată selectate articolele dorite de
a fi adăugate, se selectează fila Pornire a panglicii ACCESS, opţiunea Decupare sau
Copiere, se selectează rândul din tabel marcat cu „*‖ şi apoi cu opţiunea Lipire (din
acelaşi grup de instrumente) se adaugă articolele, nu înainte de a se cere confirmarea
de la utilizator pentru a se realiza adăugarea acestor articole.

2.2.5. Ştergerea de date într-o tabelă

Pentru a şetrge înregistrări într-o bază de date, mediul de dezvoltare ACCESS


are prevăzute instrumentul Ştergere în fila Pornire din Panglica Office a aplicaţiei
ACCESS. Instrumentul are trei funcţiuni, putând fi folosit atât pentru şte rgerea
conţinutului celulei curente, a înregistrării curente sau a câmpului curent.
Ştergerea înregistrării curente dintr-o tabelă se poate face şi alegând din
meniul generat de sistem, după ce s-a acţionat printr-un clic dreapta pe una sau mai
multe înregistrări selectate opţiunea Ştergere înregistrare.

41
Dacă se selectează această opţiune din meniu, după ce sunt selectate mai multe
înregistrări, atunci aceste înregistrări vor fi şterse, împreună cu înregistrările în
cascadă, dacă sunt definite relații între tabele în bazele de adte.

Pentru protecţia datelor împotriva ştergerilor accidentale, operaţia de ştergere


se revocă, dacă operatorul nu confirmă ştergerea, într -o casetă de forma celei de mai
jos.

În mod similar, dacă se selectează una sau mai multe coloane, şi se face clic
drepata pe selecţie, se pot şterge câmpuri din tabelă. şi această ştergere necesită
confirmarea operatorului. Câmpurile pot fi şterse şi cu instrumentul Ştergere din
grupul Câmpuri şi coloane, fila Instrumente tabel/Foaie de date.

Exerciţii:

 Concepeţi o structură pentru următorul set de date şi realizaţi un tabel pe


baza acesteia, în mediul Access, a cărui denumire va fi ANG şi în care se
adaugă, ca înregistrări, datele.
ANG
NrAng NumeA Fnc Csf DataAnga Sal Rate NrDept
2000 CHIVU SOFER 2956 23.02.1999 950 30
2555 CONTRA VANZATOR 2956 19.12.2000 1250 1400 30
2049 DOROS INGINER 2553 31.10.2000 2975 20
2731 MARCU ANALIST 2049 19.03.1999 3000 20
2956 NEGRU INGINER 2553 11.01.1999 2850 30
2084 OSAN ANALIST 2049 19.12.2000 3000 20
2789 POPA VANZATOR 2956 26.03.1999 1250 500 30
2396 POPAN SOFER 2084 13.01.1999 800 20
2553 RUSU DIRECTOR 19.02.1999 5000 10
2024 TULIAN VANZATOR 2956 23.01.1999 1500 30
2987 VUSCA VANZATOR 2956 15.09.1999 1600 300 30
2643 ZIMAN INGINER 2553 14.10.1999 2450 10

 Concepeţi structuri pentru tabelele din figura de ilustrare a relaţiilor de la


1.2.

42
2.3. Crearea relaţiilor între tabele
Relaţiile dintre tabele pot fi percepute logic în cadrul schemei conceptuale 4
sau pot fi specificate şi salvate în baza de date.
Specificarea unei relaţii dintre tabele în baza de date, se realizează cu

instrumentul din fila Instrumente bază de date din panglica Access.


Pentru a putea stabili o relaţie între două tabele sunt necesare două condiţii:
► tabelul sursă a relaţiei să aibă o cheie primară (un câmp de identificare cu
valori unice şi diferite de Null);
► tabelul destinaţie trebuie să aibă un câmp cheie străină, de acelaşi tip de
dată şi dimensiune cu cheia primară.

Atunci când se acţionează asupra instrumentului se deschide o fereastră


de alegere a tabelelor între care se
stabilesc relaţiile.
Se aleg tabelele de lucru cu dublu
clic al mouse-ului iar apoi se închide
fereastra acţionându-se asupra butonului
Închidere.
Exemplificăm acest lucru cu două
tabele Prod şi FactProd.
Stabilirea relaţiei se poate face
glisând, în fereastra relaţii, câmpul
cheie primară peste câmpul cheie
străină. Automat este afişată fesreastra Editare relaţii, în care se precizează
câmpurile prin care se realizează relaţia şi tipul de integritate referenţială impusă.

După apăsarea butonului Creare, relaţia este stabilită şi afişată.

4
Schema conceptuală reprezintă descrierea fenomenelor din realitatea înconjurătoare cu ajutorul
entităţilor şi atributelor şi a legăt urilor dintre acestea.
43
O relaţie între tabele este reprezentată printr-o linie de relaţie trasată între
tabelele din fereastra Relaţii. O relaţie care nu are impusă integritatea referenţială
apare ca o linie subţire între câmpurile comune care acceptă relaţia. Când relaţia este
selectată, făcând clic pe linia sa, linia este afişată îngroşat. Cu dublu clic se pot
reedita condiţiile ei. Dacă este impusă integritatea referenţială pentru o relaţie, linia
apare îngroşată la fiecare capăt. În plus, numărul 1 apare deasupra porţiunii îngroşate
a liniei în partea unu a relaţiei, iar simbolul infinit (∞) apare deasupra liniei în
cealaltă parte.

Exerciţiu:
Creaţi relaţiile între tabelele create în ultimul exerciţiu al subcapitolului
precedent.

44
CAPITOLUL III. UTILIZAREA INFORMAŢIILOR
DINTR-O BAZĂ DE DATE

3.1. Conectarea la o bază de date existentă

Structurarea informaţiilor în tabelele bazelor de date şi modalitatea


managementului acestora e diferită în funcţie de tipul bazelor de date, păstrând
particularitatea SGBD-ului în care a fost definită şi creată colecţia de date. În scopul
utilizării selective, raţionale, distribuite, eficiente şi securizate a datelor, interogările
asigură conectarea la informaţiile din tabelele bazelor de date. Prin intermediul
interogărilor, informaţiile din tabelele bazelor de date pot fi utilizate ca sursă de
înregistrări pentru formulare şi rapoarte. Obiectele din ACCESS pot prelua informaţii
din baze de date de tip Access, dar şi de tip SQL-Server, MSDE, sau chiar MySQL şi
FoxPro. Preluarea informaţiilor din tabele acestor baze de date presupune conectarea
aplicaţiei realizată de utilizator la aceste baze de date existente.
O aplicaţie Access poate include tabele proprii, iar conectarea la acestea este
automată. Conectarea la tabele din alte baze de date, chiar de tipul Access, neincluse
în aplicaţia curentă, este o operaţie dificilă şi se poate realiza cu ajutorul obiectelor
de tip module Visual Basic for Application, care recurg, la rândul lor, la interogări.

3.2. Căutarea datelor cu ajutorul instrumentelor mediului


Access
Căutarea informaţiilor în bazele de date presupune localizarea câmpurilor şi
înregistrărilor în care sunt stocate.
Pentru căutarea sau modifcarea unei înregistrări, fie că se lucrează într-un
tabel, într-un formular sau interogare, se alege din meniu opţiunea din fila Pornire a
Panglicii Microsoft Office, unul dintre instrumentele de Căutare, Găsire şi/sau
Înlocuire, sau Salt la .

45
Se afişează fereastra cu titlul Căutare şi înlocuire, existentă în toate aplicaţiile
pachetului Microsoft Office, cu câteva particularităţi specifice pentru lucrul cu
bazele de date. În caseta de text De căutat, se scrie textul care trebuie căutat.
Ultimele şiruri căutate, rămân în istoricul din lista ascunsă ataşată casetei, şi
la nevoie pot fi readuse.
Cătarea se face doar în câmpul curent sau în întreg tabelul, în funcţie de
opţiunea aleasă din lista Privire în:.
Şirul căutat trebuie să se potrivească cu începutul câmpului, cu întreg câmpul
sau cu o parte oarecare din câmp, după cum se alege din lista Potrivire:. De exemplu,
dacă se caută textul os într-un catalog de produse, dacă se alege prima opţiune, se pot
găsi articole în care există câmpuri care încep cu textul os (osânză, os, ospen, etc);
dacă se alege a doua opţiune, se pot găsi doar acele articole în care există câmpuri
care conţin cuvântul os şi nimic altceva; dacă se alege a treia opţiune, se pot găsi
articole în care există câmpuri care conţin textul os (osânză, costume, costiţe, os,
ospen, etc). Articolele în care se caută pot fi: de la articolul curent în sus, în jos sau
printre toate articolele din tabel.
În fine, se poate bifa caseta de selecţie Potrivire litere mari şi mici dacă se
doreşte să se facă căutări insensibile la litere mari sau mici sau se poate bifa caseta
de selecţie Căutare în câmpuri după format pentru a se ţine cont de formatul de
afişare a datelor din câmpuri.

3.3. Crearea unei interogări simple


Specifică bazelor de date relaţionale, cum sunt şi bazele de date Access, este
uşurinţa de a crea interogări. Prin deschiderea pe care o au pentru a răspunde acestor
interogări, bazele de date pot constitui obiectul aplicaţiilor scrise în oricare limbaj de
programare modern.
Interogarea bazei de date permite, în principal, extragerea şi afişarea unor
informaţii din înregistrările din una sau mai multe tabele; înregistrări care verifică
anumite condiţii, care sunt grupate în funcţie de anumite criterii sau sunt ordonate
crescător sau descrescător.
Termenul "interogare" este sensul principal al cuvântului englezesc "Query".
În bazele de date relaţionale acest termen are un sens mai larg. Acest termen se
referă, pe lângă interogările de extragere (selecţie) şi la aşa -zisele interogări de
acţiune (de creare, de ştergere sau actualizare) pentru tabele le şi elementele lor
constitutive. Lucrul cu interogările este posibil prin implementarea limbajului SQL
într-un SGBD.
Interogările sunt în ultimă instanţă, comenzi ale unui limbaj simplu, structurat
de manevrare a informaţiilor din tabelele unei baze de date relaţionale. Acest limbaj

46
se numeşte SQL (abreviere pentru sintagma din limba engleză: structured query
language, care se traduce în limba română: limbaj structurat de interogare).
Rezultatul execuţiei unei cereri, în majoritatea limbajelor, se numeşte vedere,
deoarece este un cadru în care sunt accesibile o anumită parte a informaţiilor din
baza de date. Cele mai importante moduri de vizualizare a interogărilor sunt: mo dul
proiectare, foaie de date şi vizualizare SQL. Important de reţinut este faptul că e
vorba despre acelaşi conţinut, etalat în trei moduri diferite de vizualizare.
Dintre aceste posibilităţi, modul proiectare este cel mai recomandat pentru a
crea interogări în mod eficient (interogări simple).
Pentru a crea o cerere de interogare în modul proiectare se parcurg paşii:
 Din fila Creare, din ultimul grup de instrumente se face clic pe butonul
Proiectare interogare.

 Sistemul deschide automat fereastra de creare asistată a interogărilor.


 Se afişează o casetă de dialog cu titlul Afişare tabel care conţine cadrele de
pagini Tabele, Interogări şi Ambele. În aceste cadre de pagină sunt afişate toate
tabelele şi interogările din baza de date curentă. Interogarea care va fi creată va
conţine rânduri şi coloane derivate din tabelele sau interogările pe care utilizatorul le
va extrage din caseta Afişare tabel. Pentru a extrage obiecte, se face dublu clic pe
numele fiecărui obiect care se doreşte a fi folosit. Ace astă casetă de afişare a
tabelelor se ascunde printr-un clic pe butonul Închidere.

47
 Automat apare vizibililă ultima filă cu instrumente de lucru pentru
interogări, şi anume fila Instrumente interogări/Proiectare.

Fereastra de lucru are două părţi:


 În partea de sus sunt afişate casetele cu structuri de înregistrări ale
tabelelor sau interogărilor selectate din caseta afişare tabel. Dacă nu e vizibilă caseta
Afişare tabel, acest lucru se poate face selectând din panglică instrumentul Afişare
tabel sau făcând clic dreapta şi apoi selectare Afişare tabel.
 Partea de jos a ferestrei se numeşte grilă de proiectare ( design grid), şi
conţine elemente cu ajutorul cărora se pot construi interogări . Aceasta mai este
cunoscută şi sub numele de grilă QBE (Prescurtare de la sintagma din limba engleză:
Query By Exemples care poate fi tradusă în româneşte Interogare prin exemple).

Câmpurile se pot prelua din structurile sursă prin glisarea lor din casetele de
structuri în primul rând al grilei QBE (rândul Câmp), unde se înscriu câmpurile
interogării rezultate. Câmpurile pot fi înscrise şi efectiv în această linie sau alese din
lista ascunsă ataşată liniei câmp din grilă.
Dacă se doreşte aducerea tuturor câmpurilor dintr-o tabelă, se scrie semnul
„*‖ în rândul câmpurilor, iar în rândul tabel se înscrie tabelul în cauză.
Pe lângă câmpurile preluate din tabelele sau interogările disponibile,
interogările pot conţine şi câmpuri calculate. Calculele se pot face linie cu linie sau
pe grupuri de înregistrări. Pentru a se obţine o coloană în primul caz, se înscrie în
linia Câmp formula de calcul care are forma generală:
Nume-rezultat: expresie_aritmetică_sau_logică
De exemplu: Valoarea: cantitate*[Pret unitar]
vârsta: (Date() - [data naşterii])/365
NB: Expresia Date() se referă reprezintă o funcţie care returnează data
sistemului.

Exerciţii:

1. Să se extragă din tabelul PROD numele, unitatea de măsură şi pretul cu


TVA.

2. În modul Vizualizare SQL observaţi comanda SQL construită.

48
Rezolvare:

1. În fila Creare a
panglicii, se alege
penultima opţiune
Proiectare interogare. În
caseta Afişare tabel se
selectează „Prod‖, se
apasă Adăugare şi apoi
Închidere.
Se glisează apoi
câmpurile DenProd şi UM
din caseta cu structura
tabelului „Clienti‖ în
rândul Câmp din grila
QBE, iar pentru al treilea câmp se scrie expresia "pret cu TVA": [pret]*1,19.
Lansarea în execuţie a interogării se face apăsând butonul cu semnul „!‖ din
fila specială de instrumente de proiectare interogări din panglică. Pentru eventualele
modificări se alege din nou modul proiectare din meniul primei op ţiuni, Vizualizare,
din fila mai sus amintită.

2. Se alege din meniul


Vizualizare din panglică,
opţiunea Vizualizare SQL şi
se obţine comanda:
SELECT
CLIENTI.Dencli,
CLIENTI.Adresa,
CLIENTI.Telcli
FROM CLIENTI;
Plasăm în figură
interogarea în modurile
foaie de date şi SQL.
Pentru a face calcule
pe grupuri de înregistrări, trebuie adăugată o linie, cu numele Total, în grila QBE,
acţionând în panglică asupra butonului Σ Totaluri. Celulele din această linie trebuie
neapărat să conţină ceva dacă este bifată caseta din rândul afişare a coloanei la care
se referă. În acest caz, pe rândul total trebuie să existe, fie expresia Grupare după,
fie o funcţie de grup (sumă, medie, contor, min, max, etc).

49
Exerciţiu:

1. Să se extragă din tabela „ANG”, media vechimii tuturor angajaţilor.

2. Să se extragă din tabela „ANG”, suma salariului angajaţilor pe departamente.

3. În modul Vizualizare SQL observaţi comanda SQL construită la punctul 2.

Rezolvare:

1. Se creează o nouă interogare, în modul proiect alegându-se ca sursă tabelul


„ANG‖. În grila QBE, prima coloană, în prima celulă se face clic şi apoi se înscrie:
vechimea:(Date() - DataAnga)/365
În panglică se acţionează asupra butonului Σ Totaluri pentru a se adăuga
rândul Total la grilă. În acest rând, la coloana vechimea se alege din lista ataşată,
funcţia Medie.
Se lansează în execuţie interogarea. Comanda SQL corespunzătoare este
afișată în medalion în figură. Și rezultatul execuției interogării este suprapus într -un
medalion peste figură.

Dacă se dorește ca să se partcilularizeze rezultatul, este accesibilă modificarea


proprietăților, în Foaia de proprietăți.

50
2. Se creează o nouă interogare, în modul proiect, alegându-se ca sursă tabelul
„ANG‖. În grila QBE, prima coloană se alege câmpul „NrDept‖, iar în a doua se
alege câmpul „Sal‖. Se adaugă linia de total, în care se înscrie pentru prima coloană
Grupare după iar la a doua coloană se alege funcţia Sum.
Se lansează în execuţie interogarea, iar rezultatul şi comanda SQL
corespunzătoare sunt:

SELECT ANG.NrDept, Sum(ANG.Sal) AS [Suma salariu pe departamente]


FROM ANG
GROUP BY ANG.NrDept;
NrDept Suma salariu pe departamente
10 7450
20 9775
30 9400

3.4. Crearea interogărilor peste mai multe tabele


Pentru formularea unor cereri de interogare bazate pe mai multe tabele sau
interogări, este necesar ca între acestea să existe legături. Dacă relaţiile au fost create
prin funcţiunea Relaţii din fila Instrumente bază de date, precum s-a explicat în
capitolul anteriror, relaţiile pot fi considerate permanente. În afara acestora, există
unele relaţii stabilite în timpul executării interogărilor.
Primul tip de relaţii este vizibil, în mod automat, şi în partea de sus a ferestrei
pentru realizarea înregistrărilor.
Atunci când se încearcă o interogare din mai multe tabele şi/sau cereri de
interogare, trebuie verificată natura reală a relaţiilor dintre acestea pentru ca datele
din noua interogare să fie corespunzătoare cerinţelor problemei.
O relaţie care nu a fost definită corect duce la rezultate inexplicabile.
Dacă se face o cerere de interogare din două tabele cu un număr de n şi
respectiv m înregistrări, şi nu se stabileşte nici o relaţie între tabelele sursă, atunci
rezultatul va conţine m x n înregistrări.

51
Explicarea stabilirii relaţiilor în interogări, o vom exemplifica cu ajutorul a
două tabele: „Prod” şi „FactProd”, care au structurile ce pot fi deduse din
conţinutul prezentat în figură:

Între aceste două tabele există o relaţie de 1 la n prin câmpul cod, de la


„Prod” spre „FactProd‖. Acest lucru trebuie înţeles prin faptul că fiecare produs
poate fi conţinut în mai multe facturi.
Dacă nu există legăturile necesare între tabele, acestea se pot stabili doar
pentru interegarea curentă, printr-o procedură similară stabilirii relaţiilor între
tabelele bazelor de date, prin glisarea mouse-ului de pe câmpul de legătură din tabela
principală spre câmpul de legătură din tabela secundară.
Cele două câmpuri trebuie să fie de acelaşi tip şi dimensiune şi pot fi chei
primare sau externe. Dacă deja există o legătură, permanentă sau propusă de sistem,
caracteristicile acesteia pot fi modificate sau pur şi simplu legătura poate fi ştearsă.
În stabilirea relaţiilor în interogări, există trei posibilităţi (vez i figura cu
proprietăţi de asociere):

52
Pentru prima posibilitate, relaţia este definită astfel încât, în asocierea celor
două tabele se iau înregistrările pentru care câmpurile de relaţie au valori egale. Este
cel mai întâlnit tip de relaţie, se numeşte echicompunere şi, în exemplul nostru, se
descrie în comanda SQL, astfel:
FROM [Prod] INNER JOIN FactProd ON Prod.Codpro = FactProd.Codprod

Pentru cea de a doua posibilitate, relaţia este definită astfel încât, în asocierea
celor două tabele se iau toate înregistrările din catalog, şi înregistrările din rulaj
pentru care câmpurile de relaţie au valori egale. Relaţia se numeşte compunere
externă stânga. În exemplul nostru, în comanda SQL, relaţia este descrisă astfel:
FROM [Prod] LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod

În cea de a treia posibilitate, relaţia este definită astfel încât, în asocierea celor
două tabele, se iau toate înregistrările din rulaj, şi înregistrările din catalog pentru
care câmpurile de relaţie au valori egale. Pentru exemplul nostru, în comanda SQL,
relaţia este descrisă astfel:
FROM [Prod] RIGHT JOIN FactProd ON Prod.Codpro = FactProd.Codprod

Exerciţiu:

Să se extragă din tabelele „Prod” şi „FactProd‖ valoarea produselor pe


facturi. Să se verifice rezultatul obţinut prin cele 4 posibilităţi din punct de vedere al
asocierii: cele 3 din figura de mai sus şi ruperea legăturii.

53
Rezolvare:

Se creează o nouă interogare, în modul proiect alegându-se ca sursă tabelele


„Prod” şi „FactProd‖. Se glisează apoi câmpurile NrFact, DataFact, DenProd
casetele cu structurile tabelelor în rândul Câmp din grila QBE, iar pentru al patrulea
câmp se scrie expresia Pret*Cant.
În primul caz vom verifica rezultatul dacă nu există nici o legătură între
tabele, apoi se verifică rezultatul în celelalte 3 posibilităţi de asociere. Rezultatele
obţinute sunt prezentate în tabelul următor:
DenProd

DenProd

DenProd

DenProd
Datafact

Datafact

Datafact

Datafact
Nrfact

Nrfact

Nrfact

Nrfact
Val

Val

Val

Val
1 21.10.2009 Ulei 49,05 1 21.10.2009 Ulei 65,40 1 21.10.2009 Ulei 65,40 1 21.10.2009 Ulei 65,40

1 21.10.2009 Zahar 46,50 5 24.10.2009 Ulei 35,97 5 24.10.2009 Ulei 35,97 5 24.10.2009 Ulei 35,97

1 21.10.2009 Lapte 43,50 4 23.10.2009 Ulei 39,24 4 23.10.2009 Ulei 39,24 4 23.10.2009 Ulei 39,24

1 21.10.2009 Malai 33,75 1 21.10.2009 Zahar 46,50 1 21.10.2009 Zahar 46,50 1 21.10.2009 Zahar 46,50

1 21.10.2009 Ulei 65,40 5 24.10.2009 Zahar 77,50 5 24.10.2009 Zahar 77,50 5 24.10.2009 Zahar 77,50

1 21.10.2009 Zahar 62,00 2 22.10.2009 Lapte 87,00 2 22.10.2009 Lapte 87,00 2 22.10.2009 Lapte 87,00

1 21.10.2009 Lapte 58,00 5 24.10.2009 Lapte 58,00 5 24.10.2009 Lapte 58,00 5 24.10.2009 Lapte 58,00

1 21.10.2009 Malai 45,00 6 25.10.2009 Lapte 43,50 6 25.10.2009 Lapte 43,50 6 25.10.2009 Lapte 43,50

2 22.10.2009 Ulei 98,10 3 22.10.2009 Lapte 52,20 3 22.10.2009 Lapte 52,20 3 22.10.2009 Lapte 52,20

2 22.10.2009 Zahar 93,00 4 23.10.2009 Lapte 43,50 4 23.10.2009 Lapte 43,50 4 23.10.2009 Lapte 43,50

2 22.10.2009 Lapte 87,00 Malai

2 22.10.2009 Malai 67,50

5 24.10.2009 Ulei 81,75

5 24.10.2009 Zahar 77,50

5 24.10.2009 Lapte 72,50

5 24.10.2009 Malai 56,25

5 24.10.2009 Ulei 35,97

5 24.10.2009 Zahar 34,10

5 24.10.2009 Lapte 31,90

5 24.10.2009 Malai 24,75

5 24.10.2009 Ulei 65,40

5 24.10.2009 Zahar 62,00

5 24.10.2009 Lapte 58,00

5 24.10.2009 Malai 45,00

6 25.10.2009 Ulei 49,05

6 25.10.2009 Zahar 46,50

6 25.10.2009 Lapte 43,50

6 25.10.2009 Malai 33,75

54
DenProd

DenProd

DenProd

DenProd
Datafact

Datafact

Datafact

Datafact
Nrfact

Nrfact

Nrfact

Nrfact
Val

Val

Val

Val
3 22.10.2009 Ulei 58,86

3 22.10.2009 Zahar 55,80

3 22.10.2009 Lapte 52,20

3 22.10.2009 Malai 40,50

4 23.10.2009 Ulei 39,24

4 23.10.2009 Zahar 37,20

4 23.10.2009 Lapte 34,80

4 23.10.2009 Malai 27,00

4 23.10.2009 Ulei 49,05

4 23.10.2009 Zahar 46,50

4 23.10.2009 Lapte 43,50

4 23.10.2009 Malai 33,75

În primul caz, atunci când nu au fost definite legături între tabele, s -au făcut
asocieri pentru fiecare dintre cele 4 tupluri din primul tabel (cu structura DenProd –
câmp individual şi Pret – ca parte componentă pentru Val) cu fiecare dintre cele 10
tupluri din al doilea tabel (cu structura NrFact şi DataFact – câmpuri individuale şi
Cant – ca parte componentă pentru Val). Au rezultat 40 de articole.
În cel de-al doilea caz s-au făcut asocieri doar petru tuplurile care provin din
articole în care Prod.Codpro = FactProd.Codprod, rezultând 10 articole.
Pentru cel de-al treilea caz s-a făcut adăugare la rezultatul cazului doi,
tuplurile din tabelul Prod care nu au corespondent în tabelul FactProd (e vorba de
produsul Malai).
În cel de-al patrulea caz, s-ar fi făcut adăugiri la rezultatul cazului al doilea,
tupluri din tabelul FactProd care nu au corespondent în tabelul Prod, dar nu au fost
găsite.

Exerciţiu:
Să se extragă din tabelele „Clienti”, „FactGen”, „Prod” şi „FactProd‖
valorile din toate câmpurile şi din toate înregistrările, respectând relaţiile dintre
tabele.
Rezolvare:
Se creează o nouă interogare, în modul proiect alegându-se ca sursă tabelele
„Clienti”, „FactGen”, „Prod” şi „FactProd‖. Se glisează apoi câmpurile celor patru
tabele, avându-se grijă ca dintre câmpurile de relaţie să fie incluse doar o parte,
55
salvăm interogarea cu numele totul si toate.

totul si toate

Codcli Dencli Adresa Telcli Nrfact Datafact Delegat Codprod DenProd UM Cant Pret

222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1075 Zahar kg 15 3,1

222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1009 Ulei Fl 20 3,27

222222 SC Secundul SRL Str.Verii nr 2 0261222222 2 22.10.2009 Popescu 7023 Lapte l 30 2,9

333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir 1075 Zahar kg 25 3,1

333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir 1009 Ulei Fl 11 3,27

333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 5 24.10.2009 Trandafir 7023 Lapte l 20 2,9

222222 SC Secundul SRL Str.Verii nr 2 0261222222 6 25.10.2009 Popescu 7023 Lapte l 15 2,9

111111 SC First SRL Str Primaverii nr 1 0261111111 3 22.10.2009 Anton 7023 Lapte l 18 2,9

111111 SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton 1009 Ulei Fl 12 3,27

111111 SC First SRL Str Primaverii nr 1 0261111111 4 23.10.2009 Anton 7023 Lapte l 15 2,9

3.5. Selecţia şi sortarea datelor


Datele rezultate pot fi ordonate crescător sau descrescător, după unul sau mai
multe câmpuri. Pentru aceasta se realizează clic în celula de la intersecţia coloanei
câmpului cu caseta Sortare şi apoi se alege între Ascendentă sau Descendentă.
În cazul în care se specifică mai multe câmpuri de ordonare (chei de sortare),
operaţia se execută începând cu primul câmp din stânga introdus în expresia de
sortare şi continuând cu celelalte, spre dreapta.
Dacă succesiunea câmpurilor de sortare este alta decât la afişare, trebuie
introduse câmpuri care nu se afişează dar sunt intercalate în succesiunea de ordonare
dorită. Succesiunea câmpurilor de sortare influenţează rezultatul operaţiei de sortare
a articolelor.
Operaţia de selecţie se referă atât la selecţia informaţiilor din coloane, dar şi
la selecţia informaţiilor din rânduri. Pentru realizarea acestui aspect există linia
Criterii, unde se introduc criteriile de selecţie. Criteriile se înscriu în formatul:
Operator_relaţional expresie
Operator_relaţional poate fi =, >, <, >=, <=, !=, between, in etc.
Dacă nu se specifică niciun operator se consideră a fi semnul „=‖. Criteriile se
pot compune cu ajutorul operatorilor logici AND/OR şi o serie de cuvinte rezervate şi
expresii definite de utilizatori.

Exerciţiu:

Să se extragă, din tabelul „ANG”, numele şi funcţia angajaţilor care au


salariu între 1500 şi 3000, ordonaţi descrescător după vechime.

56
Rezolvare:

Se creează o nouă interogare bazată pe tabelul „ANG”. Se stabilesc ca şi


câmpuri ale interogării: [NumeA], [Fnc], [DataAnga] şi [Sal]. Câmpul DataAnga şi
Sal nu trebuie bifate la rândul Afişare şi la Criterii trebuie înscris >10, iar în rândul
Sortare pentru [DataAnga] se selectează Ascendentă.
Grila QBE este redată în figura de mai jos:

3.6. Salvarea unei interogări

Salvarea unei interogări se face la părăsirea ei, sau prin alegerea opţiunii de
meniu Salvare sau Salvare ca…, din meniul Butonului Office . O interogare
salvată poate fi folosită în obiecte ca şi cum ar fi un tabel, în special ca sursă de
înregistrări pentru formulare sau rapoarte. De asemenea, interesant es te faptul că o
interogare poate fi salvată sub formă de raport sau interogare.

3.7. Adăugarea şi eliminarea filtrelor

Filtrele au o menire asemănătoare interogărilor de selecţie deoarece ambele


selectează o anumită parte din date, pot ordona aceste date , pot furniza surse de date
pentru formulare sau rapoarte, permit modificarea informaţiilor din cadrul rezultat.
Chiar şi formatul ecranului pentru construcţie asistată a filtrului sau
înregistrărilor sunt foarte asemănătoare.

57
Alegerea filtrului în locul înregistrărilor este motivată atunci când operaţia de
extragere de informaţii este mai simplă. Dacă extragerea de informaţii este mai
laborioasă, atunci este de preferat să se aleagă interogările.
Există mai multe categorii de filtre. Probabil, cel mai simplu este filtrul de
selecţie, stabilit prin acţionarea instrumentului cu acelaşii nume, din fila Pornire a
panglicii Accesss. Dacă un tabel sau o interogare este vizualizată în modul Foaie
date, atunci când cursorul este într-o anumită celulă şi se face clic pe butonul
Selecţie din grupu Sortare şi selecţie, se selectează din foaia de date toate
înregistrările care au în câmpul curent o valoare care faţă de valoarea aleasă poate fi:
aceeaşi; diferită; mai mică; mai mare; sau într-un interval.
Filtrarea se mai poate efectua cu un clic dreapta aplicat unui câmp, într -un
tabel se deschide un meniu care are ca prime opţiuni operaţii de filtrare:
 Filtrare prin selecţie;
 Filtrare cu excluderea selecţiei;
 Filtrare pentru…;
 Eliminare Filtrare/sortare.
Filtrarea prin selecţie e descrisă în alineatul precedent şi redată în figura
următoare.

58
Filtrarea cu excluderea selecţiei extrage articolele care nu apar în cazul
anterior.
La Filtrare pentru se poate da un criteriu de căutare în câmpul curent. Dacă
pentru criteriu de selecţie se dă un text simplu, practic funcţionarea este identică cu
Filtrarea prin selecţie. Dar acest filtru este mai complex deoarece în caseta pentru se
pot introduce expresii, ca de exemplu:
 Mai mic „<‖ sau mai mare „<‖ decât anumite valori numerice sau literare;
 caracterul joker „*‖ pentru realizarea de expresii de forma „contine text‖,
„începe cu textul‖, „se termină cu textul‖, sau negarea acestor expresii etc.
Filtrele se pot aplica prin suprapunere, mereu reducându-se numărul
înregistrărilor. Revenirea la situaţia iniţială se face selectând din meniu opţiunea
Comutare filtrare.
Filtrele mai complexe se pot executa cu opţiunea Filtrare complexă, prin care
utilizatorul este ajutat să efectueze filtrări ale datelor cu ajutorul unei grile
asemănătoare grilei QBE (Vezi figura):

3.8. Limbaj Structurat de Interogare SQL (Structured Query


Language)
3.8.1. Limbajul SQL

Probabil că limbajul SQL este astăzi cel mai utilizat dintre limbajele
structurate pentru interogarea bazelor de date relaţi onale. SQL a devenit chiar un
standard pentru o gamă din ce în ce mai largă de sisteme de gestiune a bazelor de
date. Mai mult, toate limbajele de programare care vor să asigure utilizatorilor
posibilităţi de comunicare complexă şi rapidă cu bazele de date , au încorporată o
59
formă mai mult sau mai puţin dezvoltată de SQL. Pe lângă manipularea şi regăsirea
datelor, se efectuează şi operaţii complexe privind actualizarea şi administrarea bazei
de date.
SQL eare un set de comenzi în limba engleză, simple şi clare, care poate fi
utilizat atât de specialişti cât şi de nespecialişti. Nu este un limbaj procedural, nu are
proceduri de control, fiecare SGBD având un motor care are printre func ţiuni sarcina
optimizării cererilor.
Limbajul SQL foloseşte cuvintele select, insert, delete ca părţi ale setului de
comenzi.
SQL pune la dispoziţia programatorilor comenzi pentru rezolvarea unor
probleme ca:
 date interogate;
 inserarea, extragerea şi ştergerea rândurilor intr-un tabel;
 crearea, modificarea şi ştergerea obiectelor de tip baza de date;
 controlul accesului la baza de date şi la obiectele de tip baza de
date;
 garantarea consistentei bazei de date.

Limbajul SQL a fost dezvoltat într-un prototip de sistem de management a


bazelor de date relaţionale, System R, de către compania IBM, la mijlocul anilor
1970. În 1979, Corporaţia Oracle introduce prima implementare a SQL în varianta
comercială.
Există un anumit grad de standardizare a limbajului SQL, mai multe sisteme
de gestiune a bazelor de date recunoscând principalele instrucţiuni ale acestuia (de
exemplu: Oracle, Access, Sysbase etc.).
Pe plan mondial, standardul în domeniu este considerat ANSI (American
National Standards Institute).
SQL are în vedere atât aspectele de definire, interogare, manipulare a dat elor,
procesare a tranzacţiilor, cât şi caracteristicile complexe privind integritatea
informaţiilor, cursoarele derulante sau joncţiunile externe. Mulţi producători de
sisteme de gestiune a bazelor de date furnizează propriile extensii ale limbajului
SQL, asigurându-şi astfel exclusivitatea.
ACCESS utilizează versiuni standardizate ale SQL, prin setarea mediului la
SQL ANSI-89 sau SQL ANSI-92. Mediul ACCESS încurajează utilizarea limbajului
SQL în scopul optimizării şi eficientizării lucrului cu bazele de date.
SGBD-urile manipulează, prin prisma instrucţiunilor SQL, structuri de date,
instrucţiunile SQL reprezentând unul dintre modurile de vizualizare al diferitelor
colecţii şi structuri de date. Astfel comenzile SQL pot fi plasate în multe locuri din
ACCESS, acolo unde se introduce numele unui tabel, al unei interogări sau al unui
câmp.

60
În unele cazuri, ACCESS completează automat instrucţiunea SQL. De
exemplu, atunci când se utilizează un expert pentru a crea un formular sau raport care
preia date din mai multe tabele, ACCESS creează automat o instrucţiune SQL pe care
o utilizează ca setare pentru proprietatea Sursă înregistrări a formularului sau
raportului. Atunci când trebuie creată o casetă listă sau combo cu un expert, A CCESS
creează o instrucţiune SQL şi o utilizează ca setare pentru proprietatea Sursă
înregistrări a casetei listă sau a casetei combo.
De asemenea, SQL poate fi utilizat în:
► Argumentul Instrucţiune SQL al acţiunii de macrocomandă ExecuţieSQL.
Această facilitate este uzitată şi de limbajele clasice de programare pentru
acces la bazele de date.
► În cod, ca şir de caractere literale sau ca instrucţiune SQL care conţine
variabile şi controale.
► Proprietatea SQL a unui obiect QueryDef pentru a modifica instrucţiunea SQL
subordonată unei interogări.

În paragrafele anterioare ale acestui capitol au fost prezentate modalită ţi de


concepere automată a interogărilor folosind tehnica grafică a grilei QBE, prin care
informaţia definită şi apoi modificată pe grila QBE este automat transformată într-o
instrucţiune SQL care este posibil de vizualizat sau actualizat în modul Vizualizare
SQL. Grila QBE are limite în realizarea de interogări complexe, motiv pentru care
însuşirea temeinică a clauzelor comenzilor limbajului SQL este indispensabilă în
realizarea unei activităţi de proiectare, administrare şi utilizare a bazelor de date.
Implementările în diferite limbaje SQL diferă câte puţin, fiecare prin sintaxă.
În ACCESS principalele reguli sunt redate mai jos:
► o comandă se încheie cu ";" ;
► comenzile SQL pot fi pe una sau mai multe linii;
► clauzele sunt uzual plasate pe linii separate;
► comenzile SQL nu sunt 'case sensitive';
► într-o interogare unde se folosesc câmpuri din mai multe tabele, pentru a
separa numele tabelului de numele câmpului, se va utiliza modelul:
tabel.câmp;
► dacă se folosesc spaţii sau diacritice în numele câmpurilor sau tabelelor,
aceste nume trebuie să fie încadrate între paranteze drepte;
► elementele din listele diferitelor clauze sunt separate prin virgulă;
► valorile de tip şir de caractere sunt încadrate între apostrof sau ghilimele;
► în expresiile din cadrul clauzelor se folosesc operatorii aritmetici,
relaţionali şi logici obişnuiţi din informatică;

61
► simbolurile „?‖ şi „*‖ sunt folosite pentru a desemna unul sau mai multe
caractere de înlocuire 5;
► valorile de tip dată/timp sunt încadrate cu caracterul „#‖.

Pentru explicarea entităţilor şi structurii unui limbaj de programare se


utilizează metalimbajul. Când în descrierea unei instrucţiuni anumite părţi
constitutive por să lipsească, acestea sunt intercalate între paranteze 6 drepte [ ]. Dacă
dintre câteva elemente este necesară optarea penntru unul dintre ele, elementele sunt
intercalate între acolade { }, separate de caracterul pipeline |. Dacă un anumit tip de
componentă se poate repeta, acest fapt se notează cu trei puncte „…‖.

3.8.2. Comenzi destinate tabelelor

Principalele comenzi SQL pentru definirea datelor sunt următoarele:


CREATE TABLE,
ALTER TABLE,
DROP TABLE,
CREATE INDEX.

Pentru crearea unei tabele se utilizează comanda:

CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2
type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]]) .

Printre cele mai importante tipuri de date folosite amintim: Character, Memo,
Number, Integer, Decimal, Logical, Date, OLE Object etc. Numele tabelei trebuie să
fie unic în cadrul bazei de date şi să respecte cerinţele identificatorilor. Aceleaşi
cerinţe apar şi pentru numele câmpurilor, în plus există posibilitatea duplicării lor în
cadrul bazei de date, dar se păstrează unicitatea în tabelă. Clauza NOT NULL arată că
în câmpul respectiv nu se pot stoca valori de tip NULL.
Un alt exemplu pentru crearea unei tabele ANG pe care o vom folosi în
capitolele următoare, este comanda:

CREATE TABLE ANG (NrAng integer NOT NULL, NumeA text(10 ), Fnc
text(10), CSf integer, DataAnga DATE, Sal currency, Rate currency, NrDept integer
NOT NULL);

5
Caractere jocker
6
A nu se confunda cu utilizarea acestor paranteze în metalimbaj cu utilizarea lor în VBA pentru
delimitarea numelor de identificatori compuse din mai multe cuvinte
62
Pentru modificarea structurii unui tabel se utilizează comanda ALTER TABLE
cu următoarea sintaxă (simplificată):

ALTER TABLE table {ADD {COLUMN field type[(size)] [NOT NULL]


[CONSTRAINT index] | ALTER COLUMN tip de câmp[(dimensiune)] |
CONSTRAINT multifieldindex} |
DROP {COLUMN field I CONSTRAINT indexname} }

Exemplu: Se modifică în tabela ANG pentru ultimul câmp, tipul în Byte:


ALTER TABLE ANG ADD ALTER COLUMN NrDept Byte.

Comanda DROP TABLE nume_tabelă este folosită pentru a şterge complet o


tabelă dintr-o bază de date (structura şi valorile asociate).

3.8.3. Instrucţiunile de selecţie a datelor

Pentru selecţia datelor SQL are prevăzută instrucţiunea SELECT. Această


instrucţiune conţine mai multe clauze, dintre care doar primele două sunt obligatorii.
Pentru definirea interogărilor de selecţie simple se utilizează următoarea
sintaxă 7:

SELECT [predicat] { * | tabel.* | [tabel.]câmp1 [AS alias1] [, [tabel.]câmp2


[AS alias2] [, ...]]}
FROM expresie pentru tabele [IN bază de date externă]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

Predicat permite stabilirea modalităţii de manipulare a înregistrărilor din baza


de date asupra căreia se efectuează selecţia şi poate fi:
 ALL: permite includerea tuturor înregistrărilor ce îndeplinesc condiţiile
impuse. Cum frazele SELECT tabelă şi SELECT ALL tabelă au practic
acelaşi rezultat, calificativul ALL este destul de rar utilizat;
 DISTINCT: are ca efect eliminarea înregistrărilor care conţin duplicate în
câmpurile selectate, astfel se va afişa doar o apariţie a datei multiple;

7
Conform ajutorului Access
63
 DISTINCTROW: are în vedere înregistrările duplicate în ansamblul lor, nu
numai pe cele care au câmpuri duplicate;
 TOP: are ca efect prezentarea primelor articole rezultate, ca procent din
total sau în număr absolut.

Ceea ce urmează după predicat în prima clauză formează o listă de selec ţie în
care sunt cuprinse toate câmpurile care vor apărea în tabelă cu rezultatele interogării.
Câmpurile adăugate în rândul Field din grila Query a machetei grafice QBE, care au
marcată caseta de validare Show, sunt aceleaşi cu cele menţionate în lista de selecţie.
Simbolul „*‖ are rol de caracter jocker.
De fapt în această listă pot fi incluse şi expresii care pot sau nu să fie
sensibile la articolele din tabelele sursă. De asemenea, în scrierea interogărilor de
selecţie simple SQL ACCESS este posibilă şi folosirea funcţiilor totalizatoare. Cele
mai importante funcţii din această categorie sunt:
 COUNT: returnează numărul de înregistrări care respectă condiţii le
stabilite prin clauza WHERE;
 SUM: redă suma tuturor valorilor dintr-un câmp, operează numai cu valori
numerice;
 AVG: calculează valoarea medie a unui câmp numeric;
 MAX: permite determinarea celei mai mari valori dintr-un câmp;
 MIN: duce la obţinerea celei mai mici valori a unui câmp rămâne valabilă
şi aici restricţia privind clauza WHERE.

Aceste funcţii se mai numesc şi funcţii de grupare, iar mulţimea şi valorile


rezultatelor obţinute sunt direct condiţionate de clauza GROUP BY.
În cadrul listei de selecţie se pot defini şi alias-uri. Acestea reprezintă un
pseudonim (nume) asociat unui câmp astfel: câmp AS alias al funcţiei agregat.

Clauza FROM specifică numele tabelei sau tabelelor care vor forma suportul
interogării. Dacă în lista_selecţie se includ câmpuri din mai multe tabele, în faţa
numelui acestora trebuie precizată tabela din care fac parte. Aşa cum arătam la
regulile de sintaxă, pentru separarea numelor de tabele se utilizează semnul „,‖
(virgulă). Trebuie să precizăm faptul că în cadrul acestei clauze se pot menţiona pe
lângă tabele, ca surse de informaţii pentru interogările SQL, şi interogări care au fost
deja create.

În continuare redăm câteva exemplificări ale acestor precizări:


Pentru a selecta toate coloanele dintr-o tabelă se utilizează caracterul asterix
('*') după cuvântul SELECT.

64
SELECT *
FROM ANG;
NrAng NumeA Fnc Csf DataAnga Sal Rate NrDept
2000 CHIVU SOFER 2956 23.02.1999 950 30

2555 CONTRA VANZATOR 2956 19.12.2000 1250 400 30


2049 DOROS INGINER 2553 31.10.2000 2975 20
2731 MARCU ANALIST 2049 19.03.1999 3000 20
2956 NEGRU INGINER 2553 11.01.1999 2850 30
2084 OSAN ANALIST 2049 19.12.2000 3000 20
2789 POPA VANZATOR 2956 26.03.1999 1250 500 30
2396 POPAN SOFER 2084 13.01.1999 800 20
2553 RUSU DIRECTOR 19.02.1999 5000 10
2024 TULIAN VANZATOR 2956 23.01.1999 1500 30
2987 VUSCA VANZATOR 2956 15.09.1999 1600 300 30
2643 ZIMAN INGINER 2553 14.10.1999 2450 10

Pentru a lista salariile angajaţilor este necesară comanda:

SELECT NUMEA, SAL


FROM ANG;

NUMEA SAL
CHIVU 950
CONTRA 1250
DOROS 2975
MARCU 3000
NEGRU 2850
OSAN 3000
POPA 1250
POPAN 800
RUSU 5000
TULIAN 1500
VUSCA 1600
ZIMAN 2450

Uneori dorim să creăm noi coloane prin expresii. Regulile de sintaxă şi de


precedenţă sunt cele obişnuite, funcţie de tipurile de date ale operanzilor sau
câmpurilor ce concură la realizarea expresiilor. În următorul exemplu se evaluează
prima dată înmulţirile (Sal * 12 şi Comp * 12); apoi cele două valori produs sunt
adunate.

65
SELECT NumeA, Sal *12 - Rate * 12
FROM ANG;
NumeA Expr1001
CHIVU
CONTRA 10200
DOROS
MARCU
NEGRU
OSAN
POPA 9000
POPAN
RUSU
TULIAN
VUSCA 15600
ZIMAN

Câmpul se va numi Expr1001. Pentru ca sistemul să nu îi atribuie o denumire


implicită trebuie să se specifice un alias asemeni celui din exemplul de mai jos:

SELECT NumeA, Sal*12-Rate*12 as VenitAnual


FROM ANG;

SQL tratează corect valorile nule. Dacă apar în expresii, valorile nule
provoacă rezultatul Null, indiferent de tipul celorlaţi operatori implicaţi. Din păcate,
acest lucru se poate perpetua în obiectele în care aceste interogări vor fi folosite mai
departe. Pentru aceasta există funcţia Nz, care înlocuieşte expresiile Null cu o
anumită valoare, de obicei 0 pentru expresii care în mod firesc ar trebui să fie
numerice, "" pentru string, etc. Deci, pentru a face ca interogarea să funcţioneze
corect ea trebuie transformată sub următoarea formă:

SELECT NumeA, Sal*12 -Nz(Rate,0)*12 as


VenitAnual
FROM ANG;I
NumeA VenitAnual
CHIVU 11400
CONTRA 10200
DOROS 35700
MARCU 36000
NEGRU 34200
OSAN 36000
POPA 9000

66
SELECT NumeA, Sal*12 -Nz(Rate,0)*12 as
VenitAnual
FROM ANG;I
NumeA VenitAnual
POPAN 9600
RUSU 60000
TULIAN 18000
VUSCA 15600
ZIMAN 29400

Prin clauza WHERE se pot selecta numai anumite articole, şi anume acele a
care îndeplinesc criteriul descris. Parametrul criteriul ui de selecţie este o expresie
care are rezultatul obligatoriu logic. În expresia clauzei WHERE obligatoriu trebuie
să apară cel puţin un câmp. Clauza WHERE este opţională şi nu operează cu funcţii
totalizatoare. În cadrul condiţiei din clauza WHERE pot fi utilizaţi operatorii
relaţionali: (>, >=, <, <=, =, !=), logici: (AND, OR, NOT) şi SQL: (IN, BETWEEN,
LIKE, IS NULL). Apelând la aceştia, este posibilă construirea unor condiţii mai
complexe.

Redăm în continuare câteva exemple de utilizare a acestei clauze:


Pentru a afişa angajaţii anterior datei 01.01.2000, se dă comanda:

SELECT ANG.NumeA, ANG.DataAnga


FROM ANG
WHERE [DATAANGA]<=#1/1/2000#;
NumeA DataAnga
POPAN 13.01.1999
VUSCA 15.09.1999
POPA 26.03.1999
NEGRU 11.01.1999
ZIMAN 14.10.1999
MARCU 19.03.1999
RUSU 19.02.1999
TULIAN 23.01.1999
CHIVU 23.02.1999

Dacă se doreşte să se extragă angajaţii ai căror salariu este între 1500 şi 3000:

67
SELECT ANG.NumeA, ANG.Fnc
FROM ANG
WHERE (((ANG.Sal)>1500 And (ANG.Sal)<3000))
ORDER BY ANG.DataAnga;
NumeA Fnc
NEGRU INGINER
VUSCA VANZATOR
ZIMAN INGINER
DOROS INGINER

Presupunem că dorim să găsim angajaţii care sunt şefi, au unul din numerele
de marcă aparţinând (CSf):

SELECT NrAng, NumeA, Sal, CSf


FROM ANG
WHERE NrAng IN (2553, 2049, 2956, 2084);
NrAng NumeA Sal CSf
2049 DOROS 2975 2553
2956 NEGRU 2850 2553
2553 RUSU 5000
2084 OSAN 3000 2049

Pentru a selecta toţi INGINERii cu salarii peste 1500 şi toţi vânzătorii se


foloseşte:

SELECT NrAng,NumeA,Fnc,Sal,NrDept
FROM ANG
WHERE Sal > 1500
AND Fnc = 'INGINER'
OR Fnc = 'VANZATOR';
NrAng NumeA Fnc Sal NrDept
2987 VUSCA VANZATOR 1600 30
2789 POPA VANZATOR 1250 30
2049 DOROS INGINER 2975 20
2555 CONTRA VANZATOR 1250 30
2956 NEGRU INGINER 2850 30
2643 ZIMAN INGINER 2450 10
2024 TULIAN VANZATOR 1500 30

Dacă se doreşte selectarea tuturor INGINERilor şi a vânzătorilor cu salarii


peste 1500 se introduce:

68
SELECT NrAng,NumeA,Fnc,Sal,NrDept
FROM ANG
WHERE Sal 1500
AND (Fnc = 'INGINER'
OR Fnc = 'VANZATOR');
NrAng NumeA Fnc Sal NrDept
2987 VUSCA VANZATOR 1600 30
2049 DOROS INGINER 2975 20
2956 NEGRU INGINER 2850 30
2643 ZIMAN INGINER 2450 10

Parantezele specifică ordinea în care operatorii vor fi evaluaţi. În al doilea


exemplu operatorul OR este evaluat înaintea operatorului AND.
În astfel de operaţii complexe trebuie avută mare atenţie la precedenţa
operatorilor de toate tipurile, pentru că altfel rezultatul poate fi imprevizibil. Sumar,
regulile de precedenţă sunt redate în ceea ce urmează:
 Toţi operatorii sunt aranjaţi într-o ierarhie, ceea ce le determină precedenţa.
 Într-o expresie operaţiile sunt executate în ordinea precedenţei lor de la mare
la mică.
 Când operatorii au precedenţa egală atunci ei se evaluează de la stânga l a
dreapta.
1. Toţi operatorii de comparaţie şi SQL au precedenţa egală:
=,!=,,<=,>=,BETWEEN...AND,IN,LIKE,IS NULL.
2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE
not(sal=2000))
3. AND
4. OR.

De fiecare dată când există dubiu despre care dintre două operaţii vor fi
executate mai întâi când o expresie este evaluată, se recomandă utilizarea
parantezelor pentru clarificarea semnificaţiei dorite şi obţinerii rezultatului scontat.
Clauza ORDER BY se utilizează atunci când se doreşte ca rezultatele
interogării să fie ordonate după unul sau mai multe câmpuri_criteriu (definite drept
chei de sortare). Sortarea este opţională şi se poate realiza în mod crescător (ASC)
sau descrescător (DESC), separat pentru fiecare câmp din listă.
Exemplificare a folosirii acestei clauze este comanda prin care se extrag în
ordinea crescătoare a vechimii (inversă a valorilor coloanei DataAnga) date din
tabelul ANG:

69
SELECT NumeA,Fnc,DataAnga
FROM ANG
ORDER BY DataAnga DESC;
NumeA Fnc DataAnga
OSAN ANALIST 19.12.2000
CONTRA VANZATOR 19.12.2000
DOROS INGINER 31.10.2000
ZIMAN INGINER 14.10.1999
VUSCA VANZATOR 15.09.1999
POPA VANZATOR 26.03.1999
MARCU ANALIST 19.03.1999
CHIVU SOFER 23.02.1999
RUSU DIRECTOR 19.02.1999
TULIAN VANZATOR 23.01.1999
POPAN SOFER 13.01.1999
NEGRU INGINER 11.01.1999

Clauza GROUP BY precizează câmpul sau câmpurile pe baza cărora se va


efectua gruparea înregistrărilor. În acelaşi timp, prin intermediul acestei clauze, se
pot executa funcţiile agregate descrise în lista de selecţie pentru fiecare dintre
grupări (constituite pe baza câmpurilor de grupare). Echivalentul acestei clauze în
macheta grafică QBE de construcţie a interogării îl reprezintă rândul Total.

Pentru a calcula totalul salariilor pe departamente, se utilizează comanda:


SELECT SUM(SAL) AS [TOTAL DEPARTAMENT], NRDEPT
FROM ANG
GROUP BY NRDEPT;
TOTAL DEPARTAMENT NRDEPT
7450 10
9775 20
9400 30

Pentru a calcula suma salariulu și salariul mediu distribuite de către persoanele


cu funcții de conducere, se utilizează comanda:

SELECT Sum(ANG.SAL) AS Sumă, Avg(ANG.SAL) AS Medie, ANG.CSF AS Responsabil


FROM ANG
GROUP BY ANG.CSF;
Sumă Medie Responsabil
5000 5000,00
6000 3000,00 2049
800 800,00 2084
8275 2758,33 2553
6550 1310,00 2956

70
La prima vedere s-ar părea că clauza HAVING ar fi redundantă. Din contră, ea
este foarte necesară. Spre deosebire de WHERE, care acţionează înainte de a se
efectua gruparea înregistrărilor, HAVING va opera după definirea acesteia. Pentru
HAVING criteriul va fi aplicat câmpului definit ca argument al funcţiei agregat.
Altfel spus, când se foloseşte clauza GROUP BY şi este necesară şi o condiţie, se va
utiliza clauza HAVING.
Un exemplu edificator ar fi extragerea funcţiilor pentru care toţi angajaţii au
salariu mai mare decât 1500:
SELECT Fnc, MIN(Sal) as [salariu minim]
FROM ANG
GROUP BY Fnc
HAVING MIN(Sal) >= 1500
ORDER BY MIN(Sal);
Fnc salariu minim
INGINER 2450
ANALIST 3000
DIRECTOR 5000

Rezultatul este diferit de cel care de obține prin mutarea condiției la la clauza
WHERE. Interpretarea unei astfel de înregistrări ar fi: extragerea pe funcții a
salariului minim, pentru toți angajații cu salarii mai mari sau egale decât 1500:
SELECT Fnc, MIN(Sal) as [salariu minim]
FROM ANG
where Sal >= 1500
GROUP BY Fnc
ORDER BY MIN(Sal);
Fnc salariu minim
VANZATOR 1500
INGINER 2450
ANALIST 3000
DIRECTOR 5000

De remarcat faptul că se admite utilizarea unei funcţii agregat care nu apare în


lista de selecţie, precum şi apelarea la mai multe criterii de grupare.
Puterea limbajului SQL este pusă în evidenţă atunci când se lucrează cu mai
multe tabele, când se exploatează relaţiile sau chiar asocierea dintre ele. Operaţiile
de asociere induse de clauza JOIN au ca rezultat producerea tuturor combinaţiilor
posibile, pentru conţinutul informaţional al fiecărei tabele. Noile înregistrări care
rezultă în urma joncţiunii vor deveni disponibile pentru selecţiile ulterioare. La o
asociere pot participa mai mult de două tabele.
Principala modalitate de realizare a joncţiunii este sintetizată de următoarea
sintaxă, a celei de-a doua clauze a comenzii SELECT:
FROM nume_tabela1 {INNER|LEFT OUTER|RIGHT OUTER} JOIN
nume_tabela2
ON criteriul_de_asociere
71
[{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabela3
ON criteriul_de_asociere]...

Semnificaţia elementelor de sintaxă descrise mai sus este următoarea:


INNER, LEFT OUTER, RIGHT OUTER se referă la tipurile de joncţiuni
(INNER JOIN, internă de tip echivalent, LEFT OUTER JOIN, externă de stânga,
RIGHT OUTER JOIN, externă de dreapta). De remarcat faptul că SQL ACCESS
acceptă scrierea interogărilor externe fără specificarea explicită a lui OUTER.
JOIN specifică tabela care va fi asociată (nume_tabela2, nume_tabela3...)
tabelei precizată în clauza FROM,.
ON este criteriul de asociere şi arată relaţia dintre câmpurile pe care se
bazează joncţiunea. Unul se află în tabela asociată, iar cel ălalt există într-o altă
tabelă din lista cu numele tabelelor. Expresia criteriul_de_asociere conţine un
operator de comparaţie (=,<,>,<>,<=,>=) şi va returna valorile logice TRUE sau
FALSE.
Joncţiunile tip INNER JOIN determină o asociere a înregistrărilor din tabele,
astfel încât să rezulte doar informaţii din înregistrările din fiecare tabelă care
respectă criteriul de asociere.
Joncţiunile externe (OUTER) sunt de două tipuri: de stânga (LEFT OUTER
JOIN) şi de dreapta (RIGHT OUTER JOIN), fiind destul de puţin utilizate.
Echivalentul QBE al acestor categorii de joncţiuni este alegerea opţiunilor 1, 2 sau 3,
din caseta Join Properties, care au fost explicate într-un capitol precedent (3.4).
Ca exemplu, fie următoarea interogare totul si toate:

SELECT CLIENTI.Codcli, CLIENTI.Dencli, CLIENTI.Adresa, CLIENTI.Telcli,


FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod,
Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret
FROM Prod INNER JOIN ((CLIENTI INNER JOIN FactGen ON
CLIENTI.Codcli=FactGen.Codcli) INNER JOIN FactProd ON
(FactGen.Nrfact=FactProd.Nrfact) AND (FactGen.Datafact=FactProd.Datafact))
ON Prod.Codpro=FactProd.Codprod;

De observat că este este recomandabilă scrierea completă din punct de vedere


sintactic a numelui câmpurilor. Precedarea sintactică a numelui câmpurilor de numele
tabelului și semnul ‖.‖ e obligatorie, în multimea câmpurilor tabelelor la care se face
referire în clauza FROM, dacă o denumire de câmpuri apare de cel puțin două ori.
Același rezultat poate fi obținut fără a se recurgere la opțiunile JOIN în clauza
FROM, ci specificare condițiilor de legătură în clauza WHERE, precum în comanda
de mai jos:

72
SELECT CLIENTI.Codcli, CLIENTI.Dencli, CLIENTI.Adresa, CLIENTI.Telcli,
FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod,
Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret
FROM Prod, Clienti, FactGen, FactProd
WHERE (CLIENTI.Codcli=FactGen.Codcli) AND
(FactGen.Nrfact=FactProd.Nrfact) AND
(FactGen.Datafact=FactProd.Datafact)AND
(Prod.Codpro=FactProd.Codprod) ;

Opțiunea JOIN a fost introdusă în standardul SQL din 1992, până atunci,
specificarea relațiilor s-a făcut prin clauza WHERE.
Prin parametrii RIGHT sau LEFT opțiunea JOIN a adus și o simplificare a
unor comenzi. Fie, de exemplu, interogarea de extragere a totalului valorii și
cantității pe produse:
SELECT Prod.DenProd, Prod.UM, Sum(FactProd.Cant) AS SumăalCant, Prod.Pret, Sum([Cant]*[PRET]) AS
SumăValoare
FROM Prod LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod
GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;
TOTAL VALOARE SI CANT
DenProd UM SumăalCant Pret SumăValoare
Lapte l 98,00 2,9 284,20
Malai kg 2,25
Ulei Kg 43,00 3,27 140,61
Zahar kg 40,00 3,1 124,00

Fără opțiunea JOIN, trebuie să se recurgă pentru relații la clauza WHERE și,
pentru adăgarea produselor pentru care nu s-a facturat nimic, la opțiunea UNION:

SELECT Prod.DenProd, Prod.UM, Sum(FactProd.Cant) AS SumăalCant,


Prod.Pret, Sum([Cant]*[PRET]) AS SumăValoare
FROM Prod, FactProd
WHERE Prod.Codpro=FactProd.Codprod
GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;
UNION
SELECT Prod.DenProd, Prod.UM, 0.00 AS SumăalCant, Prod.Pret, 0.00 AS
SumăValoare
FROM Prod, FactProd
WHERE Prod.Codpro NOT IN
(SELECT DISTINCT CodProd FROM FactProd)
GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;

73
Scrierea unei interogări în cadrul alteia duce la apariţia unei subinterogări;
setul de rezultate obţinut de la o interogare va constitui argument pentru o alta.
Utilizatorul poate astfel să creeze legături între mai multe interogări SQL ACCESS,
pe baza unor câmpuri unice, cu rol de căutare în structura tabelelor. Subinterog ările
înlocuiesc interogările imbricate din versiunile precedente, cu performan ţe mult
îmbunătăţite. Pot fi construite şi prin varianta de lucru a machetei grafice QBE
ACCESS.
Cea mai simplă subinterogare are sintaxa următoare:
SELECT * FROM Tabela1
WHERE Tabela1.nume_ câmp operator
(SELECT nume_câmp FROM Tabela2 WHERE criteriul_de_selecţie);

Tabela1 şi Tabela2 vor avea un câmp comun (nume_câmp) care va reprezenta


de fapt câmpul de legătură ce stă la baza construirii subinterogării. Clauza SELECT
din subinterogare va avea acelaşi număr de câmpuri şi de natură similară cu cele din
clauza WHERE a interogării externe.
Operatorul poate fi unul relaţional sau unul dintre BETWEEN...AND, IN,
LIKE, IS NULL.
Ca exemplu redăm următoarea comandă:
SELECT DenProd FROM Prod
WHERE Pret=
(SELECT MAX(Pret) from Prod).

3.8.4. Instrucţiunile pentru manipularea datelor

Cele mai importante instrucţiuni sunt:


 INSER;
 UPDATE;
 DELETE.

Comanda INSERT se foloseşte pentru adăugarea de înregistrări la o tabelă. Ca


sursă a datelor pot fi o alte tabele, date fixe sau parametri.
Sintaxa comenzii este următoarea:
 pentru un articol:
INSERT INTO nume_tabelă [(câmp1[, câmp2[, ...]])]
VALUES (valoare1,valoare2...)
 pentru mai multe articole:

74
INSERT INTO nume_tabelă [IN baza_de_date_externă] [(câmp1[, câmp2[, ...]])]
SELECT [sursă.]câmp1[, câmp2[, ...]
FROM listătabele

În acest caz se adaugă înregistrări într-o tabelă, menţionându-se câmpurile şi


valorile asociate acestora. După lansarea în execuţie a interogării apare un mesaj de
avertizare privind adăugarea de noi înregistrări în baza de date şi caracterul
ireversibil al acestei operaţii.
În cadrul acestui tip de inserare a datelor trebuie să se respecte următoarele
reguli:
► valorile menţionate în clauza VALUES vor avea aceeaşi natură cu câmpurile
specificate în clauza INTO;
► mărimea valorii corespunzătoare fiecărui câmp va fi mai mică decât
dimensiunea câmpului;
► nu va fi obligatorie specificarea denumirii câmpurilor, deoarece SQL
ACCESS va asocia listei de valori câmpurile în ordinea din structura
înregistrării (prima valoare se va introduce în primul câmp, a doua valoa re, în
al doilea câmp s.a.m.d.);
► dacă un câmp are definiţia NOT NULL, va fi obligatorie introducerea unei
valori pentru acesta.

Exemplu:
Să se adauge un articol pentru un nou angajat, Paznic:
INSERT INTO Ang
values (8888, "VALCU" , "PAZNIC", 2553, #3/3/2009#,2000,null ,10)

Comanda DELETE are următoarea sintaxă:


DELETE FROM nume_tabelă [WHERE criteriul_de_ştergere] se
materializează în interogarea acţiune de ştergere parţială sau totală a înregistrărilor
din tabele. În acelaşi timp se va şterge doar conţinutul tabelei nu şi aceas ta (pentru
eliminarea tabelei se va apela la instrucţiunea DROP TABLE).

Exemplu:
DELETE FROM ANG WHERE NrAng = 8888

Comanda UPDATE are următoarea sintaxă:


UPDATE nume_tabelă
SET nume_câmp1 = valoare1 [,nume_câmp2 = valoare2]...
[WHERE criteriul_de_actualizare]

75
Această comandă are rolul şi de a modifica valorile câmpurilor din
înregistrările existente. Ca şi în cazul instrucţiunii INSERT, se va urmări dacă în
câmpul cu valori de actualizat sunt permise numai valori unice.
Atunci când se doreşte actualizarea datelor din mai multe câmpuri se foloseşte
virgula ca separator între câmpuri şi valorile acestora. Se pot utiliza mai multe
condiţii, WHERE apelând la operatorul logic AND pentru a limita actualizarea la
înregistrări mai bine specificate.

Exemplu:
Să se mărească salariile VANZATORilor cu 15%:
UPDATE Ang SET Sal= Sal * 1,15 where Fnc=”VANZATOR”;

76
CAPITOLUL IV. CREAREA ŞI UTILIZAREA
FORMULARELOR

4.1. Noţiuni generale

Pentru introducerea în siguranţă a informaţiilor în tabelele bazelor de da te se


recurge la utilizarea formularelor (în limba engleză: forms).
Deoarece bazele de date trebuie să poată gestiona un număr de articole de
ordinul miilor sau chiar milioanelor, la proiectarea formularelor trebuie să se
găsească soluţii pentru întreţinerea datelor în siguranţă, introducerea eficientă de
date, posibilitatea de regăsire a articolelor, în scopul modificării, asigurarea
concordanţei datelor introduse cu datele existente, verificarea şi partajarea accesului
utilizatorilor la bazele de date, vizualizarea rapidă a valorilor introduse şi apoi
tipărirea lor.
Crearea formularelor necesită activităţi complexe de analiză, proiectare şi
programare a sistemelor, care consumă cea mai mare parte din bugetul de timp alocat
creării şi implementării aplicaţiei de gestionare a bazei de date.
Majoritatea formularelor sunt legate de unul sau mai multe tabele şi interogări
dintr-o bază de date. Datele cu care lucrează formularul sau raportul sunt constituite
în sursa de înregistrări a formularului în câmpurile din tabelele şi interogările pe care
acesta se bazează. Un formular nu e obligatoriu să conţină toate câmpurile din fiecare
tabel sau interogare pe care se bazează.
Un formular legat de date memorează sau regăseşte informaţii din sursa de
înregistrări de bază. Pe lângă acestea formularele mai pot conţine şi alte informaţii,
cum ar fi: titlu, data şi numărul paginii (vezi figura).

Elementele grafice, cum sunt liniile şi dreptunghiurile, sunt memorate în


forma formularului.

77
Datele provin din câmpurile provenite din sursa de înregistrări de bază.
Un calcul provine dintr-o expresie, care este memorată în forma formularului.
Textul descriptiv este şi el memorat în forma formularului.
Aceste elemente se numesc controale. Un control este un o biect grafic care
poate fi poziţionat pe un formular sau raport, putând afişa date, putând fi legat de
efectuarea unor acţiuni declanşate de evenimente intervenite în rularea aplicaţiei sau
pur şi simplu sunt create pentru mai buna lizibilitate sau pentru scop estetic.
Asupra controalelor acţionează utilizatorii cu mouse-ul sau tastatura. Acţiunea
se poate face la un moment dat doar asupra unui singur obiect, aspect numit
focalizare. Obiectul care a primit focalizarea este, în mod normal, indicat prin
evidenţiere grafică. Focalizarea poate fi setată de utilizator sau de aplicaţie cu
ajutorul metodei SetFocus.

Mediile de proiectare a bazelor de


date pun la dispoziţia utilizatorilor diverse
instrumente pentru crearea de formulare. În
versiunea 2007 a Microsoft ACCESS au
fost introduse instrumentele de creare
formulare, grupate într-o zonă cu acelaşi
nume, în fila Creare a panglicii Access,
prezentate în figura alăturată.

Crearea formularelor se poate face:


 prin salvarea unui tabel sau interogări ca formular, creindu-se un formular
care afişează toate câmpurile şi înregistrările din sursa de date. În ACCESS 2007 a
fost introdus un instrument nou în fila creare în acest scop;
 utilizând expertul, caz în care utilizatorii sunt asistaţi de un expert care
pune întrebări şi creează un formular bazat pe răspunsurile primite;
 prin apelarea la unul dintre noile instrumente introduse în mediul de
proiectare şi întreţinere: Scindare formulare, Elemente multiple sau Dialog Modal.
Formularele astfel create pot fi particularizate în modul dorit, în modul Vizualizare
proiect. În Formularul scindat sunt generate automat, în partea de sus, toate
câmpurile unui tabel, iar în partea de jos, înregistrările în modul de vizualizare Foaie
de date. Un Formular cu elemente multiple, denumit şi formular continuu, permite
afişarea simultană a informaţiilor mai multor înregistrări. Un formular cu elemente
multiple într-o versiune iniţială poate fi confundat cu un tabel în modul Foaie de
date, dar fiind formular, poate fi particularizat. Un formular este de tip modal dacă
are setată proprietatea modal. Această proprietate face ca atunci când e terminată o
sesiune de editare într-un astfel de formular, fereastra să trebuiască închisă neapărat
înainte de a fi posibilă mutarea focalizării la alt obiect. Aici programatorii

78
beneficiază de tehnologii bazate pe obiecte şi - pentru sarcinile mai dificile - de
ajutorul limbajului Visual Basic. Ca şi în cazul tabelelor, odată cu creşterea
experienţei proiectanţilor, munca în modul Vizualizare proiect va fi preponderentă în
crearea sau particularizarea formularelor.
Spre exemplu formularul Produse este prezentat mai jos, în modul Proiectare
(în limba engleză: Design View).

Fereastra pentru
proiectarea
Panglica formularelor
Access
Instrumente pentru
crearea controalelor
Etichetă formularelor
Casetă
Casetă combinată
text
Panou
de
navigare Subformular
Foaia de
proprietăți

Dreptunghi

Buton Linia de
stare

În modul Vizualizare proiect, într-un formular, se pot particulariza


următoarele elemente:
 Pentru controlul şi asistarea utilizatorului se pot seta proprietăţile
formularului pentru a permite sau preveni utilizatorii de la adăugarea, ştergerea sau
editarea înregistrărilor afişate într-un formular. De asemenea se poate adăuga Ajutor
particularizat unui formular pentru a asista utilizatorii la folosirea formularului.
 În fereastra Formular se pot adăuga sau elimina butoanele Maximizare şi
Minimizare, butoanele de navigare, meniuri rapide şi alte elemente ale ferestrei
Formular.
 În secţiuni se poate adăuga, elimina, ascunde sau redimensiona antetul,
subsolul şi secţiunea detalii ale unui formular. De asemenea, se pot seta proprietăţile
secţiunii pentru a controla aspectul şi imprimarea unui raport.
 Controale. Se pot muta, redimensiona sau seta proprietăţile fonturilor unui
control. De asemenea, se pot adăuga controale pentru a afişa valori calculate,

79
totaluri, data şi ora curentă şi alte informaţii folositoare într -un formular. Se pot crea
proceduri particularizate de tratare a evenimentelor ocazionate de lucrul cu
controalele.

4.2. Controale

Sistemul de gestiune a bazelor de date ACCESS oferă utilizatorilor un mediu


de proiectare orientat pe obiecte, dezvoltat în special pentru realizarea elementelor de
interfaţă.
Obiectele au diverse proprietăţi prin care se formatează caracteristicile de
stare, legătura cu datele sau modul de reacţie la evenimente.
Pentru a putea fi incluse în formulare, există instrumente de creare a acestora,
grupate într-o zonă a Controalelor, în fila Instrumente proiectare formular, din
panglica Access. Procedura de amplasare a acestora în formulare este următoarea:
 se face clic pe tipul de control dorit;
 se selectează o zonă pe formular unde acest control va fi amplasat;
 când mouse-ul este lăsat, controlul este ataşat;
 configurarea parametrilor controlelor prin atribuirea de valori
Inserare sfârşit pagină

Instrument selecţie
Cadru independent
Buton de comutare
Inserare diagramă
Grup de opţiuni

Efect special
Casetă combo

Grosime linie
Dreptunghi

Tip linie
Linie Buton opţiune

Control filă
Inserare pagină
Cadru obiect legat

implicite control
Subformular/ subraport

Imagine

Inserare hyperlink
Ataşament

Culoare linie
Selectare totală
Stabilire proprietăţi
Casetă listă

Caseta de selectare

corespunzătoare în rubricile din Fila proprietăţilor

80
Toate aceste operaţii se fac în modul vizualizare proiectare (DesignView), şi
constituie activitatea preponderentă a proiectanţilor de aplicaţii de baze de date,
munca programatorilor de interfeţe de lucru cu informaţiile din baza de date.
Măiestria utilizării controalelor se deprinde odată cu experienţa, cu asimilarea
accepţiunii proprietăţilor şi reacţiei controalelor la evenimente. Instrumentele din
fila Instrumente proiectare formular, din panglica Access destinate proiectării
controalelor pentru formulare, care nu sunt prezentate împreună cu numele lor, le -
am prezentat în figura anterioară:
Proprietăţile unui obiect sunt disponibile pentru modificare dacă numele
acelui obiect se găseşte în titlul ferestrei de proprietăţi. Fereastra de proprietăţi este
disponibilă prin aplicarea unui clic pe instrumentul Foaie de Proprietăţi din panglica
Access sau făcând clic dreapta pe un obiect şi alegând ultima opţiune (Proprietăţi)
din meniul contextual.
Poate pentru începători găsirea proprietăţilor formularului este mai dificilă,
dar clic-ul dreapta trebuie făcut în afara zonei unde se aşează obiectele. Există
controale simple, nelegate de date, care nu au proprietatea Control source. Dintre
acestea amintim: etichetele, liniile, dreptunghiurile sau unele imagini.
Dar există controale cu mult mai complexe decât cele de mai sus, chiar mai
complexe decât casetele de text. Cele mai multe dintre ele, cânt sunt create în modul
design, apelează automat la un expert (wizard). Aşa sunt, de exemplu controalele tip:
Casetă combinată, Buton de comandă, Casetă cu listă sau Control de pagini.
Un regim oarecum diferit de cel al controalelor îl au subformularele.
Un subformular este un formular inclus într-un alt formular, pentru a permite
afişarea datelor din mai multe tabele sau cereri de interogare, aflate în general în
relaţii de tip unu la unu sau unu la mai mulţi. Astfel, în formularul principal vor fi
afişate datele din partea unu a relaţiei, iar în subformular cele din partea mai mulţi.
În mod implicit, legătura dintre un formular şi un subformular reflectă legătura dintre
tabelele pe care se bazează. Prin urmare, la un moment dat în formular va fi afişată o

înregistrare aflată de partea unu a relaţiei iar în subformular înregistrările


corespondente din tabela aflată de partea mai mulţi a acesteia.
Într-un formular care conţine un subformular se pot specifica criterii de
filtrare numai asupra câmpurilor din formularul principal.
Ca exemplu putem prezenta o relaţie 1 – n, dintre un catalog de materiale şi
documente de mişcare a acestor materiale astfel:

81
Un subformular poate fi înglobat într-un formular în două moduri: foaie de
date (în limba engleză: Datasheet view) sau formular (în limba engleză: Form view).
Atunci când se include un subformular într-un formular principal trebuie
realizate următoarele operaţii:
 se creează formularul principal;
 se creează subformularul;
 se adaugă obiectul subformular din ToolBox într-o manieră similară cu
adăugarea oricărui control. Dacă tabelele pe baza cărora sunt create
formularele sunt într-o anumită relaţie, ACCESS-ul propune stabilirea
acestei relaţii şi între cele două formulare.
Odată înglobat un subformular într-un formular, se poate verifica rezultatul
operaţiunii în modul Vizualizare machetă. Eventualele retuşuri se pot face în modul
Proiectare.

4.3. Proiectarea unui formular legat de o sursă de înregistrări

4.3.1. Proprietăţile esenţiale

Un formular este o fereastră de tip Windows. Acesta are obiecte întâlnite în


ferestrele aplicaţiilor Windows.
Pentru introducerea datelor de la tastatură se folosesc de obicei casete de
editare text. În aceste casete se folosesc foarte multe dintre regulile de scriere de text
din editoarele Microsoft referitoare la deplasare, selectare, corectare, căutare, etc.
Deoarece, cea mai importantă menire a formularelor este de introducere de
date într-un formular, cele mai importante proprietăţi ale obiectelor sunt cele legate
de date. Pentru formular această proprietate este Sursa înregistrări (în limba engleză:
Record Source) şi reprezintă tabelul sau interogarea de unde formularul îşi extrage
datele.

82
Pentru casete de text, ca de altfel pentru majoritatea controalelor, legătura cu
datele este realizată de proprietatea Sursă Control (în limba engleză: Control Source)
şi reprezintă de obicei câmpurile tabelului sau interogării de unde sunt luate valorile
pentru o înregistrare.
Pentru formular "Record Source" se poate stabili proprietatea mai târziu, în
modul Design view. Sunt disponibile pentru modificare proprietăţile unui obiect dacă
numele acelui obiect se găseşte în titlul ferestrei de proprietăţi.
Fie, de exemplu, tabelul CLIENTI, care are următoarea structură:

Cum se construieşte un formular pentru introducerea acestor date?


Tabelul trebuie să existe în baza de date, măcar structura lui.

Recomandăm utilizarea instrumentului .


Se deschide apoi o fereastră goală pentru crearea formularului, şi este util să

fie activată Foaie de proprietăţi, prin instrumentul comutator , plasat ultimul în


fila Instrumente proiectare formular a panglicii. Penultimul buton din aceeaşi filă

este instrumentul comutator care face activă/inactivă Lista de câmpuri a


bazei de date curente, pe locul Foii de proprietăţi.

83
4.3.2. Obiectele simple

În continuare, trebuie ataşate controalele. Casetele de text pot fi ataşate prin


mai multe posibilităţi.
O posibilitate este de a trage
din fereastra cu lista de câmpuri
(pe rând), câmpurile în locul unde
se doreşte a fi ataşate.
O altă posibilitate este de a
selecta din bara de instrumente,
butonul ab|, pentru casete text.
Cursorul mouse-ului, dacă este
plasat peste fereastra de creare a
formularului, va avea forma unui
semn + şi ab|.
Se face clic în aria
formularului, în locul unde se
doreşte să fie amplasat cursorul şi se trage cursorul mouse-ului peste zona care va fi
acoperită de caseta text. Când butonul mouse-ului este eliberat, caseta este amplasată
şi este însoţită de o etichetă. În caseta text apare scris Nelegat(Unbound).
Se modifică textul etichetelor ataşate (în cazul nostru Text0, Text2, Text4,
Text6) cu mesajele logice (în cazul de faţă Codul, Denumirea, Adresa, Telefonul).

Această modificare se poate realiza după două clicuri pe etichetă, atunci când
cursorul mouse-ului devine |, sau după selecţia controlului (a etichetei, în cazul de
faţă), prin modificarea proprietăţii Legendă a filei Format, din Foaia de proprietăţi.
De altfel, prin acest procedeu se recomandă să fie particularizate toate proprietăţile
(caracteristicile) obiectelor plasate în formulare (inclusiv a formularului însuşi):

84
culoare, dimensiune, plasament, font (tip, dimensiune, stil, culoare), efecte speciale,
legendă, nume etc. Cu ajutorul instrumentelor din fila Aranjare pot fi aranjate
obiectele.

4.3.3. Culorile obiectelor

Majoritatea obiectelor au prevăzută proprietatea prin care se poate stabili o


nuanţă pentru fundal, care este Culoare fundal, sau proprietatea pentru fonturi numită
Culoare prim plan sau proprietatea pentru contur numită Culoare chenar. Realizarea
unei nuanţe de culoare pentru aceste propeietăţi se poate obţine prin amestecul, în
ponderi diferite, a celor trei culori fundamentale: roşu, verde şi albastru. Practic se
pot obţine 2563=16777216 nuanţe.
Dacă se cunoaşte codul culorii acesta se poate completa. Pentru a facilita
intuiţia codului, sistemul de redare a lui poate fi înscris printr -o tripletă de perechi de
cifre hexazecimale, precedate de semnul # (diez).
Pentru codificarea în sistem intern, se formează o mască în care tripleta RGB
se pune invers. Acest cod se obţine prin însumarea codificărilor cantităţilor pentru
cele trei culori (valori 0255) corectate prin coeficienţi, în funcţie de locul lor în
mască: cantităţii de roşu, fiind în dreapta i se aplică coeficientul 20=1, cantităţii de
verde i se aplică coeficientul 28=256 iar cantităţii de albastru i se aplică coeficientul
216=65536.
Dacă există dificultăţi în selectarea nuanţei, atunci se apasă pe „…‖, de la
sfârşitul liniei proprietăţii culorii, şi se alege o culoare dintr-o paletă. Dacă tot nu se
găseşte nuanţa dorită, se apasă pe butonul Definire culori particularizate şi se pot
amesteca culori pe sistemul RGB (Red, Green, Blue). În funcţie de amestecul realizat
se obţine un cod pentru nuanţă.
Pentru culoarea negru, care este amestecul celor 3 culori RGB în cantitatea 0,
scris #000000 în sistemul hexazecimal (se obţine valoarea codului 0). Culoarea alb se
obţine prin amestecul celor 3 culori RGB în cantitate saturată, 256 -1, scris #FFFFFF
în sistemul hexazecimal (se obţine valoarea codului 2563-1=16777216-1). Pentru
roşu se scrie #FF0000 în sistemul hexazecimal (codul este 255). Galbenul este
amestec saturat de roşu şi verde, scris #FFFF00 în sistemul hexazecimal (se obţine
valoarea codului 256*256-1=65536-1). Verde se scrie #00FF00 în sistemul
hexazecimal (codul este este obţinut înmulţind 255*256 sau scoţând roşul din galben:
galben –rosu =65535-255=65280).
Pentru a se obţine albastru se scrie #00FF00 în sistemul hexazecimal (codul
este este obţinut înmulţind 255*65536, sau se scoate roşu şi verde din alb:
16711680=16777215-65280-255).

85
4.3.4. Aranjarea obiectelor

Aspectul formularului depinde în mare măsură de aranjarea obiectelor în


formulare, de poziţia pe care o au unele faţă de altele, de proporţiile pe care le au, de
ordinea de parcurgere a lor (momentul când primesc focusul).
Atunci când se doreşte ca unui grup de obiecte să i se aplice în mod unitar
anumite proprietăţi, trebuie să se selecteze obiectele apăsând Shift + clic pe fiecare
dintre ele sau trecând cursorul mouse-ului peste ele şi apoi se aplică modificarea
modului de aranjare a obiectelor în formular. Operaţiile care pot fi efectuate sunt
legate de instrumetele grupate în fila Instrumente proi ectare formular/Aranjare din
panglică:

Unul sau mai multe obiecte selectate se pot muta cu ajutorul tastelor cu săgeţi
sau prin tragere cu mouse-ul atunci când cursorul este sub forma unei cruci de săgeţi.
În mod similar, unul sau mai multe obiecte selectate se pot redimensiona cu
ajutorul tastelor cu săgeţi apăsate concomitent cu tasta Shift sau prin tragere cu
mouse-ul de unul dintre cele opt puncte negre din colţuri sau mijloace de laturi,
atunci când cursorul este sub forma unei săgeţi cu vârfuri l a ambele capete.
Atunci când sunt suprapuse obiecte, se poate uzita de opţiunile: Aducere în
prim plan sau Trimitere în ultimul plan pentru a stratifica corect obiectele.
În fine, ordinea de parcurgere a controalelor se poate stabili cu opţiunea
Ordine de tabulare unde, în fereastra Ordine de tabulare se poate modifica, prin
glisare cu mouse-ul, ordinea de parcurgere, existentă la un moment dat.
A mai rămas de legat formularul şi controalele de date.
După ce este selectat formularul (clic în zona din exteriorul grilei din fereastra
formularului) se stabileşte valoare Clienti prin modificarea proprietăţii Sursă
înregistrări (sau se alege din lista ascunsă) a filei Date din Foaia de proprietăţi.
Apoi, pe rând, pentru fiecare casetă de text în parte, după ce se selectează, se alege
câmpul corespunzător din lista
ascunsă a proprietăţii Sursă control
a filei Date din Foaia de
proprietăţi.
După efectuarea acestor
operaţii, formularul este funcţional,
precum este redat în modul

86
Vizualizare formular, în figura alăturată:

4.3.5. Alte facilităţi

Într-un formular se pot plasa câmpuri calculate pe baza unor expresii.


Plasarea expresiilor în controalele aflate pe un formular sau subformular se
realizează prin scrierea acestora în proprietatea Control Source a unui control.
Scrierea unei expresii se poate face cu asistenţa generatorului de expresii
(Expression Builder) sau prin scriere directă. Dacă se utilizează scrierea unei expresii
în modul neasistat, aceasta trebuie precedată de semnul egal (=expresie).
Expresiile pot conţine orice funcţie Access sau funcţii definite de utilizator,
referiri către controale aflate pe alte formulare (deschise), câmpuri din tabela sau
interogarea stabilită, a proprietăţii Record Source a formularului, etc.
Utilizarea în expresii a controalelor din acelaşi formular se realizează prin
referirea numelui controalelor implicate în expresie. Astfel, se consideră implicit
referirea proprietăţii Value a controlului respectiv.

87
În exemplul de mai jos caseta Text25, care va afişa valoarea, va avea la
proprietatea Control Source formula =[prettt]*[1.19] unde 'prettt' este numele unui
control. În loc de 'prettt' se putea scrie 'prettt.value' ca referire completă a proprietăţii
sau 'pret' ca referire a câmpului 'pret' dintr-o tabelă 'produs' care este stabilită la
proprietatea 'Record Source' a formularului.
Există controale mai complexe pentru plasarea cărora în formulare mediul
Access are prevăzute instrumente expert şi indică posibilităţile lor cele mai frecvente

de utilizare. Butoanele de comandă , sunt frecvent utilizate în formulare,


instrumentele mediului Access propunând utilizarea acestora pentru acţiuni pe
categorii, redate în figură:
De exemplu, pentru a se crea un buton care face salt la înregistrarea anterioară
celei curente a formularului, se stabileşte acţiunea Salt la înregistrarea anterioară
din categoria Navigare înregistrări.
Controalele de tip Casetă combo sau Casetă listă oferă utilizatorilor
posibilitatea de a selecta dintr-o listă valori care pot fi introduse într-o bază de date.
Diferenţa dintre cele două tipuri de controale este dată de faptul că, prin

casetele combo valorile introduse pot fi preluate fie din lista controlului, fie prin
tastarea lor într-o casetă text, componentă a controlului.
Sintagma Casetă combo defineşte combinarea a două tipuri de controale:
Caseta text şi Caseta listă.

88
Valorile din liste pot fi preluate din câmpuri de tabele s au interogări şi pot fi
utilizate mai departe pentru a fi stocate sau pentru a căuta valori în tabele, precum se
vede în figura de mai jos.

De exemplu, într-un formular al produselor, pentru unitatea de măsură


se pot introduce valori care pot fi, la rândul lor, preluate dintr-o listă. Valorire
acestei liste pot fi preluate din interogarea pe care o putem salva cu denumirea UM,
bazată pe comanda SQL:
 Select distict UM from Produs order by UM

. Alegerea interogării sau a tabelului care furnizează informaţiile, alegerea


câmpurilor, a modului de sortare, a lăţimii de afişare, a modului de stocare şi
utilizare a valorii selectate şi Proprietatea Legendă a etichetei cuplate de listă, pot fi
precizate în ferestre ale expertului Access, prin care utilizatorul e ghidat pentru a
personaliza controalele de listă.

Opţiunile alese de utilizator sunt înregistrate ca parametrii pentru proprietăţile


casetei listă, precum se vede în figura de mai jos:

89
Aceşti parametrii pot fi modificaţi de utilizatori. De exemplu, dacă se
consideră că ar fi mai portrivită pentru acest control o listă de valori predefinită, nu
o interogare, se poate modifica proprietatea Tip sursă rânduri la valoarea Listă valori
şi se poate completa proprietatea Sursă rânduri cu expresia ‖Fl‖; ‖Kg‖; ‖L‖ .
Într-un formular pot fi folosite date şi din diverse tabele, sau interog ări, altele
decât cele precizate la proprietatea Sursă înregistrări a formularului, prin folosirea
unor proceduri de tratare a evenimentelor.
Utilizarea în controale a expresiilor din alte formulare se face prin sintaxa:
 Forms![Nume formular]![Nume control].
Pentru a putea fi evaluate astfel de expresii, trebuie ca acele formulare de pe
care sunt referite controale să fie deschise în acel moment.
Utilizarea într-o expresie, de pe un formular, a unor controale din
subformular, se realizează prin:
[Nume subformular].Form![Nume control].

90
CAPITOLUL V. CREAREA ŞI UTILIZAREA
RAPOARTELOR
5.1. Crearea unui raport

Atunci când se proiectează o aplicaţie de baze de date, toţi parametrii acesteia,


toate tabele şi obiectele componente, sunt funcţie de listele finale necesare, care
constituie finalitatea aplicaţiei.
Rapoartele sau situaţiile finale reprezintă forme mai accesibile de prezentare a
informaţiilor din bazele de date, conţinutul lor putând fi vizualizat pe ecran, listat la
imprimantă sau creat un fişier raport, de exemplu .RTF, ce poate fi prelucrat în
continuare în Word.
Mediile de proiectare a bazelor de date pun la dispoziţia utilizatorilor diverse
instrumente pentru crearea rapoartelor.
În versiunea 2007 a Microsoft ACCESS,
au fost introduse instrumentele de creare
rapoarte, grupate într-o zonă cu acelaşi nume, în
fila Creare a panglicii Access, prezentate în
figura alăturată.
Şi în cazul rapoartelor, ca şi pentru celelalte tipuri de obiecte Access, dintre

posibilitatea de a le crea cu ajutorul expertului sau cea în modul proiectare , e


recomandabilă a doua.
Crearea rapoartelor este foarte asemănătoare cu crearea formularelor, fiind
chiar puţin mai simplă deoarece nu se folosesc controale prin care se introduc date.

Utilizând instrumentul , se deschide o fereastră goală pentru crearea


raportului, şi este util să fie activată Foaie de proprietăţi, prin instrumentul

comutator , plasat ultimul în fila Instrumente proiectare formular a panglicii.

Penultimul buton din aceiaşi filă este instrumentul comutator care


face activă/inactivă Lista de câmpuri a bazei de date curente, pe locul Foii de
proprietăţi.

91
În continuare, trebuie ataşate controalele. Procedura de ataşare a controalelor
este similară cu procedura plasare a acestora lor în formulare.
Raportele constituie unul din tipurile de obiecte fundamentale ale ACCESS -
ului.
Deoarece menirea lor de bază este de prezentare a informaţiilor di n bazele de
date, cele mai importante proprietăţi ale unui raport sunt proprietăţile referitoare la
date. Stabilirea tabelului sau cererii de interogare de unde raportul îşi va extrage
informaţiile se face prin proprietatea sursă de înregistrări (în limba engleză: Record
Source).
Precum la formulare, şi la rapoarte, stabilirea câmpului de unde provin
valorile afişate în controale, se face cu ajutorul proprietăţii sursă control (în engleză:
Control source).
Informaţiile provenite din celulele tabelelor vor fi afişate în secţiunea de
detaliu. Controalele inserate în această secţiune vor fi afişate în raport, în mod
repetat, pentru fiecare articol al sursei de înregistrări.
În rapoarte mai pot fi create anteturi şi subsoluri pe diferite niveluri: antet şi
subsol de raport, antet şi subsol de pagină, antet şi subsol de grup.

Exerciţiu:
Pe baza informaţiilor din interogarea totul şi toate creaţi un raport cu
produsele vândute clienţilor.

Rezolvare

Utilizând instrumentul , se deschide o fereastră goală pentru crearea


92
raportului.
Vom începe prin a lega raportul şi controalele de date. După ce este selectat
raportul (clic în zona din exteriorul grilei din fereastra raportului) , se stabileşte
valoarea totul şi toate prin modificarea proprietăţii Sursă înregistrări (sau se alege
din lista ascunsă) a filei Date din Foaia de proprietăţi.
Apoi, pe rând, pentru fiecare valoare de expus în rândurile raportului, se
plasează câte o casetă text. Pentru fiecare casetă text în parte, trebuie elimitată
eticheta care e agăţată de mediul Access, automat de casetă (se face clic pe etichetă
şi se apasă tasta Delete). Legarea casetelor de date se face după ce se selectează prin
alegerea câmpului corespunzător din lista ascunsă a proprietăţii Sursă control a filei
Date din Foaia de proprietăţi.
După efectuarea acestor operaţii, raportul este funcţional, precum este redat în
modul Vizualizare proiect în figura de mai jos.

Raportul în modul Vizualizare raport este redat în figura de mai jos.

După ce s-au stabilit sursele de date pentru întreg raportul, trebuie stabilite
controalele care vor fi conţinute în raport, proprietăţile lor şi, în mod special, pentru
93
fiecare control în parte, sursa datelor. Această activitate constituie particularizarea
unui raport.
Într-un raport se pot particulariza următoarele elemente:
 Sursa de înregistrări. Se modifică tabelele şi interogările pe care se bazează
un raport.
 Sortarea şi gruparea datelor. Se pot sorta date în ordine ascendentă sau
descendentă. De asemenea, se pot grupa înregistrări în unul sau mai multe
câmpuri şi afişa subtotaluri şi totaluri generale într -un raport.
 Fereastra Raport. Se pot adăuga sau elimina butoanele Maximizare şi
Minimizare, modifica textul din bara de titlu şi alte elemente ale ferestrei
Raport.
 Secţiuni. Se pot adăuga, elimina, ascunde sau redimensiona secţiunile antet,
subsol şi detaliu ale unui raport. De asemenea, se pot seta proprietăţile
secţiunilor pentru a controla aspectul şi imprimarea unui raport.
 Controale. Se pot muta, redimensiona sau seta proprietăţile fonturilor unui
control. De asemenea, se pot adăuga controale pentru a afişa valori calculate,
totaluri, data şi ora curente şi alte informaţii utile într -un raport.

5.2. Particularizarea antetului şi subsolului

La fel ca şi în cazul formularelor şi rapoartele conţin antet, detaliu şi subsol.


Dar, suplimentar faţă de formulare, rapoartele pot conţine această împărţire şi la
nivel de pagină. Şi, mai mult decât atât, rapoartele sunt făcute să treacă peste mai
multe înregistrări pentru a afişa rezultate. Valorile afişate pot reda situaţia dintr-o
înregistrare sau din grupuri de înregistrări. De exemplu, pentru casetele care includ
valori numerice, se poate seta pentru proprietatea "Executare sumă " (în engleză
Running Sum) valoarea "Over All". Gruparea induce existenţa până la nivel de grup a
secţiunilor: antet, detaliu şi subsol.

Antetul raportului este secţiunea dintr-un raport utilizată pentru plasarea de


informaţii (cum ar fi titlul, data sau o prefaţa) la începutul unui raport.
Subsolul de raport este acea secţiune dintr-un raport care este utilizată pentru
a plasa informaţii ce în mod normal apar în partea finală a unui raport, cum ar fi
numărul total de pagini, semnături, data creării şi sumele de raport.
Antetul şi subsolul unui raport apar la începutul şi sfârşitul unui raport
imprimat.

94
Antetul de pagină este utilizat pentru a afişa titlul, titluri de coloane, date
calendaristice sau numere de pagină în partea de sus a fiecărei pagini a unui formular
sau raport.
Subsolul de pagină este utilizat pentru a afişa rezumate de pagină, date
calendaristice sau numere de pagină în partea de jos a fiecărei pagini dintr -un
formular sau raport
Antetul şi subsolul de pagină apar în partea superioară şi cea inferioară a
fiecărei pagini.

Antet de grup este utilizat pentru a plasa informaţii, cum ar fi numele de grup
sau totalul de grup, la începutul unui grup de înregistrări.
Subsol grup se utilizează pentru a plasa informaţii, cum ar fi numele de grup
sau totalul de grup, la sfârşitul unui grup de înregistrări.
Antetul şi subsolul de grup apar în partea superioară şi cea inferioară a
grupărilor articolelor.

Adăugarea sau eliminarea acestor elemente se face cu ajutorul instrumentelor


din grupul Afişare/Ascundere din fila Instrumente proiectare rapoarte/Aranjare a
panglicii.

Antet/Subsol raport

Antet/Subsol pagina

Cu excepţia antetului şi subsolului de grup, celelalte niveluri de anteturi şi


subsoluri sunt perechi. Ele pot fi disponibile doar împreună.
Dacă este necesară doar o componentă, pentru cealaltă se setează înălţimea la
dimensiunea 0. Eliminarea anteturilor şi subsolurilor atrage după sine si ştergerea
tuturor controalelor plasate pe suprafaţa lor.

Exerciţiu
Adăugaţi antet şi subsol raportului de la exerciţiul precedent. În antetul
raportului să se înscrie un antet de firmă, şi numele de coloane, iar la subsol să se
scrie data listării şi semnătura persoanei care a făcut listarea.

Rezolvare:
 se deschide baza de date Facturi;
 se alege din panoul de navigare raportul Raport TEST;
 se comută în Vizualizare în mod proiectare;
 se urmăreşte să existe setat Antet/subsol raport;
95
 se glisează în antetul raportului, din bara de instrumente, etichet a pentru a se
scrie firma, în partea stângă sus şi ca titlu: Lista produselor vândute pe clienţi. Titlul
se poate face cu un font mai mare şi aldin;
 se măreşte înălţimea antetului şi se adaugă în antet etichete pentru antetul
coloanelor, care se aliniază în linie cu cea mai de sus;
 se trasează un dreptunghi, care să înconjoare etichetele, şi pentru ca să nu
acopere etichetele se setează proprietatea Stil fundal cu culoarea Roşu şi se plasează
în spatele etichetelor realizate cu instrumentul Trimitere în ultim plan din fila
Aranjare;
 la subsolul raportului se adaugă etichetă cu conţinutul (legenda) Listat în data
şi o etichetă Întocmit / Semnătura;
 se acţioneză pe instrumentul Data şi ora din panglică, şi pentru că se adaugă
etichete cu data şi ora sistemului în partea stângă a antetului, data trebuie glisată în
zona de subsol, lângă Listat în data, iar eticheta cu ora se poate şterge;
 se trasează o linie în partea de subsol, pentru a delimita elementele acestuia de
articolele listate.

În modul Vizualizare raport rezultatul este următorul:

96
5.3. Gruparea datelor într-un raport. Realizarea de totaluri şi
subtotaluri

Atunci când informaţiile prezentate în rapoarte trebuie structurate grupat, pe


anumite grade de centralizare, fiecare grup putând să aibă antet şi subsol (partea de
detaliu este una singură pentru întreg raportul), pentru a adăuga sau elimina aceste
elemente de grup într-un raport se foloseşte instrumentul Sortare şi Grupare

(simbolul ) din fila Instrumente proiectare rapoarte din panglică.

În subsolul ferestrei mediului ACCESS apare caseta de dialog Grupare,


sortare si totaluri, şi se face clic pe butonul Adăgare grup şi automat este afişat un
rând în casetă pentru a ajuta la precizarea Grupării după selectare Câmp sau
Expresie.

Pentru particularizare se aleag parametrii doriţi: modul de sortare, dacă exită


totaluri sau titluri, dacă se afişează sau ascunde secţiunea de antet sau subsol la nivel
de grup.
Grupările se înscriu în această casetă în ordinea ariei lor de cuprindere.

Pentru adăugarea de controale care vor reda totalul tuturor valorilor unui
câmp, la nivel de raport, se procedează în felul următor:
1. Se adaugă o casetă text în zona de subsol a raportului. Este de preferat ca
această casetă să fie o copie a unei casete pe care o totalizează (cu
operaţiile obişnuite de copiere şi lipire);
2. La proprietatea Sursă control se setează: =Sum([expresie]) unde expresie
poate lua valorile variabile, funcţie de înregistrări, care vor fi totalizate;
3. La proprietatea Execuţie sumă se setează valoarea Nu.

Totalizarea unor valori pe grupuri (subtotaluri de raport) se face în mod


similar cu totalurile generale pe raport cu diferenţa că ele se plasează în subsolurile
de grup. Problema se pune în mod similar şi pentru totalurile pe pagini.

Exerciţii

1. Să se adauge o grupare după denumirea produselor în raportul construit


97
în exerciţiu precedent.

2. Să se gliseze în antetul grupării produsului, din zona de detaliu,


informaţiile generale despre produse.

3. Să se realizeze în zona de detaliu, o casetă pentru valoarea fiecărei


livrări şi să se rectifice antetul coloanelor.

4. Să se totalizeze valorile facturilor pe produse şi pe întreg raportul.


Pentru lizibiliate, totalurile produselor sunt precedate de o etichetă
„Total pe produsul:‖ şi de o casetă text ce va reda codul şi numele
produslui. Pentru raport, valoarea va fi precedată doar de o etichetă
„Total general‖. Totalul pe produse şi informaţiile din antetul acestei
grupări să fie incadrate într-un dreptunghi cu fond galben, iar cele de
antet/suport - pe întreg raportul - într-un dreptunghi roşu.

Rezolvare:

1. Pentru adăugarea grupării după câmpul furnizori se face clic Sortare şi

Grupare (simbolul ) din fila Instrumente proiectare rapoarte din


panglică.

2. În subsolul ferestrei mediului ACCESS apare caseta de dialog Grupare,


sortare şi totaluri, şi se face clic pe butonul Adăgare grup şi automat
este afişat un rând în casetă, cu o listă din care se alege câmpul
DenProd. Acţionând pe butonul Mai multe , se stabileşte să fie
vizibile secţiunea antet şi secţiunea subsol. Se glisează din zona detaliu
casetele text corespunzătoare câmpurilor: Codprod, Denprod, Um şi
Pret.

3. Se face o copie a casetei text corespunzătoare câmpului Cant. (Prin


intermediul memoriei clipboard cu operaţiile Copy (Ctrl + C) şi Paste
(Ctrl + V). Acest control se mută în partea dreaptă a benzii Detaliu. La
proprietatea Sursă control se scrie: =Cant * Pret, pentru a se specifica
faptul că e vorba de produsul a două valori (Semnul „=‖ este
indispensabil). La proprietatea Format se alege Fix, iar la Zecimale se
precizează 2. Redăm mai jos, în modul Vizualizare aspect, configurările
făcute.

98
4. În modul Vizualizare proiect, se selectează, cu un clic, caseta de text
corespunzătoare expresiei valoare, se copiază în clipboard, cu Ctrl + C
şi se lipeşte cu Ctrl + V. Cu mouse-ul se glisează caseta copiată, în
secţiunea Subsol DenProd. Se face o nouă lipire şi se glisează caseta în
secţiunea Subsol raport. Se reajustează înălţimea secţiunii de detaliu.
Pentru cele două casete copiate se setează următoarele proprietăţi de
dată:
 Sursă control : =Sumă (Cant * Pret);
 Execuţie sumă : Nu.
Se trasează un dreptunghi cu ajutorul instrumentului din fila
Instrumente raport/ Proiectare din panglică, se colorează cu galben prin

intermediul listei ascunse de culori, legată de instrumentu din


panglică şi se trimite, pentru a nu acoperi obiectele, în ultimul plan cu

ajutorul butonului , din fila Instrumente raport/ Aranjare. În


mod similar se trasează dreptunghi în subsolul raportului şi antetul
grupului.

99
Rezultatul este prezentat în modul Vizualizare proiectare, în figură:

Rezultatul este prezentat în modul Examinare înaintea imprimării, în figură:

Exerciţii

1. Să se adauge o grupare după denumirea clienţilor în raportul construit


în exerciţiu precedent.

2. Să se gliseze în antetul grupării Clienţilor, din zona de detaliu,

100
informaţiile generale referitoare la Clienţi şi să se rectifice antetul
coloanelor.

3. Să se totalizeze valorile facturilor pe Clienţi. Pentru lizibiliate,


totalurile produselor sunt precedate de o etichetă „Facturat clientului:‖ ,
şi de o casetă text ce va reda codul şi numele clientului. Totalul pe
client şi informaţiile din antetul acestei grupări să fie încadrate într-un
chenar albastru deschis, cu fond alb. Să se elimine fondul controalelor
din detaliu.

4. Să se pună o casetă care să redea numărul curent al ieşirilor pe clienţi.

5. Să se salveze raportul într-un document Word.

Rezolvare:

1. Operaţiile sunt evidente, şi se rezolvă în mod similar exerciţiului


anterior.
2. Idem.
3. Idem.
4. O casetă cu număr curent al articolelor se realizează prin următorii paşi:
 din caseta cu instrumente se selectează caseta text şi se glisează în
partea stângă a zonei de detaliu;
 se şterge eticheta lipită de caseta de text;
 pentru proprietatea Sursă control se setează: =1;
 pentru proprietate Execuţie sumă se setează Peste tot;.
Rezultatul este prezentat în modul Vizualizare proiectare, în figură:

101
5. Pentru a salva lista rezultată într-un document Word, în prealabil,
documentul trebuie vizualizat în modul Examinare aspect şi din linia cu
instrumente proprie acestui mod de vizualizare se alege pictograma
aplicaţiei Microsoft Word şi se produce deschiderea raportului cu
procesorul de texte. Nu sunt importate elementele grafice. Rezultatul
este redat mai jos:

SC DEPOZITUL SRL
LISTA PRODUSELOR VANDUTE PE CLIENTI
Cod Denumire Nr. Data Preţ/UM
Produs Produs Client Adresa Telefon factură factură Delegat UM Cantitate Val
7023 Lapte 2,9 /l
111111 SC First SRL Str Primaverii nr 1 26111111
1 4 23.10.2009 Antonescu 15 43,50
2 3 22.10.2009 Antonescu 18 52,20
Facturat clientului: 111111SC First SRL 95,70
222222 SC Secundul SRL Str.Verii nr 2 26122222
1 6 25.10.2009 Popescu 15 43,50
2 2 22.10.2009 Popescu 30 87,00
Facturat clientului: 222222SC Secundul SRL 130,50
333333 SC Terţa Parte SRL Str.Toamnei nr 3 26133333
1 5 24.10.2009 Trandafir 20 58,00
Facturat clientului: 333333SC Terța Parte SRL 58,00
Total pe produs: 7023Lapte 284,20
1009 Ulei 3,27/Kg
111111 SC First SRL Str Primaverii nr 1 26111111
1 4 23.10.2009 Antonescu 12 39,24
Facturat clientului: 111111SC First SRL 39,24
222222 SC Secundul SRL Str.Verii nr 2 26122222
1 1 21.10.2009 Popescu 20 65,40
Facturat clientului: 222222SC Secundul SRL 65,40
333333 SC Terța Parte SRL Str.Toamnei nr 3 26133333
1 5 24.10.2009 Trandafir 11 35,97
Facturat clientului: 333333SC Terța Parte SRL 35,97
Total pe produs: 1009Ulei 140,61
1075 Zahar 3,1 /kg
222222 SC Secundul SRL Str.Verii nr 2 26122222
1 1 21.10.2009 Popescu 15 46,50
Facturat clientului: 222222SC Secundul SRL 46,50
333333 SC Terţa Parte SRL Str.Toamnei nr 3 26133333
1 5 24.10.2009 Trandafir 25 77,50
Facturat clientului: 333333SC Terța Parte SRL 77,50
Total pe produs: 1075Zahar 124,00
Total pe produsul: 548,81
Listat în data:
8 mai 2010 Întocmit Semnătura
17:56:03

102
CAPITOLUL VI. LIMBAJUL VISUAL BASIC

6.1 Editarea modulelor Visual Basic for Application

Visual Basic for Application (abreviat VBA) este limbajul de programare


intern al pachetului software pentru birouri Microsoft Office.
Cu ajutorul VBA pot fi create modulele Access, obiecte ale baze de date care

Instrumente
Exploratorul Instrumente pentru
proiectelor depanare

Ferestra de
editare cod

Ferestra urmărire
Ferestra
variabile
Ferestra afișare
proprietăţilor
obiectelor

permit scrierea de rutine (subprograme, proceduri 8, funcţii 9) pentru accesa şi face


particularizări în mod intim tabelele, formularele, rapoartele şi interogările din baza
de date şi funcţionarea conjugată a acestora.
VBA este un dialect al limbajului Visual Basic. În VBA nu pot fi create
programe de sine stătătoare ci proceduri a căror execuţie poate fi iscată de
interacţiunea utilizatorului cu obiectele incluse în fişierele Office (documente de tip
Word, registre de tip Excel, prezentări de tip Power Point şi baze de date Access).
Aceste proceduri constituie o perfecţionare a unui limbaj de macrocomenzi a

8
metodă de rezolvare a unei probleme, defalcată în etape succesive; func ţie executată de un
subprogram, parte din sintaxa limbajelor evoluate, conform www.dexonline.ro preluat din Marele
dicţionar de neologisme, Florin Marcu, Editura Saeculum, 2000
9
ib idem
103
pachetului Office. Produsele pachetului Office, ele însele, crează în unele situa ţii,
module scrise în VBA, a căror prezenţă şi rulare pot fi sesizate sau nu de utilizatori.
Unitatea elemetară prin care programatorii scriu un algorit m într-un limbaj de
programare este instrucţiunea. Un grup de instrucţiuni realizează o unitate de
program; în cazul VBA, o procedură.
Există mai multe tipuri de proceduri:
 proceduri eveniment: O procedură executată automat ca răspuns la un
eveniment iniţiat de utilizator sau de codul program, sau activat de sistem prin
adăugarea de cod la un eveniment dintr-un formular sau raport.
 proceduri Function : Procedură care returnează o valoare şi care poate fi
utilizată într-o expresie. Funcţia se declară cu instrucţiunea Function şi se
sfârşeşte cu instrucţiunea End Function.
 proceduri Sub : Procedură care îndeplineşte o operaţiune. Spre
deosebire de o procedură Function, o procedură Sub nu returnează valori. O
procedură Sub se declară cu instrucţiunea Sub şi se încheie cu o instrucţiune End
Sub.
Procedurile sunt amplasate în module. Pentru crearea, testarea, depanarea
şi/sau rularea procedurilor utilizator, se recurge la instrumentele speciale asigurate de

mediul Visual Basic, care se iniţiază prin butonul , care este aşezat în capătul din
stânga al filei Instrumente baza de date a panglicii.
Procedurile sunt definite prin tastarea instrucţiunii Function sau Sub, eventual
precedate de specificatorul de domeniu Public sau Private. Pe acelaşi prim rând se
scrie efectiv un nume de procedură (funcţie sau subrutină) imediat urmat de toate
argumentele între paranteze iar la funcţie şi de comutator funcţiei. De exemplu,
următoarea declaraţie pentru funcţia Încărcat specifică şirNumeForm ca argument:
Function Încărcat (sirNumeForm As String) As Boolean
Sau, următoarea declaraţie pentru procedura Sub: AfişEveniment indică
NumeEveniment ca argument:
Sub AfişEveniment (NumeEveniment as String)
Corpul definirii procedurilor conţine liniile de cod în limbaj Microsoft Visual
Basic care vor efectua operaţiunile sau calculele necesare pentru realizarea
algoritmilor şi se termină cu linia de final End Sub sau End Function scrisă automat de
editor când s-a declarat procedura.
Pentru a facilita gestionarea obiectelor, a procedurilor în module, în editor
există pentru programatori fereastre de afişare a proprietăţilor şi de exploarare a
proiectelor, permiţându-se crearea de proceduri şi module, cătarea şi actualizarea sau
stergerea lor.
Editorul mediului are facilităţi de colorare a cuvintelor cheie, declaraţiilor
utilizator, frazelor eronate, comentariilor etc. Cea mai puternică facilitate a editorului
104
VBA este posibilitatea afişării contextuale în momentul scrierii instruc ţiunilor în
limbajul VBA, a elementelor care caracterizează un anumit context:
În fine, dar nu mai puţin important, este depanatorul, nelipsit din mediile de
programare deja de aproape 20 de ani.
În secţiunile următoare ale acestui capitol vom prezenta elemente de limbaj
VBA în scopul evidenţierii unor metode de access la obiectele bazei de date.

6.2 Elemente de sintaxă

Modulele VBA se bazează pe un set de instrucţiuni care conţin cuvinte


preluate din limba engleză. În afacra acestora se utilizează identificatorii.
Un identificator este numele unui element dintr-un program, fie el variabilă,
constantă, tip definit de utilizator, enumerare, procedură, funcţie, obiect, metodă,
proprietate, control, formă modul sau chiar proiectul însuşi. Specific VBA este faptul
că numele şi conţinutul acestor identificatori pot fi alcătuite atât din prima parte a
codului ASCII (primele 128 caractere) cât şi din codul ASCII extins (caractere
speciale, care în funcţie de modul de redare pot căpăta diferite forme, de exemplu
diacritice).
Sintaxa a împrumutat multe reguli care constituie esenţialul regulilor
limbajului natural: între cuvinte se intercalează spaţiu, după rânduri se tastează
returul de car (enter), elementele de acelaşi tip sunt despărţite de virgulă,
argumentele funcţiilor sunt delimitate de parantezele rotunde, şirurile de caractere
care se manipulează intacte sunt delimitate de ghilimele, numele variabilelor trebuie
să înceapă cu o literă, etc.
În plus mai există câteva reguli specifice. Caracterele interzise în denumiri
sunt %!$&#@. Nu e permis să existe doi identificatori identici cu acelaşi scop şi
există o serie de identificatori standard, definiţi de Visual Basic. Nu este permis să
fie numiţi identificatorii prin cuvintele cheie ale limbajului, precum Dim, Private,
Public, Array, For, Next, While, with, If, Then, Else, End, etc.
Pentru a face codul cât mai lizibil mulţi programatori folosesc prefixe în
definirea identificatorilor care indică tipul de date referit şi scopul lor. Acesta regulă
nescrisă se numeşte scrierea ungară după un angajat ungur al Microsof t care a
promovat-o.
Exemplu:
iCod pentru un cod de tip integer; astrLuni pentru un masiv de şiruri de
caracter cu lunile anului; dbPersonal pentru o bază de date personal, etc.
Comentariile sunt şiruri de caractere care au în faţă caracterul (') şi au rolul de
a face textul programului mai lizibil, nefiind compilate sau interpretate.

105
În general în Visual Basic dacă se doreşte să se scrie mai multe instruc ţiuni pe
o linie, aceasta sunt separate prin caracterul (:) .
Invers, dacă o declaraţie este prea mare se poate scrie pe mai multe linii,
pentru continuare se foloseşte caracterul continuator de linie ( _)(un spaţiu urmat de
o linie jos).
Algoritmii care sunt transformaţi în programe pot fi concepuţi iniţial prin
scheme logice. Schemele logice pot să fie sub forma unui pseudocod - care este un
limbaj mai puţin riguros decât un limbaj de programare, posibil şi cu termeni din
limba română - sau sub formă grafică.
Cele mai utilizate dintre aceste simboluri sunt:
 start şi final de algorim

 blocuri secvenţiale

 operaţii de intrare-ieşire

 bloc de decizie

 apel de subprograme

 conectori

6.3 Casete de dialog predefinite

În aproape toate limbajele care au formă Visual se pot folosi două funcţii
pentru a se putea realiza casete de dialog predefinite. Ev ident, formularele şi
rapoartele reprezintă o formă elegantă de introducere şi respectiv afişare a datelor
care se bazează în principal pe structura bazei de date. În afară de acestea, există în
VBA instrucţiuni pentru introducerea unor date izolate şi afi şarea de mesaje. Această
necesitate se simte mai ales în faza de test a unei proceduri sau funcţii, sau pentru
afişarea de mesaje către utilizatorul bazei de date. Şi mai mult chiar nici posibilitatea
Debug.Print nu este de înlăturată în această fază.
Pentru aceasta Visual Basic pune la dispoziţia programatorilor două funcţii:
InputBox care afişează o casetă de dialog ce permite preluarea datelor de la utilizator
şi MsgBox ce permite afişarea diferitelor informaţii.
Funcţia InputBox afişează o casetă de dialog modală care cere utilizatorului să
introducă date. Funcţia returnează o valoare de tip String formată din caracterele
introduse de utilizator în caseta cu text din fereastra de dialog dacă utilizatorul apasă

106
butonul OK; dacă se apasă butonul Cancel şirul returnat este şirul vid "". Sintaxa
este:
InputBox(prompt[,title] [,default] [,xpos] [,ypos] [,helpfile, context])

Dacă nu se pun parantezele rotunde InputBox se transformă în procedură.


Elementele din sintaxă reprezintă:
 prompt reprezintă un şir de caractere afişat ca mesaj în caseta de dialog.
Numărul maxim de caractere este de 1024;
 title, este un şir de caractere ce va fi afişat drept titlu în bara de titlu a casetei
de dialog;
 default, reprezintă un şir de caractere ce va fi afişat în caseta cu text şi care va
fi returnat de funcţie în caz că utilizatorul nu introduce alte date;
 xpos, ypos, sunt expresii numerice care specifică coordonatele colţului stânga
sus al casetei de dialog faţă de colţul stânga sus al ecranului;
 helpfile, este un şir de caractere ce specifică fişierul Help ce va fi folosit
pentru a oferi asistenţă în lucrul cu caseta de dialog;
Exemplu:
InputBox "Introduceţi forma
de învăţământ:", _
"Formă de dialog
predefinită", "Zi", 1000, 1000

Funcţia MsgBox se utilizează pentru a obţine răspunsuri de tip Da / Nu de la


utilizatori sau pentru a afişa diferite mesaje de avertizare, erori, atenţionări. După
citirea mesajului utilizatorul va apăsa un buton pentru a închide fereastra. Funcţia
returnează un Integer specificând ce buton a fost apăsat. Sintaxa este:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Unde:
 prompt - un şir de caractere afişat ca mesaj în caseta de dialog. Numărul
maxim de caractere este de 1024;
 buttons – o expresie numerică ce reprezintă suma valorilor care specifică
numărul şi tipul butoanelor afişate sau pictograma;
 title – un şir de caractere ce va fi afişat drept titlu în bara de titlu a casetei
de dialog;
 helpfile - un şir de caractere ce specifică fişierul Help ce va fi folosit
pentru a oferi asistenţă în lucrul cu caseta de dialog.

Pentru setarea butoanelor există predefinite următoarele constante specifice


VisualBasic:

107
Constante Valoare Descriere afişare
vbOKOnly 0 Numai buton OK
VbOKCancel 1 Butoanele OK şi Cancel
VbAbortRetryIgnore 2 Butoanele Abort, Retry şi Ignore
VbYesNoCancel 3 Butoanele Yes, No şi Cancel
VbYesNo 4 Butoanele Yes şi No
VbRetryCancel 5 Butoanele Retry şi Cancel
VbCritical 16 Pictograma Critical Message
VbQuestion 32 Pictograma Warning Query
VbExclamation 48 Pictograma Warning Message
VbInformation 64 Pictograma Information Message
VbDefaultButton1 0 Primul buton este implicit
VbDefaultButton2 256 Al doilea buton este implicit
VbDefaultButton3 512 Al treilea buton este implicit
VbDefaultButton4 768 Al patrulea buton este implicit
VbApplicationModal 0 Modul de aplicaţie; Aplicaţia aşteaptă şi utilizatorul
trebuie să răspundă la caseta de dialog
VbSystemModal 4096 Modul de sistem; Toate aplicaţiile sunt suspendate
până la răspunsul la caseta de dialog

Primele constante cu valori (0–5) numărul şi tipul de butoane afişate; grupul


următor (16, 32, 48, 64) descrie stilul pictogramelor; apoi grupul următor (0, 256,
512, 768) determină care buton este implicit; în fine ultimul grup (0, 4096) dă tipul
modulului. Prin adunarea numerelor se obţin efecte compuse, dar se adună exclusiv o
singură valoare dintr-un grup.
Valorile returnate de funcţia MsgBox sunt:

Constante Valoare Descriere


vbOK 1 OK
vbCancel 2 Cancel
vbAbort 3 Abort
vbRetry 4 Retry
vbIgnore 5 Ignore
vbYes 6 Yes
vbNo 7 No

108
Exemplu:
MsgBox "Mesaj de atenţionare !", vbExclamation _
+ vbOKCancel + vbDefaultButton1+vbsystemmodal, "Sistemul stă!"

6.4 Variabilele în VBA

6.4.1. Declararea variabilelor

O variabilă se caracterizează prin două elemente: numele variabilei, care este


un identificator cu ajutorul căruia putem să referim variabila pe parcursul
programului şi tipul variabilei, care determină ce tip de dată poate stoca variabila. În
funcţie de tipul variabilei compilatorul alocă o zonă mai mică sau mai mare de
memorie pentru variabila respectivă.
Ieftinirea memoriilor face ca rigoarea gestionării tipurilor de variabile să nu
mai fie de actualitate, chiar declarările devin desuete în limbajele de programare
moderne. VBA permite utilizarea declarării implicite a variabilelor la prima utilizare
şi utilizarea tipului implicit Variant, prin care este posibil ca o variabilă să stocheze
valori diferite în momente diferite.
În schimb capătă importanţă crescută locul unde se declară şi spaţiul unde este
recunoscută o variabilă şi durata de existenţă.
Declararea unei variabile se face astfel:
{Public| Private| Dim} NumeVariabilă [as TipVaribilă]

Unde:
 NumeVaribilă este identificatorul variabilei;
 TipVariabilă este numele unui tip de date din cele pe care le acceptă Visual
Basic. Dacă acesta lipseşte se consideră că variabila este de tipul Variant.

Exemple:
Dim iCant as Integer ´defineşte variabila iCant de tip Integer
Dim dtZiSal as Date ´defineşte variabila dtZiSal de tip date

109
Private sNume as String ´defineşte variabila sNume de tip String
Public lstListaPret as ListBox ´defineşte variabila lstListaPret ce va conţine o
referinţă către un obiect de tip ListBox

O caracteristică deosebit de importantă a variabilelor este do meniul de


valabilitate şi durata de existenţă.
Astfel există variabile locale la nivelul unei proceduri. Aceste variabile se
declară în interiorul procedurii cu ajutorul cuvântului cheie Dim.
Ele există atâta timp cât se execută procedura în care au fost declarate. De
asemenea, ele pot fi utilizate numai în cadrul acelei proceduri neavând nici o
semnificaţie în altă parte a programului. Au un domeniu de valabilitate doar la
nivelul proceduri şi au o durată de viaţă temporară. Este recomandat să se folosea scă
Dim doar pentru declararea acestui tip de variabile chiar dacă Visual Basic permite
folosirea lui şi în alte contexte.
Un alt tip de variabile sunt cele cu domeniu de vizibilitate la nivelul unui
modul. Aceste variabile pot fi folosite oriunde în interiorul modulului în care au fost
declarate şi există atâta timp cât este folosit modulul respectiv. Este recomandabil ca
declararea lor să se facă cu ajutorul cuvântului cheie Private în loc de Dim.
Un al treilea tip de variabile sunt cele globale la nivelul întregului program.
Acestea sunt pot fi folosite oriunde în program, au un domeniu de valabilitate global
şi există atâta timp cât se execută programul. Declararea acestor variabile se face
folosind cuvântul cheie Public.

Un alt tip de variabile sunt cele statice. Acestea pot avea un domeniu de
valabilitate locală sau la nivelul unei proceduri, dar o durată de existenţă permanentă.
Declararea se face cu ajutorul cuvântului cheie Static. Chiar dacă sunt definite
la nivelul procedurilor, variabilele Static îşi păstrează valoarea şi după ce procedurile
gazdă îşi termină execuţia. Dacă procedura va fi din nou apelată variabila statică nu
va fi iniţializată automat de Visual Basic, lucru ce se întâmplă cu variabilele care nu
sunt statice, ci va avea valoare pe care a avut-o la ultima ei folosire.
Variabilele locale la nivelul unui modul sau publice se declară în secţiunea de
declaraţii a modulului (Declarations).
În unele versiuni de Visual Basic se permite declararea variabilelor şi implicit,
adică o variabilă este considerată declarată la prima ei folosire. Nu este necesară o
declarare prealabilă cu ajutorul cuvintelor cheie Dim, Private, Public. În mod
implicit Visual Basic le consideră de tip Variant pe toate. În VBA acest lucru nu este
permis.
Una dintre cele mai periculoase erori întâlnite la declararea unei variabile este
următoarea:

110
Dim a, b, c as Integer,
care la prima impresie pare că sunt definite trei variabile a,b,c de tip Integer
dar de fapt numai c este de tip Integer, celelalte fiind în mod implicit de tip Variant.
Corect este
Dim a as Integer, b as Integer, c as Integer

6.4.2. Tipurile variabilelor în VBA

În paragrafele precedente ne-am folosit de câteva tipuri de date folosite în


Basic. Important în alegerea tipului de dată este natura d atelor şi intervalul în care
poate lua valori variabila. VBA acceptă două categorii de tipuri de date:
 standard (predefinite);
 utilizator.

Tipurile de date standard sunt:

Tipul de Tipul informaţiei Memoria Intervalul de valori


dată necesară
Integer Numere întregi 2 bytes -32,768 la 32,767
Long Numere întregi 4 bytes Aproximativ – 2.1E9 la 2.1E9
Single Numere reale 4 bytes -3.402823E38 la –1.401298E-45 pentru valori
negative şi1.401298E-45 la 3.402823E38
pentru valori pozitive
Double Numere reale 8 bytes -1.79769313486232E308 la –
(dublă precizie) 4.94065645841247E-324 pentru valori
negative şi 4.94065645841247E-324 la
1.79769313486232E308 pentru valori pozitive
Currency Numere cu până 8 bytes -922,337,203,685,477.5808 la
la 15 cifre întregi 922,337,203,685,477.5807
şi 4 zecimale
String Şir de caractere 1 byte / Până la 65000 de caractere pentru şirurile cu
caracter lungime fixă şi până la 2 miliarde de caractere
pentru şirurile dinamice
Byte Numere întregi 1 byte 0 la 255
Boolean Valori logice 2 bytes True sau False
Date Dată şi timp 8 bytes 01.01.100 la 31.12.9999
Object Referinţe către 4 bytes N/A
obiecte
Variant Oricare din 16 bytes N/A

111
tipurile + 1 byte
precedente per
caracter

Cu fiecare tip de dată sunt permise o serie de operaţii. Ast fel:


 operaţiile care se pot face cu valorile unui tip întreg sunt: adunarea (+);
scăderea(-); înmulţirea(*); împărţirea întreagă (\) a \ b returnează câtul împărţirii lui
a cu b; împărţirea reală(/); restul împărţirii întregi (mod); ridicarea la putere (^) de
asemenea sunt permise operaţiile relaţionale: mai mic sau egal (<=); mai mic (<);
egal (=); mai mare(>); mai mare sau egal (>=);Rezultatul unor astfel de operaţii este
de tip boolean, având valorile True sau False;
 operaţiile care se pot face cu valorile unui tip real sunt: adunarea (+);
scăderea(-); înmulţirea(*); împărţirea(/); ridicarea la putere (^); sunt permise
operaţiile relaţionale prezentate la tipurile întregi;
 şirurile de caractere suportă operaţia de concatenarea (& sau uneori +) şi
operaţiile de comparaţie (<,<=,=,>=,>). Prin concatenare două sau mai multe şiruri
de caractere pot fi lipite formând un singur şir de caractere. Cu ajutorul operaţiilor de
comparaţie se stabileşte poziţia alfabetică a şirurilor de caractere;
 valorile logice, booleene (True şi False) suportă următoarele operaţii
logice: negarea logică (Not); şi logic (And); sau logic (Or); sau exclusiv logic (Xor);
echivalenţa logică (Eqv); implicaţia logică (Imp);
 tipurile de dată de tip obiect suportă o singură operaţie – cea de comparaţie
(Is). Cu ajutorul acestei operaţii se verifică dacă două variabile de tip obiect referă
acelaşi obiect sau nu.

Un tip particular de date sunt constantele. În expresii, constantele au regim


obişnuit ca al oricăror alţi operanzi. O definiţie de constantă introduce un
identificator ca sinonim al unei valori constante.
În Visual Basic există două tipuri de constante:
 intrinseci sau definite de sistem. Visual Basic pune la dispoziţie o serie
întreagă de constante pentru culori, taste, figuri etc;
 simbolice sau definite de utilizator. Puteţi defini propriile dumneavoastră
constante cu ajutorul cuvântului cheie Const astfel:
[Public|Private] Const NumeConstanta[As type] = expresie

Exemple:
Const PI = 3.14159265358979
Const NR_CARACTERE = 256
Const ZI_DE_NASTERE = #02.04.1981#
Const NUME_DE_COD = "Şacalul"

112
6.4.3. Iniţializarea variabilelor

Variabilele declarate sunt iniţializate automat de compilator: cele numerice cu


0, text cu "", etc.
Modificarea informaţiilor stocate în variabile se face cu ajutorul instrucţiuni
de atribuire.
Sintaxa:
variabilă = expresie
sau
Set variabilă = expresie

Exemple:
iOreLunar = 170 – variabila a va stoca valoarea 170;
sNume ="Popescu"&" Ioan" – variabila va stoca şirul de caractere
"Popescu Ioan"
dtDataAng=#13.06.2000# – variabila va stoca data 13.06.2000
s=s+1 – reprezintă primul şoc întâlnit de novicii în
informatică, care nu sesizează că e vorba
de operatorul de atribuire nu de
comparare, în cazul de faţă, în locaţia de
memorie s; va fi suprascris conţinutul
anterior incrementat cu 1

Unei variabile de tip obiect (tipul generic Object sau de tipul celorl alte obiecte
Access 2000) nu i se poate atribui un obiect în varianta clasică: variabila=expresie
sau variabila1=variabila2, ci utilizându-se instrucţiunea Set:
Set variabila_obiect = expresie_obiect.
În urma apelului acestei instrucţiuni, variabila_obiect va referi obiectul
returnat de expresia expresie_obiect.
Şi numele de proceduri pot fi considerate un caz particular de variabile.

6.5. Tablouri

În limbajele de programare se încearcă crearea de structuri de date complexe.


În aproape toate există posibilitatea de lucru cu tablouri sau masive.
Un tablou este o structură de date percepute ca fiind adiacente, care poartă un
singur nume şi au acelaşi tip, care poate să păstreze mai multe valori de acelaşi tip.
Tabloul poate fi asimilat unui şir finit din matematică, Ca şi şirurile, tablourile pot fi
uni-, bi-, tri- sau multi-dimensionale. Distincţia între elemente se face cu ajutorul

113
indecşilor care redau un număr de ordine al elementelor pe fiecare dimensiune.
Bineînţeles, dacă tabloul este de tip Variant atunci elementele acestuia pot să conţină
diferite tipuri de date (numerice, şiruri de caractere, date calendaristice, obiecte). De
obicei un tablou unidimensional este numit vector iar unul bidimensional matrice.
Tablourile sunt intuitiv create în programare implicaţie a scopului declarat al
calculatoarelor programabile, acela de a efectua cu viteză operaţii de rutină, omogene
şi repetivive. Pentru gestionarea cât mai eficientă a elementelor tablourilor sunt de
mare folos structurile repetitive.
Declararea unui tablou cu dimensiune fixă se poate face astfel:
Dim|Public|Private _
NumeTablou([[NrPrimElement to] NrUltimElement], _
[[NrPrimElement to] NrUltimElement], ...) [As TipDată]

Dacă nu se specifică NrPrimElement to se consideră a fi 0. Dacă se specifică


NrUltimElement pentru toate dimensiunile, tabloul este considerat a fi de dimensiuni
fixă. Dacă nu se specifică NrUltimElement pentru o dimensiune, tabloul este
considerat a fi dinamic şi în interiorul procedurilor aceasta poate fi precizată cu
instrucţiunea Redim, care are aceiaşi sintaxă ca instrucţiunea Redim.
Ca de exemplu prin următoarea instrucţiune se declară un vector cu 7
elemente:
Dim zi(6) As string
Alte exemple ar fi:
Dim PuncteÎnPlan(10,10) As Byte ’ matrice cu 121 elemente
Private PuncteÎnSpaţiu( 1 To 30,1 To 30, 1 To 30) As Byte
’ masiv cu 30 3 elemente

După declaraţie, elementele tabloului pot fi folosite în expresii sau în orice loc
unde poate fi utilizată o variabilă obişnuită. Deci:
zi(0)=”Luni” ‟ încarcă primul element al vectorului zi
‟ cu şirul”Luni”

6.6 Funcţii şi proceduri definite de utilizator

O funcţie/procedură reprezintă un bloc de instrucţiuni care realizează o


prelucrare. Funcţiile şi procedurile se aseamănă întrucâtva şi de aceia au o denumire
comună: subprograme. Acestea pot fi apelate ori de câte ori este nevoie, fără a mai fi
necesară rescrierea lor. În felul acesta se reduce considerabil efortul de programare.
Aplicaţiile mai complexe nu pot fi concepute fără a apela la proceduri. În plus
programarea pe obiecte se poate realiza doar făcându -se ca fiecărei posibilităţi de

114
modificare a proprietăţilor obiectelor sau răspunsului acestora la diferite evenimente
să-i corespundă câte un subprogram.
Pentru a da un grad de generalitate cât mai mare, funcţiile şi/sau procedurile
conţin în definirea acestora o listă de parametri formali. În momentul apelării unei
funcţii şi/sau proceduri se transmit către acestea valori pentru fiecare parametru al
procedurii sau funcţiei (sau nimic dacă nu există parametri).
Sintaxa pentru definirea unei proceduri este următoarea:
[{Private|Public}]Sub nume_procedură[([{ByRef|ByVal}] param_1 [as tip_date],…)]
[instrucţiuni]
....
[Exit Sub]
...
[instrucţiuni]
End Sub

Unde:
 Private şi Public au semnificaţie similară cazului declarării variabilelor. O
procedură eveniment poate fi definită doar Private;
 Sub permite ieşirea forţată dintr-o procedură; instrucţiunile care încep cu
Exit provoacă ieşirea forţată din blocurile de instrucţiuni ale anumitor
structuri;
 Parametrii din definirea procedurii se numesc parametrii formali, ei
precizează (implicit sau explicit) doar tipul parametrilor;
 {ByRef|ByVal} precizează modul de transmitere a parametrilor, care poate fi
prin valoare sau referinţă. Implicit se consideră a fi ByVal. Dacă se
utilizează ByVal modificările făcute argumentelor transmise procedurii se
pierd după ieşirea din procedură, pe când, dacă se utilizează ByRef
modificările făcute argumentelor transmise procedurii rămân şi după ieşirea
din procedură.

Apelul unei proceduri se poate face astfel:


[Call]nume_procedura [(valoare_param_1,valoare_param_2,....)]
Parametrii din apelul procedurii se numesc parametrii reali, ei sunt purtători
de valoare în momentul apelului, iar dacă nu corespund ca tip cu parametrii formali,
parametrii reali sunt convertiţi.
Referitor la definirea şi apelul procedurilor să considerăm următorul exemplu:

Sub test()
v=7
transmit v

115
MsgBox v
End Sub

Sub transmit(ByVal a)
a=a+3
End Sub

Procedura test de tip Sub apelează procedura transmit de tip Sub. Modul de
transmitere a parametrului este prin valoare. Prin rularea subrutinei test se afişează
valoarea 7, cu toate că în interiorul subrutinei transmit parametrul este modificat,
aceste transformări nu rămân la ieşirea din subrutină.
Dacă se schmbă modul de transmitere a parametrului prin ByRef, linia de
definirea a subrutinei apelate fiind Sub transmit(ByVal a), atunci rezultatul execuţiei
subrutinei test va fi afişarea valorii 10.

Sintaxa unei funcţii este următoarea:


[{Private|Public}]Function nume_funcţie[([{ByRef|ByVal}]param_1 [as
tip_date],…)] _
[as tip_date]
[instrucţiuni]
[nume_funcţie = expresie]
...
[Exit Function]
[instrucţiuni]
[nume_funcţie = expresie]
End Function

Unde precizările de la explicarea sintaxei procedurilor de tip Sub, rămân


valabile şi pentru acest tip de proceduri. Diferenţele apar de la de la specificul
capacităţii funcţiilor de a returna o valoare. Tipul valorii returnate este specificat în
linia de antet a definirii funcţiilor, după lista de parametrii. Valoarea se returnează
prin linia descrisă de sintaxa:
nume_funcţie = expresie
Acest rezultat va fi returnat în momentul terminării execuţiei funcţiei. Apelul
unei funcţii se poate face astfel:
Variabila=nume_funcţie[(valoare_param_1,valoare_param_2,...)] , variabila
preia rezultatul returnat de funcţie. Dar, prin apelarea u nei funcţii se returnează o
valoare, deci funcţia apelată poate fi folosită ca un operand în orice expresie unde
este permis tipul returnat.
Referitor la definirea şi apelul funcţiilor să considerăm următorul exemplu:

116
Function test1() As Integer
Dim v As Integer
MsgBox increment(7)
End Function

Function increment(a As Integer) As Integer


increment = a + 1
End Function
Execuţia funcţiei afişează valoarea 8.

Pentru a testa un subprogram fără parametri direct dintr -un modul, se


poziţionează cursorul în corpul subprogramului, apoi se selectează comanda: Run,
Go/Continue F5. Dacă se doreşte executarea subprogramului în modul Trace, se
alege din meniul Debug, Step into F8.
Limbajul VBA cuprinde în plus o serie de funcţii predefinite care facilitează
scrierea procedurilor şi funcţiilor utilizator.
Unele mai des folosite dintre acestea sunt:
 Abs(expresie_numerică): returnează valoarea absolută a unei expresii
numerice, sau a unui număr;
 Asc(sir_caractere): returnează codul primului caracter din şirul de caract ere
specificat;
 CDate(expresie): face conversia la tipul Date;
 CDbl(expresie): face conversia la tipul Double;
 Dec(expresie): face conversia la tipul Decimal;
 CInt(expresie): face conversia la tipul Integer;
 CLng(expresie): face conversia la tipul Long;
 CSng(expresie): face conversia la tipul Single;
 CStr(expresie): face conversia la tipul String;
 Cos(expresie_numerică): returnează cosinus dintr-o expresie numerică sau
dintr-un număr. Valoarea returnată este de tip Double;
 Chr(COD_CARACTER): returnează caracterul ASCII cu codul specificat;
 Date(): Returnează data calendaristică;
 Day(data_calendaristică): returnează numărul zilei din luna;
 Exp(expresie_numerică): returnează valoarea constantei e ridicată la o puter e
(expresie numerică sau număr);
 Log(expresie_numerică): returnează logaritmul natural dintr-un număr sau
dintr-o expresie numerică;
 InStr ([intStart, ]strŞir, strCaută[, intCompară]): verifică dacă un caracter
sau un şir( strCaută) se găseşte în interiorul altui şir (strŞir). În caz afirmativ
funcţia returnează poziţia primului caracter căutat în şirul strŞir;

117
 IsDate(expresie): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze este compatibilă cu o dată calendaristică;
 IsEmpty(expresie): returnează valoarea adevărat (TRUE) dacă expresia
dintre paranteze nu conţine o valoare. Null este considerat valoare;
 IsNumeric(expresie): returnează valoarea adevărat (TRUE) dacă expresia
dintre paranteze poate fi evaluată ca număr;
 IsObject(expresie): returnează valoarea adevărat (TRUE) dacă identificatorul
dintre paranteze este de tip obiect;
 IsError(expresie): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze conţine o eroare;
 Lcase(şir_de_caractere): transformă literele mari dintr-un şir în litere mici;
 Left(strŞir,intNrCaractere): extrage dintr-un şir de caractere primele
intNrCaractere din partea stângă a şirului;
 Len(şir_caractere/variabilă): returnează numărul de caractere ale şirului de
caractere specificat sau numărul de octeţi necesari pentru a stoca conţinutul
unei variabile;
 Mid((şir_caractere, poziţie_start[, lungimea])): extrage un şir de caractere
dintr-un alt şir de caractere;
 Month(data_calendaristică): returnează numărul lunii din an;
 Right(strŞir,intNrCaractere): extrage dintr-un şir de caractere primele
intNrCaractere din partea dreaptă a şirului;
 Space(număr): returnează numărul de spaţii specificate;
 Str(expresie_numerică): converteşte rezultatul evaluării expresiei numerice
dintre paranteze într-un şir de caractere;
 Ucase(şir_de_caractere): transformă literele mici dintr-un şir în litere mari;
 Val(şir_caractere): returnează conversia şirului de caractere specificat, într -
un număr;
 WeekDate(dată_calendaristică,prima_zi): returnează numărul zilei din
saptămâna datei calendaristice;
 Year(dată_calendaristică): returnează anul.

Pentru scrierea programelor fiecare limbaj dispune de implementarea


aşaziselor structuri de control al execuţiei programelor. S -a demonstrat că orice
algoritm, fie el cât de complex, poate fi scris cu doar 3 sau 4 astfel de structu ri.
Principalele structuri de control implementate în Visual Basic for Aplication
sunt:

118
6.7 Structura alternativă

În Visual Basic for Aplication pentru implementarea structurii alternative se


poate utiliza instrucţiunile IF şi SELECT CASE.

Sintaxa variantei principale a instrucţiunii IF este următoarea:


If condiţie Then
[secvenţa instrucţiuni A]
[Else
[secvenţa instrucţiuni B ]]
End If

Condiţia unei structuri alternative poate fi o expresie numerică sau o expresie


logică, care poate fi evaluată la adevărat (True) sau fals (False). Compilatorul
evaluează condiţia şi dacă ea este "adevărată", se execută secvenţa instrucţiuni A.
Dacă expresia este "falsă", instrucţiunea "If" are şi parte de "Else" atunci se
execută secvenţa instrucţiuni B. Dacă condiţia este o valoare numerică atunci dacă
este diferită de 0 este interpretată ca True iar valoarea 0 este interpretată ca False.
Una şi numai una dintre cele două instrucţiuni se execută.
Grafic, instrucţiunea este reprezentată astfel:

Da Nu
Condiţie

secvenţa secvenţa
instrucţiuni A instrucţiuni A

Un exemplu de utilizare a acestei instrucţiuni, este următorul subprogram,


care calculează soluţiile ecuaţiei de gradul al doilea, pentru care prezentăm schema
logică şi codul sursă, scris în Visual Basic.
'------------------------
Private Sub ec2(double a, _ double b, double c)
Dim delta As Double
Dim x As Double
Dim x1 As Double
Dim x2 As Double
If a <> 0 Then
delta = b ^ 2 - 4 * a * c
If delta >= 0 Then
x1=(-b+Sqr(delta))/(2*a)
119
x2=(-b-Sqr(delta))/(2*a)
Sub ec2(a, b, c)
MsgBox "x1 =" & x1
MsgBox "x2 =" & x2
Da Nu
Else a≠0
MsgBox _
"ec. nu are solutii reale" Da Nu
2
delta=b -4ac b≠0
End If
Else Da Nu x=-c/b Ecuaţia
If b <> 0 Then delta>=0
nu are
x = -c/b Scrie x sens
MsgBox "x =" & x x 1 =(-b+ )/2a
delta
Else x 2 =(-b- )/2a
delta Nu există
MsgBox_ soluţii
"ecuatia n- are sens" Scrie x 1 , x 2 reale
End If
End If
End Sub

Terminare

Schema logică a acestei probleme este redată alăturat codului.

6.8 Structura repetitivă

Structura repetitivă, la modul general, presupune repetarea unei secvenţe de


instrucţiuni de un anumit număr de ori, în funcţie de o condiţie. Fiecare limbaj
implementează mai multe instrucţiuni pentru realizarea structurii repetitive.
Structurile repetitive întâlnite pot fi: cu numărător, cu testarea condiţiei
înaintea executării unui ciclu, cu testarea condiţiei după executarea unui ciclu.

6.8.1. Structura repetitivă cu val c = val i


numărător
Operaţii care
Cele mai multe limbaje folosesc pentru se repetă

instrucţiunea repetitivă cu numărător o formă a val c = val c + val p


instrucţiunii FOR. În Visual Basic aceasta este
numită în mod obişnuit instrucţiunea FOR...NEXT.
Da
val c <= val f
Sintaxa instrucţiunii FOR...NEXT este :

120
For valc=vali To valf [Step valp]
[secvenţă instrucţiuni]
[Exit For]
[secvenţă instrucţiuni]
Next [valc ]
Schema logică de reprezentare a acestei structuri este redată alăturat sintaxei .

În descrierea sintaxei instrucţiunii avem :


 val i , val f - reprezintă valoarea iniţială, respectiv valoarea finală pentru o
variabilă contor val c ;
 val p - reprezintă valoarea pasului de incrementare/decrementare pentru
variabila contor, implicit are valoarea =1;
 val i , val f , val p - pot fi şi rezultatul evaluării unor expresii.

La întâlnirea acestei structuri, se repetă secvenţa de instrucţiuni de un număr


de ori, plecându-se de la valoarea iniţială a variabilei contor, până la valoarea finală
a acesteia, incrementându-se întotdeauna variabila contor cu val p . Dacă partea de
[Step ...] lipseşte, compilatorul consideră val p egal +1.
Pentru ieşirea forţată din structura repetitivă se poate uza de partea Exit For a
instrucţiunii care de obicei trebuie intercalată într -o structură alternativă. Prin
execuţia rândului Exit For, controlul instrucţiunii este transferat la prima instrucţiune
după Next.
Redăm mai jos, codul sursă pentru algoritmul deordonare al unui vector cu n
elemente.

121
6.8.2. Structurile repetitive de tip Do … Loop

Caracteristic limbajului Visual Basic este existenţa aşanumitei instrucţiuni


DO...LOOP. Această instrucţiune repetă un bloc de instrucţiuni cât timp o condiţie
este adevărată sau până când o condiţie devine adevărată. Mai clar spus, această
structură suportă mai multe forme, echivalente fie cu structura repetitivă cu condiţie
anterioară fie cu structura repetitivă cu condiţie posterioară.
Aceste structuri repetă un bloc de instrucţiuni în funcţie de valoarea de adevăr
a unei condiţii. Structurile pot fi implementate prin mai multe forme, echivalente fie
cu structura repetitivă cu condiţie anterioară fie cu structura repetitivă cu condiţie
posterioară. Unele forme se repetă atâta timp cât condiţia este adevărată, altele, din
contră, un timp atât cât îi e necesar condiţiei să devină adevărată.
Limbajul Visual Basic, prin instrucţiunea Do...Loop are implemenate toate
aceste 4 posibilităţi.
Sintaxa poate fi redată astfel:
DO [{While | Until} condiţie]
[instrucţiuni]
[Exit Do]
[instrucţiuni]
Loop
sau este valabilă şi sintaxa în forma următoare:
Do
[instrucţiuni]
[Exit Do]
[instrucţiuni]
Loop [{While|Until} condiţie]

Condiţia este opţională. Ea poate fi o expresie numerică sau o expresie logică,


care poate fi evaluată la adevărat (True) sau fals (False). Compilatorul evaluează
condiţia şi în funcţie de rezultatul obţinut, mai execută sau nu instrucţiunile din
corpul structurii. Dacă condiţia este o valoare numerică, atunci dacă este diferită de 0
este interpretată ca True iar valoarea 0 este interpretată ca False.
După evaluarea condiţiei, controlul execuţiei va fi transmis la una şi numai
una dintre cele două ramuri cu cu ieşire din ea.
Atunci când se foloseşte While ciclarea continuă dacă condiţia este adevărată,
în schimb când se foloseşte Until ciclarea continuă dacă condiţia este falsă.
În plus dacă condiţia este pe linia cu Do atunci structura este repetitivă cu
condiţie anterioară, deci e posibil ca instrucţiunile din corpul structurii să nu fie
executate niciodată.

122
În schimb dacă condiţia este pe o linie cu Loop atunci structura este repetitivă
cu condiţie posterioară, deci instrucţiunile din corpul structurii vor fi executate ce l
puţin odată, indiferent de valoarea de adevăr a condiţiei.
Existenţa acestei instrucţiuni pluriforme este firească deoarece în algoritmi
sunt poate, întotdeauna substituibile instrucţiunile repetitive
Dacă este întâlnit rândul cu Exit Do, atunci controlul programului este
transmis forţat în afara buclei, la prima instrucţiune care se găseşte după linia Loop.

Redăm mai jos, schema logică şi codul sursă pentru algoritmul de calcul al
sumei primelor n numere naturale, folosind cele 4 variante ale instruc ţiunii.

i) Cazul Do While cu condiţie anterioară:


'------------------------
Function sum(n As Integer)_ Function Sum (n)
As Integer
sum = 0
Dim i As Integer
sum = 0 i=1
i=1
Da
Do While i <= n i <= n
sum = sum + i
sum = sum + i
i=i+1 Return

Loop i=i+1
End Function

ii) Cazul Do Until cu condiţie anterioară:


Function Sum
'------------------------
(n) Function sum(n As Integer)_
sum = 0 As Integer
i=1
Dim i As Integer
sum = 0
Nu
i>n i=1
Do Until i > n
sum = sum + i
Return sum = sum + i
i=i+1 i=i+1
Loop
End Function

iii) Cazul Do While cu condiţie posterioară:


'------------------------

123
Function sum(n As Integer)_ Function Sum (n)
As Integer sum = 0
Dim i As Integer
i=1
sum = 0
i=1 sum = sum + i

Do i=i+1
sum = sum + i Da
i <= n
i=i+1
Loop While i <= n Ieşire
End Function
iv) Cazul Do Until cu condiţie posterioară:
Function Sum (n) '------------------------
Function sum(n As Integer)_
sum = 0
As Integer
i=1 Dim i As Integer
sum = sum + i sum = 0
i=1
i=i+1
Do
Nu sum = sum + i
i>n
i=i+1
Ieşire Loop Until i > n
End Function

6.8.3. Structura repetitivă „pentru fiecare”

Visual Basic mai are o instrucţiune specifică, derivată din instrucţiunea


FOR...NEXT numită instrucţiunea For...Each...Next. Această instrucţiune repetă un
grup de instrucţiuni pentru fiecare element al unui masiv sau al unei colecţii de
obiecte.
Sintaxa este redată mai jos:
For Each element In grup
[instrucţiuni]
[Exit For]
[instrucţiuni]
Next [element]

Element poate fi o variabilă utilizată în instrucţiune pentru a itera toate


elementele unui masiv sau a unei colecţii referit prin variabila grup. Pentru colecţii,
element poate fi variabilă de tipul variant, un obiect generic de variabilă, sau un

124
obiect specific de variabilă. Pentru masive element poate fi doar de tipul variant.
grup este un nume de colecţie sau masiv.
Exemplul următor listează numele tuturor controalelor incluse în formularul
Produse. Pentru a fi accesate controalele, formularul trebuie să fi e deschis.

'------------------------------------
Sub Form()
Dim f As Form
Dim c As Control
Set f = Forms("Produse")
For Each c In f
Debug.Print c.Name
Next
End Sub

Redăm în figura de mai jos, rularea în mediul VBA alături de mediul Access
cu formularul deschis.

6.9 Programarea recursivă

Sintagma Programare recursivă se referă la apelarea unei proceduri sau


funcţii de către ea însăşi. Orice algoritm recursiv se poate transforma într -unul
iterativ.

125
Un exemplu de funcţie recursivă, scris în VBA, cal culează suma primelor n
numere naturale:
„-------------------------
Function sum_rec(n As Integer)
If n > 0 Then
sum_rec = n+sum_rec(n –1)
End If
End Function

Apelul se poate face chiar din “Debug Window” prin linia: sum_rec(100).
Pentru a nu se apela la infinit, în subprogramele recursive trebuie plasat un
bloc de instrucţiuni care să conţină o secvenţă de oprire, oarecum similară
algoritmilor iterativi.
În programare, recursivitatea este inspirată din recursivitatea sau recurenţa din
matematică. Dacă efectiv subprogramul se apelează direct pe el însuşi atunci avem
recursivitate directă, pe când dacă un subprogram SP1 apelează un altul SP2 care
apelează la rândul lui pe SP1 atunci avem recursivitate indirectă. Prin aceasta se
ajunge la realizarea repetabilităţii unor blocuri de instrucţiuni. În general însă
recursivitatea nu face economie de memorie, deoarece trebuie menţinută o stivă cu
valorile de prelucrat, putîndu-se supraîncărca stiva şi memoria. În schimb pot
subprogramele recursive sunt lizibile şi uşor de depanat.

6.10 Obiecte ACCESS 2000

O baza de date Access este formată dintr-o mulţime de obiecte, care pot fi
accesate din VBA. Fiecare obiect are o serie de proprietăţi şi metode ataşate.
Reamintim că termenul de proprietate se referă la o dată încapsulată într-un obiect,
iar termenul de metodă se referă la un subprogram încapsulat într -un obiect.
Invocarea unei metode sau proprietăţi a unui obiect se face prin prefixarea acesteia
cu numele obiectului astfel:
 nume_obiect.nume_metodă;
 nume_obiect.nume_proprietate.

Specificarea unui obiect aparţinând unei colecţii se poate face conform uneia
din următoarele variante:
1. nume_obiect_colecţie![nume_obiect] – este nevoie de paranteze drepte
numai dacă numele obiectului conţine spatii,
2. nume_obiect_colecţie("nume_obiect"),

126
3. nume_obiect_colecţie(index_obiect) – număr care indică poziţia în
colecţie a unui obiect. Aceste numere de ordine încep de la zero.

Invocarea formularului sau raportului curent se poate face prin apelativul Me.
Printre numeroasele obiectele care pot fi utilizate de programatori sunt şi
obiectele Applicaton şi Form.

Obiectul Application referă aplicaţia Microsoft Access 2000.


Principalele metode ale obiectului Application sunt:
 CurrentDb returnează un obiect baza de date (DataBase) care refera baza de
date curentă;
 CurrentUser returnează utilizatorul curent, conectat la baza de date curent ă;
 SysCmd se poate utiliza în principal pentru a afişa un text în bara de stare
(Status Bar) sau pentru gestionarea unui Progress Bar;
 SetOption stabileşte valori pentru parametrii care se găsesc în meniul Tools,
opţiunea Options:;
 obiect_Application.SetOption nume_opţiune, setări;
 GetOption returnează valorile unor parametri care se găsesc în meniul
Tools, opţiunea Options:;
 obiect_Application.GetOption(nume_opţiune).

Principalele proprietăţi ale obiectului Application sunt:


 DoCmd apelează obiectul DoCmd, descris în paragraful precedent;
 Forms permite accesul la colecţia de formulare deschise dintr -o baza de date;
 Reports permite accesul la colecţia de rapoarte deschise dintr-o baza de
date;
 Screen permite accesul la obiectul Screen (va fi descris în paragrafele
următoare).

Obiectul Form referă un obiect de tip formular. Toate formularele deschise


din baza de date se regăsesc în colecţia Forms, fiind identificate printr-un număr,
alocat în ordinea deschiderii acestora. Primul formular deschis are numărul de ordine
zero. Pentru a afla numărul de formulare deschise la un moment dat, trebuie citită
proprietatea Count a colecţiei Forms.

Metodele obiectului Form sunt:


 Repaint redesenează pe ecran formularul pentru care a fost apelată această
metodă;
 Requery reactualizează înregistrările din formular (dacă formularul are ca
sursă o interogare se reface aceasta);

127
 SetFocus se cedează controlul formularului specificat împreună cu metoda;
 Undo - toate modificările făcute datelor afişate în formular se pierd.

Dintre proprietăţile acestui obiect amintim:


 OpenArgs - şir de caractere care poate fi transmis ca parametru la
deschiderea unui formular;
 RecordSource - numele unei tabele, interogări sau o fraza SQL ce are ca
rezultat un set de înregistrări de care este ataşat formularul;
 RecordSelectors stabileşte apariţia marcatorului de înregistrare pe formular
(TRUE) sau dezactivarea acestuia (FALSE);
 DataEntry - formularul este deschis numai pentru introducerea de
înregistrări noi;
 AutoCenter - formularul este afişat pe centrul ecranului;
 AutoResize - formularul se redimensionează pe ecran automat, astfel încât sa
se vadă tot conţinutul său;
 Caption - şir de caractere afişat în bara de titlu a ferestrei formularului;
 ControlBox setează activarea (TRUE) sau dezactivarea (FALSE) butoanelor
de control ale ferestrei formularului;
 NavigationButtons - setează activarea (TRUE) sau dezactivarea (FALSE)
controlului pentru deplasarea între înregistrările unui formular;
 Toolbar - indică bara de instrumente (Toolbar) afişată o dată cu formularul;
 Controls - reprezintă colecţia de controale de pe un formular.

6.11 Programarea dirijată de evenimente în ACCESS 2000

Prin generalizarea utilizării interfeţelor user friend, puternic interactive, se


poate vorbi de programare dirijată de evenimente în Access în contextul
formularelor, rapoartelor şi controalelor de pe un formular/raport sau secţiunile
acestora.
Exemple de evenimente în Access 2000 pot fi: deschiderea unui
formular/raport, închiderea unui formular/raport, scrierea unei înregistrări într -o
tabela, ştergerea unei înregistrări dintr-o tabela, dublu clic pe mouse, activarea unui
buton de comanda, o eroare etc. Pentru obiecte, pentru toate evenimentele din
Access, sistemul prevede proceduri sau funcţii. Ele pot fi particularizate de către
programatorii de ineterfeţe prin inserare de cod. Astfel de exemplu, la evenimentul
de deschidere a unui formular se poate ataşa o procedură/funcţie care sa testeze dacă
un anumit utilizator are drepturi de utilizare a acestuia sau înainte de salvarea unei
înregistrări într-o tabelă se poate ataşa o procedura care sa verifice respectarea
anumitor corelaţii dintre date etc.

128
Pentru a particulariza o procedură a unui eveniment legat de un obiect trebuie
parcurse următoarele etape:
 se afişază Foaia de proprietăţi;
 se selectează secţiunea Event;
 se selectează evenimentul la care se doreşte ataşarea procedurii;
 click pe butonul … pentru editarea procedurii respective. Sistemul deschide
în editorul VBA o procedură de tip Sub sau Function cu numele compus din
numele obiectului legat de numele evenimentului prin semnul _ .

Pentru un obiect formular (Form) principalele evenimente sunt:


 OnClose : se produce la închiderea şi ştergerea de pe ecran a formularului,
 OnLoad: se produce la deschiderea formularului, în momentul în care o
înregistrare din tabela sau interogarea ataşata formularului (în proprietatea
Record Source) este afişată pe ecran,
 OnCurrent: se declanşează atunci când o înregistrare din tabela sau
interogarea ataşată formularului devine înregistrare curentă.

Pentru controale dintre evenimentele caracteristice acestora se pot enumera:


 OnClick:se declanşează în momentul în care se activează butonul mouse -
ului,
 OnDblClick: se declanşează în momentul în care se activează de două ori
butonul mouse-ului (la dublu clic),
 OnMouseMove: se declanşează în momentul în care utilizatorul mută mouse -
ul pe deasupra controlului unde se tratează acest eveniment,
 OnChange: se declanşează atunci când conţinutul unui control casetă de text
(Text Box) sau listă derulantă (Combo Box) se modifică.

Exerciţiu:

Redăm un exemplu în care, într-un formular sunt plasate două dreptunghiuri:


casetă1 şi casetă2. Pentru început colorăm fondul pentru casetă1 cu rosu, iar pentru
casetă2 cu albastru. Particularizăm procedurile de evenimente astfel:
► la clic pe casetă1 formularul să devină roşu;
► la clic pe casetă2 formularul să devină albastru;
► la clic pe formular, acesta să devină gri;

129
► la dublu-clic pe casetă1, caseta să devină lila.

O altă grupare a principalelor evenimente ar putea fi redată in tabelul de mai


jos:

Tip de
Nume Apare când
eveniment
Utilizatorul realizează o acţiune cu
de fereastră Close, Load, Open, Resize, Unload
formularul sau raportul
Activate, Deactivate, Enter, Exit, Obiectul primeşte sau pierde focalizarea
de focalizare
GotFocus, LostFocus sau devine activ respectiv inactiv
AfterDelConfirm,AfterInsert,
AfterUpdate,BeforeDelConfirm,
Se fac modificări ale datelor sau
de date BeforeInsert,BeforeUpdate,
înregistrărilor
Change,Current,Delete, NotInList,
Update
Click, DblClick, MouseDown,
de mouse Apare o acţiune cu mouse-ul
MouseMove, MouseUp
Utilizatorul apasă taste sau foloseşte
de tastatură KeyDown, KeyPressed, KeyUp funcţia SendKeys pentru transmiterea unei
acţiuni
Un raport este tipărit sau este formatat în
de tipărire Format, Print, Retreat
vederea tipăririi
Creat de Access la intervale de timp
de ceas Timer
definite de utilizator

130
Apare odată cu o eroare şi dă posibilitatea
de eroare Error
utilizatorului să o trateze

Atunci când utilizatorul derulează o operaţie, Access -ul lansează o secvenţă de


evenimente. Aşa se întâmplă pentru diversele operaţii ca re pot fi executate de
operatori. Programatorii pot să modifice sau nu aceste evenimente, VBA le oferă ca
potenţial de particularizare.

În tabelul următor redăm succesiunile de evenimente ocazionate de diferite


operaţii:
Operaţie Succesiune de evenimente
Deschiderea unui formular cu controale active Open, Load, Resize, Activate, Current
Deschiderea unui formular fără controale active Open, Load, Resize, Activate, GotFocus,
Current
Închiderea unui formular cu controale active Unload, Deactivate, Close
Închiderea unui formular fără controale active Unload, LostFocus, Deactivate, Close
Intrarea într-un control Enter, GotFocus
Ieşirea dintr-un control Exit, LostFocus
Cumutarea între două formulare F1 şi F2 cu Deactivate(F1), Activate(F2)
controale active
Cumutarea între două formulare F1 şi F2 fără LostFocus(F1), Deactivate(F1), GotFocus(F2),
controale active Activate(F2)
Modificarea unui text într-o casetă text sau KeyDown, KeyPressed, Change, KeyUp
combinată, pentru fiecare caracter introdus:
Actualizarea datelor într-un control sau înregistrare KeyDown, KeyPressed, Change, KeyUp,
BeforeUpdate, AfterUpdate, Exit
Înserarea unei înregistrări, la intrarea în primul KeyDown, KeyPressed, BeforeInsert, Change,
control KeyUp
Înserarea unei înregistrări, la ieşirea din ultimul BeforeUpdate, AfterUpdate, AfterInsert
control
Stergerea uneiÎnregistrări Delete, Current, BeforeDelConfirm şi dacă se
apasă Yes se mai face şi AfterDelConfirm

6.12 Accesul cu programele la obiectele


bazei de date

Obiectele bazelor de date pot fi accesate cu


ajutorul extensiilor API ale limbajelor de programare.
În continuare vom prezenta cateva aspecte ale
posibilităţilor prin care se rezolvă această problemă cu
VBA.
131
Deja am dat câteva exemple în acest sens în subcapitolele ante rioare.
Obiectele bazelor de date Access sunt structurate în ierarhii: ADODB (ActiveX Data
Objects), ADOX (Microsoft ADO Extensions for DLL and Security) şi JRO
(Microsoft Jet and replication Objects). Pentru exploatarea datelor se folosesc
obiectele ADODB iar pentru definiţia datelor se folosesc obiectele ADOX.
ADODB este un model ierarhic de obiecte, Catalog
redat în figura alăturată. Tables Table
Casetele gri reprezintă obiecte, iar Columns Column
casetele albe colecţii de obiecte. Properties Propert
Indexes Index y
Specificarea unui obiect aparţinând unei
colecţii se poate face conform uneia dintre Columns Column
Properties Propert
următoarele variante: Keys Key
y
► nume_colecţie![nume_obiect] –fiind nevoie Columns Column
de paranteze drepte numai dacă numele Groups Group Properties Propert
Users User y
obiectului conţine spaţii;
Users User
► nume_colecţie("nume_obiect");
Groups Group
► nume_colecţie(index_obiect) – index care Procedure Procedur
s
indică poziţia în colecţie a unui obiect. e
Commmand

Aceste numere de ordine încep de la zero. Views View


Commmand
ADOX este o colecţie de obiecte produse de
Microsoft pentru definirea şi crearea structurilor bazelor de date şi a securităţii
acestora, redată în figură. Specificarea unui obiect aparţinând unei colecţii se poate
face în mod similar specificării obiectelor în cazul ierarhiei ADODB.

Cel mai important obiect din ADODB este obiectul Connection care defineşte
o sesiune de lucru pentru un utilizator al unei date particulare. Cum am mai spus, se
pot folosi în principal, informaţii din baze de date Access, SQL Server sau MSDE.
Pentru a ne conecta la baza de date, Data Source=C: \My
Documents\bdNelu.accdb, trebuie scris următorul cod:
'---------------------------------------
Public Sub conexiune()
Dim con As ADODB.Connection
' realizează o conectare
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;" _
& "Data Provider=Microsoft.ACE.OLEDB.12.0"; & _
"Data Source=C:\My Documents\bdNelu.accdb "
con.Open
MsgBox con.ConnectionString
set con= Nothing
End Sub
132
Deci trebuie declarată o variabilă pentru obiectul conexiune. Apoi trebuie
precizat conţinutul iniţial al şirului conexiunii, care conţine valorile pentru
proprietăţile conexiunii. Pentru a realiza conexiunea sunt obligatorii specificarea
proprietăţii Provider, Data Source şi User.
Însă de cele mai multe ori se lucrează cu datele din baza de date curentă. În
consecinţă codul se simplifică astfel:
'---------------------------------------
Public Sub conexiune()
Dim con As ADODB.Connection
' realizează o conectare
Set con = CurrentProject.Connection
MsgBox con.ConnectionString
set con= Nothing
End Sub

Se observă că nici măcar nu trebuie dată comanda Open pentru conexiunile la


datele proiectului curent.

Până aici s-a prezentat doar prima chestiune care trebuie rezolvată în lucrul cu
datele. Obiectul care conţine informaţiile care vor fi procesate de rutine este
mulţimea de înregistrări (în limba engleză: RecordSet).
Pentru iniţializarea lucrului cu o mulţime de înregistrări se utilizează
următoarea secvenţă de instrucţiuni:
Dim mî as RecordSet
set mî = New ADODB.RecordSet
mî.Open Sursă, Conexiune, TipCursor, TipBlocare, Opţiuni

 "mî" este numele variabilei prin care se face referire la mulţimea de î nregistrări,
iar ultima linie, bineînţeles că este prezentată ca ca sintaxă pe care o vom explica.
Parametrul "sursă" poate fi numele unui tabel sau numele unei interogări,
comenzi, intucţiuni SQL sau procedură ce are rezultat o mulţime de înregistrări.
Despre "conexiune" am scris puţin înainte.
Parametrul "tipcursor" poate fi specificat cu următoarele constante
predefinite: adOpenDynamic, adOpenKeyset, adOpenStatic sau adOpenForwardonly.
Diferenţele între aceste tipuri de cursoare apar de la modul cum e tr atată înregistrarea
referită la un moment dat, deplasarea prin înregistrări sau posibilitatea de a se seziza
modificările făcute de alţi utilizatori. Numele lor sugerează oarecum despre ce e
vorba.

133
Parametru "tipblocare" se referă la modul de tratare a î nregistrărilor pe timpul
editării lor, posibilitatea de acces la ele a altor utilizatori. Constantele predefinite
care stabilesc acest parametru sunt: adLockReadOnly, adLockPessimistic,
adLockOptimistic şi adLockBatchOptimistic.
Implicit ultimii doi parametrii sunt daţi de constantele: adOpenForwardonly şi
respectiv adLockReadOnly.
Pentru parametrul opţiuni se pot folosi următoarele constante VB: adCmdText,
adCmdTable, adCmdTableDirect, adCmdStoredProc, adCmdUnknown şi adCmdFile
care precizează modul cum este evaluat parametrul "sursă".
Acestea fiind precizate putem să trecem la prezentarea unor exemple mai
edificatoare.

Pentru trecerea de la o înregistrare la alta într-o mulţime de înregistrări


(navigare) se folosesc metodele Move, MoveNext, MovePrevious, MoveFirst şi
MoveLast.
'---------------------------------------
Public Sub Navigare(tabel as string)
Dim rs As ADODB.Recordset
Dim con As ADODB.Connection
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
with rs
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.Open tabel, con, , , adCmdTable
If .RecordCount > 0 Then
.MoveFirst
Do
For i = 0 To .Fields.Count - 1
Debug.Print .Fields(i).Value;
Next
Debug.Print
.MoveNext
Loop Until .EOF
End If
End With
rs.close
con.close
set rs=nothing
set con=nothing

134
End Sub

Acest exemplu
afişează valorile câmpurilor
înregistrărilor unui tabel
(dacă există câmpuri de tip
obiect OLE rezultatul e
imprevizibil). Apelul poate
fi făcut din fereastra
Immediate, acolo unde va
afişa:

S-a arătat doar


navigarea printre
înregistrări, un proces
ReadOnly. Pentru a se putea
interveni cu actualizări trebuie să se facă apel la metodele .AddNew, .Update sau
.Delete. Actualizările practic sunt făcute după o căutare prealabilă a articolului în
cauză. Fie un tabel "persoane" cu campurile marca şi nume. Scriem o procedură care
va căuta articolul cu marca 50. Dacă tabelul este indexat cătarea se poate face cu
metoda .Seek altfel cu metoda .Find. O vom folosi pe aceasta din urmă, dar atenţie
este mai lentă şi folosirea ei repetată încetineşte lucrul.

Metoda .Find are următoarea sintaxă:


Recordset.Find condiţie, articolesarite, sens, articolstart

Parametrul "condiţie" e evident. "articolesarite" specifică un număr de articole


din vecinătatea articolului de unde se începe căutarea care nu sunt verificate (implicit
0). "sens" poate fi adSearchForward sau adSearchBackWard (implicit în faţă).
Început poate fi primul articol, ultimul sau articolul curent (implicit).

Procedura este următoarea:


'---------------------------------------
Public Sub Modificare_Stergere()
Dim rs As ADODB.Recordset
Dim con As ADODB.Connection
dim sirdate as String
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
with rs

135
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.Open "persoane", con, adOpenStatic, _
adLockOptimistic, adCmdTable
.Find "marca=50"
If Not .Eof Then
sirdate=""
For i = 0 To .Fields.Count - 1
sirdate =sirdate & .Fields(i).Value
Next
Dim rasp
rasp = InputBox("articolul cautat este" + vbCr _
+sirdate + vbCr + "m- modificare, d -stergere", "m")
If lCase(rasp)="d" Then
.Delete
Else
.Fields("Marca")=InputBox( _
"Altă valoare pentru Marca")
.Fields("Nume")=InputBox( _
"Altă valoare pentru Nume")
.Update
End If
End If
End With
rs.close
con.close
set rs=nothing
set con=nothing
End Sub

Ce operaţii se realizează? După iniţializări se caută articolul cu marca = 50 si


se afişează conţinutul lui. Apoi operatorul e întrebat dacă doreşte să modifice sau să
şteargă articolul. Pentru ştergere se utilizează metoda .Delete. Pentru modi ficare se
citeşte valori noi pentru cele două c\mpuri şi apoi se utilizează metoda .Update.

Pentru adăugarea unei noi înregistrări se poate folosi procedura:


'---------------------------------------
Public Sub adăugare()
Dim rs As ADODB.Recordset
Dim con As ADODB.Connection

136
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
with rs
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.Open "persoane", con, adOpenStatic, _
adLockOptimistic, adCmdTable
.AddNew
.Fields("Marca")=InputBox( _
"Altă valoare pentru Marca")
.Fields("Nume")=InputBox( _
"Altă valoare pentru Nume")
.Update
End With
rs.close
con.close
set rs=nothing
set con=nothing
End Sub

Reamintim că la deschiderea unei mulţimi de înregistrări ca sursă se poate lua


şi o interogare de selecţie ca şi comandă sau o interogare de selecţie salvată, s.a.m.d.
Din proceduri VBA se pot lansa şi interogări de ştergere, actualizare sau
adăgare cu ajorul comenzii .Execute.
Până acum, în această secţiune am prezentat exemple de folosire a obiectelor
ADODB. În continuare vom analiza folosirea obiectelor ADOX pentru definirea şi
crearea structurilor de baze de date.

Procedura următoare crează un tabel cu numele "colaboratori" ce are două


câmpuri "Marca" şi "Nume" în baza de date: C:\doros\Ang.accdb
Sub CreareTabelPrinVBA()
On Error GoTo CreateTableError
Dim tbl As New Table
Dim cat As New ADOX.Catalog
' Deschide catalogul bazei de date
cat.ActiveConnection = "Provider=Microsoft.Access.OLEDB.10.0;" _
& "Data Source=C:\doros\Ang.accdb;" _
& "Data Provider=Microsoft.ACE.OLEDB.12.0"
tbl.Name = "colaboratori"
tbl.Columns.Append "Marca", adInteger

137
tbl.Columns.Append "Nume", adVarWChar, 50
cat.Tables.Append tbl
Debug.Print "Table 'MyTable' is added."
'eliberarea memoriei obiectelor
Set cat.ActiveConnection = Nothing
Set cat = Nothing
Set tbl = Nothing
Exit Sub
CreateTableError:
Set cat = Nothing
Set tbl = Nothing

If Err <> 0 Then


MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
End Sub

Odată create tabelele, structura lor poate fi modificată. Se pot adăuga noi
coloane, se pot şterge dintre cele existente se pot modifica dintre atributele lor, etc.

Principalele tipuri de coloane care trebuie precizate la instrucţiunea


.Column.Append sunt:
Constant Codul Description
adBinary 128 Binary
adBoolean 11 Boolean
adUnsignedTinyInt 17 Byte
adCurrency 6 Currency
adDate 7 Date/Time
adDouble 5 Double
adGUID 72 GUID
adInteger 3 Long
adLongVarBinary 205 Long Binary (OLE Object)
adLongVarChar 201 Memo
adNumeric 131 Numeric
adSmallInt 2 Integer
adSingle 4 Single
adVarWChar 202 Text

ADOX conţine obiecte şi pentru creare sau modificare de indecşi, creare sau
modificare de interogări, creare de indecşi. În fine, următorul exemplu modifică
comanda SQL a unei interogări stocate în baza de date:

138
'---------------------------------------
Public Sub ADOXSchimbSQL()
Dim cat As New ADOX.Catalog
Dim cmd As New ADODB.Command
' Deschiderea catalogului de tabele ale bazei de date
cat.ActiveConnection = CurrentProject.Connection
' Accesarea interogării
Set cmd = cat.Procedures(1).Command
' Modificarea comenzii
cmd.CommandText = "SELECT * FROM ANG;"
' Salcvarea noii comenzi
Set cat.Procedures(1).Command = cmd
Set cat = Nothing
Set cmd = Nothing
End Sub

139
CAPITOLUL VII. ÎNDRUMAR PENTRU REALIZAREA
PROIECTULUI LA DISCIPLINA „BAZE DE DATE”
7.1. Cerinţe minimale
Studenţii anului II, de la specializările „Finanţe şi bănci‖ şi „Management‖,
trebuie să întocmească, la finalul semestrului I, anul II de studii, la disciplina „Baze
de date‖, un proiect prin care să demonstreze posibilitatea folosirii produsului MS
ACCESS în gestionarea bazelor de date.
Pentru disciplina „Baze de date‖, nota finală obţinută de un student este
compusă din:
► 1 punct din oficiu;
► Max. 3 puncte pentru activitatea din timpul semestrului la această
disciplină;
► Max. 3 puncte pentru susţinerea proiectului;
► Max. 3 puncte pentru susţinerea examenului final.

Dacă un student nu susţine corect acest proiect, va fi declarat restanţier la


această disciplină.
Proiectul va conţine o bază de date tip MS Access compusă din următoarele
obiecte:
► Cel puţin 2 tabele între care să existe relaţii;
► Formulare de introducere de date în aceste tabele;
► Diverse interogări bazate pe aceste tabele;
► Rapoarte pentru listarea informaţiilor conţinute în tabele.

Baza de date va fi salvată pe un CD sau FD şi obiectele precizate în paragraful


anterior trebuie să fie funcţionale.
Studentul va prezenta împreună cu baza de date o documentaţie a conţinutului,
listată şi îndosariată (cca 10-15 pagini), structurată pe următoarele capitole:
► Motivaţia lucrării;
► Descrierea datelor şi variabilelor utilizate;
► Descrierea machetelor pentru formularele de introducere de date;
► Descrierea machetelor pentru rapoartele de listare a informaţiilor
conţinute în tabele;
► Listingul şi explicaţia diverselor interogări sau module utilizate;
► Concluzii trase după realizarea proiectului şi propuneri de perfecţionare.

140
Cerinţele prezentate mai sus pentru baza de date şi pentru documentaţia
aferentă sunt obligatorii şi minimale.

7.2. Baza de date


a. Tabelele

Tabelele cuprinse în baza de date trebuie să se refere la un domeniu concret şi


să cuprindă date necesare pentru rezolvarea unei probleme.

Redăm, în continuare, câteva exemple de posibile teme:


► gestiune depozit de materiale, întocmire balanţă şi fişe;
► evidenţă încasări de la clienţi, întocmire balanţă şi fişe;
► evidenţa plăţilor către furnizori, întocmire balanţă şi fişe;
► evidenţa numerarului, întocmire registru de casă;
► evidenţa contului curent, reconstituire extras de cont;
► gestiune chioşc de închiriat filme;
► evidenţa cheltuielilor de scară;
► evidenţa bonurilor de materiale;
► evidenţa invitaţiilor la un teatru;
► evidenţa contribuţiei artiştilor la spectacole;
► evidenţa vânzărilor biletelor de avion;
► evidenţa vanzărilor biletelor de tren;
► evidenţa articolelor contabile şi întocmirea balanţei şi fişelor ;
► evidenţa maşinilor dintr-un parc auto;
► evidenţa mijloacelor fixe;
► evidenţa obiectelor de inventar;
► evidenţă de oferte şi cereri la o agenţie imobiliară;
► registru de intrări şi ieşiri la un secretariat;
► evidenţa enoriaşilor unei parohii;
► evidenţa notelor studenţilor;
► registru de înmatriculare;
► fişe de bibliotecă;
► ocuparea camerelor într-un hotel;
► ocuparea camerelor într-un cămin;
► evidenţa bolnavilor într-o clinică;
► evidenţa membrilor unui club

141
Tema problemei de rezolvat este aleasă de student, nu neapărat din listă şi se
va aprecia originalitatea. Este recomandabil, ca studenţii să-şi aleagă teme cu care au
avut tangenţă în experienţa lor profesională.
Bazele de date vor fi relaţionale, normalizate măcar până la forma normală 3
şi vor conţine informaţii neredundante.

Deci, este incorect ca să existe două tabele cu următoarea structură:


Catalog Rulaj
Cod Nume Preţ Cod Nume Data Cantitate TipOperatie

deoarece al doilea tabel conţine informaţii redundante (câmpul Nume) şi nu respectă


a doua regulă de normalizare care necesită ca fiecare coloană care nu este cheie să
depindă complet de cheia primară, nu doar de o parte a cheii. (câmpul Nume depinde
numai de câmpul Cod, nu de combinaţia Cod+Data, care constituie cheia primară).

Nu este corect nici un tabel de forma:


TaxeStudenţi
Nr. Matricol Nume Rata1 Rata2 Rata2
deoarece conţine o listă de câmpuri şi nu e în forma normală 1.

b. Interogările

Prin obiectele create, studentul va


face dovada că înţelege diversele tipuri
de interogări: de extragere (SELECT cu
toate clauzele), de inserare (INSERT), de
modificare (UPDATE) şi de ştergere
(DELETE).
Cele mai importante interogări ale
proiectului vor fi cele care se referă la
datele din mai multe tabele, simultan.

c. Formularele

Formularele
create trebuie să
conţină posibilităţi de
introducere a tuturor
datelor definite în

142
tabele.
Atunci când e necesar să se introducă date prin exploatarea unor relaţii dintre
tabele, se va apela la tehnica modulelor Visual Basic, a interogărilor (de tip join) sau
a subformularelor.
Mai mult de jumătate din numărul formularelor din proiect, trebuie să nu fie
create cu expertul.

În formulare se vor plasa controale de următoare tipuri:


► Etichete;
► Casete text;
► Casete combo;
► Imagini, linii sau dreptunghiuri;
► Butoane de comandă.

În figurile de mai sus sunt prezentate câteva exemple de formulare.


Se va aprecia pozitiv, existenţa în proiect, a unui formular care monitorizează
funcţionarea obiectelor proiectului.

d. Rapoartele

Rapoartele trebuie să poată lista toate informaţiile din tabele, sub diferit e
forme, în diferite moduri ordonare sau de grupare.
Mai mult de jumătate din numărul rapoartelor din proiect, trebuie să nu fie
create cu expertul.
Atunci când e necesar listeze date prin exploatarea unor relaţii dintre tabele,
se va apela la tehnica interogărilor (de tip join).

În rapoarte se vor plasa controalele următoare:


► Etichete;
► Casete text;
► Imagini, linii sau dreptunghiuri.

Cel puţin într-un raport, se vor plasa câmpuri care vor conţine valori rezultate
ale funcţiilor de grupare.

În figura de mai jos prezentăm un exemplu de raport:

143
7.3. Documentaţia
Studentul va prezenta împreună cu baza de date o documentaţie a conţinutului,
listată şi îndosariată (cca 10-15 pagini), structurată pe următoarele secţiuni:
► motivaţia lucrării;
► descrierea datelor şi variabilelor utilizate;
► descrierea machetelor pentru formularele de introducere de date;
► descrierea machetelor pentru rapoartele de listare a informaţiilor
conţinute în tabele;
► listingul şi explicaţia diverselor interogări sau module utilizate;
► concluzii trase după realizarea proiectului şi propuneri de perfecţionare.

Studenţii vor trebui să respecte întocmai structura acestei documentaţii, dar în


redarea ei nu este obligatoriu să se recurgă la formulările stricte redate mai jos, ca
model.
În documentaţie nu vor fi redate elemente teoretice, ci vor fi prezentate
succint elementele conţinute în proiect.

Prima pagină a dosarului va avea următorul format:

144
ACADEMIA COMERCIALĂ SATU MARE

PROIECT LA DISCIPLINA
BAZE DE DATE

Folosirea MS ACCESS
în gestionarea unei baze de date
conţinutul bazei de date
.

Autor student:
numele studentului, anul şi specializarea

a. Motivaţia lucrării - Satu Mare 2010

În această secţiune se pot prezenta elemente precum cele redate în modelul de


mai jos:
conţinutul bazei de date
Acest proiect este destinat gestionării ,
menirea organizaţiei
într-o organizaţie , pentru angajaţii săi de la
numele compartimentului sau biroului
compartimentul .
Proiectul este realizat cu ajutorul aplicaţiei MS Access Office 2003.
Pentru funcţionarea lui sunt necesare:
numărul şi pregătirea angajaţilor, numărul de calculatoare, alte resurse de hard sau soft, etc

b. Descrierea datelor şi variabilelor utilizate

În această secţiune vor fi prezentate sau explicate:


► toate câmpurile tabelelor, natura, tipul, dimensiunea şi restricţiile
informaţiilor pe care le stochează;
► câmpurile calculate ale interogărilor;
► variabilele calculate ale controalelor din formulare sau rapoarte.
De exemplu, pentru un tabel cu numele „Sahisti‖, cu informaţii despre
sportivii legitimaţi, se va explica structura, după modelul următor:

Structura de tabel pentru tabelul “sahisti”

145
Camp Tip Nul Explicaţii despre conţinut
întreg Numărul legitimaţiei are 6 cifre, e necesară o variabilă de tip
NrCarnet Da
lung Întreg lung, valori pozitive
Numele sportivului, nu depăşeşte 50 caractere, cu litere mari,
text
Nume Da fără diacritice. Dacă sunt mai multe cuvinte, între ele se
(50)
intercalează cratimă
Toate prenumele pe care le are sportivul, nu depăşeşte 70
text
Prenume Da caractere, cu litere mari, fără diacritice. Dacă sunt mai multe
(70)
cuvinte, între ele se intercalează cratimă
Una dintre valorile ―M‖ pentru sexul masculin, sau respectiv,
Sex text (1) Da
―F‖ pentru sexul feminine
Nascut date Da Data neşterii sportivului, în format zz.ll.aaaa
Titlul sau categoria sportivă. Pentru sportivii de sex
masculine sunt posibile valorile: ―NC‖ – neclasificat, ―III‖ –
categoria a III-a, ―II‖ – categoria a II-a, ―I‖ – categoria a I-a,
Titlu text (3) Da ―CM‖ – candidat de maestru, ―M‖ –maestru, ―FM‖ – maestru
FIDE, ―MI‖ – maestru internaţional, ―GM‖ – mare maestru
internaţional. Pentru sportive sunt posibile valorile
corespunzătoare: ―WCM‖, ―WM‖, ―WFM‖, ―WMI‖, ―WGM‖.
Coeficientul valoric al sportivului. Poate lua valori între 401
şi 1400, când e calculat de federaţia naţională, sau valori
CIV întreg Da între 1401 şi 2900, când e calculat de federaţia internaţională,
Valorile pot fi stocate într-un număr întreg pozitiv (pe doi
octeţi)
Numele întreg (inclusive calea de directoare) a fişierului acre
text
Poza Da conţine imagine pozei sportivului. E recomandat să existe un
(100)
camp cu lărgime considerabilă.
Codul acordat de federaţia internaţională pentru sportiv. Are
întreg
IdFide Da 7 cifre, e necesară o variabilă de tip Întreg lung, valori
lung
pozitive.

c. Descrierea machetelor pentru formularele de introducere de


date sau a rapoartelor de ieşire

În aceste secţiuni vor fi prezentate sau explicate formularele (sau rapoartele)


folosite. În documentaţie formularele şi rapoartele vor fi prezentate distinct, în
secţiuni separate.

146
Machetele corespunzătoare formularelor (sau rapoartele) vor fi captate cu
ajutorul tastei „PrintScreen‖ şi inserate în documentaţie. Se vor prezenta toate
controalele incluse în fiecare formular (sau raport). Se vor prezenta toate
proprietăţile, metodele şi evenimentele la care s-a intervenit cu modificări, la nivel
global pentru formular (sau raport), sau pentru fiecare control în parte.

De exemplu:
Primul formular este destinat, după cum are şi numele, completării tabelului
CATALOG. Este un formular simplu, finisările care s -au făcut sunt:
 scoaterea butoanelor de navigare;
 introducerea unui combobox pentru selectarea articolelor după nume;
 introducerea a 4 butoane de comenzi pentru ştergere, salvare,
restaurare şi adăugare articole.

d. Listingul şi explicaţia diverselor interogări sau module utilizate

Pentru fiecare dintre interogările create se va explica ce realizează, se va afişa


comanda SQL şi, în cazul interogărilor de selecţie, se va prezenta schiţat macheta
rezultatului.

De exemplu:
Interogarea următoare listează numele şi salariul şoferilor din ta belul „Ang‖:
Select NumeA, Sal from Ang where fnc=”SOFER”

Extragere SOFERI
numeA sal
Popan 800
Matus 1100
Chivu 950

147
Dacă proiectul conţine module VisualBasic, sursele acestora vor fi listate şi
explicate.

e. Concluzii trase după realizarea proiectului şi propuneri de


perfecţionare

În câteva fraze vor fi redate:


 limitele proiectului realizat;
 constrângerile pe care le suportă;
 posibilităţile de îmbunătăţire şi de extindere.

148
BIBLIOGRAFIE

Doros, I.. —Societatea informațională. Orașul virtual-Editura Gutenberg Arad-2009


Doros, I., Popei, V. —Dictionar pentru utilizatorii de calculatoare personale - Editura Dacia
Cluj-Napoca-2007
Doros, I., Todor., L, Ardelean, A.E., Tulbure, C. —Informatica pentru utilizatorii de calculatoare
personale - Editura Dacia Cluj-Napoca-2005
Lungu, I., Sabău, Gh. ,s.a.— Sisteme informatice. Analiză, proiectare şi implementare, Editura
Economică, Bucureşti 2003
Muntean, D.V., Andreica, A., Todor, L.S., Doros, I. —Bazele informaticii. Aplicații- Editura
Gutenberg Arad-2009
Năstase,P., Mihai,F.— Baze de date – Microsoft Access 2000 , Editura Teora, Bucureşti 2003
Sabău,G.,Muntean,M., Dardală,M.,Bologa,R., Bologa, A.R.— Baze de date, Editura MatrixRom,
Bucureşti 2008
Velicanu, M.-Baze de date prin exemple- Editura ASE București -2007
*** — http://office.microsoft.com/ro-ro/access - pagină web a prodului Access

149