+ All Categories
Home > Documents > Doros Ioan - Sisteme de Gestiune a Bazelor de Date

Doros Ioan - Sisteme de Gestiune a Bazelor de Date

Date post: 04-Jul-2015
Category:
Upload: ivan-muzica
View: 1,856 times
Download: 6 times
Share this document with a friend
149
Ioan Doroș Baze de date Editura Cibernetica MC București 2010
Transcript
Page 1: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

Ioan Doroș

Baze de date

Editura Cibernetica MC București 2010

Page 2: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

2

Descrierea CIP a Bibliotecii Naţionale a României

DOROS, IOAN Baze de date / Ioan Doros. - Bucureşti : Cibernetica, 2010

ISBN 978-973-88451-6-9

004

Editură acreditată CNCSIS cu codul 73

Tehnoredactare și corectură: Arabela Andor

Coperta: Adelina Muntean

Page 3: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

3

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

1.1. Termeni specifici în lucrul cu bazele de date ........................................................... 6

1.2. Sisteme de gestiune a bazelor de date ...................................................................... 9

1.2.1. Noţiuni generale privind sistemele de gestiune a bazelor de date ....................... 9

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

1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru o bază de date

relaţională ................................................................................................................ 11

1.2.4. Sistemul de gestiune a bazelor de date ACCESS .............................................. 13

1.3. Scopul unei baze de date ........................................................................................ 14

1.4. Componentele aplicaţiei ACCESS .......................................................................... 15

1.5. Proiectarea bazelor de date..................................................................................... 16

1.5.1. Principii ale proiectării bazelor de date ............................................................ 16

1.5.2. Normalizarea unei baze de date relaţionale ...................................................... 18

1.5.3. Integritatea bazelor de date .............................................................................. 22

1.6. Operarea în mediul ACCESS .................................................................................. 24

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

1.6.2. Moduri de vizualizare ..................................................................................... 26

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

1.6.4. Folosirea funcţiei ajutor .................................................................................. 29

1.6.5. Închiderea aplicaţiei ........................................................................................ 31

CAPITOLUL II. CREAREA ȘI UTILIZAREA TABELELOR ............................................ 32

2.1. Crearea unei tabele ................................................................................................ 32

2.1.1. Proprietăţile câmpurilor................................................................................... 33

2.1.2. Definirea unei chei primare ............................................................................. 37

2.1.3. Stabilirea unui index ....................................................................................... 37

2.1.4. Modificarea proprietăţilor unui câmp ............................................................... 38

2.2. Editarea datelor într-o tabelă .................................................................................. 39

2.2.1. Introducerea de date în tabelă .......................................................................... 39

2.2.2. Vizualizarea informaţiilor dintr-o tabelă .......................................................... 40

2.2.3. Modificarea datelor într-o tabelă ..................................................................... 40

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

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

2.3. Crearea relaţiilor între tabele ................................................................................. 43

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

3.1. Conectarea la o bază de date existentă .................................................................... 45

3.2. Căutarea datelor cu ajutorul instrumentelor mediului Access .................................. 45

3.3. Crearea unei interogări simple ............................................................................... 46

3.4. Crearea interogărilor peste mai multe tabele ........................................................... 51

3.5. Selecţia şi sortarea datelor ..................................................................................... 56

3.6. Salvarea unei interogări ......................................................................................... 57

3.7. Adăugarea şi eliminarea filtrelor ............................................................................ 57

Page 4: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

4

3.8. Limbaj Structurat de Interogare SQL (Structured Query Language) ......................... 59

3.8.1. Limbajul SQL ................................................................................................. 59

3.8.2. Comenzi destinate tabelelor ............................................................................. 62

3.8.3. Instrucţiunile de selecţie a datelor ................................................................... 63

3.8.4. Instrucţiunile pentru manipularea datelor ......................................................... 74

CAPITOLUL IV. CREAREA ŞI UTILIZAREA FORMULARELOR .................................. 77

4.1. Noţiuni generale ................................................................................................... 77

4.2. Controale ............................................................................................................... 80

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

4.3.1. Proprietăţile esenţiale ......................................................................................... 82

4.3.2. Obiectele simple ............................................................................................. 84

4.3.3. Culorile obiectelor .......................................................................................... 85

4.3.4. Aranjarea obiectelor ........................................................................................ 86

4.3.5. Alte facilităţi .................................................................................................. 87

CAPITOLUL V. CREAREA ŞI UTILIZAREA RAPOARTELOR ...................................... 91

5.1. Crearea unui raport ................................................................................................ 91

5.2. Particularizarea antetului şi subsolului .................................................................. 94

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

CAPITOLUL VI. LIMBAJUL VISUAL BASIC .............................................................. 103

6.1 Editarea modulelor Visual Basic for Application ................................................... 103

6.2 Elemente de sintaxă .............................................................................................. 105

6.3 Casete de dialog predefinite .................................................................................. 106

6.4 Variabilele în VBA ............................................................................................... 109

6.4.1. Declararea variabilelor .................................................................................. 109

6.4.2. Tipurile variabilelor în VBA ......................................................................... 111

6.4.3. Iniţializarea variabilelor ................................................................................ 113

6.5. Tablouri .............................................................................................................. 113

6.6 Funcţii şi proceduri definite de utilizator ............................................................... 114

6.7 Structura alternativă ............................................................................................. 119

6.8 Structura repetitivă ............................................................................................... 120

6.8.1. Structura repetitivă cu numărător ................................................................... 120

6.8.2. Structurile repetitive de tip Do … Loop ......................................................... 122

6.8.3. Structura repetitivă „pentru fiecare‖ .............................................................. 124

6.9 Programarea recursivă .......................................................................................... 125

6.10 Obiecte ACCESS 2000 ........................................................................................ 126

6.11 Programarea dirijată de evenimente în ACCESS 2000 .......................................... 128

6.12 Accesul cu programele la obiectele bazei de date ................................................. 131

CAPITOLUL VII. ÎNDRUMAR PENTRU REALIZAREA PROIECTULUI LA DISCIPLINA

„BAZE DE DATE‖ ........................................................................................................ 140

7.1. Cerinţe minimale ................................................................................................. 140

7.2. Baza de date ........................................................................................................ 141

7.3. Documentaţia ...................................................................................................... 144

Page 5: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

5

BIBLIOGRAFIE ............................................................................................................ 149

Page 6: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

6

Nume

tabelă

Înregistări Câmpuri

CAPITOLUL I. DELIMITĂRI CONCEPTUALE ALE

BAZELOR DE DATE

1.1. Termeni specifici în lucrul cu bazele de date

Gestiunea colecţii1or de date este una din cele mai importante probleme care

se rezolvă astăzi cu ajutorul calculatoarelor existente, de la cele mai simple PC-uri

(Personal Computers), până la calculatoarele foarte puternice. Aceste colecţii de date

pot fi memorate în diferite fişiere, care sunt apoi gestionate cu ajutorul limbajelor de

programare, sau în baze de date, care sunt gestionate de Sistemele de Gestiune a

Bazelor de date (SGBD).

Lucrul cu voume tot mai mari de date i-a făcut pe oameni să sporească din ce

în ce mai mult numărul calculatoarelor şi să le îmbunătăţească caracteristicile p e zi

ce trece, pentru a-şi uşura astfel munca.

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

stocate clase de entităţi diferite.

Elementele generice ale unei baze de date sunt:

► Coloanele, care se numesc câmpuri (în

engleză FIELDS);

► Rândurile, care se numite înregistrări,

articole sau tupluri (în engleză

RECORDS).

Page 7: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

7

Un tabel este de fapt o colecţie a tuturor entităţilor de date dintr -un singur tip

de date (tip de entităţi sau clasă de date).

Înregistrările dintr-un tabel formează cardinalul, în vreme ce câmpurile

definesc structura tabelului, numărul de câmpuri, tipul lor şi dimensiunea lor.

Câmpurile unui tabel pot fi de tipul:

1. Logic, putând să suporte valorile Y, N, T, F;

2. Numeric, putând fi definite cu ajutorul numerelor întregi sau cu ajutorul

zecimalelor;

3. Dată calendaristică, câmpurile putând fi definite cu ajutorul unei date

valabile;

4. Şir de caractere, putând fi de diferite lungimi;

5. Memo, câmpurile putând conţine articole de lungimi variabile.

O bază de date are o structură care poate fi reprezentată sub forma unei

colecţii de descrieri statice ale diferitelor tipurilor de entităţi, dar si a relaţiilor logice

dintre acestea. Aceste relaţii logice reprezintă de fapt, asociaţiile dintre mai multe

entităţi.

Astfel, o entitate poate fi definită ca o reprezentarea unică a unui obiect real.

Aceasta corespunde unei înregistrări şi este reprezentată prin luarea de valori pentru

diferite atribute ale sale.

Pentru a diferenţia două entităţi este necesar ca măcar un atribut să aibă valori

diferite.

Atributul este o proprietate importantă a unui obiect din lumea reală, fiind

necesar pentru a distinge entităţile între ele. Atributul mai poate fi definit ca fiind o

celulă sau o căsuţă dintr-un tabel.

La fel ca şi câmpurile, atributele pot fi de tip logic, numeric, dată

calendaristică, şir de caractere sau memo.

Domeniul de valori al atributului poate fi precizat la creearea bazei de date,

când se vor specifica şi intervalele de valori pentru fiecare câmp.

Pentru identificarea univocă a unei entităţi este necesară crearea unui atribut

sau a unei combinaţii de atribute care poartă denumirea de identificator sau cheie. În

ACCESS identificatorii sunt câmpuri cheie principale, aceştia fiind folosiţi pentru

crearea indexului principal al entităţii.

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

pentru a fi prelucrate de programe informatice.

Bazele de date sunt fişiere stocate pe suporturi magnetice, împreună cu

aplicaţiile care le exploatează (utilizează).

Cele mai multe baze de date sunt relaţionale (în proporţie de 80%-90%).

Page 8: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

8

Bazele de date relaţionale sunt de fapt nişte tabele cu relaţii între ele. Aceste

baze de date relaţionale au redundanţă minimă şi controlată. Primul care a introdus

noţiunea de bază de date relaţională a fost E. F. Codd1, în anul 1970.

Un exemplu de bază de date relaţională ar putea fi prezentat cu ajutorul celor

două tabele, a căror structură este redată mai jos:

Marcă Nume Adresă Salar nominal

Marcă Nume Funcţii Salar nominal Deduceri Impozit

Faptul că următoarele coloane: marcă, nume şi salar nominal , apar de două ori,

înseamnă că aceste coloane sunt redundante.

Pentru a putea stabili relaţii între tabele, câmpul care conţine marca trebuie să

fie inclus în ambele tabele. Nu este nevoie să fie denumit identic în ambele tabele, în

schimb trebuie să aibă acelaşi conţinut. Relaţiile între tabele pot fi stabilite şi pe

combinaţii de câmpuri (unele SGBD-uri permiţând şi descrierea de astfel de

combinaţii prin expresii aritmetice).

Astfel, se pot stabili mai multe tipuri de relaţii între tabele, după cum

urmează:

► Relaţii de unu-la-unu;

► Relaţii de unu-la-mai mulţi;

► Relaţii de mulţi-la-unu;

► Relaţii de mulţi-la-mulţi.

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

ca unul singur, articolele rezultate cuprind reuniunea câmpurilor celor două tabele.

Relaţiile de unu-la-mulţi şi mulţi-la-unu, se referă la acelaşi lucru, dar privit din părţ i

diferite. În Access se utilizează relaţiile de unu-la-mai-mulţi. Relaţiile de tipul mulţi-

la-mulţi, nu pot fi incluse în bazele de date relaţionale.

Exemplificăm, în figura de mai jos, 4 tabele cu relaţii de unu-la- mai mulţi

(scris 1-∞), definite în ACCESS:

1 Edgar Frank Codd (23 august 1923, Insula Portland, Anglia – 18 aprilie 2003, Williams Island,

Florida, SUA) a fost un informatician american de origine engleză care, lucrând pentru IBM, a

inventat modelul relaţional pentru gestiunea bazelor de date, model care constituie baza teoretică a

bazelor de date relaţionale. (conform wikipedia.com)

Page 9: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

9

1.2. Sisteme de gestiune a bazelor de date

1.2.1. Noţiuni generale privind sistemele de gestiune a bazelor de

date

Aplicaţiile care exploatează aceste date sunt cunoscute sub denumirea de

sisteme de gestiune a bazelor de date sau S.G.B.D.. Câteva astfel de sisteme de

gestiune a bazelor de date ar fi:

► ORACLE. Compania americană cu acest nume, a oferit, încă de la

începutul anilor ’80, cele mai robuste, rapide şi eficiente variante de

sisteme de gestiune a bazelor de date, pentru calculatoare de toate

tipurile (mari, mini, micro), de tip client-server, pentru reţelele locale

sau pe Internet. Preţul ridicat, datorat standardelor de calitate ale

produselor şi serviciilor, fac ca în ţara noastră, recurgerea la soluţiile

Oracle să se facă doar pentru proiectele de sisteme informatice mari;

► FoxPro. Cu această denumire Compania Microsoft a promovat un

model de organizare a datelor, numit dBASE, existent din anul 1990.

Acest program este foarte popular în ţara noastră, deoarece crearea şi

evoluţia lui este sincronă fenomenului exploziv din anii 1990, prin care

firmele şi-au dezvoltat proiecte proprii de informatizare.

► SQL Server. Cu acest nume, compania Microsoft promovează sistemele

de gestiunea a bazelor de date, de tip client-server, pentru problemele

care depăşesc capacităţile ACCESS sau FoxPro;

Page 10: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

10

► MySQL. Este un sistem de gestiune a bazelor de date foarte răspândit

datorită faptului că este gratuit (de tip Open Source) ;

► Aplicaţia Microsoft ACCESS, care este un sistem de gestiune a bazelor

de date relativ nou, aceasă aplicaţie făcând parte din suita de programe

de birou Microsoft Office.

Toate fişierele sunt în ultimă instanţă un lung şir de biţi, ceea ce face până la

urmă diferenţa între ele, redarea sunetelor din fişierele tip .wav sau a imaginilor din

fişierele .bmp sau .jpg, sunt programele dedicate acestor meniri.

Astfel, şi un sistem de gestiune a bazelor de date are menirea de a conferi unor

fişiere forma de tabele pentru ca informaţiile conţinute să fie accesibile utilizatori lor,

care să poată efectua cele patru operaţii (adăugare, regăsire, ştergere, modificare).

Prin similitudine se poate spune că rolul unui sistem de gestiune a bazelor de date

pentru o bază de date este asemănător rolului unui Sistem de Operare pentru un

calculator.

Principalul scop al unui sistem de gestiune a bazelor de date este acela de a

pune la dispoziţia utilizatorilor mijloacele necesare pentru crearea bazelor de date,

dar şi pentru crearea unor programe care să folosească aceste date.

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

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

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

interogărilor, a relaţiilor sau a altor obiecte specifice SGBD-urilor. Partea din limbaj

specializată pentru aceste sarcini se constituie într-un Limbaj de Definire a Datelor

(abreviat în mod uzual: LDD), alcătuit din diferite comenzi (dacă un astfel de limbaj

nu există), şi/sau dintr-o interfaţă cu utilizatorul (variantă mult utilizată).

2. Manipularea informaţiilor din baza de date, este principalul scop al unui

SGBD perceput de utilizatorii obişnuiţi. Aceştia îşi doresc să poată introduce, regăsi

şi actualiza (modifica sau şterge), date prin aplicaţiile lor. Programatorii au la

dispoziţie, pentru a realiza acest lucru, un Limbaj de Manipulare a Datelor (abreviat

în mod uzual: LMD), şi/sau autorul unor comenzi (dacă nu există un astfel de

limbaj).

Este recomandabil ca în aplicaţii, părţile care implementează aceste prime

două funcţiuni să fie pe cât posibil distinct conturate , iar modificările aduse uneia să

nu afecteze bunul mers al celeilalte. Datele trebuie să aibă o stabilitate mai mare

decât programele. În plus, datele trebuie construite astfel încât să poată fi accesibile

mai multor programe, care sunt scrise în limbaje diferi te şi care rulează pe mai multe

calculatoare. Aceste programe, scrise cu ajutorul LMD-ului, folosesc structurile de

Page 11: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

11

date luate din tabelele (dicţionarele) , unde se află descrise structurile virtuale ale

bazei de date, precum şi structura logică la care va avea acces.

3. Administrarea bazei de date. O sarcină importantă a gestiunii bazei de date

se referă la supravegherea datelor din baza de date şi supervizarea programelor de

acces la aceste date. Persoana (sau grupul de persoane) care are aceste sarcini, este

numită administratorul bazei de date, iar atribuţiile îndeplinite se constituie în funcţia

de administrare a bazei de date. Un SGBD trebuie să includă mijloace le prin care un

administrator de baze de date să îşi poată îndeplini sarcinile (funcţiile) de bază, cum

ar fi:

a). Organizarea bazei de date prin stabilirea structurii şi încărcarea ei cu date

iniţiale;

b). Urmărirea funcţionării bazei de date prin:

► Păstrarea în baza de date a datelor corecte şi la zi;

► Asigurarea integrităţii şi confidenţialităţii datelor;

► Urmărirea performanţelor bazei de date, cu ajutorul unor programe

utilitare;

► Punerea la dispoziţia utilizatorilor a unor programe sau proceduri;

► Informarea continuă cu privire la observaţiile utilizatorilor bazei de

date.

c). Reorganizarea bazei de date prin actualizări ale structurilor sau ale

programelor de acces.

4. Protecţia informaţiilor din baza de date este o problemă la ordinea zilei

datorită generalizării bazelor de date cu acces partajat al mai multor utilizatori. Un

SGBD asigură protecţia datelor prin asigurarea:

► Confidenţia1ităţii, realizând protecţia împotriva accesului neautorizat

la date;

► Integrităţii, realizând protecţia împotriva alterării conţinutului bazei de

date, datorită unor erori de programare, defecte de echipament,

distrugeri rău intenţionate, etc.

1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru

o bază de date relaţională

De-a lungul timpului au fost concepute mai multe tipuri de sisteme de gestiune

a bazelor de date care s-au pretat diferitelor momente de evoluţie fizică a tehnicii de

calcul. În momentul de faţă sunt folosite tot mai des sistemele de gestiune a bazelor

de date relaţionale şi , mai nou, încearcă să se impună pe piaţă şi sistemele de

gestiune a bazelor de date distribuite. Acelaşi E. F. Codd a detaliat, în anul 1985,

caracteristicile care trebuie să fie îndeplinite de un sistem de gestiune a bazelor de

Page 12: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

12

date pentru ca acesta să fie considerat relaţional, sub forma a 13 reguli . Aceste reguli

pot fi sintetizate astfel:

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

bazelor de date relaţional trebuie să gestioneze toată baza de date numai prin

posibilităţile modelului relaţional.

Regula 1. Stocarea informaţiei, potrivit căreia toate datele trebuie să fie

cuprinse în tabele de date, şi deci datele trebuie să fie memorate şi prelucrate în

acelaşi mod. În ACCESS de exemplu, acest lucru este posibil cu ajutorul aplicaţiei

Microsoft Jet.

Regula 2. Garantarea accesului la date, potrivit căreia fiecare element de

dată trebuie să fie accesibil logic, printr-o combinaţie de genul: cheie primară, nume

tabel şi nume câmp. În ACCESS spre exemplu, se pot defini chei primare.

Regula 3. Lipsa informaţiei, adică în tabele trebuie să poată exista valori nule

(vide), astfel de valori trebuie să specifice faptul că într-o celulă o valoare nu a fost

completată şi acest lucru nu trebuie să fie confundat cu valori 0 pentru tipul numeric

sau spaţiu pentru tipul text. În aplicaţia ACCESS există astfel de valori care poartă

denumirea de Null.

Regula 4. Catalogul de sistem, acest lucru însemnând că descrierea bazei de

date trebuie să se facă tot în tabele. În ACCESS acest lucru e posibil cu ajutorul

motorului Microsoft Jet.

Regula 5. Limbajul cuprinzător, un sistem de gestiune a bazelor de date

trebuie să conţină un limbaj cuprinzător pentru definirea datelor, descrierea tabelelor,

realizarea unor adăugări, actualizări sau ştergeri de câmpuri. ACCESS-ul de

exemplu, suportă limbajul SQL.

Regula 6. Actualizarea vederilor, însemnând că toate vederile trebuie să fie

actualizate de sisteme. În acest sens ACCESS-ul a fost primul sistem de gestiune a

bazelor de date pentru PC-uri, care a permis realizarea interogărilor pentru

actualizare.

Regula 7. Actualizări la nivel de mulţime. În tabele este necesar ca

modificările şi actualizările să se facă la nivel de mulţime de articole. În cadrul

aplicaţiei ACCESS acest lucru este posibil.

Regula 8. Independenţa fizică a datelor, altfel spus datele trebuie să fie fizic

independente faţă de programul aplicaţiei. O aplicaţie nu trebuie să se modifice dacă ,

spre exemplu, se adaugă sau se şterge un index. În ACCESS acest lucru se realizează

cu ajutorul aplicaţiei Microsoft Jet, care are motor logic de stocare.

Regula 9. Independenţa logică a datelor. Conform acestei reguli, schimbările

efectuate asupra relaţiilor dintr-o bază de date nu trebuie să afecteze programul de

aplicaţie.

Page 13: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

13

Regula 10. Independenţa integrităţii datelor, sau altfel spus restricţiile de

integritate trebuie să poată fi definite într-un limbaj şi să poată fi stocate într-un

catalog. În ACCESS se pot crea reguli de integritate cu ajutorul limbajului SQL.

Regula 11. Independenţa distribuţiei. Potrivit acestei reguli, capacităţile

sistemelor de gestiune a bazelor de date nu au voie să fie limitate datorită distribuţiei

unor componente ale acestora în baze de date separate.

Regula 12. Inexistenţa subminărilor, însemnând că dacă un sistem de gestiune

a bazelor de date relaţional are un limbaj de manipulare al unei singure înregist rări,

acest limbaj nu va putea fi folosit la ocolirea regulilor de integritate sau a

constrângerilor modelului relaţional. În ACCESS acest lucru înseamnă că nu se pot

încălca regulile de integritate.

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

limbajele bazate pe algebra relaţională sau calculul relaţional, din ce în ce mai mulţi

oameni de ştiinţă au încercat să redefininească şi să îmbunătăţească aceste concepte.

S-a ajuns astfel la dezvoltarea şi perfecţionarea unor l imbaje relaţionale precum SQL

(Structured Query Language), QBE (Query-By-Example) sau QUEL(Query

Language).

Limbajul SQL se bazează pe calculul relaţional, având în vedere utilizarea de

variabile constituite din tupluri. Pentru a ajuta la extinderea acestui limbaj în întreaga

comunitate a producătorilor de baze de date, Institutul Naţional American pentru

Standarde (ANSI) a elaborat şi lansat standardele SQL, în 1986, potrivit cărora acest

limbaj foloseşte acelaşi set de comenzi şi structuri de bază standa rdizate, indiferent

de varianta de limbaj folosită.

1.2.4. Sistemul de gestiune a bazelor de date ACCESS

Unul dintre cele mai actuale sisteme de gestiune a bazelor de date este

aplicaţia Microsoft ACCESS, prima variantă a acestei aplicaţii fiind lansată pe piaţă

de compania Microsoft în anul 1992, în cadrul suitei de programe de birou Microsof

Office. Din cadrul programelor Microsoft Office mai fac parte şi aplicaţiile :

Microsoft Word, Microsoft Excel sau Microsoft PowerPoint.

Principalele caracteristici ale sistemului de gestiune a bazelor de date

ACCESS sunt:

► Este componenta dedicată bazelor de date relaţionale din Microsoft Office;

► Este deschis comunicării cu alte sisteme de gestiune a bazelor de date cum

ar fi FoxPro, Paradox sau SQL Server (şi MSDE), un alt SGDBR creat de

Microsoft, obiectele ACCESS putând fi folosite în aceste SGBD-uri dar şi

în alte aplicaţii windows, sau invers, obiecte din aceste SGBD -uri pot fi

folosite în ACCESS;

Page 14: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

14

► Beneficiază de tehnologii avansate, deoarece este creat de firma Microsoft.

Aceste tehnologii sunt:

Tehnologia ActiveX, care permite realizarea aplicaţiilor

client/server;

Permite accesul la baze de date din reţeaua Internet, fiind un

instrument util pentru publicarea informaţiilor în paginile Web;

Este autodocumentat prin ajutor (help), scris în HTML compilat,

ajutorul fiind apelabil contextual sau la cerere;

Permite crearea foarte simplă a obiectelor bazei de date cu

instrumentele expert (wizard);

Bazele de date pot fi personalizate.

► Permite protecţia accesului la obiecte prin administrarea de drepturi de

acces pentru utilizatorii ordonaţi în grupuri;

► Permite crearea de grupuri de obiecte definite de utilizator în cadrul bazei

de date;

► Limbajul propriu al SGBD-ului relaţional ACCESS este Visual Basic;

► E foarte răspândit, utilizarea lui este intuitivă şi este relativ uşor de învăţat .

Pune la dispoziţia utilizatorilor un mediu prietenos pentru crearea,

proiectarea, testarea şi administrare obiectelor bazelor de date proprii.

Aceste caracteristici, ne-au determinat să alegem pentru exemplificarea

noţiunilor despre baze de date aplicaţiile realizate cu ajutorul mediului ACCESS , în

capitolele următoare.

Pe de altă parte este adevărat că SGBD Access nu poate concura cu Oracle,

Informix, Microsoft SQL Server ca viteză sau concurenţă partajată de lucru. Din

acest motiv pentru proiectele mari trebuiesc alese aceste sisteme de gestiune a

bazelor de date, dar pentru proiectele mai mici avantajele de mai sus constituie

argumente serioase pentru alegerea aplicaţiei ACCESS.

1.3. Scopul unei baze de date

În mod intuitiv, atunci când avem de lucru cu colecţii mari de date avem

tendinţa de a realiza tabele care să ne ajute să gestionăm aceste date. Atunci când

aceste colecţii sunt prea mari pentru a le gestiona manual avem nevoie de calculator,

cu ajutorul căruia să construim aplicaţii care să gestioneze aceste baze de date.

Aceste aplicaţii trebuie să gestioneze bazele de date într -un mod mai eficient decât în

cazul în care am gestiona aceste date manual. Printre cele mai importante avantaje în

lucrul cu o bază de date electronică se numără:

► Viteza mărită şi posibilitatea de a stoca un volum mare de date;

► Introducerea şi editarea comodă a datelor, precum şi stocarea şi căutarea

uşoară a acestora;

Page 15: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

15

► Posibilitatea de pregătire a unor rapoarte precise, în forma dorită şi

utilizând datele de la un moment dat;

► Asigurarea partajării datelor cu ajutorul altor aplicaţii sau a altor

calculatoare;

► Asigurarea securităţii datelor împotriva accidentelor.

În cazul utilizării aplicaţiei

ACCESS, principalele avantaje ar fi:

► Asigurarea unor posibilităţi

avansate de manipulare, stocare şi

selecţie a datelor;

► Stabilitatea aplicaţiei în contextul

sistemului de operare;

► Aplicaţia este uşor de învăţat;

► Aplicaţia este foarte directă în

ceea ce priveşte posibilităţile de

modificare a câmpurilor şi a

tabelelor;

► Aplicaţia este foarte răspândită în

întreaga lume.

1.4. Componentele aplicaţiei ACCESS

Aplicaţiile în ACCESS se constituie în jurul unei baze de date dată. Acestea

îşi stochează toate elementele de care are nevoie în containerul bazei de date. Astfel,

o bază de date ACCESS poate fi definită ca fiind o colecţie de obiecte: tabele

(tables), cereri de interogare (queries), formulare (forms), rapoarte (reports), pagini

Web (pages), comenzi macro (macros) şi module (modules).

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

Formularele sunt obiecte care permit introducerea datelor, editarea sau

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

Page 16: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

16

Rapoartele sunt obiecte ale bazelor de date prin care sunt vizualizate sau

tipărite informaţii cu conţinut şi structură accesibilă şi conforme cerinţelor

utilizatorilor.

Interogările sunt obiecte care permit vizualizarea informaţiilor obţinute p rin

prelucrarea datelor din una sau mai multe tabele, şi/sau a altor cereri de interogare.

Paginile Web de accesare a datelor reprezintă obiecte care includ fişiere

HTML şi alte fişiere suport, în vederea furnizării accesului la date prin intermediul

browser-elor de Internet.

Comenzile Macro reprezintă obiecte care conţin o definiţie structurată a uneia

sau mai multor acţiuni pe care ACCESS-ul le realizează ca răspuns la un anumit

eveniment.

Modulele reprezintă obiecte care conţin proceduri definite de utilizator şi sunt

scrise în limbajul de programare Visual Basic for Applications (V.B.A.).

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

pentru a creea orice obiect (tabele, formulare, macro-uri etc). Aceste obiecte pot fi

însă create şi de către utilizator.

1.5. Proiectarea bazelor de date

1.5.1. Principii ale proiectării bazelor de date

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

care nu au experienţă în ceea ce priveşte utilizarea programelor informatice, este

recurgerea la hârtie şi creion.

Proiectarea unei baze de date presupune răspunderea la o serie de întrebări,

cum ar fi:

Page 17: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

17

► De ce se doreşte realizarea bazei de date? (pentru a putea răspunde la

această întrebare se va porni mereu de la rapoartele care ar trebui listate);

► Ce resurse avem la dispoziţie? (cele mai importante resurse fiind în acest

caz calculatoarele, oamenii, informaţiile etc);

► Ce anume va fi de făcut?

Abia apoi se va trece la proiectarea tabelelor, ceea ce presupune def inirea

câmpurilor, a conţinutului lor şi a dimensiunilor acestora, dar şi determinarea

relaţiilor dintre acestea.

În demersul realizării unei baze de date, există trei niveluri de percepţie a

acesteia:

► nivelul extern, este nivelul în care sunt percepute bazele de date de

utilizatori. Ei îşi exprimă cerinţele informaţionale prin aşa -numitele

scheme externe. Pot exista o mulţime de sub-scheme, fiecare sub-schemă

corespunzând viziunilor unui utilizator al bazei de date;

► nivelul conceptual, este nivelul aferent administratorului bazei de date, în

viziunea căruia baza de date este o abstractizare a unei părţi din lumea

reală. Această viziune se concretizează într-o schemă conceptuală;

► nivelul intern, corespunzător programatorului, care realizează modul de

reprezentare a datelor pe suportul fizic.

Determinarea structurii unei baze de date se poate aborda ascendent,

realizându-se descrierea schemelor externe, urmată de elaborarea schemei

conceptuale, sau descendent, definind mai întâi schema conceptuală şi deducând

ulterior schemele externe posibil de obţinut. În acest scop îşi vor da concursul un

grup mai larg de persoane a căror activitate va fi influenţată de modificarea acestei

zone a sistemului informatic al instituţiei.

În momentul proiectării unei baze de date se vor urmării în primul rând

entităţile, atributele şi relaţiile, indecşii, machetele de introducere sau de ieşire,

procedurile de calcul, precum şi schemele logice sau interogările, şi abia apoi se va

trece la încercarea de închegare a tabelelor, la normalizarea lor şi stabilirea relaţiilor

dintre ele.

Datele vor fi memorate în tabele şi fiecare tabel va conţine date doar despre un

singur subiect (ex: elevi, discipline, etc). Redundanţa, adică apariţia unei informaţii

de două ori în baza de date, trebuie să fie minimă şi controlată.

Proiectarea formularelor, a rapoartelor, a macrocomenzilor şi a modulelor ,

este influenţată în primul rând de calitatea structurii datelor. Însă trebuie să se ţină

cont de faptul că, de cele mai multe ori, aceste forme de reprezentare externă a

datelor se bazează pe interogări, nu direct pe tabele.

O bază de date bine proiectată conţine , de obicei, diferite tipuri de interogări

care prezintă informaţiile necesare.

Page 18: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

18

În ajutorul aplicaţiei Microsoft Access (Help) sunt prezentaţi paşii care trebuie

parcurşi pentru proiectarea unei baze de date. Aceştia sunt:

► Stabilirea scopului bazei de date, a utilizatorilor, a cerinţelor lor .

Pornind de la listele necesare (rapoarte), se schiţează formulare le de

introducere a datelor. Se deduc apoi faptele ce trebuie memorate în baza de date şi

cărui subiect îi va aparţine fiecare. Aceste fapte corespund câmpurilor (coloanelor)

din baza de date, iar subiectele cărora le aparţin corespund tabelelor.

► Stabilirea câmpurilor necesare în baza de date.

Fiecare câmp este un fapt despre un anumit subiect. Nu trebuie să rămână

vreun fapt fără un câmp corespondent , iar câmpurile trebuie să fie detaliate în cele

mai mici părţi logice. De exemplu, o adresă trebuie să fie descompusă în stradă,

număr, bloc, scară, etaj, apartament. De asemenea în câmpuri nu se înscriu liste sau

valori calculate.

► Stabilirea tabelelor necesare în baza de date . Fiecare tabel trebuie să

conţină informaţii despre un subiect.

► Stabilirea apartenenţei fiecărui câmp la tabelul corespunzător.

► Identificare câmpurilor cu valori unice în fiecare înregistrare .

► Stabilirea relaţiilor dintre tabele.

► Îmbunătăţirea proiectului.

► Introducerea datelor şi crearea altor obiecte ale bazei de date .

► Utilizarea instrumentelor de analiză ale Microsoft ACCESS.

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

forma unei baze de date:

1. Analizatorul de Tabel, care poate analiza forma unui tabel la un moment

dat şi, dacă este corespunzător, poate propune noi structuri de tabel şi

relaţii, şi poate scinda un tabel în noi tabele corelate, dacă o astfel de

corelaţie are sens.

2. Analizatorul de Performanţă, care poate analiza întreaga bază de date şi

poate efectua recomandări şi sugestii pentru îmbunătăţirea acesteia.

Expertul poate implementa de asemenea aceste recomandări şi sugestii.

1.5.2. Normalizarea unei baze de date relaţionale

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

date folosită pentru a elimina anomaliile de actualizare. În aplicarea acestei tehnici se

ţine cont de dependenţela funcţională dintre câmpuri. Prin normalizare datele sunt

cuprinse în mai multe tabele, cu relaţie între ele, iar redundanţa lor este minimă şi

controlată, astfel încât să conserve informaţiile şi dependenţele funcţionale din

relaţia iniţială (descompunerea fără pierderi).

Page 19: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

19

E. F. Codd a demonstrat că într-o anumită formă relaţiile posedă proprietăţi

nedorite, pe care le-a numit anomalii de actualizare. Aceste anomalii sunt:

► Anomalia de ştergere, care constă în faptul că anumite date care urmează

să fie şterse fac parte din tupluri în care se găsesc şi alte date care sunt

necesare şi în continuare, ori ştergerea făcându-se la nivelul tuplului,

acestea se pierd;

► Anomalia de adăugare, constă în faptul că anumite date care urmează să

fie adăugate fac parte din tupluri incomplete (pentru care nu se cunosc

toate datele), ceea ce face ca acestea să nu poată fi adăugate;

► Anomalia de modificare, care rezultă din faptul că este dificil de modificat

o valoare a unui atribut atunci când ea apare în mai multe tupluri ale

relaţiei.

Pentru a înlătura aceste anomalii , E. F. Codd a stabilit trei forme normale

pentru relaţii şi a introdus procesul de normalizare care se bazează pe noţiunea de

dependenţă funcţională (FD) ca relaţie între atributele unei entităţi cu caracter

invariant.

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

cu forma normală unu (1NF) şi ajungând (după ultimele cercetări) la forma normală

cinci (5NF). Aceasta constă în descompunerea unei relaţii în conformitate cu

mulţimea dependenţelor funcţionale F, într-o colecţie de relaţii care să conserve

informaţiile şi dependenţele funcţionale din relaţia iniţială (descompunerea fără

pierderi).

O bază de date este în forma normală 1 dacă şi numai dacă toate câmpurile din

tabelele ei nu sunt repetate şi conţin numai valori atomice.

O bază de date este în forma normală 2 dacă şi numai dacă a trecut de forma

normală 1 şi în tabelele ei orice câmp non-cheie este complet dependent funcţional de

cheia primară.

O bază de date este în forma normală 3 dacă şi numai dacă a trecut de forma

normală 2 şi în tabelele ei fiecare câmp non-cheie este dependent numai de cheia

primară.

Fie următorul set de date, referitoare la vânzări:

Dencli Adrcli Telcli Nrfact Datafact Delegat DenProd UM Cant Pret Discount

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

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

SC Secundul SRL Str.Verii nr 2 0261222222 2 22.10.2009 Dragoș Lapte l 30 2,9 5

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

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

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

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

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

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

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

Page 20: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

20

1. Prima formă normală, spune că toate coloanele unui tabel trebuie să

conţină valori atomice (indivizibile). Aşadar, nu trebuie să existe câmpuri ce conţin

liste de valori sau grupuri de date.

Tabelul respectă condiţiile cerute pentru această formă. Câmpul Adrcli ar

putea fi considerat un câmp complex şi divizat în stradă şi număr, dar deoarece

valorile incluse sunt manipulate, de obicei, în mod agregat, foarte mul ţi practicieni

stochează în acest mod informaţiile despre adrese.

2. A doua formă normală, conform căreia un tabel este în această formă dacă

a trecut de prima formă normală şi dacă toate câmpurile care nu sunt chei sunt

dependente de cheia primară.

Pentru transformarea în 1NF a tabelelor se încearcă găsirea unui identificator

(cheie primară) şi câmpurile care sunt dependente de identificator. S-a găsit Dencli

de care sunt dependente câmpurile Adrcli, Telcli. Pentru legătură introducem câmpul

Cocli. Acestea alcătuiesc un tabel pe care îl putem numi Clienţi. În mod similar se

procedează şi cu grupul de câmpuri DenProd, UM, Pret, pentru care s-a introdus

Codprod şi le vom grupa în tabelul Produse. Restul câmpurilor, la care adăugăm şi

cele două coduri pentru relaţii, constituie împreună un tabel pe care îl putem numi

Facturi, în care cheia o constituie combinaţia de câmpuri: Nrfact, Datafact şi

Codprod.

Codcli # Dencli Adrcli Telcli Nrfact Datafact Delegat CodProd CodCli Cant Discount

111111 SC First SRL Str Primaverii nr 1 0261111111 1 21.10.2009 Popescu 1075 222222

15

222222 SC Secundul SRL Str.Verii nr 2 0261222222 1 21.10.2009 Popescu 1009 222222

20

333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333 2 22.10.2009 Dragos 7023 222222

30 5

5 24.10.2009 Trandafir 1075 333333

25

5 24.10.2009 Trandafir 1009 333333

11

5 24.10.2009 Trandafir 7023 333333

20 5

Codprod # DenProd UM Pret 6 25.10.2009 Popescu 7023 222222 15 5

1075 Zahar Kg 3,1 3 22.10.2009 Anton 7023 111111

18

1009 Ulei Fl 3,27 4 23.10.2009 Anton 1009 111111

12

7023 Lapte L 2,9 4 23.10.2009 Anton 7023 111111

15

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

compusă, tabelul facturi se descompune în două tabele:

în primul pot fi trecute informaţiile generale despre facturi cu cheia

compusă din:

Nrfact# Datafact# Delegat CodCli

1 21.10.2009 Popescu 222222

2 22.10.2009 Dragoș 222222

5 24.10.2009 Trandafir 333333

6 25.10.2009 Popescu 222222

3 22.10.2009 Anton 111111

4 23.10.2009 Anton 111111

în al doilea pot fi trecute informaţiile cu rândurile din facturi cu informaţii

despre produsele vândute:

Page 21: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

21

Nrfact# Datafact# CodProd# CodCli Cant Discount

1 21.10.2009 1075 222222

15

1 21.10.2009 1009 222222

20

2 22.10.2009 7023 222222

30 5

5 24.10.2009 1075 333333

25

5 24.10.2009 1009 333333

11

5 24.10.2009 7023 333333

20 5

6 25.10.2009 7023 222222 15 5

3 22.10.2009 7023 111111

18

4 23.10.2009 1009 111111

12

4 23.10.2009 7023 111111

15

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

câmpurile ne-cheie să fie mutual independente pentru ca acestea să fie în această

formă normală. În bazele de date nu se pun câmpuri calculate.

Primele trei tabele respectă criteriile pentru 3NF:

Clineti

Codcli # Dencli Adrcli Telcli

111111 SC First SRL Str Primaverii nr 1 0261111111

222222 SC Secundul SRL Str.Verii nr 2 0261222222

333333 SC Terţa Parte SRL Str.Toamnei nr 3 0261333333

Produse

Codprod # DenProd UM Pret

1075 Zahar Kg 3,1

1009 Ulei Fl 3,27

7023 Lapte L 2,9

FactGen

Nrfact# Datafact# Delegat CodCli

1 21.10.2009 Popescu 222222

2 22.10.2009 Popescu 222222

5 24.10.2009 Trandafir 333333

În cel de-al patrulea tabel, observăm că există câmpul Discount, care este

dependent în mod tranzitiv de cheia primară. Drept urmare, din acest tabel, vor fi

create două tabele care vor fi în 3NF.

FactProd

Nrfact# Datafact# CodProd# Cant

1 21.10.2009 1075 15

1 21.10.2009 1009 20

2 22.10.2009 7023 30

5 24.10.2009 1075 25

5 24.10.2009 1009 11

5 24.10.2009 7023 20

6 25.10.2009 7023 15

3 22.10.2009 7023 18

4 23.10.2009 1009 12

4 23.10.2009 7023 15

Page 22: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

22

Discount

Codprod # CodCli# Discount

7023 333333 5

7023 222222 5

1.5.3. Integritatea bazelor de date

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

corectitudinea datelor stocate. Astfel, la proiectarea bazelor de date se pot impune

anumite restricţii pentru a se realiza şi conserva integritatea bazelor de date, care are

două aspecte:

1. Integritatea în interiorul fiecărui tabel.

Acest aspect se referă la impunerea unor restricţii de validare a datelor,

specifice domeniului aplicaţiei. De exemplu: se va urmări ca datele calendaristice să

fie stocate în câmpuri corespunzătoare, domeniul de valori să fie respectat. Pe de altă

parte, se urmăreşte şi asigurarea integrităţii entităţii, care presupune că orice

componentă a cheii primare trebuie să ia o valoare unică , diferită de valoarea NULL,

pentru fiecare înregistrare introdusă în tabel.

2. Integritatea referenţială.

Conform integrităţii referenţiale, pentru fiecare valoare a cheii externe din

baza de date relaţională, diferită de valoarea NULL, trebuie să existe o valoare

corespunzătoare din acelaşi domeniu de valori şi de acelaşi tip, aceasta fiind cheia

primară.

Page 23: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

23

Relaţiile dintre tabele se realizează prin referinţe2, stabilite între înregistrările

tabelelor şi cheile tabelelor. Viabilitatea acestor referinţe poate fi înfăptuită prin

integritatea referenţială, a cărei scop este de a împiedica apariţia înregist rărilor

solitare şi de a păstra sincronizate referinţele, astfel încât să nu apară înregistrări care

se referă la alte înregistrări care nu mai există. În ACCESS, integritatea referenţială

poate fi impusă atunci când se definesc relaţiile dintre tabele, pr in precizarea

actualizărilor şi ştergerilor în cascadă a câmpurilor corelate, precum este redat în

figura anterioară.

După activarea acestei impuneri pentru o relaţie dintre două tabele, ACCESS

nu va mai permite niciunei aplicaţii care utilizează baza de date încălcarea integrităţii

referenţiale pentru acea relaţie, adică nu sunt posibile actualizări care modifică ţinta

unei referinţe şi nici ştergeri care elimină ţinta unei referinţe. Mai mult chiar, orice

modificare a cheii primare se va propaga, în cascadă, şi în cheile străine, sau

ştergerea unui articol dintr-un tabelul de iniţiere a referinţei, va provoca ştergerea

tuturor articolelor din tabelul ţintă al referinţei, pentru care cheia străină are valoarea

pe care o are cheia primară a articolului şters. ACCESS permite chiar şi afişarea în

cascadă a relaţiilor dintre tabele, precum în figura de mai jos:

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

codului client (Codcli) pentru „SC Secundul SRL‖ la valoarea 999999 , va determina

modificarea valorii câmpului Codcli, cu valoarea 999999, pentru articolele corelate

din tabelul Factgen (3 articole care au valoarea Codcli=222222). Dacă se şterge din

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

2 de la verbul a referi

Page 24: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

24

produce (bineînţeles după o atenţionare şi acceptul utilizatorului) ştergerea în

cascadă a celor 3 articole corelate din Factgen. Folosirea sintagmei în cascadă este

îndreptăţită în acest caz, deoarece cele 3 articole din tabelul Factgen, sunt corelate,

la rândul lor, cu articole din tabelul Factprod, după cheia compusă din câmpurile

Nrfact şi Datafact (4 articole: două corespunzătoare facturii 1, unul corespunzător

facturii 2 şi unul corespunzător facturii 6). Rezumând, în structura de cascadă din

figură, ştergerea unui articol din tabelul Clienţi provoacă ştergerea a trei articole în

tabelul Factgen, provocând mai departe ştergerea a 4 articole în tabelul Factprod.

1.6. Operarea în mediul ACCESS

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

SGBD ACCESS face parte din pachetul de programe Microsoft Office, pachet

care este proiectat să ruleze

sub diverse versiuni ale

sistemului de operare

Windows. Desigur că într-un

sistem friendly user, orice se

poate face în câteva moduri,

pentru ca utilizatorul să poată

folosi metoda care i se pare cea

mai naturală.

O posibilitate de a lansa

SGBD-ul ACCESS este cea de

la butonul Start pe calea

programelor instalate:

Start>All programs>

Microsoft Office > Microsoft

Access.

La pornire, SGBD-ul

ACCESS afişează fesreastra

din figură (numită sugestiv Pagina Introducere în Microsoft Office Access), şi

utilizatorului îi sunt oferite mai multe posibilităţi.

Pentru crearea unei noi baze de date trebuie aleasă opţiunea: Bază de date

necompletată (Blank Access database) din partea a doua a panoului

Page 25: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

25

După aceasta este afişată o fereastră cu titlul Fişier nou bază de date în care

utilizatorul are de stabilit:

► directorul în care va fi salvat fişierul;

► numele fişierului în care va fi stocată baza de date.

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

► În caseta pentru alegerea tipului fişierului se specifică extensia fişierului

sau se alege un tip din lista ataşată;

► Pentru a ajunge la directorul unde fişierul va fi stocat, ut ilizatorul se

foloseşte de lista ascunsă, din primul rând al fesrestrei, unde alege unitatea de stocare

şi apoi alege directorul sau fişierul dorit din lista cu directoare şi fişiere. Aceste

operaţii se repetă până când se ajunge la locaţia dorită ;

Alegerea locului

de stocare

Creare

director nou

Instrumente

pentru fisiere

Listă cu foldere şi

fişiere

Scrierea numelui

fişierului

Tipul fișierului

Page 26: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

26

► În caseta Nume fişier se va trece numele fişierului. Dacă numele fişierului

dorit apare în listă, se poate face un clic pe fişierul dorit şi numele lui va fi trecut

automat în caseta de scriere a numelui fişierului (Atenţie , în acest caz se va

suprascrie fişierul ales).

Operaţia se termină când se apasă butonul OK. Dacă se doreşte, se poate crea

un director nou sau se poate apela la instrumentele pentru fişiere pentru căutare a,

ordonarea, modul de afişare, adăugarea în lista de preferinţe sau afişarea

proprietăţilor.

Intrarea în noua bază de date se face atunci când este afişată fereastra bază de

date.

1.6.2. Moduri de vizualizare

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

Bază de date, sau se realizează în succesiunea operaţiilor pe care le execută aplicaţia.

Obiectele sunt afişate în diferite moduri de vizualizare prezentate în figur a de mai

jos.

Se observă că multe moduri sunt comune pentru majoritatea obiectelor.

Modurile de vizualizare se selectează apăsând butonul Vizualizare din panglică.

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

obiectele. În acest mod se configurează conţinutul şi forma obiectelor.

În modul Foaie de date (Data view) sunt afişate, pentru a putea fi modificate,

datele legate de obiectul curent (tabele sau integogări).

În modul Vizualizare raport (Report view) sunt afişate, prin intermediul

Page 27: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

27

formatărilor prevăzute într-un raport, datele legate de raportul curent.

În modul Vizualizare formular (Form view) sunt afişate, prin intermediul

formatărilor prevăzute într-un formular, datele legate de formularul curent, pentru a

putea fi modificate.

În modul Vizualizare aspect sunt afişate datele, prin intermediul formatărilor

prevăzute într-un formular sau raport şi se pot face unele modificări intuitive aspra

machetei obiectului prin care se expun datele.

Vizualizare SQL este un mod specific interogărilor. Utilizatorii bazelor de date

trebuie să înţeleagă că o interogare este în primul rând o comandă SQL (Structured

Query Language). Tabelele văzute în modul Foaie de date a interogărilor, conţin

datele rezultate în urma execuţiei comenzilor SQL. O interogare, vizualizată în

modul proiectare, mai este cunoscută şi sub numele de grilă QBE (acronim de la

sintagma din engleză Query by Example) şi vizualizează grafic comanda SQL.

Examinarea înaintea imprimării este o redare pe ecran a modului cum va fi

tipărit documentul (raport) pe hârtia de imprimantă.

Vizualizare PivotTable: e un mod de vizualizare care sintetizează şi analizează

datele dintr-o foaie de date sau dintr-un formular. Se utilizează diferite niveluri de

detaliere sau se organizează datele prin glisarea de câmpuri şi elemente, prin afişarea

sau ascunderea elementelor din listele verticale pentru câmpuri.

Vizualizare PivotChart: este un mod de vizualizare care arată o analiză vizuală

a datelor dintr-o foaie de date sau dintr-un formular. Sunt vizibile diferite niveluri de

detaliere sau se indică aspectul prin glisarea de câmpuri şi elemente sau prin

expunerea şi ascunderea de elemente în listele verticale pentru câmpuri.

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

date existente

Pentru deschiderea unei baze de

date existente se poate proceda în mai

multe moduri.

Dacă se doreşte modificarea sau

consultarea unei baze de date creată

anterior, atunci când se lansează rularea

aplicaţiei ACCESS, în fereastra principală

se acţionează în partea dreaptă, în caseta Deschidere bază de date recentă a ferestrei

de start a aplicaţiei, de obicei pe opţiunea Mai multe … şi se va deschide o

fereastră de dialog, cu titlul Deschidere, asemănătoare cu fereastra de dialog Fişier

nou bază de date, în care se selectează baza de date care se doreşte să fie modificată.

Spre deosebire de alte aplicaţii din Office, în ACCESS se poate lucra, la un

moment dat, doar cu o singură bază de date.

Page 28: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

28

Dacă aplicaţia ACCESS este deja deschisă, se poate acţiona pe pictograma

din meniul ascuns legat de Butonul Office sau se alege opţiunea > Deschidere,

sau se apasă concomitent Ctrl + O. Şi în aceste trei ultime cazuri, se deschide

automat fereastra cu titlu Deschidere, cu a cărei elemente componente utilizatorul îşi

alege fişierul cu care doreşte să lucreze.

În fine, este posibil ca documentul care se doreşte a fi deschis să fi fost editat

recent şi să apară într-un istoric, conţinut în partea dreaptă a meniului ascuns legat

de Butonul Office , sau în prima parte a panoului de activitate Fişier nou, de unde

poate fi deschis.

Dar o bază de date ACCESS, concomitent cu aplicaţia Microsoft ACCESS, pot

fi deschise dintr-un File Manager, printr-un dublu clic pe orice document de tip bază

de date ACCESS cu extensia .mdb (versiuni anterioare anului 2007) sau .accdb

(versiuni ulterioare anului 2007), dacă aplicaţia ACCESS este instalată pe calculator.

Asupra unei baze de date deschise se pot face modificări ale obiectelor

încapsulate: se pot crea noi tabele, se pot modifica structurile sau conţinutul datelor,

se pot crea noi interogări, formulare, rapoarte, pagini Web, sau se pot face modificări

asupra celor existente.

ACCESS are opţiuni de salvare a principalelor tipuri de obiecte compuse care

apar în fereastra Bază de date. Salvarea se referă la obiectul curent, atunci când el

este vizualizat în modul proiectare (pentru interogări şi când sunt vizualizate în

modul SQL). În restul modurilor de vizualizare, pentru toate obiectele, salvarea, dacă

are sens, se referă la datele pentru care obiectul este interfaţă. Pentru obiectele

curente, se pot face salvări sub alt format: html, xml, pdf , xls, doc etc.

Pentru prima salvare a unor obiecte nou create, se foloseşte una dintre

comenzile: >Salvare ca… sau > Salvare. Se ajunge la o fereastră de salvare

unde se precizează numele sub care va fi salvat obiectul. Dacă se apelează comanda

>Salvare ca… mai este afişată şi o casetă de editare text combinată cu o listă

ascunsă din care se poate alege tipul obiectului, pe când, dacă se apelează la comanda

> Salvare, această casetă combinată nu mai apare. Această salvare se poate face

şi cu combinaţia de taste Ctrl + S sau apăsând butonul al treilea din bara de

instrumente Standard cu pictograma:.

Dacă există deja o versiune a obiectului, salvată în baza de date, cu comanda

Salvare, versiunea veche se suprascrie. Dar, se poate salva noua versiune, cu un nou

nume sau ca alt tip de obiect bazat pe obiectul iniţial prin comanda >Salvare ca….

În modurile de vizualizare interactive, valorile stabilite pentru controalele

diferitelor obiecte se salvează automat după părăsirea controalelor, de aceea când

iese dintr-un obiect, dacă nu s-au făcut modificări în modul proiectare, utilizatorul nu

mai este atenţionat să facă salvare. Dacă utilizatorul a efectuat modificări asupra unu i

Page 29: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

29

obiect în modul proiectare, chiar dacă trece într-un mod interactiv, utilizatorul este

atenţionat când părăseşte obiectul să-şi salveze modificările efectuate în modul

proiectare.

Pentru închiderea unei baze de date se alege opţiunea >Închidere.

1.6.4. Folosirea funcţiei ajutor

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

complex de ajutor în lucru. De aceste facilităţi beneficiază şi utilizatorii ACCESS.

Probabil cel mai bun ajutor pentru utilizatori este realizarea interfeţei în

diverse limbi, altele decât limbile de circulaţie internaţională. Aşa este de exemplu şi

versiunea în româneşte a Microsoft Office, cu toate că încă se utilizează foarte multe

neologisme forţate. Aplicaţiile Office au toate elementele traduse: de la opţiunile de

meniu, mesajele din diferite ferestre sau casete, până la sistemul de ajutor (help) în

amănun, sau chiar mesajele care apar atunci când poziţionăm cursorul mouse-ului pe

unul din butoanele barelor de instrumente (text info control sau pe engleză: „Tool

Tip‖).

În Ajutorul din ACCESS, sunt traduse chiar şi explicaţiile pentru partea de

programare in limbajele VBA sau SQL.

Totuşi cea mai mare parte a funcţiunilor de ajutor pentru utilizatori este

concentrată în meniul „Ajutor‖. Ajutorul este sub formă de documente hypertext.

Opţiunile componentei de Ajutor a aplicaţiei ACCESS sunt următoarele:

Răsfoire Ajutor Access

Activarea Access Colectarea datelor

Noutăţi Pornirea

Accesibilitate Obţinerea Ajutorului

Pagini de date Ataşări

Macrocomenzi şi programabilitate Implementarea aplicaţiei

Access Developer Extensions Conversie

Particularizare Proiectarea bazelor de date

Expresii Date externe

Filtrarea şi sortarea Formulare şi rapoarte

Interogări Salvare şi imprimare

Securitate şi confidenţialitate Tabele

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

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

Page 30: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

30

Get help? este o facilitate a Microsoft Office de a explica elementele de

interfaţă din aplicaţiile sale. Alegând butonul care e plasat în colţul din dreapta

sus, se deschide o fereastră cu explicaţii dependente de context.

Ajutor pentru Microsoft ACCESS este funcţiunea care poate fi lansată şi

apăsând tasta F1 sau cu clic pe butonul . Se afişează o fereastră de ajutor

asemănătoare celei de mai jos cu posibilitatea de a vedea o listă complexă a

termenilor de ajutor. În partea de sus sunt câteva butoane folosite pentru răsfoirea

convenabilă a acestor pagini de ajutor.

În partea de jos sunt două cadrane de pagini. Prima are ca titlu Contents

(contents înseamnă cuprins), şi conţine lista de teme a documentaţie i numită Ajutor

Microsoft Access şi este structurată arborescent. Temele explicate pot fi simple sau

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

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

Page 31: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

31

Temele care sunt compuse din alte subteme, pot avea la începutul rândului

unul dintre semnele sau . Dacă au semnul , atunci înseamnă că apar în lista

din stânga fără detalierea subtemelor incluse. Aceste teme incluse, pentru fiecare

temă complexă, pot fi afişate printr-un clic pe semnul de la începutul rândului.

Când tema apare într-o listă, expandată cu subtemele incluse, are la începutul

rândului semnul .

Deasupra cadranului din stânga are ca titlu Căutare (în limba engleză Search)

un instruent folosit pentru căutarea unor termeni în manualul aplicaţiei.

După căutare, sunt afişate subiectele unde apar termenii căutaţi, iar efectuarea

unui clic pe un subiect are ca rezultat afişarea acestuia în partea dreaptă a ferestrei de

ajutor.

1.6.5. Închiderea aplicaţiei

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

aplicaţii Microsoft Office: din meniu se alege opţiunea > Închidere bază de date.

Ieşirea din aplicaţie provoacă închiderea tuturor obiectelor deschise în acel moment.

Sistemul, înainte de închiderea fiecărui obiect, testează dacă s -a făcut salvarea

ultimelor modificări în modul proiectare, pentru fiecare obiect în parte, iar dacă nu s-

a realizat acest lucru se afişează mesajul de atenţionare, urmând ca alegerea

opţiunilor de salvare fişier, închidere fără salvare sau revocarea închiderii aplicaţiei

să se facă de utilizator.

Combinaţia de taste pentru închiderea aplicaţiilor Windows, deci şi a aplicaţiei

Microsoft ACCESS, este Alt + F4. Totodată, având o fereastră a sistemului şi

ACCESS-ul poate fi închis cu un clic pe butonul cu semnul X din colţul din dreapta

sus.

Page 32: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

32

CAPITOLUL II. CREAREA ȘI UTILIZAREA TABELELOR

2.1. Crearea unei tabele

Începând cu versiunile ulterioare anului 2007 ale programelor Microsoft

Office, meniurile şi grupurile de instrumente care erau plasate sub meniu în fereastra

aplicaţiilor, au fost înlocuite de aşanumita panglică. Această noutate a ferestrei

aplicaţiei este proiectată cu scopul de a ajuta utilizatorii în a găsi rapid comenzile de

care au nevoie pentru a realiza o activitate. Comenzile sunt organizate în grupuri

logice care sunt grupate în file.

Fiecare filă are legătură cu un anumit tip de activitate, cum ar fi scrierea sau

asamblarea unei pagini. Pentru a reduce aglomerarea de pe ecran, unele file sunt

dependente de context, fiind afişate doar când sunt necesare. Este cazul, de obicei a

ultimei file, care conţine comenzi pentru obiectul curent în lucru, accesat sau

selectat.

Crearea unui tabel presupune crearea structurii sale. Acest lucru se poate

realiza în fila Creare, în grupul de instrumente pentru tabele, recomandabil prin

instrumentul Proiectare tabel:

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

obişnuieşte ca să se promoveze nişte structuri predefinite pentru a crea tabele sau

chiar baze de date, pentru diferite probleme. Neajunsul constă în faptul că structurile

predefinite sunt greu pliabile pe o problemă reală. Probabil lipsesc câmpuri, sau sunt

de tip necorespunzător şi nu în ultimul rând au denumiri greu de accep tat.

Crearea tabelelor se poate face şi cu instrumentul Tabel, prin introducerea de

date. Într-un format asemănător cu Excel se pot introduce date şi apoi în modul

proiectare (în limba engleză: Design) se pot reboteza şi restructura câmpurile.

Structuri de tabele pot fi realizate şi prin subprograme VBA, create de

utilizatori.

Page 33: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

33

Modul cel mai elegant, cel mai utilizat şi convenabil de creare şi apoi de

modificare a structurilor tabelelor rămâne utilizarea ferestrei de proiectare, precum în

figura de mai jos, în care este vizibilă automat ultima filă cu instrumente de

prelucrare a tabelelor, fila Proiectare.

2.1.1. Proprietăţile câmpurilor

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

date (Data Type) şi, opţional, o descriere a câmpului respectiv (Description). În

panoul de jos al acestei ferestre se introduc celelalte proprietăţ i ale câmpului:

► Numele câmpului, poate fi format, precum orice nume de obiecte ale unei

baze de date ACCESS3, din maximum 64 de caractere (chiar şi diacritice!), poate să

conţină spaţiu, dar nu poate să conţină unele caractere, printre care: „ [‖, „]‖,„.‖, „!‖.

Atunci când în Microsoft ACCESS un nume de câmp este format din mai

multe cuvinte, trebuie folosite parantezele drepte , de exemplu: [Cod numeric

personal]. În majoritatea limbajelor de programare sau a SGBD-urilor, pentru a forma

nume de câmpuri complexe, în sintaxă se recurge la utilizarea caracterului „_‖

(denumit în engleză: underscore), scriindu-se Cod_numeric_personal.

3 vezi Specificaţii pentru baze de date , http://office.microsoft.com/ro-

ro/access/HA100307391048.aspx?pid=CH100621861048

Page 34: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

34

Microsoft ACCESS identifică un câmp prin numele său de câmp. După

specificarea numelui de câmp, în Vizualizare proiect pentru tabel, numele poate fi

utilizat în expresii, proceduri Visual Basic şi instrucţiuni SQL. Setarea acestei

proprietăţi se efectuează în partea de sus a ferestrei deschise prin apelarea

instrumentului Proiectare tabel din fila Creare, sau prin redenumirea unei coloane în

fereastra deschisă prin apelarea instrumentului Tabel din fila Creare, sau utilizând un

limbaj de programare (de obicei limbajul Visual Basic).

► Ca tipuri sau subtipuri de date se pot folosi: text, memo, număr, dată/oră,

monedă, autonumerotare, da/nu, obiect OLE, etc.

Proprietatea Tip de date se utilizează pentru a preciza tipul de date stocat în

câmpul unui tabel. Fiecare câmp stochează date constând dintr-un singur tip de date.

Proprietatea Tip de date utilizează următoarele setări:

Setare Tip de date Dimensiune

Text (Implicit) Text sau combinaţie de text şi

numere, precum şi numere care nu

necesită calcule, cum ar fi numerele de

telefon.

Până la 255 de caractere sau o lungime

mai mică setată prin proprietatea

Dimensiune câmp. Microsoft ACCESS

nu rezervă spaţiu pentru porţiuni

neutilizate din câmpul text.

Memo Text lung sau combinaţii de text şi

numere. Noile versiuni ale ACCESS-ului

înregistrează istoricul revizuirilor.

Până la 65.535 de caractere.

Număr Date numerice utilizate în calcule

matematice.

1, 2, 4 sau 8 octeţi (16 octeţi dacă

proprietatea Dimensiune câmp este setată

la ID reproducere).

Dată/Oră Valori de date calendaristice şi ore pentru

anii cuprinşi între 100 şi 9999. Noile

versiuni ale ACCESS-ului oferă

asistenţă pentru alegerea datei într-un

calendar interactiv încorporat.

8 octeţi.

Monedă Valori monetare şi date numerice

utilizate în calcule matematice care

implică date având între unul şi patru

poziţii zecimale. Cu precizie de 15 cifre

în stânga separatorului zecimal şi de 4

cifre în dreapta lui.

8 octeţi.

AutoNu-

merotare

Un număr secvenţial unic (incrementat

cu 1).

4 octeţi (16 octeţi dacă proprietatea

Dimensiune câmp este setată la ID

reproducere).

Da/Nu Valori şi câmpuri Da şi Nu care conţin

numai una din cele două valori (Da/Nu,

Adevărat/Fals sau Activat/Dezactivat).

1 bit.

Obiect

OLE

Un obiect (cum ar fi o foaie de date

Microsoft Excel, un document Microsoft

Word, grafică, sunete sau alte date

binare) legate sau încorporate într-un

tabel Microsoft ACCESS.

Până la 1 gigaoctet (limitat la spaţiul-disc

disponibil).

Page 35: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

35

Hyperlink Text sau combinaţie de text şi numere

stocate ca text şi utilizate ca adresă

hyperlink.

Fiecare din aceste trei părţi ale tipului de

date Hyperlink conţine până la 2048 de

caractere.

Atach Permite stocarea de diferite tipuri de

documente şi fişierele binare în baza de

date fără a creşte inutil dimensiunea

bazei de date. Microsoft Access 2007

comprimă automat ataşările, când este

posibil, pentru a minimiza utilizarea

spaţiului.

Limitat la spaţiul de disc disponibil.

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

utilizeze tipul de date Monedă pentru un câmp care necesită multe calcule implicând

date cu una până la patru zecimale. Câmpurile cu tipul de date Simplă precizie şi

Dublă precizie necesită calcule în virgulă mobilă. Tipul de date Monedă utilizează un

calcul în virgulă fixă, mai rapid.

► Proprietatea Dimensiune câmp se utilizează pentru a seta dimensiunea

maximă pentru datele stocate într-un câmp având tipul de date Text, Număr sau

AutoNumerotare. Setarea acestei proprietăţi se face în strânsă legătură cu setarea

proprietăţii tip de dată a câmpului (data type).

Pentru proprietatea Tip date setată la Text, dimensiunea poate fi un număr de

la 0 la 255. Setarea implicită este 50. Pentru AutoNumerotare, proprietatea

Dimensiune câmp se setează la Întreg lung sau ID reproducere. Pentru proprietatea

Tip date setată la Număr, setările proprietăţii Dimensiune câmp şi valorile lor sunt

corelate ca în tabelul de mai jos:

Setare Descriere Precizie

zecimală

Dimensiune

de stocare

Octet Numere de la 0 la 255 (fără fracţiuni). Fără 1 octet

Zecimal Numere între -1038

–1 şi 1038

–1. 28 12octeţi

Întreg Numere între -32.768 şi 32.767 (fără fracţiuni). Fără 2 octeţi

Întreg lung Numere de la –2.147.483.648 la 2.147.483.647

(fără fracţiuni).

Fără 4 octeţi

Simplă precizie Numere de la –3,402823E38 la

–1,401298E-45 pentru valori negative şi de la

1,401298E–45 la 3,402823E38 pentru valori

pozitive.

7 4 octeţi

Dublă precizie Stochează numere de la –1,79769313486231E308 la

–4,94065645841247E–324 pentru valori negative şi

de la 4,94065645841247E–324

la 1,79769313486231E308 pentru valori pozitive.

15 8 octeţi

ID

reproducere

Identificator unic global (GUID). N/A 16 octeţi

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

tabelului.

Page 36: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

36

Valorile implicite ale dimensiunilor de câmp pentru câmpurile Text şi Număr

se pot seta prin modificarea valorilor de la opţiunea Designeri de obiecte, din

fereastra afişată la selecţia Opţiuni Access, după ce se face clic pe Butonul Microsoft

Office .

Este bine să se utilizeze cea mai mică posibil setare pentru proprietatea

Dimensiune câmp deoarece dimensiunile mai mici de date sunt prelucrate mai rapid

şi solicită mai puţină memorie.

► Numărul de zecimale (în limba engleză: Decimal places):

În cadrul acestei proprietăţi se stabileşte numărul cifrelor afişate la dreapta

separatorului zecimal, pentru valorile câmpului. Această setare are sens doar la

tipurile de date Număr şi Monedă şi poate stabili între 0 şi 15 cifre sau Auto pentru

determinarea automată a numărului de cifre pentru partea fracţionară.

► Format: formatul în care sunt afişate informaţiile. Important este de reţinut

că proprietatea Format se utilizează pentru stabilirea modului în care numere, date

calendaristice, timp şi text vor fi afişate şi tipărite şi nu afectează introducerea

datelor. Această sarcină revine proprietăţii Input mask.

► Formatul de introducere, masca de intrare (în limba engleză: Input Mask)

este şablonul de introducere a datelor

Setarea formatului de afişare şi al celui de intrare poate fi o operaţie

complexă şi anevoioasă. Este recomandabil ca de ea să facă uz programatorii

experimentaţi. Neînţelegerea conţinutului informaţiei datorită unui format ambiguu

poate duce la deteriorarea unor date.

► Legenda (în limba engleză: Caption), cu sensul pe care îl are în general în

programarea orientată pe obiecte, aceasta permite specificarea unui al doilea nume în

situaţiile în care primul nu este destul de semnificativ. El apare în antetul cererilor d e

interogare, a formularelor şi a rapoartelor.

► Valoarea implicită (în limba engleză: Default Value): este o valoare care

este atribuită automat de sistem, în momentul introducerii datelor, dacă utilizatorul

nu completează acel câmp.

► Regulă de validare (în limba engleză: Validation Rule): este o restricţie de

introducere a datelor care obligă datele să respecte expresia introdusă la această

proprietate. În expresie practic se folosesc regulile de sintaxă specifice ACCESS-

ului.

► Textul de validare (în limba engleză: Validation Text ): reprezintă textul

care va apărea pe bara de mesaje în cazul în care valoarea introdusă nu respectă

criteriul impus de regulă de validare.

► Obligatoriu (în limba engleză: Required): obligă sau nu completarea

respectivului câmp în fiecare înregistrare.

► Indexat (în limba engleză: Indexed): poate suporta trei posibilităţi:

a) Nu;

Page 37: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

37

b) Da (Cu dubluri);

c) Da (Fără dubluri).

2.1.2. Definirea unei chei primare

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

stabilească cheia primară a acesteia. Dacă se uită, ACCESS avertizează utilizatorul

de acest lucru şi automat creează un nou câmp şi-l propune ca şi cheie primară.

Un tabel care nu are cheie primară nu poate stabili relaţii de tipul unu la mai

mulţi cu alte tabele.

O cheie primară poate fi formată din unul sau mai multe câmpuri. Dacă cheia

primară este formată dintr-un singur câmp, se selectează acesta, se face clic dreapta

şi apoi se activează butonul cheie primară. Dacă cheia primară este formată din mai

multe câmpuri (cheie compusă)se selectează primul, iar celelalte se selectează în

combinaţie cu apăsarea tastei CTRL, după care se face clic dreapta pe unul dintre ele

şi apoi se activează butonul cheie primară.

În Microsoft ACCESS cheia primară a unei tabelei trebuie să fie indexată şi

fără dubluri. Într-un tabel poate exista o singură cheie primară.

Dacă mai există şi alte câmpuri, indexate, fără dubluri, acestea sunt numite

chei candidate.

2.1.3. Stabilirea unui index

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

Un index este o structură în funcţie de a cărei valori sunt ordonate

înregistrările unui tabel.

Un sistem de gestiune de baze de date se foloseşte de indecşii existenţi în

diverse operaţii, de multe ori fără ca acest lucru să îi fie evident utilizatorului. Este

recomandabil să se facă indecşi pe câmpurile după care se sortează rapoarte,

formulare, interogări sau foi de date sau pe câmpurile care apar în expresii pentru

realizarea relaţiilor dintre tabele.

Un index pentru un singur câmp se poate face prin stabilirea proprietăţii

indexat la Da (Cu dubluri) sau Da (Fără dubluri).

Pentru crearea unui index bazat pe mai multe câmpuri se foloseşte

instrumentul Indexuri, fila Instrumente tabel/ Proiectare.

Această filă este accesibilă, atunci când un tabel este accesat pentru

prelucrare, în modul vizulaizare proiect. În fereastra cu titlul Indexuri sunt cuprinşi

toţi indecşii tabelului curent. Fiecare index are un nume şi poate utiliza până la 10

câmpuri. Expresia de sortare este formată prin concatenarea câmpurilor în ordinea în

care apar în fereastră. De exemplu: indexul DenAdrTel este format din concatenarea

câmpurilor [Dencli] ordonat ascendent, [Adresa] ordonat ascendent şi [Telcli]

Page 38: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

38

ordonat descendent, indexul Codcli este format din câmpul [Codcli] ordonat

ascendent, iar indexul

PrimaryKey este format doar

din câmpul [Codcli] în ordine

ascendentă.

2.1.4. Modificarea

proprietăţilor unui câmp

Proprietăţile unui câmp

se pot modifica uşor în modul

proiectare. Modificarea

proprietăţilor unui câmp nu afectează buna funcţionare a obiectelor în care apar date

din câmpul modificat. De exemplu, dacă în tabelul „Clienţi‖, numele câmpului

Adresa se modifică în Adrcli, atunci formularele, rapoartele sau interogările care

folosesc date din acest câmp sunt în mod automat modificate, astfel încât, vor prelua

datele din câmpul cu noul nume.

Mărirea dimensiunii unui câmp nu duce neapărat la mărirea dimensiunii bazei

de date, dar prelucrarea devine mai greoaie.

Dacă la un tabel, care deja conţine date, se micşorează dimensiunea unui

câmp, este posibilă pierderea unor date. Odată cu afişarea unei casete de atenţionare,

asemănătoare celei de mai jos, utilizatorul poate să -şi revoce acţiunea. Însă, dacă

utilizatorul selectează butonul Da în fereastra de mai jos, pierderea de informaţii

devine ireversibilă. De exemplu, dacă se modifică setarea Dimensiune câmp a unui

câmp de tip Text de la 100 la 50, partea de date care depăşeşte noua setare de 50

caractere se pierde.

Dacă într-un câmp de tip Număr, datele nu încap în dimensiunea câmpului,

numerele de după virgulă sunt rotunjite sau primesc valoarea Null. De exemplu, dacă

se modifică o dimensiune de câmp de la Simplă precizie la Întreg, valorile fracţionare

vor fi rotunjite la cel mai apropiat număr întreg, iar valorile mai mari decât 32.767

sau mai mici decât -32.768 vor deveni valori nule. Aceste modificări de date sunt

ireversibile.

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

Trebuie avut în vedere dacă sunt posibile conversiile datelor din vechiul tip în

noul tip. Conversia din tipul număr în tipul monedă, sau invers, se face fără

Page 39: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

39

probleme. Şi conversiile din numere în date/oră şi invers se fac fără probleme. Partea

întreagă a numerelor se transformă în dată iar partea fracţionară se transformă în oră.

Numărul 0 se transformă în #1.1.1900#. Pentru numerele negative, se scade din 1

ianuarie 1900, un număr de zile egal cu valoarea numărului. Pentru ore se face

corespondenţa

24

orapartea fracţionară

. De exemplu: ora 12 se transformă în

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

¾ : 24, etc.

Dacă se doreşte transformarea din text în numere cu format obişnuit, este

necesar ca în toate celulele să existe doar caractere le necesare pentru a scrie numere:

cifre, marcatorul zecimal şi semnele „+‖ şi „-‖.

2.2. Editarea datelor într-o tabelă

2.2.1. Introducerea de date în tabelă

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

multitudine de metode, user-friendly, asigurate de însăşi SGBD. Cea mai directă este

printr-o fereastră Foaie de date (în limba engleză: Datasheet). În cadrul acestei

ferestre se pot vizualiza, şi/sau modifica datele deja introduse sau se pot introduce

date noi. Stilul de editare urmează de obicei convenţiile din aplicaţiile pachetului

Office.

Un exemplu de introducere de date în modul foaie de date este redat în

exemplul figură.

Poziţionarea în cadrul tabelului se poate face cu mouse -ul sau cu tastele pentru

deplasare în cadrul foii (Tastele cu săgeţi, Insert, Home, PageUp, PageDown). În

plus, trecerea la câmpul următor se face cu tasta TAB sau apăsând ENTER după ce s-

au introdus date în celulă. Trecerea la câmpul anterior se face cu ajutorul combinaţiei

de taste Shift + TAB.

Page 40: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

40

Articolul pe care este poziţionat cursorul este evidenţiat prin accent de

culoare. La editare se ţine cont de proprietăţile câmpurilor stabilite în modul

proiectare, nepermiţându-se violarea regulilor de integritate.

În tabelă se pot introduce date din alte zone ale tabelului, din alte tabele sau

chiar alte aplicaţii (Word, Excel) prin intermediul ferestrei Clipboard, prin operaţiile

Decupare sau Copiere, cuplate cu operaţia Lipire.

Ca o particularitate generată de lucrul cu înregistrările, în ACCESS este

aproape omniprezent grupul de butoane de navigare cu semnificaţie similară

butoanelor de pe aparatele audio sau video.

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

ferestrei Datasheet. De obicei programatorii proiectează formulare, cu posibilităţile

oferite de SGBD, pentru introducerea de date în tabele. Totuşi, pentru tabele mici, nu

se justifică efortul pentru a se crea formulare.

2.2.2. Vizualizarea informaţiilor dintr-o tabelă

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

prin acţiunea asupra butonului Office , opţiunea Imprimare > Examinare înaintea

imprimării.

ACCESS desenează automat un tabel şi îl vizualizează în pagini, în funcţie de

setările imprimantei.

Dar, în mod frecvent, vizualizarea informaţiilor dintr -o tabelă se face prin

modul Foaie de date. În acest mod vizualizarea este însoţită de posibilitatea de

modificare a informaţiilor. Tot cu actualizare, se pot vizualiza informaţiile din tabele

cu ajutorul unor formulare sau interogări create pe baza tabelului.

2.2.3. Modificarea datelor într-o tabelă

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

Pentru a modifica date, întâi trebuie să se ajungă la celula în cauză. Nu este

posibilă editarea câmpurilor de grup şi a câmpurilor calculate. Datele pot fi

modificate numai în câmpurile unde există posibilitatea să se insereze un cursor de

introducere de la tastatură; existenţa unui astfel de cursor semnifică acceptarea

editării în coloana respectivă.

Deplasarea în cadrul celulelor tabelului se face cu tastele săgeţi. Trecerea de la

o celulă, la celula vecină din dreapta sau la prima din rândul imedia t următor se face

cu tasta TAB. Deplasarea în sens invers se face apăsând concomitent Shift + TAB.

Page 41: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

41

Datele modificate dintr-o celulă sunt salvate imediat după părăsirea ei.

Revocarea modificărilor făcute în celula curentă se face apăsând ESC.

Pentru a revoca modificările din întreaga înregistrare, se face clic pe Anulare

din bara de instrumente de navigare în înregistrări sau opţiunea cu acelaşi nume din

meniul Editare. Această anulare nu mai este posibilă dacă se mai fac alte modificări

într-o altă înregistrare.

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

În modul Foaie de date, de obicei, este afişat în plus un articol gol evidenţiat

cu semnul „*‖. Acest articol nu este socotit în totalul articolelor. Dacă se

poziţionează cursorul pe acest articol, semnul * dispare până când se începe editarea

în articolul respectiv. În acel moment se adaugă imediat un nou articol gol marcat cu

„*‖.

De asemenea, un articol se adaugă imediat în plus în tabelă, când cursorul se

găseşte pe ultima celulă din ultimul rând şi se apasă tasta TAB sau Săgeată Dreapta.

Din panglica ferestrei ACCESS, pentru a se adăuga unui tabel o înregistrare

nouă, se poate utiliza instrumentul Nou, din grupul Înregistrări, fila Pornire.

Combinaţia de taste pentru realizarea acestei operaţi i este Ctrl + +.

Într-o tabelă se pot adăuga mai multe articole din alte zone ale tabelului, din

alte tabele sau chiar alte aplicaţii (Word, Excel) , prin intermediul ferestrei

Clipboard, prin operaţiile Decupare sau Copiere, cuplate cu operaţia Lipire.

Selectarea mai multor înregistrări dintr-un tabel se face glisând cu mouse-ul

pe zona de selecţie situată la începutul rândurilor. Odată selectate articolele dorite de

a fi adăugate, se selectează fila Pornire a panglicii ACCESS, opţiunea Decupare sau

Copiere, se selectează rândul din tabel marcat cu „*‖ şi apoi cu opţiunea Lipire (din

acelaşi grup de instrumente) se adaugă articolele, nu înainte de a se cere confirmarea

de la utilizator pentru a se realiza adăugarea acestor articole.

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

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

are prevăzute instrumentul Ştergere în fila Pornire din Panglica Office a aplicaţiei

ACCESS. Instrumentul are trei funcţiuni, putând fi folosit atât pentru şte rgerea

conţinutului celulei curente, a înregistrării curente sau a câmpului curent.

Ştergerea înregistrării curente dintr-o tabelă se poate face şi alegând din

meniul generat de sistem, după ce s-a acţionat printr-un clic dreapta pe una sau mai

multe înregistrări selectate opţiunea Ştergere înregistrare.

Page 42: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

42

Dacă se selectează această opţiune din meniu, după ce sunt selectate mai multe

înregistrări, atunci aceste înregistrări vor fi şterse, împreună cu înregistrările în

cascadă, dacă sunt definite relații între tabele în bazele de adte.

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

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

jos.

În mod similar, dacă se selectează una sau mai multe coloane, şi se face clic

drepata pe selecţie, se pot şterge câmpuri din tabelă. şi această ştergere necesită

confirmarea operatorului. Câmpurile pot fi şterse şi cu instrumentul Ştergere din

grupul Câmpuri şi coloane, fila Instrumente tabel/Foaie de date.

Exerciţii:

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

baza acesteia, în mediul Access, a cărui denumire va fi ANG şi în care se

adaugă, ca înregistrări, datele.

ANG

NrAng NumeA Fnc Csf DataAnga Sal Rate NrDept

2000 CHIVU SOFER 2956 23.02.1999 950 30

2555 CONTRA VANZATOR 2956 19.12.2000 1250 1400 30

2049 DOROS INGINER 2553 31.10.2000 2975 20

2731 MARCU ANALIST 2049 19.03.1999 3000 20

2956 NEGRU INGINER 2553 11.01.1999 2850 30

2084 OSAN ANALIST 2049 19.12.2000 3000 20

2789 POPA VANZATOR 2956 26.03.1999 1250 500 30

2396 POPAN SOFER 2084 13.01.1999 800 20

2553 RUSU DIRECTOR 19.02.1999 5000 10

2024 TULIAN VANZATOR 2956 23.01.1999 1500 30

2987 VUSCA VANZATOR 2956 15.09.1999 1600 300 30

2643 ZIMAN INGINER 2553 14.10.1999 2450 10

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

1.2.

Page 43: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

43

2.3. Crearea relaţiilor între tabele

Relaţiile dintre tabele pot fi percepute logic în cadrul schemei conceptuale4

sau pot fi specificate şi salvate în baza de date.

Specificarea unei relaţii dintre tabele în baza de date, se realizează cu

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

Pentru a putea stabili o relaţie între două tabele sunt necesare două condiţii:

► tabelul sursă a relaţiei să aibă o cheie primară (un câmp de identificare cu

valori unice şi diferite de Null);

► tabelul destinaţie trebuie să aibă un câmp cheie străină, de acelaşi tip de

dată şi dimensiune cu cheia primară.

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

de alegere a tabelelor între care se

stabilesc relaţiile.

Se aleg tabelele de lucru cu dublu

clic al mouse-ului iar apoi se închide

fereastra acţionându-se asupra butonului

Închidere.

Exemplificăm acest lucru cu două

tabele Prod şi FactProd.

Stabilirea relaţiei se poate face

glisând, în fereastra relaţii, câmpul

cheie primară peste câmpul cheie

străină. Automat este afişată fesreastra Editare relaţii, în care se precizează

câmpurile prin care se realizează relaţia şi tipul de integritate referenţială impusă.

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

4 Schema conceptuală reprezintă descrierea fenomenelor din realitatea înconjurătoare cu ajutorul

entităţilor şi atributelor şi a legăturilor dintre acestea.

Page 44: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

44

O relaţie între tabele este reprezentată printr-o linie de relaţie trasată între

tabelele din fereastra Relaţii. O relaţie care nu are impusă integritatea referenţială

apare ca o linie subţire între câmpurile comune care acceptă relaţia. Când relaţia este

selectată, făcând clic pe linia sa, linia este afişată îngroşat. Cu dublu clic se pot

reedita condiţiile ei. Dacă este impusă integritatea referenţială pentru o relaţie, linia

apare îngroşată la fiecare capăt. În plus, numărul 1 apare deasupra porţiunii îngroşate

a liniei în partea unu a relaţiei, iar simbolul infinit (∞) apare deasupra liniei în

cealaltă parte.

Exerciţiu:

Creaţi relaţiile între tabelele create în ultimul exerciţiu al subcapitolului

precedent.

Page 45: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

45

CAPITOLUL III. UTILIZAREA INFORMAŢIILOR

DINTR-O BAZĂ DE DATE

3.1. Conectarea la o bază de date existentă

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

managementului acestora e diferită în funcţie de tipul bazelor de date, păstrând

particularitatea SGBD-ului în care a fost definită şi creată colecţia de date. În scopul

utilizării selective, raţionale, distribuite, eficiente şi securizate a datelor, interogările

asigură conectarea la informaţiile din tabelele bazelor de date. Prin intermediul

interogărilor, informaţiile din tabelele bazelor de date pot fi utilizate ca sursă de

înregistrări pentru formulare şi rapoarte. Obiectele din ACCESS pot prelua informaţii

din baze de date de tip Access, dar şi de tip SQL-Server, MSDE, sau chiar MySQL şi

FoxPro. Preluarea informaţiilor din tabele acestor baze de date presupune conectarea

aplicaţiei realizată de utilizator la aceste baze de date existente.

O aplicaţie Access poate include tabele proprii, iar conectarea la acestea este

automată. Conectarea la tabele din alte baze de date, chiar de tipul Access, neincluse

în aplicaţia curentă, este o operaţie dificilă şi se poate realiza cu ajutorul obiectelor

de tip module Visual Basic for Application, care recurg, la rândul lor, la interogări.

3.2. Căutarea datelor cu ajutorul instrumentelor mediului

Access

Căutarea informaţiilor în bazele de date presupune localizarea câmpurilor şi

înregistrărilor în care sunt stocate.

Pentru căutarea sau modifcarea unei înregistrări, fie că se lucrează într-un

tabel, într-un formular sau interogare, se alege din meniu opţiunea din fila Pornire a

Panglicii Microsoft Office, unul dintre instrumentele de Căutare, Găsire şi/sau

Înlocuire, sau Salt la .

Page 46: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

46

Se afişează fereastra cu titlul Căutare şi înlocuire, existentă în toate aplicaţiile

pachetului Microsoft Office, cu câteva particularităţi specifice pentru lucrul cu

bazele de date. În caseta de text De căutat, se scrie textul care trebuie căutat.

Ultimele şiruri căutate, rămân în istoricul din lista ascunsă ataşată casetei, şi

la nevoie pot fi readuse.

Cătarea se face doar în câmpul curent sau în întreg tabelul, în funcţie de

opţiunea aleasă din lista Privire în:.

Şirul căutat trebuie să se potrivească cu începutul câmpului, cu întreg câmpul

sau cu o parte oarecare din câmp, după cum se alege din lista Potrivire:. De exemplu,

dacă se caută textul os într-un catalog de produse, dacă se alege prima opţiune, se pot

găsi articole în care există câmpuri care încep cu textul os (osânză, os, ospen, etc);

dacă se alege a doua opţiune, se pot găsi doar acele articole în care există câmpuri

care conţin cuvântul os şi nimic altceva; dacă se alege a treia opţiune, se pot găsi

articole în care există câmpuri care conţin textul os (osânză, costume, costiţe, os,

ospen, etc). Articolele în care se caută pot fi: de la articolul curent în sus, în jos sau

printre toate articolele din tabel.

În fine, se poate bifa caseta de selecţie Potrivire litere mari şi mici dacă se

doreşte să se facă căutări insensibile la litere mari sau mici sau se poate bifa caseta

de selecţie Căutare în câmpuri după format pentru a se ţine cont de formatul de

afişare a datelor din câmpuri.

3.3. Crearea unei interogări simple

Specifică bazelor de date relaţionale, cum sunt şi bazele de date Access, este

uşurinţa de a crea interogări. Prin deschiderea pe care o au pentru a răspunde acestor

interogări, bazele de date pot constitui obiectul aplicaţiilor scrise în oricare limbaj de

programare modern.

Interogarea bazei de date permite, în principal, extragerea şi afişarea unor

informaţii din înregistrările din una sau mai multe tabele; înregistrări care verifică

anumite condiţii, care sunt grupate în funcţie de anumite criterii sau sunt ordonate

crescător sau descrescător.

Termenul "interogare" este sensul principal al cuvântului englezesc "Query".

În bazele de date relaţionale acest termen are un sens mai larg. Acest termen se

referă, pe lângă interogările de extragere (selecţie) şi la aşa -zisele interogări de

acţiune (de creare, de ştergere sau actualizare) pentru tabele le şi elementele lor

constitutive. Lucrul cu interogările este posibil prin implementarea limbajului SQL

într-un SGBD.

Interogările sunt în ultimă instanţă, comenzi ale unui limbaj simplu, structurat

de manevrare a informaţiilor din tabelele unei baze de date relaţionale. Acest limbaj

Page 47: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

47

se numeşte SQL (abreviere pentru sintagma din limba engleză: structured query

language, care se traduce în limba română: limbaj structurat de interogare).

Rezultatul execuţiei unei cereri, în majoritatea limbajelor, se numeşte vedere,

deoarece este un cadru în care sunt accesibile o anumită parte a informaţiilor din

baza de date. Cele mai importante moduri de vizualizare a interogărilor sunt: mo dul

proiectare, foaie de date şi vizualizare SQL. Important de reţinut este faptul că e

vorba despre acelaşi conţinut, etalat în trei moduri diferite de vizualizare.

Dintre aceste posibilităţi, modul proiectare este cel mai recomandat pentru a

crea interogări în mod eficient (interogări simple).

Pentru a crea o cerere de interogare în modul proiectare se parcurg paşii:

Din fila Creare, din ultimul grup de instrumente se face clic pe butonul

Proiectare interogare.

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

Se afişează o casetă de dialog cu titlul Afişare tabel care conţine cadrele de

pagini Tabele, Interogări şi Ambele. În aceste cadre de pagină sunt afişate toate

tabelele şi interogările din baza de date curentă. Interogarea care va fi creată va

conţine rânduri şi coloane derivate din tabelele sau interogările pe care utilizatorul le

va extrage din caseta Afişare tabel. Pentru a extrage obiecte, se face dublu clic pe

numele fiecărui obiect care se doreşte a fi folosit. Această casetă de afişare a

tabelelor se ascunde printr-un clic pe butonul Închidere.

Page 48: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

48

Automat apare vizibililă ultima filă cu instrumente de lucru pentru

interogări, şi anume fila Instrumente interogări/Proiectare.

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

În partea de sus sunt afişate casetele cu structuri de înregistrări ale

tabelelor sau interogărilor selectate din caseta afişare tabel. Dacă nu e vizibilă caseta

Afişare tabel, acest lucru se poate face selectând din panglică instrumentul Afişare

tabel sau făcând clic dreapta şi apoi selectare Afişare tabel.

Partea de jos a ferestrei se numeşte grilă de proiectare (design grid), şi

conţine elemente cu ajutorul cărora se pot construi interogări . Aceasta mai este

cunoscută şi sub numele de grilă QBE (Prescurtare de la sintagma din limba engleză:

Query By Exemples care poate fi tradusă în româneşte Interogare prin exemple).

Câmpurile se pot prelua din structurile sursă prin glisarea lor din casetele de

structuri în primul rând al grilei QBE (rândul Câmp), unde se înscriu câmpurile

interogării rezultate. Câmpurile pot fi înscrise şi efectiv în această linie sau alese din

lista ascunsă ataşată liniei câmp din grilă.

Dacă se doreşte aducerea tuturor câmpurilor dintr-o tabelă, se scrie semnul

„*‖ în rândul câmpurilor, iar în rândul tabel se înscrie tabelul în cauză.

Pe lângă câmpurile preluate din tabele le sau interogările disponibile,

interogările pot conţine şi câmpuri calculate. Calculele se pot face linie cu linie sau

pe grupuri de înregistrări. Pentru a se obţine o coloană în primul caz, se înscrie în

linia Câmp formula de calcul care are forma generală:

Nume-rezultat: expresie_aritmetică_sau_logică

De exemplu: Valoarea: cantitate*[Pret unitar]

vârsta: (Date() - [data naşterii])/365

NB: Expresia Date() se referă reprezintă o funcţie care returnează data

sistemului.

Exerciţii:

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

TVA.

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

Page 49: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

49

Rezolvare:

1. În fila Creare a

panglicii, se alege

penultima opţiune

Proiectare interogare. În

caseta Afişare tabel se

selectează „Prod‖, se

apasă Adăugare şi apoi

Închidere.

Se glisează apoi

câmpurile DenProd şi UM

din caseta cu structura

tabelului „Clienti‖ în

rândul Câmp din grila

QBE, iar pentru al treilea câmp se scrie expresia "pret cu TVA": [pret]*1,19.

Lansarea în execuţie a interogării se face apăsând butonul cu semnul „!‖ din

fila specială de instrumente de proiectare interogări din panglică. Pentru eventualele

modificări se alege din nou modul proiectare din meniul primei op ţiuni, Vizualizare,

din fila mai sus amintită.

2. Se alege din meniul

Vizualizare din panglică,

opţiunea Vizualizare SQL şi

se obţine comanda:

SELECT

CLIENTI.Dencli,

CLIENTI.Adresa,

CLIENTI.Telcli

FROM CLIENTI;

Plasăm în figură

interogarea în modurile

foaie de date şi SQL.

Pentru a face calcule

pe grupuri de înregistrări, trebuie adăugată o linie, cu numele Total, în grila QBE,

acţionând în panglică asupra butonului Σ Totaluri. Celulele din această linie trebuie

neapărat să conţină ceva dacă este bifată caseta din rândul afişare a coloanei la care

se referă. În acest caz, pe rândul total trebuie să existe, fie expresia Grupare după,

fie o funcţie de grup (sumă, medie, contor, min, max, etc).

Page 50: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

50

Exerciţiu:

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

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

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

Rezolvare:

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

„ANG‖. În grila QBE, prima coloană , în prima celulă se face clic şi apoi se înscrie :

vechimea:(Date() - DataAnga)/365

În panglică se acţionează asupra butonului Σ Totaluri pentru a se adăuga

rândul Total la grilă. În acest rând, la coloana vechimea se alege din lista ataşată,

funcţia Medie.

Se lansează în execuţie interogarea. Comanda SQL corespunzătoare este

afișată în medalion în figură. Și rezultatul execuției interogării este suprapus într -un

medalion peste figură.

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

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

Page 51: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

51

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

„ANG‖. În grila QBE, prima coloană se alege câmpul „NrDept‖, iar în a doua se

alege câmpul „Sal‖. Se adaugă linia de total, în care se înscrie pentru prima coloană

Grupare după iar la a doua coloană se alege funcţia Sum.

Se lansează în execuţie interogarea, iar rezultatul şi comanda SQL

corespunzătoare sunt:

3.4. Crearea interogărilor peste mai multe tabele

Pentru formularea unor cereri de interogare bazate pe mai multe tabele sau

interogări, este necesar ca între acestea să existe legături. Dacă relaţiile au fost create

prin funcţiunea Relaţii din fila Instrumente bază de date, precum s-a explicat în

capitolul anteriror, relaţiile pot fi considerate permanente. În afara acestora, există

unele relaţii stabilite în timpul executării interogărilor.

Primul tip de relaţii este vizibil, în mod automat, şi în partea de sus a ferestrei

pentru realizarea înregistrărilor.

Atunci când se încearcă o interogare din mai multe tabele şi/sau cereri de

interogare, trebuie verificată natura reală a relaţiilor dintre acestea pentru ca datele

din noua interogare să fie corespunzătoare cerinţelor problemei.

O relaţie care nu a fost definită corect duce la rezultate inexplicabile.

Dacă se face o cerere de interogare din două tabele cu un număr de n şi

respectiv m înregistrări, şi nu se stabileşte nici o relaţie între tabelele sursă, atunci

rezultatul va conţine m x n înregistrări.

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

FROM ANG

GROUP BY ANG.NrDept;

NrDept Suma salariu pe departamente

10 7450

20 9775

30 9400

Page 52: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

52

Explicarea stabilirii relaţiilor în interogări, o vom exemplifica cu ajutorul a

două tabele: „Prod” şi „FactProd”, care au structurile ce pot fi deduse din

conţinutul prezentat în figură:

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

„Prod” spre „FactProd‖. Acest lucru trebuie înţeles prin faptul că fiecare produs

poate fi conţinut în mai multe facturi.

Dacă nu există legăturile necesare între tabele, acestea se pot stabili doar

pentru interegarea curentă, printr-o procedură similară stabilirii relaţiilor între

tabelele bazelor de date, prin glisarea mouse-ului de pe câmpul de legătură din tabela

principală spre câmpul de legătură din tabela secundară.

Cele două câmpuri trebuie să fie de acelaşi tip şi dimensiune şi pot fi chei

primare sau externe. Dacă deja există o legătură, permanentă sau propusă de sistem,

caracteristicile acesteia pot fi modificate sau pur şi simplu legătura poate fi ştearsă.

În stabilirea relaţiilor în interogări, există trei posibilităţi (vez i figura cu

proprietăţi de asociere):

Page 53: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

53

Pentru prima posibilitate, relaţia este definită astfel încât, în asocierea celor

două tabele se iau înregistrările pentru care câmpurile de relaţie au valori egale. Este

cel mai întâlnit tip de relaţie, se numeşte echicompunere şi, în exemplul nostru, se

descrie în comanda SQL, astfel:

FROM [Prod] INNER JOIN FactProd ON Prod.Codpro = FactProd.Codprod

Pentru cea de a doua posibilitate, relaţia este definită astfel încât, în asocierea

celor două tabele se iau toate înregistrările din catalog, şi înregistrările din rulaj

pentru care câmpurile de relaţie au valori egale. Relaţia se numeşte compunere

externă stânga. În exemplul nostru, în comanda SQL, relaţia este descrisă astfel:

FROM [Prod] LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod

În cea de a treia posibilitate, relaţia este definită astfel încât, în asocierea celor

două tabele, se iau toate înregistrările din rulaj, şi înregistrările din catalog pentru

care câmpurile de relaţie au valori egale. Pentru exemplul nostru, în comanda SQL,

relaţia este descrisă astfel:

FROM [Prod] RIGHT JOIN FactProd ON Prod.Codpro = FactProd.Codprod

Exerciţiu:

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

facturi. Să se verifice rezultatul obţinut prin cele 4 posibilităţi din punct de vedere al

asocierii: cele 3 din figura de mai sus şi ruperea legăturii.

Page 54: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

54

Rezolvare:

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

„Prod” şi „FactProd‖. Se glisează apoi câmpurile NrFact, DataFact, DenProd

casetele cu structurile tabelelor în rândul Câmp din grila QBE, iar pentru al patrulea

câmp se scrie expresia Pret*Cant.

În primul caz vom verifica rezultatul dacă nu există nici o legătură între

tabele, apoi se verifică rezultatul în celelalte 3 posibilităţi de asociere. Rezultatele

obţinute sunt prezentate în tabelul următor:

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

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

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

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

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

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

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

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

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

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

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

2 22.10.2009 Lapte 87,00 Malai

2 22.10.2009 Malai 67,50

5 24.10.2009 Ulei 81,75

5 24.10.2009 Zahar 77,50

5 24.10.2009 Lapte 72,50

5 24.10.2009 Malai 56,25

5 24.10.2009 Ulei 35,97

5 24.10.2009 Zahar 34,10

5 24.10.2009 Lapte 31,90

5 24.10.2009 Malai 24,75

5 24.10.2009 Ulei 65,40

5 24.10.2009 Zahar 62,00

5 24.10.2009 Lapte 58,00

5 24.10.2009 Malai 45,00

6 25.10.2009 Ulei 49,05

6 25.10.2009 Zahar 46,50

6 25.10.2009 Lapte 43,50

6 25.10.2009 Malai 33,75

Page 55: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

55

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

Nrf

ac

t

Da

tafa

ct

De

nP

rod

Va

l

3 22.10.2009 Ulei 58,86

3 22.10.2009 Zahar 55,80

3 22.10.2009 Lapte 52,20

3 22.10.2009 Malai 40,50

4 23.10.2009 Ulei 39,24

4 23.10.2009 Zahar 37,20

4 23.10.2009 Lapte 34,80

4 23.10.2009 Malai 27,00

4 23.10.2009 Ulei 49,05

4 23.10.2009 Zahar 46,50

4 23.10.2009 Lapte 43,50

4 23.10.2009 Malai 33,75

În primul caz, atunci când nu au fost definite legături între tabele, s -au făcut

asocieri pentru fiecare dintre cele 4 tupluri din primul tabel (cu structura DenProd –

câmp individual şi Pret – ca parte componentă pentru Val) cu fiecare dintre cele 10

tupluri din al doilea tabel (cu structura NrFact şi DataFact – câmpuri individuale şi

Cant – ca parte componentă pentru Val). Au rezultat 40 de articole.

În cel de-al doilea caz s-au făcut asocieri doar petru tuplurile care provin din

articole în care Prod.Codpro = FactProd.Codprod, rezultând 10 articole.

Pentru cel de-al treilea caz s-a făcut adăugare la rezultatul cazului doi,

tuplurile din tabelul Prod care nu au corespondent în tabelul FactProd (e vorba de

produsul Malai).

În cel de-al patrulea caz, s-ar fi făcut adăugiri la rezultatul cazului al doilea,

tupluri din tabelul FactProd care nu au corespondent în tabelul Prod, dar nu au fost

găsite.

Exerciţiu:

Să se extragă din tabelele „Clienti”, „FactGen”, „Prod” şi „FactProd‖

valorile din toate câmpurile şi din toate înregistrările, respectând relaţiile dintre

tabele.

Rezolvare:

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

„Clienti”, „FactGen”, „Prod” şi „FactProd‖. Se glisează apoi câmpurile celor patru

tabele, avându-se grijă ca dintre câmpurile de relaţie să fie incluse doar o parte,

Page 56: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

56

salvăm interogarea cu numele totul si toate.

totul si toate

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

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

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

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

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

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

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

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

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

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

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

3.5. Selecţia şi sortarea datelor

Datele rezultate pot fi ordonate crescător sau descrescător, după unul sau mai

multe câmpuri. Pentru aceasta se realizează clic în celula de la intersecţia coloanei

câmpului cu caseta Sortare şi apoi se alege între Ascendentă sau Descendentă.

În cazul în care se specifică mai multe câmpuri de ordonare (chei de sortare),

operaţia se execută începând cu primul câmp din stânga introdus în expresia de

sortare şi continuând cu celelalte, spre dreapta.

Dacă succesiunea câmpurilor de sortare este alta decât la afişare, trebuie

introduse câmpuri care nu se afişează dar sunt intercalate în succesiunea de ordonare

dorită. Succesiunea câmpurilor de sortare influenţează rezultatul operaţiei de sortare

a articolelor.

Operaţia de selecţie se referă atât la selecţia informaţiilor din coloane, dar şi

la selecţia informaţiilor din rânduri. Pentru realizarea acestui aspect există linia

Criterii, unde se introduc criteriile de selecţie. Criteriile se înscriu în formatul:

Operator_relaţional expresie

Operator_relaţional poate fi =, >, <, >=, <=, !=, between, in etc.

Dacă nu se specifică niciun operator se consideră a fi semnul „=‖. Criteriile se

pot compune cu ajutorul operatorilor logici AND/OR şi o serie de cuvinte rezervate şi

expresii definite de utilizatori.

Exerciţiu:

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

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

Page 57: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

57

Rezolvare:

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

câmpuri ale interogării: [NumeA], [Fnc], [DataAnga] şi [Sal] . Câmpul DataAnga şi

Sal nu trebuie bifate la rândul Afişare şi la Criterii trebuie înscris >10, iar în rândul

Sortare pentru [DataAnga] se selectează Ascendentă.

Grila QBE este redată în figura de mai jos:

3.6. Salvarea unei interogări

Salvarea unei interogări se face la părăsirea ei, sau prin alegerea opţiunii de

meniu Salvare sau Salvare ca…, din meniul Butonului Office . O interogare

salvată poate fi folosită în obiecte ca şi cum ar fi un tabel, în special ca sursă de

înregistrări pentru formulare sau rapoarte. De asemenea, interesant es te faptul că o

interogare poate fi salvată sub formă de raport sau interogare.

3.7. Adăugarea şi eliminarea filtrelor

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

selectează o anumită parte din date, pot ordona aceste date , pot furniza surse de date

pentru formulare sau rapoarte, permit modificarea informaţiilor din cadrul rezultat.

Chiar şi formatul ecranului pentru construcţie asistată a filtrului sau

înregistrărilor sunt foarte asemănătoare.

Page 58: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

58

Alegerea filtrului în locul înregistrărilor este motivată atunci când operaţia de

extragere de informaţii este mai simplă. Dacă extragerea de informaţii este mai

laborioasă, atunci este de preferat să se aleagă interogările.

Există mai multe categorii de filtre. Probabil, cel mai simplu este filtrul de

selecţie, stabilit prin acţionarea instrumentului cu acelaşii nume, din fila Pornire a

panglicii Accesss. Dacă un tabel sau o interogare este vizualizată în modul Foaie

date, atunci când cursorul este într-o anumită celulă şi se face clic pe butonul

Selecţie din grupu Sortare şi selecţie, se selectează din foaia de date toate

înregistrările care au în câmpul curent o valoare care faţă de valoarea aleasă poate fi:

aceeaşi; diferită; mai mică; mai mare; sau într-un interval.

Filtrarea se mai poate efectua cu un clic dreapta aplicat unui câmp, într -un

tabel se deschide un meniu care are ca prime opţiuni operaţii de filtrare:

Filtrare prin selecţie;

Filtrare cu excluderea selecţiei;

Filtrare pentru…;

Eliminare Filtrare/sortare.

Filtrarea prin selecţie e descrisă în alineatul precedent şi redată în figura

următoare.

Page 59: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

59

Filtrarea cu excluderea selecţiei extrage articolele care nu apar în cazul

anterior.

La Filtrare pentru se poate da un criteriu de căutare în câmpul curent. Dacă

pentru criteriu de selecţie se dă un text simplu, practic funcţionarea este identică cu

Filtrarea prin selecţie. Dar acest filtru este mai complex deoarece în caseta pentru se

pot introduce expresii, ca de exemplu:

Mai mic „<‖ sau mai mare „<‖ decât anumite valori numerice sau literare;

caracterul joker „*‖ pentru realizarea de expresii de forma „contine text‖,

„începe cu textul‖, „se termină cu textul‖, sau negarea acestor expresii etc.

Filtrele se pot aplica prin suprapunere, mereu reducându-se numărul

înregistrărilor. Revenirea la situaţia iniţială se face selectând din meniu opţiunea

Comutare filtrare.

Filtrele mai complexe se pot executa cu opţiunea Filtrare complexă, prin care

utilizatorul este ajutat să efectueze filtrări ale datelor cu ajutorul unei grile

asemănătoare grilei QBE (Vezi figura):

3.8. Limbaj Structurat de Interogare SQL (Structured Query

Language)

3.8.1. Limbajul SQL

Probabil că limbajul SQL este astăzi cel mai utilizat dintre limbajele

structurate pentru interogarea bazelor de date relaţionale. SQL a devenit chiar un

standard pentru o gamă din ce în ce mai largă de sisteme de gestiune a bazelor de

date. Mai mult, toate limbajele de programare care vor să asigure utilizatorilor

posibilităţi de comunicare complexă şi rapidă cu bazele de date , au încorporată o

Page 60: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

60

formă mai mult sau mai puţin dezvoltată de SQL. Pe lângă manipularea şi regăsirea

datelor, se efectuează şi operaţii complexe privind actualizarea şi administrarea bazei

de date.

SQL eare un set de comenzi în limba engleză, simple şi clare, care poate fi

utilizat atât de specialişti cât şi de nespecialişti. Nu este un limbaj procedural, nu are

proceduri de control, fiecare SGBD având un motor care are printre func ţiuni sarcina

optimizării cererilor.

Limbajul SQL foloseşte cuvintele select, insert, delete ca părţi ale setului de

comenzi.

SQL pune la dispoziţia programatorilor comenzi pentru rezolvarea unor

probleme ca:

date interogate;

inserarea, extragerea şi ştergerea rândurilor intr-un tabel;

crearea, modificarea şi ştergerea obiectelor de tip baza de date;

controlul accesului la baza de date şi la obiectele de tip baza de

date;

garantarea consistentei bazei de date.

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

bazelor de date relaţionale, System R, de către compania IBM, la mijlocul anilor

1970. În 1979, Corporaţia Oracle introduce prima implementare a SQL în varianta

comercială.

Există un anumit grad de standardizare a limbajului SQL, mai multe sisteme

de gestiune a bazelor de date recunoscând principalele instrucţiuni ale acestuia (de

exemplu: Oracle, Access, Sysbase etc.).

Pe plan mondial, standardul în domeniu este considerat ANSI (American

National Standards Institute).

SQL are în vedere atât aspectele de definire, interogare, manipulare a datelor,

procesare a tranzacţiilor, cât şi caracteristicile complexe privind integritatea

informaţiilor, cursoarele derulante sau joncţiunile externe. Mulţi producători de

sisteme de gestiune a bazelor de date furnizează propriile extensii ale limbajului

SQL, asigurându-şi astfel exclusivitatea.

ACCESS utilizează versiuni standardizate ale SQL, prin setarea mediului la

SQL ANSI-89 sau SQL ANSI-92. Mediul ACCESS încurajează utilizarea limbajului

SQL în scopul optimizării şi eficientizării lucrului cu bazele de date.

SGBD-urile manipulează, prin prisma instrucţiunilor SQL, structuri de date,

instrucţiunile SQL reprezentând unul dintre modurile de vizualizare al diferitelor

colecţii şi structuri de date. Astfel comenzile SQL pot fi plasate în multe locuri din

ACCESS, acolo unde se introduce numele unui tabel, al unei interogări sau al unui

câmp.

Page 61: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

61

În unele cazuri, ACCESS completează automat instrucţiunea SQL. De

exemplu, atunci când se utilizează un expert pentru a crea un formular sau raport care

preia date din mai multe tabele, ACCESS creează automat o instrucţiune SQL pe care

o utilizează ca setare pentru proprietatea Sursă înregistrări a formularului sau

raportului. Atunci când trebuie creată o casetă listă sau combo cu un expert, ACCESS

creează o instrucţiune SQL şi o utilizează ca setare pentru proprietatea Sursă

înregistrări a casetei listă sau a casetei combo.

De asemenea, SQL poate fi utilizat în:

► Argumentul Instrucţiune SQL al acţiunii de macrocomandă ExecuţieSQL.

Această facilitate este uzitată şi de limbajele clasice de programare pentru

acces la bazele de date.

► În cod, ca şir de caractere literale sau ca instrucţiune SQL care conţine

variabile şi controale.

► Proprietatea SQL a unui obiect QueryDef pentru a modifica instrucţiunea SQL

subordonată unei interogări.

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

concepere automată a interogărilor folosind tehnica grafică a grilei QBE, prin care

informaţia definită şi apoi modificată pe grila QBE este automat transformată într-o

instrucţiune SQL care este posibil de vizualizat sau actualizat în modul Vizualizare

SQL. Grila QBE are limite în realizarea de interogări complexe, motiv pentru care

însuşirea temeinică a clauzelor comenzilor limbajului SQL este indispensabilă în

realizarea unei activităţi de proiectare, administrare şi utilizare a bazelor de date.

Implementările în diferite limbaje SQL diferă câte puţin, fiecare prin sintaxă.

În ACCESS principalele reguli sunt redate mai jos:

► o comandă se încheie cu ";" ;

► comenzile SQL pot fi pe una sau mai multe linii;

► clauzele sunt uzual plasate pe linii separate;

► comenzile SQL nu sunt 'case sensitive';

► într-o interogare unde se folosesc câmpuri din mai multe tabele, pentru a

separa numele tabelului de numele câmpului, se va utiliza modelul:

tabel.câmp;

► dacă se folosesc spaţii sau diacritice în numele câmpurilor sau tabelelor,

aceste nume trebuie să fie încadrate între paranteze drepte;

► elementele din listele diferitelor clauze sunt separate prin virgulă;

► valorile de tip şir de caractere sunt încadrate între apostrof sau ghilimele;

► în expresiile din cadrul clauzelor se folosesc operatorii aritmetici,

relaţionali şi logici obişnuiţi din informatică;

Page 62: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

62

► simbolurile „?‖ şi „*‖ sunt folosite pentru a desemna unul sau mai multe

caractere de înlocuire5;

► valorile de tip dată/timp sunt încadrate cu caracterul „#‖.

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

utilizează metalimbajul. Când în descrierea unei instrucţiuni anumite părţi

constitutive por să lipsească, acestea sunt intercalate între paranteze6 drepte [ ]. Dacă

dintre câteva elemente este necesară optarea penntru unul dintre ele, elementele sunt

intercalate între acolade { }, separate de caracterul pipeline |. Dacă un anumit tip de

componentă se poate repeta, acest fapt se notează cu trei puncte „…‖.

3.8.2. Comenzi destinate tabelelor

Principalele comenzi SQL pentru definirea datelor sunt următoarele:

CREATE TABLE,

ALTER TABLE,

DROP TABLE,

CREATE INDEX.

Pentru crearea unei tabele se utilizează comanda:

CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2

type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]]) .

Printre cele mai importante tipuri de date folosite amintim: Character, Memo,

Number, Integer, Decimal, Logical, Date, OLE Object etc. Numele tabelei trebuie să

fie unic în cadrul bazei de date şi să respecte cerinţele identificatorilor. Aceleaşi

cerinţe apar şi pentru numele câmpurilor, în plus există posibilitatea duplicării lor în

cadrul bazei de date, dar se păstrează unicitatea în tabelă. Clauza NOT NULL arată că

în câmpul respectiv nu se pot stoca valori de tip NULL.

Un alt exemplu pentru crearea unei tabele ANG pe care o vom folosi în

capitolele următoare, este comanda:

CREATE TABLE ANG (NrAng integer NOT NULL, NumeA text(10), Fnc

text(10), CSf integer, DataAnga DATE, Sal currency, Rate currency, NrDept integer

NOT NULL);

5 Caractere jocker

6 A nu se confunda cu utilizarea acestor paranteze în metalimbaj cu utilizarea lor în VBA pentru

delimitarea numelor de identificatori compuse din mai multe cuvinte

Page 63: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

63

Pentru modificarea structurii unui tabel se utilizează comanda ALTER TABLE

cu următoarea sintaxă (simplificată):

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

[CONSTRAINT index] | ALTER COLUMN tip de câmp[(dimensiune)] |

CONSTRAINT multifieldindex} |

DROP {COLUMN field I CONSTRAINT indexname} }

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

ALTER TABLE ANG ADD ALTER COLUMN NrDept Byte.

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

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

3.8.3. Instrucţiunile de selecţie a datelor

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

instrucţiune conţine mai multe clauze, dintre care doar primele două sunt obligatorii.

Pentru definirea interogărilor de selecţie simple se utilizează următoarea

sintaxă7:

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

[AS alias2] [, ...]]}

FROM expresie pentru tabele [IN bază de date externă]

[WHERE... ]

[GROUP BY... ]

[HAVING... ]

[ORDER BY... ]

[WITH OWNERACCESS OPTION]

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

de date asupra căreia se efectuează selecţia şi poate fi:

ALL: permite includerea tuturor înregistrărilor ce îndeplinesc condiţiile

impuse. Cum frazele SELECT tabelă şi SELECT ALL tabelă au practic

acelaşi rezultat, calificativul ALL este destul de rar utilizat;

DISTINCT: are ca efect eliminarea înregistrărilor care conţin duplicate în

câmpurile selectate, astfel se va afişa doar o apariţie a datei multiple;

7 Conform ajutorului Access

Page 64: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

64

DISTINCTROW: are în vedere înregistrările duplicate în ansamblul lor, nu

numai pe cele care au câmpuri duplicate;

TOP: are ca efect prezentarea primelor articole rezultate, ca procent din

total sau în număr absolut.

Ceea ce urmează după predicat în prima clauză formează o listă de selec ţie în

care sunt cuprinse toate câmpurile care vor apărea în tabelă cu rezultatele interogării.

Câmpurile adăugate în rândul Field din grila Query a machetei grafice QBE, care au

marcată caseta de validare Show, sunt aceleaşi cu cele menţionate în lista de selecţie.

Simbolul „*‖ are rol de caracter jocker.

De fapt în această listă pot fi incluse şi expresii care pot sau nu să fie

sensibile la articolele din tabelele sursă. De asemenea, în scrierea interogărilor de

selecţie simple SQL ACCESS este posibilă şi folosirea funcţiilor totalizatoare. Cele

mai importante funcţii din această categorie sunt:

COUNT: returnează numărul de înregistrări care respectă condiţii le

stabilite prin clauza WHERE;

SUM: redă suma tuturor valorilor dintr-un câmp, operează numai cu valori

numerice;

AVG: calculează valoarea medie a unui câmp numeric;

MAX: permite determinarea celei mai mari valori dintr-un câmp;

MIN: duce la obţinerea celei mai mici valori a unui câmp rămâne valabilă

şi aici restricţia privind clauza WHERE.

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

rezultatelor obţinute sunt direct condiţionate de clauza GROUP BY.

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

pseudonim (nume) asociat unui câmp astfel: câmp AS alias al funcţiei agregat.

Clauza FROM specifică numele tabelei sau tabelelor care vor forma suportul

interogării. Dacă în lista_selecţie se includ câmpuri din mai multe tabele, în faţa

numelui acestora trebuie precizată tabela din care fac parte. Aşa cum arătam la

regulile de sintaxă, pentru separarea numelor de tabele se utilizează semnul „,‖

(virgulă). Trebuie să precizăm faptul că în cadrul acestei clauze se pot menţiona pe

lângă tabele, ca surse de informaţii pentru interogările SQL, şi interogări care au fost

deja create.

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

Pentru a selecta toate coloanele dintr-o tabelă se utilizează caracterul asterix

('*') după cuvântul SELECT.

Page 65: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

65

SELECT *

FROM ANG;

NrAng NumeA Fnc Csf DataAnga Sal Rate NrDept

2000 CHIVU SOFER 2956 23.02.1999 950 30

2555 CONTRA VANZATOR 2956 19.12.2000 1250 400 30

2049 DOROS INGINER 2553 31.10.2000 2975 20

2731 MARCU ANALIST 2049 19.03.1999 3000 20

2956 NEGRU INGINER 2553 11.01.1999 2850 30

2084 OSAN ANALIST 2049 19.12.2000 3000 20

2789 POPA VANZATOR 2956 26.03.1999 1250 500 30

2396 POPAN SOFER 2084 13.01.1999 800 20

2553 RUSU DIRECTOR 19.02.1999 5000 10

2024 TULIAN VANZATOR 2956 23.01.1999 1500 30

2987 VUSCA VANZATOR 2956 15.09.1999 1600 300 30

2643 ZIMAN INGINER 2553 14.10.1999 2450 10

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

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

precedenţă sunt cele obişnuite, funcţie de tipurile de date ale operanzilor sau

câmpurilor ce concură la realizarea expresiilor. În următorul exemplu se evaluează

prima dată înmulţirile (Sal * 12 şi Comp * 12); apoi cele două valori produs sunt

adunate.

SELECT NUMEA, SAL

FROM ANG;

NUMEA SAL

CHIVU 950

CONTRA 1250

DOROS 2975

MARCU 3000

NEGRU 2850

OSAN 3000

POPA 1250

POPAN 800

RUSU 5000

TULIAN 1500

VUSCA 1600

ZIMAN 2450

Page 66: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

66

SELECT NumeA, Sal *12 - Rate * 12

FROM ANG;

NumeA Expr1001

CHIVU

CONTRA 10200

DOROS

MARCU

NEGRU

OSAN

POPA 9000

POPAN

RUSU

TULIAN

VUSCA 15600

ZIMAN

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

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

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

FROM ANG;

SQL tratează corect valorile nule. Dacă apar în expresii, valorile nule

provoacă rezultatul Null, indiferent de tipul celorlaţi operatori implicaţi. Din păcate,

acest lucru se poate perpetua în obiectele în care aceste interogări vor fi folosite mai

departe. Pentru aceasta există funcţia Nz, care înlocuieşte expresiile Null cu o

anumită valoare, de obicei 0 pentru expresii care în mod firesc ar trebui să fie

numerice, "" pentru string, etc. Deci, pentru a face ca interogarea să funcţioneze

corect ea trebuie transformată sub următoarea formă:

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

VenitAnual

FROM ANG;I

NumeA VenitAnual

CHIVU 11400

CONTRA 10200

DOROS 35700

MARCU 36000

NEGRU 34200

OSAN 36000

POPA 9000

Page 67: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

67

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

VenitAnual

FROM ANG;I

NumeA VenitAnual

POPAN 9600

RUSU 60000

TULIAN 18000

VUSCA 15600

ZIMAN 29400

Prin clauza WHERE se pot selecta numai anumite articole, şi anume acelea

care îndeplinesc criteriul descris. Parametrul criteriului de selecţie este o expresie

care are rezultatul obligatoriu logic. În expresia clauzei WHERE obligatoriu trebuie

să apară cel puţin un câmp. Clauza WHERE este opţională şi nu operează cu funcţii

totalizatoare. În cadrul condiţiei din clauza WHERE pot fi utilizaţi operatorii

relaţionali: (>, >=, <, <=, =, !=), logici: (AND, OR, NOT) şi SQL: (IN, BETWEEN,

LIKE, IS NULL). Apelând la aceştia, este posibilă construirea unor condiţii mai

complexe.

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

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

SELECT ANG.NumeA, ANG.DataAnga

FROM ANG

WHERE [DATAANGA]<=#1/1/2000#;

NumeA DataAnga

POPAN 13.01.1999

VUSCA 15.09.1999

POPA 26.03.1999

NEGRU 11.01.1999

ZIMAN 14.10.1999

MARCU 19.03.1999

RUSU 19.02.1999

TULIAN 23.01.1999

CHIVU 23.02.1999

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

Page 68: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

68

SELECT ANG.NumeA, ANG.Fnc

FROM ANG

WHERE (((ANG.Sal)>1500 And (ANG.Sal)<3000))

ORDER BY ANG.DataAnga;

NumeA Fnc

NEGRU INGINER

VUSCA VANZATOR

ZIMAN INGINER

DOROS INGINER

Presupunem că dorim să găsim angajaţii care sunt şefi, au unul din numerele

de marcă aparţinând (CSf):

SELECT NrAng, NumeA, Sal, CSf

FROM ANG

WHERE NrAng IN (2553, 2049, 2956, 2084);

NrAng NumeA Sal CSf

2049 DOROS 2975 2553

2956 NEGRU 2850 2553

2553 RUSU 5000

2084 OSAN 3000 2049

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

foloseşte:

SELECT NrAng,NumeA,Fnc,Sal,NrDept

FROM ANG

WHERE Sal > 1500

AND Fnc = 'INGINER'

OR Fnc = 'VANZATOR';

NrAng NumeA Fnc Sal NrDept

2987 VUSCA VANZATOR 1600 30

2789 POPA VANZATOR 1250 30

2049 DOROS INGINER 2975 20

2555 CONTRA VANZATOR 1250 30

2956 NEGRU INGINER 2850 30

2643 ZIMAN INGINER 2450 10

2024 TULIAN VANZATOR 1500 30

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

peste 1500 se introduce:

Page 69: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

69

SELECT NrAng,NumeA,Fnc,Sal,NrDept

FROM ANG

WHERE Sal 1500

AND (Fnc = 'INGINER'

OR Fnc = 'VANZATOR');

NrAng NumeA Fnc Sal NrDept

2987 VUSCA VANZATOR 1600 30

2049 DOROS INGINER 2975 20

2956 NEGRU INGINER 2850 30

2643 ZIMAN INGINER 2450 10

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

exemplu operatorul OR este evaluat înaintea operatorului AND.

În astfel de operaţii complexe trebuie avută mare atenţie la precedenţa

operatorilor de toate tipurile, pentru că altfel rezultatul poate fi imprevizibil. Sumar,

regulile de precedenţă sunt redate în ceea ce urmează:

Toţi operatorii sunt aranjaţi într-o ierarhie, ceea ce le determină precedenţa.

Într-o expresie operaţiile sunt executate în ordinea precedenţei lor de la mare

la mică.

Când operatorii au precedenţa egală atunci ei se evaluează de la stânga l a

dreapta.

1. Toţi operatorii de comparaţie şi SQL au precedenţa egală:

=,!=,,<=,>=,BETWEEN...AND,IN,LIKE,IS NULL.

2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE

not(sal=2000))

3. AND

4. OR.

De fiecare dată când există dubiu despre care dintre două operaţii vor fi

executate mai întâi când o expresie este evaluată, se recomandă utilizarea

parantezelor pentru clarificarea semnificaţiei dorite şi obţinerii rezultatului scontat.

Clauza ORDER BY se utilizează atunci când se doreşte ca rezultatele

interogării să fie ordonate după unul sau mai multe câmpuri_criteriu (definite drept

chei de sortare). Sortarea este opţională şi se poate realiza în mod crescător (ASC)

sau descrescător (DESC), separat pentru fiecare câmp din listă.

Exemplificare a folosirii acestei clauze este comanda prin care se extrag în

ordinea crescătoare a vechimii (inversă a valorilor coloanei DataAnga) date din

tabelul ANG:

Page 70: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

70

SELECT NumeA,Fnc,DataAnga

FROM ANG

ORDER BY DataAnga DESC;

NumeA Fnc DataAnga

OSAN ANALIST 19.12.2000

CONTRA VANZATOR 19.12.2000

DOROS INGINER 31.10.2000

ZIMAN INGINER 14.10.1999

VUSCA VANZATOR 15.09.1999

POPA VANZATOR 26.03.1999

MARCU ANALIST 19.03.1999

CHIVU SOFER 23.02.1999

RUSU DIRECTOR 19.02.1999

TULIAN VANZATOR 23.01.1999

POPAN SOFER 13.01.1999

NEGRU INGINER 11.01.1999

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

efectua gruparea înregistrărilor. În acelaşi timp, prin intermediul acestei clauze, se

pot executa funcţiile agregate descrise în lista de selecţie pentru fiecare dintre

grupări (constituite pe baza câmpurilor de grupare). Echivalentul acestei clauze în

macheta grafică QBE de construcţie a interogării îl reprezintă rândul Total.

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

SELECT SUM(SAL) AS [TOTAL DEPARTAMENT], NRDEPT

FROM ANG

GROUP BY NRDEPT;

TOTAL DEPARTAMENT NRDEPT

7450 10

9775 20

9400 30

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

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

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

FROM ANG

GROUP BY ANG.CSF;

Sumă Medie Responsabil

5000 5000,00

6000 3000,00 2049

800 800,00 2084

8275 2758,33 2553

6550 1310,00 2956

Page 71: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

71

La prima vedere s-ar părea că clauza HAVING ar fi redundantă. Din contră, ea

este foarte necesară. Spre deosebire de WHERE, care acţionează înainte de a se

efectua gruparea înregistrărilor, HAVING va opera după definirea acesteia. Pentru

HAVING criteriul va fi aplicat câmpului definit ca argument al funcţiei agregat.

Altfel spus, când se foloseşte clauza GROUP BY şi este necesară şi o condiţie, se va

utiliza clauza HAVING.

Un exemplu edificator ar fi extragerea funcţiilor pentru care toţi angajaţii au

salariu mai mare decât 1500:

SELECT Fnc, MIN(Sal) as [salariu minim]

FROM ANG

GROUP BY Fnc

HAVING MIN(Sal) >= 1500

ORDER BY MIN(Sal);

Fnc salariu minim

INGINER 2450

ANALIST 3000

DIRECTOR 5000

Rezultatul este diferit de cel care de obține prin mutarea condiției la la clauza

WHERE. Interpretarea unei astfel de înregistrări ar fi: extragerea pe funcții a

salariului minim, pentru toți angajații cu salarii mai mari sau egale decât 1500:

SELECT Fnc, MIN(Sal) as [salariu minim]

FROM ANG

where Sal >= 1500

GROUP BY Fnc

ORDER BY MIN(Sal);

Fnc salariu minim

VANZATOR 1500

INGINER 2450

ANALIST 3000

DIRECTOR 5000

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

lista de selecţie, precum şi apelarea la mai multe criterii de grupare.

Puterea limbajului SQL este pusă în evidenţă atunci când se lucrează cu mai

multe tabele, când se exploatează relaţiile sau chiar asocierea dintre ele. Operaţiile

de asociere induse de clauza JOIN au ca rezultat producerea tuturor combinaţiilor

posibile, pentru conţinutul informaţional al fiecărei tabele. Noile înregistrări care

rezultă în urma joncţiunii vor deveni disponibile pentru selecţiile ulterioare. La o

asociere pot participa mai mult de două tabele.

Principala modalitate de realizare a joncţiunii este sintetizată de următoarea

sintaxă, a celei de-a doua clauze a comenzii SELECT:

FROM nume_tabela1 {INNER|LEFT OUTER|RIGHT OUTER} JOIN

nume_tabela2

ON criteriul_de_asociere

Page 72: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

72

[{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabela3

ON criteriul_de_asociere]...

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

INNER, LEFT OUTER, RIGHT OUTER se referă la tipurile de joncţiuni

(INNER JOIN, internă de tip echivalent, LEFT OUTER JOIN, externă de stânga,

RIGHT OUTER JOIN, externă de dreapta). De remarcat faptul că SQL ACCESS

acceptă scrierea interogărilor externe fără specificarea explicită a lui OUTER.

JOIN specifică tabela care va fi asociată (nume_tabela2, nume_tabela3...)

tabelei precizată în clauza FROM,.

ON este criteriul de asociere şi arată relaţia dintre câmpurile pe care se

bazează joncţiunea. Unul se află în tabela asociată, iar celălalt există într-o altă

tabelă din lista cu numele tabelelor. Expresia criteriul_de_asociere conţine un

operator de comparaţie (=,<,>,<>,<=,>=) şi va returna valorile logice TRUE sau

FALSE.

Joncţiunile tip INNER JOIN determină o asociere a înregistrărilor din tabele,

astfel încât să rezulte doar informaţii din înregistrările din fiecare tabelă care

respectă criteriul de asociere.

Joncţiunile externe (OUTER) sunt de două tipuri: de stânga (LEFT OUTER

JOIN) şi de dreapta (RIGHT OUTER JOIN), fiind destul de puţin utilizate.

Echivalentul QBE al acestor categorii de joncţiuni este alegerea opţiunilor 1, 2 sau 3,

din caseta Join Properties, care au fost explicate într-un capitol precedent (3.4).

Ca exemplu, fie următoarea interogare totul si toate:

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

FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod,

Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret

FROM Prod INNER JOIN ((CLIENTI INNER JOIN FactGen ON

CLIENTI.Codcli=FactGen.Codcli) INNER JOIN FactProd ON

(FactGen.Nrfact=FactProd.Nrfact) AND (FactGen.Datafact=FactProd.Datafact))

ON Prod.Codpro=FactProd.Codprod;

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

sintactic a numelui câmpurilor. Precedarea sintactică a numelui câmpurilor de numele

tabelului și semnul ‖.‖ e obligatorie, în multimea câmpurilor tabelelor la care se face

referire în clauza FROM, dacă o denumire de câmpuri apare de cel puțin două ori .

Același rezultat poate fi obținut fără a se recurgere la opțiunile JOIN în clauza

FROM, ci specificare condițiilor de legătură în clauza WHERE, precum în comanda

de mai jos:

Page 73: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

73

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

FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod,

Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret

FROM Prod, Clienti, FactGen, FactProd

WHERE (CLIENTI.Codcli=FactGen.Codcli) AND

(FactGen.Nrfact=FactProd.Nrfact) AND

(FactGen.Datafact=FactProd.Datafact)AND

(Prod.Codpro=FactProd.Codprod) ;

Opțiunea JOIN a fost introdusă în standardul SQL din 1992, până atunci,

specificarea relațiilor s-a făcut prin clauza WHERE.

Prin parametrii RIGHT sau LEFT opțiunea JOIN a adus și o simplificare a

unor comenzi. Fie, de exemplu, interogarea de extragere a totalului valorii și

cantității pe produse:

SELECT Prod.DenProd, Prod.UM, Sum(FactProd.Cant) AS SumăalCant, Prod.Pret, Sum([Cant]*[PRET]) AS

SumăValoare

FROM Prod LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod

GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;

TOTAL VALOARE SI CANT

DenProd UM SumăalCant Pret SumăValoare

Lapte l 98,00 2,9 284,20

Malai kg 2,25

Ulei Kg 43,00 3,27 140,61

Zahar kg 40,00 3,1 124,00

Fără opțiunea JOIN, trebuie să se recurgă pentru relații la clauza WHERE și,

pentru adăgarea produselor pentru care nu s-a facturat nimic, la opțiunea UNION:

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

Prod.Pret, Sum([Cant]*[PRET]) AS SumăValoare

FROM Prod, FactProd

WHERE Prod.Codpro=FactProd.Codprod

GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;

UNION

SELECT Prod.DenProd, Prod.UM, 0.00 AS SumăalCant, Prod.Pret, 0.00 AS

SumăValoare

FROM Prod, FactProd

WHERE Prod.Codpro NOT IN

(SELECT DISTINCT CodProd FROM FactProd)

GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;

Page 74: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

74

Scrierea unei interogări în cadrul alteia duce la apariţia unei subinterogări;

setul de rezultate obţinut de la o interogare va constitui argument pentru o alta.

Utilizatorul poate astfel să creeze legături între mai multe interogări SQL ACCESS,

pe baza unor câmpuri unice, cu rol de căutare în structura tabelelor. Subinterogările

înlocuiesc interogările imbricate din versiunile precedente, cu performan ţe mult

îmbunătăţite. Pot fi construite şi prin varianta de lucru a machetei grafice QBE

ACCESS.

Cea mai simplă subinterogare are sintaxa următoare:

SELECT * FROM Tabela1

WHERE Tabela1.nume_ câmp operator

(SELECT nume_câmp FROM Tabela2 WHERE criteriul_de_selecţie);

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

de fapt câmpul de legătură ce stă la baza construirii subinterogării. Clauza SELECT

din subinterogare va avea acelaşi număr de câmpuri şi de natură similară cu cele din

clauza WHERE a interogării externe.

Operatorul poate fi unul relaţional sau unul dintre BETWEEN...AND, IN,

LIKE, IS NULL.

Ca exemplu redăm următoarea comandă:

SELECT DenProd FROM Prod

WHERE Pret=

(SELECT MAX(Pret) from Prod).

3.8.4. Instrucţiunile pentru manipularea datelor

Cele mai importante instrucţiuni sunt:

INSER;

UPDATE;

DELETE.

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

sursă a datelor pot fi o alte tabele, date fixe sau parametri.

Sintaxa comenzii este următoarea:

pentru un articol:

INSERT INTO nume_tabelă [(câmp1[, câmp2[, ...]])]

VALUES (valoare1,valoare2...)

pentru mai multe articole:

Page 75: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

75

INSERT INTO nume_tabelă [IN baza_de_date_externă] [(câmp1[, câmp2[, ...]])]

SELECT [sursă.]câmp1[, câmp2[, ...]

FROM listătabele

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

valorile asociate acestora. După lansarea în execuţie a interogării apare un mesaj de

avertizare privind adăugarea de noi înregistrări în baza de date şi caracterul

ireversibil al acestei operaţii.

În cadrul acestui tip de inserare a datelor trebuie să se respecte următoarele

reguli:

► valorile menţionate în clauza VALUES vor avea aceeaşi natură cu câmpurile

specificate în clauza INTO;

► mărimea valorii corespunzătoare fiecărui câmp va fi mai mică decât

dimensiunea câmpului;

► nu va fi obligatorie specificarea denumirii câmpurilor, deoarece SQL

ACCESS va asocia listei de valori câmpurile în ordinea din structura

înregistrării (prima valoare se va introduce în primul câmp, a doua valoa re, în

al doilea câmp s.a.m.d.);

► dacă un câmp are definiţia NOT NULL, va fi obligatorie introducerea unei

valori pentru acesta.

Exemplu:

Să se adauge un articol pentru un nou angajat, Paznic:

INSERT INTO Ang

values (8888, "VALCU" , "PAZNIC", 2553, #3/3/2009#,2000,null ,10)

Comanda DELETE are următoarea sintaxă:

DELETE FROM nume_tabelă [WHERE criteriul_de_ştergere] se

materializează în interogarea acţiune de ştergere parţială sau totală a înregistrărilor

din tabele. În acelaşi timp se va şterge doar conţinutul tabelei nu şi aceas ta (pentru

eliminarea tabelei se va apela la instrucţiunea DROP TABLE).

Exemplu:

DELETE FROM ANG WHERE NrAng = 8888

Comanda UPDATE are următoarea sintaxă:

UPDATE nume_tabelă

SET nume_câmp1 = valoare1 [,nume_câmp2 = valoare2]...

[WHERE criteriul_de_actualizare]

Page 76: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

76

Această comandă are rolul şi de a modifica valorile câmpurilor din

înregistrările existente. Ca şi în cazul instrucţiunii INSERT, se va urmări dacă în

câmpul cu valori de actualizat sunt permise numai valori unice.

Atunci când se doreşte actualizarea datelor din mai multe câmpuri se foloseşte

virgula ca separator între câmpuri şi valorile acestora. Se pot utiliza mai multe

condiţii, WHERE apelând la operatorul logic AND pentru a limita actualizarea la

înregistrări mai bine specificate.

Exemplu:

Să se mărească salariile VANZATORilor cu 15%:

UPDATE Ang SET Sal= Sal * 1,15 where Fnc=”VANZATOR”;

Page 77: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

77

CAPITOLUL IV. CREAREA ŞI UTILIZAREA

FORMULARELOR

4.1. Noţiuni generale

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

recurge la utilizarea formularelor (în limba engleză: forms).

Deoarece bazele de date trebuie să poată gestiona un număr de articole de

ordinul miilor sau chiar milioanelor, la proiectarea formularelor trebuie să se

găsească soluţii pentru întreţinerea datelor în siguranţă, introducerea eficientă de

date, posibilitatea de regăsire a articolelor, în scopul modificării, asigurarea

concordanţei datelor introduse cu datele existente, verificarea şi partajarea accesului

utilizatorilor la bazele de date, vizualizarea rapidă a valorilor introduse şi apoi

tipărirea lor.

Crearea formularelor necesită activităţi complexe de analiză, proiectare şi

programare a sistemelor, care consumă cea mai mare parte din bugetul de timp alocat

creării şi implementării aplicaţiei de gestionare a bazei de date.

Majoritatea formularelor sunt legate de unul sau mai multe tabele şi interogări

dintr-o bază de date. Datele cu care lucrează formularul sau raportul sunt constituite

în sursa de înregistrări a formularului în câmpuri le din tabelele şi interogările pe care

acesta se bazează. Un formular nu e obligatoriu să conţină toate câmpurile din fiecare

tabel sau interogare pe care se bazează.

Un formular legat de date memorează sau regăseşte informaţii din sursa de

înregistrări de bază. Pe lângă acestea formularele mai pot conţine şi alte informaţii,

cum ar fi: titlu, data şi numărul paginii (vezi figura).

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

forma formularului.

Page 78: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

78

Datele provin din câmpurile provenite din sursa de înregistrări de bază.

Un calcul provine dintr-o expresie, care este memorată în forma formularului.

Textul descriptiv este şi el memorat în forma formularului.

Aceste elemente se numesc controale. Un control este un obiect grafic care

poate fi poziţionat pe un formular sau raport, putând afişa date, putând fi legat de

efectuarea unor acţiuni declanşate de evenimente intervenite în rularea aplicaţiei sau

pur şi simplu sunt create pentru mai buna lizibilitate sau pentru scop estetic.

Asupra controalelor acţionează utilizatorii cu mouse-ul sau tastatura. Acţiunea

se poate face la un moment dat doar asupra unui singur obiect, aspect numit

focalizare. Obiectul care a primit focalizarea este, în mod normal, indicat prin

evidenţiere grafică. Focalizarea poate fi setată de utilizator sau de aplicaţie cu

ajutorul metodei SetFocus.

Mediile de proiectare a bazelor de

date pun la dispoziţia utilizatorilor diverse

instrumente pentru crearea de formulare. În

versiunea 2007 a Microsoft ACCESS au

fost introduse instrumentele de creare

formulare, grupate într-o zonă cu acelaşi

nume, în fila Creare a panglicii Access,

prezentate în figura alăturată.

Crearea formularelor se poate face:

prin salvarea unui tabel sau interogări ca formular, creindu-se un formular

care afişează toate câmpurile şi înregistrările din sursa de date. În ACCESS 2007 a

fost introdus un instrument nou în fila creare în acest scop;

utilizând expertul, caz în care utilizatorii sunt asistaţi de un expert care

pune întrebări şi creează un formular bazat pe răspunsurile primite;

prin apelarea la unul dintre noile instrumente introduse în mediul de

proiectare şi întreţinere: Scindare formulare, Elemente multiple sau Dialog Modal.

Formularele astfel create pot fi particularizate în modul dorit, în modul Vizualizare

proiect. În Formularul scindat sunt generate automat, în partea de sus, toate

câmpurile unui tabel, iar în partea de jos, înregistrările în modul de vizualizare Foaie

de date. Un Formular cu elemente multiple, denumit şi formular continuu, permite

afişarea simultană a informaţiilor mai multor înregistrări. Un formular cu elemente

multiple într-o versiune iniţială poate fi confundat cu un tabel în modul Foaie de

date, dar fiind formular, poate fi particularizat. Un formular este de tip modal dacă

are setată proprietatea modal. Această proprietate face ca atunci când e terminată o

sesiune de editare într-un astfel de formular, fereastra să trebuiască închisă neapărat

înainte de a fi posibilă mutarea focalizări i la alt obiect. Aici programatorii

Page 79: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

79

beneficiază de tehnologii bazate pe obiecte şi - pentru sarcinile mai dificile - de

ajutorul limbajului Visual Basic. Ca şi în cazul tabelelor, odată cu creşterea

experienţei proiectanţilor, munca în modul Vizualizare proiect va fi preponderentă în

crearea sau particularizarea formularelor.

Spre exemplu formularul Produse este prezentat mai jos, în modul Proiectare

(în limba engleză: Design View).

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

următoarele elemente:

Pentru controlul şi asistarea utilizatorului se pot seta proprietăţile

formularului pentru a permite sau preveni utilizatorii de la adăugarea, ştergerea sau

editarea înregistrărilor afişate într-un formular. De asemenea se poate adăuga Ajutor

particularizat unui formular pentru a asista utilizatorii la folosirea formularului.

În fereastra Formular se pot adăuga sau elimina butoanele Maximizare şi

Minimizare, butoanele de navigare, meniuri rapide şi alte elemente ale ferestrei

Formular.

În secţiuni se poate adăuga, elimina, ascunde sau redimensiona antetul,

subsolul şi secţiunea detalii ale unui formular. De asemenea, se pot seta proprietăţile

secţiunii pentru a controla aspectul şi imprimarea unui raport.

Controale. Se pot muta, redimensiona sau seta proprietăţile fonturilor unui

control. De asemenea, se pot adăuga controale pentru a afişa valori calculate,

Panglica

Access

Panou

de

navigare

Linia de

stare

Foaia de

proprietăți

Fereastra pentru

proiectarea

formularelor

Etichetă

Buton

Casetă

text

Casetă

combinată

Dreptunghi

Subformular

Instrumente pentru

crearea controalelor

formularelor

Page 80: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

80

totaluri, data şi ora curentă şi alte informaţii folositoare într -un formular. Se pot crea

proceduri particularizate de tratare a evenimentelor ocazionate de lucrul cu

controalele.

4.2. Controale

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

de proiectare orientat pe obiecte, dezvoltat în special pentru realizarea elementelor de

interfaţă.

Obiectele au diverse proprietăţi prin care se formatează caracteristicile de

stare, legătura cu datele sau modul de reacţie la evenimente.

Pentru a putea fi incluse în formulare, există instrumente de creare a acestora,

grupate într-o zonă a Controalelor, în fila Instrumente proiectare formular , din

panglica Access. Procedura de amplasare a acestora în formulare este următoarea:

se face clic pe tipul de control dorit;

se selectează o zonă pe formular unde acest control va fi amplasat;

când mouse-ul este lăsat, controlul este ataşat;

configurarea parametrilor controlelor prin atribuirea de valori

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

Cas

etă

com

bo

Dre

ptu

ng

hi

Lin

ie

Gru

p d

e op

ţiun

i

Bu

ton

de

com

uta

re

Inse

rare

dia

gra

Cad

ru i

nd

epen

den

t

Inse

rare

sfâ

rşit

pag

ină

Gro

sim

e li

nie

Tip

lin

ie

Efe

ct s

pec

ial

Inst

rum

ent

sele

cţie

Su

bfo

rmu

lar/

su

bra

po

rt

Cas

etă

list

ă

Cad

ru o

bie

ct l

egat

Bu

ton

op

ţiu

ne

Cas

eta

de

sele

ctar

e

Co

ntr

ol

filă

Inse

rare

pag

ină

Imag

ine

Ata

şam

ent

Inse

rare

hy

per

lin

k

Cu

loar

e li

nie

Sel

ecta

re t

ota

Sta

bil

ire

pro

pri

etăţ

i

imp

lici

te c

on

tro

l

Page 81: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

81

Toate aceste operaţii se fac în modul vizualizare proiectare (DesignView), şi

constituie activitatea preponderentă a proiectanţilor de aplicaţii de baze de date,

munca programatorilor de interfeţe de lucru cu informaţiile din baza de date.

Măiestria utilizării controalelor se deprinde odată cu experienţa, cu asimilarea

accepţiunii proprietăţilor şi reacţiei controalelor la evenimente. Instrumentele din

fila Instrumente proiectare formular, din panglica Access destinate proiectării

controalelor pentru formulare, care nu sunt prezentate împreună cu numele lor, le -

am prezentat în figura anterioară:

Proprietăţile unui obiect sunt disponibile pentru modificare dacă numele

acelui obiect se găseşte în titlul ferestrei de proprietăţi. Fereastra de proprietăţi este

disponibilă prin aplicarea unui clic pe instrumentul Foaie de Proprietăţi din panglica

Access sau făcând clic dreapta pe un obiect şi alegând ultima opţiune (Proprietăţi)

din meniul contextual.

Poate pentru începători găsirea proprietăţilor formularului este mai dificilă,

dar clic-ul dreapta trebuie făcut în afara zonei unde se aşează obiectele. Există

controale simple, nelegate de date, care nu au proprietatea Control source. Dintre

acestea amintim: etichetele, liniile, dreptunghiurile sau unele imagini.

Dar există controale cu mult mai complexe decât cele de mai sus, chiar mai

complexe decât casetele de text. Cele mai multe dintre ele, cânt sunt create în modul

design, apelează automat la un expert (wizard). Aşa sunt, de exemplu controalele tip:

Casetă combinată, Buton de comandă, Casetă cu listă sau Control de pagini.

Un regim oarecum diferit de cel al controalelor îl au subformularele.

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

afişarea datelor din mai multe tabele sau cereri de interogare, aflate în general în

relaţii de tip unu la unu sau unu la mai mulţi. Astfel, în formularul principal vor fi

afişate datele din partea unu a relaţiei, iar în subformular cele din partea mai mulţi.

În mod implicit, legătura dintre un formular şi un subformular reflectă legătura dintre

tabelele pe care se bazează. Prin urmare, la un moment dat în formular va fi afişată o

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

corespondente din tabela aflată de partea mai mulţi a acesteia.

Într-un formular care conţine un subformular se pot specifica criterii de

filtrare numai asupra câmpurilor din formularul principal.

Ca exemplu putem prezenta o relaţie 1 – n, dintre un catalog de materiale şi

documente de mişcare a acestor materiale astfel:

Page 82: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

82

Un subformular poate fi înglobat într-un formular în două moduri: foaie de

date (în limba engleză: Datasheet view) sau formular (în limba engleză: Form view).

Atunci când se include un subformular într-un formular principal trebuie

realizate următoarele operaţii:

se creează formularul principal;

se creează subformularul;

se adaugă obiectul subformular din ToolBox într-o manieră similară cu

adăugarea oricărui control. Dacă tabelele pe baza cărora sunt create

formularele sunt într-o anumită relaţie, ACCESS-ul propune stabilirea

acestei relaţii şi între cele două formulare.

Odată înglobat un subformular într-un formular, se poate verifica rezultatul

operaţiunii în modul Vizualizare machetă. Eventualele retuşuri se pot face în modul

Proiectare.

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

4.3.1. Proprietăţile esenţiale

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

ferestrele aplicaţiilor Windows.

Pentru introducerea datelor de la tastatură se folosesc de obicei casete de

editare text. În aceste casete se folosesc foarte multe dintre regulile de scriere de text

din editoarele Microsoft referitoare la deplasare, selectare, corectare, căutare, etc.

Deoarece, cea mai importantă menire a formularelor este de introducere de

date într-un formular, cele mai importante proprietăţi ale obiectelor sunt cele legate

de date. Pentru formular această proprietate este Sursa înregistrări (în limba engleză:

Record Source) şi reprezintă tabelul sau interogarea de unde formularul îşi extrage

datele.

Page 83: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

83

Pentru casete de text, ca de altfel pentru majoritatea controalelor, legătura cu

datele este realizată de proprietatea Sursă Control (în limba engleză: Control Source)

şi reprezintă de obicei câmpurile tabelului sau interogării de unde sunt luate valorile

pentru o înregistrare.

Pentru formular "Record Source" se poate stabili proprietatea mai târziu, în

modul Design view. Sunt disponibile pentru modificare proprietăţile unui obiect dacă

numele acelui obiect se găseşte în titlul ferestrei de proprietăţi.

Fie, de exemplu, tabelul CLIENTI, care are următoarea structură:

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

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

Recomandăm utilizarea instrumentului .

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

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

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

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

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

Page 84: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

84

4.3.2. Obiectele simple

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

mai multe posibilităţi.

O posibilitate este de a trage

din fereastra cu lista de câmpuri

(pe rând), câmpurile în locul unde

se doreşte a fi ataşate.

O altă posibilitate este de a

selecta din bara de instrumente,

butonul ab|, pentru casete text.

Cursorul mouse-ului, dacă este

plasat peste fereastra de creare a

formularului, va avea forma unui

semn + şi ab|.

Se face clic în aria

formularului, în locul unde se

doreşte să fie amplasat cursorul şi se trage cursorul mouse-ului peste zona care va fi

acoperită de caseta text. Când butonul mouse-ului este eliberat, caseta este amplasată

şi este însoţită de o etichetă. În caseta text apare scris Nelegat(Unbound).

Se modifică textul etichetelor ataşate (în cazul nostru Text0, Text2, Text4,

Text6) cu mesajele logice (în cazul de faţă Codul, Denumirea, Adresa, Telefonul).

Această modificare se poate realiza după două clicuri pe etichetă, atunci când

cursorul mouse-ului devine |, sau după selecţia controlului (a etichetei, în cazul de

faţă), prin modificarea proprietăţii Legendă a filei Format, din Foaia de proprietăţi.

De altfel, prin acest procedeu se recomandă să fie particularizate toate proprietăţile

(caracteristicile) obiectelor plasate în formulare (inclusiv a formularului însuşi):

Page 85: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

85

culoare, dimensiune, plasament, font (tip, dimensiune, stil, culoare), efecte speciale,

legendă, nume etc. Cu ajutorul instrumentelor din fila Aranjare pot fi aranjate

obiectele.

4.3.3. Culorile obiectelor

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

nuanţă pentru fundal, care este Culoare fundal, sau proprietatea pentru fonturi numită

Culoare prim plan sau proprietatea pentru contur numită Culoare chenar. Realizarea

unei nuanţe de culoare pentru aceste propeietăţi se poate obţine prin amestecul, în

ponderi diferite, a celor trei culori fundamentale: roşu, verde şi albastru. Practic se

pot obţine 2563=16777216 nuanţe.

Dacă se cunoaşte codul culorii acesta se poate completa. Pentru a facilita

intuiţia codului, sistemul de redare a lui poate fi înscris printr -o tripletă de perechi de

cifre hexazecimale, precedate de semnul # (diez).

Pentru codificarea în sistem intern, se formează o mască în care tripleta RGB

se pune invers. Acest cod se obţine prin însumarea codificărilor cantităţilor pentru

cele trei culori (valori 0255) corectate prin coeficienţi, în funcţie de locul lor în

mască: cantităţii de roşu, fiind în dreapta i se aplică coeficientul 20=1, cantităţii de

verde i se aplică coeficientul 28=256 iar cantităţii de albastru i se aplică coeficientul

216=65536.

Dacă există dificultăţi în selectarea nuanţei, atunci se apasă pe „…‖, de la

sfârşitul liniei proprietăţii culorii, şi se alege o culoare dintr-o paletă. Dacă tot nu se

găseşte nuanţa dorită, se apasă pe butonul Definire culori particularizate şi se pot

amesteca culori pe sistemul RGB (Red, Green, Blue). În funcţie de amestecul realizat

se obţine un cod pentru nuanţă.

Pentru culoarea negru, care este amestecul celor 3 culori RGB în cantitatea 0,

scris #000000 în sistemul hexazecimal (se obţine valoarea codului 0). Culoarea alb se

obţine prin amestecul celor 3 culori RGB în cantitate saturată, 256 -1, scris #FFFFFF

în sistemul hexazecimal (se obţine valoarea codului 2563-1=16777216-1). Pentru

roşu se scrie #FF0000 în sistemul hexazecimal (codul este 255). Galbenul este

amestec saturat de roşu şi verde, scris #FFFF00 în sistemul hexazecimal (se obţine

valoarea codului 256*256-1=65536-1). Verde se scrie #00FF00 în sistemul

hexazecimal (codul este este obţinut înmulţind 255*256 sau scoţând roşul din galben:

galben –rosu =65535-255=65280).

Pentru a se obţine albastru se scrie #00FF00 în sistemul hexazecimal (codul

este este obţinut înmulţind 255*65536, sau se scoate roşu şi verde din alb:

16711680=16777215-65280-255).

Page 86: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

86

4.3.4. Aranjarea obiectelor

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

formulare, de poziţia pe care o au unele faţă de altele, de proporţiile pe care le au, de

ordinea de parcurgere a lor (momentul când primesc focusul).

Atunci când se doreşte ca unui grup de obiecte să i se aplice în mod unitar

anumite proprietăţi, trebuie să se selecteze obiectele apăsând Shift + clic pe fiecare

dintre ele sau trecând cursorul mouse-ului peste ele şi apoi se aplică modificarea

modului de aranjare a obiectelor în formular. Operaţiile care pot fi efectuate sunt

legate de instrumetele grupate în fila Instrumente proiectare formular/Aranjare din

panglică:

Unul sau mai multe obiecte selectate se pot muta cu ajutorul tastelor cu săgeţi

sau prin tragere cu mouse-ul atunci când cursorul este sub forma unei cruci de săgeţi.

În mod similar, unul sau mai multe obiecte selectate se pot redimensiona cu

ajutorul tastelor cu săgeţi apăsate concomitent cu tasta Shift sau prin tragere cu

mouse-ul de unul dintre cele opt puncte negre din colţuri sau mijloace de laturi,

atunci când cursorul este sub forma unei săgeţi cu vârfuri la ambele capete.

Atunci când sunt suprapuse obiecte, se poate uzita de opţiunile: Aducere în

prim plan sau Trimitere în ultimul plan pentru a stratifica corect obiectele.

În fine, ordinea de parcurgere a controalelor se poate stabili cu opţiunea

Ordine de tabulare unde, în fereastra Ordine de tabulare se poate modifica, prin

glisare cu mouse-ul, ordinea de parcurgere, existentă la un moment dat.

A mai rămas de legat formularul şi controalele de date.

După ce este selectat formularul (clic în zona din exteriorul grilei din fereastra

formularului) se stabileşte valoare Clienti prin modificarea proprietăţii Sursă

înregistrări (sau se alege din lista ascunsă) a filei Date din Foaia de proprietăţi.

Apoi, pe rând, pentru fiecare casetă de text în parte, după ce se selectează, se alege

câmpul corespunzător din lista

ascunsă a proprietăţii Sursă control

a filei Date din Foaia de

proprietăţi.

După efectuarea acestor

operaţii, formularul este funcţional,

precum este redat în modul

Page 87: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

87

Vizualizare formular, în figura alăturată:

4.3.5. Alte facilităţi

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

Plasarea expresiilor în controalele aflate pe un formular sau subformular se

realizează prin scrierea acestora în proprietatea Control Source a unui control.

Scrierea unei expresii se poate face cu asistenţa generatorului de expresii

(Expression Builder) sau prin scriere directă. Dacă se utilizează scrierea unei expresii

în modul neasistat, aceasta trebuie precedată de semnul egal (=expresie).

Expresiile pot conţine orice funcţie Access sau funcţii definite de utilizator,

referiri către controale aflate pe alte formulare (deschise), câmpuri din tabela sau

interogarea stabilită, a proprietăţii Record Source a formularului, etc.

Utilizarea în expresii a controalelor din acelaşi formular se realizează prin

referirea numelui controalelor implicate în expresie. Astfel, se consideră implicit

referirea proprietăţii Value a controlului respectiv.

Page 88: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

88

În exemplul de mai jos caseta Text25, care va afişa valoarea, va avea la

proprietatea Control Source formula =[prettt]*[1.19] unde 'prettt' este numele unui

control. În loc de 'prettt' se putea scrie 'prettt.value' ca referire completă a proprietăţii

sau 'pret' ca referire a câmpului 'pret ' dintr-o tabelă 'produs ' care este stabilită la

proprietatea 'Record Source' a formularului.

Există controale mai complexe pentru plasarea cărora în formulare mediul

Access are prevăzute instrumente expert şi indică posibilităţile lor cele mai frecvente

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

instrumentele mediului Access propunând utilizarea acestora pentru acţiuni pe

categorii, redate în figură:

De exemplu, pentru a se crea un buton care face salt la înregistrarea anterioară

celei curente a formularului, se stabileşte acţiunea Salt la înregistrarea anterioară

din categoria Navigare înregistrări.

Controalele de tip Casetă combo sau Casetă listă oferă utilizatorilor

posibilitatea de a selecta dintr-o listă valori care pot fi introduse într-o bază de date.

Diferenţa dintre cele două tipuri de controale este dată de faptul că, prin

casetele combo valorile introduse pot fi preluate fie din lista controlului, fie prin

tastarea lor într-o casetă text, componentă a controlului.

Sintagma Casetă combo defineşte combinarea a două tipuri de controale:

Caseta text şi Caseta listă.

Page 89: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

89

Valorile din liste pot fi preluate din câmpuri de tabele sau interogări şi pot fi

utilizate mai departe pentru a fi stocate sau pentru a căuta valori în tabele, precum se

vede în figura de mai jos.

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

se pot introduce valori care pot fi, la rândul lor, preluate dintr-o listă. Valorire

acestei liste pot fi preluate din interogarea pe care o putem salva cu denumirea UM,

bazată pe comanda SQL:

Select distict UM from Produs order by UM

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

câmpurilor, a modului de sortare, a lăţimii de afişare, a modului de stocare şi

utilizare a valorii selectate şi Proprietatea Legendă a etichetei cuplate de listă, pot fi

precizate în ferestre ale expertului Access, prin care utilizatorul e ghidat pentru a

personaliza controalele de listă.

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

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

Page 90: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

90

Aceşti parametrii pot fi modificaţi de utilizatori. De exemplu, dacă se

consideră că ar fi mai portrivită pentru acest control o listă de valori predefinită, nu

o interogare, se poate modifica proprietatea Tip sursă rânduri la valoarea Listă valori

şi se poate completa proprietatea Sursă rânduri cu expresia ‖Fl‖; ‖Kg‖; ‖L‖ .

Într-un formular pot fi folosite date şi din diverse tabele, sau interogări, altele

decât cele precizate la proprietatea Sursă înregistrări a formularului, prin folosirea

unor proceduri de tratare a evenimentelor.

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

Forms![Nume formular]![Nume control].

Pentru a putea fi evaluate astfel de expresii, trebuie ca acele formulare de pe

care sunt referite controale să fie deschise în acel moment.

Utilizarea într-o expresie, de pe un formular, a unor controale din

subformular, se realizează prin:

[Nume subformular].Form![Nume control].

Page 91: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

91

CAPITOLUL V. CREAREA ŞI UTILIZAREA

RAPOARTELOR

5.1. Crearea unui raport

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

toate tabele şi obiectele componente, sunt funcţie de listele finale necesare, care

constituie finalitatea aplicaţiei.

Rapoartele sau situaţiile finale reprezintă forme mai accesibile de prezentare a

informaţiilor din bazele de date, conţinutul lor putând fi vizualizat pe ecran, listat la

imprimantă sau creat un fişier raport, de exemplu .RTF, ce poate fi prelucrat în

continuare în Word.

Mediile de proiectare a bazelor de date pun la dispozi ţia utilizatorilor diverse

instrumente pentru crearea rapoartelor.

În versiunea 2007 a Microsoft ACCESS,

au fost introduse instrumentele de creare

rapoarte, grupate într-o zonă cu acelaşi nume, în

fila Creare a panglicii Access, prezentate în

figura alăturată.

Şi în cazul rapoartelor, ca şi pentru celelalte tipuri de obiecte Access, dintre

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

recomandabilă a doua.

Crearea rapoartelor este foarte asemănătoare cu crearea formularelor, fiind

chiar puţin mai simplă deoarece nu se folosesc controale prin care se introduc date.

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

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

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

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

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

proprietăţi.

Page 92: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

92

În continuare, trebuie ataşate controalele. Procedura de ataşare a controalelor

este similară cu procedura plasare a acestora lor în formulare.

Raportele constituie unul din tipurile de obiecte fundamentale ale ACCESS-

ului.

Deoarece menirea lor de bază este de prezentare a informaţiilor din bazele de

date, cele mai importante proprietăţi ale unui raport sunt proprietăţile referitoare la

date. Stabilirea tabelului sau cererii de interogare de unde raportul îşi va extrage

informaţiile se face prin proprietatea sursă de înregistrări (în limba engleză: Record

Source).

Precum la formulare, şi la rapoarte, stabilirea câmpului de unde provin

valorile afişate în controale, se face cu ajutorul proprietăţii sursă control (în engleză:

Control source).

Informaţiile provenite din celulele tabelelor vor fi afişate în secţiunea de

detaliu. Controalele inserate în această secţiune vor fi afişate în raport, în mod

repetat, pentru fiecare articol al sursei de înregistrări.

În rapoarte mai pot fi create anteturi şi subsoluri pe diferite niveluri: antet şi

subsol de raport, antet şi subsol de pagină, antet şi subsol de grup.

Exerciţiu: Pe baza informaţiilor din interogarea totul şi toate creaţi un raport cu

produsele vândute clienţilor.

Rezolvare

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

Page 93: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

93

raportului.

Vom începe prin a lega raportul şi controalele de date. După ce este selectat

raportul (clic în zona din exteriorul grilei din fereastra raportului) , se stabileşte

valoarea totul şi toate prin modificarea proprietăţii Sursă înregistrări (sau se alege

din lista ascunsă) a filei Date din Foaia de proprietăţi.

Apoi, pe rând, pentru fiecare valoare de expus în rândurile raportului, se

plasează câte o casetă text. Pentru fiecare casetă text în parte, trebuie elimitată

eticheta care e agăţată de mediul Access, automat de casetă (se face clic pe etichetă

şi se apasă tasta Delete). Legarea casetelor de date se face după ce se selectează prin

alegerea câmpului corespunzător din lista ascunsă a proprietăţii Sursă control a filei

Date din Foaia de proprietăţi.

După efectuarea acestor operaţii, raportul este funcţional, precum este redat în

modul Vizualizare proiect în figura de mai jos.

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

După ce s-au stabilit sursele de date pentru întreg raportul, trebuie stabilite

controalele care vor fi conţinute în raport, proprietăţile lor şi, în mod special, pentru

Page 94: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

94

fiecare control în parte, sursa datelor. Această activitate constituie particularizarea

unui raport.

Într-un raport se pot particulariza următoarele elemente:

Sursa de înregistrări. Se modifică tabelele şi interogările pe care se bazează

un raport.

Sortarea şi gruparea datelor. Se pot sorta date în ordine ascendentă sau

descendentă. De asemenea, se pot grupa înregistrări în unul sau mai multe

câmpuri şi afişa subtotaluri şi totaluri generale într -un raport.

Fereastra Raport. Se pot adăuga sau elimina butoanele Maximizare şi

Minimizare, modifica textul din bara de titlu şi alte elemente ale ferestrei

Raport.

Secţiuni. Se pot adăuga, elimina, ascunde sau redimensiona secţiunile antet,

subsol şi detaliu ale unui raport. De asemenea, se pot seta proprietăţile

secţiunilor pentru a controla aspectul şi imprimarea unui raport.

Controale. Se pot muta, redimensiona sau seta proprietăţile fonturilor unui

control. De asemenea, se pot adăuga controale pentru a afişa valori calculate,

totaluri, data şi ora curente şi alte informaţii utile într -un raport.

5.2. Particularizarea antetului şi subsolului

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

Dar, suplimentar faţă de formulare, rapoartele pot conţine această împărţire şi la

nivel de pagină. Şi, mai mult decât atât, rapoartele sunt făcute să treacă peste mai

multe înregistrări pentru a afişa rezultate. Valorile afişate pot reda situaţia dintr-o

înregistrare sau din grupuri de înregistrări. De exemplu, pentru casetele care includ

valori numerice, se poate seta pentru proprietatea "Executare sumă " (în engleză

Running Sum) valoarea "Over All". Gruparea induce existenţa până la nivel de grup a

secţiunilor: antet, detaliu şi subsol.

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

informaţii (cum ar fi titlul, data sau o prefaţa) la începutul unui raport.

Subsolul de raport este acea secţiune dintr-un raport care este utilizată pentru

a plasa informaţii ce în mod normal apar în partea finală a unui raport, cum ar fi

numărul total de pagini, semnături, data creării şi sumele de raport.

Antetul şi subsolul unui raport apar la începutul şi sfârşitul unui raport

imprimat.

Page 95: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

95

Antetul de pagină este utilizat pentru a afişa titlul, titluri de coloane, date

calendaristice sau numere de pagină în partea de sus a fiecărei pagini a unui formular

sau raport.

Subsolul de pagină este utilizat pentru a afişa rezumate de pagină, date

calendaristice sau numere de pagină în partea de jos a fiecărei pagini dintr -un

formular sau raport

Antetul şi subsolul de pagină apar în partea superioară şi cea inferioară a

fiecărei pagini.

Antet de grup este utilizat pentru a plasa informaţii, cum ar fi numele de grup

sau totalul de grup, la începutul unui grup de înregistrări.

Subsol grup se utilizează pentru a plasa informaţii, cum ar fi numele de grup

sau totalul de grup, la sfârşitul unui grup de înregistrări.

Antetul şi subsolul de grup apar în partea superioară şi cea inferioară a

grupărilor articolelor.

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

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

panglicii.

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

subsoluri sunt perechi. Ele pot fi disponibile doar împreună.

Dacă este necesară doar o componentă, pentru cealaltă se setează înălţimea la

dimensiunea 0. Eliminarea anteturilor şi subsolurilor atrage după sine si ştergerea

tuturor controalelor plasate pe suprafaţa lor.

Exerciţiu Adăugaţi antet şi subsol raportului de la exerciţiul precedent. În antetul

raportului să se înscrie un antet de firmă, şi numele de coloane, iar la subsol să se

scrie data listării şi semnătura persoanei care a făcut listarea.

Rezolvare:

se deschide baza de date Facturi;

se alege din panoul de navigare raportul Raport TEST;

se comută în Vizualizare în mod proiectare;

se urmăreşte să existe setat Antet/subsol raport;

Antet/Subsol raport

Antet/Subsol pagina

Page 96: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

96

se glisează în antetul raportului, din bara de instrumente, eticheta pentru a se

scrie firma, în partea stângă sus şi ca titlu: Lista produselor vândute pe clienţi. Titlul

se poate face cu un font mai mare şi aldin;

se măreşte înălţimea antetului şi se adaugă în antet etichete pentru antetul

coloanelor, care se aliniază în linie cu cea mai de sus ;

se trasează un dreptunghi, care să înconjoare etichetele, şi pentru ca să nu

acopere etichetele se setează proprietatea Stil fundal cu culoarea Roşu şi se plasează

în spatele etichetelor realizate cu instrumentul Trimitere în ultim plan din fila

Aranjare;

la subsolul raportului se adaugă etichetă cu conţinutul (legenda) Listat în data

şi o etichetă Întocmit / Semnătura;

se acţioneză pe instrumentul Data şi ora din panglică, şi pentru că se adaugă

etichete cu data şi ora sistemului în partea stângă a antetului, data trebuie glisată în

zona de subsol, lângă Listat în data, iar eticheta cu ora se poate şterge;

se trasează o linie în partea de subsol, pentru a delimita elementele acestuia de

articolele listate.

În modul Vizualizare raport rezultatul este următorul:

Page 97: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

97

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

subtotaluri

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

anumite grade de centralizare, fiecare grup putând să aibă antet şi subsol (partea de

detaliu este una singură pentru întreg raportul), pentru a adăuga sau elimina aceste

elemente de grup într-un raport se foloseşte instrumentul Sortare şi Grupare

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

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

sortare si totaluri, şi se face clic pe butonul Adăgare grup şi automat este afişat un

rând în casetă pentru a ajuta la precizarea Grupării după selectare Câmp sau

Expresie.

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

totaluri sau titluri, dacă se afişează sau ascunde secţiunea de antet sau subsol la nivel

de grup.

Grupările se înscriu în această casetă în ordinea ariei lor de cuprindere.

Pentru adăugarea de controale care vor reda totalul tuturor valorilor unui

câmp, la nivel de raport, se procedează în felul următor:

1. Se adaugă o casetă text în zona de subsol a raportului. Este de preferat ca

această casetă să fie o copie a unei casete pe care o totalizează (cu

operaţiile obişnuite de copiere şi lipire);

2. La proprietatea Sursă control se setează: =Sum([expresie]) unde expresie

poate lua valorile variabile, funcţie de înregistrări, care vor fi totalizate ;

3. La proprietatea Execuţie sumă se setează valoarea Nu.

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

similar cu totalurile generale pe raport cu diferenţa că ele se plasează în subsolurile

de grup. Problema se pune în mod similar şi pentru totalurile pe pagini.

Exerciţii

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

Page 98: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

98

în exerciţiu precedent.

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

informaţiile generale despre produse.

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

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

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

Pentru lizibiliate, totalurile produselor sunt precedate de o etichetă

„Total pe produsul:‖ şi de o casetă text ce va reda codul şi numele

produslui. Pentru raport, valoarea va fi precedată doar de o etichetă

„Total general‖. Totalul pe produse şi informaţiile din antetul acestei

grupări să fie incadrate într-un dreptunghi cu fond galben, iar cele de

antet/suport - pe întreg raportul - într-un dreptunghi roşu.

Rezolvare:

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

Grupare (simbolul ) din fila Instrumente proiectare rapoarte din

panglică.

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

sortare şi totaluri, şi se face clic pe butonul Adăgare grup şi automat

este afişat un rând în casetă, cu o listă din care se alege câmpul

DenProd. Acţionând pe butonul Mai multe , se stabileşte să fie

vizibile secţiunea antet şi secţiunea subsol. Se glisează din zona detaliu

casetele text corespunzătoare câmpurilor: Codprod, Denprod, Um şi

Pret.

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

intermediul memoriei clipboard cu operaţiile Copy (Ctrl + C) şi Paste

(Ctrl + V). Acest control se mută în partea dreaptă a benzii Detaliu. La

proprietatea Sursă control se scrie: =Cant * Pret, pentru a se specifica

faptul că e vorba de produsul a două valori (Semnul „=‖ este

indispensabil). La proprietatea Format se alege Fix, iar la Zecimale se

precizează 2. Redăm mai jos, în modul Vizualizare aspect, configurările

făcute.

Page 99: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

99

4. În modul Vizualizare proiect, se selectează, cu un clic, caseta de text

corespunzătoare expresiei valoare, se copiază în clipboard, cu Ctrl + C

şi se lipeşte cu Ctrl + V. Cu mouse-ul se glisează caseta copiată, în

secţiunea Subsol DenProd. Se face o nouă lipire şi se glisează caseta în

secţiunea Subsol raport. Se reajustează înălţimea secţiunii de detaliu.

Pentru cele două casete copiate se setează următoarele proprietăţi de

dată:

Sursă control : =Sumă (Cant * Pret);

Execuţie sumă : Nu.

Se trasează un dreptunghi cu ajutorul instrumentului din fila

Instrumente raport/ Proiectare din panglică, se colorează cu galben prin

intermediul listei ascunse de culori, legată de instrumentu din

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

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

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

grupului.

Page 100: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

100

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

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

Exerciţii

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

în exerciţiu precedent.

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

Page 101: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

101

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

coloanelor.

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

totalurile produselor sunt precedate de o etichetă „Facturat clientului:‖ ,

şi de o casetă text ce va reda codul şi numele clientului. Totalul pe

client şi informaţiile din antetul acestei grupări să fie încadrate într-un

chenar albastru deschis, cu fond alb. Să se elimine fondul controalelor

din detaliu.

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

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

Rezolvare:

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

anterior.

2. Idem.

3. Idem.

4. O casetă cu număr curent al articolelor se realizează prin următorii paşi:

din caseta cu instrumente se selectează caseta text şi se glisează în

partea stângă a zonei de detaliu;

se şterge eticheta lipită de caseta de text ;

pentru proprietatea Sursă control se setează: =1;

pentru proprietate Execuţie sumă se setează Peste tot;.

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

Page 102: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

102

5. Pentru a salva lista rezultată într-un document Word, în prealabil,

documentul trebuie vizualizat în modul Examinare aspect şi din linia cu

instrumente proprie acestui mod de vizualizare se alege pictograma

aplicaţiei Microsoft Word şi se produce deschiderea raportului cu

procesorul de texte. Nu sunt importate elementele grafice. Rezultatul

este redat mai jos:

SC DEPOZITUL SRL

LISTA PRODUSELOR VANDUTE PE CLIENTI

Cod Denumire Nr. Data Preţ/UM

Produs Produs Client Adresa Telefon factură factură Delegat UM Cantitate Val

7023 Lapte 2,9 /l

111111 SC First SRL Str Primaverii nr 1 26111111

1 4 23.10.2009 Antonescu 15 43,50

2 3 22.10.2009 Antonescu 18 52,20

Facturat clientului: 111111SC First SRL 95,70

222222 SC Secundul SRL Str.Verii nr 2 26122222

1 6 25.10.2009 Popescu 15 43,50

2 2 22.10.2009 Popescu 30 87,00

Facturat clientului: 222222SC Secundul SRL 130,50

333333 SC Terţa Parte SRL Str.Toamnei nr 3 26133333

1 5 24.10.2009 Trandafir 20 58,00

Facturat clientului: 333333SC Terța Parte SRL 58,00

Total pe produs: 7023Lapte 284,20

1009 Ulei 3,27/Kg

111111 SC First SRL Str Primaverii nr 1 26111111

1 4 23.10.2009 Antonescu 12 39,24

Facturat clientului: 111111SC First SRL 39,24

222222 SC Secundul SRL Str.Verii nr 2 26122222

1 1 21.10.2009 Popescu 20 65,40

Facturat clientului: 222222SC Secundul SRL 65,40

333333 SC Terța Parte SRL Str.Toamnei nr 3 26133333

1 5 24.10.2009 Trandafir 11 35,97

Facturat clientului: 333333SC Terța Parte SRL 35,97

Total pe produs: 1009Ulei 140,61

1075 Zahar 3,1 /kg

222222 SC Secundul SRL Str.Verii nr 2 26122222

1 1 21.10.2009 Popescu 15 46,50

Facturat clientului: 222222SC Secundul SRL 46,50

333333 SC Terţa Parte SRL Str.Toamnei nr 3 26133333

1 5 24.10.2009 Trandafir 25 77,50

Facturat clientului: 333333SC Terța Parte SRL 77,50

Total pe produs: 1075Zahar 124,00

Total pe produsul: 548,81

Listat în data:

8 mai 2010 Întocmit Semnătura

17:56:03

Page 103: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

103

CAPITOLUL VI. LIMBAJUL VISUAL BASIC

6.1 Editarea modulelor Visual Basic for Application

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

intern al pachetului software pentru birouri Microsoft Office.

Cu ajutorul VBA pot fi create modulele Access, obiecte ale baze de date care

permit scrierea de rutine (subprograme, proceduri8, funcţii

9) pentru accesa şi face

particularizări în mod intim tabelele, formularele, rapoartele şi interogările din baza

de date şi funcţionarea conjugată a acestora.

VBA este un dialect al limbajului Visual Basic. În VBA nu pot fi create

programe de sine stătătoare ci proceduri a căror execuţie poate fi iscată de

interacţiunea utilizatorului cu obiectele incluse în fişierele Office (documente de tip

Word, registre de tip Excel, prezentări de tip Power Point şi baze de date Access).

Aceste proceduri constituie o perfecţionare a unui limbaj de macrocomenzi a

8 metodă de rezolvare a unei probleme, defalcată în etape succesive; func ţie executată de un

subprogram, parte din sintaxa limbajelor evoluate, conform www.dexonline.ro preluat din Marele

dicţionar de neologisme, Florin Marcu, Editura Saeculum, 2000 9 ib idem

Ferestra de

editare cod

Ferestra

proprietăţilor

obiectelor

Exploratorul

proiectelor

Instrumente

pentru

depanare

Instrumente

Ferestra urmărire

variabile Ferestra

afișare

Page 104: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

104

pachetului Office. Produsele pachetului Office, ele însele, crează în unele situaţii,

module scrise în VBA, a căror prezenţă şi rulare pot fi sesizate sau nu de utilizatori.

Unitatea elemetară prin care programatorii scriu un algoritm într-un limbaj de

programare este instrucţiunea. Un grup de instrucţiuni realizează o unitate de

program; în cazul VBA, o procedură.

Există mai multe tipuri de proceduri:

proceduri eveniment: O procedură executată automat ca răspuns la un

eveniment iniţiat de utilizator sau de codul program, sau activat de sistem prin

adăugarea de cod la un eveniment dintr-un formular sau raport.

proceduri Function : Procedură care returnează o valoare şi care poate fi

utilizată într-o expresie. Funcţia se declară cu instrucţiunea Function şi se

sfârşeşte cu instrucţiunea End Function.

proceduri Sub : Procedură care îndeplineşte o operaţiune. Spre

deosebire de o procedură Function, o procedură Sub nu returnează valori. O

procedură Sub se declară cu instrucţiunea Sub şi se încheie cu o instrucţiune End

Sub.

Procedurile sunt amplasate în module. Pentru crearea, testarea, depanarea

şi/sau rularea procedurilor utilizator, se recurge la instrumentele speciale asigurate de

mediul Visual Basic, care se iniţiază prin butonul , care este aşezat în capătul din

stânga al filei Instrumente baza de date a panglicii.

Procedurile sunt definite prin tastarea instrucţiunii Function sau Sub, eventual

precedate de specificatorul de domeniu Public sau Private. Pe acelaşi prim rând se

scrie efectiv un nume de procedură (funcţie sau subrutină) imediat urmat de toate

argumentele între paranteze iar la funcţie şi de comutator funcţiei. De exemplu,

următoarea declaraţie pentru funcţia Încărcat specifică şirNumeForm ca argument:

Function Încărcat (sirNumeForm As String) As Boolean

Sau, următoarea declaraţie pentru procedura Sub: AfişEveniment indică

NumeEveniment ca argument:

Sub AfişEveniment (NumeEveniment as String)

Corpul definirii procedurilor conţine liniile de cod în limbaj Microsoft Visual

Basic care vor efectua operaţiunile sau calculele necesare pentru realizarea

algoritmilor şi se termină cu linia de final End Sub sau End Function scrisă automat de

editor când s-a declarat procedura.

Pentru a facilita gestionarea obiectelor, a proceduri lor în module, în editor

există pentru programatori fereastre de afişare a proprietăţilor şi de exploarare a

proiectelor, permiţându-se crearea de proceduri şi module, cătarea şi actualizarea sau

stergerea lor.

Editorul mediului are facilităţi de colorare a cuvintelor cheie, declaraţiilor

utilizator, frazelor eronate, comentariilor etc. Cea mai puternică facilitate a editorului

Page 105: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

105

VBA este posibilitatea afişării contextuale în momentul scrierii instruc ţiunilor în

limbajul VBA, a elementelor care caracterizează un anumit context:

În fine, dar nu mai puţin important, este depanatorul, nelipsit din mediile de

programare deja de aproape 20 de ani.

În secţiunile următoare ale acestui capitol vom prezenta elemente de limbaj

VBA în scopul evidenţierii unor metode de access la obiectele bazei de date.

6.2 Elemente de sintaxă

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

preluate din limba engleză. În afacra acestora se utilizează identificatorii.

Un identificator este numele unui element dintr-un program, fie el variabilă,

constantă, tip definit de utilizator, enumerare, procedură, funcţie, obiect, metodă,

proprietate, control, formă modul sau chiar proiectul însuşi. Specific VBA este faptul

că numele şi conţinutul acestor identificatori pot fi alcătuite atât din prima parte a

codului ASCII (primele 128 caractere) cât şi din codul ASCII extins (caractere

speciale, care în funcţie de modul de redare pot căpăta diferite forme, de exemplu

diacritice).

Sintaxa a împrumutat multe reguli care constituie esenţialul regulilor

limbajului natural: între cuvinte se intercalează spaţiu, după rânduri se tastează

returul de car (enter), elementele de acelaşi tip sunt despărţite de virgulă,

argumentele funcţiilor sunt delimitate de parantezele rotunde, şirurile de caractere

care se manipulează intacte sunt delimitate de ghilimele, numele variabilelor trebuie

să înceapă cu o literă, etc.

În plus mai există câteva reguli specifice. Caracterele interzise în denumiri

sunt %!$&#@. Nu e permis să existe doi identificatori identici cu acelaşi scop şi

există o serie de identificatori standard, definiţi de Visual Basic. Nu este permis să

fie numiţi identificatorii prin cuvintele cheie ale limbajului, precum Dim, Private,

Public, Array, For, Next, While, with, If, Then, Else, End, etc.

Pentru a face codul cât mai lizibil mulţi programatori folosesc prefixe în

definirea identificatorilor care indică tipul de date referit şi scopul lor. Acesta regulă

nescrisă se numeşte scrierea ungară după un angajat ungur al Microsof t care a

promovat-o.

Exemplu:

iCod pentru un cod de tip integer; astrLuni pentru un masiv de şiruri de

caracter cu lunile anului; dbPersonal pentru o bază de date personal, etc.

Comentariile sunt şiruri de caractere care au în faţă caracterul (') şi au rolul de

a face textul programului mai lizibil, nefiind compilate sau interpretate.

Page 106: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

106

În general în Visual Basic dacă se doreşte să se scrie mai multe instruc ţiuni pe

o linie, aceasta sunt separate prin caracterul (:) .

Invers, dacă o declaraţie este prea mare se poate scrie pe mai multe linii,

pentru continuare se foloseşte caracterul continuator de linie ( _)(un spaţiu urmat de

o linie jos).

Algoritmii care sunt transformaţi în programe pot fi concepuţi iniţial prin

scheme logice. Schemele logice pot să fie sub forma unui pseudocod - care este un

limbaj mai puţin riguros decât un limbaj de programare, posibil şi cu termeni din

limba română - sau sub formă grafică.

Cele mai utilizate dintre aceste simboluri sunt:

start şi final de algorim

blocuri secvenţiale

operaţii de intrare-ieşire

bloc de decizie

apel de subprograme

conectori

6.3 Casete de dialog predefinite

În aproape toate limbajele care au formă Visual se pot folosi două funcţii

pentru a se putea realiza casete de dialog predefinite. Ev ident, formularele şi

rapoartele reprezintă o formă elegantă de introducere şi respectiv afişare a datelor

care se bazează în principal pe structura bazei de date. În afară de acestea, există în

VBA instrucţiuni pentru introducerea unor date izolate şi afi şarea de mesaje. Această

necesitate se simte mai ales în faza de test a unei proceduri sau funcţii, sau pentru

afişarea de mesaje către utilizatorul bazei de date. Şi mai mult chiar nici posibilitatea

Debug.Print nu este de înlăturată în această fază.

Pentru aceasta Visual Basic pune la dispoziţia programatorilor două funcţii:

InputBox care afişează o casetă de dialog ce permite preluarea datelor de la utilizator

şi MsgBox ce permite afişarea diferitelor informaţii.

Funcţia InputBox afişează o casetă de dialog modală care cere utilizatorului să

introducă date. Funcţia returnează o valoare de tip String formată din caracterele

introduse de utilizator în caseta cu text din fereastra de dialog dacă utilizatorul apasă

Page 107: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

107

butonul OK; dacă se apasă butonul Cancel şirul returnat este şirul vid "". Sintaxa

este:

InputBox(prompt[,title] [,default] [,xpos] [,ypos] [,helpfile, context])

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

Elementele din sintaxă reprezintă:

prompt reprezintă un şir de caractere afişat ca mesaj în caseta de dialog.

Numărul maxim de caractere este de 1024;

title, este un şir de caractere ce va fi afişat drept titlu în bara de titlu a casetei

de dialog;

default, reprezintă un şir de caractere ce va fi afişat în caseta cu text şi care va

fi returnat de funcţie în caz că utilizatorul nu introduce alte date;

xpos, ypos, sunt expresii numerice care specifică coordonatele colţului stânga

sus al casetei de dialog faţă de colţul stânga sus al ecranului;

helpfile, este un şir de caractere ce specifică fişierul Help ce va fi folosit

pentru a oferi asistenţă în lucrul cu caseta de dialog;

Exemplu:

InputBox "Introduceţi forma

de învăţământ:", _

"Formă de dialog

predefinită", "Zi", 1000, 1000

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

utilizatori sau pentru a afişa diferite mesaje de avertizare, erori, atenţionări. După

citirea mesajului utilizatorul va apăsa un buton pentru a închide fereastra. Funcţia

returnează un Integer specificând ce buton a fost apăsat. Sintaxa este:

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Unde:

prompt - un şir de caractere afişat ca mesaj în caseta de dialog. Numărul

maxim de caractere este de 1024;

buttons – o expresie numerică ce reprezintă suma valorilor care specifică

numărul şi tipul butoanelor afişate sau pictograma ;

title – un şir de caractere ce va fi afişat drept titlu în bara de titlu a casetei

de dialog;

helpfile - un şir de caractere ce specifică fişierul Help ce va fi folosit

pentru a oferi asistenţă în lucrul cu caseta de dialog.

Pentru setarea butoanelor există predefinite următoarele constante specifice

VisualBasic:

Page 108: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

108

Constante Valoare Descriere afişare

vbOKOnly 0 Numai buton OK

VbOKCancel 1 Butoanele OK şi Cancel

VbAbortRetryIgnore 2 Butoanele Abort, Retry şi Ignore

VbYesNoCancel 3 Butoanele Yes, No şi Cancel

VbYesNo 4 Butoanele Yes şi No

VbRetryCancel 5 Butoanele Retry şi Cancel

VbCritical 16 Pictograma Critical Message

VbQuestion 32 Pictograma Warning Query

VbExclamation 48 Pictograma Warning Message

VbInformation 64 Pictograma Information Message

VbDefaultButton1 0 Primul buton este implicit

VbDefaultButton2 256 Al doilea buton este implicit

VbDefaultButton3 512 Al treilea buton este implicit

VbDefaultButton4 768 Al patrulea buton este implicit

VbApplicationModal 0 Modul de aplicaţie; Aplicaţia aşteaptă şi utilizatorul

trebuie să răspundă la caseta de dialog

VbSystemModal 4096 Modul de sistem; Toate aplicaţiile sunt suspendate

până la răspunsul la caseta de dialog

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

următor (16, 32, 48, 64) descrie stilul pictogramelor; apoi grupul următor (0, 256,

512, 768) determină care buton este implicit; în fine ultimul grup (0, 4096) dă tipul

modulului. Prin adunarea numerelor se obţin efecte compuse, dar se adună exclusiv o

singură valoare dintr-un grup.

Valorile returnate de funcţia MsgBox sunt:

Constante Valoare Descriere

vbOK 1 OK

vbCancel 2 Cancel

vbAbort 3 Abort

vbRetry 4 Retry

vbIgnore 5 Ignore

vbYes 6 Yes

vbNo 7 No

Page 109: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

109

Exemplu:

MsgBox "Mesaj de atenţionare !", vbExclamation _

+ vbOKCancel + vbDefaultButton1+vbsystemmodal, "Sistemul stă!"

6.4 Variabilele în VBA

6.4.1. Declararea variabilelor

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

un identificator cu ajutorul căruia putem să referim variabila pe parcursul

programului şi tipul variabilei, care determină ce tip de dată poate stoca variabila. În

funcţie de tipul variabilei compilatorul alocă o zonă mai mică sau mai mare de

memorie pentru variabila respectivă.

Ieftinirea memoriilor face ca rigoarea gestionării tipurilor de variabile să nu

mai fie de actualitate, chiar declarările devin desuete în limbajele de programare

moderne. VBA permite utilizarea declarării implicite a variabilelor la prima utilizare

şi utilizarea tipului implicit Variant, prin care este posibil ca o variabilă să stocheze

valori diferite în momente diferite.

În schimb capătă importanţă crescută locul unde se declară şi spaţiul unde este

recunoscută o variabilă şi durata de existenţă.

Declararea unei variabile se face astfel:

{Public| Private| Dim} NumeVariabilă [as TipVaribilă]

Unde:

NumeVaribilă este identificatorul variabilei;

TipVariabilă este numele unui tip de date din cele pe care le acceptă Visual

Basic. Dacă acesta lipseşte se consideră că variabila este de tipul Variant.

Exemple:

Dim iCant as Integer ´defineşte variabila iCant de tip Integer

Dim dtZiSal as Date ´defineşte variabila dtZiSal de tip date

Page 110: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

110

Private sNume as String ´defineşte variabila sNume de tip String

Public lstListaPret as ListBox ´defineşte variabila lstListaPret ce va conţine o

referinţă către un obiect de tip ListBox

O caracteristică deosebit de importantă a variabilelor este domeniul de

valabilitate şi durata de existenţă.

Astfel există variabile locale la nivelul unei proceduri. Aceste variabile se

declară în interiorul procedurii cu ajutorul cuvântului cheie Dim.

Ele există atâta timp cât se execută procedura în care au fost declarate. De

asemenea, ele pot fi utilizate numai în cadrul acelei proceduri neavând nici o

semnificaţie în altă parte a programului. Au un domeniu de valabilitate doar la

nivelul proceduri şi au o durată de viaţă temporară. Este recomandat să se folosească

Dim doar pentru declararea acestui tip de variabile chiar dacă Visual Basic permite

folosirea lui şi în alte contexte.

Un alt tip de variabile sunt cele cu domeniu de vizibilitate la nivelul unui

modul. Aceste variabile pot fi folosite oriunde în interiorul modulului în care au fost

declarate şi există atâta timp cât este folosit modulul respectiv. Este recomandabil ca

declararea lor să se facă cu ajutorul cuvântului cheie Private în loc de Dim.

Un al treilea tip de variabile sunt cele globale la nive lul întregului program.

Acestea sunt pot fi folosite oriunde în program, au un domeniu de valabilitate global

şi există atâta timp cât se execută programul. Declararea acestor variabile se face

folosind cuvântul cheie Public.

Un alt tip de variabile sunt cele statice. Acestea pot avea un domeniu de

valabilitate locală sau la nivelul unei proceduri , dar o durată de existenţă permanentă.

Declararea se face cu ajutorul cuvântului cheie Static. Chiar dacă sunt definite

la nivelul procedurilor, variabilele Static îşi păstrează valoarea şi după ce procedurile

gazdă îşi termină execuţia. Dacă procedura va fi din nou apelată variabila statică nu

va fi iniţializată automat de Visual Basic, lucru ce se întâmplă cu variabilele care nu

sunt statice, ci va avea valoare pe care a avut-o la ultima ei folosire.

Variabilele locale la nivelul unui modul sau publice se declară în secţiunea de

declaraţii a modulului (Declarations).

În unele versiuni de Visual Basic se permite declararea variabilelor şi implicit,

adică o variabilă este considerată declarată la prima ei folosire. Nu este necesară o

declarare prealabilă cu ajutorul cuvintelor cheie Dim, Private, Public. În mod

implicit Visual Basic le consideră de tip Variant pe toate. În VBA acest lucru nu este

permis.

Una dintre cele mai periculoase erori întâlnite la declararea unei variabile este

următoarea:

Page 111: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

111

Dim a, b, c as Integer,

care la prima impresie pare că sunt definite trei variabile a,b,c de tip Integer

dar de fapt numai c este de tip Integer, celelalte fiind în mod implicit de tip Variant.

Corect este

Dim a as Integer, b as Integer, c as Integer

6.4.2. Tipurile variabilelor în VBA

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

Basic. Important în alegerea tipului de dată este natura datelor şi intervalul în care

poate lua valori variabila. VBA acceptă două categorii de tipuri de date:

standard (predefinite);

utilizator.

Tipurile de date standard sunt:

Tipul de

dată

Tipul informaţiei Memoria

necesară

Intervalul de valori

Integer Numere întregi 2 bytes -32,768 la 32,767

Long Numere întregi 4 bytes Aproximativ – 2.1E9 la 2.1E9

Single Numere reale 4 bytes -3.402823E38 la –1.401298E-45 pentru valori

negative şi1.401298E-45 la 3.402823E38

pentru valori pozitive

Double Numere reale

(dublă precizie)

8 bytes -1.79769313486232E308 la –

4.94065645841247E-324 pentru valori

negative şi 4.94065645841247E-324 la

1.79769313486232E308 pentru valori pozitive

Currency Numere cu până

la 15 cifre întregi

şi 4 zecimale

8 bytes -922,337,203,685,477.5808 la

922,337,203,685,477.5807

String Şir de caractere 1 byte /

caracter

Până la 65000 de caractere pentru şirurile cu

lungime fixă şi până la 2 miliarde de caractere

pentru şirurile dinamice

Byte Numere întregi 1 byte 0 la 255

Boolean Valori logice 2 bytes True sau False

Date Dată şi timp 8 bytes 01.01.100 la 31.12.9999

Object Referinţe către

obiecte

4 bytes N/A

Variant Oricare din 16 bytes N/A

Page 112: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

112

tipurile

precedente

+ 1 byte

per

caracter

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

operaţiile care se pot face cu valorile unui tip întreg sunt: adunarea (+);

scăderea(-); înmulţirea(*); împărţirea întreagă ( \) a \ b returnează câtul împărţirii lui

a cu b; împărţirea reală(/); restul împărţirii întregi (mod); ridicarea la putere (^) de

asemenea sunt permise operaţiile relaţionale: mai mic sau egal (<=); mai mic (<);

egal (=); mai mare(>); mai mare sau egal (>=);Rezultatul unor astfel de operaţii este

de tip boolean, având valorile True sau False;

operaţiile care se pot face cu valorile unui tip real sunt: adunarea (+);

scăderea(-); înmulţirea(*); împărţirea(/); ridicarea la putere (^); sunt permise

operaţiile relaţionale prezentate la tipurile întregi;

şirurile de caractere suportă operaţia de concatenarea (& sau uneori +) şi

operaţiile de comparaţie (<,<=,=,>=,>). Prin concatenare două sau mai multe şiruri

de caractere pot fi lipite formând un singur şir de caractere. Cu ajutorul operaţiilor de

comparaţie se stabileşte poziţia alfabetică a şirurilor de caractere;

valorile logice, booleene (True şi False) suportă următoarele operaţii

logice: negarea logică (Not); şi logic (And); sau logic (Or); sau exclusiv logic (Xor);

echivalenţa logică (Eqv); implicaţia logică (Imp);

tipurile de dată de tip obiect suportă o singură operaţie – cea de comparaţie

(Is). Cu ajutorul acestei operaţii se verifică dacă două variabile de tip obiect referă

acelaşi obiect sau nu.

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

obişnuit ca al oricăror alţi operanzi. O definiţ ie de constantă introduce un

identificator ca sinonim al unei valori constante.

În Visual Basic există două tipuri de constante:

intrinseci sau definite de sistem. Visual Basic pune la dispoziţie o serie

întreagă de constante pentru culori, taste, figuri etc;

simbolice sau definite de utilizator. Puteţi defini propriile dumneavoastră

constante cu ajutorul cuvântului cheie Const astfel:

[Public|Private] Const NumeConstanta[As type] = expresie

Exemple:

Const PI = 3.14159265358979

Const NR_CARACTERE = 256

Const ZI_DE_NASTERE = #02.04.1981#

Const NUME_DE_COD = "Şacalul"

Page 113: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

113

6.4.3. Iniţializarea variabilelor

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

0, text cu "", etc.

Modificarea informaţiilor stocate în variabile se face cu ajutorul instrucţiuni

de atribuire.

Sintaxa:

variabilă = expresie

sau

Set variabilă = expresie

Exemple:

iOreLunar = 170 – variabila a va stoca valoarea 170;

sNume ="Popescu"&" Ioan" – variabila va stoca şirul de caractere

"Popescu Ioan"

dtDataAng=#13.06.2000# – variabila va stoca data 13.06.2000

s = s + 1 – reprezintă primul şoc întâlnit de novicii în

informatică, care nu sesizează că e vorba

de operatorul de atribuire nu de

comparare, în cazul de faţă, în locaţia de

memorie s; va fi suprascris conţinutul

anterior incrementat cu 1

Unei variabile de tip obiect (tipul generic Object sau de tipul celorl alte obiecte

Access 2000) nu i se poate atribui un obiect în varianta clasică: variabila=expresie

sau variabila1=variabila2, ci utilizându-se instrucţiunea Set:

Set variabila_obiect = expresie_obiect .

În urma apelului acestei instrucţiuni, variabila_obiect va referi obiectul

returnat de expresia expresie_obiect.

Şi numele de proceduri pot fi considerate un caz particular de variabile.

6.5. Tablouri

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

În aproape toate există posibilitatea de lucru cu tablouri sau masive.

Un tablou este o structură de date percepute ca fiind adiacente, care poartă un

singur nume şi au acelaşi tip, care poate să păstreze mai multe valori de acelaşi tip.

Tabloul poate fi asimilat unui şir finit din matematică, Ca şi şirurile, tablourile pot fi

uni-, bi-, tri- sau multi-dimensionale. Distincţia între elemente se face cu ajutorul

Page 114: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

114

indecşilor care redau un număr de ordine al elementelor pe fiecare dimensiune.

Bineînţeles, dacă tabloul este de tip Variant atunci elementele acestuia pot să conţină

diferite tipuri de date (numerice, şiruri de caractere, date calendaristice, obiecte). De

obicei un tablou unidimensional este numit vector iar unul bidimensional matrice.

Tablourile sunt intuitiv create în programare implicaţie a scopului declarat al

calculatoarelor programabile, acela de a efectua cu viteză operaţii de rutină, omogene

şi repetivive. Pentru gestionarea cât mai eficientă a elementelor tablourilor sunt de

mare folos structurile repetitive.

Declararea unui tablou cu dimensiune fixă se poate face astfel:

Dim|Public|Private _

NumeTablou([[NrPrimElement to] NrUltimElement], _

[[NrPrimElement to] NrUltimElement], ...) [As TipDată]

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

NrUltimElement pentru toate dimensiunile, tabloul este considerat a fi de dimensiuni

fixă. Dacă nu se specifică NrUltimElement pentru o dimensiune, tabloul este

considerat a fi dinamic şi în interiorul procedurilor aceasta poate fi precizată cu

instrucţiunea Redim, care are aceiaşi sintaxă ca instrucţiunea Redim.

Ca de exemplu prin următoarea instrucţiune se declară un vector cu 7

elemente:

Dim zi(6) As string

Alte exemple ar fi:

Dim PuncteÎnPlan(10,10) As Byte ’ matrice cu 121 elemente

Private PuncteÎnSpaţiu( 1 To 30,1 To 30, 1 To 30) As Byte

’ masiv cu 303 elemente

După declaraţie, elementele tabloului pot fi folosite în expresii sau în orice loc

unde poate fi utilizată o variabilă obişnuită. Deci:

zi(0)=”Luni” ‟ încarcă primul element al vectorului zi

‟ cu şirul”Luni”

6.6 Funcţii şi proceduri definite de utilizator

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

prelucrare. Funcţiile şi procedurile se aseamănă întrucâtva şi de aceia au o denumire

comună: subprograme. Acestea pot fi apelate ori de câte ori este nevoie, fără a mai fi

necesară rescrierea lor. În felul acesta se reduce considerabil efortul de programare.

Aplicaţiile mai complexe nu pot fi concepute fără a apela la proceduri. În plus

programarea pe obiecte se poate realiza doar făcându -se ca fiecărei posibilităţi de

Page 115: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

115

modificare a proprietăţilor obiectelor sau răspunsului acestora la diferite evenimente

să-i corespundă câte un subprogram.

Pentru a da un grad de generalitate cât mai mare, funcţiile şi/sau procedurile

conţin în definirea acestora o listă de parametri formali. În momentul apelării unei

funcţii şi/sau proceduri se transmit către acestea valori pentru fiecare parametru al

procedurii sau funcţiei (sau nimic dacă nu există parametri).

Sintaxa pentru definirea unei proceduri este următoarea:

[{Private|Public}]Sub nume_procedură[([{ByRef|ByVal}] param_1 [as tip_date],…)]

[instrucţiuni]

....

[Exit Sub]

...

[instrucţiuni]

End Sub

Unde:

Private şi Public au semnificaţie similară cazului declarării variabilelor. O

procedură eveniment poate fi definită doar Private;

Sub permite ieşirea forţată dintr-o procedură; instrucţiunile care încep cu

Exit provoacă ieşirea forţată din blocurile de instrucţiuni ale anumitor

structuri;

Parametrii din definirea procedurii se numesc parametrii formali, ei

precizează (implicit sau explicit) doar tipul parametrilor;

{ByRef|ByVal} precizează modul de transmitere a parametrilor, care poate fi

prin valoare sau referinţă. Implicit se consideră a fi ByVal. Dacă se

utilizează ByVal modificările făcute argumentelor transmise procedurii se

pierd după ieşirea din procedură, pe când, dacă se utilizează ByRef

modificările făcute argumentelor transmise procedurii rămân şi după ieşirea

din procedură.

Apelul unei proceduri se poate face astfel:

[Call]nume_procedura [(valoare_param_1,valoare_param_2,....)]

Parametrii din apelul procedurii se numesc parametrii reali, ei sunt purtători

de valoare în momentul apelului, iar dacă nu corespund ca tip cu parametrii formali,

parametrii reali sunt convertiţi.

Referitor la definirea şi apelul procedurilor să considerăm următorul exemplu:

Sub test()

v = 7

transmit v

Page 116: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

116

MsgBox v

End Sub

Sub transmit(ByVal a)

a = a + 3

End Sub

Procedura test de tip Sub apelează procedura transmit de tip Sub. Modul de

transmitere a parametrului este prin valoare. Prin rularea subrutinei test se afişează

valoarea 7, cu toate că în interiorul subrutinei transmit parametrul este modificat,

aceste transformări nu rămân la ieşirea din subrutină.

Dacă se schmbă modul de transmitere a parametrului prin ByRef, linia de

definirea a subrutinei apelate fiind Sub transmit(ByVal a), atunci rezultatul execuţiei

subrutinei test va fi afişarea valorii 10.

Sintaxa unei funcţii este următoarea:

[{Private|Public}]Function nume_funcţie[([{ByRef|ByVal}]param_1 [as

tip_date],…)] _

[as tip_date]

[instrucţiuni]

[nume_funcţie = expresie]

...

[Exit Function]

[instrucţiuni]

[nume_funcţie = expresie]

End Function

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

valabile şi pentru acest tip de proceduri. Diferenţele apar de la de la specificul

capacităţii funcţiilor de a returna o valoare. Tipul valorii returnate este specificat în

linia de antet a definirii funcţiilor, după lista de parametrii. Valoarea se returnează

prin linia descrisă de sintaxa:

nume_funcţie = expresie

Acest rezultat va fi returnat în momentul terminării execuţiei funcţiei. Apelul

unei funcţii se poate face astfel:

Variabila=nume_funcţie[(valoare_param_1,valoare_param_2,...)] , variabila

preia rezultatul returnat de funcţie. Dar, prin apelarea unei funcţii se returnează o

valoare, deci funcţia apelată poate fi folosită ca un operand în orice expresie unde

este permis tipul returnat.

Referitor la definirea şi apelul funcţiilor să considerăm următorul exemplu:

Page 117: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

117

Function test1() As Integer

Dim v As Integer

MsgBox increment(7)

End Function

Function increment(a As Integer) As Integer

increment = a + 1

End Function

Execuţia funcţiei afişează valoarea 8.

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

poziţionează cursorul în corpul subprogramului, apoi se selectează comanda: Run,

Go/Continue F5. Dacă se doreşte executarea subprogramului în modul Trace, se

alege din meniul Debug, Step into F8.

Limbajul VBA cuprinde în plus o serie de funcţii predefinite care facilitează

scrierea procedurilor şi funcţiilor utilizator.

Unele mai des folosite dintre acestea sunt:

Abs(expresie_numerică): returnează valoarea absolută a unei expresii

numerice, sau a unui număr;

Asc(sir_caractere): returnează codul primului caracter din şirul de caractere

specificat;

CDate(expresie): face conversia la tipul Date;

CDbl(expresie): face conversia la tipul Double;

Dec(expresie): face conversia la tipul Decimal;

CInt(expresie): face conversia la tipul Integer;

CLng(expresie): face conversia la tipul Long;

CSng(expresie): face conversia la tipul Single;

CStr(expresie): face conversia la tipul String;

Cos(expresie_numerică): returnează cosinus dintr-o expresie numerică sau

dintr-un număr. Valoarea returnată este de tip Double ;

Chr(COD_CARACTER): returnează caracterul ASCII cu codul specificat;

Date(): Returnează data calendaristică;

Day(data_calendaristică): returnează numărul zilei din luna;

Exp(expresie_numerică): returnează valoarea constantei e ridicată la o putere

(expresie numerică sau număr);

Log(expresie_numerică): returnează logaritmul natural dintr-un număr sau

dintr-o expresie numerică;

InStr ([intStart, ]strŞir, strCaută[, intCompară]): verifică dacă un caracter

sau un şir( strCaută) se găseşte în interiorul altui şir (strŞir). În caz afirmativ

funcţia returnează poziţia primului caracter căutat în şirul strŞir;

Page 118: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

118

IsDate(expresie): returnează valoarea adevărat (TRUE) dacă expresia dintre

paranteze este compatibilă cu o dată calendaristică ;

IsEmpty(expresie): returnează valoarea adevărat (TRUE) dacă expresia

dintre paranteze nu conţine o valoare. Null este considerat valoare;

IsNumeric(expresie): returnează valoarea adevărat (TRUE) dacă expresia

dintre paranteze poate fi evaluată ca număr;

IsObject(expresie): returnează valoarea adevărat (TRUE) dacă identificatorul

dintre paranteze este de tip obiect;

IsError(expresie): returnează valoarea adevărat (TRUE) dacă expresia dintre

paranteze conţine o eroare;

Lcase(şir_de_caractere): transformă literele mari dintr-un şir în litere mici;

Left(strŞir,intNrCaractere): extrage dintr-un şir de caractere primele

intNrCaractere din partea stângă a şirului;

Len(şir_caractere/variabilă): returnează numărul de caractere ale şirului de

caractere specificat sau numărul de octeţi necesari pentru a stoca conţinutul

unei variabile;

Mid((şir_caractere, poziţie_start[, lungimea])): extrage un şir de caractere

dintr-un alt şir de caractere;

Month(data_calendaristică): returnează numărul lunii din an;

Right(strŞir,intNrCaractere): extrage dintr-un şir de caractere primele

intNrCaractere din partea dreaptă a şirului ;

Space(număr): returnează numărul de spaţii specificate;

Str(expresie_numerică): converteşte rezultatul evaluării expresiei numerice

dintre paranteze într-un şir de caractere;

Ucase(şir_de_caractere): transformă literele mici dintr-un şir în litere mari;

Val(şir_caractere): returnează conversia şirului de caractere specificat, într -

un număr;

WeekDate(dată_calendaristică,prima_zi): returnează numărul zilei din

saptămâna datei calendaristice;

Year(dată_calendaristică): returnează anul.

Pentru scrierea programelor fiecare limbaj dispune de implementarea

aşaziselor structuri de control al execuţiei programelor. S -a demonstrat că orice

algoritm, fie el cât de complex, poate fi scris cu doar 3 sau 4 astfel de structu ri.

Principalele structuri de control implementate în Visual Basic for Aplication

sunt:

Page 119: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

119

6.7 Structura alternativă

În Visual Basic for Aplication pentru implementarea structurii alternative se

poate utiliza instrucţiunile IF şi SELECT CASE.

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

If condiţie Then

[secvenţa instrucţiuni A]

[Else

[secvenţa instrucţiuni B ]]

End If

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

logică, care poate fi evaluată la adevărat (True) sau fals (False). Compilatorul

evaluează condiţia şi dacă ea este "adevărată", se execută secvenţa instrucţiuni A.

Dacă expresia este "falsă", instrucţiunea "If" are şi parte de "Else" atunci se

execută secvenţa instrucţiuni B. Dacă condiţia este o valoare numerică atunci dacă

este diferită de 0 este interpretată ca True iar valoarea 0 este interpretată ca False.

Una şi numai una dintre cele două instrucţiuni se execută.

Grafic, instrucţiunea este reprezentată astfel:

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

care calculează soluţiile ecuaţiei de gradul al doilea, pentru care prezentăm schema

logică şi codul sursă, scris în Visual Basic.

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

Private Sub ec2(double a, _ double b, double c)

Dim delta As Double

Dim x As Double

Dim x1 As Double

Dim x2 As Double

If a <> 0 Then

delta = b ^ 2 - 4 * a * c

If delta >= 0 Then

x1=(-b+Sqr(delta))/(2*a)

Condiţie

secvenţa

instrucţiuni A

secvenţa

instrucţiuni A

Da Nu

Page 120: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

120

Sub ec2(a, b, c)

a≠0

delta=b2-4ac b≠0

x=-c/b Ecuaţia

nu are

sens Scrie x

delta>=0

x1=(-b+delta

)/2a

x2=(-b-delta

)/2a

Nu există

soluţii

reale Scrie x1, x2

Terminare

Nu Da

Da

Da

Nu

Nu

x2=(-b-Sqr(delta))/(2*a)

MsgBox "x1 =" & x1

MsgBox "x2 =" & x2

Else

MsgBox _

"ec. nu are solutii reale"

End If

Else

If b <> 0 Then

x = -c/b

MsgBox "x =" & x

Else

MsgBox_

"ecuatia n- are sens"

End If

End If

End Sub

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

6.8 Structura repetitivă

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

instrucţiuni de un anumit număr de ori, în funcţie de o condiţie. Fiecare limbaj

implementează mai multe instrucţiuni pentru realizarea structurii repetitive.

Structurile repetitive întâlnite pot fi: cu numărător, cu testarea condiţiei

înaintea executării unui ciclu, cu testarea condiţiei după executarea unui ciclu.

6.8.1. Structura repetitivă cu

numărător

Cele mai multe limbaje folosesc pentru

instrucţiunea repetitivă cu numărător o formă a

instrucţiunii FOR. În Visual Basic aceasta este

numită în mod obişnuit instrucţiunea FOR...NEXT.

Sintaxa instrucţiunii FOR...NEXT este :

valc<=valf

valc = vali

Operaţii care

se repetă

Da

valc = valc + valp

Page 121: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

121

For valc=vali To valf [Step valp]

[secvenţă instrucţiuni]

[Exit For]

[secvenţă instrucţiuni]

Next [valc ]

Schema logică de reprezentare a acestei structuri este redată alăturat sintaxei .

În descrierea sintaxei instrucţiunii avem :

vali, valf - reprezintă valoarea iniţială, respectiv valoarea finală pentru o

variabilă contor valc;

valp - reprezintă valoarea pasului de incrementare/decrementare pentru

variabila contor, implicit are valoarea =1;

vali, valf, valp - pot fi şi rezultatul evaluării unor expresii.

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

de ori, plecându-se de la valoarea iniţială a variabilei contor, până la valoarea finală

a acesteia, incrementându-se întotdeauna variabila contor cu valp. Dacă partea de

[Step ...] lipseşte, compilatorul consideră valp egal +1.

Pentru ieşirea forţată din structura repetitivă se poate uza de partea Exit For a

instrucţiunii care de obicei trebuie intercalată într -o structură alternativă. Prin

execuţia rândului Exit For, controlul instrucţiunii este transferat la prima instrucţiune

după Next.

Redăm mai jos, codul sursă pentru algoritmul deordonare al unui vector cu n

elemente.

Page 122: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

122

6.8.2. Structurile repetitive de tip Do … Loop

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

DO...LOOP. Această instrucţiune repetă un bloc de instrucţiuni cât timp o condiţie

este adevărată sau până când o condiţie devine adevărată. Mai clar spus, această

structură suportă mai multe forme, echivalente fie cu structura repetitivă cu condiţie

anterioară fie cu structura repetitivă cu condiţie posterioară.

Aceste structuri repetă un bloc de instrucţiuni în funcţie de valoarea de adevăr

a unei condiţii. Structurile pot fi implementate prin mai multe forme, echivalente fie

cu structura repetitivă cu condiţie anterioară fie cu structura repetitivă cu condiţie

posterioară. Unele forme se repetă atâta timp cât condiţia este adevărată, altele, din

contră, un timp atât cât îi e necesar condiţiei să devină adevărată.

Limbajul Visual Basic, prin instrucţiunea Do...Loop are implemenate toate

aceste 4 posibilităţi.

Sintaxa poate fi redată astfel:

DO [{While | Until} condiţie]

[instrucţiuni]

[Exit Do]

[instrucţiuni]

Loop

sau este valabilă şi sintaxa în forma următoare:

Do

[instrucţiuni]

[Exit Do]

[instrucţiuni]

Loop [{While|Until} condiţie]

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

care poate fi evaluată la adevărat (True) sau fals (False). Compilatorul evaluează

condiţia şi în funcţie de rezultatul obţinut, mai execută sau nu instrucţiunile din

corpul structurii. Dacă condiţia este o valoare numerică, atunci dacă este diferită de 0

este interpretată ca True iar valoarea 0 este interpretată ca False.

După evaluarea condiţiei, controlul execuţiei va fi transmis la una şi numai

una dintre cele două ramuri cu cu ieşire din ea.

Atunci când se foloseşte While ciclarea continuă dacă condiţia este adevărată,

în schimb când se foloseşte Until ciclarea continuă dacă condiţia este falsă.

În plus dacă condiţia este pe linia cu Do atunci structura este repetitivă cu

condiţie anterioară, deci e posibil ca instrucţiunile din corpul structurii să nu fie

executate niciodată.

Page 123: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

123

În schimb dacă condiţia este pe o linie cu Loop atunci structura este repetitivă

cu condiţie posterioară, deci instrucţiunile din corpul structurii vor fi executate ce l

puţin odată, indiferent de valoarea de adevăr a condiţiei.

Existenţa acestei instrucţiuni pluriforme este firească deoarece în algoritmi

sunt poate, întotdeauna substituibile instrucţiunile repetitive

Dacă este întâlnit rândul cu Exit Do, atunci controlul programului este

transmis forţat în afara buclei, la prima instrucţiune care se găseşte după linia Loop.

Redăm mai jos, schema logică şi codul sursă pentru algoritmul de calcul al

sumei primelor n numere naturale, folosind cele 4 variante ale instruc ţiunii.

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

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

Function sum(n As Integer)_

As Integer

Dim i As Integer

sum = 0

i = 1

Do While i <= n

sum = sum + i

i = i + 1

Loop

End Function

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

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

Function sum(n As Integer)_

As Integer

Dim i As Integer

sum = 0

i = 1

Do Until i > n

sum = sum + i

i = i + 1

Loop

End Function

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

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

i > n

Return

sum = 0

i = 1

sum = sum + i

i = i + 1

Nu

Function Sum

(n)

i <= n

Return

sum = 0

i = 1

sum = sum + i

i = i + 1

Da

Function Sum (n)

Page 124: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

124

Function sum(n As Integer)_

As Integer

Dim i As Integer

sum = 0

i = 1

Do

sum = sum + i

i = i + 1

Loop While i <= n

End Function

iv) Cazul Do Until cu condiţie posterioară:

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

Function sum(n As Integer)_

As Integer

Dim i As Integer

sum = 0

i = 1

Do

sum = sum + i

i = i + 1

Loop Until i > n

End Function

6.8.3. Structura repetitivă „pentru fiecare”

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

FOR...NEXT numită instrucţiunea For...Each...Next. Această instrucţiune repetă un

grup de instrucţiuni pentru fiecare element al unui masiv sau al unei colecţii de

obiecte.

Sintaxa este redată mai jos:

For Each element In grup

[instrucţiuni]

[Exit For]

[instrucţiuni]

Next [element]

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

elementele unui masiv sau a unei colecţii referit prin variabila grup. Pentru colecţii,

element poate fi variabilă de tipul variant, un obiect generic de variabilă, sau un

i <= n

Ieşire

sum = 0

i = 1

sum = sum + i

i = i + 1

Function Sum (n)

Da

i > n

Ieşire

sum = 0

i = 1

sum = sum + i

i = i + 1

Function Sum (n)

Nu

Page 125: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

125

obiect specific de variabilă. Pentru masive element poate fi doar de tipul variant.

grup este un nume de colecţie sau masiv.

Exemplul următor listează numele tuturor controalelor incluse în formularul

Produse. Pentru a fi accesate controalele, formularul trebuie să fie deschis.

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

Sub Form()

Dim f As Form

Dim c As Control

Set f = Forms("Produse")

For Each c In f

Debug.Print c.Name

Next

End Sub

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

cu formularul deschis.

6.9 Programarea recursivă

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

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

iterativ.

Page 126: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

126

Un exemplu de funcţie recursivă, scris în VBA, calculează suma primelor n

numere naturale:

„-------------------------

Function sum_rec(n As Integer)

If n > 0 Then

sum_rec = n+sum_rec(n –1)

End If

End Function

Apelul se poate face chiar din “Debug Window” prin linia: sum_rec(100).

Pentru a nu se apela la infinit, în subprogramele recursive trebuie plasat un

bloc de instrucţiuni care să conţină o secvenţă de oprire, oarecum similară

algoritmilor iterativi.

În programare, recursivitatea este inspirată din recursivitatea sau recurenţa din

matematică. Dacă efectiv subprogramul se apelează direct pe el însuşi atunci avem

recursivitate directă, pe când dacă un subprogram SP1 apelează un altul SP2 care

apelează la rândul lui pe SP1 atunci avem recursivitate indirectă. Prin aceasta se

ajunge la realizarea repetabilităţii unor blocuri de instrucţiuni. În general însă

recursivitatea nu face economie de memorie, deoarece trebuie menţinută o stivă cu

valorile de prelucrat, putîndu-se supraîncărca stiva şi memoria. În schimb pot

subprogramele recursive sunt lizibile şi uşor de depanat.

6.10 Obiecte ACCESS 2000

O baza de date Access este formată dintr-o mulţime de obiecte, care pot fi

accesate din VBA. Fiecare obiect are o serie de proprietăţi şi metode ataşate.

Reamintim că termenul de proprietate se referă la o dată încapsulată într-un obiect,

iar termenul de metodă se referă la un subprogram încapsulat într -un obiect.

Invocarea unei metode sau proprietăţi a unui obiect se face prin prefixarea acesteia

cu numele obiectului astfel:

nume_obiect.nume_metodă;

nume_obiect.nume_proprietate.

Specificarea unui obiect aparţinând unei colecţii se poate face conform uneia

din următoarele variante:

1. nume_obiect_colecţie![nume_obiect] – este nevoie de paranteze drepte

numai dacă numele obiectului conţine spatii,

2. nume_obiect_colecţie("nume_obiect"),

Page 127: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

127

3. nume_obiect_colecţie(index_obiect) – număr care indică poziţia în

colecţie a unui obiect. Aceste numere de ordine încep de la zero.

Invocarea formularului sau raportului curent se poate face prin apelativul Me.

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

obiectele Applicaton şi Form.

Obiectul Application referă aplicaţia Microsoft Access 2000.

Principalele metode ale obiectului Application sunt:

CurrentDb returnează un obiect baza de date (DataBase) care refera baza de

date curentă;

CurrentUser returnează utilizatorul curent, conectat la baza de date curent ă;

SysCmd se poate utiliza în principal pentru a afişa un text în bara de stare

(Status Bar) sau pentru gestionarea unui Progress Bar;

SetOption stabileşte valori pentru parametrii care se găsesc în meniul Tools,

opţiunea Options:;

obiect_Application.SetOption nume_opţiune, setări ;

GetOption returnează valorile unor parametri care se găsesc în meniul

Tools, opţiunea Options:;

obiect_Application.GetOption(nume_opţiune).

Principalele proprietăţi ale obiectului Application sunt:

DoCmd apelează obiectul DoCmd, descris în paragraful precedent;

Forms permite accesul la colecţia de formulare deschise dintr -o baza de date;

Reports permite accesul la colecţia de rapoarte deschise dintr-o baza de

date;

Screen permite accesul la obiectul Screen (va fi descris în paragrafele

următoare).

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

din baza de date se regăsesc în colecţia Forms, fiind identificate printr-un număr,

alocat în ordinea deschiderii acestora. Primul formular deschis are numărul de ordine

zero. Pentru a afla numărul de formulare deschise la un moment dat, trebuie citită

proprietatea Count a colecţiei Forms.

Metodele obiectului Form sunt:

Repaint redesenează pe ecran formularul pentru care a fost apelată această

metodă;

Requery reactualizează înregistrările din formular (dacă formularul are ca

sursă o interogare se reface aceasta);

Page 128: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

128

SetFocus se cedează controlul formularului specificat împreună cu metoda;

Undo - toate modificările făcute datelor afişate în formular se pierd.

Dintre proprietăţile acestui obiect amintim:

OpenArgs - şir de caractere care poate fi transmis ca parametru la

deschiderea unui formular;

RecordSource - numele unei tabele, interogări sau o fraza SQL ce are ca

rezultat un set de înregistrări de care este ataşat formularul;

RecordSelectors stabileşte apariţia marcatorului de înregistrare pe formular

(TRUE) sau dezactivarea acestuia (FALSE);

DataEntry - formularul este deschis numai pentru introducerea de

înregistrări noi;

AutoCenter - formularul este afişat pe centrul ecranului;

AutoResize - formularul se redimensionează pe ecran automat, astfel încât sa

se vadă tot conţinutul său;

Caption - şir de caractere afişat în bara de titlu a ferestrei formularului;

ControlBox setează activarea (TRUE) sau dezactivarea (FALSE) butoanelor

de control ale ferestrei formularului;

NavigationButtons - setează activarea (TRUE) sau dezactivarea (FALSE)

controlului pentru deplasarea între înregistrările unui formular;

Toolbar - indică bara de instrumente (Toolbar) afişată o dată cu formularul;

Controls - reprezintă colecţia de controale de pe un formular.

6.11 Programarea dirijată de evenimente în ACCESS 2000

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

poate vorbi de programare dirijată de evenimente în Access în contextul

formularelor, rapoartelor şi controalelor de pe un formular/raport sau secţiunile

acestora.

Exemple de evenimente în Access 2000 pot fi: deschiderea unui

formular/raport, închiderea unui formular/raport, scrierea unei înregistrări într -o

tabela, ştergerea unei înregistrări dintr-o tabela, dublu clic pe mouse, activarea unui

buton de comanda, o eroare etc. Pentru obiecte, pentru toate evenimentele din

Access, sistemul prevede proceduri sau funcţii. Ele pot fi particularizate de către

programatorii de ineterfeţe prin inserare de cod. Astfel de exemplu, la evenimentul

de deschidere a unui formular se poate ataşa o procedură/funcţie care sa testeze dacă

un anumit utilizator are drepturi de utilizare a acestuia sau înainte de salvarea unei

înregistrări într-o tabelă se poate ataşa o procedura care sa verifice respectarea

anumitor corelaţii dintre date etc.

Page 129: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

129

Pentru a particulariza o procedură a unui eveniment legat de un obiect trebuie

parcurse următoarele etape:

se afişază Foaia de proprietăţi;

se selectează secţiunea Event;

se selectează evenimentul la care se doreşte ataşarea procedurii;

click pe butonul … pentru editarea procedurii respective. Sistemul deschide

în editorul VBA o procedură de tip Sub sau Function cu numele compus din

numele obiectului legat de numele evenimentului prin semnul _ .

Pentru un obiect formular (Form) principalele evenimente sunt:

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

OnLoad: se produce la deschiderea formularului, în momentul în care o

înregistrare din tabela sau interogarea ataşata formularului (în proprietatea

Record Source) este afişată pe ecran,

OnCurrent: se declanşează atunci când o înregistrare din tabela sau

interogarea ataşată formularului devine înregistrare curentă.

Pentru controale dintre evenimentele caracteristice acestora se pot enumera:

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

ului,

OnDblClick: se declanşează în momentul în care se activează de două ori

butonul mouse-ului (la dublu clic),

OnMouseMove: se declanşează în momentul în care utilizatorul mută mouse -

ul pe deasupra controlului unde se tratează acest eveniment,

OnChange: se declanşează atunci când conţinutul unui control casetă de text

(Text Box) sau listă derulantă (Combo Box) se modifică.

Exerciţiu:

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

casetă1 şi casetă2. Pentru început colorăm fondul pentru casetă1 cu rosu, iar pentru

casetă2 cu albastru. Particularizăm procedurile de evenimente astfel:

► la clic pe casetă1 formularul să devină roşu;

► la clic pe casetă2 formularul să devină albastru;

► la clic pe formular, acesta să devină gri;

Page 130: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

130

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

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

jos:

Tip de

eveniment Nume Apare când

de fereastră Close, Load, Open, Resize, Unload Utilizatorul realizează o acţiune cu

formularul sau raportul

de focalizare Activate, Deactivate, Enter, Exit,

GotFocus, LostFocus

Obiectul primeşte sau pierde focalizarea

sau devine activ respectiv inactiv

de date

AfterDelConfirm,AfterInsert,

AfterUpdate,BeforeDelConfirm,

BeforeInsert,BeforeUpdate,

Change,Current,Delete, NotInList,

Update

Se fac modificări ale datelor sau

înregistrărilor

de mouse Click, DblClick, MouseDown,

MouseMove, MouseUp Apare o acţiune cu mouse-ul

de tastatură KeyDown, KeyPressed, KeyUp

Utilizatorul apasă taste sau foloseşte

funcţia SendKeys pentru transmiterea unei

acţiuni

de tipărire Format, Print, Retreat Un raport este tipărit sau este formatat în

vederea tipăririi

de ceas Timer Creat de Access la intervale de timp

definite de utilizator

Page 131: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

131

de eroare Error Apare odată cu o eroare şi dă posibilitatea

utilizatorului să o trateze

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

evenimente. Aşa se întâmplă pentru diversele operaţii ca re pot fi executate de

operatori. Programatorii pot să modifice sau nu aceste evenimente, VBA le oferă ca

potenţial de particularizare.

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

operaţii:

Operaţie Succesiune de evenimente

Deschiderea unui formular cu controale active Open, Load, Resize, Activate, Current

Deschiderea unui formular fără controale active Open, Load, Resize, Activate, GotFocus,

Current

Închiderea unui formular cu controale active Unload, Deactivate, Close

Închiderea unui formular fără controale active Unload, LostFocus, Deactivate, Close

Intrarea într-un control Enter, GotFocus

Ieşirea dintr-un control Exit, LostFocus

Cumutarea între două formulare F1 şi F2 cu

controale active

Deactivate(F1), Activate(F2)

Cumutarea între două formulare F1 şi F2 fără

controale active

LostFocus(F1), Deactivate(F1), GotFocus(F2),

Activate(F2)

Modificarea unui text într-o casetă text sau

combinată, pentru fiecare caracter introdus:

KeyDown, KeyPressed, Change, KeyUp

Actualizarea datelor într-un control sau înregistrare KeyDown, KeyPressed, Change, KeyUp,

BeforeUpdate, AfterUpdate, Exit

Înserarea unei înregistrări, la intrarea în primul

control

KeyDown, KeyPressed, BeforeInsert, Change,

KeyUp

Înserarea unei înregistrări, la ieşirea din ultimul

control

BeforeUpdate, AfterUpdate, AfterInsert

Stergerea uneiÎnregistrări Delete, Current, BeforeDelConfirm şi dacă se

apasă Yes se mai face şi AfterDelConfirm

6.12 Accesul cu programele la obiectele

bazei de date

Obiectele bazelor de date pot fi accesate cu

ajutorul extensiilor API ale limbajelor de programare.

În continuare vom prezenta cateva aspecte ale

posibilităţilor prin care se rezolvă această problemă cu

VBA.

Page 132: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

132

Deja am dat câteva exemple în acest sens în subcapitolele ante rioare.

Obiectele bazelor de date Access sunt structurate în ierarhii: ADODB (ActiveX Data

Objects), ADOX (Microsoft ADO Extensions for DLL and Security) şi JRO

(Microsoft Jet and replication Objects). Pentru exploatarea datelor se folosesc

obiectele ADODB iar pentru definiţia datelor se folosesc obiectele ADOX.

ADODB este un model ierarhic de obiecte,

redat în figura alăturată.

Casetele gri reprezintă obiecte, iar

casetele albe colecţii de obiecte.

Specificarea unui obiect aparţinând unei

colecţii se poate face conform uneia dintre

următoarele variante:

► nume_colecţie![nume_obiect] –fiind nevoie

de paranteze drepte numai dacă numele

obiectului conţine spaţii;

► nume_colecţie("nume_obiect");

► nume_colecţie(index_obiect) – index care

indică poziţia în colecţie a unui obiect.

Aceste numere de ordine încep de la zero.

ADOX este o colecţie de obiecte produse de

Microsoft pentru definirea şi crearea structurilor bazelor de date şi a securităţii

acestora, redată în figură. Specificarea unui obiect aparţinând unei colecţii se poate

face în mod similar specificării obiectelor în cazul ierarhiei ADODB.

Cel mai important obiect din ADODB este obiectul Connection care defineşte

o sesiune de lucru pentru un utilizator al unei date particulare. Cum am mai spus, se

pot folosi în principal, informaţii din baze de date Access, SQL Server sau MSDE.

Pentru a ne conecta la baza de date, Data Source=C: \My

Documents\bdNelu.accdb, trebuie scris următorul cod:

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

Public Sub conexiune()

Dim con As ADODB.Connection

' realizează o conectare

con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;" _

& "Data Provider=Microsoft.ACE.OLEDB.12.0"; & _

"Data Source=C:\My Documents\bdNelu.accdb "

con.Open

MsgBox con.ConnectionString

set con= Nothing

End Sub

Catalog

Tables Table

Columns Column

Properties Propert

y

Columns Column

Properties Propert

y

Indexes Index

Columns Column

Properties Propert

y

Keys Key

Groups Group

Users User

Users User

Groups Group

Procedure

s

Procedur

e Commmand

Views View

Commmand

Page 133: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

133

Deci trebuie declarată o variabilă pentru obiectul conexiune. Apoi trebuie

precizat conţinutul iniţial al şirului conexiunii, care conţine valorile pentru

proprietăţile conexiunii. Pentru a realiza conexiunea sunt obligatorii specificarea

proprietăţii Provider, Data Source şi User.

Însă de cele mai multe ori se lucrează cu datele din baza de date curentă. În

consecinţă codul se simplifică astfel:

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

Public Sub conexiune()

Dim con As ADODB.Connection

' realizează o conectare

Set con = CurrentProject.Connection

MsgBox con.ConnectionString

set con= Nothing

End Sub

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

datele proiectului curent.

Până aici s-a prezentat doar prima chestiune care trebuie rezolvată în lucrul cu

datele. Obiectul care conţine informaţiile care vor fi procesate de rutine este

mulţimea de înregistrări (în limba engleză: RecordSet).

Pentru iniţializarea lucrului cu o mulţime de înregistrări se utilizează

următoarea secvenţă de instrucţiuni:

Dim mî as RecordSet

set mî = New ADODB.RecordSet

mî.Open Sursă, Conexiune, TipCursor, TipBlocare, Opţiuni

"mî" este numele variabilei prin care se face referire la mulţimea de înregistrări,

iar ultima linie, bineînţeles că este prezentată ca ca sintaxă pe care o vom explica.

Parametrul "sursă" poate fi numele unui tabel sau numele unei interogări,

comenzi, intucţiuni SQL sau procedură ce are rezultat o mulţime de înregistrări.

Despre "conexiune" am scris puţin înainte.

Parametrul "tipcursor" poate fi specificat cu următoarele constante

predefinite: adOpenDynamic, adOpenKeyset, adOpenStatic sau adOpenForwardonly.

Diferenţele între aceste tipuri de cursoare apar de la modul cum e tratată înregistrarea

referită la un moment dat, deplasarea prin înregistrări sau posibilitatea de a se seziza

modificările făcute de alţi utilizatori. Numele lor sugerează oarecum despre ce e

vorba.

Page 134: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

134

Parametru "tipblocare" se referă la modul de tratare a înregistrărilor pe timpul

editării lor, posibilitatea de acces la ele a altor utilizatori. Constantele predefinite

care stabilesc acest parametru sunt: adLockReadOnly, adLockPessimistic,

adLockOptimistic şi adLockBatchOptimistic.

Implicit ultimii doi parametrii sunt daţi de constantele: adOpenForwardonly şi

respectiv adLockReadOnly.

Pentru parametrul opţiuni se pot folosi următoarele constante VB: adCmdText,

adCmdTable, adCmdTableDirect, adCmdStoredProc, adCmdUnknown şi adCmdFile

care precizează modul cum este evaluat parametrul "sursă".

Acestea fiind precizate putem să trecem la prezentarea unor exemple mai

edificatoare.

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

(navigare) se folosesc metodele Move, MoveNext, MovePrevious, MoveFirst şi

MoveLast.

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

Public Sub Navigare(tabel as string)

Dim rs As ADODB.Recordset

Dim con As ADODB.Connection

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

with rs

.CursorType = adOpenStatic

.CursorLocation = adUseClient

.Open tabel, con, , , adCmdTable

If .RecordCount > 0 Then

.MoveFirst

Do

For i = 0 To .Fields.Count - 1

Debug.Print .Fields(i).Value;

Next

Debug.Print

.MoveNext

Loop Until .EOF

End If

End With

rs.close

con.close

set rs=nothing

set con=nothing

Page 135: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

135

End Sub

Acest exemplu

afişează valorile câmpurilor

înregistrărilor unui tabel

(dacă există câmpuri de tip

obiect OLE rezultatul e

imprevizibil). Apelul poate

fi făcut din fereastra

Immediate, acolo unde va

afişa:

S-a arătat doar

navigarea printre

înregistrări, un proces

ReadOnly. Pentru a se putea

interveni cu actualizări trebuie să se facă apel la metodele .AddNew, .Update sau

.Delete. Actualizările practic sunt făcute după o căutare prealabilă a articolului în

cauză. Fie un tabel "persoane" cu campurile marca şi nume. Scriem o procedură care

va căuta articolul cu marca 50. Dacă tabelul este indexat cătarea se poate face cu

metoda .Seek altfel cu metoda .Find. O vom folosi pe aceasta din urmă, dar atenţie

este mai lentă şi folosirea ei repetată încetineşte lucrul.

Metoda .Find are următoarea sintaxă:

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

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

din vecinătatea articolului de unde se începe căutarea care nu sunt verificate (implicit

0). "sens" poate fi adSearchForward sau adSearchBackWard (implicit în faţă).

Început poate fi primul articol, ultimul sau articolul curent (implicit).

Procedura este următoarea:

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

Public Sub Modificare_Stergere()

Dim rs As ADODB.Recordset

Dim con As ADODB.Connection

dim sirdate as String

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

with rs

Page 136: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

136

.CursorType = adOpenStatic

.CursorLocation = adUseClient

.Open "persoane", con, adOpenStatic, _

adLockOptimistic, adCmdTable

.Find "marca=50"

If Not .Eof Then

sirdate=""

For i = 0 To .Fields.Count - 1

sirdate =sirdate & .Fields(i).Value

Next

Dim rasp

rasp = InputBox("articolul cautat este" + vbCr _

+sirdate + vbCr + "m- modificare, d -stergere", "m")

If lCase(rasp)="d" Then

.Delete

Else

.Fields("Marca")=InputBox( _

"Altă valoare pentru Marca")

.Fields("Nume")=InputBox( _

"Altă valoare pentru Nume")

.Update

End If

End If

End With

rs.close

con.close

set rs=nothing

set con=nothing

End Sub

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

se afişează conţinutul lui. Apoi operatorul e întrebat dacă doreşte să modifice sau să

şteargă articolul. Pentru ştergere se utilizează metoda .Delete. Pentru modi ficare se

citeşte valori noi pentru cele două c \mpuri şi apoi se utilizează metoda .Update.

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

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

Public Sub adăugare()

Dim rs As ADODB.Recordset

Dim con As ADODB.Connection

Page 137: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

137

Set con = CurrentProject.Connection

Set rs = New ADODB.Recordset

with rs

.CursorType = adOpenStatic

.CursorLocation = adUseClient

.Open "persoane", con, adOpenStatic, _

adLockOptimistic, adCmdTable

.AddNew

.Fields("Marca")=InputBox( _

"Altă valoare pentru Marca")

.Fields("Nume")=InputBox( _

"Altă valoare pentru Nume")

.Update

End With

rs.close

con.close

set rs=nothing

set con=nothing

End Sub

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

şi o interogare de selecţie ca şi comandă sau o interogare de selecţie salvată, s.a.m.d.

Din proceduri VBA se pot lansa şi interogări de ştergere, actualizare sau

adăgare cu ajorul comenzii .Execute.

Până acum, în această secţiune am prezentat exemple de folosire a obiectelor

ADODB. În continuare vom analiza folosirea obiectelor ADOX pentru definirea şi

crearea structurilor de baze de date.

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

câmpuri "Marca" şi "Nume" în baza de date: C: \doros\Ang.accdb

Sub CreareTabelPrinVBA()

On Error GoTo CreateTableError

Dim tbl As New Table

Dim cat As New ADOX.Catalog

' Deschide catalogul bazei de date

cat.ActiveConnection = "Provider=Microsoft.Access.OLEDB.10.0;" _

& "Data Source=C:\doros\Ang.accdb;" _

& "Data Provider=Microsoft.ACE.OLEDB.12.0"

tbl.Name = "colaboratori"

tbl.Columns.Append "Marca", adInteger

Page 138: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

138

tbl.Columns.Append "Nume", adVarWChar, 50

cat.Tables.Append tbl

Debug.Print "Table 'MyTable' is added."

'eliberarea memoriei obiectelor

Set cat.ActiveConnection = Nothing

Set cat = Nothing

Set tbl = Nothing

Exit Sub

CreateTableError:

Set cat = Nothing

Set tbl = Nothing

If Err <> 0 Then

MsgBox Err.Source & "-->" & Err.Description, , "Error"

End If

End Sub

Odată create tabelele, structura lor poate fi modificată. Se pot adăuga noi

coloane, se pot şterge dintre cele existente se pot modifica dintre atributele lor, etc.

Principalele tipuri de coloane care trebuie precizate la instrucţiunea

.Column.Append sunt:

Constant Codul Description

adBinary 128 Binary

adBoolean 11 Boolean

adUnsignedTinyInt 17 Byte

adCurrency 6 Currency

adDate 7 Date/Time

adDouble 5 Double

adGUID 72 GUID

adInteger 3 Long

adLongVarBinary 205 Long Binary (OLE Object)

adLongVarChar 201 Memo

adNumeric 131 Numeric

adSmallInt 2 Integer

adSingle 4 Single

adVarWChar 202 Text

ADOX conţine obiecte şi pentru creare sau modificare de indecşi, creare sau

modificare de interogări, creare de indecşi. În fine, următorul exemplu modifică

comanda SQL a unei interogări stocate în baza de date:

Page 139: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

139

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

Public Sub ADOXSchimbSQL()

Dim cat As New ADOX.Catalog

Dim cmd As New ADODB.Command

' Deschiderea catalogului de tabele ale bazei de date

cat.ActiveConnection = CurrentProject.Connection

' Accesarea interogării

Set cmd = cat.Procedures(1).Command

' Modificarea comenzii

cmd.CommandText = "SELECT * FROM ANG;"

' Salcvarea noii comenzi

Set cat.Procedures(1).Command = cmd

Set cat = Nothing

Set cmd = Nothing

End Sub

Page 140: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

140

CAPITOLUL VII. ÎNDRUMAR PENTRU REALIZAREA

PROIECTULUI LA DISCIPLINA „BAZE DE DATE”

7.1. Cerinţe minimale

Studenţii anului II, de la specializările „Finanţe şi bănci‖ şi „Management‖,

trebuie să întocmească, la finalul semestrului I, anul II de studii, la disciplina „Baze

de date‖, un proiect prin care să demonstreze posibilitatea folosirii produsului MS

ACCESS în gestionarea bazelor de date .

Pentru disciplina „Baze de date‖, nota finală obţinută de un student este

compusă din:

► 1 punct din oficiu;

► Max. 3 puncte pentru activitatea din timpul semestrului la această

disciplină;

► Max. 3 puncte pentru susţinerea proiectului;

► Max. 3 puncte pentru susţinerea examenului final.

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

această disciplină.

Proiectul va conţine o bază de date tip MS Access compusă din următoarele

obiecte:

► Cel puţin 2 tabele între care să existe relaţii;

► Formulare de introducere de date în aceste tabele;

► Diverse interogări bazate pe aceste tabele;

► Rapoarte pentru listarea informaţiilor conţinute în tabele.

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

anterior trebuie să fie funcţionale.

Studentul va prezenta împreună cu baza de date o documentaţie a conţinutului,

listată şi îndosariată (cca 10-15 pagini), structurată pe următoarele capitole:

► Motivaţia lucrării;

► Descrierea datelor şi variabilelor utilizate;

► Descrierea machetelor pentru formularele de introducere de date;

► Descrierea machetelor pentru rapoartele de listare a informaţiilor

conţinute în tabele;

► Listingul şi explicaţia diverselor interogări sau module utilizate;

► Concluzii trase după realizarea proiectului şi propuneri de perfecţionare.

Page 141: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

141

Cerinţele prezentate mai sus pentru baza de date şi pentru documentaţia

aferentă sunt obligatorii şi minimale.

7.2. Baza de date

a. Tabelele

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

să cuprindă date necesare pentru rezolvarea unei probleme.

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

► gestiune depozit de materiale, întocmire balanţă şi fişe ;

► evidenţă încasări de la clienţi, întocmire balanţă şi fişe ;

► evidenţa plăţilor către furnizori, întocmire balanţă şi fişe;

► evidenţa numerarului, întocmire registru de casă ;

► evidenţa contului curent, reconstituire extras de cont;

► gestiune chioşc de închiriat filme;

► evidenţa cheltuielilor de scară;

► evidenţa bonurilor de materiale;

► evidenţa invitaţiilor la un teatru;

► evidenţa contribuţiei artiştilor la spectacole ;

► evidenţa vânzărilor biletelor de avion;

► evidenţa vanzărilor biletelor de tren;

► evidenţa articolelor contabile şi întocmirea balanţei şi fişelor ;

► evidenţa maşinilor dintr-un parc auto;

► evidenţa mijloacelor fixe;

► evidenţa obiectelor de inventar;

► evidenţă de oferte şi cereri la o agenţie imobiliară ;

► registru de intrări şi ieşiri la un secretariat ;

► evidenţa enoriaşilor unei parohii;

► evidenţa notelor studenţilor;

► registru de înmatriculare;

► fişe de bibliotecă;

► ocuparea camerelor într-un hotel;

► ocuparea camerelor într-un cămin;

► evidenţa bolnavilor într-o clinică;

► evidenţa membrilor unui club

Page 142: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

142

Tema problemei de rezolvat este aleasă de student, nu neapărat din listă şi se

va aprecia originalitatea. Este recomandabil, ca studenţii să-şi aleagă teme cu care au

avut tangenţă în experienţa lor profesională.

Bazele de date vor fi relaţionale, normalizate măcar până la forma normală 3

şi vor conţine informaţii neredundante.

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

Catalog Rulaj

Cod Nume Preţ Cod Nume Data Cantitate TipOperatie

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

a doua regulă de normalizare care necesită ca fiecare coloană care nu este cheie să

depindă complet de cheia primară, nu doar de o parte a cheii. (câmpul Nume depinde

numai de câmpul Cod, nu de combinaţia Cod+Data, care constituie cheia primară).

Nu este corect nici un tabel de forma:

TaxeStudenţi

Nr. Matricol Nume Rata1 Rata2 Rata2

deoarece conţine o listă de câmpuri şi nu e în forma normală 1.

b. Interogările

Prin obiectele create, studentul va

face dovada că înţelege diversele tipuri

de interogări: de extragere (SELECT cu

toate clauzele), de inserare (INSERT), de

modificare (UPDATE) şi de ştergere

(DELETE).

Cele mai importante interogări ale

proiectului vor fi cele care se referă la

datele din mai multe tabele, simultan.

c. Formularele

Formularele

create trebuie să

conţină posibilităţi de

introducere a tuturor

datelor definite în

Page 143: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

143

tabele.

Atunci când e necesar să se introducă date prin exploatarea unor relaţii dintre

tabele, se va apela la tehnica modulelor Visual Basic, a interogărilor (de tip join) sau

a subformularelor.

Mai mult de jumătate din numărul formularelor din proiect, trebuie să nu fie

create cu expertul.

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

► Etichete;

► Casete text;

► Casete combo;

► Imagini, linii sau dreptunghiuri;

► Butoane de comandă.

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

Se va aprecia pozitiv, existenţa în proiect, a unui formular care monitorizează

funcţionarea obiectelor proiectului.

d. Rapoartele

Rapoartele trebuie să poată lista toate informaţiile din tabele, sub diferit e

forme, în diferite moduri ordonare sau de grupare.

Mai mult de jumătate din numărul rapoartelor din proiect, trebuie să nu fie

create cu expertul.

Atunci când e necesar listeze date prin exploatarea unor relaţii dintre tabele,

se va apela la tehnica interogărilor (de tip join).

În rapoarte se vor plasa controalele următoare:

► Etichete;

► Casete text;

► Imagini, linii sau dreptunghiuri.

Cel puţin într-un raport, se vor plasa câmpuri care vor conţine valori rezultate

ale funcţiilor de grupare.

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

Page 144: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

144

7.3. Documentaţia

Studentul va prezenta împreună cu baza de date o documentaţie a conţinutului,

listată şi îndosariată (cca 10-15 pagini), structurată pe următoarele secţiuni:

► motivaţia lucrării;

► descrierea datelor şi variabilelor utilizate;

► descrierea machetelor pentru formularele de introducere de date;

► descrierea machetelor pentru rapoartele de listare a informaţiilor

conţinute în tabele;

► listingul şi explicaţia diverselor interogări sau module utilizate;

► concluzii trase după realizarea proiectului şi propuneri de perfecţionare.

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

redarea ei nu este obligatoriu să se recurgă la formulările stricte redate mai jos, ca

model.

În documentaţie nu vor fi redate elemente teoretice, ci vor fi prezentate

succint elementele conţinute în proiect.

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

Page 145: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

145

a. Motivaţia lucrării

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

mai jos:

b. Descrierea datelor şi variabilelor utilizate

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

► toate câmpurile tabelelor, natura, tipul, dimensiunea şi restricţiile

informaţiilor pe care le stochează;

► câmpurile calculate ale interogărilor;

► variabilele calculate ale controalelor din formulare sau rapoarte.

De exemplu, pentru un tabel cu numele „Sahisti‖, cu informaţii despre

sportivii legitimaţi, se va explica structura, după modelul următor:

Structura de tabel pentru tabelul “sahisti”

ACADEMIA COMERCIALĂ SATU MARE

PROIECT LA DISCIPLINA

BAZE DE DATE

Folosirea MS ACCESS

în gestionarea unei baze de date

conţinutul bazei de date

.

Autor student:

numele studentului, anul şi specializarea

.

- Satu Mare 2010

Acest proiect este destinat gestionării conţinutul bazei de date

,

într-o organizaţie menirea

organizaţiei

, pentru angajaţii săi de la

compartimentul numele compartimentului sau biroului

.

Proiectul este realizat cu ajutorul aplicaţiei MS Access Office 2003.

Pentru funcţionarea lui sunt necesare:

numărul şi pregătirea angajaţilor, numărul de calculatoare, alte resurse de hard sau soft, etc

.

Page 146: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

146

Camp Tip Nul Explicaţii despre conţinut

NrCarnet întreg

lung Da

Numărul legitimaţiei are 6 cifre, e necesară o variabilă de tip

Întreg lung, valori pozitive

Nume text

(50) Da

Numele sportivului, nu depăşeşte 50 caractere, cu litere mari,

fără diacritice. Dacă sunt mai multe cuvinte, între ele se

intercalează cratimă

Prenume text

(70) Da

Toate prenumele pe care le are sportivul, nu depăşeşte 70

caractere, cu litere mari, fără diacritice. Dacă sunt mai multe

cuvinte, între ele se intercalează cratimă

Sex text (1) Da Una dintre valorile ―M‖ pentru sexul masculin, sau respectiv,

―F‖ pentru sexul feminine

Nascut date Da Data neşterii sportivului, în format zz.ll.aaaa

Titlu text (3) Da

Titlul sau categoria sportivă. Pentru sportivii de sex

masculine sunt posibile valorile: ―NC‖ – neclasificat, ―III‖ –

categoria a III-a, ―II‖ – categoria a II-a, ―I‖ – categoria a I-a,

―CM‖ – candidat de maestru, ―M‖ –maestru, ―FM‖ – maestru

FIDE, ―MI‖ – maestru internaţional, ―GM‖ – mare maestru

internaţional. Pentru sportive sunt posibile valorile

corespunzătoare: ―WCM‖, ―WM‖, ―WFM‖, ―WMI‖, ―WGM‖.

CIV întreg Da

Coeficientul valoric al sportivului. Poate lua valori între 401

şi 1400, când e calculat de federaţia naţională, sau valori

între 1401 şi 2900, când e calculat de federaţia internaţională,

Valorile pot fi stocate într-un număr întreg pozitiv (pe doi

octeţi)

Poza text

(100) Da

Numele întreg (inclusive calea de directoare) a fişierului acre

conţine imagine pozei sportivului. E recomandat să existe un

camp cu lărgime considerabilă.

IdFide întreg

lung Da

Codul acordat de federaţia internaţională pentru sportiv. Are

7 cifre, e necesară o variabilă de tip Întreg lung, valori

pozitive.

c. Descrierea machetelor pentru formularele de introducere de

date sau a rapoartelor de ieşire

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

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

secţiuni separate.

Page 147: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

147

Machetele corespunzătoare formularelor (sau rapoartele) vor fi captate cu

ajutorul tastei „PrintScreen‖ şi inserate în documentaţie. Se vor prezenta toate

controalele incluse în fiecare formular (sau raport). Se vor prezenta toate

proprietăţile, metodele şi evenimentele la care s-a intervenit cu modificări, la nivel

global pentru formular (sau raport), sau pentru fiecare control în parte.

De exemplu:

Primul formular este destinat, după cum are şi numele, completării tabelului

CATALOG. Este un formular simplu, finisările care s -au făcut sunt:

scoaterea butoanelor de navigare;

introducerea unui combobox pentru selectarea articolelor după nume;

introducerea a 4 butoane de comenzi pentru ştergere, salvare,

restaurare şi adăugare articole.

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

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

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

rezultatului.

De exemplu:

Interogarea următoare listează numele şi salariul şoferilor din tabelul „Ang‖:

Select NumeA, Sal from Ang where fnc=”SOFER”

Extragere SOFERI

numeA sal

Popan 800

Matus 1100

Chivu 950

Page 148: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

148

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

explicate.

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

perfecţionare

În câteva fraze vor fi redate:

limitele proiectului realizat;

constrângerile pe care le suportă;

posibilităţile de îmbunătăţire şi de extindere.

Page 149: Doros Ioan - Sisteme de Gestiune a Bazelor de Date

149

BIBLIOGRAFIE

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

Doros, I., Popei, V. —Dictionar pentru utilizatorii de calculatoare personale - Editura Dacia

Cluj-Napoca-2007

Doros, I., Todor., L, Ardelean, A.E., Tulbure, C. —Informatica pentru utilizatorii de calculatoare

personale - Editura Dacia Cluj-Napoca-2005

Lungu, I., Sabău, Gh. ,s.a.— Sisteme informatice. Analiză, proiectare şi implementare, Editura

Economică, Bucureşti 2003

Muntean, D.V., Andreica, A., Todor, L.S., Doros, I. —Bazele informaticii. Aplicații- Editura

Gutenberg Arad-2009

Năstase,P., Mihai,F.— Baze de date – Microsoft Access 2000 , Editura Teora, Bucureşti 2003

Sabău,G.,Muntean,M., Dardală,M.,Bologa,R., Bologa, A.R.— Baze de date, Editura MatrixRom,

Bucureşti 2008

Velicanu, M.-Baze de date prin exemple- Editura ASE București -2007

*** — http://office.microsoft.com/ro-ro/access - pagină web a prodului Access


Recommended