Sunteți pe pagina 1din 56

INFORMATICĂ DE GESTIUNE (LIMBAJE DE PROGRAMARE)

CONŢINUTUL TEMATIC AL DISCIPLINEI

 CAP.I ORGANIZAREA DATELOR

 CAP.II PROGRAMAREA BAZELOR DE DATE

 CAP.III LIMBAJUL SQL

 CAP.IV VISUAL BASIC PENTRU APLICAŢII (VBA)

 CAP.V PROGRAMAREA DIRIJATĂ DE EVENIMENTE

 CAP.VI MACRO–URI (MACROS)

BIBLIOGRAFIE MINIMALĂ

[1] Rotaru, Simona; Ghită, Mirela, (2015), Sisteme și aplicații informatice pentru economie, Editura
Revers, Craiova
2] Rotaru, Simona; Ghită, Mirela, (2010), Sisteme de gestiune economică, Editura Sitech, Craiova.
[3] Fusaru D., Gherasim Z, Andronie M., Bâră A., (2003), Aplicaţii economice în Visual Basic şi Access,
Ed. Fundaţiei România de Mâine, Bucureşti.
[4] Gherasim Z, (2007), Programarea si Baze de dates, Ed. Fundaţiei România de Mâine, Bucureşti.
[5] Lungu I, Sabău Gh, (2013), Sisteme informatice și baze de date, ASE, București
[6] Velicanu Manole ş.a.(2013), Sisteme de gestiune a bazelor de date prin exemple, ASE, București
[7] Curtis G., Cobham D (2012), Bussiness Information Systems, Analysis, Design and Practice,
Prentice – Hall, fourth editions
[8] Connolly, T. and Begg, C (2012), Database Systems. A Practical Approach to Design,
Implementation and Management, Addison Wesley, third edition
CAP.I ORGANIZAREA DATELOR

Datele sunt stocate în memoria internă şi memoria externă a oricărui sistem de calcul.
Organizarea datelor presupune:
 Definirea, structurarea, ordonarea şi gruparea datelor în colecţii de date omogene;
 Stabilirea legăturilor în mod ierarhic între date, între elementele unei colecţii de
date şi în final, între colecţiile de date;
 Stocarea datelor pe suport informaţional prelucrabil într-un sistem de calcul.
Organizarea datelor este făcută în scopul regăsirii automate după diverse criterii.
În organizarea datelor se urmăresc mai multe obiective:
 Timpul de acces la datele organizate pe diverse suporturi să fie minim;
 Datele să apară o singură dată în sistem;
 Spaţiul de memorie internă şi externă alocat datelor să fie cât mai redus;
 Această organizare să reflecte absolut toate legăturile dintre obiectele, procesele
economice pe care aceste date le reprezintă;
 Să permită schimbarea structurii datelor şi a relaţiilor dintre acestea fără a produce
modificări în programele care le gestionează.
O colecţie de date reuneşte date despre o anume clasă de obiecte (reale sau conceptuale).
Spre exemplu colecţia de alte PRODUSE - FINITE reuneşte datele cu privire la clasa de obiecte
PRODUSE .
O clasă de obiecte conţine obiecte de acelaşi tip, adică obiecte ce au aceleaşi
caracteristici (atribute). Realizările unei clase de obiecte formează o colecţie de date. Colecţiile
de date au structuri uniforme, ele reprezintă valori ale caracteristicilor (atributelor) obiectelor
tip.
Întreprinderile organizează mai multe colecţii de date: colecţia de date CONTURI,
colecţia de date PRODUSE colecţia de date LOCURI-DE-ACTIVITATE etc.
Folosirea tehnologiilor informaţionale în colectarea, stocarea, procesarea şi transmiterea
colecţiilor de date a impus definirea unor tehnicii şi metode de organizare a acestora .
Se cunosc două metode de organizare a colecţiilor de date :organizarea în fişiere de date
şi în baze de date.
Un fişier este un ansamblu organizat de date omogene din punct de vedere al naturii şi al
criteriilor de prelucrare, memorate pe suporturi de unde pot fi utilizate în procesul de prelucrare.
Se consideră că organizarea datelor în fişiere prezintă următoarele limite:
- Datele au un caracter separat, izolat fără a fi puse în evidenţă legăturile dintre ele;
- Redundanţa datelor şi riscul de inconsistenţă a datelor sunt apreciabile;
- Dependenţa programelor faţă de date în sensul că elaborarea programelor este strâns
legată de organizarea datelor şi de natura suportului. Orice modificare de suport sau structură a
datelor generează modificarea programului, recompilarea şi resetarea acestuia;
- Reprezentarea unor obiecte complexe în cazul utilizării fişierelor este extrem de
dificilă;
- Imposibilitatea realizării unor prelucrări care nu au fost prevăzute anterior.
Limitele organizării datelor în fişiere şi posibilităţile oferite de noile tehnologii
informaţionale au dus la promovarea metodei de organizare a datelor în bază de date.
În esenţă conceptul de baza de date poate fi definit ca un sistem de colecţii de date, cu
legături logice multiple şi de descriere a datelor şi a legăturilor, destinat satisfacerii operative a
celor mai diversificate solicitări provenite din partea unor grupuri diferite de utilizatori.
Într-o bază de date sunt înregistrate datele despre obiectele reale sau abstracte, dar şi
asocierile (relaţiile) care se pot stabili între acestea. Se spune că între baze de date există o
interdependenţă logică. Luarea în calcul a interdependenţelor ce se pot stabili între colecţiile de
date memorate într-o bază de date contribuie la asigurarea integrităţii funcţionale a bazei de
date. Spre exemplu, înregistrarea datelor privind facturile primite de la furnizori este posibilă
numai dacă datele despre furnizori există în baza de date.
Între colecţiile de date FACTURI şi respectiv, FURNIZORI există o legătură logică
(spunem noi o relaţie de integritate funcţională).
Datele sunt descrise o singură dată şi utilizate chiar simultan, de mai mulţi utilizatori
(fără ca aceştia să se mai preocupe de descrierea acestora şi de modul cum sunt memorate fizic
datele pe suporturi tehnice).
O bază de date conţine: descrierea datelor; înregistrările de date (tuplurile).
Organizarea datelor în baze de date trebuie să îndeplinească următoarele condiţii:
- Să asigure o independenţă sporită a datelor faţă de programe şi invers;
- Structura bazei de date trebuie astfel concepută încât să asigure informaţiile necesare şi
suficiente pentru cerinţele de informare şi decizie;
- Să asigure o redundanţă minimă şi controlată a datelor;
- Să permită accesul rapid la datele stocate în bază.
Organizarea datelor într-o bază de date se realizează pe trei niveluri:
logic (extern);
conceptual (virtual);
fizic (intern).
Pentru fiecare nivel se defineşte o schemă a bazei de date: schema logică, conceptuală şi
fizică.
Schema logică (externă) reflectă viziunile specifice unui utilizator sau grupuri de
utilizatori asupra datelor. Fiecare utilizator îşi creează colecţiile de date prin prisma intereselor
sale de aplicaţie. Dacă datele ar fi stocate conform acestei scheme, ar putea apărea o redundanţă
sporită a datelor deoarece mai mulţi utilizatori pot utiliza aceleaşi date.
Schema conceptuală (virtuală) este obţinută pe baza schemelor logice prin eliminarea
redundanţelor şi sintetizarea datelor.
Schema fizică (internă) reprezintă descrierea schemei conceptuale în termeni specifici
memorării fizice a datelor pe suporturi tehnice. Trecerea de la schema conceptuală la cea internă
se face prin intermediul limbajelor de descriere a datelor, care sunt incluse în sistemele de
gestiune a bazelor de date.
Pentru o bază de date se pot defini:
mai multe scheme logice;
o singură schemă conceptuală;
o singură schemă fizică.
Cele trei niveluri de reprezentare a datelor şi cu structurile aferente sunt reprezentate în
figura 1.1

Aplicaţia Aplicaţia Aplicaţia Aplicaţia Aplicaţia


1.1 1.2 1.3 n.1 n.2

Nivel extern
Schema Schema
externă 1 externă n

INTERFAŢĂ

SGBD Nivel
SCHEMA
conceptual
CONCEPTUALĂ

INTERFAŢA

BAZA DE DATE
MEMORATĂ PE DISC Nivel intern

Fig. 2.1
MODELE DE DATE PENTRU BAZE DE DATE

Modelul de date constituie un ansamblu de concepte şi instrumente necesar pentru a


construi o schemă a bazei de date.
De-a lungul timpului s-au manifestat mai multe generaţii de modele ale datelor, dar în
gestiunea bazelor de date cele mai utilizate modele au fost: ierarhic, reţea, relaţional şi obiectual.
Modelul ierarhic
Acest model are la bază structura arborescentă(baza de date poate fi asimilată unei
mulţimi de arbori). Există un tip de înregistrare definit ca rădăcină şi, la orice alt nivel, mai
multe tipuri de înregistrări subordonate (legătura între două nivele succesive fiind de unul la
mulţi în jos şi unu la unu în sus). Accesul la date se face numai prin vârful ierarhiei (rădăcină).
Reprezentarea modelului ierarhic se realizează prin intermediul diagramelor de structură
formate din două elemente:
dreptunghiuri – corespunzătoare tipurilor de înregistrări;
linii – corespunzătoare legăturilor.
O înregistrare reprezintă o colecţie de câmpuri, fiecare câmp conţinând o singură valoare,
iar legătura reprezintă o asociere între două înregistrări. Fiecărui tip de înregistrare din
diagrama de structură îi corespunde, în baza de date, un anumit număr de înregistrări (realizări).
Exemplu:
Se consideră o bază de date cu informaţii despre studenţii şi facultăţile unei universităţi,
fiecare student fiind înscris la o singură facultate.
În figurile 2.2 (diagrama de structură) şi respectiv 2.3 (realizări) este reprezentat modelul
ierarhic al exemplului considerat.

FACULTĂŢI Cod_F. Denumire_F.

STUDENŢI Marca_S. Nume_S. An_studiu

Fig. 2.2

FACULTĂŢI

1 Marketing 2 Informatică de 3 Finanţe şi


gestiune Bănci

11 Mihai Dan I 21 Manea Ion 22 Ciurea Elena


I I
Fig. 2.3

În exemplul de mai sus, tipului de înregistrare rădăcină Facultăţi îi corespund trei


înregistrări (1, Marketing), (2, Informatică de gestiune), (3, Finanţe şi Bănci). Prima înregistrare
(1, Marketing) este rădăcină pentru (111, Mihai Dan, I), care este o realizare a tipului de
înregistrare Studenţi, a doua înregistrare (2, Informatică de gestiune) este rădăcină pentru (211,
Manea Ion, I), (212, Ciurea Elena, I), iar cea de-a treia înregistrare nu are nici o realizare.
Modelul reţea
Modelul reţea este similar cu modelul ierarhic. Datele sunt reprezentate ca într-o mulţime
de ierarhii, în care un subordonat poate avea oricâţi superiori. La un subordonat se poate ajunge
pe mai multe căi.
Structura de bază este formată tot dintr-un set de înregistrări care sunt interconectate prin
intermediul unor legături. Reprezentarea bazei de date se poate asimila unui graf direcţionat
(noduri şi arce).
Exemplu:
Se consideră o bază de date cu studenţii, bursele obţinute de aceştia şi facultăţile din
cadrul unei universităţi. Numărul studenţilor diferă de la o facultate la alta, în timp ce mediile
obţinute pot fi şi identice. Un student este înscris la o singură facultate indiferent de media
obţinută.
Diagrama de structură a bazei de date este redată în figura 2.4, iar realizările în figura
2.5.

FACULTĂŢI Cod_F Denumire_F

STUDENŢI Marcă_S Nume_S An_studiu

BURSE Media Tipul_bursei

Fig. 2.4
În exemplul considerat, tipului de înregistrare FACULTĂŢI îi corespund trei înregistrări:
(1, Marketing), (2, Informatică de gestiune), (3, Finanţe şi Bănci), tipului de înregistrare BURSE
două realizări (9.42, Bursă studiu), (9.86, Bursă merit), iar tipului de înregistrare STUDENŢI
trei realizări: (111, Mihai Dan, I), (211, Manea Ion, I), (212, Ciurea Elena, I). Înregistrările (1,
Marketing) - FACULTĂŢI şi (9.42, Bursă studiu) - BURSE sunt părinţi pentru (111, Mihai Dan,
I) - STUDENŢI. Realizarea (211, Manea Ion, I) - STUDENŢI are ca părinţi: (2, Informatică de
gestiune) - FACULTĂŢI şi (9.42, Bursă studiu) - BURSE, iar realizarea (212, Ciurea Elena, I) -
STUDENŢI are ca părinţi înregistrările: (2, Informatică de gestiune) - FACULTĂŢI şi (9.86,
Bursă merit) - BURSE. Înregistrarea (3, Finanţe şi Bănci) - FACULTĂŢI nu are copii.

Fig. 2.5
Modelul relaţional
Modelul relaţional are la bază teoria matematică a relaţiilor (algebra relaţională = colecţie
de operatori ce au ca operanzi relaţii) permiţând utilizatorului să vadă baza de date ca o colecţie
de tabele (relaţii).
Modelul relaţional a fost introdus în 1970 de cercetătorul american E. F. Codd şi se
fundamentează pe conceptul de structură relaţională şi algebră relaţională.
Structura relaţională
Relaţia reprezintă un subansamblu al produsului cartezian al mai multor mulţimi
(domenii), subansamblu caracterizat printr-un nume şi care conţine tupluri cu semnificaţie.
Putem descrie o relaţie prin formula:
R  D1  D2  D3  .......... .........  Dn
sau
R ( X 1 , X 2 ,............. X n )
Funcţia de mulţimi pe care este definită relaţia se numeşte domeniu. Un domeniu se poate
defini explicit , prin enumerarea tuturor valorilor aparţinând acestuia, sau, implicit, prin
precizarea proprietăţilor pe care le au valorile din cadrul domeniului respectiv.
Pentru un ansamblu de domenii D1 , D2 ,...........Dn , produsul cartezian al acestora
reprezintă ansamblul tuplurilor  d1 , d 2 ,........d n  unde: d1 este o valoare aparţinând
domeniului D1 , d 2 este o valoare aparţinând domeniului D2 , ş.a.m.d. Numărul n (numărul
valorilor dintr-un tuplu) reprezintă gradul relaţiei. Numărul de tupluri m din relaţie indică
cardinalitatea relaţiei şi reprezintă extensia acesteia.
Dacă tuplurile dintr-o relaţie trebuie să fie unice, un domeniu poate apărea de mai multe
ori în produsul cartezian pe care este definită relaţia.
O relaţie este reprezentată într-o formă simplă, uşor de întreţinut şi utilizat, printr-un
tabel bidimensional. La definirea şi utilizarea acestuia se operează cu următoarele concepte:
atribut, tuplu, cheie primară, cheie externă, domeniul atributului.
În constituirea tabelului (relaţiei) se vor respecta următoarele reguli:
fiecare coloană este identificată printr-un nume distinct;
în fiecare coloană toate valorile sunt de acelaşi tip;
toate liniile sunt distincte, dublurile nefiind admise;
ordinea liniilor şi coloanelor nu este impusă.
Pentru exemplificare se consideră tabelele (relaţiile): CLIENŢI şi FACTURI
CLIENŢI
Cod
Nume client Adresă client Telefon
client
469 Matei Alin Braşov 092746539
765 Gusu Pavel Cluj 091765350
595 Micu Dan Arad 092847586

FACTURI
Nr. factură Dată factură Preţ factură Cod client
1543772 12/04/02 154676839 595
2645799 24/05/02 243869435 469
12978635 09/06/02 367485932 765

Cod client, Nume client, Adresă client, Telefon, Nr. factură, Dată factură, Preţ factură,
Cod client sunt atributele celor două tabele.
Fiecare coloană se numeşte domeniu şi conţine toate valorile unui atribut, iar fiecare linie
se numeşte tuplu. Numărul liniilor se numeşte cardinalul tabelului, în timp ce numărul
coloanelor se numeşte gradul tabelului.
Trebuie făcută diferenţierea între:
structura tabelului, definită prin ansamblul atributelor;
tupluri (înregistrări) care sunt instanţieri (realizări) ale structurii.
În cadrul fiecărui tabel se alege un atribut care să poată identifica în mod unic, printr-o
valoare distinctă, tuplurile relaţiei. Acest atribut se numeşte cheie primară.
Atributul Cod client din tabelul CLIENŢI constituie cheie primară (nu pot exista mai
mulţi clienţi cu acelaşi cod).
Legătura între tabele se asigură pe baza valorilor unor atribute din structura tabelului
numite şi chei externe. Un atribut este cheie externă pentru o relaţie, dacă se regăseşte pe post de
cheie primară în altă relaţie.
Atributul Cod client din tabelul FACTURI este cheie externă a acestui tabel. Legăturile se
stabilesc pe baza valorilor atributului Cod client. Unei realizări a tabelului CLIENŢI i se pot
asocia zero, una sau mai multe realizări ale tabelei FACTURI.
În activitatea de modelare relaţională a datelor, având în vedere că relaţiile reflectă
anumite aspecte din lumea reală, trebuie respectate restricţiile (constrângerile) de integritate.
Restricţiile de integritate ale modelului relaţional sunt de două tipuri:
a) restricţii de integritate care depind de semantica valorilor domeniilor.
Din această categorie fac parte:
restricţia de unicitate a cheii – semnifică faptul că într-o relaţie nu pot exista două tupluri
cu o aceeaşi valoare pentru atributele cheie;
restricţia entităţii (integritatea entităţii), potrivit căreia, într-o relaţie atributele cheii
primare să fie nenule; altfel cheia nu va mai fi identificator;
restricţia referenţială (integritatea referirii), impune ca valorile unei chei externe să
figureze (refere) prin valorile cheii primare din altă relaţie sau să fie valori „null” (nedefinite).
b) alte restricţii de integritate care ţin cont de dependenţa între date şi de semnificaţia valorilor
din cadrul bazei de date.

CAP.II PROGRAMAREA BAZELOR DE DATE


Noţiuni de bază referitoare la programare

Un program reprezintă o succesiune de instrucţiuni , realizată în conformitate cu regulile


limbajului de programare folosit, care rezolvă o anumită problemă, îndeplineşte o anumită
sarcină, printr-un anumit algoritm.
Algoritmul reprezintă un concept folosit pentru a desemna o mulţime finită de operaţii
cunoscute care, executate într-o ordine bine stabilită, pornind de la o mulţime de valori (date) de
intrare conduc la obţinerea în timp finit a unei alte mulţimi de valori, valori (date) de ieşire.
Algoritmul este astfel conceput încât să fie respectate următoarelel cerinţe:
• claritate, ceea ce înseamnă ca algoritmul să fie bine definit (cu specificaţii riguroase şi
fără ambiguităţi);
• determinism, adică în fiecare moment al execuţiei algoritmului, se cunoaşte cu
exactitate următoarea operaţie, precum şi modul de execuţie a fiecăreia;
• universalitate, ceea ce semnifică faptul că orice algoritm, fiind cât mai universal cu
putinţă, asigură rezolvarea unei clase largi de probleme;
• finitudine, ce constă în faptul că algoritmul este finit în spaţiu (ca descriere) şi asigură
obţinerea rezultatului într-un timp determinat de execuţie, adică după un anumit număr finit de
paşi.
Reprezentarea algoritmului se poate face sub mai multe forme; însă cele mai uzuale
sunt: reprezentarea în limbaj pseudocod şi schema logică.
Scrierea programului, constă în codificarea algoritmului, adică conversia acestuia în
conformitate cu instrucţiunile unui limbaj de programare.
Limbajul de programare este un limbaj artificial ce se foloseşte pentru definirea unui şir
de instrucţiuni care pot fi prelucrate şi executate pe un calculator.
Limbajele de programare se definesc formal prin alfabet, vocabular şi gramatici (fapt ce
permite compilarea sau interpretarea lor).
Indiferent de limbajul de programare folosit pentru rezolvarea problemei, realizarea unui
program presupune parcurgerea următoarelor etape:
1. Analiza problemei de rezolvat şi realizarea algoritmului, etapă ce presupune elaborarea unui
enunţ complet al problemei, stabilirea modalităţilor de organizare şi de reprezentare a datelor de
intrare şi de ieşire, elaborarea schemei logică de sistem care defineşte echipamentele din
configuraţia calculatorului ce participă la procesul de prelucrare a datelor, realizarea
algoritmului ce presupune elaborarea şi reprezentarea acestuia în limbaj pseudocod sau sub
forma schemei logice de program.
2. Scrierea (introducerea) programului, ce are drept scop codificarea algoritmului, adică
conversia acestuia în conformitate cu instrucţiunile unui limbaj de programare; pentru această
codificare, se foloseşte un editor de texte; acest editor poate fi independent sau poate face parte
din mediul integrat de dezvoltare (IDE); se obţine astfel programul sursă (codul-sursă al
programului) care este scris într-un limbaj similar cu limbajul natural, dar încă inaccesibil
sistemului de calcul.
3. Compilarea programului, ce realizează traducerea programului-sursă scris într-un limbaj de
programare de nivel înalt în program-obiect, exprimat în instrucţiuni codmaşină. Această
operaţie de traducere se obţine, în mod automat, prin folosirea unei componente a sistemului de
operare, numită compilator.
4. Editarea de legături (linkeditarea), ce asigură includerea codului obiect al programului
(programul-obiect) într-un ansamblu executabil (programul executabil) care cuprinde şi module
specifice sistemului de operare, funcţii de bibliotecă etc. cu ajutorul componentei denumită
editor de legături (linkeditor). Eventualele erori ce apar conduc la corecţii în programul-sursă.
5. Testarea logică a programului, ce realizează verificarea finală a programului pe baza unui set
de date de test care acoperă domeniul real de valori ale datelor de intrare ce se vor folosi în
timpul exploatării programului.
Programarea orientată spre obiecte
Abordarea obiectuală semnifică organizarea şi funcţionarea programelor, aplicaţiilor ca
un ansamblu de obiecte distincte ce cooperează între ele.
Orientarea spre obiecte este caracterizată printr-o noţiune centrală, aceea de obiect.
Alături de aceasta mai întâlnim următoarele concepte: clasa, mesajul, moştenirea,
polimorfismul, încapsularea, persistenţa.
Obiectul este o abstractizare a entităţii lumii reale şi se caracterizează prin: s tare;
comportament, identitate.
Starea unui obiect este definită de valorile atributelor sale. Un atribut este definit printr-
un nume şi poate lua valori elementare (numeric, alfanumeric, etc.) sau complexe (structuri de
multiple referinţe spre alte obiecte, tipuri utilizatori etc.).
Comportamentul unui obiect este definit de setul de operaţii şi metode aplicabile
obiectului respectiv.
Identitatea unui obiect este proprietatea acestuia care îl distinge de alte obiecte. Astfel,
spre deosebire de modelul relaţional în care datele sunt identificate prin valori ale cheii primare
desemnate de utilizator, în modelul orientat obiect identificarea obiectelor este asigurată automat
de sistem şi este transparentă utilizatorului.
O clasă este un tip abstract de date care defineşte atât structura obiectelor din clasa
respectivă, cât şi mulţimea metodelor existente pentru aceste obiecte.
Obiectele din aceeaşi clasă au aceleaşi atribute şi aceleaşi metode şi răspund la acelaşi
mesaj.
Clasele sunt organizate ierarhic. Orice subclasă moşteneşte metodele şi structura clasei
din care face parte.
Un obiect răspunde la mesaje. Mesajul este unitatea de comunicaţie dintre obiecte.
Mesajele cuprind: numele mesajului, numele obiectului ţintă şi argumentele necesare, dacă
există. Când un obiect primeşte un mesaj una din procedurile sale este apelată. Procedura
realizează apoi o operaţie care poate returna un rezultat. Mesajele sunt implementate prin
intermediul metodelor.
Moştenirea este procesul prin care toate atributele şi metodele unei clase sunt preluate de
o altă clasă înrudită, numită subclasă. Clasa de la care atributele şi metodele sunt moştenite se
numeşte supraclasă.
Prin intermediul moştenirii se pot exprima relaţii deosebit de utile între clase:
clasificarea, generalizare, specializare.
Polimorfismul semnifică posibilitatea unui obiect, instanţă a unei clase, să răspundă
diferit la primirea aceluiaşi mesaj.
Polimorfismul se poate asigura prin două căi:
 redefinirea metodelor moştenite în clasele derivate;
 crearea unor metode cu acelaşi nume dar cu parametrii deferiţi.
Încapsularea
Încapsularea constă în capacitatea obiectelor de a conţine la un loc atât date cât şi operaţii
dintre care numai o parte sunt vizibile din exterior.
Un obiect este compus din două părţi:
 interfaţa – permite unui utilizator extern să solicite obiectului executarea unei
acţiuni;
 o parte ascunsă, de implementare – reprezentată de starea internă şi de metodele
obiectului.
Încapsularea ascunde utilizatorului complexitatea unui obiect, oferind o imagine
simplificată care îi permite să rezolve mai uşor problemele complexe.
Persistenţa este proprietatea obiectelor care determină existenţa mai îndelungată a
acestora faţă de procesul care le-a creat; este proprietatea prin care starea bazei de date asigură
execuţia unui proces pentru a fi refolosit ulterior în alt proces.
VBA este limbajul pentru dezvoltarea aplicaţiilor în Access, punând la dispoziţie un
limbaj complex pentru dezvoltarea aplicaţiilor în cadrul programelor din Microsoft Office 2000,
ceea ce înseamnă că nucleul limbajului, componentele sale şi mediul sunt aceleaşi ca în
Microsoft Access 2000, Microsoft Visual Basic, Microsoft Excel şi Microsoft Project.
Limbajul VBA este foarte bogat şi complex, având la dispoziţie o serie de tehnici
avansate.
O bază de date, conţine numeroase tipuri de obiecte, ce pot fi manipulate cu uşurinţă prin
programe VBA. Obiectele sunt componentele unei baze de date, ele include tabelele,
interogările, formularele, rapoartele, comenzile macro şi module carem apar în fereastra bazei de
date, precum şi controalele(casetele de text, casete listă, butoane etc.) care apar într-un formular
sau într-un raport.
Folosind VBA se pot edita şi şterge obiecte din baza de date în timpul execuţiei
aplicaţiei, ceea ce permite transmiterea unui formular unei funcţii precum şi manipularea
obiectelor acestuia.
Metodologia de realizare a bazelor de date

Organizarea unei baze de date


Activitatea de realizare a unei baze de date trebuie să înceapă cu organizarea acesteia,
adică pregătirea acţiunii. În cadrul acestei pregătiri, ţinând seama de obiectivele urmărite pentru
realizarea bazei de date, se va face un fel de inventar a ceea ce este minim necesar pentru a se
putea realiza baza de date. Se poate astfel, din start, hotărî dacă activitatea va demara imediat
sau dacă mai sunt necesare alte acţiuni premergătoare.
Principalele aspecte mai importante urmărite la organizarea unei baze de date sunt:
1. Organizarea intrărilor de date, se referă la:
- sursa datelor (documente primite, fişiere etc.)
- actualizarea datelor (moduri, momente, reorganizări etc.)
- controlul intrărilor de date (natură, conţinut, format, periodicitate etc.)
2. Organizarea memorării datelor , se referă la:
- principii de memorare (memoria internă/externă , forma de stocare, legături între
date, tehnici utilizate etc.);
- optimizarea memorării (redundanţă, spaţiu alocare, codificare,
reorganizare etc.)
3. Organizarea protecţiei datelor sub cele două aspecte (securitatea şi integritatea se
referă la:
- instrumente oferite de către SGBD (autorizare acces, fişiere jurnal, arhivări etc.)
- metode proprii (parole, rutine speciale, antivirus etc.)
4. Organizarea legăturilor bazei de date cu alte aplicaţii, se referă la : conversii,
standarde, compatibilităţi, interfeţe etc.
Obiective urmărite la realizarea unei BD
Atunci când dorim să realizăm o bază de date trebuie să ştim clar ce avem de făcut, adică
să stabilim obiectivele activităţii noastre. În acest sens, câteva din cele mai importante obiective,
le prezentăm în continuare. Acestea ar trebui să constituie un set minim de obiective, de care să
se ţină cont la realizarea unei baze de date.
1. Partiţionarea semnifică faptul că aceleaşi date trebuie să poată fi folosite în moduri
diferite de diferiţi utilizatori.
2. Deschiderea se referă la faptul că datele trebuie să fie uşor adaptabile la schimbările
care pot apărea (actualizarea structurii, tipuri noi de date etc.)
3. Eficienţa are în vedere stocarea şi prelucrarea de date, care trebuie să se facă la
costuri cât mai scăzute, costuri care trebuie să fie inferioare veniturilor obţinute
4. Reutilizarea înseamnă faptul că fondul de date existent trebuie să poată fi utilizat în
diferite aplicaţii informatice.
5. Regăsirea este o activitate frecventă pe bazele de date şi de aceea cererile de regăsire
trebuie să poată fi adresate uşor de către toate categoriile de utilizatori, după diferite
criterii.
6. Accesul înseamnă modul de localizare a datelor şi acest lucru trebuie să poată fi
realizat prin diferite moduri de acces, rapid şi uşor.
7. Modularizarea presupune faptul că realizarea BD trebuie să se poată face modular
pentru generalitate şi posibilitatea lucrului în echipă
8. Protecţia bazei de date trebuie asigurată sub ambele aspecte: securitatea şi
integritatea datelor.
9. Redundanţa se asigură în limite acceptabile prin implementarea unui model de date
pentru baze de date şi prin utilizarea unei tehnici de proiectare a BD. Se asigură
astfel, o redundanţă minimă şi controlată.
10. Independenţa datelor faţă de programe trebuie asigurată atât la nivel logic cât şi fizic.
Etape de realizare a unei baze de date
Bazele de date au evoluat ca un tip special de sisteme informatice, şi anume cele care au
organizarea datelor în memoria externă conform unui model de date specific. De aceea, în
metodologia de realizare a BD se parcurg, în cea mai mare parte, cam aceleaşi etape ca la
realizarea unui sistem informatic, cu o serie de aspecte specifice. Pe de altă parte, în literatura de
specialitate, sunt diferite propuneri de metodologii de realizare a bazelor de date.
Ţinând cont de cele două aspecte de mai sus, autorii propun câteva activităţi care trebuie
parcurse la realizarea unei baze de date. Aceste activităţi vor fi regăsite, sub aceeaşi denumire
sau sub denumiri diferite, în majoritatea metodologiilor de realizare a bazelor de date, din
literatura de specialitate.
Activităţile (etapele) parcurse pentru realizarea unei BD (figura 4.1) sunt: analiza de
sistem, proiectare noului sistem, realizarea componentelor logice, punerea în funcţiune,
dezvoltarea.
1.Analiza de sistem
Scopul acestei activităţi este de a evidenţia cerinţele aplicaţiei şi resursele utilizate
(studiul), precum şi de a evalua aceste cerinţe prin modelare (analiza).
STUDIUL situaţiei existente se realizează prin:
- definirea caracteristicilor generale ale unităţii;
- identificarea activităţilor desfăşurate;
- identificarea resurselor existente (informaţionale, umane, energetice, echipamente,
financiare etc.)â
- identificarea necesităţilor de prelucrare.
ANALIZA sistemului existent urmează investigării (studiului) şi utilizează informaţiile
obţinute de aceasta.

1. ANALIZA DE SISTEM
lumea reală
studiul analiza

2. PROIECTAREA

alegerea proiectarea
SGBD fcţ. BD

3. REALIZAREA
COMPONENTELOR LOGICE
4. PUNEREA ÎN FUNCŢIUNE ŞI
EXPLOATAREA

5. DEZVOLTAREA
Figura 4.1. Activităţile parcurse pentru realizarea unei baze de date
Analiza este o activitate de modelare (conceptuală) şi se poate realiza sub trei aspecte:
structural, dinamic şi funcţional.
a) Analiza structurală evidenţiază, la nivel conceptual, modul de structurare a datelor şi
a legăturilor dintre ele. Cea mai utilizată tehnică este entitate-asociere.
Aceasta conţine:
1) Identificarea entităţilor: fenomene, procese, obiecte concrete sau abstracte
(substantivele din prezentarea activităţii descrise) (exemple de entităţi: Persoane,
Produse, Beneficiari).
2) Identificarea asocierilor dintre entităţi ca fiind legăturile semnificative de un anumit
tip (verbele din prezentarea activităţii descrise).
3) Identificarea atributelor ce caracterizează fiecare entitate în parte (exemple de
atribute: Marca, Nume, Adresă).
4) Stabilirea atributelor de identificare unică a realizărilor entităţii, drept chei.
Rezultatul analizei structurale este modelul static (structural), numit şi diagramă entitate-
asociere.
b) Analiza dinamică evidenţiază comportamentul elementelor sistemului la anumite
evenimente. Una dintre tehnicile utilizate este diagrama stare-tranziţie.
Aceasta presupune:
1) Identificarea stărilor în care se pot afla componentele sistemului.
2) Identificarea evenimentelor care determină trecerea unei componente dintr-o stare în
alta.
3) Stabilirea tranziţiilor admise între stări
4) Construirea diagramei stare-tranziţie
Rezultatul analizei dinamice: modelul dinamic
c) Analiza funcţională evidenţiază modul de asigurare a cerinţelor informaţionale
(fluxul prelucrărilor) din cadrul sistemului, prin care intrările sunt transformate în
ieşiri. Cea mai utilizată tehnică este diagrama de flux a datelor.
Conform acestei tehnici se delimitează:
1) Aria de cuprindere a sistemului.
2) Se identifică sursele de date.
3) Se identifică modul de circulaţie şi prelucrare a datelor.
4) Se identifică apoi rezultatele obţinute.
Rezultatul analizei funcţionale: modelul funcţional.
Notă. Exemplu privind activitatea de analiză, sub toate cele trei aspecte prezentate mai
sus, vezi cartea [LUVE00].
2. Proiectarea structurii bazei de date
Pornind de la modelele realizate prin activitatea de analiză, se poate proiecta structura
BD, parcurgând două subactivităţi: alegerea SGBD-ului, proiectarea funcţiilor BD.
a) Alegerea SGBD-ului se face ţinând cont de două aspecte: cerinţele aplicaţiei
(utilizatorului) şi performanţele tehnice ale SGBD-ului.
Cerinţele aplicaţiei se referă la:
- volumul de date estimat a fi memorat şi prelucrat în BD;
- complexitatea problemei de rezolvat;
- ponderea şi frecvenţa operaţiilor de intrare/ieşire;
- condiţii privind protecţia datelor;
- operaţii necesare pe baza de date (încărcare/validare, actualizare, regăsire etc.)
- particularităţi ale activităţii pentru care se realizează baza de date.
Performanţele tehnice ala SGBD-ului se referă la:
- modelul de date pe care-l implementează;
- ponderea utilizării SGBD-ului pe piaţă şi tendinţa;
- configuraţia de calcul minim cerută,
- limbajele de programare din SGBD;
- facilităţi de utilizare oferite pentru diferite categorii de utilizatori;
- limitele SGBD-ului;
- optimizări realizate de SGBD;
- facilităţi tehnice;
 lucrul cu mediul distribuit şi concurenţa de date;
 elemente de multimedia;
 elemente de CASE;
 interfeţe de comunicare;
 autodocumentarea;
 instrumente specifice oferite.
b) Proiectarea funcţiilor BD se realizează prin: proiectarea schemelor BD, proiectarea
modulelor funcţionale specializate.
Proiectarea schemelor BD se realizează pornind de la rezultatele modelării conceptuale
(analiza de sistem) şi ţinând cont de modelul de date implementat de SGBD-ul ales. Se vor
proiecta schemele: conceptuală, externă internă.
Proiectarea schemei structurale porneşte de la identificarea setului de date necesar
sistemului. Aceste date sunt apoi integrate şi structurate într-o schemă (exemplu: pentru BD
relaţionale cea mai utilizată tehnică este nominalizarea).
Proiectarea schemei externe are rolul de a specifica viziunea fiecărui utilizator asupra
BD. Pentru acest lucru, din schema conceptuală se identifică datele necesare fiecărei viziuni.
Datele obţinute se structurează logic în subscheme ţinând cont de facilităţile de utilizare şi de
cerinţele utilizatorului. Schema externă devine OPERAŢIONALĂ PRIN CONSTRUIREA
UNOR VIZIUNI (VIEW) CU SGBD-UL şi acordarea drepturilor de acces. Datele într-o viziune
pot proveni din una sau mai multe colecţii şi nu ocupă spaţiul fizic.
Proiectarea schemei interne presupune stabilirea structurilor de memorare fizică a
datelor şi definirea căilor de acces la date. Acestea sunt specifice fie SGBD-ului (scheme de
alocare), fie sistemului de operare. Proiectarea schemei interne înseamnă realizarea operaţiilor:
 estimarea spaţiului fizic pentru BD şi definirea unui model fizic de alocare (a se
vedea dacă SGBD-ul permite explicit acest lucru);
 definirea unor indecşi pentru accesul direct, după cheie, la date;
Proiectarea modulelor funcţionale ţine cont de concepţia generală a BD, precum şi de
schemele proictate anterior. În acest sens, se proiectează:
- fluxul informaţional;
- modulele de încărcare şi manipulare a datelor;
- interfeţele specializate;
- integrarea elementelor proiectate cu organizarea şi funcţionarea BD.
3. Realizarea componentelor logice
Componentele logice ale unei BD sunt programele de aplicaţie dezvoltate, în cea mai
mare parte, în SGBD-ul ales.
Programele se realizează conform modulelor funcţionale proiectate în etapa anterioară.
Componentele logice ţin cont de ieşiri, intrări, prelucrări şi colecţiile date.
În paralel cu dezvoltarea programelor de aplicaţii se întocmesc şi documentaţiile diferite
(tehnică, de exploatare , de prezentare).
4. Punerea în funcţiune şi exploatarea
Se testează funcţiile BD mai întâi cu date de test, apoi cu date reale.
Se încarcă datele în BD şi se efectuează procedurile de manipulare, de către beneficiar cu
asistenţa proiectantului.
Se definitivează documentaţiile aplicaţiei.
Se intră în exploatare curentă de către beneficiar conform documentaţiei.
5. Dezvoltarea sistemului
Imediat după darea în exploatare a BD, în mod continuu, pot exista factori perturbatori
care generează schimbări în BD.
Schimbările necesare trebuie preluate de BD uşor şi din mers.
Factorii pot fi: organizatorici, datoraţi progresului tehnic, rezultaţi din cerinţele noi ale
beneficiarului, din schimbarea metodologiilor etc.

Eficienţa bazelor de date

Efectele directe şi indirecte ale bazelor de date conduc spre eficienţă, mai ales pentru
aplicaţiile mari şi complexe, acolo unde alte produse informatice nu fac faţă.
Efectele utilizării BD conduc spre avantajele oferite de acestea:
- elimină redundanţele necontrolate;
- creşte productivitatea activităţii informatice;
- oferă suport informaţional optim pentru conducere şi execuţie,
- permite interogarea datelor de către toate categoriile de utilizatori;
- conduce spre aplicaţii deschise.
Efortul depus pentru realizarea şi întreţinerea unei BD este considerabil şi de aceea
investiţia necesară trebuie fundamentată pentru a putea fi recuperată.
Fundamentarea investiţiei pentru o aplicaţie cu BD se face prin studiul de fezabilitate
(analiza preliminară) care va conţine un studiu al costurilor şi o evaluare a eforturilor de
realizare şi întreţinere.
Etape care trebuie parcurse pentru stabilirea eficienţei BD:
1. Studiul costurilor iniţiale (de realizare)
 costul software-ului necesar;
 costul hardware-ului necesar;
 costul impus de trecerea de la sistemul existent la SBD;
 costul resurselor necesare (umane, materiale, informaţionale etc.);
 costul consultaţiei tehnice.
2. Evaluarea costurilor de funcţionare a BD
 costul de punere în funcţiune;
 costul de exploatare;
 costul de întreţinere şi dezvoltare.
3. Calcule de rentabilitate
 utilizarea unor modele specifice (exemplu: Analiza Cost-Beneficiu);
 utilizarea unor instrumente hardware şi software specializate pentru BD (cresc
performanţa, scad portabilitatea).
CAP.III LIMBAJUL SQL

3.1 CARACTERISTICI GENERALE

Limbajul SQL (Structured Query Language) este unul dintre cele mai puternice limbaje
structurate pentru interogarea bazelor de date relaţionale permiţând o comunicare complexă şi rapidă a
utilizatorului cu bazele de date, în funcţie de cerinţele şi restricţiile acestuia.
Se cunosc trei metode de bază privind implementarea limbajului SQL, şi anume:
cea prin apelare directă (Direct Invocation) – constă în introducerea instrucţiunilor SQL de la
prompter;
cea modulară (Modul Language) – foloseşte anumite proceduri apelate de programele aplicaţiei;
cea de tip încapsulat (Embedded SQL) – are în vedere instrucţiuni încapsulate în codul de
program, fiind de tip static sau dinamic.
Instrucţiunile SQL, în funcţie de rolul lor în manipularea datelor şi tranzacţiilor, pot fi grupate
astfel:
instrucţiuni de definire a datelor care permit descrierea structurii bazei de date;
instrucţiuni de selecţie a datelor care permit consultarea bazei de date;
instrucţiuni de manipulare a datelor, în sensul adăugării, modificării şi ştergerii înregistrărilor;
instrucţiuni de procesare a tranzacţiilor care privesc unităţile logice de prelucrare şi constituie în
fapt operaţii multiple de manipulare a datelor;
instrucţiuni de control al cursorului;
instrucţiuni privind controlul accesului la date.
Cu ajutorul următoarelor reguli se pot construi instrucţiuni valide, uşor de citit şi de editat:
Instrucţiunile SQL pot fi scrise cu litere mari sau mici, în afară de cazurile indicate;
Instrucţiunile SQL pot fi introduse pe una sau mai multe linii;
Cuvintele cheie nu pot fi abreviate sau despărţite în linii diferite;
Clauzele, de obicei, sunt plasate pe linii separate pentru a fi lizibile;
De obicei cuvintele cheie sunt introduse cu majuscule; iar toate celelalte cuvinte, ca numele de
tabele şi coloane, sunt introduse cu litere mici;
În cadrul SQL*Plus, instrucţiunile SQL sunt introduse de la promterul SQL, iar următoarele linii
sunt numerotate. Acesta se numeşte un buffer SQL. O singură instrucţiune poate fi curentă în orice timp
în cadrul buffer–ului.
Executarea instrucţiunilor SQL
Poziţionarea punct şi virgulei (;) la sfârşitul ultimei clauze;
Poziţionarea unui slash (/) la sfârşitul ultimei linii din buffer;
Punerea unui slash la promterul SQL;
În cadrul SQL*Plus – comanda RUN la promterul SQL.

Pentru a crea şi executa interogări SQL în SGBD Access se parcurg etapele:


din fereastra Open, se deschide baza de date asupra căreia se vor efectua interogările SQL
din fereastra Database care se afişează se va selecta eticheta Query. Pentru a crea interogarea
SQL se va selecta opţiunea “Create query în Design View”
se alege cu ajutorul butonului Add tabela (Tables), interogarea (Query) sau ambele categorii de
obiecte (Both) care vor prezenta suportul interogării SQL. Din fereastra Show Table se pot selecta mai
multe tabele (interogări).
pentru a scrie interogarea SQL ACCESS este necesar să se selecteze din meniul View opţiunea
SQL View. În această fereastră se vor scrie instrucţiunile SQL
pentru a pune în execuţie comanda SQL din meniul Query se selectează opţiunea Run. Pe ecran
se va afişa rezultatul; acest rezultat va fi interpretat de utilizator.
3.2 LIMBAJ DE DEFINIRE A DATELOR: SQL–LDD

3.2.1 Gestiunea schemei bazei de date


Schema unei baze de date descrie tabelele şi atributele aferente lor, domeniile în care aceste
atribute iau valori, restricţiile de integritate, drepturile de utilizare a relaţiilor, view–urile şi detaliile
relative la implementarea fizică a tabelelor.
Limbajul de definire a datelor LDD (Language Data Definition), parte componentă a limbajului
SQL, include instrucţiuni care permit realizarea acţiunilor specifice descrierii schemei bazei de date.
Majoritatea implementărilor limbajului SQL conţin instrucţiuni pentru crearea unei baze de date,
fie că acestea fac parte din setul de comenzi al versiunii SQL, fie sub formă de programe utilitare. Prima
etapă în administrarea datelor o reprezintă crearea bazei de date. Sintaxa comenzii nu este standardizată,
putând varia în funcţie de necesităţile utilizatorului şi de S.G.B.D.–ul folosit. De exemplu ACCESS SQL
nu acceptă o astfel de instrucţiune.
La crearea unei baze de date trebuie respectate anumite restricţii stabilite de administratorul de
sistem şi anume, cele referitoare la nivelul drepturilor de utilizare a instrucţiunilor în sistem şi cele care
privesc stabilirea dimensiunilor predefinite pentru baza de date.

Crearea unei baze de date


Sintaxa:
CREATE DATABASE nume_baza_de_date;
Exemplu: Să se creeze baza de date Situaţia beneficiarilor:
CREATE DATABASE Situaţia_beneficiarilor
Crearea unei tabele
Sintaxa:
CREATE TABLE nume_tabelă
(câmp1 tip_dată [NOT NULL],
câmp2 tip_dată [NOT NULL],
câmp3 tip_dată [NOT NULL]...);

Exemplu:
Să se creeze tabela Beneficiar cu structura următoare: Cod beneficiar (tip numeric), Denumire
beneficiar (tip text), Adresa (tip text), Telefon (tip numeric).
CREATE TABLE Beneficiar
(Cod_beneficiar Number, Den_beneficiar Text, Adresa Text, Telefon Number);
Modificarea structurii unei tabele.
Comanda ALTER TABLE permite modificarea unei tabele prin adăugarea/ştergerea de atribute şi
prezintă următoarea sintaxă:
Sintaxa:
ALTER TABLE nume_tabelă {ADD COLUMN nume_atribut1
Tip_data [(mărime)] [NOT NULL][CONSTRAINT index] │DROP COLUMN nume_atribut2
CONSTRAINT indexname};

Exemplu:
Să se adauge tabelei Beneficiar un nou câmp numit Banca.
ALTER TABLE Beneficiar
ADD COLUMN Banca Text;

Exemplu:
Să se realizeze ştergerea atributului Adresa din tabela Beneficiar
ALTER TABLE Beneficiar
DROP COLUMN Adresa Text;
Ştergerea relaţiilor dintr–o bază de date
Ştergerea unei tabele se realizează cu ajutorul comenzii DROP TABLE, odată cu aceasta
ştergându–se şi indecşii, view–urile definite pentru respectiva tabelă, neexistând nici o posibilitate de
recuperare a informaţiei şterse.

Sintaxa:
DROP TABLE nume_tabelă;

Exemplu:
Să se şteargă tabela Beneficiar din baza de date Situaţia beneficiarilor
DROP TABLE Beneficiar;
Ştergerea unei baze de date
Ştergerea unei baze de date determină ştergerea tuturor obiectelor conţinute de aceasta, a copiei
cataloagelor SQL din directorul bazei de date.
Sintaxa:
DROP DATABASE nume_bază de date;
Această instrucţiune nu este inclusă de anumite versiuni SQL, ştergerea făcându–se mai uşor
printr–o apăsare a mouse–lui. Într–o reţea de calculatoare nu poate fi ştearsă o bază de date activată de
către un alt utilizator. Comanda de ştergere nu poate acţiona asupra unei baze de date active.
3.2.2. Gestiunea indecşilor
Un index este un obiect schemă care îmbunătaţeşte regăsirea înregistrărilor folosind un pointer.
Indecşii pot fi creaţi explicit sau automat.
Un index furnizează un acces direct şi rapid la înregistrarile unei baze de date. Scopul utilizării
indecşilor este reducerea numărului de citiri/scrieri pe disc, prin folosirea unei căi indexate pentru a
localiza mai rapid datele. Indexul este automat folosit si întreţinut de serverul Oracle. Odată creat
indexul, nu este necesară nici o intervenţie din partea utilizatorului.
Indecşii sunt logic si fizic şi sunt independenţi de bazele de date pe care le indexează. Acest lucru
înseamnă că indecşii pot fi creaţi sau şterşi oricând fără nici un efect asupra bazelor de date sau a altor
indecşi.
Nota:
Când este şters un tabel, indecşii corespunzători sunt de asemenea şterşi.
Indexul este un obiect din schemă.
Indexul este folosit de serverul Oracle pentru o mai bună regăsire a înregistrarilor prin utilizarea
unui pointer.
Indexul reduce numărul operaţiilor de citire/scriere pe disc prin utilizarea unei metode de
accesare rapidă, pentru o mai eficientă localizare a datelor.
Indexul este independent de tabelele pe care le indexează.
Indexul este folosit şi întreţinut de serverul Oracle.
Indecşii sunt creaţi:
Automat – când este definită o cheie primara (PRIMARY KEY) sau unică (UNIQUE KEY) în
definiţia unui tabel.
Manual – utilizatorii pot crea indecşi mecanic pentru a accelera accesul la înregistrările bazelor
de date
Crearea unui index
Sintaxa:
INDEX_NAME COLUMN_NAME COL_P UNIQUENES CREATE
INDEX index OS
ON EMP_EMPNO_PK EMPNO 1 UNIQUE table
(column[, EMP_ENAME_IDX ENAME 1 NONUNIQUE column]…);
Îmbunătăţirea
accesului câmpului ENAME în baza de date EMP
SQL> CREATE INDEX emp_ename_idx
ON emp(ename);
Index created.
Unde:
index – este numele indexului.
table – numele bazei de date.
column – numele câmpului în baza de date ce urmează a fi indexat
Crearea unui index se face pentru:
un câmp ce este folosit des în clauzele WHERE sau în condiţii de join;
câmpuri cu mare varietate de valori;
câmpuri cu un număr mare de valori NULL;
două sau mai multe câmpuri ce sunt folosite împreună frecvent într–o clauză WHERE sau într–o
condiţie join;
o bază de date mare şi majoritatea interogărilor nu vizează mai mult de 2–4% din înregistrări.
Mai multi indecşi într–o bază de date nu înseamnă o optimizare a interogărilor. Fiecare operaţie
DML ce se realizează într–o bază de date ce conţine indecşi implică o actualizare a indecşilor. Cu cât sunt
mai mulţi indecşi asociaţi tabelului, cu atât va dura mai mult până când serverul Oracle va actualiza
indecşii dupa DML.
Nu este necesară crearea unui index atunci când:
baza de date este mică;
câmpurile nu sunt des folosite într–o condiţie;
majoritatea interogărilor vizeaza mai mult de 2–4% dintre înregistrari.
Confirmarea indecşilor
USER_INDEXES conţine numele indexului si unicitatea lui.
Componenta USER_IND_COLUMNS conţine numele indexului, numele bazei de date si numele
câmpului.
SQL> SELECT ic.index_name, ic.column_name,
ic.column_position col_pos, ix.uniques
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ‘EMP’;
Confirmarea indecşilor
Confirmarea indecşilor existenţi se realizează prin vizualizarea lui USER_INDEXES. De
asemenea se pot verifica câmpurile implicate într–o indexare prin interogarea lui
USER_IND_COLUMNS.

Exemplul următor afişează toţi indecşii creaţi anterior, numele câmpurilor afectate şi unicitatea în
baza de date EMP.

Nota: Ieşirea a fost formatată anterior.


Ştergerea unui index
Ştergerea unui index din dicţionarul de date.
Sintaxa:
SQL> DROP INDEX index;

Ştergerea indexului EMP_ENAME_IDX din dicţionarul de date.


Sintaxa:
SQL> DROP INDEX emp_ename_idx;
Index dropped

Ştergerea unui index poate fi realizată doar cel care l–a creat sau de cel care are privilegiul
Sintaxa:
DROP ANY INDEX.
Indecşi care aparţin unei legături dintre tabele
Clauza CONSTRAINT
Permite crearea unui index după numele unui câmp; indexul poate fi declarat drept cheie primară
(PRIMARY KEY) sau ca UNIQUE sau stabileşte o relaţie între câmpul nume de index şi câmpul unei
tabele externe (cu opţiunea REFERENCES foreign_tabele [foreign_field]).
Sintaxa:
CONSTRAINT nume_index
{PRIMARY KEY ! UNIQUE ! REFERENCES foreign_table
[foreign_field]};

Clauzele UNIQUE şi PRIMARY KEY

Există o diferenţă intre UNIQUE şi PRIMARY KEY şi anume: pe o tabelă poate exista o singură
cheie primară, dar UNIQUE specifică existenţa unor valori unice la nivelul unei coloane. În plus,
PRIMARY KEY conţine automat o restricţie NOT NULL, pe când o coloană UNIQUE poate avea valori
NULL dacă nu este specificată in mod expres clauza NOT NULL.
Menţionăm faptul că indexul poate fi simplu (creat pe o singură) sau multiplu (creat pe mai multe
coloane).
REFERENCES
Este varianta cea mai simplă de definire a unei restricţii relaţionale şi care s–a dovedit deosebit de
practică. Această clauză pune in legătură două tabele. Ea specifică faptul că valorile unei coloane
aparţinând tabelei ( care serveăte la stabilirea de legături trebuie să apară intr–o coloană din tabela
referită al cărei nume este precizat în restricţie (CONSTRAINT nume_index).
Observaţie: Restricţiile UNIQUE nu sunt acelaşi lucru cu INDEX UNIQUE. Un index UNIQUE
nu poate fi referit pentru că el aparţine unei singure tabele şi nu unei legături între tabele.

Exemplu:
CONSTRAINT idcod PRIMARY KEY (codp)
CONSTRAINT rcod REFERENCES vânzări (codp);

Comanda DROP CONSTRAINT permite ştergerea unei restricţii de unicitate sau de referinţă
utilizând sintaxa:
Sintaxa:
DROP CONSTRAINT nume_index;
3.2.3 Gestiunea drepturilor de utilizare
Utilizatorii bazei de date sunt repertorizaţi de SGBD prin:
identificatorul sistem;
parolă;
nume de utilizare de date drepturi asupra tabelelor sale.
Acordarea drepturilor de acces
Proprietarul unei tabele poate acorda altor utilizatori drepturi de a manipula tabela. Acordarea
acestor drepturi se realizează prin comanda GRANT care prezintă următoarea sintaxă:
Sintaxă:
GRANT [ ALL/Listă de privilegii]
ON TABLE1,...,TABLE n
TO [PUBLIC/ Listă utilizatori]
[WITH GRANT OPTION]
Unde:
Listă privilegii: alter, delete, insert, update, select;
ALL: toate comezile;
Public: toţi utilizatorii;
WITH GRANT OPTION: drepturi utilizatorilor de a acorda la rândul lor drepturi de acces altor
utilizatori.

Exemplu:
Să se acorde tuturor utilizatorilor toate drepturile asupra tabelei BENEFICIAR:
SQL> GRANT ALL ON BENEFICIAR TO PUBLIC;
Să se acorde utilizatorului Ştefan drepturi de actualizare şi dreptul de ştegere in tabela BENEFICIAR:

SQL> GRANT UPDATE, DELETE


ON BENEFICIAR
TO ŞTEFAN;

Retragerea drepturilor de acces


Retragerea (anularea) drepturilor de acces se realizează prin comanda REVOKE.
Sintaxă:
REVOKE [ALL/Listă de privilegii]
ON TABLE 1,..., TABLE n
FROM [PUBLIC/Listă utilizatori];

Exemplu:
Să se retragă dreptul de actualizare a tablelei BENEFICIAR utilizatorului Ionescu:
REVOKE UPDATE
ON TABLE BENEFICIAR
FROM IONESCU;

În toate SGBD–urile, administratorul bazei de date are, în mod implicit toate drepturile asupra
tuturor obiectelor bazei de date. Pentru a limita accesul la atributele şi tuplurile unei tabele se folosesc
view–urile:

Exemplu:
SQL> CREATE VIEW LOG
AS SELECT Cod_beneficiar, Adresa, Telefon
FROM BENEFICIAR;
GRANT SELECT ON LOG TO PUBLIC;
Se acordă dreptul de consultare a tabelei BENEFICIAR pe atributele: Cod_beneficiar, Adresa,
Telefon.
3.3 LIMBAJUL DE MANIPULARE A BAZEI DE DATE (SQL–LMD)
Limbajul de manipulare a datelor (DML) este partea de bază a SQL. Când dorim să adăugăm, să
modificăm sau să ştergem date dintr–o bază de date, executăm o comandă DML.
O colecţie de comenzi DML care formează o unitate logică de lucru se numeşte tranzacţie.
Considerăm o bază de date din domeniul bancar. Atunci când un client al bancii doreşte să
transfere bani dintr–un depozit într–un cont curent, tranzacţia ar putea consta în 3 operaţii separate: scade
suma din depozit, creşte suma din contul curent, înregistrează tranzacţia în jurnalul de tranzacţii. Serverul
Oracle trebuie să garanteze că toate cele 3 comenzi SQL sunt executate în aşa fel încât să menţină
echilibrul necesar între conturi. Atunci când, din anumite cauze, una dintre comenzile tranzacţiilor de mai
sus nu se execută, atunci celelalte comenzi ale tranzacţiilor trebuie să fie anulate.
3.3.1. Instrucţiuni pentru selectarea datelor
Cereri de interogare simple
Instrucţiunile de selecţie reprezintă una dintre categoriile cele mai importante ale limbajului de
interogare SQL ACCESS.
Pentru definirea interogarilor de selecţie simple avem instrucţunea SELECT cu următoarea
sintaxă :

SELECT [domeniu] listă_selecţie


FROM nume tabela 1, nume tabela 2;
[WHERE criteriul _de_selectie]
[ORDER BY campuri_criteriu [ASC/DESC]];
unde:
domeniu – determină stabilirea modalitaţii de manipulare a înregistrărilor din baza de date asupra
căreia se face selecţia
All – permite includerea tuturor înregistrărilor ce îndeplinesc condiţiile impuse;
Distinct – elimină înregistrările care prezintă valorile duplicate în câmpurile selectate;
Distinctrow – vizează înregistrările duplicate care nu vor fi returnate în urma executării cererii;
Listă_selecţie – cuprinde toate câmpurile care vor apărea în tabela cu rezultatele interogării;
Clauza FROM – specifică numele tabelei sau tabelelor care vor forma suportul interogării;
Clauza WHERE – face interogările mai selective, înregistrările care îndeplinesc crieteriul descris
vor fi afişate;
Clauza ORDER BY – se utilizează atunci când se doreşte ca rezultatele să fie ordonate in mod
crescător (ASC) sau descrescător (DESC).
Operatorii utilizaţi în cererile de interogare sunt:
operatori aritmetici:+,–,*,/
operatori logici: and, or, not
operatori de atribuire şi comparare: <, >, =, <=, >=.
În serierea interogărilor de selecţie simple SQL ACCESS este posibilă şi folosirea funcţiilor de
grup. Cele mai importante sunt:
COUNT – returnează numărul de înregistrări care respectă condiţia stabilită prin clauza Where;
SUM – returnează suma valorilor dintr–un câmp; operează numai cu valori numerice;
AVG – calculează valoarea medie pentru câmpul precizat;
MAX – returnează cea rnai mare valoare dintr–un câmp;
MIN – returnează cea mai mică valoare dintr–un câmp

Exemplu:
dorim afişarea mediilor fiecărui student identificat după NrLeg

SQL> SELECT NrLeg, AVG(Nota) Media


from Note Group By NrLeg;

dorim afişarea numărului de note primite de fiecare student identificat după NrLeg
SQL> SELECT NrLeg, Count(Nota) NrNote
FROM Note
Group By NrLeg;

dorim afişarea studenţilor cu medii >=5 identificaţi după NrLeg

SQL> SELECT NrLeg, Avg(Nota) Media


FROM Note
group by NrLeg
HAVING avg(Nota)>=5;

dorim afişarea studenţilor cu medii <5 identificaţi după NrLeg


SQL> SELECT NrLeg, Avg(Nota) Media
FROM Note
group by NrLeg
HAVING avg(Nota)<5;

dorim afişarea mediei pe fiecare grupă

SQL> SELECT Grupa, Avg(N.Nota) Media


FROM Student S, Note N
WHERE S.NrLeg=N.NrLeg;
group by Grupa

dorim afişarea mediei >=5 pentru fiecare grupă


SQL> SELECT Grupa, Avg(N.Nota) Media
FROM Student S, Note N
WHERE S.NrLeg=N.NrLeg
group by Grupa
HAVING avg(Nota)>=5;

dorim afişarea mediei pe fiecare materie

SQL> SELECT Denumire, Avg(N.Nota) Media


FROM Materii m, Note N
WHERE M.Cod_materie=N.Cod_materie
GROUP BY Denumire;

dorim afişarea mediei pe fiecare materie si grupa ordonata crescator dupa Grupa

SQL> SELECT Grupa, Denumire, Avg(N.Nota) Media FROM Student S, Materii m, Note N
WHERE S.NrLeg=N.NrLeg and M.Cod_materie=N.Cod_materie
GROUP BY Grupa, Denumire
Order by Grupa

dorim afişarea studenţiilor şi a mediilor acestora

SQL> SELECT S.NrLeg, Nume, Prenume, Avg(N.Nota) Media


FROM Student S, Note N
Where S.NrLeg=N.NrLeg
GROUP BY S.NrLeg, Nume, Prenume;

dorim să vizualizăm din tabela Produs (cod produs, den produs, um, pret) numai acele produse cu
preţuri cuprinse între 10 ROL şi 12 ROL.

SQL>SELECT den produs


FROM Produs
WHERE pret BETWEEN 10 AND 12;
dorim să cunoaştem codul atribuit produsului "crema mâini" şi la ce preţ este oferit.

SELECT cod produs, pret, den produs


FROM Produs
WHERE den produs "crema mâini";
Cereri de interogare complexe
Limbajul de interogare SQL ACCESS permite pe lângă definirea de interogări de selecţie simple,
crearea unor interogări cu o structură complexă, cum ar fi cele în care regăsim funcţiile agregate,
interogările JOIN sau interogările UNION;
Funcţiile de grup (agregat)
Permit construirea unor interogări SQL ACCESS complexe, prin care utilizatorul poate să
efectueze diverse calcule pentru grupuri de inregistrari care au câmpuri cu aceiaşi valoare,

SELECT [domeniu] [functie_agregata] (nume_câmp) AS alias, lista_seleetie]


FROM nume_tabela 1 nume tabela 2;
GROUP BY câmp_de _grupare
[HAVING criteriul_de_grupare]
[ORDER BY câmpuri_criteriu[ASC/DESC]];

Din structura instrucţiunii se observă anumite clauze care au fost întâlnite şi la definirea
interogărilor simple însă apar şi elemente mai de sinteză şi anume:
Listă selecţie – se referă la una sau mai multe funcţii agregate care au ca argumente nume de
câmpuri ale bazei de date
AS alias – asociază un pseudonim (nume) rezultatului utilizării funcţiei agregat
Clauza GROUP BY – precizeză câmpul sau câmpurile pe baza cărora se va efectua gruparea
înegistrărilor; se pot executa funcţiile agregate descrise în lista de selecţie pentru fiecare dintre grupări.
Echivalentul acestei clauze în macheta grafică QBE de constucţie a interogării il reprezintă rândul Total
Clauza HAVINIG – se referă la criteriul care va fi aplicat câmpului definit ca argument al funcţiei
agregat

Exemplu:
Dorim să cunoaştem clientii care au datorii mai mari de 1500 ROL.

SELECT denumire_client, SUM([valoare neachitată]) AS Total


FROM Creante
GROUP BY denumire_client
HAVING SUM (Valoare_neachitat) > 1500;
Interogările JOIN
Operaţiile de asociere induse de clauza JOIN au ca rezultat producerea tuturor combinaţiilor
posibile, pentru conţinutul infomaţional al fiecarei tabele. Noile înregistrări care rezulă în urma joncţiunii
vor deveni disponibile pentru selecţiile ulterioare. La o asociere pot participa mai mult de două tabele.
Există mai multe categorii de joncţiuni:
CROSS – cu rol în ilustrarea elementelor specifice proprietăţilor combinatorii ale tuturor
asocierilor
ECHIVALENŢĂ – presupune folosirea clauzei WHERE asociată cu o egalitate
NEECHIVALENTĂ – face apel în clauza WHERE la oricare alt operator de comparare în afara
de semnul egal.
Sintaxa generală pentru joncţiunile echivalente şi neechivalente este:
SELECT [domeniu] lista_ selectie
FROM nume_tabela 1,. Nume_tabela 2.,...
[WHERE criteriul_de_asociere]
[ORDER BY campuri_criteriu [ASC/DEESC]];

Deoarece în instrucţiunile SQL, care descriu joncţiuni se utilizează câmpuri ce fac parte din
tabele diferite, este necesară întotdeauna specificarea tabelei de care aparţin.
Forma generală de descriere a unui astfel de câmp
SELECT Factura. nr_factura, Client. cod_client, Factura.suma_factura, Incasari. suma_incasata
FROM Factura, Client, Incasari
WHERE Factura. cod_client=Client. cod_client AND Client. cod_client=Incasari. cod_client
ORDER BY Client. cod_client;
Interogările UNION
Când utilizatorul doreşte să vadă rezultatele a mai multor interogari SELECT în acelaşi timp, prin
combinarea ieşirilor lor, poate utiliza facilitatea UNION a limbajului de interogare SQL ACCESS. Nu
există echivalent QBE pentru această instrucţiune.
Sintaxa generală pentru interogările UNION este:

SELECT lista_campuri FROM tabela 1


UNION SELECT lista_campuri FROM tabela 2
[GROUP BY camp_de_grupare]
[HAVING criteriul _de_grupare]
[UNION SELECT lista_campuri FROM tabela3 ]
[GROUP BY camp_de_grupare]
[HAVING criteriul_de_grupare]
[union......]
[GROUP BY camp_criteriu_de_sortare

3.3.2 Instrucţiuni pentru actualizarea bazei de date


Aceste instrucţiuni se implementează prin interogările de tip acţiune; efectele acţiunii lor sunt
permanente, influenţând inclusiv integritatea referenţială. Cele mai importante instrucţiuni sunt
CREATE, INSERT, UPDATE şi DELETE.
Crearea unei noi tabele plecând de la structura şi conţinutul unei tabele deja existente
Sintaxa:
SELECT [domeniu] (câmp 1, câmp 2...)
INTO tabela_nouă
FROM tabela_sursă
[WHERE criteriul_de_adăugare];

Exemplu:
Să se creeze o tabelă cu numele Beneficiari_teritoriali plecând de la tabela Beneficiari în care să
regăsim doar beneficiarii care au sediul în Craiova şi Timişoara.
SELECT DISTRICTROW Den_beneficiar, Adresa
INTO Beneficiari_teritoriali
FROM Beneficiari
WHERE Adresa = “Craiova” OR Adresa= “Timişoara”;
Adăugarea unei înregistrări dintr–o tabelă în alta
Există două forme ale instrucţiunii şi anume:
INSERT...VALUES
INSERT...SELECT

INSERT...VALUES

Sintaxa:
INSERT INTO nume_tabelă (câmp 1, câmp 2...)
VALUES (valoare 1, valoare 2...);

În acest caz se inserează o înregistrare într–o tabelă, menţionându–se câmpurile şi valorile


asociate acestora. Ca particularizare se remarcă inserarea unei singure înregistrări la un moment dat.
Trebuie avut în vedere respectarea următoarelor 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 nevoie specificarea denumirii câmpurilor, deorece 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
valoare în al doilea câmp, etc.)
dacă un câmp are definiţia NOT NULL, va fi obligatorie introducerea unei valori pentru acesta.

Exemplu:
Să se adauge în tabela Produse o înregistrare care respectă structura: Cod produs, Denumire
produs, UM, Pret.

INSERT INTO Produse


(Cod_produs, Denumire_produs, UM, Pret)
VALUES (100, “Săpun”, “Buc”, 2.5)

INSERT...SELECT
Sintaxa:
INSERT INTO tabelă_destinaţie (câmp 1, câmp 2...)
SELECT [domeniu] câmp 1, câmp 2...
FROM tabelă_sursă
WHERE criteriul_de_adăugare;
În acest caz este posibil să se copieze selectiv înregistrări dintr–o tabelă într–una sau în mai multe
tabele.
Regulile menţionate la instrucţiunea INSERT...VALUES rămân valabile, în plus se adaugă
următoarele:
fraza SELECT nu poate extrage înregistrări din tabela destinaţie;
numărul şi natura câmpurilor menţionate în clauza INTO trebuie să fie aceleaşi cu numărul şi
natura câmpurilor returnate de instrucţiunea SELECT;
dacă nu se introduce clauza WHERE, toate înregistrările din tabela sursă vor fi adăugate în tabela
destinaţie.

Exemplu:
Se inserează valorile câmpurilor: număr, nume, prenume şi studii doar pentru agenţii de vânzare
care sunt studenţi. Selecţia se face din tabela sursă Agent_vânzare, iar destinaţia o constituie tabela Studii
(care trebuie creată în prealabil). Comanda de creare a tabelei STUDII este:
CREATE TABLE STUDII
(nr Number, nume Text, pren Text, std Text);

Comanda propriu–zisă de inserare este:


INSERT INTO STUDII (nr, nume, pren, std)
SELECT nr, nume, pren, std
FROM Agent_vanzare
WHERE std=”student”;

Interogarea acţiune de ştergere parţială sau totală a înregistrărilor din tabele DELETE
Sintaxa:
DELETE FROM nume_tabela
[WHERE criteriul_de _stergere];

Nu este utilizată pentru ştergerea de valori din câmpuri individuale, ci va acţiona doar asupra
înregistrărilor în totalitatea lor. În acelaşi timp se va şterge doar conţinutul tabelei nu şi aceasta (pentru
eliminarea tabelei se va apela la instrucţiunea DROP TABLE).
Ca şi instrucţiunea INSERT, operaţia de ştergere a înregistrărilor dintr–o tabelă poate duce la
apariţia unor probleme de integritate referenţială în alte tabele. Clauza WHERE restricţionează domeniul
de ştergere în funcţie de cerinţele utilizatorului.

Exemplu:
Din tabela Produse să se şteargă înregistrările care au preţul mai mic de 200 ROL.
DELETE FROM Produse
WHERE Pret < 200;

Interogarea acţiune UPDATE;


Are scopul de a insera noi înregistrări cât ş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.
Sintaxa:
UPDATE nume_tabela
SET nume_câmp 1= valoare 1
[,nume_câmp 2 = valoare 2]...
[WHERE criteriul_de _actualizare];

Unele sisteme de baze de date pun la dispoziţie o extensie la sintaxa standard a instrucţiunii
UPDATE. De exemplu, limbajul Transact–SQL al sistemului SQL Server permite programatorului să
actualizeze conţinutul unui tabel pe baza conţinutului altor câteva tabele, prin folosirea clauzei FROM.
Sintaxa extinsă arată astfel:
UPDATE nume_tabela
SET nume_câmp 1= valoare 1
[,nume_câmp 2 = valoare 2]
FROM listă_tabele
[WHERE criteriul_de _actualizare];

Tipul datelor rezultate din evaluarea expresiei trebuie să fie acelaşi cu tipul de dată al câmpului
care este modificat. De asemenea, dimensiunea (lungimea) valorii trebuie să fie corespunzătoare cu
câmpul care este modificat.
La obţinerea rezultatelor în valoarea calculată pot rezulta două situaţii:
trunchierea – atunci când sistemul de baze de date converteşte, de exemplu un număr fracţionar
într–un număr întreg;
depăşirea zonei de memorie – atunci când valoarea rezultată este mai mare decât capacitatea
coloanei modificate. Aceasta va determina semnalarea unei erori de depăşire din partea sistemului de
baze de date.
3.4 VEDERI

O vedere este un tabel virtual. Vederile permit programatorului SQL să creeze “imagini” ale
datelor care pot fi diferite de imaginile fizice ale acestora situate pe hard–disc. După crearea vederii, se
pot folosi următoarele comenzi SQL:
CREATE VIEW – crearea unei vederi;
SELECT – interogarea vederilor;
INSERT – adăugarea de noi date;
UPDATE – actualizarea datelor într–o vedere;
DELETE – ştergerea datelor dintr–o vedere.
Crearea unei vederi
Permite definirea unei “ferestre” prin care se pot consulta datele stocate din tabel..

Sintaxa:
CREATE VIEW nume_view [<lista atribute>]
AS SELECT secventa_select
[WITH CHECK OPTION];
unde:
nume_view – reprezintă numele vederii şi opţional a denumirii atributelor din view, în cazul când
se doreşte redenumirea atributelor specificate în instrucţiunea SELECT;
SELECT – specificarea interogării;
WITH CHECK OPTION – specificarea opţională a unei condiţii suplimentare impuse view–ului,
astfel încât să poată fi realizată actualizarea sau inserarea datelor în view.

Exemple:
Crearea unui view simplu. Sursa de date o va reprezenta tabela Student iar rezultatul returnat
constă în afişarea codului, denumirii şi facultăţii studentului.

CREATE VIEW Date_stud AS


SELECT Cod, Nume, Facultate FROM Student;

Ulterior view–ul poate fi vizualizat ca orice tabelă. Date_stud reprezintă view–ul creat în
comanda anterioară. Se doreşte afişarea numai a studenţilor care încep cu ‘Pop’.

SELECT * FROM Date_stud WHERE Nume like 'Pop%'

Crearea unui view simplu. Sursa de date o va reprezenta tabela Student iar rezultatul returnat
constă în afişarea studenţilor căsătoriţi.

CREATE VIEW Date_stud_C AS


SELECT * FROM Student WHERE Stare_civila='C'

Date_stud_C reprezintă view–ul creat în comanda anterioară.

SELECT * FROM Date_stud_C

Crearea unei vederi cu notele mai mari decat 5. Sursa de date o va reprezenta tabela Note.

CREATE VIEW Note1 AS


SELECT * FROM Note WHERE Nota>5

Note1 reprezintă view–ul creat în comanda anterioară.

SELECT * FROM Note1


Crearea unei vederi cu notele studenţilor al căror nume se termină în 'escu'.

CREATE VIEW Note2 AS


SELECT * FROM Student S, Note N WHERE S.NrLeg=N.NrLeg AND S.Nume like '%escu'
Note2 reprezintă view–ul creat în comanda anterioară.

SELECT * FROM Note2

Crearea unui view complex presupune utilizarea unor funcţii agregat în fraza Select.

CREATE VIEW Medii(NrLeg, Student, Grupa, Media) AS


SELECT S.NrLeg, Nume+' '+Initiala+'.'+Prenume,Grupa, AVG(Nota) FROM Student AS S,Note AS N
WHERE S.NrLeg=N.NrLeg
GROUP BY S.NrLeg, Nume+' '+Initiala+'.'+Prenume,Grupa

Medii reprezintă view–ul creat în comanda anterioară.

SELECT * FROM Medii

SQL plasează câteva restricţii la folosirea instrucţiunii SELECT pentru a formula o vedere.
Următoarele două reguli sunt valabile atunci când folosiţi instrucţiunea amintită:
Nu poate fi folosit operatorul UNION;
Nu poate fi folosită clauza ORDER BY.

Eroare – la crearea unei vederi nu puteti folosi în SELECT clauzele ORDER BY si UNION
CREATE VIEW Note_stud_err AS
SELECT S.NrLeg, Nume+' '+Initiala+'.'+Prenume Student,Grupa, Denumire, Nota FROM Student AS
S,Note AS N, Materii AS M
WHERE S.NrLeg=N.NrLeg AND N.Cod_materie=M.Cod_materie
ORDER BY S.NrLeg

CREATE VIEW Medii_Bursieri AS


SELECT S.NrLeg, Nume+' '+Initiala+'.'+Prenume Student,Grupa, AVG (Nota) Media FROM Student AS
S,Note AS N
WHERE S.NrLeg=N.NrLeg
GROUP BY S.NrLeg, Nume+' '+Initiala+'.'+Prenume,Grupa
HAVING AVG(Nota) >7.5

SELECT * FROM Medii_Bursieri

CREATE VIEW Varste AS


SELECT NrLeg, Nume, Prenume,Datediff(year,Data_nastere,getdate()) Varsta
FROM Student

SELECT * FROM Varste


Modificarea datelor folosind vederile – se folosesc comenzile UPDATE, INSERT şi DELETE
CREATE VIEW Notele AS
SELECT * FROM Note

SELECT * FROM Notele

Exemple:
Scade 5 puncte la toate notele din vederea Notele

UPDATE Notele SET Nota=Nota–5


SELECT * FROM Note
DELETE FROM Notele WHERE NrLeg='116'
CREATE VIEW Notele1 AS
SELECT NrLeg, Nota FROM Note

SELECT * FROM Notele1


Adaugă 5 puncte la toate notele din vederea Notele1
UPDATE Notele1 SET Nota=Nota+5
Scade un punct la toate notele studenţilor cu NrLeg par
UPDATE Notele1 SET Nota=Nota–1 WHERE NrLeg%2=0
SELECT * FROM Note

INSERT INTO Notele1 VALUES('120',8)


Eroare pentru că în Note nu pot introduce NULL la Cod_materie

CREATE VIEW Notele2 AS


SELECT NrLeg, Nota, Cod_materie FROM Note

SELECT * FROM Notele2


INSERT INTO Notele2 VALUES('120',8,'1')
SELECT * FROM Note
Probleme care apar la modificarea datelor folosind vederile
Deoarece ceea ce se vede într–o vedere poate fi un set de date dintr–un grup de tabele,
modificarea datelor în tabelele de bază nu este totdeauna la fel de directă. În continuarea este prezentată
o lista care conţine cele mai obişnuite lucruri pe care trebuie cunoscute atunci când se lucrează cu o
vedere:
Instrucţiunile DELETE nu sunt permise în vederi ale tabelelor multiple;
Instrucţiunea INSERT nu este permisă decât dacă toate coloanele cu atributul NOT NULL folosite
în tabelul de bază sunt incluse în vedere. Aceasta se datorează faptului că procesorul SQL nu cunoaşte ce
valori să insereze într–o coloană NOT NULL;
Dacă se inserează sau se actualizează înregistrări într–o vedere a unei combinări, toate
înregistrările care sunt actualizate trebuie să aparţină aceluiaşi tabel fizic;
Dacă se foloseşte clauza DISTINCT pentru crearea unei vederi, nu se mai pot efectua actualizări
sau inserări de înregistrări în cadrul vederii respective;
Coloana virtuală (o coloană care este rezultatul unui calcul sau al unei expresii) nu poate fii
actualizată.
Ştergerea unei vederi
DROP VIEW Notele1
Această comandă determină pe de o parte ştergerea definiţiei view–ului din dicţionarul de date,
iar pe de altă parte ştergerea oricărui view definit pe baza ei
SELECT * FROM Notele1 – acum eroare pt. vederea Notele1 s–a sters
CAP.IV VISUAL BASIC PENTRU APLICAŢII (VBA)

NOŢIUNI GENERALE

În proiectarea de aplicaţii se foloseşte tot mai mult programarea modulară. Dacă programarea
structurală oferea un program care îl dirija pe utilizator pas cu pas, fără posibilitatea alegerii altei opţiuni,
programarea modulară constă dintr–un ansamblu de subrutine (proceduri sau subprograme) care pot fi
apelate în ordinea dorită de utilizator.
Limbajul în care programăm în Access este VBA (Visual Basic pentru Aplicaţii) şi care este
varianta limbajului Visual Basic dedicată componentei Access.
Conceptele de bază ale programării în VBA sunt: obiectul, proprietatea, metoda, evenimentul.
Dintre obiectele bazei de date Access, modulul este singurul care conţine proceduri definite de utilizator
şi scrise în limbajul de programare VBA. În cadrul modulelor codul este organizat în proceduri sau
funcţii. În general, un modul are următoarea structură:
Declaraţii
Procedură sau funcţie
..................................
Procedură sau funcţie
Zona de declaraţii este rezervată declarării variabilelor şi constantelor accesibile pentru toate
procedurile şi funcţiile componente ale modulului şi una sau mai multe proceduri sau funcţii.
După apartenenţa lor modulele se pot grupa în următoarele categorii (pot fi vizualizate prin
Object Browser):
module globale sau standard – sunt accesibile întregii aplicaţii;
module specifice formularelor sau rapoartelor sunt accesibile numai formularelor şi rapoartelor în
care au fost declarate;
module class – permit definirea de module noi.
EDITAREA MODULELOR VBA

Pentru editarea modulelor, în fereastra Database, se selectează eticheta Modules. Dacă


baza de date are deja create obiecte de tip modul, acestea vor fi afişate în partea dreapta a
ferestrei.
Pentru crearea unui modul nou, vom activa butonul New sau vom activa comanda Module din
meniul Insert. Ca efect apare pe ecran fereastra de editare a modulelor

Scrierea codului din punct de vedere sintactic, se poate face cu caractere minuscule sau
majuscule. Atât cuvintele cheie cât şi cele utilizator sunt automat transcrise în forma în care au fost
declarate, dacă sunt scrise corect. Editorul are, de asemenea, facilităţi de colorare a cuvintelor cheie,
declaraţiilor şi comentariilor utilizator, frazelor eronate.
Comentariile incluse constituie linii de cod care nu se execută, dar care, facilitează înţelegerea
programului. Pentru definirea comentariilor se utilizează un apostrof „ ’ ” la începutul comentariului;
în acest fel se pot scrie comentarii şi după o instrucţiune, pe acelaşi rând.
Instrucţiunile se scriu, în general, câte una pe un rând, însă există şi posibilitatea scrierii a
mai multor instrucţiuni pe acelaşi rând, separate prin delimitatorul „ : ”.
Dacă o instrucţiune se continuă pe mai multe rânduri, se utilizează, la sfârşitul fiecăruia,
liniuţa de subliniere ” _ ”, cu excepţia rândului care o încheie.
Prin intermediul desfăşurătorului de obiecte, sistemul VBA evidenţiază proprietăţile şi metodele
posibile pentru un anumit obiect. Afişarea este contextuală, adică are loc în momentul scrierii în VBA a
elementelor care caracterizează un anumit context.
Proprietăţile descriu un obiect prin caracteristici cum ar fi: dimensiunea, culoarea, poziţia pe
ecran şi se stabilesc, de regulă, în faza de proiectare, adică în momentul în care se proiectează sau se
modifică formele.
Proprietăţile stabilite în faza de proiectare devin operaţionale la prima lansare în execuţie a
aplicaţiei şi rămân valabile până la încheierea execuţiei aplicaţiei sau până la modificarea lor prin
program.
Metodele reprezintă procedurile sau funcţiile care se execută pentru a informa un obiect despre
acţiunile pe care le va efectua. Dacă proprietăţile sunt date, metodele sunt cod. Spre deosebire de
proprietăţi, metodele pot fi executate numai în momentul rulării programului, sau în timpul unei sesiuni
de depanare a programului.
Pe lângă proprietăţi şi metode, fiecare tip de obiect are prestabilit un număr de evenimente
posibile, dar cel puţin unul.
Evenimentele se produc ca urmare a unei acţiuni utilizatorului ori a execuţiei unui program sau
pot fi declanşate de calculator. Utilizatorul poate efectua acţiuni ca: click sau dublu click de mouse,
acţionarea unei taste, etc. În mod automat un eveniment poate fi declanşat de o procedură inclusă în
program. Pe de altă parte, evenimentele declanşează procedurile. O astfel de programare este denumită
„event–driven”, adică „dirijată prin evenimente”.
ELEMENTELE LIMBAJULUI VBA

Tipuri de date
VBA este unul din limbajele de programare care impune, înainte de a manipula datele, să
specificăm natura acestora.
Există trei mari categorii de date: numerice, şir de caractere şi speciale. Încadrarea unei date într–
una din categorii este absolut necesară pentru a efectua calcule sau alte prelucrări. De asemenea, VBA
acceptă şi o clasificare a datelor din punct de vedere al utilizatorului, şi anume: date standard
(predefinite) şi date utilizator.
În tabelul următor se prezintă tipurile de date utilizate de Visual Basic.
Tip de Caracteristici
date
Double Număr memorat pe 64 biţi, virgulă mobilă, dublă
precizie. Valori posibile: de la – 1,797*10308 până la
+ 1,797*10308.
Single Număr memorat pe 32 biţi, virgulă mobilă, simplă
precizie. Valori posibile: de la –3,4*1038 până la
+ 3,4*1038.
Currency Număr memorat pe 64 biţi. Sunt memorate 15
caractere la stânga virgulei şi 4 caractere la dreapta
virgulei. Valori posibile:
–922337203685477,5808 până la
922337203685477,5807.
Byte Număr întreg pe 8 biţi. Valori posibile: 0–255.
Integer Număr întreg pe 16 biţi. Valori posibile: –32768
până la 32767.
Long Număr întreg pe 32 biţi. Valori posibile:
–2147483648 până la 2147483647.
Boolean Poate conţine valoarea logică True (–1) sau False
(0).
Date Poate conţine date calendaristice şi timp. Se
utilizează între #.
String Şir de caractere. Poate conţine maximum 2 la
puterea 31 de caractere. Se utilizează între “”.
Variant Tip de date generic. O asemenea variabilă se poate
utiliza pentru orice tip de date. Practic, toate
variabilele utilizate pot fi declarate de tip Variant.
Este Sufix
recomandat totuşi Tip dată
ca să specificaţi Exemplu
tipul
variabilei
$ în momentulLong declarării pentru a 547
nu fi$
create! confuzii. Single 547 !
Object Tip de# date care referă Double
un obiect. Pentru a asocia
547un#
obiect@propriu–zis unei Currency
asemenea variabile trebuie
547să@
se utilizeze şi instrucţiunea Set.

Variabile şi constante
Variabile
O variabilă reprezintă numele unei porţiuni din memoria calculatorului în care sse stochează
temporar datele. O variabilă poate conţine o singură valoare la un moment dat dar care poate fi
modificată la acţiunea utilizatorului sau prin program.
O variabilă are un nume şi conţine un anumit tip de date pentru a o identifica la un moment dat în
memorie. Numele unei variabile poate avea maxim 256 caractere şi trebuie să înceapă cu un caracter
alfanumeric.

Declararea variabilelor
Într–un program, pentru a putea utiliza o variabilă, aceasta trebuie declarată, specificând numele
şi tipul de date pe care îl va conţine. Există două moduri de a declara variabilele: implicită şi explicită.
Declararea implicită se face prin adăugarea unui caracter specific la sfârşitul numelui variabilei.
Sufixurile utilizate sunt reprezentate în tabelul de mai jos

De exemplu, declararea variabilei Nr_marcă în felul următor:


Nr_marcă = 547
Arată că variabila Nr_marcă este de tip Integer, dar declaraţia:
Nr_marcă = 547 #

impune variabilei Nr_marcă tipul de dată Double.

Declararea explicită a variabilelor se face utilizând instrucţiunea Dim la începutul unei


proceduri.
Formatul instrucţiunii este:
Dim <NumeVariabilă> As <TipDată>
<NumeVariabilă> este definit de către utilizator;
<TipDată> este specificat explicit, (nu se pot defini două variabile cu acelaşi nume într–o
procedură).

Exemplu:
Dim Nr_marcă As Integer
Dim Prenume
Dim Nume As String  20
Dim Adresă As String
unde:
prima linie defineşte o variabilă de tip integer;
a doua linie defineşte o variabilă de tip variant;
a treia linie defineşte o variabilă de tip şir de caracter ce conţine maxim 20 de caractere;
a patra linie defineşte o variabilă şir de caracter cu lungimea cuprinsă între 0 şi 65535 de
caractere.
Domeniul unei variabile.Variabile locale şi globale
Locul în care este plasată instrucţiunea de declarare a variabilei este important pentru că specifică
modul în care se va lucra cu variabilele într–o aplicaţie.
Modul în care se va lucra cu o variabilă în cadrul unui program, sau durata ei de viaţă, sau sau
zonele din program în care variabila este vizibilă este cunosccut sub numele de domeniul variabilei.
Locul în care este declarată o variabilă determină domeniul acesteia. VBA este unul din limbajele care
respectă reguliile domeniului de valabilitate. Domeniul de valabilitate al unei variabile VBA este
determinat de două elemente: locul în care declarăm variabila în cadrul procedurii şi de instrucţiunile
folosite pentru declarare.
Sintaxa generală de declararea a unei variabile este următoarea:
Dim! Private! Public! Global! nume vb1as tip_date, nume vb2 as tip_date,…….
Unde:
nume vbi este numele atribuit variabilei i;
as tip_date este unul din tipurile de date definite de utilizator.
Există trei locuri diferite în care pot fi declarate variabilele:
nivel procedură sau funcţie;
nivel formă;
nivel modul.
Dacă Dim este plasată la începutul unei proceduri (după declaraţia Subnume_procedură),
atunci variabila declarată va cunoscută şi va putea fi utilizată doar în procedura respectivă, fiind o
variabilă locală. Dacă dorim ca variabilele să fie vizibile în toate procedurile dintr–un modul, vom plasa
instrucţiunea Dim în secţiunea generală a modulului

Folosirea instrucţiunii Private în secţiunea General a modulului determină vizibilitatea variabilei


în toate procedurile din modulul respective, nu şi din alte module sau form–uri. Nu se poate folosi
declaraţia Private într–o procedură delimitată prin Sub…End Sub.
O variabilă declarată Public sau Global la începutul unui modul este vizibilă din toate modulele
bazei de date. O astfel de variabilă se numeşte variabilă globală. Nici aceste declaraţii nu pot fi folosite
în proceduri delimitate prin Sub….End Sub.
Convenţii de denumire a variabilelor
Ca şi la numele de controale şi pentru variabile se utilizează un prefix de 3 litere, care să indice
clar tipul de dată.
În tabelul.9 sunt prezentate prefixe utilizate pentru numele variabilei
Tabelul.9
Exemple: Locul Prefix
de Modul de declarare Privat Modul
Tip datăde declarare
Dim declarare bln Public
Boolean lngDistanţă As
Long La nivelul
byt Constantele sunt vizibile NuBytese pot declara
Dim procedurii cur doar în cadrul procedurii constante
Currency publice în objVedere As
Object dte în care apar cadrul
Dateunei proceduri
Dim La nivelul
dbl Variabilele sunt vizibile Variabilele
Double sunt intLungime As
Integer modului int în cadrul modului în care vizibile
Integer pentru toate
Dim lng apar modulele.
Long sngPret As
Single obj Object
Dim sng Single strNume As
String. str String
vnt sau var Variant
La declararea
variabilelor de tip şir de caractere se poate ţine seama şi de lungimea acestora, ştiind că ea poate varia
între 0 şi 65400 de caractere. Variabila strNume poate avea valoarea „Ilie” dar şi „Constantinescu”.
Există situaţii în care dorim să limităm lungimea textului (să spunem că trebuie afişat într–o etichetă de
lungime fixă), scop în care se utilizează opţiunea * astfel:
Dim strNume As String * 18
Indicând că variabila strNume poate avea o lungime între 0 şi 18 caractere.
Pentru a declara mai multe variabile de acelaşi tip se poate utiliza o singură instrucţiune Dim.
Astfel, în loc de:
Dim X As String
Dim Y As String
Dim Y As String
Se poate scrie:
Dim X As String, Y As String, Y As String
Dacă se declară mai multe variabile printr–o singură instrucţiune Dim, ele pot fi şi de tipuri
diferite:
Dim Z As String, Y As Long
Constante
Constantele sunt nume semnificative care ţin locul locul unor nume sau şiruri de caractere şi care
nu–şi pot modifica valoarae pe parcursul unui program. Constantele se grupează în două categorii:
constante intrinseci sau definite de sistem care sunt furnizate de aplicaţii sau controale;
constante simbolice sau definite de utilizator.
VBA interpretează şi atribuie automat tipurile de date pentru constantele numerice scrise de
utilizator, dar dacă dorim ca o constantă să aibă un anumit tip de dată, trebuie, ca şi variabilele, să
utilizăm un sufix la scrierea constantei.
Constantele simbolice se pot declara explicit cu instrucţiunea Const care are următoarea sintaxă:
Public! Private! Const nume constantă As tip_dată = expresie

Exemplu:
Const Angajat = “Manea Ion”
Const Data_angaj = # 1/1 / 2002 #
Const Studii_super = “ “
Constantele de tip String se scriu între ghilimele “Manea Ion”, “ 547“
Constantele de tip Date se scriu între două caractere # (diez).
Când între ghilimele nu este specificat nici un caracter avem un şir nul.
Domeniul de vizibilitate, atât al constantelor, cât şi al variabilelor, în funcţie de modul de
declarare Privat sau Public, este prezentat sintetic în tabelul.10

Tabelul.10
Operatori
Pentru construirea diverselor expresii (matematice, logice, de comparare) tematice cu datele
conţinute de program se utilizează operatorii.
Operatorii acceptaţi de VBA sunt de trei categorii: matemetici, de comparare, logici.
operatori matematici :
+ adunare
– scădere
* înmulţire
/ impărţire returnează partea întreagă
MOD împărţire (returnează numai restul)
^ exponent
operatori de comparare:
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
= egal
<> diferit
operatori logici:
o AND şi
o OR sau
o NOT negaţie
o XOR pentru sau exclusiv
operatori pentru concatenerea şirurilor : &, +
alţi operatori:
o IN pentru regăsirea de valori în cadrul unei liste;
o LIKE pentru comparare cu caractere de înlocuire;
o BETWEEN pentru regăsirea de valori în cadrul gamei;
o EQV pentru echivalarea logică a două expresii;
o IMP pentru implicarea logică a două expresii.
2.3.4 Proceduri/funcţii
Procedurile reprezintă secvenţe de instrucţiuni care realizează o prelucrare bine definită din punct
de vedere funcţional. Procedurile sunt subprograme, la care un alt program face referire prin numele lor.
Procedurile care nu returnează nici o valoare sunt numite subrutine şi au sintaxa:
[Static] [Private] Sub nume_procedură[(listă argumente)]
[ <instrucţiuni>
End Sub
unde:
Static – variabilele locale sunt memorate între două execuţii;
Private – procedura este accesibilă numai din interiorul modulului;
Listă argumente – reprezintă variabilele ce sunt transmise în momentul apelării procedurii;
Exit Sub – forţează ieşirea din procedură.
Apelul unei proceduri se face astfel:
Call nume_procedură ([lista argumente])
sau
nume_procedură ([listă argumente])
Procedurile care întotdeauna returnează o valoare se numesc funcţii şi au următoarea sintaxă:

[Static] [Private] Function nume_procedură [(listă argumente)] [As Tip_data]


<instrucţiuni>
[ExitFunction]
<instructiuni>
End Function
unde:
As Tip _data tipul rezultatului returnat de către funcţie.
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.


Funcţii
O funcţie reprezintă o secvenţă de instrucţiuni VBA care realizează o prelucrare bine definită din
punct de vedere funcţional şi care returnează o valoare.
Deoarece funcţia returnează o valoare se poate considera că ea este egală cu valoarea pe care o
returnează şi, ca urmare, poate fi utilazată în expresii mai complicate.
Atât funcţiile cât şi procedurile constau din linii de cod bine definite de utilizator sau generate de
VBA. Deosebirea dintre o funcţie şi o procedură este că funcţia returnează o valoare pe când procedura
nu.
Sintaxa generală a unei funcţii este:

Rezultat = nume_funcţie (listă argumente)

Între paranteze se scriu argumentele funcţiei, separate prin virgulă. Prezenţa parantezelor şi a
semnului egal sunt semnele care diferenţiază funcţia de procedură.
VBA fiind un mediu integrat de dezvoltare include două categorii de funcţii:
integrate (standard);
definite de utillizator.
Funcţiile integrate (standard)
VBA conţine un număr mare de funcţii integrate care pot fi utilizate pentru executarea unor
operaţii, pentru care altfel ar trebui scrise secvenţe de cod. Diversitatea problemelor pe care le
soluţionează, a determinat gruparea funcţiilor pe categorii.
Funcţii pentru preluarea şi afişarea datelor
Funcţiile încorporate ale programului, InputBox() şi MsgBox() permit efectuarea unor operaţii
simple de intrare/ieşire (I/O) prin utilizarea unor casete de dialog predefinite pe care le putem adapta
utilizând o gamă de pictograme şi combinaţii de butoane de răspuns.
Funcţia InputBox() afişează o invitaţie într–o casetă de dialog, aşteaptă ca utilizatorul să
introducă text sau să selecteze un buton, apoi returnează conţinutul casetei de text. Valoarea introdusă de
către funcţie este de tip Variant, fie de tip String, în funcţie de varianta utilizată.

Sintaxa funcţiei este:

InputBox (<mesaj>, [<titlu>], [<val_implicită>, [<x>], [<y>], [<fisier_help>, <context>])

Singurul argument obligatoriu este primul mesaj. Acesta va fi o expresie de tip şir de caractere
(String) care invită utilizatorul să introducă ceva şi va fi afişat lângă caseta de text în care va scrie
utilizatorul.
Al doilea argument, titlu, este un şir de caractere afişat în bara de titlu a casetei de dialog. Dacă se
omite, în bara de titlu nu se va afişa nimic.
[<x>], [<y>] reprezintă expresii numerice care specifică distanţa pe orizontală, respectiv pe
verticală, a colţului din stânga sus al casetei de dialog faţă de colţul din stânga sus al ecranului. Dacă se
omite argumentul [<x>], trebuie să se omită şi argumentul [<y>]. Dacă ambele argumente se omit, caseta
de dialog va fi centrată pe orizotală, la aproximativ o treime din înălţimea ecranului faţă de partea
superioară.
Sintetizaţi sunt prezentaţi parametrii înstrucţiunii InputBox în tabelul.11
Tabelul.11
Parametru
Parametru
Constantă Descriere
Descriere
Valoare Explicaţie
<mesaj>
vbOK
<mesaj> Şir
Şirdedecractere
cractere
1 afişat
afişat
Butonul
în
în fereastra
OK selectat
InputBox.
MsgBox. Pot Pot fifi Funcţia
MsgBox() vbCancel maximum
maximum21024 1024 de de caractere.
caractere.
Butonul CancelDacă
Dacă se
se doreşte
selectat doreşte afişează un
mesaj într–o vbAbort afişarea
afişareaunui
unui
3 mesajmesaj pe
pemai
Butonul mai multe
multe
Abort rânduri
rânduri trebuie
selectat trebuie casetă de
dialog şi vbRetry intercalat
intercalatcaracterul
4 caracterul <ENTER>
<ENTER> adică
adică
Butonul Retry selectat CHRCHR (13)
(13)
la aşteaptă ca
utilizatorul să vbIgnore sfârşitul
la sfârşitul
rândului.
5 rândului.
Butonul Ignore selectat selecteze un
buton. Funcţia <titlu>
<titlu>
vbYes Titlul
Titlulferestei
ferestei
6 afişate
afişate(şir
(şirdede
Butonul caractere)
Yescaractere)
selectat MsgBox()
returnează o <val_implicită>
<butoane>
vbNo Butoanele
Valoarea 7implicită
şi pictogramele
afişatăNo
Butonul deafişate
fereastra
selectat în InputBox
fereastra valoare
întreagă care MsgBox
pentru introducere
(expresie numerică).
(şir de caractere). indică butonul
selectat de <x>
<fişier_help> Fişierul
PoziţiaHelp
feresteri
utilizat
InputBox
în cazulfaţăîn care
de marginea
se foloseşte
din utilizator.
Sintaxa help
stânga
senzitiv
a eranului
la context
(expresie
(şir denumerică).
caractere). funcţiei este:
<y>
<context> Numărul
Poziţia care
feresteri
exprimă
InputBox
locul din
faţăfişierul
de marginea
Help care
de MsgBox
(<mesaj>, vasus
fi apelat.
a eranului (expresie numerică). [<butoane>],
[<titlu>, <fişier_help> Fişierul Help utilizat în cazul în care se foloseşte
help senzitiv la context (şir de caractere).
<context> Numărul care exprimă locul din fişierul Help
care va fi apelat.
[<fisier_help>, <context>])
Mesaj este o expresie şir afişată ca mesaj în caseta de dialog.
Al doilea argument, titlu, este o expresie şir care apare în bara de titlu a casetei de dialog.
Sintetizaţi sunt prezentaţi parametrii înstrucţiunii MsgBox în tabelul.12
Tabelul.12

Constantele acceptate de parametrul butoane sunt prezentate în tabelul.13


Tabelul.13
Constantă Valoare Explicaţie
vbOKOnly 0 Afişează numai un buton OK
vbOKCancel 1 Afişează un buton OK şi un
buton Cancel
vbAbortRetryIgnore 2 Afişează un buton Abort
(Abandon în caz de eroare),
Retry (Forţează în caz eroare),
Ignore (Ignoră eroarea).
vbYesNoCancel 3 Afişează un buton Yes, un buton
No, un buton Cancel
vbYesNo 4 Afişează un buton Yes, un buton
No.
vbRetryCancel 5 Afişează un buton Retry, un
buton Cancel
vbCritical 16 Afişează o pictograma Critical
vbQuestion 32 Afişează un semn de întrebare
vbExclamation 48 Afişează un semn al exclamării
vbInformation 64 Afişează pictograma Information
Constantele ce pot fi returnate de instrucţiunea MsgBox sunt prezentate în tabelul.14
Tabelul.14

Funcţii numerice
Cuprind funcţii matematice şi trigonometrice, având ca argumente şi ca rezultate valori numerice.
Câteva funcţii reprezentative sunt cuprinse în tabelul.15. Sunt utilizate în calcule matematice şi
inginereşti.
Tabelul.15
Funcţie Descriere
Abs Returnează valoarea absolută a unei expresii
(<expresie_numerică>) numerice, sau a unui număr.
Exp Returnează valoarea constantei e ridicată la o
(<expresie_numerică>) putere (expresie numerică sau număr).
Funcţii Funcţii Discriere
Descriere Descriere
Int Date
Cbool
IsNull Returnează partea întreagă
() (<expresie>) Returneazădintr–un
Returnează
Boolean număr sauadevărat
datavaloarea
sistemului
(<expresie_numerică>)
Day
Cbyte dintr–o expresie numerică.
(<data_calendaristică>)
(<expresie>) (TRUE)
Returnează
Byte dacă expresia
numărul zilei dindintre
lună
Returnează primul număr
Ccur (<expresie>) negativ conţine
paranteze
(1–31).
Currency îmntreg valoarea
mai mic NULL
Month sau egal decât numărul
(<data_calendaristică>)
Cdate (<expresie>) (datespecificat
invalide)
Returnează
Date (sau numărul
numărul lunii din an (1–
IsError rezultat în
(<expresie>)
CDbl (<expresie>) urma evaluării numerice)
Returnează
12).Double valoarea adevărat
Fix Year Returnează partea întreagă
Cdec(<data_calendaristică>)
(<expresie>) (TRUE)
Returneazădintr–un
Decimal dacănumăr
anul. expresia
sau dintre
(<expresie_numerică>)
Hour dintr–o expresie numerică.
CINt(<expresie_timp>)
(<expresie>) paranteze
Integer conţine
Returnează numărulo eroare.
orei din zi (0–
IsEmpty Returnează primul număr
(<expresie>)
CLng (<expresie>) negativ întreg
Returnează
23) Long mai mareadevărat
valoarea
Minute sau egal decât
(<expresie_timp>)
CSng (<expresie>) numărul specificat
(TRUE) (sau numărul
Single numărulexpresia
Returnează dacă minutului dintre
dintr–
rezultat
CStr (<expresie>) în urma evaluării
o orăexpresiei
paranteze
(0–59).
String nunumerice)
conţine o valoare.
Second (<expresie_timp>)
Cvar (<expresie>) NULL
Returnează este considerat
Variant numărul uneivaloare.
secunde
IsDate (<expresie>) Returnează
dintr–un valoarea adevărat
minut (0–59).
(TRUE) dacă expresia dintre
paranteze este compatibilă cu o
dată calendaristică.
IsNumeric (<expresie>) Returnează valoarea adevărat
(TRUE) dacă expresia dintre
paranteze poate fi evaluat ca
număr.
IsObject (<identificator>) Returnează valoarea adevărat
Funcţii pentru şiruri de caractere (Tabelul.16)
(TRUE) dacă identificatorul dintre
paranteze este de tip obiect.
Tabelul.16FuncţieDescriereChr (<cod_caracter>)Returnează caracterul corespunzător codului
specificat.Len (<şir_cractere/variabilă>)Returnează numărul de caractere al şirului de
caractere specificat sau numărul de octeţi necesari pentru a stoca conţinutul unei
variabile.Space (număr)Returnează numărul de spaţii specificateStr
(expresie_numerică)Converteşte rezultatul evaluării expresiei numerice dintre paranteze într–
un şir de caractereVal (şir_caractere)Returnează rezultatul evaluării şirului de caractee
specificat, într–un numărMid (şir_caractere, poziţie_start, lungimea)Extrage un şir de
caractere dintr–un alt şir de caractere.
– şir_caractere – şirul de caractere din care se extrage;
– poziţie_start poziţia din şirul de caractere, de unde începe extragerea;
– lungimea – numărul de caractere care se extrage.

Funcţii pentru dată şi oră (Tabelul.17)


Tabelul.17
Funcţii pentru conversii (Tabelul.18)
.18

Funcţii diverse (Tabelul.19)


Tabelul.19

Funcţii definite de utillizator


Sintaxa:
Private Public] Function nume_functie [([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:
Exit Function – permite ieşirea forţată dintr–o funcţie;
nume_funcţie = expresie, permite asocierea unui rezultat numelui funcţiei. 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 de funcţie.

Structuri de control fundamentale în VBA


Programele VBA sunt programe a căror evoluţie se modifică în mod prestabilit, previzibil,
controlat. Aceste facilităţi sunt posibile datorită structurilor de control care precizează ordinea în care se
vor executa instrucţiunile. Un progam structurat (concept introdus în anii ’70) se bazează pe următoarele
structuri de control: secvenţială, alternativă, repetitivă.
Structuri secvenţiale
În această structură, operaţiile sunt executate cosecutiv, în ordinea în care sunt indicate în
schemă, ordine în care vor fi stocate în memorie instrucţiunile maşină rezultate în urma compilării. Sunt
foarte rare cazurile când un întreg program este conceput utilizând numai o structură secvenţială.

Instrucţiune 1

Instrucţiune 2

Instrucţiune n

Structuri alternative
Aceste structuri,numite şi condiţionate, sunt de două categorii: de selecţie şi de decizie. şi se
caracterizează prin executarea unui set de instrucţiuni sau a altuia, în funcţie de îndeplinirea sau
neîndeplinirea unei condiţii.
Structurile alternative permit astfel ramificarea ordinii de execuţie a instrucţiunilor unui program.

Instrucţiune
1
Fals Adevărat
Con
diţie

Instrucţiune 2 Instrucţiune
3

Structuri repetitive
În cadrul structurilor repetitive (sau iterative), un set de instrucţiuni se repetă în funcţie de o
condiţie specificată
Structurile repetitive pot fi:
condiţionate anterior – caracterizate prin executarea repetată a setului de instrucţiuni cît timp
condiţia testată este adevărată;
condiţionate posterior caracterizate prin executarea setului de instrucţiuni cât timp o condiţie este
falsă;
condiţionate anterior sau posterior, cu contor. Cu această structură se execută setul 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 automat variabila contor cu +1

Instrucţiune 1

Adevărat
Condiţi
e

Fals Instrucţiune 2
Instrucţiuni VBA pentru programarea structurilor

Instrucţiuni pentru implementarea structurii alternative


Instrucţiunile VBA utilizate în reprezentarea acestor structuri sunt : If pentru structurile
alternative de selecţie şi Select Case pentru structurile alternative de decizie.
Instrucţiunea If
Este utilizată sub următoarele formate :

A.
If <condiţie>Then
[secvenţă_instrucţiuni_1]
[Else
[secvenţă_instrucţiuni_2]]
End If
Unde:
Condiţie poate fi o expresie numerică sau o expresie şir de caractere, care poate fi evaluată la
adevărat (true) sau fals (False).
Dacă rezultatul evaluării expresiei din condiţie este adevărat, atunci este executată
secvenţă_instrucţiuni_1, astfel este executată secvenţă_instrucţiuni_2.

Exemplu:
Dacă media este egală cu 5 atunci studentul este considerat integralist, în caz contrar este
restanţier.
If Media = 5 Then
MsgBox „Student integralist”
Else
MsgBox „Student restanţier”
End If

B.
If <condiţie_1>Then
[secvenţă_instrucţiuni_1]
[Else lf<condiţie_2> Then
[secvenţă_instrucţiuni_2]]
……
[Else
[secvenţă_instrucţiuni_n]]
End If

Această variantă este utilă în cazul structurilor imbricate.

Exemplu:
Agenţii comerciali sunt premiaţi în funcţie de valoarea mărfurilor vândute.

If suma_de_încasat<100000000 Then
MsgBox „Prima=suma_de_încasat * 5%
Elself suma_de_încasat >=100000000 Then
MsgBox „Prima=suma_de_incasat * 10%
Else pentru suma_de_încasat> 200000000 Then
MsgBox „Prima=suma_de_încasat * 15%
End If

C.
If<condiţie> Then <instrucţiune_1> [Else <instrucţiune_2 >]
În această variantă, după evaluarea condiţiei, se poate executa o singură instrucţiune şi trebuie
scrisă pe un singur rând.

Exemplu:
În calculul valorii de plată corespunzătoare facturilor întocmite, firma X oferă o reducere de 5%
pentru facturile mai mari de 100 milioane lei.
If val_fact>100000000 Then val_de_plată=val_fat*0,95_
Else val_de_plată=val_fact

Instrucţiunea Select Case


În cazul în care o expresie trebuie comparată cu un număr mai mare de valori, nu este
recomandată folosirea repetată a instrucţiunii If…Then…Else, ci este performantă folosirea instrucţiunii
Select Case.
Formatul instrucţiunii este:

Select Case <expresie_selector>


[Case <listă_expresii_case_1>
[secvenţă_instrucţiuni_1]]
[Case <listă_expresii_case_1>
[secvenţă_instrucţiuni_2]]
[Case <listă_expresii_case_1>
[secvenţă_instrucţiuni_3]]
…….
[Case Else
secvenţă_instrucţiuni_n]
End Select
Unde:
expreresie_selector poate fi o expresie numerică sau o expresie şir de caractere.
Expresiile Case pot fi o listă de expresii numerice sau o expresie şir de caractere separate de “,
“(virgulă).
De asemenea pot conţine operatorii To şi Is cu următorul format:
<expresie_1> To <expresie_2>
Se tastează dacă valoarea expresiei_selector se află cuprins în intervalul de valori cuprins între
expresie_1 şi expresie_2
Is <operator de comparare> <expresie>
Se tastează dacă valoarea expresiei_selector satisface condiţia impusă de operatorul de comparare.

Exemplu:
Penalităţile percepute de firma X pentru întârzierea plăţi facturilor de către beneficiari, în funcţie
de numărul de zile de întârziate.

Select Case Penalităţi


Case 0
MsgBox „Penalităţi=0”
Case 1 To 5
MsgBox „Penalităţi= val_fact*0,01”
Case 6 To 10
MsgBox „Penalităţi=val_fact*0,05”
Case 11 To 15
MsgBox „Penalităţi=val_fact*0,1”
Case Else
MsgBox „Penalităţi=val_fact*0,5”
End Select

Instrucţiuni pentru implementarea structurii repetitive

Pentru reprezentarea acestei structuri se folosesc un număr de patru instrucţiuni:


While………Wend
Do…………...Loop
For………….Next
For Each…..Next
Instrucţiunea While………Wend

Este o structură repetitivă condiţionată anterior.


Formatul instrucţiunii este:

While <condiţie>
[secvenţă_instrucţiuni]
Wend

Condiţie poate fi o expresie numerică sau o expresie şir de caractere, care poate fi evaluată la
adevărat sau fals. Întâi se evaluează condiţia, dacă este adevărată, se repetă secvenţa de instrucţiuni; dacă
nu este adevărată se iese din structură şi se trece la următoarea secvenţă de instrucţiuni de după Wend.

Exemplu:
Să se afişeze numerele mai mici decât 10.

Score = 0
While Score < 0
Score = Score + 1
Wend

Instrucţiunea Do………Loop
Formatul instrucţiunii este:

Do [{While│Until} <condiţie>]
[secvenţă_instrucţiuni]
[Exit Do]
[secvenţă_instrucţiuni]
Loop

În varianta Do While...Loop se repetă secvenţa de instrucţiuni atâta timp cât condiţia este
adevărată. Dacă evaluarea ei este Null, evaluarea condiţiei este False. Această variantă funcţionează
exact ca While...Wend, cu deosebirea că se poate ieşi forţat din structură cu Exit Do.

Do
[secvenţă_instrucţiuni]
[Exit Do]
[secvenţă_instrucţiuni]
Loop [{While│Until} <condiţie>]

Exemplu:
Se va introduce Nr_Matricol al studenţilor până când Nr_ Matricol = 3456

Nr_ Matricol = 0
Do
Nr_ Matricol = Nr_ Matricol + 1
Loop Until Nr_ Matricol = 3456

În varianta Do Until...Loop se repetă secvenţa de instrucţiuni până când condiţia devine


adevărată. Deci se execută secvenţa de instrucţiuni atâta timp cât evaluarea condiţiei este False.
Instrucţiunea Exit Do forţează ieşirea din structura repetitivă la instrucţiunea care urmează după
instrucţiunea Loop într–un moment anume ales de programator.

Instrucţiunea For………….Next
Codifică structura repetitivă cu un număr definit de paşi, în care o secvenţă de cod se repetă cu un
număr specificat de ori.
Formatul instrucţiunii este:

For <vb_contor>=<val_initiala> To <val_finala> [Step <Val_pas>]


[secvenţă_instrucţiuni]
[Exit For]
[secvenţă_instrucţiuni]
Next [<vb_contor>]

<val_initiala>,<val_finala> – reprezintă valoarea iniţială, respectiv finală pentru <vb_contor>;


<Val_pas> – reprezintă valoarea pasului de incrementare/decrementare pentru variabila contor,
implicit are valoarea + 1;
<val_initiala>,<val_finala>,<Val_pas> – pot fi rezultatul evaluării unor expresii.

Exemplu:
Se va afişa suma numerelor de la 10 la 100.
Suma = 10
For CONTOR = 11 To 100
Suma = Suma + CONTOR
Next CONTOR

Instrucţiunea For Each…..Next


Parcurge iterativ o colecţie de elemente, la fiecare iteraţie variabilei element I se atribuie un
element din colecţie. Se foloseşte la parcurgerea colecţiilor de obiecte Access.
Formatul instrucţiunii este:

For Each <vb_element> In <colectie>


[secvenţă_instrucţiuni]
[Exit For]
[secvenţă_instrucţiuni]
Next [<vb_element>]
CAP.V PROGRAMAREA DIRIJATĂ DE EVENIMENTE

Putem discuta de programare dirijată de evenimente în Access în contextul formularelor,


rapoartelor şi controalelor de pe un formular/raport sau secţiunile acestora.
Evenimentele în Access pot fi:
Deschiderea unui formular/raport;
Închiderea unui formular/raport;
Scrierea unei înregistrări într–o tabelă;
Dublu clic pe mouse;
Activarea unui buton de comandă.
Tuturor evenimentelor din Access li se pot ataşa proceduri, macro–uri, expresii. Macro–
urile au început să cedeze locul VBA–ului, majoritatea programatorilor preferând VBA–ul.
Se vor prezenta evenimentele cel mai des folosite de programatori în cadrul
formularelor/rapoartelor şi controalelor de pe acestea.
Lista cu evenimente ce sepot trata în cadrul formularelor/rapoartelor şi controalelor se
poate obţine din fereastra cu proprietăţi, secţiunea Event
Pentru a ataşa o procedură unui eveniment se activează [Event Procedure] după care se
activează caseta care va prezenta fereastra Choose Builder.
Pentru a ataşa o funcţie se alege Expression Builder
Procedurile ataşate evenimentelor formularelor /rapoartelor sunt memorate în module
care sunt ataşate formularelor/raportelor. Acestea nu sunt vizibile în secţiunea Module a bazei de
date. Fiecare formular/raport are ataşat un singur modul. Toate obiectele de pe formular/raport
sunt vizibile în modulul ataşat acestuia, din toate procedurile.
Se prezintă în continuare cele mai importante evenimente ale formularului:
 Evenimentul OnOpen se produce la deschiderea formularului, înainte ca o înregistrare din tabela
sau interogarea ataşată formularului să fie afişată pe ecran.
Procedura ataşată evenimentului OnOpen are următorul antet:

Private Sub Form_Open (Cancel As Integer)

Parametrul Cancel determină dacă formularul va fi deschis sau nu.

 Evenimentul OnClose se produce la închiderea şi ştergerea de pe ecran a formularului. Acest


eveniment nu se poate abandona.
Procedura ataşată evenimentului OnClose are următorul antet:

Private Sub Form_Close()

 Evenimentul OnLoad se produce la deschiderea formularului, în momentul în care o înregistrare


din tabela sau interogarea ataşată formularului este afişată pe ecran. Acest eveniment nu se poate
abandona.
Procedura ataşată evenimentului OnLoad are următorul antet:

Private Sub Form_Load()

 Evenimentul OnUnload se produce la închiderea formularului, dar înainte de ştergerea sa de pe


ecran. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului OnUnload are următorul antet:

Private Sub Form_Unload(Cancel As Integer)

Parametrul Cancel determină dacă formularul va fi deschis sau nu


Observaţie:
Ordinea de declanşare a evenimentelor la deschiderea unui formular este: OnOpen
OnLoad.
Ordinea de declanşare la închiderea unui formular este: OnUnload OnClose.

 Evenimentul OnActivate se declanşează atunci când un formular devine fereastră activă pe


ecran. Ordinea evenimentelor la deschiderea formularului este: OnOpen OnLoad
OnActivate.
Procedura ataşată evenimentului OnActivate are următorul antet:

Private Sub Form_Activate ()

 Evenimentul OnDeactivate se declanşează atunci când un formular nu mai este fereastră activă
pe ecran. Ordinea evenimentelor la închiderea formularului este:

OnUnload OnDeactivate OnClose.

Procedura ataşată evenimentului OnDeactivate are următorul antet:

Private Sub Form_Deactivate ()


 Evenimentul OnResize se declanşează ori de câte ori se încearcă redimensionarea unui formular,
înclusiv la deschiderea acestuia, atunci când este construită fereastra formularului. Acest eveniment
nu se poate abandona.
Procedura ataşată evenimentului OnResize are următorul antet:

Private Sub Form_Resize ()

 Evenimentul OnCurrent se declanşează atunci când o înregistrare din tabela sau interogarea
ataşată formularului devine înregistrare curentă. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului OnCurrent are următorul antet:

Private Sub Form_Current()

 Evenimentul BeforeInsert se declanşează exact înaintea momentului în care se încearcă


inserarea (crearea) unei înregistrări noi, pe formularul curent.
Procedura ataşată evenimentului BeforeInsert are următorul antet:

Private Sub Form_ BeforeInsert (Cancel As Integer)

 Evenimentul AfterInsert se declanşează exact după momentului în care se încearcă inserarea


(crearea) unei înregistrări noi, pe formularul curent. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului AfterInsert are următorul antet:

Private Sub Form_ AfterInsert ()


 Evenimentul BeforeUpdate se declanşează exact înaintea momentului salvării unei înregistrări
noi, pe formularul curent.
Procedura ataşată evenimentului BeforeUpdate are următorul antet:

Private Sub Form_BeforeUpdate (Cancel As Integer)

 Evenimentul AfterUpdate se declanşează după momentului în care se încearcă salvarea unei


înregistrări, pe formularul curent. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului AfterUpdate are următorul antet:

Private Sub Form_ AfterUpdate ()


Observaţie:
Ordinea acestor evenimente este:
BeforeInsert BeforeUpdate AfterUpdate AfterInsert

 Evenimentul OnDelete se declanşează atunci când utilizatorul doreşte să şteargă înregistrarea


curentă.
Procedura ataşată evenimentului OnDelete are următorul antet:

Private Sub Form_Delete (Cancel As Integer)


 Evenimentul OnTimer se declanşează la un interval exprimat în milisecunde, în proprietatea
Timer Interval din aceeaşi secţiune cu evenimentele. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului OnTimer are următorul antet:
Constantă Explicaţie
acDataErrContinue Se ignoră eroarea, având posibilitatea afişării unui mesaj de eroare al utilizatorului
în locul celui generat de Access.
acDataErrDisplay Se afişează mesajul de eroare generat de Access.

Private Sub Form_Timer()

 Evenimentul OnError se declanşează automat, atunci când se produce o eroare pe formularul


curent. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului OnError are următorul antet:

Private Sub Form_Error (DataErr As Integer, Response As Integer)


Unde:
DataErr – parametru care indică codul erorii returnat de obiectul Access Err.
Response – parametru prin care se poate stabili dacă se afişează mesajul de eroare Access.
Aceasta poate lua ca valoare două constante

Evenimente ataşate rapoartelor


 Evenimentul OnNoData se declanşează la crearea raportului, dacă acesta nu conţine nici o
înregistrare.
Procedura ataşată evenimentului OnNoData are următorul antet:

Private Sub Report_NoData (Cancel As Integer)

Parametrul Cancel se utilizează pentru a abandona crearea raportului şi afişarea/imprimarea sa.


Pentru aceasta trebuie setat Cancel=True.

 Evenimentul OnFormat se produce înainte de formatarea pentru afişare sau tipărire a unei
secţiuni dintr–un raport.
Procedura ataşată evenimentului OnFormat are următorul antet:

Private Sub NumeSectiuneRaport_Format(Cancel As Integer, FormatCount As Integer)

Parametrul Cancel se foloseşte pentru a abandona formatarea secţiunii (Cancel=True) al cărei


eveniment OnFormat este tratat.
Parametrul FormatCount se foloseşte pentru a număra de câte ori s–a declanşat acest eveniment.

 Evenimentul OnPrint se produce înainte de formatarea pentru tipărire a unei secţiuni dintr–un
raport.
Procedura ataşată evenimentului OnPrint are următorul antet:

Private Sub NumeSectiuneRaport_Print(Cancel As Integer, PrintCount As Integer)

Parametrii Cancel şi PrintCount au aceeaşi semnificaţie ca în cazul evenimentului OnFormat.

 Evenimentele OnOpen, OnClose, OnActivate, OnDeactivate, OnError au acelaşi efect ca şi în


cazul formularelor

Evenimente ataşate controalelor


Controalele din formulare/rapoarte Access au şi ele evenimente specifice care pot fi tratate. O
parte din evenimente sunt întâlnite la toate controalele standard din Access, iar altele sunt specifice
numai anumitor controale.
Se vor prezenta lista evenimentelor cele mai uzuale controale:
Lista evenimentelor controlului TextBox

Lista evenimentelor controlului Buton de comandă

Lista evenimentelor controlului Combo Box


Lista evenimentelor controlului List Box

 Evenimentul OnEnter se declanşează înainte ca un control să fie activat. Acest eveniment nu se


poate abandona.
Procedura ataşată evenimentului OnEnter are următorul antet:

Private Sub NumeControl_Enter()

 Evenimentul OnExit se declanşează înainte ca un control să fie dezactivat.


Procedura ataşată evenimentului OnExit are următorul antet:
Private Sub NumeControl_Exit(Cancel As Integer)

Parametrul Cancel se foloseşte pentru a abandona ieşirea dintr–un control (Cancel=True).

 Evenimentul OnClick se declanşează în momentul în care se activează butonul mouse–ului.


Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului OnClick are următorul antet:

Private Sub NumeControl_Click()

 Evenimentul OnDblClick se declanşează în momentul în care se activează de două ori butonul


mouse–ului (la dublu clic).
Procedura ataşată evenimentului OnDblClick are următorul antet:
Private Sub NumeControl_DblClick(Cancel As Integer)

Parametrul Cancel se foloseşte pentru a abandona cel de–al doilea click din secvenţa dublu click
(rămâne deci doar un eveniment OnClick).

Observaţie:
La producerea unui eveniment OnDblClick se produce automat şi un eveniment OnClick.
Evenimentul OnClick îl precedă pe OnDblClick.

 Evenimentul OnGotFocus se declanşează în momentul în care un control este activat. Acest


eveniment nu se poate abandona.
Procedura ataşată evenimentului OnGotFocus are următorul antet:

Private Sub NumeControl_GotFocus ()

 Evenimentul OnLostFocus se declanşează în momentul în care un control este dezactivat. Acest


eveniment nu se poate abandona.
Procedura ataşată evenimentului OnLostFocus are următorul antet:

Private Sub NumeControl_LostFocus ()


Observaţie:
Ordinea de declanşare a evenimentelor, în situaţia în care luîm în considerare toate aceste
evenimente este:
OnEnter OnGotFocus OnExit OnLostFocus

 Evenimentul OnMouseDown se declanşează în momentul în care utilizatorul activează un buton


al mouse–ului, în controlul unde se tratează acest eveniment.
Procedura ataşată evenimentului OnMouseDown are următorul antet:

Private Sub NumeControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As


Single)

 Evenimentul OnMouseUp se declanşează în momentul în care utilizatorul lasă liber butonul


mouse–ului după ce l–a apăsat, în controlul unde se tratează acest eveniment.
Procedura ataşată evenimentului OnMouseUp are următorul antet:

Private Sub NumeControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As


Single)

 Evenimentul OnMouseMove se declanşează în momentul în care utilizatorul mută mouse–ul pe


deasupra controlului unde se tratează acest eveniment.
Procedura ataşată evenimentului OnMouseMove are următorul antet:

Private Sub NumeControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As


Single)

Observaţie:
Button Constanta
Constanta Descriere
Descriere indică butonul
acţionat în acLeftButton
acShiftMask Butonul
Starea tastei
stângSHIFT
al mouse–ului momentul
declanşării unui acRightButton
acCtrlMask Butonul
Starea tastei
drept CTRL
al mouse–ului eveniment prin
intermediul unor acMiddleButton
acAltMask Butonul
Starea tastei
din mijloc
ALT al mouse–ului constante

Shift indică starea tastelor SHIFT, ALT, CTRL în momentul declanşării acestor evenimente prin
intermediul unor constante (

 Evenimentul BeforeUpdate se declanşează exact înaintea momentului salvării unei înregistrări


noi.
Procedura ataşată evenimentului BeforeUpdate are următorul antet:
Private Sub NumeControl_BeforeUpdate(Cancel As Integer)

 Evenimentul AfterUpdate se declanşează după momentului în care se încearcă salvarea unei


înregistrări.
Procedura ataşată evenimentului AfterUpdate are următorul antet:

Private Sub NumeControl_AfterUpdate()

 Evenimentul OnChange se declanşează atunci când conţinutul unui control casetă de text sau
listă derulantă se modifică. Acest eveniment nu se poate abandona.
Procedura ataşată evenimentului OnChange are următorul antet:

Private Sub NumeControl_Change()


CAP.VI MACRO–URI (MACROS)

PREZENTAREA GENERALĂ A LIMBAJULUI MACRO

Un obiect tip macro este desemnat printr–un nume şi are ca scop automatizarea unor acţiuni
asupra unor obiecte ale bazei de date.
Macrourile definesc o serie de comenzi care se execută automat la apariţia unor evenimente.
Macrourile pot fi ataşate unui formular sau control, în scopul automatizării unor operaţii diverse
(tipărirea rapoartelor, deschiderea şi închiderea formularelor, lansarea în execuţie a unor programe,
executarea unei fraze SQL).
Acţiunile unui obiect macro se aplică obiectelor dintr–o bază de date.
Acţiunile pot viza:
Deschiderea unui obiect tip tabel, cerere, formular, raport;
Filtrarea datelor afişate într–un formular sau tabel;
Configurarea imprimării;
Automatizarea importului/exportului de date;
Căutarea unei înregistrări care răspunde la un anumit criteriu;
Definirea meniurilor personalizate.
CREAREA UNUI MACRO

Pentru realizarea unei comenzi trebuie parcurse etapele:


din fereastra Database se selectează obiectul Macros şi apoi butonul New şi se deschide
fereastra Macro. Se mai poate da comanda Macro din meniul Insert
în coloana Action se selectează din listă acţiunea dorită;
în coloana Comment se tastează în dreptul fiecărei acţiuni eventualele explicaţii. Aceste
comentarii sunt opţionale;
în grila Action Arguments din partea inferioară se completează argumentele acţiunii selectate.
Conţinutul grilei de argumente se modifică în funcţie de elementul selectat în lista Action, fiecare
acţiune are propriile argumente.
Pentru testarea unui obiect macro din meniul Run se dă comanda !Run sau se acţionează prin
click pe butonul de comandă Run cu pictograma ! din bara cu instrumente asociate ferestrei de editare
macro.
Pentru a modifica conţinutul unui obiect macro se deschide obiectul macro în modul Design
View. Modificările pot viza argumentele acţiunilor existente, adăugarea de noi acţiuni, suprimarea unor
acţiuni existente sau schimbarea ordinii acestora.
Un ansamblu de acţiuni care împreună automatizează o anume activitate formează o macro–
comandă. Un obiect poate stoca una sau mai multe macro–comenzi.
ANALIZA ACŢIUNILOR MACRO

O importanţă deosebită în cazul unei aplicaţii o constituie automatizarea acesteia, adică


realizarea mai multor operaţii la o acţiune a utilizatorului. Pentru acest lucru există două posibilităţi:
Crearea de comenzi macro prin simpla alegere a acţiunilor, pentru care realizatorul aplicaţiei nu
trebuie să cunoască programare
Realizarea de proceduri în cod Visual Basic, pentru care realizatorul aplicaţiei trebuie să
cunoască programarea acestui limbaj.
Comenzile macro pot fi ataşate:
Unui eveniment ce apare la un control, formular sau raport;
Unei opţiuni din meniu;
Unei chei sau unei combinaţii de taste.
În mediul Visual Basic este definit obiectul DoCmd pentru a lansa aceleaşi acţiuni Access.
Aceste acţiuni se regăsesc sub formă de metode ale acestui obiect.
Acţiunile macro le putem grupa în următoarele categorii:
1. Acţiuni macro pentru manipularea obiectelor de date
OpenForm – se utilizează pentru a deschide un formular în diferite moduri de vizualizare.
OpenModule – se foloseşte pentru a deschide modul Visual Basic la o anumită procedură:
OpenQuery – se foloseşte pentru a deschide o interogare de selecţie sau de acţiune în diferite
moduri de vizualizare: Design, Print Preview sau Datasheet;
OpenReport – se foloseşte pentru a deschide un raport în diferite moduri de vizualizare.
OpenTable – se foloseşte pentru a deschide un tabel în diferite moduri de vizualizare.
Close – se foloseşte pentru a închide o fereastră.
DeleteObject – se foloseşte pentru a şterge un obiect dintr–o bază de date.
GoToControl – se foloseşte pentru a focaliza un câmp sau un control specificat din cadrul
înregistrărilor curente dintr–un formular, tabel sau interogare care sunt deschise.
ApplyFilter – se foloseşte pentru a apela un filtru, un Query sau o clauză SQL Where pentru a
restrânge sau sorta înregistrările dintr–o tabelă, formular sau raport.
Maximize – se foloseşte pentru a maximiza mărimea unei ferestre, fiind similară cu apăsarea
butonului Maximize din colţul dreapta sus al ferestrei Windows. Acţiunea nu are argumente.
Minimize – se foloseşte pentru a minimiza fereastra activă la bara de titlu în partea de jos a unei
ferestre Access, fiind similară cu apăsarea butonului Minimize din colţul dreapta sus al ferestrei
Windows. Acţiunea nu are argumente.
MoveSize – se foloseşte pentru a muta şi redimensiona fereastra activă.
Rename – se foloseşte pentru redenumirea unui obiect din baza de date. Obiectul pentru a putea
fi redenumit trebuie să fie închis.
2. Acţiuni macro pentru navigarea în cadrul înregistrărilor bazei de date
FindNext – se foloseşte pentru a găsi următoarea înregistrare care îndeplineşte condiţia
specificată anterior într–o acţiune FindRecord, sau într–o casetă de dialog Find in Field din meniul
Edit opţiunea Find.
FindRecord – se foloseşte pentru găsirea primei înregistrări din formularul activ sau tabela şi
query active sub forma datasheet care satisfac criteriul specificat în argumentele acţiunii.
3. Acţiuni pentru controlul execuţiei aplicaţiei
Beep – se foloseşte când dorim să însoţim cu un semnal sonor realizarea unei acţiuni.
Acţiunea Beep nu prezintă argumente.
CancelEvent – se foloseşte pentru a anula un eveniment ce realizează execuţia unui macro ce
conţine această acţiune. Acţiunea CancelEvent nu prezintă argumente.
MsgBox – se foloseşte pentru afişarea unui mesaj sau a unei pictograme într–o casetă de masaje,
în funcţie de tipul de masaj afişat ce poate fi de avertisment, de informare sau un mesaj critic.
Quit – se foloseşte pentru a ieşi din Microsoft Access şi prezintă câteva opţiuni privind salvarea
obiectelor din baza de date înainte de a se executa ieşirea din Microsoft Access.
RunApp – se foloseşte pentru a lansa o aplicaţie Windows sau MS–DOS ca Excel, Word, Power
Point din mediul Accesss.
RunCod – se foloseşte pentru a apela o funcţie definită de utilizator în cod Visual Basic din
module Microsoft Access.
RunMacro – se foloseşte pentru a lansa în execuţie un macro. Această acţiune se poate realiza
pentru a lansa un macro dintr–un alt macro, a lansa un macro atunci când sunt îndeplinite anumite
condiţii definite de utilizator sau pentru a ataşa un macro unei comenzi dintr–un meniu definit de
utilizator.
RunSQL – se foloseşte pentru a executa o acţiune de interogare folosindu–se instrucţiuni SQL.
SetWarnings – se foloseşte pentru a opri sau nu mesajele sistemului. Se foloseşte pentru a
întâmpina apariţia unor ferestre modale sau casete de mesaj în momentul stopării execuţiei macro–ului.
StopMacro – se foloseşte pentru a opri acţiunea unui macro curent ce se află în execuţie.
StopAllMacros – se foloseşte pentru a opri mai multe macro–uri curente ce se află în execuţie.
Această acţiune se utilizează atunci când un macro este apelat dintr–un alt macro cu ajutorul acţiunii
RunMacro şi se doreşte oprirea ambelor macro–uri.
4. Acţiune pentru crearea şi modificarea intefeţei cu utilizatorul
AddMenu – se foloseşte pentru a crea meniuri personalizate:
Meniuri bară pentru formulare şi rapoarte;
Meniuri cu acces rapid pentru formulare şi rapoarte;
Meniuri bară globale pentru toate ferestrele Microsoft Access;
Meniuri globale cu acces rapid pentru toate ferestrele Microsoft Access.
ShowToolbar – se foloseşte pentru afişarea sau ascunderea unui toolbars generat de Microsoft
Access, sau construit de utilizator.
SetMenuItem – se foloseşte pentru a seta statutul comenzilor dintr–un meniu realizat de
utilizator sau dintr–un meniu global definit de utilizator pentru o fereastră activă.

5. Acţiuni pentru automatizarea ieşirilor aplicaţiei şi facilitarea comunicării cu alte


programe
PrintOut – se foloseşte pentru tipărirea unui obiect din baza de date, fiind similară cu alegerea
opţiunii Print din meniul File.
TransferDatabase – permite importarea sau exportarea obiectelor bazei de date.
TransferSpreadsheed – permite operaţiunea de export sau import date din fişiere create cu
procesoare de tabele precum Microsoft Excel.
Send Object – se foloseşte pentru a include obiecte Microsoft Access într–un mesaj electronic
pentru Microsoft Exchange, Microsoft Mail, mesaj care poate fi văzut şi transmis.