Sunteți pe pagina 1din 42

Introducere Modele SGBD Limbajul Visual

Access SQL Basic

Concepte
Obiective
SGBD
SGBD
Distrib

Nivelul
extern
Nivelul
concept
Nivelul
logic
Nivelul
intern
Proiectarea
bd

Prezentare

Crearea
struct
Formulare
Interogări
Rapoarte
Macrouri
Interfaţa
WWW
Facilităţi

Limbajul
SQL
Creare
interog
Definire
date
Selectie
date
Manipulare
date
Interogari
imbr

Module
VBA
In/Out
Variabile
Operatori
Funct si
proc
Struct
alternat
Struct
repet
Obiecte
Access
Evenimente

Capitolul 1: Introducere

1.1 Conceptul de baza de date

Organizarea datelor în vederea prelucrarii pe calculator este o activitate tot asa de


importanta ca si realizarea programelor. Cele doua componente principale ale unui sistem
informatic: datele si programele, se gasesc într-o strânsa interdependenta. Un program,
oricât de elaborat si rafinat ar fi, nu va produce rezultatele scontate, daca va lucra cu o
structura de date depasita. Tot asa de bine, o structura de date bine pusa la punct nu va
putea suplini carentele unui program care o prelucreaza.Trebuie făcută distincţie între
date, informaţii şi cunoştinţe. Din punct de vedere al prelucrării pe calculator, datele sunt
definite de trei elemente: un identificator, atribute şi valoare. Exemplu: cantitate
(identificator), număr real şi pozitiv (atribute), 50,5 (valoare).
O bază de date poate fi definită ca un ansamblu de date elementare sau structurate,
accesibile unei comunităţi de utilizatori. Mai concret, o bază de date este un ansamblu de
fişiere intercorelate, care conţine nucleul de date necesare unui sistem informatic
(aplicaţie informatică).
Un fişier este un ansamblu de înregistrări fizice, omogene din punct de vedere al
conţinutului şi al prelucrării. O înregistrare fizică este unitatea de transfer între memoria
internă şi cea externă a calculatorului. Aceasta este formată din una sau mai multe
înregistrări logice. O înregistrare logică este unitatea de prelucrare din punct de vedere al
programului utilizator. Aceasta este formată dintr-un ansamblu de câmpuri, care descriu
o anumită realitate.

1.2 Obiective fundamentale ale unei baze de date

Centralizarea datelor permite: suprimarea redundanţei, asigurarea unicităţii


înregistrării şi controlul centralizat (asupra datelor). În prelucrarea clasică în
care fişierele sunt dedicate aplicaţiilor, aceleaşi date apar înregistrate în mai
multe fişiere şi în formate diferite. Acest lucru implică o utilizare ineficientă a
spaţiului de memorie externă, actualizarea dificilă a acestor date şi lizibilitate
redusă ca urmare a formatelor diferite.
Independenţa între date şi prelucrări.Baza de date, ca imagine a unei anumite
realităţi, trebuie actualizată permanent. Acest lucru nu trebuie să afecteze
programele de prelucrare. Pentru aceasta trebuie ca fiecare program să aibă o
viziune proprie asupra BD
Realizarea de legături între entităţile de date, care sunt indispensabile pentru
exploatarea eficientă a sistemului informatic. Spre exemplu, în cadrul gestiunii
aprovizionării, trebuie asociat un furnizor la lista de produse pe care le vinde şi
invers, un produs la lista de furnizori, precizând condiţiile de vânzare pentru un
furnizor şi un produs.
Integritatea datelor asigură fiabilitatea şi coerenţa bazei de date (BD). Pentru
aceasta trebuie definite restricţii de integritate cum ar fi:

apartenenţa la o listă de valori sau interval;


apartenenţa la un anumit format;
reguli de coerenţă cu alte date.

Securitatea datelor. Baza de date trebuie să fie protejată împotriva unei


distrugeri logice (anomalie de actualizare) sau fizice. Pentru aceasta există
instrumente care permit:

crearea unor puncte de repriză; altfel spus, salvarea din timp în timp a unor
copii coerente ale bazei de date;
gestiunea unui jurnal de tranzacţii; lista operaţiilor realizate asupra bazei de
date după ultimul punct de repriză.

Confidenţialitatea datelor este asigurată prin proceduri de:

identificare a utilizatorilor prin nume sau cod;


autentificarea prin parole;
autorizarea accesului diferenţiat prin drepturi de creare, consultare modificare
sau ştergere pentru anumite segmente de date.

Partajarea datelor permite înlănţuirea tranzacţiilor solicitate simultan pe


aceeaşi înregistrare din baza de date, prin blocarea cererilor în aşteptare şi
deservirea ulterioară a acestora.

1.3 Sistemul de Gestiune a Bazelor de Date

Un sistem de gestiune a bazelor de date constituie o interfaţă între utilizatori


şi BD, care permite în principal crearea, actualizarea şi consultarea acesteia. În
acest context putem defini SGBD ca un instrument de asamblare, codificare,
aranjare, protecţie şi regăsire a datelor în BD.
Principalele funcţiuni pe care le îndeplineşte un SGBD sunt următoarele:

memorarea datelor pe suportul extern prin sistemul de gestiune a fişierelor;


gestiunea datelor şi a legăturilor dintre ele în vederea unei regăsiri rapide prin
intermediul sistemului de acces (SGBD intern);
introducerea şi extragerea datelor din / spre exterior în forma cerută de
utilizator prin intermediul SGBD–ului extern.

SGBD-ul poate prelucra mai multe cereri, provenind de la mai multe aplicatii,
fiecare aplicatie avand propria schema logica de descriere a datelor.

1.4 Sisteme de Gestiune pentru Baze de date Distribuite (SGBDD)

Necesitatea descentralizării sistemelor informatice, pe de o parte, şi


realizarea pe plan mondial a unor reţele de calculatoare care permit conectarea
mai multor baze de date într-o reţea, pe de altă parte, au dus la apariţia bazelor
de date distribuite şi, implicit, a SGBDD. BDD reprezintă un salt calitativ
superior în evoluţia bazei de date, deschizând noi perspective în proiectarea şi
realizarea sistemelor informatice. Un sistem de BDD este format dintr-o colecţie
de baze de date locale, amplasate geografic în puncte diferite (noduri ale unei
reţele de calculatoare) şi legate logic prin relaţii funcţionale, astfel încât pot fi
văzute la nivel global ca o singură bază de date.
Obiectivele principale ale unui SGBDD sunt:

definirea şi manipularea colecţiilor de date distribuite pe calculatoare diferite,


ca un singur ansamblu logic (baza de date distribuită);
distribuirea datelor trebuie să se facă după criterii foarte variate care să
răspundă tuturor necesităţilor utilizatorilor;
utilizatorii manipulează datele fără a cunoaşte locul unde sunt memorate;
pentru creşterea gradului de fiabilitate sau de performanţă, datele pot fi
duplicate pe mai multe sisteme, fără ca utilizatorii să cunoască acest lucru;
asigurarea coerenţei bazei de date în cazul operaţiilor de actualizare şi de
reluare în caz de incidente la unul sau la mai multe din nodurile reţelei;
exploatarea bazei de date în regim de multiacces;
controlul accesului la date.

Capitolul 2: Niveluri şi modele de reprezentare a datelor


în bazele de date
În demersul realizării unei baze de date există trei niveluri de percepţie a
acesteia :

extern, corespunzător utilizatorilor, care îşi exprimă cerinţele informaţionale


prin aşa-numitele scheme externe (subscheme, fiecare subschemă
corespunzând viziunii fiecărui utilizator al bazei de date);
conceptual, aferent administratorului bazei de date, care se concretizează în
schema conceptuală; este o abstractizare a unei părţi din lumea reală;
intern, corespunzător programatorului, care realizează reprezentarea datelor pe
suportul fizic; poartă numele de bază de date fizică;

Determinarea structurii unei baze de date se poate aborda ascendent,


realizându-se descrierea schemelor externe, urmată de elaborarea schemei
conceptuale, sau descendent, definind mai întâi schema conceptuală şi
deducând ulterior schemele externe posibil de obţinut.

2.1 Nivelul extern (schema externă)

La nivel extern, fiecare grup de utilizatori care manipulează datele posedă o


anumită descriere a acestora. Această descriere corespunde felului în care
grupul vede baza de date în programele lui de aplicaţii.
Modelul extern este cel mai apropiat de utilizator. Modelul extern
corespunzător unui utilizator sau grup de utilizatori reprezintă ceea ce vede
acesta din baza de date.
Modelul extern este derivat din modelul conceptual, putând prezenta
deosebiri substanţiale faţă de acesta. Astfel un model extern cuprinde o parte a
elementelor din modelul conceptual, dar poate conţine şi elemente care nu
există în modelul condeptual şi nu au corespondent în baza de date fizică.
Fiecare schema externă trebuie să se regăsească în modelul conceptual.

2.2 Nivelul conceptual (modelul conceptual)

Modelul conceptual integrează viziunile tuturor utilizatorilor asupra bazei de


date. De asemenea acest tip de model este o descriere a conţinutului de
informaţie al bazei de date şi nu cuprinde nici un fel de referire la modul de
memorare al datelor sau al strategiei de acces la aceste date. Prin modelul
conceptual este realizată independenţa fizică a datelor. Modelului conceptual i
se asociază o transformare care defineşte modul în care structura logică de date
este transpusă în structura fizică de memorare. Aceasta este interfaţa dintre
modelul intern şi cel conceptual.
Nivelul conceptual este nivelul central care reflectă datele structurate astfel
încât acestea să poată fi preluate şi prelucrate cu ajutorul unui SGBD.
Schema conceptuală stă la baza modelului conceptual care va permite
definirea proprietăţilor elementare ale obiectelor care interesează dintr-o
întreprindere (de exemplu: model de pantof, culoare, mărime etc.), gruparea
acestora, în funcţie de criterii de omogenitate stabilite, în scopul descrierii
obiectelor lumii reale (comanda, articole de încălţăminte, livrare) şi a relaţiilor
dintre ele (cantitatea şi preţul fiecărui articol livrat). Sunt definite regulile de
care trebuie să se ţină seama în manipularea datelor existente.
În proiectarea bazelor de date, la nivel conceptual, se pot utiliza mai multe
modele, dintre care cel mai frecvent utilizat în ultima vreme este modelul
Entitate-Atribut-Corespondenţă(EAC).
Modelul EAC abstractizează lumea reală şi o transpune, pe de o parte, în
agregări de date elementare, numite entităţi, iar pe de altă parte, în legături
între entităţi, denumite corespondenţe (sau asocieri). Aşadar, o entitate
corespunde unui obiect din lumea reală, identificat, în general, printr-un nume
(o factură, un produs finit, un furnizor, un client etc.). Un tip de entitate
desemnează un ansamblu de entităţi constituite din date de acelaşi fel. Tipurile
de date agregate sunt denumite generic atribute şi definesc proprietăţile
obiectelor studiate.
O entitate este un model de obiect identificat în lumea reală - material (o
persoană, un lucru etc.), imaterial (un eveniment) sau abstract - al cărui tip
este definit de un nume şi de o listă de proprietăţi (atribute).
Un atribut se defineşte ca fiind o proprietate a unei entităţi sau a unei
corespondenţe, caracterizată printr-un nume şi un tip. Fiecare atribut care a
fost selecţionat la definirea conţinutului unei entităţi este o caracteristică
semnificativă pentru domeniul studiat. Mulţimea realizărilor (valorilor) unui
atribut se numeşte domeniu.
Realizare a unei entităţi se numeşte mulţimea formată din câte o valoare
pentru fiecare atribut al entităţii.
Există atribute care necesită valori „nule” ale altor atribute cu care sunt
relaţionate, fapt care trebuie să fie luat în considerare la proiectarea bazei de
date. Valorile fiecărui atribut component a ceea ce numim generic entitate
alcătuiesc o realizare (instanţiere) a entităţii respective.
Identificatorul unei entităţi este atributul (sau grupul de atribute şi roluri) a
cărui realizare (valoare) caracterizează în mod unic o realizare a entităţii. În
reprezentarea grafică, de regulă, identificatorul se subliniază cu o linie
continuă.
Regulă (minimalitatea identificatorilor): în cazul identificatorilor compuşi
dintr-un grup de atribute sau roluri, trebuie să nu existe un subgrup care să
poată îndeplini rolul de identificator, adică numărul de elemente componente
ale identificatorului să fie minim. Aceasta se poate asigura prin verificarea
dependenţelor funcţionale dintre componentele identificatorului respectiv.
O corespondenţă sau asociere reprezintă o legătură logică între două sau mai
multe realizări de entităţi. La nivelul limbajului natural, este definită printr-un
verb. O corespondenţă (asociere) poate avea proprietăţi particulare, date de
atribute specifice.
Rolul unei entităţi este un nume care desemnează modul de participare a
entităţii la o asociere. Identificarea asocierilor se realizează prin rolurile
entităţilor participante, deci, concret, cu ajutorul identificatorilor entităţilor
participante.
Mulţimea entităţilor care participă la o asociere formează colecţia acesteia;
numărul acestora dă gradul sau dimensiunea asocierii.
O corespondenţă între realizări diferite ale aceleiaşi entităţi se numeşte
asociere reflexivă , caz în care este recomandată precizarea rolurilor fiecărei
entităţi în cadrul asocierii.
Cardinalitatea minimală/maximală exprimă modul de participare al
realizărilor fiecărei entităţi la asociere (valori uzuale: 0,1; 1,1; 0,n; 1,n). Pentru
fiecare tip de entitate care participă la o asociere trebuie precizat câte o
cardinalitate minimală şi una maximală.
O entitate poate participa la mai multe corespondenţe; în acelaşi timp, pot
exista mai multe asocieri între aceleaşi entităţi. Un subansamblu de entităţi ale
aceluiaşi tip de entitate formează un subtip al entităţii respective cu
proprietăţi specifice. De exemplu, în baza de date a unei societăţi care
tranzacţionează autovehicule, entitatea Autovehicul poate avea subtipurile
De_închiriat şi De_vânzare, fiecare cu date referitoare la felul tranzacţiei la care
participă un autovehicul (preţ de vânzare, respectiv tarif de închiriere etc.).
Reguli:

o asociere nu poate exista decât o singură dată între aceleaşi entităti;


numele entităţilor, corespondenţelor, rolurilor, atributelor trebuie să fie unice în
cadrul modelului conceptual, iar apoi, în baza de date definită.

În exemplul urmator este ilustrată abstractizarea unui ansamblu de date,


extras din limbajul natural, aplicând modelul EAC.
Produsele finite ale unei fabrici, repreyentând articole de încălţăminte sunt
livrate clienţilor. La livrare se întocmesc facturi care conţin data livrării ş
articolele de ţncălţăminte, fiecare dintre ele într-o anumită cantitate şi la un
anumit preţ unitar, cota TVA corespunzătoare articolului respectiv. O asemenea
situaţie s-ar putea repreyenta prin urm[toarea schemă EAC:

entităţi: {Articol_încălţăminte, Factura_livrare}


corespondenţă: {Se_facturează}
atribute
{cod, denumire, model, culoare, mărime} pentru Articol_încălţăminte
{nr_factura, data_factura, cota_TVA} pentru Factura_livrare
{cantitate_facturată, preţ_livrare} pentru Se_facturează
identificatori:
{cod} pentru Articol_încălţăminte
{nr_factură} pentru Factură_livrare

La realizarea modelului conceptual este necesar să se ţină seama şi de


regulile pe care datele trebuie să le respecte permanent. Acestea se numesc
restricţii de integritate (RI).
Exemple de RI:

eliminarea redundanţelor (repetărilor) şi a omonimelor în denumirea entităţilor,


atributelor, corespondenţelor;
valorile atributelor cu rol de identificator trebuie să fie unice şi nenule;
în cazul asocierilor, orice realizare a acestora impune existenţa realizărilor
entităţilor participante (este vorba de integritate referenţială);
cardinalităţile minime şi maxime se stabilesc pe baza regulilor de desfăşurare a
activităţii în sectorul vizat.

Exemplu:

cardinalitate minimă 0: un client al fabricii poate să rămână în această postură,


chiar dacă într-o anumită perioadă nu i se trimite nici o factură de livrare;
cardinalitate minimă 1: întocmirea unei facturi trebuie să vizeze un client;
cardinalitate maximă 1: la livrare, orice factură este trimisă unui client al
fabricii;
respectarea unor restricţii de domeniu, cum ar fi:
data facturii să nu fie anterioară datei curente;
mărimea articolelor de încălţăminte să fie cuprinsă în intervalul [34-46];
respectarea corelaţiilor între valorile atributelor din entităţi diferite sau între
cele din entităţi şi din asocieri; de exemplu, cantitate_facturată să satisfacă
relaţia cantitate_facturată + 20 >= cantitate_în_stoc, pentru fiecare articol
de încălţăminte facturat;
în cazul identificării entităţilor prin intermediul rolurilor asumate de alte entităţi
într-o asociere, corespondenţa respectivă trebuie să nu fie ciclică, apoi
cardinalităţile entităţii identificate să fie 1,1 , iar ale celei identificator, 0,1
sau 1,1.
incluziunea de roluri: un rol al entităţii într-o asociere impune un alt rol al său
într-o a doua asociere :

excluziunea de roluri: apare în situaţia în care roluri ale aceleiaşi entităţi se


exclud reciproc:

egalitatea de roluri: înseamnă o restricţie de incluziune reciprocă între două


roluri ale aceleiaşi entităţi:

Asemănător se stabilesc şi restricţiile de incluziune, excluziune şi egalitate de


asocieri – dacă există – care vizează atât asocierea (toate rolurile dintr-o
asociere), cât şi toate entităţile participante.

2.3 Nivelul logic (modelul relaţional)

Definirea modelului relational


Modelul relaţional are la bază conceptul de relaţie definit în teoria matematică
a mulţimilor ca fiind o submulţime a produsului cartezian al mai multor mulţimi:
R M1×M2×…×Mn
Familia de mulţimi pe care este definită relaţia se numeşte domeniu, iar dacă
M1 = M2 = … = Mn, relaţia este omogenă. Numărul n se numeşte gradul relaţiei
(aritatea relaţiei), un element al relaţiei t = (m1, m2, … , mn) este numit tuplu,
iar numărul de tupluri indică cardinalul relaţiei.
Domeniul este o noţiune mai cuprinzătoare decât atributul, reprezentând
mulţimea tuturor valorilor posibile care definesc o anumită proprietate a unui
obiect, spre deosebire de atribut, care reprezintă mulţimea valorilor existente la
un moment dat în coloana pe care o desemnează în cadrul relaţiei. Într-o relaţie
pot exista mai multe atribute care iau valori în aceleaşi domenii.
Relaţiile se reprezintă într-o formă simplă prin tabele, supuse următoarelor
restricţii:

în fiecare coloană toate valorile sunt de acelaşi fel;


fiecare valoare este un număr sau un şir de caractere (nu trebuie să fie grup
sau ansamblu);
ordinea liniilor în tabel nu este predefinită şi nu sunt admise duplicate;
coloanele sunt identificate prin nume distincte care reprezintă atributele
relaţiei.

Prelucrarea relaţiilor se face prin algebra relaţională sau calculul relaţional pe


tuplu sau domeniu.
Algebra relationala
Operatorii relaţionali se pot grupa în operatori de bază, care pot genera toată
clasa operatorilor relaţionali, şi operatori auxiliari. Operatorii relaţionali de bază
se împart în operatori de asamblare şi operatori unari.
Operatorii de asamblare sunt operatori binari, care primesc la intrare două
relaţii şi generează la ieşire o singură relaţie. Aceştia sunt: reuniunea, diferenţa
şi produsul cartezian, care au aceeaşi semnificaţie ca şi în teoria mulţimilor.
Operatorii unari se aplică asupra unei relaţii şi generează o altă relaţie. Din
această clasă fac parte proiecţia şi selecţia.
Proiecţia. Prin intermediul proiecţiei, dintr-un tabel cu un anumit număr de
coloane se obţine unul cu un număr mai mic de coloane.
Selectia. Prin operatorul de selecţie, dintr-un tabel cu un anumit număr de
coloane se obţine unul cu aceleaşi coloane, dar cu un număr mai mic de rânduri.
Operatorii auxiliari pot fi deduşi din setul de operatori de bază şi sunt:
compunerea (Join), intersecţia şi împărţirea (diviziunea). Aceştia joacă un rol
foarte important în interogarea bazelor de date relaţionale. Spre exemplu,
realizarea produsului cartezian este foarte costisitoare, ceea ce face ca acesta
să fie înlocuit cu operatorul de Join.
Compunerea condiţională (Join) a două relaţii R1 şi R2 după calificatorul
multiatribut Q este relaţia E ale cărei tupluri sunt cele ale produsului cartezian
R1 x R2 care satisfac calificatorul Q. În funcţie de calificatorul Q se disting mai
multe tipuri de compuneri:

dacă Q este de forma Ai = Bj, se numeşte echicompunere;


dacă Q este de forma Ai ò Bj, unde ò = {<,<=,>,>=,<>} se numeşte ø
compunere;
dacă Q este de forma Ai = Aj, se numeşte autocompunere.

Compunerea naturală este o echicompunere pe R1 şi R2 după toate atributele


având acelaşi nume în R1 şi R2, urmată de o proiecţie care permite conservarea
unuia dintre aceste atribute, egale ca nume.
Intersecţia o dau relaţiile R1 şi R2 cu aceeaşi schemă, aceasta este o relaţie E
care conţine tuplurile comune celor două relaţii.
Diviziunea relaţiei R1 (A1, A2 … An) de grad (p+m) prin relaţia R2 (Ap+1, …,
Am) de grad m este relaţia E (A1, A2, …, Ap) de grad p, formată din toate
tuplurile care, concatenate cu fiecare tuplu din R2, dă totdeauna un tuplu din
R1.
Privită prin prisma modelului relaţional, baza de date apare ca o colecţie de
relaţii (tabele) normalizate, în care fiecare coloană reprezintă un atribut
distinct, iar fiecare rând, un tuplu distinct. Tuplurile unei relaţii se pot identifica
în mod unic prin intermediul valorilor unuia sau mai multor atribute (eventual
toate atributele), care joacă rol de cheie primară a relaţiei respective. Se
numeşte domeniu primar un domeniu pe care este definit un singur atribut
drept cheie primară. Dându-se două relaţii R1 şi R2 cu atributele A1 şi A2 chei
primare definite pe acelaşi domeniu primar D, spunem că A1 este cheie externă,
dacă, utilizând o parte din valorile ei sau toate, putem regăsi tuplurile relaţiei
R2. Altfel spus, un atribut al unei relaţii este cheie externă, dacă se regăseşte
pe post de cheie primară într-o altă relaţie.
Deoarece relaţiile reflectă un anumit aspect din realitate, acestea se supun
unor restricţii care sunt de două tipuri:
restricţii de integritate care depind de semantica valorilor domeniilor şi care cer
ca relaţiile să se supună următoarelor reguli:
integritatea entităţii, prin care valorile cheii primare trebuie să fie diferite de
zero; altfel cheia nu va mai fi identificator;
integritatea referirii, potrivit căreia valorile unei chei externe trebuie să refere
tuplurile unei alte relaţii sau să fie nedefinite.
alte restricţii care se aplică asupra tuplurilor relaţiei şi nu asupra domeniilor,
reflectând anumite corelaţii de ordin valoric (egalitate, inegalitate).

Normalizarea relatiilor
E. F. Codd a arătat că într-o anumită formă relaţiile posedă proprietăţi
nedorite, pe care le-a numit anomalii de actualizare:

Anomalia de ştergere constă în faptul că anumite date care urmează să fie


şterse fac parte din tupluri în care se găsesc şi alte date care mai sunt
necesare în continuare, ori ştergerea făcându-se la nivelul tuplului, acestea
se pierd.
Anomalia de adăugare constă în faptul că anumite date care urmează să fie
adăugate fac parte din tupluri incomplete (pentru care nu se cunosc toate
datele), ceea ce face ca acestea să nu poată fi adăugate.
Anomalia de modificare rezultă din faptul că este dificil de modificat o valoare a
unui atribut atunci când ea apare în mai multe tupluri ale relaţiei.

Pentru a înlătura aceste anomalii, Codd a stabilit trei forme normale pentru
relaţii şi a introdus procesul de normalizare care se bazează pe noţiunea de
dependenţă funcţională (FD) ca relaţie între atributele unei entităţi ce are un
caracter invariant.

Procesul de normalizare a relaţiilor se realizează în mai mulţi paşi, începând


cu forma normală unu (1NF) şi ajungând (după ultimele cercetări) la forma
normală cinci (5NF). Acesta constă în descompunerea unei relaţii în
conformitate cu mulţimea dependenţelor funcţionale F, într-o colecţie de relaţii
care să conserve informaţiile şi dependenţele funcţionale din relaţia iniţială
(descompunerea fără pierderi). Pentru exemplificarea procesului de
normalizare a relaţiilor vom face apel la o relaţie R definită pe atributele: cod
produs (P#), unitatea de măsură (U), preţul unitar (P), cantitatea (Q), cod
beneficiar (B#), localitatea beneficiarului (L), codul poştal (C) şi prefixul
telefonic al localităţii (T).
O relaţie este în forma normală 1 (1NF), dacă şi numai dacă toate atributele
ei conţin numai valori atomice.
O relaţie este în forma normală 2 (2NF) dacă şi numai dacă este în 1NF şi
orice atribut noncheie este complet dependent funcţional de cheia primară.
O relaţie este în forma normală 3 ( 3NF ) dacă şi numai dacă este în 2NF şi
fiecare atribut noncheie nu este dependent tranzitiv pe cheia primară.

2.4 Nivelul intern (fizic)

Nivelul intern (modelul fizic) este cel ce corespunde structurii în care sunt stocate
datele în interiorul maşinii. Sunt specificate tabelele (fişierele) care le conţin (nume,
organizare, localizare etc.), componentele fiecărui fişier (lungime, câmpuri, plasare a
acestora în cadrul fişierului), căile de acces la componentele tabelelor (indecşi, relaţii,
legături între tabele).
De exemplu, o factură poate fi accesată direct datorită unui index realizat pe numărul
acesteia, iar cantităţile facturate pot fi cunoscute creând o legătură între tabelele
'Factura_livrare' şi 'Produse_facturate', prin intermediul asocierii 'Se_facturează'.
Se vor avea în vedere cerinţele privind asigurarea protecţiei datelor, atât din punct de
vedere al conţinutului câmpurilor din tabele (verificarea şi validarea valorilor câmpurilor
la introducere, evitarea ştergerii, din greşeală sau din rea-voinţă, a datelor importante,
cu secvenţe de program special concepute), cât şi în ceea ce priveşte accesul utilizatorilor
la baza de date (stabilirea drepturilor de acces trebuie să se facă ţinând cont de rolul,
funcţia şi sarcinile fiecărui utilizator).

2.4 Proiectarea bazei de date

Proiectarea unei baze de date presupune realizarea modelelor conceptual,


logic şi fizic, prin trecerea de la MCD la MLD, apoi, de la MLD la MFD.
Corespondenţele între entităţi care se caracterizează prin cardinalităţi 1,1
(interesează cardinalitatea maximă egală cu 1) şi care, de regulă, nu au
proprietăţi specifice, se concretizează în restricţii de integritate funcţională
(RIF), iar asocierile sunt denumite ierarhice. Cele pentru care cardinalităţile
maxime au valori egale cu n (sau mai mari ca 1) sunt restricţii de integritate
multiplă (RIM); asocierile, în acest caz, se numesc non-ierarhice. Acestea din
urmă se recunosc uşor fiindcă, de cele mai multe ori, au proprietăţi (atribute)
specifice, în timp ce asocierile ierarhice nu au, în general, caracteristici proprii.
În vederea facilitarii întelegerii modului în care se creeaza o aplicatie în
Microsoft ACCESS 2000, vom folosi un studiu de caz practic.
Vom alege pentru aceasta o întreprindere cu activitate de productie.
Managementul acestei întreprinderi doreste realizarea unui sistem informatic de
gestiune a materialelor. Se doreste ca în cadrul acestui sistem sa se evidentieze
furnizorii, facturile, magaziile, tipurile de materiale si bonurile de consum.
Pentru a micsora gradul de dificultate a aplicatiei propuse, vom considera ca
toate materialele cuprinse pe o anumita factura sunt destinate unei singure
magazii. Materialele sunt receptionate de o magazie pe baza facturii si sunt
eliberate sectiilor de productie pe baza bonurilor de consum. Vom presupune,
de asemenea, ca materialele au un pret unitar de achizitie fix, care nu depinde
de furnizor.
Pe baza intrarilor (facturi) si a iesirilor (bonuri de consum) se doreste
determinarea nivelului stocurilor de materiale.
Conform teoriei proiectarii bazelor de date trebuie sa definim mai întâi
modelul conceptual al datelor (modelul entitate-atribut-corespondenta). În
etapa a doua acest model trebuie transformat în modelul logic (relational) si
apoi în modelul fizic (ACCESS).
Modelul conceptual al datelor:
În urma analizei problemei rezulta urmatoarele entitati: Furnizor, Factura,
Material, Magazie si Bon de consum.
Identificarea corespondentelor:

Furnizor - Factura ( Un furnizor poate emite de la 1 la n facturi, de unde rezulta


o corespondenta EMITE)
Factura - Material ( Într-o factura sunt cuprinse de la 1 la n materiale în diferite
cantitati, de unde rezulta o corespondenta LINIE FACTURA cu atributul
Cantitate intrata )
Factura - Magazie ( O magazie poate primi de la 1 la n facturi, de unde rezulta o
corespondenta PRIMESTE )
Bon de consum - Material ( Într-un bon de consum sunt cuprinse de la 1 la n
materiale în diferite cantitati, de unde corespondenta LINIE BON DE
CONSUM cu atributul Cantitate iesita )
Bon de consum - Magazie ( O magazie emite de la 1 la n bonuri de consum, de
unde rezulta corespondenta REALIZEAZA )
Facturi-Facturi ( O factura poate fi stornata de 0 sau n facturi de stornare, de
unde rezulta corespondenta SE STORNEAZA )

Stabilirea cardinalitatilor:

Corespondenta EMITE
dinspre entitatea Furnizor (1,n)
un furnizor emite cel putin o factura (cardinalitate minima 1);
un furnizor poate emite mai multe facturi (cardinalitate maxima n).
dinspre entitatea Factura (1,1)
factura este emisa de cel putin si de cel mult un furnizor (cardinalitate 1,1).
Corespondenta PRIMESTE
dinspre entitatea Magazie (1,n)
o magazie primeste cel putin o factura (cardinalitate minima 1);
o magazie poate primi mai multe facturi (cardinalitate maxima n).
dinspre entitatea Factura (1,1)
factura este trimisa la cel mult si la cel putin o magazie (cardinalitate 1,1).
Corespondenta LINIE FACTURA
dinspre entitatea Factura (1,n)
o factura contine cel putin un material (cardinalitate minima 1);
o factura poate contine mai multe materiale (cardinalitate maxima n).
dinspre entitatea Material (1,n)
un material este inclus în cel putin o factura (cardinalitate minima 1);
un material poate fi inclus în mai multe facturi (cardinalitate maxima n).
Corespondenta LINIE BON DE CONSUM
dinspre entitatea Material (0,n)
un material poate sa nu fie inclus în nici un bon de consum (cardinalitate
minima 0);
un material poate fi inclus în mai multe bonuri de consum (cardinalitate maxima
n).
Dinspre entitatea Bon de consum (1,n)
un bon de consum contine cel putin un material (cardinalitate minima 1);
un bon de consum poate contine mai multe materiale (cardinalitate maxima n).
Corespondenta DESTINAT
dinspre entitatea Bon de consum (1,1)
un bon de consum este destinat cel putin si cel mult unei magazii (cardinalitate
1,1).
dinspre entitatea Magazie (1,n)
unei magazii îi este destinat cel putin un bon de consum (cardinalitate minima
1);
unei magazii îi sunt destinate mai multe bonuri de consum (cardinalitate
maxima n).
Modelul conceptual al datelor
Modelul logic (relational) al datelor:

În figura urmatoare se prezinta transformarea modelului relational într-o


baza de date ACCESS (modelul fizic):
Modelul conceptual poate fi completat cu datele privind evidenta anilor si a
lunilor din fiecare an, relationate cu cele privind clientii si produsele comandate
de acestia.
Trecerea de la MLD la MFD se face utilizând facilitatile si instrumentele oferite
de SGBD-ul ales.
Deoarece SGBD Access implementeaza în totalitate teoria modelului
relational, trecerea de la MLD la MFD se face foarte simplu, dupa cum urmeaza:

relatiile se transpun în tabele;


legaturile dintre tabele sunt asigurate prin corespondentele între cheile primare
si cele externe.

Crearea structurii bazei de date in Access 2000 este prezentata in capitolul


următor.

Capitolul 1: Sistemul de gestiune a bazelor de date


Access 2000

3.1 Prezentare generală

Sistemul de Gestiune a Bazelor de Date Microsoft ACCESS 2000 face parte din
pachetul de programe Microsoft Office şi este cea de-a cincea versiune a
produsului de la lansarea sa iniţială în anul 1992.
Principalele caracteristici ale SGBD-ului ACCESS sunt:

este relaţional şi lucrează sub sistemul de operare Windows;


este deschis comunicării cu alte Sisteme de Gestiune a Bazelor de Date cum ar fi
FoxPro sau Paradox;
este compatibil cu tehnologia ActiveX, care permite realizarea aplicaţiilor
client/server;
permite realizarea unor aplicaţii complexe prin utilizarea limbajului Visual
Basic;
permite comunicarea cu SQL Server, un alt produs Microsoft care gestionează
baze de date;
permite accesul la baze de date din reţeaua Internet, fiind un instrument util
pentru publicarea informaţiilor în paginile Web;
este autodocumentat prin help, apelabil contextural sau la cerere;
conţine instrumente wizard care permit utilizatorului crearea într-o manieră
foarte simplă a obiectelor bazei de date;
permite crearea de comenzi rapide (shortcuts) în vederea accesării obiectelor
ACCESS;
permite crearea de grupuri de obiecte definite de utilizator în cadrul bazei de
date;
permite personalizarea bazei de date;
permite utilizarea obiectelor ACCESS din cadrul altor aplicaţii rulate sub
sistemul de operare Windows.

Arhitectura Microsoft ACCESS


O bază de date ACCESS poate fi definită ca fiind o colecţie de obiecte: tabele
(table), cereri de interogare (query), formulare (form), rapoarte (report),
pagini Web (pages), comenzi macro (macro) şi module (module).

Tabela (Table) este un obiect definit de utilizator în care sunt stocate datele
primare (expresia modelului relaţional).
Formularul (Form) este un obiect care permite introducerea datelor, afişarea
acestora sau controlul întregii aplicaţii.
Cererea de interogare (Query) este un obiect care permite vizualizarea
informaţiilor obţinute prin prelucrarea datelor din una sau mai multe tabele
şi/sau alte cereri de interogare.
Raportul (Report) este un obiect care permite formatarea şi tipărirea
informaţiilor obţinute în urma consultării bazei de date sub formă de
documente.
Pagina Web de accesare a datelor (Pages) reprezintă un obiect care include un
fişier HTML şi alte fişiere suport în vederea furnizării accesului la date prin
intermediul browser-elor Internet.
Comanda Macro (Macro) reprezintă un obiect care conţine o definiţie
structurată a uneia sau mai multor acţiuni pe care ACCESS le realizează ca
răspuns la un anumit eveniment.
Modulul (Module) reprezintă un obiect care conţine proceduri definite de
utilizator şi scrise în limbajul de programare Visual Basic.

Crearea unei baze de date:


La pornire, SGBD ACCESS afişează ecranul din figura din care rezultă două
posibilităţi:

crearea manuală a unei baze de date goale: Blank Access database


crearea unei BD cu ajutorul asistentului.

Deschiderea unei baze de date existente: dacă se doreşte modificarea sau


consultarea unei baze de date creată anterior, aceasta trebuie mai întâi
deschisă. În fereastra principală se selectează Open an existing file şi se
activează butonul [OK] care va deschide o nouă fereastră de dialog Open
asemănătoare cu fereastra de dialog File New Database, în care se selectează
baza de date ce se doreşte a fi modificată.

3.2 Crearea structurii bazei de date

În vederea facilitarii întelegerii modului în care se creeaza o aplicatie în


Microsoft ACCESS 2000, vom folosi un studiu de caz practic (prezentat in
capitolul anterior).
Crearea tabelelor:
Crearea structurii tabelelor se poate face în trei moduri:

Utilizând fereastra de proiectare (Create table in design view)


Prin introducerea datelor (Create table by entering data);
Utilizând instrumentul Wizard (Create table by using wizard).

Modul cel mai eficient de creare a tabelelor îl reprezinta utilizarea ferestrei de


proiectare, motiv pentru care vor fi prezentate mai întâi pe scurt celelalte doua
moduri.
Crearea unui tabel utilizând instrumentul wizard permite adaugarea unor
câmpuri standard ce se afla deja în cadrul bibliotecilor de tabele standard. De
exemplu, daca se doreste realizarea unui tabel cu clientii (Customers),
utilizându-se instrumentul wizard, se pot selecta anumite câmpuri standard
pentru aceasta tabela, precum si relatiile pe care acestea le au cu alte câmpuri
din alte tabele. Nu recomandam aceasta modalitate deoarece câmpurile din
cadrul tabelelor standard au fost create pentru sistemul de lucru anglo-saxon,
care, în anumite privinte, nu corespunde sistemului românesc.
Revenind la primul mod de creare a unei tabele, prin realizarea unui dublu clic
pe Create table in design view pe ecran va apărea fereastra Table.
În cadrul acestei ferestre se definesc numele câmpului (Field Name), tipul de
date (Data Type) şi, opţional, o descriere a câmpului respectiv (Description). În
panoul de jos al acestei ferestre se introduc celelalte proprietăţi ale câmpului.
Field name: numele câmpurilor poate fi format din maximum 64 de caractere,
poate să conţină spaţiu şi nu trebuie să conţină următoarele caractere: [ , ], .,
‘, ! . De asemenea, nu trebuie să fie cuvânt rezervat al ACCESS.
Data type: tipuri şi subtipuri de date:
Microsoft ACCESS 2000 permite ca numele de câmp să fie format din mai
multe cuvinte, de exemplu [Număr factură]. În versiunile mai vechi de ACCESS
denumirea acestui câmp ar fi fost scrisă într-un singur cuvânt sub forma
Număr_factură.
Format: formatul în care sunt afişate datele:
Proprietatea Format se utilizează pentru stabilirea modului în care numere, date
calendaristice, timp şi text vor fi afişate. Ea nu afectează şi modul de
introducere a datelor. Numărul de zecimale (Decimal places):
În cadrul acestei proprietăţi se stabileşte numărul de zecimale ce pot fi atribuite
câmpului. Există o listă de opţiuni şi se pot selecta valori cuprinse între 0 şi 15
sau Auto pentru determinarea automată a numărului de zecimale.
Input Mask (formatul de introducere). Proprietatea Input Mask (şablon de
introducere a datelor) se poate specifica utilizând trei secţiuni:

specifică şablonul însuşi, cum ar fi: !(999) 999-9999;


specifică dacă Microsoft Access va memora toate caracterele tastate; dacă se
utilizează 0 în această secţiune, toate caracterele vor fi memorate ca
valoare a câmpului în cauză (de exemplu, parantezele pentru prefix ori
separatorii unui număr de telefon vor fi memoraţi împreună cu numărul
însuşi); dacă se alege 1 sau nu se tastează nimic, vor fi memorate numai
caracterele care alcătuiesc valoarea propriu-zisă a câmpului respectiv;
specifică acel caracter pe care Microsoft Access îl va afişa în locul în care trebuie
să apară în şablon; în această secţiune se poate utiliza orice caracter;
pentru afişarea unui şir de caractere vid, se utilizează un spaţiu cuprins
între ghilimele (" ").

Caption: aceasta permite specificarea unui al doilea nume în situaţiile în care


primul nu este destul de semnificativ. El apare în antetul cererilor de interogare,
formularelor şi rapoartelor.
Default Value (Valoarea implicită): este o valoare care este atribuită automat,
în momentul când utilizatorul nu introduce nici o valoare în acel câmp.
Validation Rule (regula de validare): regulile de validare testează, conform
criteriului furnizat sub forma unei expresii ACCESS, valoarea introdusă într-un
câmp. Acestea folosesc:

operatorii: =, -, *, /, \, Mod, <, >, <>, =, <=, >=, AND, OR, BETWEEN, IN, IS
NULL;
identificatorii se dau în paranteze drepte [];
funcţii şi constante.

Dacă nu se specifică nici un operator, ACCESS asumă automat operatorul de


egalitate.
Validation Text (textul de validare): reprezintă textul care va apărea pe bara
de mesaje în cazul în care valoarea introdusă nu respectă criteriul impus de
regula de validare.
Required (cerut): prin această proprietate se stabileşte dacă prin
introducerea unei înregistrări în cadrul tabelei este obligatorie şi completarea
respectivului câmp.
Indexed (Indexat): dintr-o listă derulantă se poate alege între un index care
admite valori duplicat sau unul care cere ca fiecare valoare a câmpului să fie
unică. Access defineşte automat cheia primară a tabelei ca fiind indexată şi fără
duplicate (No Duplicated).
Prin activarea tab-ului Lookup din panoul de proprietăţi, se pot specifica o
serie de proprietăţi care se referă în principal la sursa de introducere a datelor.
După descrierea câmpurilor componente ale unei tabele (conform teoriei
modelului relaţional) trebuie să stabilim cheia primară a acesteia. Dacă uităm,
Access ne avertizează de acest lucru şi ne sugerează el o cheie primară. Aceasta
poate fi formată din unul sau mai multe câmpuri (cheie compusă). Dacă cheia
primară este formată dintr-un singur câmp, se selectează acesta şi apoi se
activează butonul cheia primară. Dacă cheia primară este formată din mai multe
câmpuri se selectează primul, iar celelalte se selectează în combinaţie cu
apăsarea tastei CTRL, după care se activează butonul cheie primară .
Relaţii între tabele:
Din punct de vedere al momentului creării acestora, există două tipuri de
relaţii între tabelele unei baze de date ACCESS, şi anume:

relaţii permanente - se stabilesc după definirea tabelelor şi sunt cerute de


modelul relaţional făcând parte din structura bazei de date. Acestea se
realizează de obicei prin corespondenţele cheie primară – cheie externă şi
sunt memorate în baza de date;
relaţii temporare - se stabilesc între tabele cu ocazia definirii unor cereri de
interogare, nefiind înregistrate în structura bazei de date.

În cadrul unei baze de date nu este obligatoriu ca între toate tabelele să


existe relaţii. Este posibil ca în cadrul unei aplicaţii să utilizăm şi tabele
independente şi/sau de lucru (tabele temporare). În cadrul acestora se scriu şi
se şterg datele aferente unei anumite operaţii.
Relaţiile care se pot stabili între tabele sunt de trei tipuri:

unu la mai mulţi (one to many);


unu la unu (one to one);
mai mulţi la mai mulţi (many to many).

Revenim în cadrul ferestrei Relationships


pentru a descrie procesul de construire a relatiilor dintre tabele. O relatie între
doua tabele se realizeaza prin operatia drag and drop de la cheia primara a
tabelei principale la cheia externa a tabelei secundare.
Cu această ocazie, ACCESS va deschide fereastra de dialog Edit Relationship,
în care se observă legătura stabilită între cheia primară şi cheia externă.
În cazul în care este selectată proprietatea Enforce Referential Integrity
(Impune integritate referenţială) în cadrul unei aplicaţii, aceasta înseamnă că
atunci când se introduce o nouă înregistrare în tabela secundară, se verifică
dacă valoarea cheii externe se găseşte în tabela primară, în câmpul
corespunzător cheii primare. Aceasta înseamnă că este necesară mai întâi
încărcarea datelor în tabela principală şi apoi în cea secundară.
Introducerea datelor în tabele:
În cadrul aplicatiilor ACCESS datele pot fi introduse în tabele printr-o
multitudine de metode. În fereastra Database selectam tabela Camere, în care
dorim sa introducem date si activam butonul . Pe ecran va aparea fereastra

, Datasheet (foaie de date). În cadrul acestei ferestre se pot vizualiza si/sau


modifica datele deja introduse sau se pot introduce date noi.

3.3 Formulare (simple, avansate)

Formularele (Forms) reprezinta interfata principala între utilizator si o


aplicatie MS Access, fiind obiecte ale bazei de date ce permit introducerea si
afisarea datelor într-o maniera cât mai atractiva.
În cadrul unei aplicatii, formularele pot îndeplini mai multe functii:
afisarea si editarea datelor;
controlul operatiilor realizate de aplicatie;
introducerea de date;
afisarea de mesaje;
tiparirea informatiilor.

Un formular este compus din trei parti: antetul, zona de detaliu si subsolul:

Lucrul cu formulare se poate realiza in unul din următoarele moduri de


vizualizare:

Design View în acest mod de vizualizare poate fi modificat


design-ul formularului
Form view vizualizarea propriu-zisă a formularului

Datasheet view mod de vizualizare sub formă tabelară

Spre exemplu formularul Magazie se prezintă astfel în cele trei moduri de


vizualizare:
Design View Form View Datasheet V

Pentru crearea formularelor in Access 2000 se utilizează controale. Un control


este un obiect grafic care poate fi pozitionat pe un formular, raport sau pagina
de acces la date (Data access page). Un control poate afisa date si/sau efectua
actiuni.
Pentru crearea unui formular exista mai multe moduri prin care se poate crea
un formular, dar cele mai importante sunt urmatoarele:
prin utilizarea instrumentului wizard: Create form by using wizard,
crearea în fereastra de proiectare (manual) Create form in Design view.

Un subformular, este un formular inclus într-un alt formular, pentru a permite


afisarea datelor din mai multe tabele sau cereri de interogare, aflate în general
în relatii de tipul unu la unu sau unu la mai multi. Astfel, în formularul principal
vor fi afisate datele din partea unu a relatiei, iar în subformular cele din partea
mai multi. În mod implicit, legatura dintre un formular si un subformular
reflecta legatura dintre tabelele pe care se bazeaza. Prin urmare, la un moment
dat în formular vor fi afisate o înregistrare aflata de partea unu a relatiei iar în
subformular înregistrarile corespondente din tabela aflata de partea mai multi a
acesteia. Într-un formular care contine un subformular se pot specifica criterii
de filtrare numai asupra câmpurilor din formularul principal.
Facând apel la exemplul nostru, relatia de tip 1- n dintre tabelele Categorii si
Camere face posibila crearea unui formular unde se vor afisa Camerele si în care
se poate include un subformular pentru afisarea tarifului corespondent fiecarei
camere.
Din punct de vedere al formatului de prezentare, un subformular poate fi de
doua feluri:

foaie de date (Datasheet view) - se poate crea într-o maniera foarte simpla si
permite modificari privind dimensiunea si ordinea coloanelor;
formular (Form view)- ofera o mare suplete de prezentare prin posibilitati
multiple de aranjare a datelor, de utilizare a culorilor, de creare de antet si
subsol de pagina si de includere a unor câmpuri de tip OLE.

Pentru includerea unui subformular într-un formular principal trebuie ăarcurşi


următorii paşi:

creare formularului principal,


crearea subformularului,
faceţi drag&drop cu subformular peste formularul principal.

Pentru a aduce un subformular într-un formular principal:

se deschide formularul principal în modul Design;


se trece în fereastra Database, prin activarea tastei F11, se activeaza butonul ,
care va afisa lista tuturor formularelor din baza de date;
se deplaseaza pictograma corespunzatoare subformularului din fereastra bazei
de date în spatiul formularului principal, ceea ce va avea ca efect adaugarea
unui control de tip subformular;
daca este cazul se deplaseaza controlul în locul dorit si se redimensioneaza în
functie de necesitati;
se face dublu clic pe bordura controlului ce reprezinta subformularul, pentru a
afisa lista de proprietati a acestuia;
se verifica legatura dintre formularul principal si subformular prin proprietatile
Link child fields si Link master fields, care sunt automat definite de ACCESS
pe baza legaturilor dintre tabele; în caz contrar se stabilesc cele doua
câmpuri de legatura;
se trece în modul Forms pentru verificarea rezultatului;
pentru a aduce modificari în formularul principal se comuta înapoi în modul
Design.

Astfel MS Access va crea automat o legătură îbtre cele două formulare.


Legatura automata este posibila în urmatoarele doua situatii:
formularul principal si subformularul se bazeaza pe tabele aflate în relatii
primare de tip 1-1 sau 1-n; situatie în care câmpurile de legatura vor fi cheia
primara din tabela aflata de partea 1 si cheia externa din tabela aflata de
partea n a relatiei;
formularul principal si subformularul contin doua câmpuri care sunt identice ca
nume si ca tip, iar cel din formularul principal este cheie primara a tabelei
sursa; situatie în care legatura se face prin cele doua câmpuri.

Atât formularele,rapoartele cât şi controalele posedă o serie de proprietă.


Proprietatile unui obiect se pot modifica respectând urmatoarea succesiune:

dacă este vorba de un formular/raport se deschide în modul Design;


se selectează formularul/raportul din meniul Edit->Select Form (Select
Report)); daca este vorba de un obiect plasat pe un formular sau pe un
raport acesta se selecteaza printr-un clic pe obiectul dorit;
se activează fereastra cu proprietati (trebuie sa fie activat meniul
View,Properties sau prin actionarea butonului din bara cu instrumente).

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


Plasarea expresiilor în controalele aflate pe un formular sau subformular se
realizeaza prin scrierea acestora în proprietatea Control Source a unui control.
Scrierea unei expresii se poate face asistat (Expression Builder) sau prin scriere
directa. Daca se utilizeaza scrierea unei expresii în modul neasistat, aceasta
trebuie precedata de semnul egal (=expresie). Expresiile pot contine orice
functie Access 2000 sau functii definite de utilizator, referiri catre controale
aflate pe alte formulare (deschise) etc.
Expresiile plasate în formulare/subformulare pot fi grupate în:

expresii simple
expresii care utilizeaza functii agregate (SUM, AVG, COUNT etc.)

Utilizarea în expresii a controalelor din acelasi formular se realizeaza prin


referirea numelui controalelor implicate în expresie.
Pentru exemplificare am plasat o caseta de text (numele controlului-
proprietatea Name- Valoare) în care am scris în proprietatea Control Source
expresia:=Val([Cantitate intrata])*Val([Pret factura]):

Utilizarea în controale a expresiilor din alte formulare se face prin: Forms!


[Nume formular]![Nume control]. Pentru a putea fi evaluate astfel de expresii,
trebuie ca acele formulare de pe care sunt referite controale sa fie deschise în
acel moment.
Utilizarea într-o expresie de pe un formular a unor controale din subformular
se realizeaza prin: [Nume subformular].Form![Nume control].

3.4 Interogarea bazei de date

Interogarea bazei de date permite afişarea înregistrărilor din una sau mai
multe tabele, înregistrări care verifică anumite condiţii, care sunt grupate în
funcţie de anumite criterii sau sunt ordonate crescător sau descrescător.
Avantajele oferite de modul de interogare a bazei de date prin cereri sunt:

selectia câmpurilor din tabele si a înregistrarilor acestora pe baza unor criterii


impuse de necesitatile informationale;
ordonarea rezultatelor dupa anumite criterii;
introducerea unor câmpuri calculate pe baza unor formule, care folosesc drept
operanzi alte câmpuri existente în tabele, precum si posibilitatea
determinarii de totaluri pe anumite câmpuri;
utilizarea într-o cerere a mai multor tabele;
modularitatea cererilor în sensul ca foaia de raspuns (rezultatul) a unei cereri
poate fi folosita ca intrare pentru o noua cerere;
crearea unor formulare si situatii finale (reports), care au la baza cereri de
interogare (create anterior);
posibilitatea generarii de reprezentari grafice pe baza unor cereri de tip analiza
încrucisata.

Interogările pot fi realizate prin intermediul obiectelor de tip Query. Pentru


utilizarea unui asemenea obiect trebuie:

creată o interogare,
aceasta interogare trebuie executată.

Rezultatul executiei unei asemenea cereri este plasat într-o foaie de raspuns,
asemanator foii de date asociate unei tabele.
Crearea unei cereri de interogare (Query) se poate face în mai multe feluri:

prin utilizarea instrumentului wizard: Create query by using wizard,


crearea în fereastra de proiectare (manual) Create query in Design view.

De asemenea o interogare poate fi creată şi apelând la limbajul SQL.


Pentru a crea o cerere de interogare în modul Design view:

În fereastra Database se realizeaza click pe Queries si New;


În caseta de dialog New Query se executa clic pe Design view si apoi Ok.
În caseta de dialog Show Table se executa clic pe tab-ul care furnizeaza lista
obiectelor bazei de date (tabele, cereri).
Dublu clic pe numele fiecarui obiect pe care vrem sa-l folosim si apoi clic pe
Close.Fereastra de lucru este structurata în doua parti:
cea de sus care afiseaza structura tabelelor/cererilor selectate la punctul 4 si
eventualele legaturi dintre ele;
cea de jos numita grila de proiectare (design grid), în care se va construi
cererea din punct de vedere structural si functional; aceasta mai este
cunoscuta si sub numele de grila QBE (Query By Exemples).
Daca avem mai multe tabele si/sau cereri de interogare, trebuie sa ne asiguram
ca între ele exista legaturile necesare pentru a raspunde cerintelor impuse
de noua cerere de interogare.
Daca nu exista legaturile necesare între tabele, se stabilesc prin glisarea
mouse-ului de pe câmpul de legatura din tabela principala spre câmpul de
legatura din tabela secundara; câmpurile numerice de legatura Field Size
trebuie sa fie: byte, integer sau long integer.
În functie de sursa acestora, câmpurile din structura unei cereri sunt de doua
feluri: preluate din tabele/cereri sau calculate. Trecerea câmpurilor preluate
din tabele/cereri în grila de proiectare se face prin deplasarea mouse-ului
din lista de câmpuri în celulele din linia Field. Aceasta trecere poate fi
partiala sau totala, în functie de rezultatul final urmarit. Trecerea tuturor
câmpurilor dintr-o tabela/cerere în grila de proiectare se poate face în doua
moduri:
dublu clic în bara de titlu a listei de câmpuri, clic în lista de câmpuri (oriunde) si
apoi deplasarea în grila de proiectare;
prin deplasarea caracterului * (care se gaseste în capatul listei) în grila de
proiectare.
Ordonarea datelor într-o cerere se poate face crescator sau descrescator, dupa
unul sau mai multe câmpuri. Pentru aceasta se realizeaza clic în celula de la
intersectia coloanei câmpului cu caseta Sort si apoi se alege între Ascending
sau Descending. În cazul în care se specifica mai multe câmpuri de ordonare
(chei de sortare), operatia se executa începând cu primul câmp din stânga si
continuând cu celelalte spre dreapta pâna la ultimul. Ordinea câmpurilor de
sortare influenteaza rezultatul acestei operatii.
Criteriile de selectie se introduc în celula aflata la intersectia coloanei câmpului
cu linia Criteria din grila de interogare. Acestea pot fi simple sau compuse
(cu ajutorul operatorilor AND/OR) si pot utiliza o serie de cuvinte rezervate
si expresii definite de utilizatori.
Crearea unor câmpuri calculate:
se selecteaza coloana si se introduce comanda View > Totals care va introduce
în grila de proiectare linia Totals, daca nu exista;
se selecteaza Expresion;
în prima linie Field se introduce formula de calcul care are forma generala:
Nume-rezultat: [Câmp1] Operator-aritmetic [Câmp2] .... (de exemplu: TVA:
[Pret-unitar] * 0.19).

Pentru formularea unor cereri de interogare bazate pe mai multe tabele, este
necesar ca acestea sa fie legate prin intermediul unor câmpuri. Aceste relatii
între tabele se pot stabili fie în momentul definirii structurii bazei de date
(structura tabelelor), prin comanda [Tools, Relationships] sau în timpul
formularii unei cereri de interogare prin aducerea tabelelor necesare în zona de
lucru si stabilirea legaturilor necesare. Prima modalitate genereaza relatii
permanente între tabele, care permit totodata definirea restrictiilor de
integritate referentiala, cea de-a doua genereaza relatii temporare, valabile
numai pentru cererea în cauza si care nu permit verificarea restrictiilor de
integritate referentiala.
În ambele cazuri relatiile între tabele se stabilesc prin punerea în
corespondenta a unui câmp dintr-o tabela sursa (principala) cu un alt câmp din
tabela destinatie (secundara). Cele doua câmpuri trebuie sa fie de acelasi tip si
dimensiune si pot fi chei primare sau externe.
În ambele cazuri relatiile între tabele se stabilesc prin punerea în
corespondenta a unui câmp dintr-o tabela sursa (principala) cu un alt câmp din
tabela destinatie (secundara). Cele doua câmpuri trebuie sa fie de acelasi tip si
dimensiune si pot fi chei primare sau externe.
O cerere de interogare a bazei de date pe mai multe tabele este expresia
operatiei de compunere (join) din algebra relationala. Din punct de vedere al
SGBD ACCESS, aceasta operatie este de trei feluri: echicompunere, compunere
externa si compunere reflexiva.
Prin operatia de echicompunere se extrag toate înregistrarile din tabela sursa
care au înregistrari echivalente în tabela destinatie (pentru care câmpurile de
legatura sunt identice). De exemplu daca vrem sa aflam intrarile de materiale
pentru fiecare material (cantitativ), este clar ca în cadrul tabelei Categorii se
pot gasi mai multe materiale decât în tabela Camere (anumite materiale pot
exista în cadrul bazei de date dar nu au fost achizitionate pâna în prezent). Prin
urmare va fi utilizata operatia de echicompunere.
Prin operatia de compunere externa se extrag toate înregistrarile din tabela
sursa si înregistrarile din tabela destinatie, care au valori egale în câmpurile de
legatura. Pentru înregistrarile din tabela destinatie, care nu au corespondente
în tabela sursa, se vor afisa câmpuri vide.
Cele doua cereri se rezolva prin compunere externa. Relatia dintre doua
tabele, din punct de vedere al operatiei de compunere externa, este privita în
ambele sensuri:

de la tabela sursa spre tabela destinatie (de la stânga la dreapta), ceea ce a


condus la notiunea de compunere externa stânga (left outer join);
de la tabela destinatie spre tabela sursa (de la dreapta la stânga), ceea ce a
condus la notiunea de compunere externa dreapta (right outer join).

Prin aceste operatii s-a creat posibilitatea formularii unor cereri de interogare
inverse, asa cum sunt cele doua exemplificate mai înainte. Pentru alegerea
tipului de compunere în cadrul unei cereri de interogare:

se realizeaza dublu clic pe linia de legatura între cele doua tabele, care va afisa
fereastra Join Properties;
se alege una din optiunile: 1 - echicompunere, 2 - compunere externa stânga
sau 3 - compunere externa dreapta si apoi Ok.

Interogările de tip "analiză încrucişată" permit obtinerea unui set de


rezultate complexe sub forma matriceala, în care numele liniilor (Li) si
coloanelor (Cj) reprezinta criterii mixte de grupare, iar valorile din celulele
tabelului (Vij) se obtin prin aplicarea unei functii predefinite (Sum, Min, Max,
etc.) asupra unui câmp dintr-o tabela.

Crearea unei cereri de interogare de acest tip, se face la fel ca o cerere care
comporta calcule, cu deosebirea ca trebuie specificate câmpurile care furnizeaza
liniile, coloanele si valorile din tabel.
În acest sens se procedeaza dupa cum urmeaza:

se lanseaza crearea unei noi cereri de interogare si se aduc în zona de lucru


tabelele necesare;
se aduc din tabele în grila de proiectare câmpurile dorite si se stabilesc criteriile
de selectie;
se alege Query > Crosstab query, care va aduce în grila de interogare liniile
Total si Crosstab si va afisa Group by în celulele din linia Total;
se executa clic în celula Crosstab a câmpului care va da numele liniilor tabelului
si se va selectiona Row Heading din lista derulanta;
clic în celula Crosstab a câmpului care va da numele coloanelor tabelului si se va
selectiona Column Heading din lista derulanta;
clic în celula Crosstab a câmpului care va furniza valorile din tabel si se va
selectiona Value din lista derulanta;
clic în celula Total a câmpului care va furniza valorile din tabel si se va
selectiona operatia dorita (Sum, Count, Max, Min, etc.);
comanda View, Datasheet View pentru vizualizarea rezultatului.

Se pot specifica mai multe câmpuri pentru a furniza numele de linii ale
tabelului si numai unul pentru a da numele coloanelor. Obligatoriu, câmpurile
care furnizeaza numele liniilor si coloanelor trebuie sa aiba în linia Total
criteriile Group by. La o cerere de interogare de acest tip pot participa una sau
mai multe tabele.
Tabelele care rezulta în urma executiei acestor cereri, în mod standard, vor
avea numele coloanelor plasate de la stânga la dreapta în ordine alfabetica.
Exista posibilitatea schimbarii acestei ordini în functie de necesitatile si
preferintele utilizatorului.
MS Access permite şi crearea unor interogări de tip acţiune:
Cererile de interogare de tip actiune se folosesc pentru:

crearea de noi tabele pe baza celor existente;


stergerea de înregistrari din una sau mai multe tabele;
modificarea datelor dintr-un grup de înregistrari;
adaugarea unui grup de înregistrari la o tabela.

Crearea unei cereri de interogare de tip actiune se face în trei etape:

crearea unei cereri de interogare de tip selectie si verificarea rezultatului


acesteia;
transpunerea cererii de interogare de tip selectie într-o cerere de tip actiune;
verificarea rezultatelor în tabele.

Spre exemplu pentru a transforma o cerere de interogare de tip selectie în


una de tip actiune cu functia de creare a unei noi tabele se parcurg etapele:

se trece în modul de lucru Design view;


se alege Query > Make table - query, care va afisa o caseta de dialog;
în aceasta caseta de dialog se introduce numele tabelei, se stabileste daca
aceasta va face parte dintr-o baza de date ACCESS sau de alt tip (cum ar fi
Paradox) si daca va înlocui o tabela deja existenta (prin alegerea acesteia
dintr-o lista);
se activeaza butoanele Ok din caseta de dialog si apoi comanda Query > Run,
ceea ce va afisa într-o caseta de dialog numarul de înregistrari din tabela
creata;
pentru completarea cererii se activeaza butonul Ok din ultima caseta de dialog,
ceea ce va avea ca efect înregistrarea în baza de date a noii tabele.

3.5 Rapoarte

Situatiile finale (rapoartele) constituie, asadar, finalitati ale ciclului de creare-


actualizare-exploatare a unei baze de date, continutul lor fiind vizualizat pe
ecran, ori listat la imprimanta.
Cu Access 2000 se pot realiza diferite obiecte de tip raport, utilizând optiunea
Reports din meniul Insert.

Exista urmatoarele modalitati de lucru:

crearea rapoartelor asistata de un wizard,


realizarea rapoartelor de catre utilizator, dupa alegerea optiunii Design View,
generarea automata, fara vreo interventie a utilizatorului, a unor rapoarte în
care datele sunt prezentate fie pe o singura coloana pentru fiecare
înregistrare (optiunea Autoreport: Columnar), fie sub forma de tabel
obisnuit (optiunea Autoreport: Tabular),
crearea de rapoarte sub forma de grafic (cu optiunea Chart Wizard),
realizarea unor rapoarte de dimensiuni corespunzatoare unor etichete utilizate,
eventual, pentru corespondenta (Label Wizard).

Situatiile finale pot cuprinde date provenind dintr-o tabela, sau dintr-o
interogare (atunci când sunt necesare date din mai multe tabele), caz în care se
raspunde mesajului "Choose the table or query where the object's data comes
from:" prin selectarea din lista a tabelei sau interogarii care va sta la baza
realizarii raportului. Exista si posibilitatea realizarii de rapoarte care nu au o
anumita sursa de date, dar care vor îngloba informatii utile subrapoartelor
definite pe tabele ori interogari între care nu au fost stabilite relatii.

3.6 Comenzi macro

Un element de maxima importanta în dezvoltarea unei aplicatii Access îl


reprezinta automatizarea operatiilor efectuate si elaborarea unei interfete care
sa faciliteze exploatarea bazei de date si sa eficientizeze actiunile utilizatorului.
Integrarea formularelor, interogarilor si rapoartelor într-un flux continuu,
condus de evenimentele declansate de utilizator, precum si executia
conditionata a operatiilor trebuie sa permita chiar si neinitiatilor în Access o
deprindere rapida a cerintelor aplicatiei.
Comenzile macro din Access 2000 reprezinta o modalitate simpla si eficienta
pentru automatizarea anumitor operatii, oferind posibilitatea dezvoltarii unor
aplicatii de o complexitate sporita fara a solicita cunostinte de programare în
Visual Basic.
Trebuie specificat ca macrocomenzile Access sunt diferite de macro-urile
înregistrate din Word sau Excel care se bazeaza pe generarea automata de catre
program a codului VBA pentru o serie de comenzi ale utilizatorului.
Practic, o comanda macro reprezinta o actiune sau o secventa de actiuni
selectate dintr-o lista prestabilita, ce realizeaza operatiuni diverse precum
deschiderea sau închiderea formularelor, tiparirea rapoartelor, lansarea în
executie a altor programe, salvarea înregistrarilor sau executarea unei fraze
SQL.
Desi atasarea rapida a macrocomenzilor la evenimentele controalelor de pe
formulare, cum ar fi butoanele de comanda, poate parea la o prima vedere
suficienta realizarii unor programe complexe, trebuie precizat ca exista anumite
limite si deficiente ce fac utilizarea macro-urilor inferioara programarii în VBA.
Un prim argument ce poate fi mentionat în acest sens este lipsa de libertate a
programatorului în a-si crea propriile functii si proceduri si de a utiliza o serie
de functii disponibile în Access. În plus, codul VBA ce raspunde evenimentelor
este salvat, importat si exportat împreuna cu obiectele (formulare, rapoarte
etc.) conducând la o mai usoara întretinere a bazei de date. Si din punct de
vedere al securitatii exista unele dezavantaje: modulele pot fi protejate cu
parola, pe când comenzile macro nu, iar în cazul conversiei bazei de date în
format MDE macro-urile ramân vulnerabile, putând fi modificate
Crearea unei comenzi macro:
Pentru elaborarea unei noi comenzi macro este necesara parcurgerea
urmatoarelor etape:

În sectiunea Objects din fereastra bazei de date se selecteaza eticheta Macros,


Se efectueaza click pe butonul New,

În coloana Action se selecteaza din lista actiunea dorita.


În coloana Comment se tasteaza în dreptul fiecarei actiuni eventualele
explicatii. Aceste comentarii sunt optionale.
În grila Action Argument din partea inferioara a ferestrei se completeaza
argumentele actiunii selectate. Continutul grilei de argumente se modifica în
functie de elementul selectat în lista Action, fiecare actiune având propriile
argumente.

Lansarea în executie a comenzilor macro exista mai multe posibilitati:

lansarea directa în executie se poate realiza efectuând dublu click pe


pictograma macrocomenzii dorite în fereastra Database sau selectând din
meniul Tools - Macro - Run Macro.... În cazul în care se lanseaza în executie
un grup macro fara sa se precizeze comanda dorita din cadrul acestuia, va fi
executata doar prima comanda a grupului.
executarea prin intermediul unui alt macro se efecteaza selectând în lista de
actiuni RunMacro. Argumentele acestei actiuni permit executarea repetitiva
a macrocomenzii de un anumit numar de ori.
lansarea în executie din Visual Basic putem declansa o comanda macro din
interiorul unei functii sau proceduri VBA, folosind metoda RunMacro a
obiectului DoCmd .
lansarea în executie ca raspuns la un eveniment se poate realiza atasând o
comanda macro unui obiect, ca raspuns la un eveniment survenit în
desfasurarea programului . Prin intermediul modelului orientat pe obiecte si
dirijat de evnimente putem declansa o comanda macro ca raspuns la
deschiderea sau închiderea unui formular ori raport (evenimentul OnLoad),
în urma selectarii unui element dintr-o lista derulanta (evenimentul
AfterUpdate) sau a deplasarii mouse-ului într-o anumita zona a ecranului
(OnMouseMove).

3.6 Alte facilităţi în MS Access 2000

Utilizarea bazelor de date create în versiuni diferite ale Microsoft Access:


Exista situatii care impun utilizarea unui fisier creat în Access 2000 în sisteme
unde sunt instalate versiuni mai vechi ale Microsoft Office. De asemenea, dupa
instalarea Access 2000, utilizatorii vor dori sa foloseasca în continuare
aplicatiile anterior create. În acest sens exista posibilitatea conversiei bazei de
date în formatul corespunzator. Putem efectua aceasta operatiune prin
intermediul comenzii Tools, Database Utilities, Convert Database....
Compactarea si "repararea" bazelor de date:
Stergerea înregistrarilor din tabele ori a unor interogari, rapoarte sau alte
obiecte ale bazei de date conduce la fragmentarea acesteia. Drept urmare,
spatiul ocupat pe disc de respectivul fisier este mai mai mare decât cel necesar
în realitate. Pe de alta parte, evenimente precum penele de curent sau
închiderea necorespunzatoare a unei sesiuni de lucru în Access pot determina
deteriorarea structurii bazei de date.
Pentru a elimina aceste inconveniente Microsoft Access 2000 pune la
dispozitia utilizatorilor facilitatea de compactare si reparare a bazelor de date,
Compact and Repair Database. (În versiunea Access'97 cele doua optiuni erau
prezentate separat).
Pentru a realiza operatiunea de compactare asupra unei baze de date deja
deschise se selecteaza din cadrul meniului Tools optiunea Database Utilities,
Compact and Repair Database. În acest caz baza de date compactata va lua
locul celei vechi. În cazul unei baze de date distribuite este necesara, în
prealabil, închiderea acesteia de catre toti utilizatorii.
Conversia bazelor de date în format MDE presupune compilarea tuturor
modulelor, renuntarea la posibilitatea de editare a codului VBA, precum si
compactarea bazei de date destinatie. Codul VBA va continua sa functioneze,
dar nu va putea fi vizualizat sau editat. Dimensiunea bazei de date va fi
considerabil micsorata, ca urmare a îndepartarii codului, iar performantele
obtinute vor fi îmbunatatite prin gestionarea optima a memoriei.
Database Splitter: acest program utilitar este disponibil în meniul Tools >
Database Utilities... doar în cazul în care ati selectat Additional Wizards
Component la instalarea Access 2000. Prin intermediul Database Splitter se
ofera posibilitatea separarii tabelelor de celelalte obiecte ale bazei de date
(formulare, rapoarte etc.) generându-se practic doua fisiere. Este o facilitate
extrem de utila, în special în cazul sistemelor multiuser, permitând fiecarui
utilizator gestionarea elementelor de interfata într-un fisier separat.
Fereastra Start-Up:
reprezintă formularul care care este deschis automat la deschiderea bazei de
date. De exemplu, un formular care sa ofere butoane pentru accesul la toate
functiile aplicatiei (formulare, rapoarte, interogari, tabele), fara ca utilizatorul
sa fie nevoit sa cunoasca numele formularelor, rapoartelor etc. Stabilirea
acestui formular si a altor parametrii ai bazei de date se realizeaza din meniul
Tools-StartUp.
Privitor la securitatea bazei de date, Access 2000 ofera urmatoarele
posibilitati:

stabilirea unei parole de acces la baza de date;


crearea de utilizatori pentru accesul la baza de date si stabilirea de drepturi de
acces pentru fiecare;
criptarea bazei de date
stabilirea unei parole de acces la baza de date se realizeaza din meniul Tools -
Security - Set Database Password. Pentru a putea stabili sau elimina parola
bazei de date, aceasta trebuie deschisa pentru utilizare exclusiva.

Capitolul 4: SQL

4.1 Limbajul SQL

Unul dintre cele mai puternice limbaje structurate pentru interogarea bazelor
de date relationale îl constituie în prezent SQL (Structured Query Language).
Acesta, pronuntat cel mai adesea de catre utilizatorii lui în formula abreviata
"sequel", a devenit chiar un standard pentru o gama din ce în ce mai larga de
sisteme de gestiune a bazelor de date. Limbajul SQL permite o comunicare
complexa si rapida a utilizatorului cu bazele de date, în functie de cerintele si
restrictiile acestuia. Pe lânga manipularea si regasirea datelor, se efectueaza si
operatii complexe privind actualizarea si administrarea bazei de date.
Exista un anumit grad de standardizare a limbajului SQL, mai multe sisteme
de gestiune a bazelor de date recunoscând principalele instructiuni ale acestuia
(de exemplu: Oracle, Access, Sybase etc.). Pe plan mondial, standardul în
domeniu este considerat ANSI (American National Standards Institute) SQL
care are în vedere atât aspectele de definire, interogare, manipulare a datelor,
procesare a tranzactiilor, cât si caracteristicile complexe privind integritatea
informatiilor, cursoarele derulante sau jonctiunile externe. Multi producatori de
sisteme de gestiune a bazelor de date furnizeaza propriile extensii ale
limbajului SQL, asigurându-si astfel exclusivitatea.
Sistemul de gestiune a bazelor de date ACCESS 2000 accepta utilizarea
limbajului de interogare SQL. Existenta tehnicii grafice QBE (Query by Example-
interogare prin exemplu) permite proiectarea facila a unor interogari complexe.
Informatia definita pe grila QBE va fi automat transformata într-o instructiune
SQL. Dialectul ACCESS contine unele particularitati în raport de standardul ANSI
SQL, fiind conceput mai mult pentru crearea interogarilor de selectie.
În acest capitol tratam în detaliu doar primele trei categorii de instructiuni, si
anume cele care privesc definirea, manipularea si selectia informatiilor din
bazele de date.
Pentru a putea scrie corect o instructiune SQL în ACCESS 2000 este necesara
respectarea stricta a unor reguli de sintaxa. Amintim în continuare câteva dintre
acestea:

orice comandă se va încheia cu ; ;


într-o interogare unde se folosesc câmpuri din mai multe tabele, pentru a
separa numele tabelului de numele câmpului, se va utiliza . după modelul:
tabel.câmp ;
parantezele drepte încadreaza numele de câmpuri doar când acestea contin
spatii sau simboluri neacceptate de SQL ;
pentru a delimita parametrii dintr-o lista, se utilizeaza virgulele ;
valorile de tip sir se marcheaza prin apostrof sau ghilimele ;
inegalitatile din cadrul clauzelor se vor specifica prin “<>”;
simbolurile ? si * sunt folosite pentru a desemna unul sau mai multe caractere
de înlocuire;
pentru a evidentia valorile de tip data/timp se apeleaza la caracterul #;

4.2 Etapele crearii unei interogari

În crearea şi respectiv executarea unei interogări ACCESS 2000 construită


prin utilizarea de instrucţiuni SQL se parcurg, de fiecare dată, mai multe etape
de bază:

din fereastra Database se va selecta butonul Queries (Interogări) ;


pentru a crea interogarea SQL dorită va fi necesară, fie activarea butonului
New, fie alegerea opţiunii Create query in Design view;
în cazul în care utilizatorul a folosit butonul New, acum va trebui să aleagă din
fereastra New Query, opţiunea Design View
foarte importantă este alegerea în continuare (cu ajutorul butonului Add) a
tabelelor (Tables), interogării (Queries) sau a ambelor categorii de obiecte
(Both) care vor reprezenta suportul interogării SQL. De menţionat faptul că
se pot utiliza mai multe tabele (interogări) din fereastra Show Table;
pentru a scrie interogarea SQL Access este necesar ca din meniul View
utilizatorul să opteze pentru modul de vizualizare SQL View. În fereastra
care apare se vor tasta instrucţiunile SQL specifice, respectând sintaxa
corespunzătoare;
interogarea SQL Access creată se poate lansa în execuţie în două moduri: prin
utilizarea butonului din bara Query Design sau prin opţiunea Run, din
meniul Query.

Pe ecranul calculatorului va fi afişat în final rezultatul interogării SQL;


utilizatorul îl va analiza şi interpreta în funcţie de propriile cerinţe şi restricţii
informaţionale.
În cazul în care cererea de interogare SQL ACCESS are erori de sintaxă sau
determină obţinerea de rezultate eronate, va trebui să se revină în modul de
afişare SQL View pentru a se face corecţiile necesare.

4.3 Comenzi pentru definirea datelor

Principalele comenzi SQL pentru definirea datelor sunt următoarele:

CREATE DATABASE,
DROP DATABASE,
CREATE TABLE,
ALTER TABLE,
DROP TABLE.

Comanda CREATE DATABASE are următoarea sintaxă: CREATE DATABASE


nume_baza_de_date fiind utilizată pentru crearea unei noi baze de date.
Comanda DROP DATABASE nume_baza_de_date este utilizată pentru
stergerea bazei de date.
Pentru crearea unei tabele se utilizează comanda
CREATE TABLE
nume_tabela (câmp1 tip_data [NOT NULL], câmp2 tip_data [NOT
NULL], câmp3 tip_data [NOT NULL]...).
Printre cele mai importante tipuri de date folosite amintim: Character, Memo,
Number, Integer, Decimal, Logical, Date, OLE Object etc.Numele tabelei trebuie
sa fie unic în cadrul bazei de date, neputând fi unul din cuvintele rezervate.
Totodata, acesta poate avea si anumite restrictii privind: numarul de caractere
din care este format, utilizarea anumitor simboluri, folosirea literelor mari sau
mici, natura caracterului de început etc. Aceleasi cerinte apar si pentru numele
câmpurilor; în plus exista posibilitatea duplicarii lor în cadrul bazei de date, dar
se pastreaza unicitatea în tabela. Clauza NOT NULL arata ca în câmpul respectiv
nu se memoreaza valori de tip NULL.
Exemplu: Se creeaza tabela Vânzari cu urmatoarea structura a înregistrarii:
numar (tip numeric), cod marfa (tip numeric), data vânzarii (tip data
calendaristica), localitatea (tip caracter). Exemplu: Se creeaza tabela Vânzari cu
urmatoarea structura a înregistrarii: numar (tip numeric), cod marfa (tip
numeric), data vânzarii (tip data calendaristica), localitatea (tip caracter). În
câmpul data vânzarii nu se vor memora valori de tip NULL.
CREATE TABLE VANZARI(Nr Number, Cod_m Number, Data_v Date NOT
NULL, Localit Char)
Pentru modificarea structurii unui tabel se utilizează comanda ALTER TABLE
cu următoarea sintaxă (simplificată): ALTER TABLE nume_tabela ADD
nume_câmp tip_data. În această variantă se adaugă în structura tabelei
câmpul specificat în comenda.
Exemplu: Se adaugă în tabela Personal_Vânzare un nou câmp numit Telefon:
ALTER TABLE PERSONAL_VANZARE ADD Telefon Integer.
Comanda DROP TABLE nume_tabela este folosita pentru a sterge complet o
tabela dintr-o baza de date (structura şi valorile asociate).

4.4 Instructiunile de selectie a datelor

Instrucţiunile de selecţie reprezintă una dintre categoriile cele mai


importante ale limbajului de interogare SQL ACCESS. Indiferent daca sunt
simple sau complexe, punctul de plecare îl constituie fraza SELECT, prin care se
regasesc si se afiseaza informatiile dorite de utilizator.
Pentru definirea interogarilor de selectie simple se utilizeaza urmatoarea
sintaxa a instructiunii SELECT:
SELECT [domeniu] lista_selectie
FROM nume_tabela1, nume_tabela2,...
[WHERE criteriul_de_selectie]
[ORDER BY câmpuri_criteriu [ASC|DESC]]
[GROUP BY câmp_de_grupare
[HAVING criteriul_de_ grupare]]
.
Domeniu permite stabilirearea modalitaţii de manipulare a înregistrarilor din
baza de date asupra careia se efectueaza selectia si poate fi:

ALL : permite includerea tuturor înregistrarilor ce îndeplinesc conditiile impuse.


Cum frazele SELECT tabela si SELECT ALL tabela au practic acelasi rezultat,
calificativul ALL este destul de rar utilizat;
DISTINCT : are ca efect eliminarea înregistrarilor care contin duplicate în
câmpurile selectate astfel se va afisa doar o aparitie a datei multiple;
DISTINCTROW are în vedere înregistrarile duplicate în ansamblul lor, nu numai
pe cele care au câmpuri duplicate.

Lista_selectie cuprinde toate câmpurile care vor aparea în tabela cu


rezultatele interogarii. Câmpurile adaugate în rândul Field din grila Query a
machetei grafice QBE, care au marcata caseta de validare Show, sunt aceleasi
cu cele mentionate în lista de selectie.În scrierea interogarilor de selectie
simple SQL ACCESS este posibila si folosirea functiilor totalizatoare. Cele mai
importante functii din aceasta categorie sunt:

COUNT : returneaza numarul de înregistrari care respecta conditiile stabilite


prin clauza WHERE,
SUM : reda suma tuturor valorilor dintr-un câmp; opereaza numai cu valori
numerice,
AVG : calculeaza valoarea medie a unui câmp numeric,
MAX : permite determinarea celei mai mari valori dintr-un câmp,
MIN : duce la obtinerea celei mai mici valori a unui câmp ramâne valabila si aici
restrictia privind clauza WHERE.

În cadrul listei de selecţie se pot defini şi alias-uri. Acestea reprezintă un


pseudonim (nume) asociat unui câmp astfel : câmp AS alias. functiei
agregat
Clauza FROM Specifica numele tabelei sau tabelelor care vor forma suportul
interogarii. Daca în lista_selectie se includ câmpuri din mai multe tabele, în fata
numelui acestora trebuie precizata tabela din care fac parte. Asa cum aratam la
regulile de sintaxa, pentru separarea numelor de tabele, se utilizeaza semnul ,
(virgula). Trebuie sa precizam faptul ca în cadrul acestei clauze se pot mentiona
pe lânga tabele, ca surse de informatii pentru interogarile SQL, si interogari
care au fost deja create.
Clauza WHERE Face interogarile mai selective, specificând faptul ca vor fi
afisate numai înregistrarile care îndeplinesc criteriul descris. Parametrul
criteriul de selectie este o expresie care contine un operator de tip text (sir) sau
numeric, în functie de tipul câmpului. Clauza WHERE este optionala si nu
opereaza cu functii totalizatoare. În cadrul condiţiei din clauza WHERE apar pot
fi utilizaţi operatorii : AND, OR, NOT, IN, BETWEEN, LIKE. Apelând la acestia,
este posibilă construirea unor condiţii mai complexe.
Clauza ORDER BY Utilizata atunci când se doreste ca rezultatele interogarii sa
fie ordonate în mod crescator (ASC) sau descrescator (DESC). Sortarea este
optionala si se poate realiza dupa unul sau mai multe câmpuri_criteriu (definite
drept chei de sortare). Componenta BY a clauzei nu poate sa lipseasca atunci
când se doreste sortarea rezultatelor interogarii SQL ACCESS !
Clauza GROUP BY Precizeaza câmpul sau câmpurile pe baza carora se va
efectua gruparea înregistrarilor. În acelasi timp, prin intermediul acestei clauze,
se pot executa functiile agregate descrise în lista de selectie pentru fiecare
dintre grupari (constituite pe baza câmpurilor de grupare). Echivalentul acestei
clauze în macheta grafica QBE de constructie a interogarii îl reprezinta rândul
Total.
Clauza HAVING Se refera la criteriul care va fi aplicat câmpului-definit ca
argument al functiei agregat. Altfel spus, când se foloseste clauza GROUP BY si
este necesara si o conditie, se va utiliza clauza HAVING. Spre deosebire de
WHERE, care actioneaza înainte de a se efectua gruparea înregistrarilor,
HAVING va opera dupa definirea acesteia. De remarcat faptul ca se admite
utilizarea unei functii agregat care nu apare în lista de selectie, precum si
apelarea la mai multe criterii de grupare.
O facilitate deosebit de importanta a limbajului SQL o reprezinta posibilitatea
de a grupa si folosi date din tabele diferite. Operatiile de asociere induse de
clauza JOIN au ca rezultat producerea tuturor combinatiilor posibile, pentru
continutul informational al fiecarei tabele. Noile înregistrari care rezulta în urma
jonctiunii vor deveni disponibile pentru selectiile ulterioare. La o asociere pot
participa mai mult de doua tabele.
Principala modalitate de realizarea a joncţiunii este sintetizată de următoarea
sintaxă:
SELECT [domeniu] lista_selectie
FROM nume_tabela1 {INNER|LEFT OUTER|RIGHT OUTER} JOIN
nume_tabela2
ON criteriul_de_asociere
[{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabela3
ON criteriul_de_asociere]...
[WHERE criteriul_de_selectie]
[ORDER BY câmpuri_criteriu [ASC|DESC]]

Semnificatia elementelor de sintaxa descrise mai sus este urmatoarea:

INNER, LEFT OUTER, RIGHT, OUTER se refera la tipurile de jonctiuni (INNER


JOIN, interna de tip echivalent, LEFT OUTER JOIN, externa de stânga, RIGHT
OUTER JOIN, externa de dreapta). De remarcat faptul ca SQL ACCESS
accepta scrierea interogarilor externe fara specificarea explicita a lui
OUTER,
JOIN specifica tabela care va fi asociata (nume_tabela2, nume_tabela3...)
tabelei precizata în clauza FROM,
ON criteriul de asociere arata relatia dintre câmpurile pe care se bazeaza
jonctiunea. Unul se afla în tabela asociata, iar celalalt exista într-o alta
tabela din lista cu numele tabelelor. Expresia criteriul_de_asociere contine
un operator de comparatie (=,<,>,<>,<=,>=)si va returna valorile logice
TRUE sau FALSE.

Joncţiunile tip INNER JOIN determina o asociere a înregistrarilor din tabele,


astfel încât sa rezulte un numar total de înregistrari egal cu produsul numarului
de înregistrari din fiecare tabela.
Joncţiunile externe (OUTER) sunt de doua tipuri: de stânga (LEFT OUTER
JOIN) si de dreapta (RIGHT OUTER JOIN), fiind destul de putin utilizate.
Echivalentul QBE al acestor categorii de jonctiuni este alegerea optiunilor 1, 2
sau 3, din caseta Join Properties, care au fost explicate într-un capitol
precedent.

4.5 Instructiunile pentru manipularea datelor

Cele mai importante instructiuni sunt: INSERT, UPDATE si DELETE.


Comanda INSERT se foloseste pentru adaugarea de înregistrari dintr-o tabela
în alta. Prin aceasta interogare de adaugare nu se pot insera date dintr-o tabela
în ea însasi; operatia ar fi totusi posibila printr-o selectare prealabila a datelor
initiale într-un tabel temporar, urmata de modificarea si readucerea lor în
tabelul de la care s-a plecat.
Sintaxa comenzii este următoarea:
INSERT INTO nume_tabela (câmp1, câmp2...)
VALUES (valoare1,valoare2...
În acest caz se adauga o înregistrare într-o tabela, mentionându-se câmpurile
si valorile asociate acestora. Ca particularitate se remarca inserarea unei
singure înregistrari la un moment dat. Prima forma a lui INSERT se utilizeaza
pentru operatii simple care presupun lucrul cu un numar redus de înregistrari.
Dupa lansarea în executie a interogarii apare un mesaj de avertizare privind
adaugarea noii înregistrari în baza de date si caracterul ireversibil al acestei
operatii.
În cadrul acestui tip de inserare a datelor trebuie sa se respecte urmatoarele
reguli:
valorile mentionate în clauza VALUES vor avea aceeasi natura cu câmpurile
specificate în clauza INTO,
marimea valorii corespunzatoare fiecarui câmp va fi mai mica decât
dimensiunea câmpului,
nu va fi obligatorie specificarea denumirii câmpurilor, deoarece SQL ACCESS va
asocia listei de valori câmpurile în ordinea din structura înregistrarii (prima
valoare se va introduce în primul câmp, a doua valoare, în al doilea câmp
s.a.m.d.)
daca un câmp are definitia NOT NULL, va fi obligatorie introducerea unei valori
pentru acesta.

Comanda DELETE are următoarea sintaxă:


DELETE FROM nume_tabela [WHERE criteriul_de_stergere] se
materializează în interogarea actiune de stergere partiala sau totala a
înregistrarilor din tabele. În acelasi timp se va sterge doar continutul tabelei nu
si aceasta (pentru eliminarea tabelei se va apela la instructiunea DROP TABLE).
Comanda UPDATE are următoarea sintaxă:
UPDATE nume_tabela
SET nume_câmp1 = valoare1 [,nume_câmp2 = valoare2]...
[WHERE criteriul_de_actualizare]
Aceasta are atât scopul de a insera noi înregistrari, cât si de a modifica valorile
câmpurilor din înregistrarile existente. Ca si în cazul instructiunii INSERT, se
va urmari daca în câmpul cu valori de actualizat sunt permise numai valori
unice. Atunci când se doreste actualizarea datelor din mai multe câmpuri se
foloseste virgula ca separator între câmpuri si valorile acestora. Se pot
utiliza mai multe conditii WHERE apelând la operatorul logic AND pentru a
limita actualizarea la înregistrari mai bine specificate.

4.6 Cereri de interogare imbricate

Scrierea unei interogari în cadrul alteia duce la aparitia unei subinterogari;


setul de rezultate obtinut de la o interogare va constitui argument pentru o alta.
Utilizatorul poate astfel sa creeze legaturi între mai multe interogari SQL
ACCESS, pe baza unor câmpuri unice, cu rol de cautare în structura tabelelor.
Subinterogarile înlocuiesc interogarile imbricate din versiunile precedente, cu
performante mult îmbunatatite. Pot fi construite si prin varianta de lucru a
machetei grafice QBE Access.
Cea mai simpla subinterogare are sintaxa urmatoare:
SELECT * FROM Tabela1
WHERE Tabela1.nume_ câmp =
(SELECT nume_câmp FROM Tabela2 WHERE
criteriul_de_selectie);
Tabela1 si Tabela2 vor avea un câmp comun (nume_câmp) care va reprezenta
de fapt câmpul de legatura ce sta la baza construirii subinterogarii. Clauza
SELECT din subinterogare va avea acelasi numar de câmpuri si de natura
similara cu cele din clauza WHERE a interogarii externe.

Capitolul 5: Limbajul Visual Basic

5.1 Editarea modulelor VBA

Modulele din Access 2000 sunt obiecte ale bazei de date, care permit scrierea
de rutine în limbajul Visual Basic pentru Aplicaţii (VBA):
Acestea pot fi constituite din: declaratii de variabile, tipuri de date utilizator,
proceduri si/sau functii, declaratii de funcţii API etc.
Pentru a crea un modul nou se parcurg următorii paşi:

selectaţi secţiunea Modules din fereastra bazei de date,


activaţi butonul New.

Pentru a modifica un modul:

selectaţi modulul dorit şi apoi


click butonul Design sau
dublu-click direct pe modulul dorit.

Pentru a şterge un modul se selectează modulul şi apoi se activează tasta


Delete.
Editorul are, de asemenea, facilităţi de colorare a cuvintelor cheie,
declaraţiilor utilizator, frazelor eronate, comentariilor etc.
Cea mai puternică facilitate a editorului VBA este posibilitatea afişării
contextuale în momentul scrierii în VBA a elementelor care caracterizează un
anumit context:

5.2 Instructiuni pentru afisarea si introducerea datelor


Evident, formularele şi rapoartele reprezintă o formă elegantă de introducere
şi respectiv afişare a datelor care se bazează în principal pe structura bazei de
date. În afară de acestea, există în VBA instrucţiuni pentru introducerea unor
date izolate şi afişarea de mesaje. Această necesitate se simte mai ales în faza
de test a unei proceduri sau funcţii, sau pentru afişarea de mesaje către
utilizatorul bazei de date.
InputBox (mesaj, [titlu], [val_implicita], [x] ,[y],
[fisier_help, context]) permite introducerea unei secvenţe de caractere
de la tastatură.
MsgBox( mesaj [,butoane] [,titlu] [,fisier_help , context])
permite afişarea unui mesaj şi opţional poate returna o constantă, în funcţie de
butonul ales de utilizator din fereastra MsgBox.

5.3 Declararea variabilelor în VBA

Variabilele pot fi declarate într-o


procedură sau funcţie cu ajutorul
instrucţiunii Dim:
Dim nume_variabila As tip_de_dată.
VBA acceptă două categorii de tipuri de date:

standard (predefinite);
utilizator.

Tipurile de date standard sunt:

Double: număr memorat pe 64 biţi, virgulă mobilă, dublă precizie. Valori


posibile: de la –1,797E+308 până la +1,797E+308,
Single: număr memorat pe 32 biţi, virgulă mobilă, simplă precizie. Valori
posibile: de la –3,4E+38 până la +3,4E+38,
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: numar întreg pe 16 biţi. Valori posibile: -32768 până la 32767,
Long: numar întreg pe 32 biţi. Valori posibile: -2147483648: până la
2147483647,
Boolean: poate conţine valoarea logică True (adevărat -1) sau False (fals 0),
Date :poate conţine date calendaristice şi timp. Se utilizează între #,
String: sir de caractere. Un şit de caractere trebuie încadrat de " astfel
"exemplu",
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 recomandat totuşi ca să specificaţi tipul variabilei în momentul
declarării pentru a nu fi create confuzii.
Object: tip de date care referă un obiect. Pentru a asocia un obiect propriu-zis
unei asemenea variabile trebuie să se utilizeze şi instrucţiunea Set.

Unei variabile de tip obiect (tipul generic Object sau de tipul celorlalte obiecte
Access 2000) nu se i se poate atribui un obiect în varianta clasică
variabila=expresie sau variabila1=variabila2, ci numai împreună cu
instrucţiunea Set: Set variabilă_obiect = expresie_obiect. În urma
apelului acestei instrucţiuni, variabila_obiect va referi obiectul returnat de
expresia expresie_obiect.

5.4 Operatori
Operatorii acceptaţi de VBA sunt de trei categorii:

matematici: ^, – , *, /, \, Mod(returneaza restul unei impartiri), +,


&(concateneaza doua siruri de caractere);
de comparare: =, <>, <, >, <=, >=, Like(compararea a două şiruri),
Is(compararea a doua obiecte);
logici: Not, And, Or, Xor, Eqv(echivalenta), Imp(implicaţia logică).

5.5 Functii si proceduri definite de utilizator

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


prelucrare. Acestea pot fi apelate ori de câte ori este nevoie, fără a mai fi
necesară rescrierea lor. În felul acesta se reduce considerabil efortul de
programare. Pentru a da un grad de generalitate cât mai mare, funcţiile şi/sau
procedurile conţin în definirea acestora o listă de parametri formali. În
momentul apelării unei funcţii şi/sau proceduri se transmit către acestea, nici
unul, unul sau mai multe valori pentru fiecare parametru al procedurii sau
funcţiei.
Sintaxa pentru definirea unei proceduri este următoarea:
Private|Public] Sub nume_procedura[([ByRef|ByVal] param_1 as
tip_date,....)]
[instrucţiuni]
....
[Exit Sub]
...
[instrucţiuni]
End Sub
Unde:

Private semnifică faptul că procedura poate fi apelată numai din modulul unde a
fost definită,
Public semnifică faptul că procedură poate fi apelată din orice modul;
Exit Sub permite ieşirea forţată dintr-o procedură.

Apelul unei proceduri se poate face astfel:


[Call1 nume_procedura [(valoare_param_1,valoare_param_2,....)]
Sintaxa unei funcţii este următoarea:
[Private|Public] Function nume_funcţie [([ByRef|ByVal] param_1
as tip_date , ....)] [as tip_date]
[instrucţiuni]
[nume_funcţie = expresie]
...
[Exit Function]
[instrucţiuni]
[nume_funcţie = expresie]
End Function
Unde:

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 returnat de funcţie.
Pentru a testa o procedură fără parametri direct dintr-un modul, se
poziţionează cursorul în corpul procedurii, apoi se selectează comanda: Run,
Run Sub/User Form.
Limbajul VBA cuprinde în plus o serie de funcţii predefinite care facilitează
scrierea procedurilor şi funcţiilor utilizator:

Abs( expresie_numerica ): returneaza valoarea absoluta a unei expresii


numerice, sau a unui numar
Asc( sir_caractere ): returneaza codul primului caracter din sirul de caractere
specificat
Chr( COD_CARACTER ): returneaza caracterul cu codel specificat
Date(): Returneaza data calendaristica
Day( data_calendaristica ): returneaza numarul zilei din luna
Month( data_calendaristica ): returneaza numarul lunei din an
Year( data_calendaristica ): returneaza anul
CDate( expresie ): face conversia la tipul Date
CDbl( expresie ): face conversia la tipul Double
Dec( expresie ): face conversia la tipul Decimal
CInt( expresie ): face conversia la tipul Integer
CLng( expresie ): face conversia la tipul Long
CSng( expresie ): face conversia la tipul Single
CStr( expresie ): face conversia la tipul String
Cos( expresie_numerică ): returnează cosinus dintr-o expresie numerică sau
dintr-un număr. Valoarea returnată este de tip Double.
Exp( expresie_numerică ): returnează valoarea constantei e ridicată la o putere
(expresie numerică sau număr).
Log( expresie_numerică ): returnează logaritm natural dintr-un număr sau
dintr-o expresie numerică.
IsDate( expresie ): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze este compatibilă cu o dată calendaristică.
IsEmpty( expresie ): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze nu conţine o valoare. Null este considerat valoare.
IsNumeric( expresie ): returnează valoarea adevărat (TRUE) dacă expresia
dintre paranteze poate fi evaluată ca număr.
IsObject( expresie ): returnează valoarea adevărat (TRUE) dacă identificatorul
dintre paranteze este de tip obiect.
IsError( expresie ): returnează valoarea adevărat (TRUE) dacă expresia dintre
paranteze conţine o eroare.
Len( şir_caractere/variabilă ): returnează numărul de caractere ale şirului de
caractere specificat sau numărul de octeţi necesari pentru a stoca conţinutul
unei variabile.
Space( număr): returnează numărul de spaţii specificate
Str(expresie_numerică): converteşte rezultatul evaluării expresiei numerice
dintre paranteze într-un şir de caractere.
Val(şir_caractere): returnează rezultatul evaluării şirului de caractere
specificat, într-un număr
Mid((şir_caractere, poziţie_start[, lungimea])): extrage un şir de caractere
dintr-un alt şir de caractere.

5.6 Structura alternativa

În Access pentru implementarea structurii alternative se poate utiliza


instrucţiunile IF şi SELECT CASE.
Sintaxa variantei principale a instrucţiunii IF este următoarea:
IF condiţie THEN
[secvenţă instrucţiuni A]
[ELSE
[secvenţă instrucţiuni B ]]
END IF

Condiţia poate fi o expresie numerică sau o expresie şir de caractere, care


poate fi evaluată la adevărat (True) sau fals (False). Instrucţiunea IF evaluează
condiţia şi dacă aceasta este adevărată, se execută secvenţa de instrucţiuni A,
altfel se execută secvenţa de instrucţiuni B.
Instrucţiunea SELECT CASE este o structură alternativă de tip selector.
Principiul de funcţionare este următorul: se testează pe rând valoarea unei
expresii selector, executându-se secvenţa de instrucţiuni corespunzătoare
valorii expresiei. Sintaxa instrucţiunii este:
SELECT CASE expresie_selector
[CASE listă_expresii_case_1
[secvenţă instrucţiuni A]]
[CASE listă_expresii_case _2
[secvenţă instrucţiuni B]]
[CASE listă_expresii_case _3
[secvenţă instrucţiuni C]]
....
[CASE ELSE
[secvenţă instrucţiuni N]]
END SELECT

5.7 Structura repetitiva

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


instrucţiuni de un anumit număr de ori, în funcţie de o condiţie. Fiecare limbaj
implementează mai multe instrucţiuni pentru realizarea structurii repetitive.
Principalele instrucţiuni rpretitive sunt WHILE...WEND şi FOR...NEXT.
WHILE....WEND este o structură repetitivă condiţionată anterior. Sintaxa este
următoarea:
WHILE condiţie
[secvenţă_instrucţiuni]
WEND
Condiţia poate fi o expresie numerică sau o expresie şir de caractere, care poate
fi evaluată la adevărat (True) sau fals (False). Întâi se evaluează condiţie,
dacă este adevărată (returnează valoarea logică TRUE), se execută secvenţa
de instrucţiuni, dacă nu este adevărată (returnează valoarea logică FALSE),
se trece la următoarea instrucţiune de după WEND. După ce s-a executat o
dată secvenţa de instrucţiuni se trece din nou la evaluarea condiţiei ş.a.m.d.
Sintaxa instrucţiunii FOR...NEXT este :
FOR vb_contor=val_initiala TO val_finala [STEP val_pas]
[secventa instructiuni]
[EXIT FOR]
[secventa instructiuni]
NEXT [ vb_contor ]
unde :

val_initiala,val_finala - reprezinta valoarea initiala, respectiv valoarea finala


pentru vb_contor;
val_pas - reprezinta valoarea pasului de incrementare/decrementare pentru
variabila contor, implicit are valoarea +1;
val_initiala,val_finala,val_pas - pot fi si rezultatul evaluarii unor expresii.

Cu aceasta structura se repeta secventa de instructiuni de un numar de ori,


plecându-se de la valoarea initiala a variabilei contor, pâna la valoarea finala a
acesteia, incrementându-se automat variabila contor cu +1 (deci aceasta nu
trebuie incrementata explicit de programator). Daca este prezenta instructiunea
STEP, se incrementeaza variabila contor cu pasul de
incrementare/decrementare.

5.8 Obiecte Access 2000

O baza de date Access 2000 este formata dintr-o multime de obiecte, care pot
fi accesate din VBA. Fiecare obiect are o serie de proprietăţi şi metode ataşate.
Invocarea unei metode sau proprietati a unui obiect se face prin prefixarea
acesteia cu numele obiectului astfel:

ume_obiect.nume_metoda;
nume_obiect.nume_proprietate.

Specificarea unui obiect apartinând unei colectii se poate face conform uneia
din urmatoarele variante:

nume_obiect_colectie![nume_obiect] – este nevoie de paranteze drepte numai


daca numele obiectului contine spatii,
nume_obiect_colectie(“nume_obiect”),
nume_obiect_colectie(index_obiect) – numar care indica pozitia în colectie a
unui obiect. Aceste numere de ordine încep de la zero.

Printre numeroasele obiectele care pot fi utilizate de programatori sunt şi


obiectele Applicaton şi Form.
Obiectul Application refeă aplicaţia Microsoft Access 2000.
Principalele metode ale obiectului Application sunt:

CurrentDb returneaza un obiect baza de date (DataBase) care refera baza de


date curenta .
CurrentUser returneaza utilizatorul curent, conectat la baza de date curenta
SysCmd se poate utiliza în principal pentru a afisa un text în bara de stare
(Status Bar) sau pentru gestionarea unui Progress Bar
SetOption stabileste valori pentru parametrii care se gasesc în meniul Tools,
optiunea Options: obiect_Application.SetOption nume_optiune, setari
GetOption returneaza valorile unor parametri care se gasesc în meniul
Tools,optiunea Options: obiect_Application.GetOption(nume_optiune).

Principalele proprietati ale obiectului Application sunt:

DoCmd apeleaza obiectul DoCmd, descris în paragraful precedent;


Forms permite accesul la colectia de formulare deschise dintr-o baza de date;
Reports permite accesul la colectia de rapoarte deschise dintr-o baza de date;
Screen permite accesul la obiectul Screen (va fi descris în paragrafele
urmatoare).

Obiectul Form refera un obiect de tip formular. Toate formularele deschise din
baza de date se regasesc în colectia Forms, fiind identificate printr-un numar,
alocat în ordinea deschiderii acestora. Primul formular deschis are numarul de
ordine zero. Pentru a afla numarul de formulare deschise la un moment dat,
trebuie citita proprietatea Count a colectiei Forms.
Metodele ale obiectului Form sunt:

Repaint redeseneaza pe ecran formularul pentru care a fost apelata aceasta


metoda;
Requery reactualizeaza înregistrarile din formular (daca formularul are ca sursa
o interogare se reface aceasta);
SetFocus se cedeaza controlul formularului specificat împreuna cu metoda;
Undo - toate modificarile facute datelor afisate în formular se pierd.

Dintre proprietatile acestui obiect amintim:

OpenArgs - sir de caractere care poate fi transmis ca parametru la deschiderea


unui formular ;
RecordSource - numele unei tabele, interogari sau o fraza SQL ce are ca rezultat
un set de înregistrari de care este atasat formularul;
RecordSelectors seteaza aparitia marcatorului de înregistrare pe formular
(TRUE) sau dezactivarea acestuia (FALSE);
DataEntry - formularul este deschis numai pentru introducerea de înregistrari
noi;
AutoCenter - formularul este afisat pe centrul ecranului;
AutoResize - formularul se redimensioneaza pe ecran automat, astfel încât sa se
vada tot continutul sau;
Caption - sir de caractere afisat în bara de titlu a ferestrei formularului;
ControlBox seteaza activarea (TRUE) sau dezactivarea (FALSE) butoanelor de
control ale ferestrei formularului;
NavigationButtons seteaza activarea (TRUE) sau dezactivarea (FALSE)
controlului pentru deplasarea între înregistrarile unui formular;
Toolbar indica bara de instrumente (Toolbar) afisata o data cu formularul;
Controls reprezinta colectia de controale de pe un formular.

5.9 Programarea dirijata de evenimente în Access 2000

Se poate vorbi de programare dirijată de evenimente în Access 2000 în


contextul formularelor, rapoartelor şi controalelor de pe un formular/raport sau
secţiunile acestora. Evenimente în Access 2000 pot fi de exemplu deschiderea
unui formular/raport, închiderea unui formular/raport, scrierea unei
înregistrări într-o tabelă, ştergerea unei înregistrări dintr-o tabelă, dublu clic pe
mouse, activarea unui buton de comandă, o eroare etc. Tuturor evenimentelor
din Access 2000 li se pot ataşa proceduri, macro-uri, expresii. Astfel de
exemplu, la evenimentul de deschidere a unui formular se poate ataşa o
procedură/funcţie care să testeze dacă un anumit utilizator are drepturi de
utilizare a acestuia sau înainte de salvarea unei înregistrări într-o tabelă se
poate ataşa o procedură care să verifice respectarea anumitor corelaţii dintre
date etc.
Pentru a ataşa o procedura la un eveniment trebuie parcurse următoarele
etape:

afişaţi fereastra de proprietăţi (Properties) a obiectului dorit


(Form,Control,Report, etc.): View > Properties:
selectaţi secţiunea Event,
selectaţi evenimentul la care doriţi să ataşaţi o procedură,
click pe butonul pentru editarea procedurii respective.

Pentru un obiect fomular (Form) principalele evenimente sunt:

OnClose : se produce la închiderea şi ştergerea de pe ecran a formularului,


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

Pentru controale dintre evenimentele caracteristice acestora se pot enumera:

OnClick:se declanşează în momentul în care se activează butonul mouse-ului,


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