INFORMATICĂ DE GESTIUNE (LIMBAJE) · Web viewINFORMATICĂ DE GESTIUNE (LIMBAJE DE PROGRAMARE)...

81
INFORMATICĂ DE GESTIUNE (LIMBAJE DE PROGRAMARE) CONŢINUTUL TEMATIC AL DISCIPLINEI CAP.I ORGANIZAREA DATELOR CAP.II PROGRAMAREA BAZELOR DE DATE CAP.III LIMBAJUL SQL CAP.IV VISUAL BASIC PENTRU APLICAŢII (VBA) CAP.V PROGRAMAREA DIRIJATĂ DE EVENIMENTE CAP.VI MACRO–URI (MACROS) BIBLIOGRAFIE MINIMALĂ [1] Rotaru, Simona; Ghită, Mirela, (2015), Sisteme și aplicații informatice pentru economie, Editura Revers, Craiova 2] Rotaru, Simona; Ghită, Mirela, (2010), Sisteme de gestiune economică, Editura Sitech, Craiova. [3] Fusaru D., Gherasim Z, Andronie M., Bâră A., (2003), Aplicaţii economice în Visual Basic şi Access, Ed. Fundaţiei România de Mâine, Bucureşti. [4] Gherasim Z, (2007), Programarea si Baze de dates, Ed. Fundaţiei România de Mâine, Bucureşti. [5] Lungu I, Sabău Gh, (2013), Sisteme informatice și baze de date, ASE, București [6] Velicanu Manole ş.a.(2013), Sisteme de gestiune a bazelor de date prin exemple, ASE, București [7] Curtis G., Cobham D (2012), Bussiness Information Systems, Analysis, Design and Practice, Prentice – Hall, fourth editions [8] Connolly, T. and Begg, C (2012), Database Systems. A Practical Approach to Design, Implementation and Management, Addison Wesley, third edition

Transcript of INFORMATICĂ DE GESTIUNE (LIMBAJE) · Web viewINFORMATICĂ DE GESTIUNE (LIMBAJE DE PROGRAMARE)...

INFORMATICĂ DE GESTIUNE (LIMBAJE DE PROGRAMARE)

CONŢINUTUL TEMATIC AL DISCIPLINEI

CAP.I ORGANIZAREA DATELOR

CAP.II PROGRAMAREA BAZELOR DE DATE

CAP.III LIMBAJUL SQL

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

CAP.V PROGRAMAREA DIRIJATĂ DE EVENIMENTE

CAP.VI MACRO–URI (MACROS)

BIBLIOGRAFIE MINIMALĂ

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

CAP.I ORGANIZAREA DATELOR

Datele sunt stocate în memoria internă şi memoria externă a oricărui sistem de calcul. Organizarea datelor presupune:

Definirea, structurarea, ordonarea şi gruparea datelor în colecţii de date omogene; Stabilirea legăturilor în mod ierarhic între date, între elementele unei colecţii de

date şi în final, între colecţiile de date; Stocarea datelor pe suport informaţional prelucrabil într-un sistem de calcul.

Organizarea datelor este făcută în scopul regăsirii automate după diverse criterii.În organizarea datelor se urmăresc mai multe obiective:

Timpul de acces la datele organizate pe diverse suporturi să fie minim; Datele să apară o singură dată în sistem; Spaţiul de memorie internă şi externă alocat datelor să fie cât mai redus; Această organizare să reflecte absolut toate legăturile dintre obiectele, procesele

economice pe care aceste date le reprezintă; Să permită schimbarea structurii datelor şi a relaţiilor dintre acestea fără a produce

modificări în programele care le gestionează.O colecţie de date reuneşte date despre o anume clasă de obiecte (reale sau conceptuale).

Spre exemplu colecţia de alte PRODUSE - FINITE reuneşte datele cu privire la clasa de obiecte PRODUSE .

O clasă de obiecte conţine obiecte de acelaşi tip, adică obiecte ce au aceleaşi caracteristici (atribute). Realizările unei clase de obiecte formează o colecţie de date. Colecţiile de date au structuri uniforme, ele reprezintă valori ale caracteristicilor (atributelor) obiectelor tip.

Întreprinderile organizează mai multe colecţii de date: colecţia de date CONTURI, colecţia de date PRODUSE colecţia de date LOCURI-DE-ACTIVITATE etc.

Folosirea tehnologiilor informaţionale în colectarea, stocarea, procesarea şi transmiterea colecţiilor de date a impus definirea unor tehnicii şi metode de organizare a acestora .

Se cunosc două metode de organizare a colecţiilor de date :organizarea în fişiere de date şi în baze de date.

Un fişier este un ansamblu organizat de date omogene din punct de vedere al naturii şi al criteriilor de prelucrare, memorate pe suporturi de unde pot fi utilizate în procesul de prelucrare.

Se consideră că organizarea datelor în fişiere prezintă următoarele limite:- Datele au un caracter separat, izolat fără a fi puse în evidenţă legăturile dintre ele; - Redundanţa datelor şi riscul de inconsistenţă a datelor sunt apreciabile;- Dependenţa programelor faţă de date în sensul că elaborarea programelor este strâns

legată de organizarea datelor şi de natura suportului. Orice modificare de suport sau structură a datelor generează modificarea programului, recompilarea şi resetarea acestuia;

- Reprezentarea unor obiecte complexe în cazul utilizării fişierelor este extrem de dificilă;

- Imposibilitatea realizării unor prelucrări care nu au fost prevăzute anterior.Limitele organizării datelor în fişiere şi posibilităţile oferite de noile tehnologii

informaţionale au dus la promovarea metodei de organizare a datelor în bază de date.

În esenţă conceptul de baza de date poate fi definit ca un sistem de colecţii de date, cu legături logice multiple şi de descriere a datelor şi a legăturilor, destinat satisfacerii operative a celor mai diversificate solicitări provenite din partea unor grupuri diferite de utilizatori.

Într-o bază de date sunt înregistrate datele despre obiectele reale sau abstracte, dar şi asocierile (relaţiile) care se pot stabili între acestea. Se spune că între baze de date există o interdependenţă logică. Luarea în calcul a interdependenţelor ce se pot stabili între colecţiile de date memorate într-o bază de date contribuie la asigurarea integrităţii funcţionale a bazei de date. Spre exemplu, înregistrarea datelor privind facturile primite de la furnizori este posibilă numai dacă datele despre furnizori există în baza de date.

Între colecţiile de date FACTURI şi respectiv, FURNIZORI există o legătură logică (spunem noi o relaţie de integritate funcţională).

Datele sunt descrise o singură dată şi utilizate chiar simultan, de mai mulţi utilizatori (fără ca aceştia să se mai preocupe de descrierea acestora şi de modul cum sunt memorate fizic datele pe suporturi tehnice).

O bază de date conţine: descrierea datelor; înregistrările de date (tuplurile).Organizarea datelor în baze de date trebuie să îndeplinească următoarele condiţii:- Să asigure o independenţă sporită a datelor faţă de programe şi invers;- Structura bazei de date trebuie astfel concepută încât să asigure informaţiile necesare şi

suficiente pentru cerinţele de informare şi decizie;- Să asigure o redundanţă minimă şi controlată a datelor;- Să permită accesul rapid la datele stocate în bază.Organizarea datelor într-o bază de date se realizează pe trei niveluri:

logic (extern);

conceptual (virtual);

fizic (intern).

Pentru fiecare nivel se defineşte o schemă a bazei de date: schema logică, conceptuală şi fizică.

Schema logică (externă) reflectă viziunile specifice unui utilizator sau grupuri de utilizatori asupra datelor. Fiecare utilizator îşi creează colecţiile de date prin prisma intereselor sale de aplicaţie. Dacă datele ar fi stocate conform acestei scheme, ar putea apărea o redundanţă sporită a datelor deoarece mai mulţi utilizatori pot utiliza aceleaşi date.

Schema conceptuală (virtuală) este obţinută pe baza schemelor logice prin eliminarea redundanţelor şi sintetizarea datelor.

Schema fizică (internă) reprezintă descrierea schemei conceptuale în termeni specifici memorării fizice a datelor pe suporturi tehnice. Trecerea de la schema conceptuală la cea internă se face prin intermediul limbajelor de descriere a datelor, care sunt incluse în sistemele de gestiune a bazelor de date.

Pentru o bază de date se pot defini:

mai multe scheme logice;

o singură schemă conceptuală;

o singură schemă fizică.

Cele trei niveluri de reprezentare a datelor şi cu structurile aferente sunt reprezentate în figura 1.1

MODELE DE DATE PENTRU BAZE DE DATE

Modelul de date constituie un ansamblu de concepte şi instrumente necesar pentru a construi o schemă a bazei de date.

De-a lungul timpului s-au manifestat mai multe generaţii de modele ale datelor, dar în gestiunea bazelor de date cele mai utilizate modele au fost: ierarhic, reţea, relaţional şi obiectual.

Modelul ierarhicAcest model are la bază structura arborescentă(baza de date poate fi asimilată unei

mulţimi de arbori). Există un tip de înregistrare definit ca rădăcină şi, la orice alt nivel, mai multe tipuri de înregistrări subordonate (legătura între două nivele succesive fiind de unul la mulţi în jos şi unu la unu în sus). Accesul la date se face numai prin vârful ierarhiei (rădăcină).

Reprezentarea modelului ierarhic se realizează prin intermediul diagramelor de structură formate din două elemente:

dreptunghiuri – corespunzătoare tipurilor de înregistrări;

linii – corespunzătoare legăturilor.

O înregistrare reprezintă o colecţie de câmpuri, fiecare câmp conţinând o singură valoare, iar legătura reprezintă o asociere între două înregistrări. Fiecărui tip de înregistrare din diagrama de structură îi corespunde, în baza de date, un anumit număr de înregistrări (realizări).

Exemplu:Se consideră o bază de date cu informaţii despre studenţii şi facultăţile unei universităţi,

fiecare student fiind înscris la o singură facultate.În figurile 2.2 (diagrama de structură) şi respectiv 2.3 (realizări) este reprezentat modelul

Aplicaţia 1.1

Aplicaţia 1.2

Aplicaţia 1.3

Aplicaţia n.1

Aplicaţia n.2

Nivel extern Schema

externă n Schema

externă 1

INTERFAŢĂ

SGBD SCHEMA CONCEPTUALĂ

INTERFAŢA

BAZA DE DATE MEMORATĂ PE DISC Nivel intern

Nivel conceptual

Fig. 2.1

ierarhic al exemplului considerat.

FACULTĂŢI Cod_F. Denumire_F.

STUDENŢI Marca_S. Nume_S. An_studiu

Fig. 2.2

Fig. 2.3

În exemplul de mai sus, tipului de înregistrare rădăcină Facultăţi îi corespund trei înregistrări (1, Marketing), (2, Informatică de gestiune), (3, Finanţe şi Bănci). Prima înregistrare (1, Marketing) este rădăcină pentru (111, Mihai Dan, I), care este o realizare a tipului de înregistrare Studenţi, a doua înregistrare (2, Informatică de gestiune) este rădăcină pentru (211, Manea Ion, I), (212, Ciurea Elena, I), iar cea de-a treia înregistrare nu are nici o realizare.

Modelul reţeaModelul reţea este similar cu modelul ierarhic. Datele sunt reprezentate ca într-o mulţime

de ierarhii, în care un subordonat poate avea oricâţi superiori. La un subordonat se poate ajunge pe mai multe căi.

Structura de bază este formată tot dintr-un set de înregistrări care sunt interconectate prin intermediul unor legături. Reprezentarea bazei de date se poate asimila unui graf direcţionat (noduri şi arce).

Exemplu:Se consideră o bază de date cu studenţii, bursele obţinute de aceştia şi facultăţile din

cadrul unei universităţi. Numărul studenţilor diferă de la o facultate la alta, în timp ce mediile obţinute pot fi şi identice. Un student este înscris la o singură facultate indiferent de media obţinută.

Diagrama de structură a bazei de date este redată în figura 2.4, iar realizările în figura 2.5.

FACULTĂŢI

2 Informatică de gestiune

3 Finanţe şi Bănci

11 Mihai Dan I 21 Manea Ion I

22 Ciurea Elena I

1 Marketing

FACULTĂŢI Cod_F Denumire_F

STUDENŢI Marcă_S Nume_S An_studiu

BURSE Media Tipul_bursei

Fig. 2.4În exemplul considerat, tipului de înregistrare FACULTĂŢI îi corespund trei înregistrări:

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

Modelul relaţionalModelul relaţional are la bază teoria matematică a relaţiilor (algebra relaţională = colecţie

de operatori ce au ca operanzi relaţii) permiţând utilizatorului să vadă baza de date ca o colecţie de tabele (relaţii).

Modelul relaţional a fost introdus în 1970 de cercetătorul american E. F. Codd şi se fundamentează pe conceptul de structură relaţională şi algebră relaţională.

Structura relaţionalăRelaţia reprezintă un subansamblu al produsului cartezian al mai multor mulţimi

(domenii), subansamblu caracterizat printr-un nume şi care conţine tupluri cu semnificaţie.Putem descrie o relaţie prin formula:

R

1 Marketing

2 Informatică de

gestiune

3 Finanţe şi Bănci

111 Mihai Dan I

211 Manea Ion

211 Ciurea Elena I

9.42 Bursă studiu

9.86 Bursă merit

Fig. 2.5

sauR ( )

Funcţia de mulţimi pe care este definită relaţia se numeşte domeniu. Un domeniu se poate defini explicit , prin enumerarea tuturor valorilor aparţinând acestuia, sau, implicit, prin precizarea proprietăţilor pe care le au valorile din cadrul domeniului respectiv.

Pentru un ansamblu de domenii , produsul cartezian al acestora

reprezintă ansamblul tuplurilor unde: este o valoare aparţinând

domeniului , este o valoare aparţinând domeniului , ş.a.m.d. Numărul n (numărul valorilor dintr-un tuplu) reprezintă gradul relaţiei. Numărul de tupluri m din relaţie indică cardinalitatea relaţiei şi reprezintă extensia acesteia.

Dacă tuplurile dintr-o relaţie trebuie să fie unice, un domeniu poate apărea de mai multe ori în produsul cartezian pe care este definită relaţia.

O relaţie este reprezentată într-o formă simplă, uşor de întreţinut şi utilizat, printr-un tabel bidimensional. La definirea şi utilizarea acestuia se operează cu următoarele concepte: atribut, tuplu, cheie primară, cheie externă, domeniul atributului.

În constituirea tabelului (relaţiei) se vor respecta următoarele reguli:

fiecare coloană este identificată printr-un nume distinct;

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

toate liniile sunt distincte, dublurile nefiind admise;

ordinea liniilor şi coloanelor nu este impusă.

Pentru exemplificare se consideră tabelele (relaţiile): CLIENŢI şi FACTURI CLIENŢI

Cod client

Nume client Adresă client Telefon

469 Matei Alin Braşov 092746539765 Gusu Pavel Cluj 091765350595 Micu Dan Arad 092847586

FACTURINr. factură Dată factură Preţ factură Cod client1543772 12/04/02 154676839 5952645799 24/05/02 243869435 46912978635 09/06/02 367485932 765

Cod client, Nume client, Adresă client, Telefon, Nr. factură, Dată factură, Preţ factură, Cod client sunt atributele celor două tabele.

Fiecare coloană se numeşte domeniu şi conţine toate valorile unui atribut, iar fiecare linie se numeşte tuplu. Numărul liniilor se numeşte cardinalul tabelului, în timp ce numărul coloanelor se numeşte gradul tabelului.

Trebuie făcută diferenţierea între:

structura tabelului, definită prin ansamblul atributelor;

tupluri (înregistrări) care sunt instanţieri (realizări) ale structurii.

În cadrul fiecărui tabel se alege un atribut care să poată identifica în mod unic, printr-o valoare distinctă, tuplurile relaţiei. Acest atribut se numeşte cheie primară.

Atributul Cod client din tabelul CLIENŢI constituie cheie primară (nu pot exista mai mulţi clienţi cu acelaşi cod).

Legătura între tabele se asigură pe baza valorilor unor atribute din structura tabelului numite şi chei externe. Un atribut este cheie externă pentru o relaţie, dacă se regăseşte pe post de cheie primară în altă relaţie.

Atributul Cod client din tabelul FACTURI este cheie externă a acestui tabel. Legăturile se stabilesc pe baza valorilor atributului Cod client. Unei realizări a tabelului CLIENŢI i se pot asocia zero, una sau mai multe realizări ale tabelei FACTURI.

În activitatea de modelare relaţională a datelor, având în vedere că relaţiile reflectă anumite aspecte din lumea reală, trebuie respectate restricţiile (constrângerile) de integritate.

Restricţiile de integritate ale modelului relaţional sunt de două tipuri:a) restricţii de integritate care depind de semantica valorilor domeniilor.Din această categorie fac parte:

restricţia de unicitate a cheii – semnifică faptul că într-o relaţie nu pot exista două tupluri cu o aceeaşi valoare pentru atributele cheie;

restricţia entităţii (integritatea entităţii), potrivit căreia, într-o relaţie atributele cheii primare să fie nenule; altfel cheia nu va mai fi identificator;

restricţia referenţială (integritatea referirii), impune ca valorile unei chei externe să figureze (refere) prin valorile cheii primare din altă relaţie sau să fie valori „null” (nedefinite).

b) alte restricţii de integritate care ţin cont de dependenţa între date şi de semnificaţia valorilor din cadrul bazei de date.

CAP.II PROGRAMAREA BAZELOR DE DATE

Noţiuni de bază referitoare la programare

Un program reprezintă o succesiune de instrucţiuni , realizată în conformitate cu regulile limbajului de programare folosit, care rezolvă o anumită problemă, îndeplineşte o anumită sarcină, printr-un anumit algoritm.

Algoritmul reprezintă un concept folosit pentru a desemna o mulţime finită de operaţii cunoscute care, executate într-o ordine bine stabilită, pornind de la o mulţime de valori (date) de intrare conduc la obţinerea în timp finit a unei alte mulţimi de valori, valori (date) de ieşire.

Algoritmul este astfel conceput încât să fie respectate următoarelel cerinţe:• claritate, ceea ce înseamnă ca algoritmul să fie bine definit (cu specificaţii riguroase şi

fără ambiguităţi);• determinism, adică în fiecare moment al execuţiei algoritmului, se cunoaşte cu

exactitate următoarea operaţie, precum şi modul de execuţie a fiecăreia;• universalitate, ceea ce semnifică faptul că orice algoritm, fiind cât mai universal cu

putinţă, asigură rezolvarea unei clase largi de probleme;• finitudine, ce constă în faptul că algoritmul este finit în spaţiu (ca descriere) şi asigură

obţinerea rezultatului într-un timp determinat de execuţie, adică după un anumit număr finit de paşi.

Reprezentarea algoritmului se poate face sub mai multe forme; însă cele mai uzuale sunt: reprezentarea în limbaj pseudocod şi schema logică.

Scrierea programului, constă în codificarea algoritmului, adică conversia acestuia în conformitate cu instrucţiunile unui limbaj de programare.

Limbajul de programare este un limbaj artificial ce se foloseşte pentru definirea unui şir de instrucţiuni care pot fi prelucrate şi executate pe un calculator.

Limbajele de programare se definesc formal prin alfabet, vocabular şi gramatici (fapt ce permite compilarea sau interpretarea lor).

Indiferent de limbajul de programare folosit pentru rezolvarea problemei, realizarea unui program presupune parcurgerea următoarelor etape:1. Analiza problemei de rezolvat şi realizarea algoritmului, etapă ce presupune elaborarea unui enunţ complet al problemei, stabilirea modalităţilor de organizare şi de reprezentare a datelor de intrare şi de ieşire, elaborarea schemei logică de sistem care defineşte echipamentele din configuraţia calculatorului ce participă la procesul de prelucrare a datelor, realizarea algoritmului ce presupune elaborarea şi reprezentarea acestuia în limbaj pseudocod sau sub forma schemei logice de program.2. Scrierea (introducerea) programului, ce are drept scop codificarea algoritmului, adică conversia acestuia în conformitate cu instrucţiunile unui limbaj de programare; pentru această codificare, se foloseşte un editor de texte; acest editor poate fi independent sau poate face parte din mediul integrat de dezvoltare (IDE); se obţine astfel programul sursă (codul-sursă al programului) care este scris într-un limbaj similar cu limbajul natural, dar încă inaccesibil sistemului de calcul.3. Compilarea programului, ce realizează traducerea programului-sursă scris într-un limbaj de programare de nivel înalt în program-obiect, exprimat în instrucţiuni codmaşină. Această operaţie de traducere se obţine, în mod automat, prin folosirea unei componente a sistemului de operare, numită compilator. 4. Editarea de legături (linkeditarea), ce asigură includerea codului obiect al programului (programul-obiect) într-un ansamblu executabil (programul executabil) care cuprinde şi module specifice sistemului de operare, funcţii de bibliotecă etc. cu ajutorul componentei denumită editor de legături (linkeditor). Eventualele erori ce apar conduc la corecţii în programul-sursă.

5. Testarea logică a programului, ce realizează verificarea finală a programului pe baza unui set de date de test care acoperă domeniul real de valori ale datelor de intrare ce se vor folosi în timpul exploatării programului.

Programarea orientată spre obiecteAbordarea obiectuală semnifică organizarea şi funcţionarea programelor, aplicaţiilor ca

un ansamblu de obiecte distincte ce cooperează între ele.Orientarea spre obiecte este caracterizată printr-o noţiune centrală, aceea de obiect.

Alături de aceasta mai întâlnim următoarele concepte: clasa, mesajul, moştenirea, polimorfismul, încapsularea, persistenţa.

Obiectul este o abstractizare a entităţii lumii reale şi se caracterizează prin: s tare; comportament, identitate.

Starea unui obiect este definită de valorile atributelor sale. Un atribut este definit printr-un nume şi poate lua valori elementare (numeric, alfanumeric, etc.) sau complexe (structuri de multiple referinţe spre alte obiecte, tipuri utilizatori etc.).

Comportamentul unui obiect este definit de setul de operaţii şi metode aplicabile obiectului respectiv.

Identitatea unui obiect este proprietatea acestuia care îl distinge de alte obiecte. Astfel, spre deosebire de modelul relaţional în care datele sunt identificate prin valori ale cheii primare desemnate de utilizator, în modelul orientat obiect identificarea obiectelor este asigurată automat de sistem şi este transparentă utilizatorului.

O clasă este un tip abstract de date care defineşte atât structura obiectelor din clasa respectivă, cât şi mulţimea metodelor existente pentru aceste obiecte.

Obiectele din aceeaşi clasă au aceleaşi atribute şi aceleaşi metode şi răspund la acelaşi mesaj.

Clasele sunt organizate ierarhic. Orice subclasă moşteneşte metodele şi structura clasei din care face parte.

Un obiect răspunde la mesaje. Mesajul este unitatea de comunicaţie dintre obiecte. Mesajele cuprind: numele mesajului, numele obiectului ţintă şi argumentele necesare, dacă există. Când un obiect primeşte un mesaj una din procedurile sale este apelată. Procedura realizează apoi o operaţie care poate returna un rezultat. Mesajele sunt implementate prin intermediul metodelor.

Moştenirea este procesul prin care toate atributele şi metodele unei clase sunt preluate de o altă clasă înrudită, numită subclasă. Clasa de la care atributele şi metodele sunt moştenite se numeşte supraclasă.

Prin intermediul moştenirii se pot exprima relaţii deosebit de utile între clase: clasificarea, generalizare, specializare.

Polimorfismul semnifică posibilitatea unui obiect, instanţă a unei clase, să răspundă diferit la primirea aceluiaşi mesaj.

Polimorfismul se poate asigura prin două căi: redefinirea metodelor moştenite în clasele derivate; crearea unor metode cu acelaşi nume dar cu parametrii deferiţi.

ÎncapsulareaÎncapsularea constă în capacitatea obiectelor de a conţine la un loc atât date cât şi operaţii

dintre care numai o parte sunt vizibile din exterior.Un obiect este compus din două părţi:

interfaţa – permite unui utilizator extern să solicite obiectului executarea unei acţiuni;

o parte ascunsă, de implementare – reprezentată de starea internă şi de metodele obiectului.

Încapsularea ascunde utilizatorului complexitatea unui obiect, oferind o imagine simplificată care îi permite să rezolve mai uşor problemele complexe.

Persistenţa este proprietatea obiectelor care determină existenţa mai îndelungată a acestora faţă de procesul care le-a creat; este proprietatea prin care starea bazei de date asigură execuţia unui proces pentru a fi refolosit ulterior în alt proces.

VBA este limbajul pentru dezvoltarea aplicaţiilor în Access, punând la dispoziţie un limbaj complex pentru dezvoltarea aplicaţiilor în cadrul programelor din Microsoft Office 2000, ceea ce înseamnă că nucleul limbajului, componentele sale şi mediul sunt aceleaşi ca în Microsoft Access 2000, Microsoft Visual Basic, Microsoft Excel şi Microsoft Project.

Limbajul VBA este foarte bogat şi complex, având la dispoziţie o serie de tehnici avansate.

O bază de date, conţine numeroase tipuri de obiecte, ce pot fi manipulate cu uşurinţă prin programe VBA. Obiectele sunt componentele unei baze de date, ele include tabelele, interogările, formularele, rapoartele, comenzile macro şi module carem apar în fereastra bazei de date, precum şi controalele(casetele de text, casete listă, butoane etc.) care apar într-un formular sau într-un raport.

Folosind VBA se pot edita şi şterge obiecte din baza de date în timpul execuţiei aplicaţiei, ceea ce permite transmiterea unui formular unei funcţii precum şi manipularea obiectelor acestuia.

Metodologia de realizare a bazelor de date

Organizarea unei baze de dateActivitatea de realizare a unei baze de date trebuie să înceapă cu organizarea acesteia,

adică pregătirea acţiunii. În cadrul acestei pregătiri, ţinând seama de obiectivele urmărite pentru realizarea bazei de date, se va face un fel de inventar a ceea ce este minim necesar pentru a se putea realiza baza de date. Se poate astfel, din start, hotărî dacă activitatea va demara imediat sau dacă mai sunt necesare alte acţiuni premergătoare.

Principalele aspecte mai importante urmărite la organizarea unei baze de date sunt:1. Organizarea intrărilor de date, se referă la:

- sursa datelor (documente primite, fişiere etc.)- actualizarea datelor (moduri, momente, reorganizări etc.)- controlul intrărilor de date (natură, conţinut, format, periodicitate etc.)

2. Organizarea memorării datelor , se referă la:- principii de memorare (memoria internă/externă , forma de stocare, legături între

date, tehnici utilizate etc.);- optimizarea memorării (redundanţă, spaţiu alocare, codificare,

reorganizare etc.)3. Organizarea protecţiei datelor sub cele două aspecte (securitatea şi integritatea se

referă la:- instrumente oferite de către SGBD (autorizare acces, fişiere jurnal, arhivări etc.)- metode proprii (parole, rutine speciale, antivirus etc.)

4. Organizarea legăturilor bazei de date cu alte aplicaţii, se referă la : conversii, standarde, compatibilităţi, interfeţe etc.

Obiective urmărite la realizarea unei BDAtunci când dorim să realizăm o bază de date trebuie să ştim clar ce avem de făcut, adică

să stabilim obiectivele activităţii noastre. În acest sens, câteva din cele mai importante obiective, le prezentăm în continuare. Acestea ar trebui să constituie un set minim de obiective, de care să se ţină cont la realizarea unei baze de date.

1. Partiţionarea semnifică faptul că aceleaşi date trebuie să poată fi folosite în moduri diferite de diferiţi utilizatori.

2. Deschiderea se referă la faptul că datele trebuie să fie uşor adaptabile la schimbările care pot apărea (actualizarea structurii, tipuri noi de date etc.)

3. Eficienţa are în vedere stocarea şi prelucrarea de date, care trebuie să se facă la costuri cât mai scăzute, costuri care trebuie să fie inferioare veniturilor obţinute

4. Reutilizarea înseamnă faptul că fondul de date existent trebuie să poată fi utilizat în diferite aplicaţii informatice.

5. Regăsirea este o activitate frecventă pe bazele de date şi de aceea cererile de regăsire trebuie să poată fi adresate uşor de către toate categoriile de utilizatori, după diferite criterii.

6. Accesul înseamnă modul de localizare a datelor şi acest lucru trebuie să poată fi realizat prin diferite moduri de acces, rapid şi uşor.

7. Modularizarea presupune faptul că realizarea BD trebuie să se poată face modular pentru generalitate şi posibilitatea lucrului în echipă

8. Protecţia bazei de date trebuie asigurată sub ambele aspecte: securitatea şi integritatea datelor.

9. Redundanţa se asigură în limite acceptabile prin implementarea unui model de date pentru baze de date şi prin utilizarea unei tehnici de proiectare a BD. Se asigură astfel, o redundanţă minimă şi controlată.

10. Independenţa datelor faţă de programe trebuie asigurată atât la nivel logic cât şi fizic.Etape de realizare a unei baze de dateBazele de date au evoluat ca un tip special de sisteme informatice, şi anume cele care au

organizarea datelor în memoria externă conform unui model de date specific. De aceea, în metodologia de realizare a BD se parcurg, în cea mai mare parte, cam aceleaşi etape ca la realizarea unui sistem informatic, cu o serie de aspecte specifice. Pe de altă parte, în literatura de specialitate, sunt diferite propuneri de metodologii de realizare a bazelor de date.

Ţinând cont de cele două aspecte de mai sus, autorii propun câteva activităţi care trebuie parcurse la realizarea unei baze de date. Aceste activităţi vor fi regăsite, sub aceeaşi denumire sau sub denumiri diferite, în majoritatea metodologiilor de realizare a bazelor de date, din literatura de specialitate.

Activităţile (etapele) parcurse pentru realizarea unei BD (figura 4.1) sunt: analiza de sistem, proiectare noului sistem, realizarea componentelor logice, punerea în funcţiune, dezvoltarea.

1.Analiza de sistem Scopul acestei activităţi este de a evidenţia cerinţele aplicaţiei şi resursele utilizate

(studiul), precum şi de a evalua aceste cerinţe prin modelare (analiza).STUDIUL situaţiei existente se realizează prin:

- definirea caracteristicilor generale ale unităţii;- identificarea activităţilor desfăşurate;- identificarea resurselor existente (informaţionale, umane, energetice, echipamente,

financiare etc.)â- identificarea necesităţilor de prelucrare.

ANALIZA sistemului existent urmează investigării (studiului) şi utilizează informaţiile obţinute de aceasta.

2. PROIECTAREA

alegerea proiectareaSGBD fcţ. BD

lumea reală1. ANALIZA DE SISTEM

studiul analiza

Figura 4.1. Activităţile parcurse pentru realizarea unei baze de dateAnaliza este o activitate de modelare (conceptuală) şi se poate realiza sub trei aspecte:

structural, dinamic şi funcţional.a) Analiza structurală evidenţiază, la nivel conceptual, modul de structurare a datelor şi

a legăturilor dintre ele. Cea mai utilizată tehnică este entitate-asociere.Aceasta conţine:

1) Identificarea entităţilor: fenomene, procese, obiecte concrete sau abstracte (substantivele din prezentarea activităţii descrise) (exemple de entităţi: Persoane, Produse, Beneficiari).

2) Identificarea asocierilor dintre entităţi ca fiind legăturile semnificative de un anumit tip (verbele din prezentarea activităţii descrise).

3) Identificarea atributelor ce caracterizează fiecare entitate în parte (exemple de atribute: Marca, Nume, Adresă).

4) Stabilirea atributelor de identificare unică a realizărilor entităţii, drept chei.Rezultatul analizei structurale este modelul static (structural), numit şi diagramă entitate-

asociere.b) Analiza dinamică evidenţiază comportamentul elementelor sistemului la anumite

evenimente. Una dintre tehnicile utilizate este diagrama stare-tranziţie.Aceasta presupune:

1) Identificarea stărilor în care se pot afla componentele sistemului.2) Identificarea evenimentelor care determină trecerea unei componente dintr-o stare în

alta.3) Stabilirea tranziţiilor admise între stări4) Construirea diagramei stare-tranziţieRezultatul analizei dinamice: modelul dinamicc) Analiza funcţională evidenţiază modul de asigurare a cerinţelor informaţionale

(fluxul prelucrărilor) din cadrul sistemului, prin care intrările sunt transformate în ieşiri. Cea mai utilizată tehnică este diagrama de flux a datelor.

Conform acestei tehnici se delimitează:1) Aria de cuprindere a sistemului.2) Se identifică sursele de date.3) Se identifică modul de circulaţie şi prelucrare a datelor.4) Se identifică apoi rezultatele obţinute.Rezultatul analizei funcţionale: modelul funcţional.Notă. Exemplu privind activitatea de analiză, sub toate cele trei aspecte prezentate mai

sus, vezi cartea [LUVE00].2. Proiectarea structurii bazei de date

3. REALIZAREA COMPONENTELOR LOGICE

4. PUNEREA ÎN FUNCŢIUNE ŞI EXPLOATAREA

5. DEZVOLTAREA

Pornind de la modelele realizate prin activitatea de analiză, se poate proiecta structura BD, parcurgând două subactivităţi: alegerea SGBD-ului, proiectarea funcţiilor BD.

a) Alegerea SGBD-ului se face ţinând cont de două aspecte: cerinţele aplicaţiei (utilizatorului) şi performanţele tehnice ale SGBD-ului.

Cerinţele aplicaţiei se referă la:- volumul de date estimat a fi memorat şi prelucrat în BD;- complexitatea problemei de rezolvat;- ponderea şi frecvenţa operaţiilor de intrare/ieşire;- condiţii privind protecţia datelor;- operaţii necesare pe baza de date (încărcare/validare, actualizare, regăsire etc.)- particularităţi ale activităţii pentru care se realizează baza de date.Performanţele tehnice ala SGBD-ului se referă la:- modelul de date pe care-l implementează;- ponderea utilizării SGBD-ului pe piaţă şi tendinţa;- configuraţia de calcul minim cerută,- limbajele de programare din SGBD;- facilităţi de utilizare oferite pentru diferite categorii de utilizatori;- limitele SGBD-ului;- optimizări realizate de SGBD;- facilităţi tehnice; lucrul cu mediul distribuit şi concurenţa de date; elemente de multimedia; elemente de CASE; interfeţe de comunicare; autodocumentarea; instrumente specifice oferite.

b) Proiectarea funcţiilor BD se realizează prin: proiectarea schemelor BD, proiectarea modulelor funcţionale specializate.

Proiectarea schemelor BD se realizează pornind de la rezultatele modelării conceptuale (analiza de sistem) şi ţinând cont de modelul de date implementat de SGBD-ul ales. Se vor proiecta schemele: conceptuală, externă internă.

Proiectarea schemei structurale porneşte de la identificarea setului de date necesar sistemului. Aceste date sunt apoi integrate şi structurate într-o schemă (exemplu: pentru BD relaţionale cea mai utilizată tehnică este nominalizarea).

Proiectarea schemei externe are rolul de a specifica viziunea fiecărui utilizator asupra BD. Pentru acest lucru, din schema conceptuală se identifică datele necesare fiecărei viziuni. Datele obţinute se structurează logic în subscheme ţinând cont de facilităţile de utilizare şi de cerinţele utilizatorului. Schema externă devine OPERAŢIONALĂ PRIN CONSTRUIREA UNOR VIZIUNI (VIEW) CU SGBD-UL şi acordarea drepturilor de acces. Datele într-o viziune pot proveni din una sau mai multe colecţii şi nu ocupă spaţiul fizic.

Proiectarea schemei interne presupune stabilirea structurilor de memorare fizică a datelor şi definirea căilor de acces la date. Acestea sunt specifice fie SGBD-ului (scheme de alocare), fie sistemului de operare. Proiectarea schemei interne înseamnă realizarea operaţiilor:

estimarea spaţiului fizic pentru BD şi definirea unui model fizic de alocare (a se vedea dacă SGBD-ul permite explicit acest lucru);

definirea unor indecşi pentru accesul direct, după cheie, la date;Proiectarea modulelor funcţionale ţine cont de concepţia generală a BD, precum şi de

schemele proictate anterior. În acest sens, se proiectează:- fluxul informaţional;- modulele de încărcare şi manipulare a datelor;- interfeţele specializate;- integrarea elementelor proiectate cu organizarea şi funcţionarea BD.

3. Realizarea componentelor logiceComponentele logice ale unei BD sunt programele de aplicaţie dezvoltate, în cea mai

mare parte, în SGBD-ul ales.Programele se realizează conform modulelor funcţionale proiectate în etapa anterioară.Componentele logice ţin cont de ieşiri, intrări, prelucrări şi colecţiile date.În paralel cu dezvoltarea programelor de aplicaţii se întocmesc şi documentaţiile diferite

(tehnică, de exploatare , de prezentare).4. Punerea în funcţiune şi exploatareaSe testează funcţiile BD mai întâi cu date de test, apoi cu date reale.Se încarcă datele în BD şi se efectuează procedurile de manipulare, de către beneficiar cu

asistenţa proiectantului.Se definitivează documentaţiile aplicaţiei.Se intră în exploatare curentă de către beneficiar conform documentaţiei.5. Dezvoltarea sistemuluiImediat după darea în exploatare a BD, în mod continuu, pot exista factori perturbatori

care generează schimbări în BD.Schimbările necesare trebuie preluate de BD uşor şi din mers.Factorii pot fi: organizatorici, datoraţi progresului tehnic, rezultaţi din cerinţele noi ale

beneficiarului, din schimbarea metodologiilor etc.

Eficienţa bazelor de date

Efectele directe şi indirecte ale bazelor de date conduc spre eficienţă, mai ales pentru aplicaţiile mari şi complexe, acolo unde alte produse informatice nu fac faţă.

Efectele utilizării BD conduc spre avantajele oferite de acestea: - elimină redundanţele necontrolate;- creşte productivitatea activităţii informatice;- oferă suport informaţional optim pentru conducere şi execuţie,- permite interogarea datelor de către toate categoriile de utilizatori;- conduce spre aplicaţii deschise.

Efortul depus pentru realizarea şi întreţinerea unei BD este considerabil şi de aceea investiţia necesară trebuie fundamentată pentru a putea fi recuperată.

Fundamentarea investiţiei pentru o aplicaţie cu BD se face prin studiul de fezabilitate (analiza preliminară) care va conţine un studiu al costurilor şi o evaluare a eforturilor de realizare şi întreţinere.

Etape care trebuie parcurse pentru stabilirea eficienţei BD:1. Studiul costurilor iniţiale (de realizare)

costul software-ului necesar; costul hardware-ului necesar; costul impus de trecerea de la sistemul existent la SBD; costul resurselor necesare (umane, materiale, informaţionale etc.); costul consultaţiei tehnice.

2. Evaluarea costurilor de funcţionare a BD costul de punere în funcţiune; costul de exploatare; costul de întreţinere şi dezvoltare.

3. Calcule de rentabilitate utilizarea unor modele specifice (exemplu: Analiza Cost-Beneficiu); utilizarea unor instrumente hardware şi software specializate pentru BD (cresc

performanţa, scad portabilitatea).

CAP.III LIMBAJUL SQL

3.1 CARACTERISTICI GENERALE

Limbajul SQL (Structured Query Language) este unul dintre cele mai puternice limbaje structurate pentru interogarea bazelor de date relaţionale permiţând o comunicare complexă şi rapidă a utilizatorului cu bazele de date, în funcţie de cerinţele şi restricţiile acestuia.

Se cunosc trei metode de bază privind implementarea limbajului SQL, şi anume:cea prin apelare directă (Direct Invocation) – constă în introducerea instrucţiunilor SQL de la

prompter;cea modulară (Modul Language) – foloseşte anumite proceduri apelate de programele aplicaţiei;cea de tip încapsulat (Embedded SQL) – are în vedere instrucţiuni încapsulate în codul de

program, fiind de tip static sau dinamic.Instrucţiunile SQL, în funcţie de rolul lor în manipularea datelor şi tranzacţiilor, pot fi grupate

astfel:instrucţiuni de definire a datelor care permit descrierea structurii bazei de date;instrucţiuni de selecţie a datelor care permit consultarea bazei de date;instrucţiuni de manipulare a datelor, în sensul adăugării, modificării şi ştergerii înregistrărilor;instrucţiuni de procesare a tranzacţiilor care privesc unităţile logice de prelucrare şi constituie în

fapt operaţii multiple de manipulare a datelor;instrucţiuni de control al cursorului;instrucţiuni privind controlul accesului la date.Cu ajutorul următoarelor reguli se pot construi instrucţiuni valide, uşor de citit şi de editat:Instrucţiunile SQL pot fi scrise cu litere mari sau mici, în afară de cazurile indicate;Instrucţiunile SQL pot fi introduse pe una sau mai multe linii;Cuvintele cheie nu pot fi abreviate sau despărţite în linii diferite;Clauzele, de obicei, sunt plasate pe linii separate pentru a fi lizibile;De obicei cuvintele cheie sunt introduse cu majuscule; iar toate celelalte cuvinte, ca numele de

tabele şi coloane, sunt introduse cu litere mici;În cadrul SQL*Plus, instrucţiunile SQL sunt introduse de la promterul SQL, iar următoarele linii

sunt numerotate. Acesta se numeşte un buffer SQL. O singură instrucţiune poate fi curentă în orice timp în cadrul buffer–ului.

Executarea instrucţiunilor SQLPoziţionarea punct şi virgulei (;) la sfârşitul ultimei clauze;Poziţionarea unui slash (/) la sfârşitul ultimei linii din buffer;Punerea unui slash la promterul SQL;În cadrul SQL*Plus – comanda RUN la promterul SQL.

Pentru a crea şi executa interogări SQL în SGBD Access se parcurg etapele:din fereastra Open, se deschide baza de date asupra căreia se vor efectua interogările SQL din fereastra Database care se afişează se va selecta eticheta Query. Pentru a crea interogarea

SQL se va selecta opţiunea “Create query în Design View” se alege cu ajutorul butonului Add tabela (Tables), interogarea (Query) sau ambele categorii de

obiecte (Both) care vor prezenta suportul interogării SQL. Din fereastra Show Table se pot selecta mai multe tabele (interogări).

pentru a scrie interogarea SQL ACCESS este necesar să se selecteze din meniul View opţiunea SQL View. În această fereastră se vor scrie instrucţiunile SQL

pentru a pune în execuţie comanda SQL din meniul Query se selectează opţiunea Run. Pe ecran se va afişa rezultatul; acest rezultat va fi interpretat de utilizator.

3.2 LIMBAJ DE DEFINIRE A DATELOR: SQL–LDD

3.2.1 Gestiunea schemei bazei de dateSchema unei baze de date descrie tabelele şi atributele aferente lor, domeniile în care aceste

atribute iau valori, restricţiile de integritate, drepturile de utilizare a relaţiilor, view–urile şi detaliile relative la implementarea fizică a tabelelor.

Limbajul de definire a datelor LDD (Language Data Definition), parte componentă a limbajului SQL, include instrucţiuni care permit realizarea acţiunilor specifice descrierii schemei bazei de date.

Majoritatea implementărilor limbajului SQL conţin instrucţiuni pentru crearea unei baze de date, fie că acestea fac parte din setul de comenzi al versiunii SQL, fie sub formă de programe utilitare. Prima etapă în administrarea datelor o reprezintă crearea bazei de date. Sintaxa comenzii nu este standardizată, putând varia în funcţie de necesităţile utilizatorului şi de S.G.B.D.–ul folosit. De exemplu ACCESS SQL nu acceptă o astfel de instrucţiune.

La crearea unei baze de date trebuie respectate anumite restricţii stabilite de administratorul de sistem şi anume, cele referitoare la nivelul drepturilor de utilizare a instrucţiunilor în sistem şi cele care privesc stabilirea dimensiunilor predefinite pentru baza de date.

Crearea unei baze de date

Sintaxa:

CREATE DATABASE nume_baza_de_date;Exemplu: Să se creeze baza de date Situaţia beneficiarilor:CREATE DATABASE Situaţia_beneficiarilor

Crearea unei tabele

Sintaxa:

CREATE TABLE nume_tabelă(câmp1 tip_dată [NOT NULL],

câmp2 tip_dată [NOT NULL],câmp3 tip_dată [NOT NULL]...);

Exemplu:

Să se creeze tabela Beneficiar cu structura următoare: Cod beneficiar (tip numeric), Denumire beneficiar (tip text), Adresa (tip text), Telefon (tip numeric).

CREATE TABLE Beneficiar(Cod_beneficiar Number, Den_beneficiar Text, Adresa Text, Telefon Number);

Modificarea structurii unei tabele.

Comanda ALTER TABLE permite modificarea unei tabele prin adăugarea/ştergerea de atribute şi prezintă următoarea sintaxă:

Sintaxa:

ALTER TABLE nume_tabelă {ADD COLUMN nume_atribut1Tip_data [(mărime)] [NOT NULL][CONSTRAINT index] │DROP COLUMN nume_atribut2

CONSTRAINT indexname};

Exemplu:

Să se adauge tabelei Beneficiar un nou câmp numit Banca.ALTER TABLE Beneficiar

ADD COLUMN Banca Text;

Exemplu:

Să se realizeze ştergerea atributului Adresa din tabela BeneficiarALTER TABLE Beneficiar

DROP COLUMN Adresa Text;

Ştergerea relaţiilor dintr–o bază de date

Ştergerea unei tabele se realizează cu ajutorul comenzii DROP TABLE, odată cu aceasta ştergându–se şi indecşii, view–urile definite pentru respectiva tabelă, neexistând nici o posibilitate de recuperare a informaţiei şterse.

Sintaxa:

DROP TABLE nume_tabelă;

Exemplu:

Să se şteargă tabela Beneficiar din baza de date Situaţia beneficiarilorDROP TABLE Beneficiar;

Ştergerea unei baze de date

Ştergerea unei baze de date determină ştergerea tuturor obiectelor conţinute de aceasta, a copiei cataloagelor SQL din directorul bazei de date.

Sintaxa:

DROP DATABASE nume_bază de date;Această instrucţiune nu este inclusă de anumite versiuni SQL, ştergerea făcându–se mai uşor

printr–o apăsare a mouse–lui. Într–o reţea de calculatoare nu poate fi ştearsă o bază de date activată de către un alt utilizator. Comanda de ştergere nu poate acţiona asupra unei baze de date active.

3.2.2. Gestiunea indecşilorUn index este un obiect schemă care îmbunătaţeşte regăsirea înregistrărilor folosind un pointer.

Indecşii pot fi creaţi explicit sau automat.Un index furnizează un acces direct şi rapid la înregistrarile unei baze de date. Scopul utilizării

indecşilor este reducerea numărului de citiri/scrieri pe disc, prin folosirea unei căi indexate pentru a localiza mai rapid datele. Indexul este automat folosit si întreţinut de serverul Oracle. Odată creat indexul, nu este necesară nici o intervenţie din partea utilizatorului.

Indecşii sunt logic si fizic şi sunt independenţi de bazele de date pe care le indexează. Acest lucru înseamnă că indecşii pot fi creaţi sau şterşi oricând fără nici un efect asupra bazelor de date sau a altor indecşi.

Nota:

Când este şters un tabel, indecşii corespunzători sunt de asemenea şterşi.Indexul este un obiect din schemă.Indexul este folosit de serverul Oracle pentru o mai bună regăsire a înregistrarilor prin utilizarea

unui pointer.Indexul reduce numărul operaţiilor de citire/scriere pe disc prin utilizarea unei metode de

accesare rapidă, pentru o mai eficientă localizare a datelor.Indexul este independent de tabelele pe care le indexează.Indexul este folosit şi întreţinut de serverul Oracle.

Indecşii sunt creaţi:

Automat – când este definită o cheie primara (PRIMARY KEY) sau unică (UNIQUE KEY) în definiţia unui tabel.

Manual – utilizatorii pot crea indecşi mecanic pentru a accelera accesul la înregistrările bazelor de date

Crearea unui index

Sintaxa:

CREATE INDEX index

ON table (column[, column]…);

Îmbunătăţirea accesului câmpului ENAME în baza de date EMP

SQL> CREATE INDEX emp_ename_idxON emp(ename);Index created.

Unde:

index – este numele indexului.table – numele bazei de date.column – numele câmpului în baza de date ce urmează a fi indexat

Crearea unui index se face pentru:

un câmp ce este folosit des în clauzele WHERE sau în condiţii de join;câmpuri cu mare varietate de valori;câmpuri cu un număr mare de valori NULL;două sau mai multe câmpuri ce sunt folosite împreună frecvent într–o clauză WHERE sau într–o

condiţie join;o bază de date mare şi majoritatea interogărilor nu vizează mai mult de 2–4% din înregistrări.Mai multi indecşi într–o bază de date nu înseamnă o optimizare a interogărilor. Fiecare operaţie

DML ce se realizează într–o bază de date ce conţine indecşi implică o actualizare a indecşilor. Cu cât sunt mai mulţi indecşi asociaţi tabelului, cu atât va dura mai mult până când serverul Oracle va actualiza indecşii dupa DML.

Nu este necesară crearea unui index atunci când:

baza de date este mică;câmpurile nu sunt des folosite într–o condiţie; majoritatea interogărilor vizeaza mai mult de 2–4% dintre înregistrari.

Confirmarea indecşilor

USER_INDEXES conţine numele indexului si unicitatea lui.Componenta USER_IND_COLUMNS conţine numele indexului, numele bazei de date si numele

câmpului.SQL> SELECT ic.index_name, ic.column_name,

ic.column_position col_pos, ix.uniquesFROM user_indexes ix, user_ind_columns ic WHERE ic.index_name = ix.index_name AND ic.table_name = ‘EMP’;

Confirmarea indecşilor

Confirmarea indecşilor existenţi se realizează prin vizualizarea lui USER_INDEXES. De asemenea se pot verifica câmpurile implicate într–o indexare prin interogarea lui USER_IND_COLUMNS.

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

Nota: Ieşirea a fost formatată anterior.

Ştergerea unui index

Ştergerea unui index din dicţionarul de date.

INDEX_NAME COLUMN_NAME COL_POS

UNIQUENES

EMP_EMPNO_PK EMPNO 1 UNIQUEEMP_ENAME_IDX ENAME 1 NONUNIQUE

Sintaxa:

SQL> DROP INDEX index;

Ştergerea indexului EMP_ENAME_IDX din dicţionarul de date.

Sintaxa:

SQL> DROP INDEX emp_ename_idx;Index dropped

Ştergerea unui index poate fi realizată doar cel care l–a creat sau de cel care are privilegiul

Sintaxa:

DROP ANY INDEX.

Indecşi care aparţin unei legături dintre tabele

Clauza CONSTRAINT

Permite crearea unui index după numele unui câmp; indexul poate fi declarat drept cheie primară (PRIMARY KEY) sau ca UNIQUE sau stabileşte o relaţie între câmpul nume de index şi câmpul unei tabele externe (cu opţiunea REFERENCES foreign_tabele [foreign_field]).

Sintaxa:

CONSTRAINT nume_index{PRIMARY KEY ! UNIQUE ! REFERENCES foreign_table [foreign_field]};

Clauzele UNIQUE şi PRIMARY KEY

Există o diferenţă intre UNIQUE şi PRIMARY KEY şi anume: pe o tabelă poate exista o singură cheie primară, dar UNIQUE specifică existenţa unor valori unice la nivelul unei coloane. În plus, PRIMARY KEY conţine automat o restricţie NOT NULL, pe când o coloană UNIQUE poate avea valori NULL dacă nu este specificată in mod expres clauza NOT NULL.

Menţionăm faptul că indexul poate fi simplu (creat pe o singură) sau multiplu (creat pe mai multe coloane).

REFERENCES

Este varianta cea mai simplă de definire a unei restricţii relaţionale şi care s–a dovedit deosebit de practică. Această clauză pune in legătură două tabele. Ea specifică faptul că valorile unei coloane aparţinând tabelei ( care serveăte la stabilirea de legături trebuie să apară intr–o coloană din tabela referită al cărei nume este precizat în restricţie (CONSTRAINT nume_index).

Observaţie: Restricţiile UNIQUE nu sunt acelaşi lucru cu INDEX UNIQUE. Un index UNIQUE nu poate fi referit pentru că el aparţine unei singure tabele şi nu unei legături între tabele.

Exemplu:

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

Comanda DROP CONSTRAINT permite ştergerea unei restricţii de unicitate sau de referinţă utilizând sintaxa:

Sintaxa:

DROP CONSTRAINT nume_index;

3.2.3 Gestiunea drepturilor de utilizareUtilizatorii bazei de date sunt repertorizaţi de SGBD prin:

identificatorul sistem;parolă;

nume de utilizare de date drepturi asupra tabelelor sale.

Acordarea drepturilor de acces

Proprietarul unei tabele poate acorda altor utilizatori drepturi de a manipula tabela. Acordarea acestor drepturi se realizează prin comanda GRANT care prezintă următoarea sintaxă:

Sintaxă:

GRANT [ ALL/Listă de privilegii]

ON TABLE1,...,TABLE nTO [PUBLIC/ Listă utilizatori][WITH GRANT OPTION]

Unde:

Listă privilegii: alter, delete, insert, update, select;ALL: toate comezile;Public: toţi utilizatorii;WITH GRANT OPTION: drepturi utilizatorilor de a acorda la rândul lor drepturi de acces altor

utilizatori.

Exemplu:

Să se acorde tuturor utilizatorilor toate drepturile asupra tabelei BENEFICIAR:SQL> GRANT ALL ON BENEFICIAR TO PUBLIC;

Să se acorde utilizatorului Ştefan drepturi de actualizare şi dreptul de ştegere in tabela BENEFICIAR:

SQL> GRANT UPDATE, DELETEON BENEFICIAR TO ŞTEFAN;

Retragerea drepturilor de acces

Retragerea (anularea) drepturilor de acces se realizează prin comanda REVOKE.

Sintaxă:

REVOKE [ALL/Listă de privilegii]ON TABLE 1,..., TABLE nFROM [PUBLIC/Listă utilizatori];

Exemplu:

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

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

Exemplu:

SQL> CREATE VIEW LOGAS SELECT Cod_beneficiar, Adresa, Telefon FROM BENEFICIAR;GRANT SELECT ON LOG TO PUBLIC; Se acordă dreptul de consultare a tabelei BENEFICIAR pe atributele: Cod_beneficiar, Adresa,

Telefon.

3.3 LIMBAJUL DE MANIPULARE A BAZEI DE DATE (SQL–LMD)

Limbajul de manipulare a datelor (DML) este partea de bază a SQL. Când dorim să adăugăm, să modificăm sau să ştergem date dintr–o bază de date, executăm o comandă DML.

O colecţie de comenzi DML care formează o unitate logică de lucru se numeşte tranzacţie. Considerăm o bază de date din domeniul bancar. Atunci când un client al bancii doreşte să

transfere bani dintr–un depozit într–un cont curent, tranzacţia ar putea consta în 3 operaţii separate: scade suma din depozit, creşte suma din contul curent, înregistrează tranzacţia în jurnalul de tranzacţii. Serverul Oracle trebuie să garanteze că toate cele 3 comenzi SQL sunt executate în aşa fel încât să menţină echilibrul necesar între conturi. Atunci când, din anumite cauze, una dintre comenzile tranzacţiilor de mai sus nu se execută, atunci celelalte comenzi ale tranzacţiilor trebuie să fie anulate.

3.3.1. Instrucţiuni pentru selectarea datelorCereri de interogare simpleInstrucţiunile de selecţie reprezintă una dintre categoriile cele mai importante ale limbajului de

interogare SQL ACCESS.Pentru definirea interogarilor de selecţie simple avem instrucţunea SELECT cu următoarea

sintaxă :

SELECT [domeniu] listă_selecţie FROM nume tabela 1, nume tabela 2;[WHERE criteriul _de_selectie][ORDER BY campuri_criteriu [ASC/DESC]];

unde:

domeniu – determină stabilirea modalitaţii de manipulare a înregistrărilor din baza de date asupra căreia se face selecţia

All – permite includerea tuturor înregistrărilor ce îndeplinesc condiţiile impuse;Distinct – elimină înregistrările care prezintă valorile duplicate în câmpurile selectate;Distinctrow – vizează înregistrările duplicate care nu vor fi returnate în urma executării cererii;Listă_selecţie – cuprinde toate câmpurile care vor apărea în tabela cu rezultatele interogării;Clauza FROM – specifică numele tabelei sau tabelelor care vor forma suportul interogării;Clauza WHERE – face interogările mai selective, înregistrările care îndeplinesc crieteriul descris

vor fi afişate;Clauza ORDER BY – se utilizează atunci când se doreşte ca rezultatele să fie ordonate in mod

crescător (ASC) sau descrescător (DESC).Operatorii utilizaţi în cererile de interogare sunt:operatori aritmetici:+,–,*,/operatori logici: and, or, notoperatori de atribuire şi comparare: <, >, =, <=, >=.În serierea interogărilor de selecţie simple SQL ACCESS este posibilă şi folosirea funcţiilor de

grup. Cele mai importante sunt:COUNT – returnează numărul de înregistrări care respectă condiţia stabilită prin clauza Where;SUM – returnează suma valorilor dintr–un câmp; operează numai cu valori numerice;AVG – calculează valoarea medie pentru câmpul precizat;MAX – returnează cea rnai mare valoare dintr–un câmp;MIN – returnează cea mai mică valoare dintr–un câmp

Exemplu:

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

SQL> SELECT NrLeg, AVG(Nota) Media from Note Group By NrLeg;

dorim afişarea numărului de note primite de fiecare student identificat după NrLeg

SQL> SELECT NrLeg, Count(Nota) NrNote FROM Note Group By NrLeg;

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

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

dorim afişarea studenţilor cu medii <5 identificaţi după NrLegSQL> SELECT NrLeg, Avg(Nota) Media FROM Note group by NrLeg HAVING avg(Nota)<5;

dorim afişarea mediei pe fiecare grupă

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

dorim afişarea mediei >=5 pentru fiecare grupă SQL> SELECT Grupa, Avg(N.Nota) Media FROM Student S, Note N WHERE S.NrLeg=N.NrLeg group by GrupaHAVING avg(Nota)>=5;

dorim afişarea mediei pe fiecare materie

SQL> SELECT Denumire, Avg(N.Nota) Media FROM Materii m, Note N WHERE M.Cod_materie=N.Cod_materie GROUP BY Denumire;

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

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

GROUP BY Grupa, Denumire Order by Grupa

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

SQL> SELECT S.NrLeg, Nume, Prenume, Avg(N.Nota) Media FROM Student S, Note N Where S.NrLeg=N.NrLeg GROUP BY S.NrLeg, Nume, Prenume;

dorim să vizualizăm din tabela Produs (cod produs, den produs, um, pret) numai acele produse cu

preţuri cuprinse între 10 ROL şi 12 ROL.

SQL>SELECT den produsFROM ProdusWHERE pret BETWEEN 10 AND 12;dorim să cunoaştem codul atribuit produsului "crema mâini" şi la ce preţ este oferit.

SELECT cod produs, pret, den produs FROM ProdusWHERE den produs "crema mâini";

Cereri de interogare complexe

Limbajul de interogare SQL ACCESS permite pe lângă definirea de interogări de selecţie simple, crearea unor interogări cu o structură complexă, cum ar fi cele în care regăsim funcţiile agregate, interogările JOIN sau interogările UNION;

Funcţiile de grup (agregat)

Permit construirea unor interogări SQL ACCESS complexe, prin care utilizatorul poate să efectueze diverse calcule pentru grupuri de inregistrari care au câmpuri cu aceiaşi valoare,

SELECT [domeniu] [functie_agregata] (nume_câmp) AS alias, lista_seleetie]FROM nume_tabela 1 nume tabela 2;GROUP BY câmp_de _grupare[HAVING criteriul_de_grupare][ORDER BY câmpuri_criteriu[ASC/DESC]];

Din structura instrucţiunii se observă anumite clauze care au fost întâlnite şi la definirea interogărilor simple însă apar şi elemente mai de sinteză şi anume:

Listă selecţie – se referă la una sau mai multe funcţii agregate care au ca argumente nume de câmpuri ale bazei de date

AS alias – asociază un pseudonim (nume) rezultatului utilizării funcţiei agregatClauza GROUP BY – precizeză câmpul sau câmpurile pe baza cărora se va efectua gruparea

înegistrărilor; se pot executa funcţiile agregate descrise în lista de selecţie pentru fiecare dintre grupări. Echivalentul acestei clauze în macheta grafică QBE de constucţie a interogării il reprezintă rândul Total

Clauza HAVINIG – se referă la criteriul care va fi aplicat câmpului definit ca argument al funcţiei agregat

Exemplu:

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

SELECT denumire_client, SUM([valoare neachitată]) AS TotalFROM CreanteGROUP BY denumire_clientHAVING SUM (Valoare_neachitat) > 1500;

Interogările JOIN

Operaţiile de asociere induse de clauza JOIN au ca rezultat producerea tuturor combinaţiilor posibile, pentru conţinutul infomaţional al fiecarei tabele. Noile înregistrări care rezulă în urma joncţiunii vor deveni disponibile pentru selecţiile ulterioare. La o asociere pot participa mai mult de două tabele.

Există mai multe categorii de joncţiuni:CROSS – cu rol în ilustrarea elementelor specifice proprietăţilor combinatorii ale tuturor

asocierilorECHIVALENŢĂ – presupune folosirea clauzei WHERE asociată cu o egalitateNEECHIVALENTĂ – face apel în clauza WHERE la oricare alt operator de comparare în afara

de semnul egal.Sintaxa generală pentru joncţiunile echivalente şi neechivalente este:SELECT [domeniu] lista_ selectieFROM nume_tabela 1,. Nume_tabela 2.,...[WHERE criteriul_de_asociere][ORDER BY campuri_criteriu [ASC/DEESC]];

Deoarece în instrucţiunile SQL, care descriu joncţiuni se utilizează câmpuri ce fac parte din tabele diferite, este necesară întotdeauna specificarea tabelei de care aparţin.

Forma generală de descriere a unui astfel de câmpSELECT Factura. nr_factura, Client. cod_client, Factura.suma_factura, Incasari. suma_incasataFROM Factura, Client, IncasariWHERE Factura. cod_client=Client. cod_client AND Client. cod_client=Incasari. cod_clientORDER BY Client. cod_client;

Interogările UNION

Când utilizatorul doreşte să vadă rezultatele a mai multor interogari SELECT în acelaşi timp, prin combinarea ieşirilor lor, poate utiliza facilitatea UNION a limbajului de interogare SQL ACCESS. Nu există echivalent QBE pentru această instrucţiune.

Sintaxa generală pentru interogările UNION este:

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

3.3.2 Instrucţiuni pentru actualizarea bazei de dateAceste instrucţiuni se implementează prin interogările de tip acţiune; efectele acţiunii lor sunt

permanente, influenţând inclusiv integritatea referenţială. Cele mai importante instrucţiuni sunt CREATE, INSERT, UPDATE şi DELETE.

Crearea unei noi tabele plecând de la structura şi conţinutul unei tabele deja existente

Sintaxa:

SELECT [domeniu] (câmp 1, câmp 2...) INTO tabela_nouă FROM tabela_sursă [WHERE criteriul_de_adăugare];

Exemplu:

Să se creeze o tabelă cu numele Beneficiari_teritoriali plecând de la tabela Beneficiari în care să regăsim doar beneficiarii care au sediul în Craiova şi Timişoara.

SELECT DISTRICTROW Den_beneficiar, Adresa INTO Beneficiari_teritoriali FROM BeneficiariWHERE Adresa = “Craiova” OR Adresa= “Timişoara”;

Adăugarea unei înregistrări dintr–o tabelă în alta

Există două forme ale instrucţiunii şi anume:INSERT...VALUES

INSERT...SELECT

INSERT...VALUES

Sintaxa:

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

În acest caz se inserează o înregistrare într–o tabelă, menţionându–se câmpurile şi valorile asociate acestora. Ca particularizare se remarcă inserarea unei singure înregistrări la un moment dat.

Trebuie avut în vedere respectarea următoarelor reguli:valorile menţionate în clauza VALUES vor avea aceeaşi natură cu câmpurile specificate în clauza

INTO;mărimea valorii corespunzătoare fiecărui câmp va fi mai mică decât dimensiunea câmpului;nu va fi nevoie specificarea denumirii câmpurilor, deorece SQL ACCESS va asocia listei de valori

câmpurile în ordinea din structura înregistrării (prima valoare se va introduce în primul câmp, a doua valoare în al doilea câmp, etc.)

dacă un câmp are definiţia NOT NULL, va fi obligatorie introducerea unei valori pentru acesta.

Exemplu:

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

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

INSERT...SELECT

Sintaxa:

INSERT INTO tabelă_destinaţie (câmp 1, câmp 2...)SELECT [domeniu] câmp 1, câmp 2... FROM tabelă_sursă WHERE criteriul_de_adăugare;În acest caz este posibil să se copieze selectiv înregistrări dintr–o tabelă într–una sau în mai multe

tabele.Regulile menţionate la instrucţiunea INSERT...VALUES rămân valabile, în plus se adaugă

următoarele:fraza SELECT nu poate extrage înregistrări din tabela destinaţie;numărul şi natura câmpurilor menţionate în clauza INTO trebuie să fie aceleaşi cu numărul şi

natura câmpurilor returnate de instrucţiunea SELECT;dacă nu se introduce clauza WHERE, toate înregistrările din tabela sursă vor fi adăugate în tabela

destinaţie.

Exemplu:

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

(nr Number, nume Text, pren Text, std Text);

Comanda propriu–zisă de inserare este:INSERT INTO STUDII (nr, nume, pren, std) SELECT nr, nume, pren, std

FROM Agent_vanzare WHERE std=”student”;

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

Nu este utilizată pentru ştergerea de valori din câmpuri individuale, ci va acţiona doar asupra înregistrărilor în totalitatea lor. În acelaşi timp se va şterge doar conţinutul tabelei nu şi aceasta (pentru eliminarea tabelei se va apela la instrucţiunea DROP TABLE).

Ca şi instrucţiunea INSERT, operaţia de ştergere a înregistrărilor dintr–o tabelă poate duce la apariţia unor probleme de integritate referenţială în alte tabele. Clauza WHERE restricţionează domeniul de ştergere în funcţie de cerinţele utilizatorului.

Exemplu:

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

Interogarea acţiune UPDATE;

Are scopul de a insera noi înregistrări cât şi de a modifica valorile câmpurilor din înregistrările existente. Ca şi în cazul instrucţiunii INSERT, se va urmări dacă în câmpul cu valori de actualizat sunt permise numai valori unice.

Sintaxa:

UPDATE nume_tabela SET nume_câmp 1= valoare 1 [,nume_câmp 2 = valoare 2]... [WHERE criteriul_de _actualizare];

Unele sisteme de baze de date pun la dispoziţie o extensie la sintaxa standard a instrucţiunii UPDATE. De exemplu, limbajul Transact–SQL al sistemului SQL Server permite programatorului să actualizeze conţinutul unui tabel pe baza conţinutului altor câteva tabele, prin folosirea clauzei FROM. Sintaxa extinsă arată astfel:

UPDATE nume_tabela SET nume_câmp 1= valoare 1 [,nume_câmp 2 = valoare 2]FROM listă_tabele[WHERE criteriul_de _actualizare];

Tipul datelor rezultate din evaluarea expresiei trebuie să fie acelaşi cu tipul de dată al câmpului care este modificat. De asemenea, dimensiunea (lungimea) valorii trebuie să fie corespunzătoare cu câmpul care este modificat.

La obţinerea rezultatelor în valoarea calculată pot rezulta două situaţii: trunchierea – atunci când sistemul de baze de date converteşte, de exemplu un număr fracţionar

într–un număr întreg;depăşirea zonei de memorie – atunci când valoarea rezultată este mai mare decât capacitatea

coloanei modificate. Aceasta va determina semnalarea unei erori de depăşire din partea sistemului de baze de date.

3.4 VEDERI

O vedere este un tabel virtual. Vederile permit programatorului SQL să creeze “imagini” ale datelor care pot fi diferite de imaginile fizice ale acestora situate pe hard–disc. După crearea vederii, se pot folosi următoarele comenzi SQL:

CREATE VIEW – crearea unei vederi;SELECT – interogarea vederilor;INSERT – adăugarea de noi date;UPDATE – actualizarea datelor într–o vedere;DELETE – ştergerea datelor dintr–o vedere.

Crearea unei vederi

Permite definirea unei “ferestre” prin care se pot consulta datele stocate din tabel..

Sintaxa:

CREATE VIEW nume_view [<lista atribute>]AS SELECT secventa_select[WITH CHECK OPTION];

unde:

nume_view – reprezintă numele vederii şi opţional a denumirii atributelor din view, în cazul când se doreşte redenumirea atributelor specificate în instrucţiunea SELECT;

SELECT – specificarea interogării;WITH CHECK OPTION – specificarea opţională a unei condiţii suplimentare impuse view–ului,

astfel încât să poată fi realizată actualizarea sau inserarea datelor în view.

Exemple:

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

CREATE VIEW Date_stud AS SELECT Cod, Nume, Facultate FROM Student;

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

SELECT * FROM Date_stud WHERE Nume like 'Pop%'

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

CREATE VIEW Date_stud_C AS SELECT * FROM Student WHERE Stare_civila='C'

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

SELECT * FROM Date_stud_C

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

CREATE VIEW Note1 ASSELECT * FROM Note WHERE Nota>5

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

SELECT * FROM Note1Crearea unei vederi cu notele studenţilor al căror nume se termină în 'escu'.

CREATE VIEW Note2 ASSELECT * FROM Student S, Note N WHERE S.NrLeg=N.NrLeg AND S.Nume like '%escu'

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

SELECT * FROM Note2

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

CREATE VIEW Medii(NrLeg, Student, Grupa, Media) AS SELECT S.NrLeg, Nume+' '+Initiala+'.'+Prenume,Grupa, AVG(Nota) FROM Student AS S,Note AS N

WHERE S.NrLeg=N.NrLeg GROUP BY S.NrLeg, Nume+' '+Initiala+'.'+Prenume,Grupa

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

SELECT * FROM Medii

SQL plasează câteva restricţii la folosirea instrucţiunii SELECT pentru a formula o vedere. Următoarele două reguli sunt valabile atunci când folosiţi instrucţiunea amintită:

Nu poate fi folosit operatorul UNION;Nu poate fi folosită clauza ORDER BY.

Eroare – la crearea unei vederi nu puteti folosi în SELECT clauzele ORDER BY si UNION

CREATE VIEW Note_stud_err AS SELECT S.NrLeg, Nume+' '+Initiala+'.'+Prenume Student,Grupa, Denumire, Nota FROM Student AS S,Note AS N, Materii AS M WHERE S.NrLeg=N.NrLeg AND N.Cod_materie=M.Cod_materieORDER BY S.NrLeg

CREATE VIEW Medii_Bursieri AS SELECT S.NrLeg, Nume+' '+Initiala+'.'+Prenume Student,Grupa, AVG (Nota) Media FROM Student AS S,Note AS NWHERE S.NrLeg=N.NrLeg GROUP BY S.NrLeg, Nume+' '+Initiala+'.'+Prenume,GrupaHAVING AVG(Nota) >7.5

SELECT * FROM Medii_Bursieri

CREATE VIEW Varste ASSELECT NrLeg, Nume, Prenume,Datediff(year,Data_nastere,getdate()) VarstaFROM Student

SELECT * FROM Varste

Modificarea datelor folosind vederile – se folosesc comenzile UPDATE, INSERT şi DELETE

CREATE VIEW Notele ASSELECT * FROM Note

SELECT * FROM Notele

Exemple:

Scade 5 puncte la toate notele din vederea Notele

UPDATE Notele SET Nota=Nota–5SELECT * FROM Note

DELETE FROM Notele WHERE NrLeg='116'CREATE VIEW Notele1 ASSELECT NrLeg, Nota FROM Note

SELECT * FROM Notele1

Adaugă 5 puncte la toate notele din vederea Notele1

UPDATE Notele1 SET Nota=Nota+5

Scade un punct la toate notele studenţilor cu NrLeg par

UPDATE Notele1 SET Nota=Nota–1 WHERE NrLeg%2=0SELECT * FROM Note

INSERT INTO Notele1 VALUES('120',8)

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

CREATE VIEW Notele2 ASSELECT NrLeg, Nota, Cod_materie FROM Note

SELECT * FROM Notele2INSERT INTO Notele2 VALUES('120',8,'1')SELECT * FROM Note

Probleme care apar la modificarea datelor folosind vederile

Deoarece ceea ce se vede într–o vedere poate fi un set de date dintr–un grup de tabele, modificarea datelor în tabelele de bază nu este totdeauna la fel de directă. În continuarea este prezentată o lista care conţine cele mai obişnuite lucruri pe care trebuie cunoscute atunci când se lucrează cu o vedere:

Instrucţiunile DELETE nu sunt permise în vederi ale tabelelor multiple;Instrucţiunea INSERT nu este permisă decât dacă toate coloanele cu atributul NOT NULL folosite

în tabelul de bază sunt incluse în vedere. Aceasta se datorează faptului că procesorul SQL nu cunoaşte ce valori să insereze într–o coloană NOT NULL;

Dacă se inserează sau se actualizează înregistrări într–o vedere a unei combinări, toate înregistrările care sunt actualizate trebuie să aparţină aceluiaşi tabel fizic;

Dacă se foloseşte clauza DISTINCT pentru crearea unei vederi, nu se mai pot efectua actualizări sau inserări de înregistrări în cadrul vederii respective;

Coloana virtuală (o coloană care este rezultatul unui calcul sau al unei expresii) nu poate fii actualizată.

Ştergerea unei vederi

DROP VIEW Notele1Această comandă determină pe de o parte ştergerea definiţiei view–ului din dicţionarul de date,

iar pe de altă parte ştergerea oricărui view definit pe baza eiSELECT * FROM Notele1 – acum eroare pt. vederea Notele1 s–a sters

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

NOŢIUNI GENERALE

În proiectarea de aplicaţii se foloseşte tot mai mult programarea modulară. Dacă programarea structurală oferea un program care îl dirija pe utilizator pas cu pas, fără posibilitatea alegerii altei opţiuni, programarea modulară constă dintr–un ansamblu de subrutine (proceduri sau subprograme) care pot fi apelate în ordinea dorită de utilizator.

Limbajul în care programăm în Access este VBA (Visual Basic pentru Aplicaţii) şi care este varianta limbajului Visual Basic dedicată componentei Access.

Conceptele de bază ale programării în VBA sunt: obiectul, proprietatea, metoda, evenimentul. Dintre obiectele bazei de date Access, modulul este singurul care conţine proceduri definite de utilizator şi scrise în limbajul de programare VBA. În cadrul modulelor codul este organizat în proceduri sau funcţii. În general, un modul are următoarea structură:

DeclaraţiiProcedură sau funcţie..................................

Procedură sau funcţieZona de declaraţii este rezervată declarării variabilelor şi constantelor accesibile pentru toate

procedurile şi funcţiile componente ale modulului şi una sau mai multe proceduri sau funcţii.După apartenenţa lor modulele se pot grupa în următoarele categorii (pot fi vizualizate prin

Object Browser):module globale sau standard – sunt accesibile întregii aplicaţii;module specifice formularelor sau rapoartelor sunt accesibile numai formularelor şi rapoartelor în

care au fost declarate;module class – permit definirea de module noi.

EDITAREA MODULELOR VBA

Pentru editarea modulelor, în fereastra Database, se selectează eticheta Modules. Dacă baza de date are deja create obiecte de tip modul, acestea vor fi afişate în partea dreapta a ferestrei.

Pentru crearea unui modul nou, vom activa butonul New sau vom activa comanda Module din meniul Insert. Ca efect apare pe ecran fereastra de editare a modulelor

Scrierea codului din punct de vedere sintactic, se poate face cu caractere minuscule sau majuscule. Atât cuvintele cheie cât şi cele utilizator sunt automat transcrise în forma în care au fost declarate, dacă sunt scrise corect. Editorul are, de asemenea, facilităţi de colorare a cuvintelor cheie, declaraţiilor şi comentariilor utilizator, frazelor eronate.

Comentariile incluse constituie linii de cod care nu se execută, dar care, facilitează înţelegerea programului. Pentru definirea comentariilor se utilizează un apostrof „ ’ ” la începutul comentariului; în acest fel se pot scrie comentarii şi după o instrucţiune, pe acelaşi rând.

Instrucţiunile se scriu, în general, câte una pe un rând, însă există şi posibilitatea scrierii a mai multor instrucţiuni pe acelaşi rând, separate prin delimitatorul „ : ”.

Dacă o instrucţiune se continuă pe mai multe rânduri, se utilizează, la sfârşitul fiecăruia, liniuţa de subliniere ” _ ”, cu excepţia rândului care o încheie.

Prin intermediul desfăşurătorului de obiecte, sistemul VBA evidenţiază proprietăţile şi metodele posibile pentru un anumit obiect. Afişarea este contextuală, adică are loc în momentul scrierii în VBA a elementelor care caracterizează un anumit context.

Proprietăţile descriu un obiect prin caracteristici cum ar fi: dimensiunea, culoarea, poziţia pe ecran şi se stabilesc, de regulă, în faza de proiectare, adică în momentul în care se proiectează sau se modifică formele.

Proprietăţile stabilite în faza de proiectare devin operaţionale la prima lansare în execuţie a aplicaţiei şi rămân valabile până la încheierea execuţiei aplicaţiei sau până la modificarea lor prin program.

Metodele reprezintă procedurile sau funcţiile care se execută pentru a informa un obiect despre acţiunile pe care le va efectua. Dacă proprietăţile sunt date, metodele sunt cod. Spre deosebire de proprietăţi, metodele pot fi executate numai în momentul rulării programului, sau în timpul unei sesiuni de depanare a programului.

Pe lângă proprietăţi şi metode, fiecare tip de obiect are prestabilit un număr de evenimente posibile, dar cel puţin unul.

Evenimentele se produc ca urmare a unei acţiuni utilizatorului ori a execuţiei unui program sau pot fi declanşate de calculator. Utilizatorul poate efectua acţiuni ca: click sau dublu click de mouse, acţionarea unei taste, etc. În mod automat un eveniment poate fi declanşat de o procedură inclusă în program. Pe de altă parte, evenimentele declanşează procedurile. O astfel de programare este denumită „event–driven”, adică „dirijată prin evenimente”.

ELEMENTELE LIMBAJULUI VBA

Tipuri de date

VBA este unul din limbajele de programare care impune, înainte de a manipula datele, să specificăm natura acestora.

Există trei mari categorii de date: numerice, şir de caractere şi speciale. Încadrarea unei date într–una din categorii este absolut necesară pentru a efectua calcule sau alte prelucrări. De asemenea, VBA acceptă şi o clasificare a datelor din punct de vedere al utilizatorului, şi anume: date standard (predefinite) şi date utilizator.

În tabelul următor se prezintă tipurile de date utilizate de Visual Basic. Tip dedate

Caracteristici

Double Număr memorat pe 64 biţi, virgulă mobilă, dublă precizie. Valori posibile: de la – 1,797*10308 până la + 1,797*10308.

Single Număr memorat pe 32 biţi, virgulă mobilă, simplă precizie. Valori posibile: de la –3,4*1038 până la + 3,4*1038.

Currency Număr memorat pe 64 biţi. Sunt memorate 15 caractere la stânga virgulei şi 4 caractere la dreapta virgulei. Valori posibile: –922337203685477,5808 până la 922337203685477,5807.

Byte Număr întreg pe 8 biţi. Valori posibile: 0–255.Integer Număr întreg pe 16 biţi. Valori posibile: –32768

până la 32767.Long Număr întreg pe 32 biţi. Valori posibile:

–2147483648 până la 2147483647.Boolean Poate conţine valoarea logică True (–1) sau False

(0).Date Poate conţine date calendaristice şi timp. Se

utilizează între #.String Şir de caractere. Poate conţine maximum 2 la

puterea 31 de caractere. Se utilizează între “”.Variant Tip de date generic. O asemenea variabilă se poate

utiliza pentru orice tip de date. Practic, toate variabilele utilizate pot fi declarate de tip Variant.

Este recomandat totuşi ca să specificaţi tipul variabilei în momentul declarării pentru a nu fi create confuzii.

Object Tip de date care referă un obiect. Pentru a asocia un obiect propriu–zis unei asemenea variabile trebuie să se utilizeze şi instrucţiunea Set.

Variabile şi constante

Variabile

O variabilă reprezintă numele unei porţiuni din memoria calculatorului în care sse stochează temporar datele. O variabilă poate conţine o singură valoare la un moment dat dar care poate fi modificată la acţiunea utilizatorului sau prin program.

O variabilă are un nume şi conţine un anumit tip de date pentru a o identifica la un moment dat în memorie. Numele unei variabile poate avea maxim 256 caractere şi trebuie să înceapă cu un caracter alfanumeric.

Declararea variabilelor

Într–un program, pentru a putea utiliza o variabilă, aceasta trebuie declarată, specificând numele şi tipul de date pe care îl va conţine. Există două moduri de a declara variabilele: implicită şi explicită.

Declararea implicită se face prin adăugarea unui caracter specific la sfârşitul numelui variabilei. Sufixurile utilizate sunt reprezentate în tabelul de mai jos

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

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

impune variabilei Nr_marcă tipul de dată Double.

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

Formatul instrucţiunii este:Dim <NumeVariabilă> As <TipDată>

<NumeVariabilă> este definit de către utilizator;<TipDată> este specificat explicit, (nu se pot defini două variabile cu acelaşi nume într–o

procedură).

Exemplu:

Dim Nr_marcă As IntegerDim Prenume Dim Nume As String 20Dim Adresă As String

unde:

prima linie defineşte o variabilă de tip integer;a doua linie defineşte o variabilă de tip variant;a treia linie defineşte o variabilă de tip şir de caracter ce conţine maxim 20 de caractere;a patra linie defineşte o variabilă şir de caracter cu lungimea cuprinsă între 0 şi 65535 de

caractere.

Domeniul unei variabile.Variabile locale şi globale

Locul în care este plasată instrucţiunea de declarare a variabilei este important pentru că specifică modul în care se va lucra cu variabilele într–o aplicaţie.

Modul în care se va lucra cu o variabilă în cadrul unui program, sau durata ei de viaţă, sau sau

Sufix Tip dată Exemplu$ Long 547 $! Single 547 !# Double 547 #@ Currency 547 @

zonele din program în care variabila este vizibilă este cunosccut sub numele de domeniul variabilei. Locul în care este declarată o variabilă determină domeniul acesteia. VBA este unul din limbajele care respectă reguliile domeniului de valabilitate. Domeniul de valabilitate al unei variabile VBA este determinat de două elemente: locul în care declarăm variabila în cadrul procedurii şi de instrucţiunile folosite pentru declarare.

Sintaxa generală de declararea a unei variabile este următoarea:Dim! Private! Public! Global! nume vb1as tip_date, nume vb2 as tip_date,…….

Unde:

nume vbi este numele atribuit variabilei i;as tip_date este unul din tipurile de date definite de utilizator.Există trei locuri diferite în care pot fi declarate variabilele:nivel procedură sau funcţie;nivel formă; nivel modul.Dacă Dim este plasată la începutul unei proceduri (după declaraţia Subnume_procedură),

atunci variabila declarată va cunoscută şi va putea fi utilizată doar în procedura respectivă, fiind o variabilă locală. Dacă dorim ca variabilele să fie vizibile în toate procedurile dintr–un modul, vom plasa instrucţiunea Dim în secţiunea generală a modulului

Folosirea instrucţiunii Private în secţiunea General a modulului determină vizibilitatea variabilei în toate procedurile din modulul respective, nu şi din alte module sau form–uri. Nu se poate folosi declaraţia Private într–o procedură delimitată prin Sub…End Sub.

O variabilă declarată Public sau Global la începutul unui modul este vizibilă din toate modulele bazei de date. O astfel de variabilă se numeşte variabilă globală. Nici aceste declaraţii nu pot fi folosite în proceduri delimitate prin Sub….End Sub.

Convenţii de denumire a variabilelor

Ca şi la numele de controale şi pentru variabile se utilizează un prefix de 3 litere, care să indice clar tipul de dată.

În tabelul.9 sunt prezentate prefixe utilizate pentru numele variabileiTabelul.9

Exemple:

Dim lngDistanţă As Long

Dim objVedere As Object

Dim intLungime As Integer

Dim sngPret As Single

Dim strNume As String.

La declararea variabilelor de tip şir de caractere se poate ţine seama şi de lungimea acestora, ştiind că ea poate varia între 0 şi 65400 de caractere. Variabila strNume poate avea valoarea „Ilie” dar şi „Constantinescu”. Există situaţii în care dorim să limităm lungimea textului (să spunem că trebuie afişat într–o etichetă de lungime fixă), scop în care se utilizează opţiunea * astfel:

Dim strNume As String * 18Indicând că variabila strNume poate avea o lungime între 0 şi 18 caractere.Pentru a declara mai multe variabile de acelaşi tip se poate utiliza o singură instrucţiune Dim.

Astfel, în loc de:Dim X As StringDim Y As StringDim Y As String

Se poate scrie:Dim X As String, Y As String, Y As String

Dacă se declară mai multe variabile printr–o singură instrucţiune Dim, ele pot fi şi de tipuri diferite:

Dim Z As String, Y As Long

Constante

Constantele sunt nume semnificative care ţin locul locul unor nume sau şiruri de caractere şi care nu–şi pot modifica valoarae pe parcursul unui program. Constantele se grupează în două categorii:

constante intrinseci sau definite de sistem care sunt furnizate de aplicaţii sau controale;constante simbolice sau definite de utilizator.VBA interpretează şi atribuie automat tipurile de date pentru constantele numerice scrise de

utilizator, dar dacă dorim ca o constantă să aibă un anumit tip de dată, trebuie, ca şi variabilele, să utilizăm un sufix la scrierea constantei.

Constantele simbolice se pot declara explicit cu instrucţiunea Const care are următoarea sintaxă:Public! Private! Const nume constantă As tip_dată = expresie

Exemplu:

Const Angajat = “Manea Ion”Const Data_angaj = # 1/1 / 2002 #

Const Studii_super = “ “Constantele de tip String se scriu între ghilimele “Manea Ion”, “ 547“Constantele de tip Date se scriu între două caractere # (diez).Când între ghilimele nu este specificat nici un caracter avem un şir nul.Domeniul de vizibilitate, atât al constantelor, cât şi al variabilelor, în funcţie de modul de

declarare Privat sau Public, este prezentat sintetic în tabelul.10

Tabelul.10

Operatori Pentru construirea diverselor expresii (matematice, logice, de comparare) tematice cu datele

Prefix Tip datăbln Booleanbyt Bytecur Currencydte Datedbl Doubleint Integerlng Longobj Objectsng Singlestr String

vnt sau var Variant

Locul de declarare

Modul de declarare Privat Modul de declarare Public

La nivelul procedurii

Constantele sunt vizibile doar în cadrul procedurii în care apar

Nu se pot declara constante publice în cadrul unei proceduri

La nivelul modului

Variabilele sunt vizibile în cadrul modului în care apar

Variabilele sunt vizibile pentru toate modulele.

conţinute de program se utilizează operatorii.Operatorii acceptaţi de VBA sunt de trei categorii: matemetici, de comparare, logici.operatori matematici :+ adunare– scădere* înmulţire / impărţire returnează partea întreagăMOD împărţire (returnează numai restul)^ exponent operatori de comparare:< mai mic<= mai mic sau egal> mai mare>= mai mare sau egal= egal<> diferitoperatori logici:o AND şi o OR sauo NOT negaţieo XOR pentru sau exclusiv

operatori pentru concatenerea şirurilor : &, +alţi operatori:o IN pentru regăsirea de valori în cadrul unei liste;o LIKE pentru comparare cu caractere de înlocuire;o BETWEEN pentru regăsirea de valori în cadrul gamei;o EQV pentru echivalarea logică a două expresii;o IMP pentru implicarea logică a două expresii.

2.3.4 Proceduri/funcţiiProcedurile reprezintă secvenţe de instrucţiuni care realizează o prelucrare bine definită din punct

de vedere funcţional. Procedurile sunt subprograme, la care un alt program face referire prin numele lor.Procedurile care nu returnează nici o valoare sunt numite subrutine şi au sintaxa:[Static] [Private] Sub nume_procedură[(listă argumente)]

[ <instrucţiuni>End Sub

unde:

Static – variabilele locale sunt memorate între două execuţii;Private – procedura este accesibilă numai din interiorul modulului;Listă argumente – reprezintă variabilele ce sunt transmise în momentul apelării procedurii;Exit Sub – forţează ieşirea din procedură.Apelul unei proceduri se face astfel:

Call nume_procedură ([lista argumente])sau

nume_procedură ([listă argumente])Procedurile care întotdeauna returnează o valoare se numesc funcţii şi au următoarea sintaxă:

[Static] [Private] Function nume_procedură [(listă argumente)] [As Tip_data]<instrucţiuni>

[ExitFunction]<instructiuni>

End Function

unde:

As Tip _data tipul rezultatului returnat de către funcţie.Apelul unei funcţii se poate face astfel:

Variabila=nume_funcţie[(valoare_param_1, valoare_param_2,……….)]

Variabila preia rezultatul returnat de funcţie.

Funcţii

O funcţie reprezintă o secvenţă de instrucţiuni VBA care realizează o prelucrare bine definită din punct de vedere funcţional şi care returnează o valoare.

Deoarece funcţia returnează o valoare se poate considera că ea este egală cu valoarea pe care o returnează şi, ca urmare, poate fi utilazată în expresii mai complicate.

Atât funcţiile cât şi procedurile constau din linii de cod bine definite de utilizator sau generate de VBA. Deosebirea dintre o funcţie şi o procedură este că funcţia returnează o valoare pe când procedura nu.

Sintaxa generală a unei funcţii este:

Rezultat = nume_funcţie (listă argumente)

Între paranteze se scriu argumentele funcţiei, separate prin virgulă. Prezenţa parantezelor şi a semnului egal sunt semnele care diferenţiază funcţia de procedură.

VBA fiind un mediu integrat de dezvoltare include două categorii de funcţii:integrate (standard);definite de utillizator.

Funcţiile integrate (standard)

VBA conţine un număr mare de funcţii integrate care pot fi utilizate pentru executarea unor operaţii, pentru care altfel ar trebui scrise secvenţe de cod. Diversitatea problemelor pe care le soluţionează, a determinat gruparea funcţiilor pe categorii.

Funcţii pentru preluarea şi afişarea datelor

Funcţiile încorporate ale programului, InputBox() şi MsgBox() permit efectuarea unor operaţii simple de intrare/ieşire (I/O) prin utilizarea unor casete de dialog predefinite pe care le putem adapta utilizând o gamă de pictograme şi combinaţii de butoane de răspuns.

Funcţia InputBox() afişează o invitaţie într–o casetă de dialog, aşteaptă ca utilizatorul să introducă text sau să selecteze un buton, apoi returnează conţinutul casetei de text. Valoarea introdusă de către funcţie este de tip Variant, fie de tip String, în funcţie de varianta utilizată.

Sintaxa funcţiei este:

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

Singurul argument obligatoriu este primul mesaj. Acesta va fi o expresie de tip şir de caractere (String) care invită utilizatorul să introducă ceva şi va fi afişat lângă caseta de text în care va scrie utilizatorul.

Al doilea argument, titlu, este un şir de caractere afişat în bara de titlu a casetei de dialog. Dacă se omite, în bara de titlu nu se va afişa nimic.

[<x>], [<y>] reprezintă expresii numerice care specifică distanţa pe orizontală, respectiv pe verticală, a colţului din stânga sus al casetei de dialog faţă de colţul din stânga sus al ecranului. Dacă se omite argumentul [<x>], trebuie să se omită şi argumentul [<y>]. Dacă ambele argumente se omit, caseta de dialog va fi centrată pe orizotală, la aproximativ o treime din înălţimea ecranului faţă de partea superioară.

Sintetizaţi sunt prezentaţi parametrii înstrucţiunii InputBox în tabelul.11Tabelul.11

Funcţia MsgBox() afişează un mesaj într–o casetă de dialog şi aşteaptă ca utilizatorul să selecteze un buton. Funcţia MsgBox() returnează o valoare întreagă care indică butonul selectat de utilizator.Sintaxa funcţiei este:

MsgBox (<mesaj>, [<butoane>], [<titlu>,

[<fisier_help>, <context>])Mesaj este o expresie şir afişată ca mesaj în caseta de dialog.Al doilea argument, titlu, este o expresie şir care apare în bara de titlu a casetei de dialog.Sintetizaţi sunt prezentaţi parametrii înstrucţiunii MsgBox în tabelul.12

Tabelul.12

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

Constantă Valoare ExplicaţievbOKOnly 0 Afişează numai un buton OKvbOKCancel 1 Afişează un buton OK şi un

buton CancelvbAbortRetryIgnore 2 Afişează un buton Abort

(Abandon în caz de eroare), Retry (Forţează în caz eroare), Ignore (Ignoră eroarea).

vbYesNoCancel 3 Afişează un buton Yes, un buton No, un buton Cancel

vbYesNo 4 Afişează un buton Yes, un buton No.

vbRetryCancel 5 Afişează un buton Retry, un buton Cancel

vbCritical 16 Afişează o pictograma CriticalvbQuestion 32 Afişează un semn de întrebarevbExclamation 48 Afişează un semn al exclamăriivbInformation 64 Afişează pictograma Information

Constantele ce pot fi returnate de instrucţiunea MsgBox sunt prezentate în tabelul.14Tabelul.14

Funcţii numericeCuprind funcţii matematice şi trigonometrice, având ca argumente şi ca rezultate valori numerice.

Câteva funcţii reprezentative sunt cuprinse în tabelul.15. Sunt utilizate în calcule matematice şi inginereşti.

Tabelul.15Funcţie DescriereAbs (<expresie_numerică>)

Returnează valoarea absolută a unei expresii numerice, sau a unui număr.

Exp (<expresie_numerică>)

Returnează valoarea constantei e ridicată la o putere (expresie numerică sau număr).

Parametru Descriere<mesaj> Şir de cractere afişat în fereastra InputBox. Pot fi

maximum 1024 de caractere. Dacă se doreşte afişarea unui mesaj pe mai multe rânduri trebuie intercalat caracterul <ENTER> adică CHR (13) la sfârşitul rândului.

<titlu> Titlul ferestei afişate (şir de caractere)<val_implicită> Valoarea implicită afişată de fereastra InputBox

pentru introducere (şir de caractere).<x> Poziţia feresteri InputBox faţă de marginea din

stânga a eranului (expresie numerică).<y> Poziţia feresteri InputBox faţă de marginea de

sus a eranului (expresie numerică).<fişier_help> Fişierul Help utilizat în cazul în care se foloseşte

help senzitiv la context (şir de caractere).<context> Numărul care exprimă locul din fişierul Help

care va fi apelat.

Parametru Descriere<mesaj> Şir de cractere afişat în fereastra MsgBox. Pot fi

maximum 1024 de caractere. Dacă se doreşte afişarea unui mesaj pe mai multe rânduri trebuie intercalat caracterul <ENTER> adică CHR (13) la sfârşitul rândului.

<titlu> Titlul ferestei afişate (şir de caractere)<butoane> Butoanele şi pictogramele afişate în fereastra

MsgBox (expresie numerică).<fişier_help> Fişierul Help utilizat în cazul în care se foloseşte

help senzitiv la context (şir de caractere).<context> Numărul care exprimă locul din fişierul Help care

va fi apelat.

Constantă Valoare ExplicaţievbOK 1 Butonul OK selectatvbCancel 2 Butonul Cancel selectatvbAbort 3 Butonul Abort selectatvbRetry 4 Butonul Retry selectatvbIgnore 5 Butonul Ignore selectatvbYes 6 Butonul Yes selectatvbNo 7 Butonul No selectat

Int (<expresie_numerică>)

Returnează partea întreagă dintr–un număr sau dintr–o expresie numerică.Returnează primul număr negativ îmntreg mai mic sau egal decât numărul specificat (sau numărul rezultat în urma evaluării numerice)

Fix (<expresie_numerică>)

Returnează partea întreagă dintr–un număr sau dintr–o expresie numerică.Returnează primul număr negativ întreg mai mare sau egal decât numărul specificat (sau numărul rezultat în urma evaluării expresiei numerice)

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

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

Funcţii diverse (Tabelul.19)Tabelul.19

Funcţii definite de utillizator

Sintaxa:

Private Public] Function nume_functie [([ByRef│ByVal] param_1 as tip_date, …)] [as tip_date]

[instrucţiuni][nume_funcţie=expresie]….[Exit Function][instrucţiuni][nume_funcţie=expresie]

Funcţii pentru şiruri de caractere (Tabelul.16)

Tabelul.16Funcţie DescriereChr (<cod_caracter>) Returnează caracterul corespunzător

codului specificat.Len (<şir_cractere/variabilă>) Returnează numărul de caractere al

şirului de caractere specificat sau numărul de octeţi necesari pentru a stoca conţinutul unei variabile.

Space (număr) Returnează numărul de spaţii specificate

Str (expresie_numerică) Converteşte rezultatul evaluării expresiei numerice dintre paranteze într–un şir de caractere

Val (şir_caractere) Returnează rezultatul evaluării şirului de caractee specificat, într–un număr

Mid (şir_caractere, poziţie_start, lungimea)

Extrage un şir de caractere dintr–un alt şir de caractere.– şir_caractere – şirul de caractere din care se extrage;– poziţie_start poziţia din şirul de caractere, de unde începe extragerea;– lungimea – numărul de caractere care se extrage.

Funcţii DescriereDate () Returnează data sistemuluiDay (<data_calendaristică>) Returnează numărul zilei din lună

(1–31).Month (<data_calendaristică>) Returnează numărul lunii din an (1–

12).Year (<data_calendaristică>) Returnează anul.Hour (<expresie_timp>) Returnează numărul orei din zi (0–

23)Minute (<expresie_timp>) Returnează numărul minutului dintr–

o oră (0–59).Second (<expresie_timp>) Returnează numărul unei secunde

dintr–un minut (0–59).

Funcţii DescriereCbool (<expresie>) BooleanCbyte (<expresie>) ByteCcur (<expresie>) CurrencyCdate (<expresie>) DateCDbl (<expresie>) DoubleCdec (<expresie>) DecimalCINt (<expresie>) IntegerCLng (<expresie>) LongCSng (<expresie>) SingleCStr (<expresie>) StringCvar (<expresie>) Variant

Funcţii DiscriereIsNull (<expresie>) Returnează valoarea adevărat

(TRUE) dacă expresia dintre paranteze conţine valoarea NULL (date invalide)

IsError (<expresie>) Returnează valoarea adevărat (TRUE) dacă expresia dintre paranteze conţine o eroare.

IsEmpty (<expresie>) Returnează valoarea adevărat (TRUE) dacă expresia dintre paranteze nu conţine o valoare. NULL este considerat valoare.

IsDate (<expresie>) Returnează valoarea adevărat (TRUE) dacă expresia dintre paranteze este compatibilă cu o dată calendaristică.

IsNumeric (<expresie>) Returnează valoarea adevărat (TRUE) dacă expresia dintre paranteze poate fi evaluat ca număr.

IsObject (<identificator>) Returnează valoarea adevărat (TRUE) dacă identificatorul dintre paranteze este de tip obiect.

End Function

Unde:

Exit Function – permite ieşirea forţată dintr–o funcţie;nume_funcţie = expresie, permite asocierea unui rezultat numelui funcţiei. Acest rezultat va fi

returnat în momentul terminării execuţiei funcţiei.

Apelul unei funcţii se poate face astfel:

Variabila = nume_funcţie [(valoare_param_1, valoare_param_2, …)]

Variabila preia rezultatul de funcţie.

Structuri de control fundamentale în VBAProgramele VBA sunt programe a căror evoluţie se modifică în mod prestabilit, previzibil,

controlat. Aceste facilităţi sunt posibile datorită structurilor de control care precizează ordinea în care se vor executa instrucţiunile. Un progam structurat (concept introdus în anii ’70) se bazează pe următoarele structuri de control: secvenţială, alternativă, repetitivă.

Structuri secvenţiale

În această structură, operaţiile sunt executate cosecutiv, în ordinea în care sunt indicate în schemă, ordine în care vor fi stocate în memorie instrucţiunile maşină rezultate în urma compilării. Sunt foarte rare cazurile când un întreg program este conceput utilizând numai o structură secvenţială.

Structuri alternative

Aceste structuri,numite şi condiţionate, sunt de două categorii: de selecţie şi de decizie. şi se caracterizează prin executarea unui set de instrucţiuni sau a altuia, în funcţie de îndeplinirea sau neîndeplinirea unei condiţii.

Structurile alternative permit astfel ramificarea ordinii de execuţie a instrucţiunilor unui program.

Instrucţiune 1

Instrucţiune 2

Instrucţiune n

Structuri repetitive

În cadrul structurilor repetitive (sau iterative), un set de instrucţiuni se repetă în funcţie de o condiţie specificată

Structurile repetitive pot fi:condiţionate anterior – caracterizate prin executarea repetată a setului de instrucţiuni cît timp

condiţia testată este adevărată;condiţionate posterior caracterizate prin executarea setului de instrucţiuni cât timp o condiţie este

falsă;condiţionate anterior sau posterior, cu contor. Cu această structură se execută setul de instrucţiuni

de un număr de ori, plecându–se de la valoarea iniţială a variabilei contor până la valoarea finală a acesteia, incrementându–se automat variabila contor cu +1

Instrucţiune 1

Condiţie

Instrucţiune 2 Instrucţiune 3

Fals Adevărat

Instrucţiune 1

Condiţie

Instrucţiune 2Fals

Adevărat

Instrucţiuni VBA pentru programarea structurilor

Instrucţiuni pentru implementarea structurii alternativeInstrucţiunile VBA utilizate în reprezentarea acestor structuri sunt : If pentru structurile

alternative de selecţie şi Select Case pentru structurile alternative de decizie.Instrucţiunea IfEste utilizată sub următoarele formate :

A. If <condiţie>Then

[secvenţă_instrucţiuni_1][Else

[secvenţă_instrucţiuni_2]]End If

Unde:

Condiţie poate fi o expresie numerică sau o expresie şir de caractere, care poate fi evaluată la adevărat (true) sau fals (False).

Dacă rezultatul evaluării expresiei din condiţie este adevărat, atunci este executată secvenţă_instrucţiuni_1, astfel este executată secvenţă_instrucţiuni_2.

Exemplu:

Dacă media este egală cu 5 atunci studentul este considerat integralist, în caz contrar este restanţier.

If Media = 5 ThenMsgBox „Student integralist”

ElseMsgBox „Student restanţier”

End If

B.If <condiţie_1>Then

[secvenţă_instrucţiuni_1][Else lf<condiţie_2> Then

[secvenţă_instrucţiuni_2]]……

[Else[secvenţă_instrucţiuni_n]]

End If

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

Exemplu:

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

If suma_de_încasat<100000000 ThenMsgBox „Prima=suma_de_încasat * 5%

Elself suma_de_încasat >=100000000 ThenMsgBox „Prima=suma_de_incasat * 10%

Else pentru suma_de_încasat> 200000000 ThenMsgBox „Prima=suma_de_încasat * 15%

End If

C.If<condiţie> Then <instrucţiune_1> [Else <instrucţiune_2 >]

În această variantă, după evaluarea condiţiei, se poate executa o singură instrucţiune şi trebuie scrisă pe un singur rând.

Exemplu:

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

Instrucţiunea Select CaseÎn cazul în care o expresie trebuie comparată cu un număr mai mare de valori, nu este

recomandată folosirea repetată a instrucţiunii If…Then…Else, ci este performantă folosirea instrucţiunii Select Case.

Formatul instrucţiunii este:

Select Case <expresie_selector>[Case <listă_expresii_case_1>[secvenţă_instrucţiuni_1]][Case <listă_expresii_case_1>[secvenţă_instrucţiuni_2]][Case <listă_expresii_case_1>[secvenţă_instrucţiuni_3]]…….

[Case Elsesecvenţă_instrucţiuni_n]End Select

Unde:

expreresie_selector poate fi o expresie numerică sau o expresie şir de caractere.Expresiile Case pot fi o listă de expresii numerice sau o expresie şir de caractere separate de “,

“(virgulă). De asemenea pot conţine operatorii To şi Is cu următorul format:<expresie_1> To <expresie_2>

Se tastează dacă valoarea expresiei_selector se află cuprins în intervalul de valori cuprins între expresie_1 şi expresie_2

Is <operator de comparare> <expresie>Se tastează dacă valoarea expresiei_selector satisface condiţia impusă de operatorul de comparare.

Exemplu:

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

Select Case PenalităţiCase 0

MsgBox „Penalităţi=0”Case 1 To 5

MsgBox „Penalităţi= val_fact*0,01”Case 6 To 10

MsgBox „Penalităţi=val_fact*0,05”Case 11 To 15

MsgBox „Penalităţi=val_fact*0,1”Case Else

MsgBox „Penalităţi=val_fact*0,5”End Select

Instrucţiuni pentru implementarea structurii repetitive

Pentru reprezentarea acestei structuri se folosesc un număr de patru instrucţiuni:While………WendDo…………...LoopFor………….NextFor Each…..NextInstrucţiunea While………Wend

Este o structură repetitivă condiţionată anterior.Formatul instrucţiunii este:

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

Wend

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

Exemplu:

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

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

Instrucţiunea Do………LoopFormatul instrucţiunii este:

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

[Exit Do][secvenţă_instrucţiuni]

Loop

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

Do[secvenţă_instrucţiuni]

[Exit Do][secvenţă_instrucţiuni]

Loop [{While│Until} <condiţie>]

Exemplu:

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

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

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

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

instrucţiunea Loop într–un moment anume ales de programator.

Instrucţiunea For………….NextCodifică structura repetitivă cu un număr definit de paşi, în care o secvenţă de cod se repetă cu un

număr specificat de ori.Formatul instrucţiunii este:

For <vb_contor>=<val_initiala> To <val_finala> [Step <Val_pas>][secvenţă_instrucţiuni][Exit For]

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

<val_initiala>,<val_finala> – reprezintă valoarea iniţială, respectiv finală pentru <vb_contor>;<Val_pas> – reprezintă valoarea pasului de incrementare/decrementare pentru variabila contor,

implicit are valoarea + 1;<val_initiala>,<val_finala>,<Val_pas> – pot fi rezultatul evaluării unor expresii.

Exemplu:

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

Instrucţiunea For Each…..NextParcurge iterativ o colecţie de elemente, la fiecare iteraţie variabilei element I se atribuie un

element din colecţie. Se foloseşte la parcurgerea colecţiilor de obiecte Access.Formatul instrucţiunii este:

For Each <vb_element> In <colectie> [secvenţă_instrucţiuni][Exit For][secvenţă_instrucţiuni]

Next [<vb_element>]

CAP.V PROGRAMAREA DIRIJATĂ DE EVENIMENTE

Putem discuta de programare dirijată de evenimente în Access în contextul formularelor, rapoartelor şi controalelor de pe un formular/raport sau secţiunile acestora.

Evenimentele în Access pot fi:Deschiderea unui formular/raport;Închiderea unui formular/raport;Scrierea unei înregistrări într–o tabelă;Dublu clic pe mouse;Activarea unui buton de comandă.Tuturor evenimentelor din Access li se pot ataşa proceduri, macro–uri, expresii. Macro–

urile au început să cedeze locul VBA–ului, majoritatea programatorilor preferând VBA–ul.Se vor prezenta evenimentele cel mai des folosite de programatori în cadrul

formularelor/rapoartelor şi controalelor de pe acestea.Lista cu evenimente ce sepot trata în cadrul formularelor/rapoartelor şi controalelor se

poate obţine din fereastra cu proprietăţi, secţiunea Event Pentru a ataşa o procedură unui eveniment se activează [Event Procedure] după care se

activează caseta care va prezenta fereastra Choose Builder. Pentru a ataşa o funcţie se alege Expression Builder Procedurile ataşate evenimentelor formularelor /rapoartelor sunt memorate în module

care sunt ataşate formularelor/raportelor. Acestea nu sunt vizibile în secţiunea Module a bazei de date. Fiecare formular/raport are ataşat un singur modul. Toate obiectele de pe formular/raport sunt vizibile în modulul ataşat acestuia, din toate procedurile.

Se prezintă în continuare cele mai importante evenimente ale formularului:

Evenimentul OnOpen se produce la deschiderea formularului, înainte ca o înregistrare din tabela sau interogarea ataşată formularului să fie afişată pe ecran.

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

Private Sub Form_Open (Cancel As Integer)

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

Evenimentul OnClose se produce la închiderea şi ştergerea de pe ecran a formularului. Acest eveniment nu se poate abandona.

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

Private Sub Form_Close()

Evenimentul OnLoad se produce la deschiderea formularului, în momentul în care o înregistrare din tabela sau interogarea ataşată formularului este afişată pe ecran. Acest eveniment nu se poate abandona.

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

Private Sub Form_Load()

Evenimentul OnUnload se produce la închiderea formularului, dar înainte de ştergerea sa de pe ecran. Acest eveniment nu se poate abandona.

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

Private Sub Form_Unload(Cancel As Integer)

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

Observaţie:

Ordinea de declanşare a evenimentelor la deschiderea unui formular este: OnOpen

OnLoad.Ordinea de declanşare la închiderea unui formular este: OnUnload OnClose.

Evenimentul OnActivate se declanşează atunci când un formular devine fereastră activă pe ecran. Ordinea evenimentelor la deschiderea formularului este: OnOpen OnLoad

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

Private Sub Form_Activate ()

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

OnUnload OnDeactivate OnClose.

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

Private Sub Form_Deactivate ()

Evenimentul OnResize se declanşează ori de câte ori se încearcă redimensionarea unui formular, înclusiv la deschiderea acestuia, atunci când este construită fereastra formularului. Acest eveniment

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

Private Sub Form_Resize ()

Evenimentul OnCurrent se declanşează atunci când o înregistrare din tabela sau interogarea ataşată formularului devine înregistrare curentă. Acest eveniment nu se poate abandona.

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

Private Sub Form_Current()

Evenimentul BeforeInsert se declanşează exact înaintea momentului în care se încearcă inserarea (crearea) unei înregistrări noi, pe formularul curent.

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

Private Sub Form_ BeforeInsert (Cancel As Integer)

Evenimentul AfterInsert se declanşează exact după momentului în care se încearcă inserarea (crearea) unei înregistrări noi, pe formularul curent. Acest eveniment nu se poate abandona.

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

Private Sub Form_ AfterInsert () Evenimentul BeforeUpdate se declanşează exact înaintea momentului salvării unei înregistrări

noi, pe formularul curent.Procedura ataşată evenimentului BeforeUpdate are următorul antet:

Private Sub Form_BeforeUpdate (Cancel As Integer)

Evenimentul AfterUpdate se declanşează după momentului în care se încearcă salvarea unei înregistrări, pe formularul curent. Acest eveniment nu se poate abandona.

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

Private Sub Form_ AfterUpdate ()

Observaţie:

Ordinea acestor evenimente este:BeforeInsert BeforeUpdate AfterUpdate AfterInsert

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

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

Private Sub Form_Delete (Cancel As Integer) Evenimentul OnTimer se declanşează la un interval exprimat în milisecunde, în proprietatea

Timer Interval din aceeaşi secţiune cu evenimentele. Acest eveniment nu se poate abandona.Procedura ataşată evenimentului OnTimer are următorul antet:

Private Sub Form_Timer()

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

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

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

Unde:

DataErr – parametru care indică codul erorii returnat de obiectul Access Err.Response – parametru prin care se poate stabili dacă se afişează mesajul de eroare Access.

Aceasta poate lua ca valoare două constante

Evenimente ataşate rapoartelor

Evenimentul OnNoData se declanşează la crearea raportului, dacă acesta nu conţine nici o înregistrare.

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

Private Sub Report_NoData (Cancel As Integer)

Parametrul Cancel se utilizează pentru a abandona crearea raportului şi afişarea/imprimarea sa. Pentru aceasta trebuie setat Cancel=True.

Evenimentul OnFormat se produce înainte de formatarea pentru afişare sau tipărire a unei secţiuni dintr–un raport.

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

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

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

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

Evenimentul OnPrint se produce înainte de formatarea pentru tipărire a unei secţiuni dintr–un raport.

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

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

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

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

Evenimente ataşate controalelor

Controalele din formulare/rapoarte Access au şi ele evenimente specifice care pot fi tratate. O

Constantă ExplicaţieacDataErrContinue Se ignoră eroarea, având posibilitatea afişării unui mesaj de eroare al utilizatorului

în locul celui generat de Access.acDataErrDisplay Se afişează mesajul de eroare generat de Access.

parte din evenimente sunt întâlnite la toate controalele standard din Access, iar altele sunt specifice numai anumitor controale.

Se vor prezenta lista evenimentelor cele mai uzuale controale:Lista evenimentelor controlului TextBox

Lista evenimentelor controlului Buton de comandă

Lista evenimentelor controlului Combo Box

Lista evenimentelor controlului List Box

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

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

Private Sub NumeControl_Enter()

Evenimentul OnExit se declanşează înainte ca un control să fie dezactivat.Procedura ataşată evenimentului OnExit are următorul antet:

Private Sub NumeControl_Exit(Cancel As Integer)

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

Evenimentul OnClick se declanşează în momentul în care se activează butonul mouse–ului. Acest eveniment nu se poate abandona.

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

Private Sub NumeControl_Click()

Evenimentul OnDblClick se declanşează în momentul în care se activează de două ori butonul mouse–ului (la dublu clic).

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

Private Sub NumeControl_DblClick(Cancel As Integer)

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

Observaţie:

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

Evenimentul OnGotFocus se declanşează în momentul în care un control este activat. Acest eveniment nu se poate abandona.

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

Private Sub NumeControl_GotFocus ()

Evenimentul OnLostFocus se declanşează în momentul în care un control este dezactivat. Acest eveniment nu se poate abandona.

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

Private Sub NumeControl_LostFocus ()

Observaţie:

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

Evenimentul OnMouseDown se declanşează în momentul în care utilizatorul activează un buton al mouse–ului, în controlul unde se tratează acest eveniment.

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

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

Evenimentul OnMouseUp se declanşează în momentul în care utilizatorul lasă liber butonul mouse–ului după ce l–a apăsat, în controlul unde se tratează acest eveniment.

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

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

Evenimentul OnMouseMove se declanşează în momentul în care utilizatorul mută mouse–ul pe deasupra controlului unde se tratează acest eveniment.

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

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

Observaţie:

Button indică butonul acţionat în momentul declanşării unui eveniment prin intermediul unor constante

Constanta DescriereacLeftButton Butonul stâng al mouse–uluiacRightButton Butonul drept al mouse–uluiacMiddleButton Butonul din mijloc al mouse–ului

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

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

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

Evenimentul AfterUpdate se declanşează după momentului în care se încearcă salvarea unei înregistrări.

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

Private Sub NumeControl_AfterUpdate()

Evenimentul OnChange se declanşează atunci când conţinutul unui control casetă de text sau listă derulantă se modifică. Acest eveniment nu se poate abandona.

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

Private Sub NumeControl_Change()

Constanta DescriereacShiftMask Starea tastei SHIFTacCtrlMask Starea tastei CTRLacAltMask Starea tastei ALT

CAP.VI MACRO–URI (MACROS)

PREZENTAREA GENERALĂ A LIMBAJULUI MACRO

Un obiect tip macro este desemnat printr–un nume şi are ca scop automatizarea unor acţiuni asupra unor obiecte ale bazei de date.

Macrourile definesc o serie de comenzi care se execută automat la apariţia unor evenimente.Macrourile pot fi ataşate unui formular sau control, în scopul automatizării unor operaţii diverse

(tipărirea rapoartelor, deschiderea şi închiderea formularelor, lansarea în execuţie a unor programe, executarea unei fraze SQL).

Acţiunile unui obiect macro se aplică obiectelor dintr–o bază de date.Acţiunile pot viza:Deschiderea unui obiect tip tabel, cerere, formular, raport;Filtrarea datelor afişate într–un formular sau tabel;Configurarea imprimării;Automatizarea importului/exportului de date;Căutarea unei înregistrări care răspunde la un anumit criteriu;Definirea meniurilor personalizate.

CREAREA UNUI MACRO

Pentru realizarea unei comenzi trebuie parcurse etapele:din fereastra Database se selectează obiectul Macros şi apoi butonul New şi se deschide

fereastra Macro. Se mai poate da comanda Macro din meniul Insert în coloana Action se selectează din listă acţiunea dorită;în coloana Comment se tastează în dreptul fiecărei acţiuni eventualele explicaţii. Aceste

comentarii sunt opţionale;în grila Action Arguments din partea inferioară se completează argumentele acţiunii selectate.

Conţinutul grilei de argumente se modifică în funcţie de elementul selectat în lista Action, fiecare acţiune are propriile argumente.

Pentru testarea unui obiect macro din meniul Run se dă comanda !Run sau se acţionează prin click pe butonul de comandă Run cu pictograma ! din bara cu instrumente asociate ferestrei de editare macro.

Pentru a modifica conţinutul unui obiect macro se deschide obiectul macro în modul Design View. Modificările pot viza argumentele acţiunilor existente, adăugarea de noi acţiuni, suprimarea unor acţiuni existente sau schimbarea ordinii acestora.

Un ansamblu de acţiuni care împreună automatizează o anume activitate formează o macro–comandă. Un obiect poate stoca una sau mai multe macro–comenzi.

ANALIZA ACŢIUNILOR MACRO

O importanţă deosebită în cazul unei aplicaţii o constituie automatizarea acesteia, adică realizarea mai multor operaţii la o acţiune a utilizatorului. Pentru acest lucru există două posibilităţi:

Crearea de comenzi macro prin simpla alegere a acţiunilor, pentru care realizatorul aplicaţiei nu trebuie să cunoască programare

Realizarea de proceduri în cod Visual Basic, pentru care realizatorul aplicaţiei trebuie să

cunoască programarea acestui limbaj.Comenzile macro pot fi ataşate:Unui eveniment ce apare la un control, formular sau raport;Unei opţiuni din meniu;Unei chei sau unei combinaţii de taste.În mediul Visual Basic este definit obiectul DoCmd pentru a lansa aceleaşi acţiuni Access.

Aceste acţiuni se regăsesc sub formă de metode ale acestui obiect. Acţiunile macro le putem grupa în următoarele categorii:

1. Acţiuni macro pentru manipularea obiectelor de date

OpenForm – se utilizează pentru a deschide un formular în diferite moduri de vizualizare. OpenModule – se foloseşte pentru a deschide modul Visual Basic la o anumită procedură:OpenQuery – se foloseşte pentru a deschide o interogare de selecţie sau de acţiune în diferite

moduri de vizualizare: Design, Print Preview sau Datasheet;OpenReport – se foloseşte pentru a deschide un raport în diferite moduri de vizualizare.OpenTable – se foloseşte pentru a deschide un tabel în diferite moduri de vizualizare.Close – se foloseşte pentru a închide o fereastră. DeleteObject – se foloseşte pentru a şterge un obiect dintr–o bază de date.GoToControl – se foloseşte pentru a focaliza un câmp sau un control specificat din cadrul

înregistrărilor curente dintr–un formular, tabel sau interogare care sunt deschise.ApplyFilter – se foloseşte pentru a apela un filtru, un Query sau o clauză SQL Where pentru a

restrânge sau sorta înregistrările dintr–o tabelă, formular sau raport.Maximize – se foloseşte pentru a maximiza mărimea unei ferestre, fiind similară cu apăsarea

butonului Maximize din colţul dreapta sus al ferestrei Windows. Acţiunea nu are argumente.Minimize – se foloseşte pentru a minimiza fereastra activă la bara de titlu în partea de jos a unei

ferestre Access, fiind similară cu apăsarea butonului Minimize din colţul dreapta sus al ferestrei Windows. Acţiunea nu are argumente.

MoveSize – se foloseşte pentru a muta şi redimensiona fereastra activă.Rename – se foloseşte pentru redenumirea unui obiect din baza de date. Obiectul pentru a putea

fi redenumit trebuie să fie închis.

2. Acţiuni macro pentru navigarea în cadrul înregistrărilor bazei de date

FindNext – se foloseşte pentru a găsi următoarea înregistrare care îndeplineşte condiţia specificată anterior într–o acţiune FindRecord, sau într–o casetă de dialog Find in Field din meniul Edit opţiunea Find.

FindRecord – se foloseşte pentru găsirea primei înregistrări din formularul activ sau tabela şi query active sub forma datasheet care satisfac criteriul specificat în argumentele acţiunii.

3. Acţiuni pentru controlul execuţiei aplicaţiei

Beep – se foloseşte când dorim să însoţim cu un semnal sonor realizarea unei acţiuni.Acţiunea Beep nu prezintă argumente.CancelEvent – se foloseşte pentru a anula un eveniment ce realizează execuţia unui macro ce

conţine această acţiune. Acţiunea CancelEvent nu prezintă argumente.MsgBox – se foloseşte pentru afişarea unui mesaj sau a unei pictograme într–o casetă de masaje,

în funcţie de tipul de masaj afişat ce poate fi de avertisment, de informare sau un mesaj critic.Quit – se foloseşte pentru a ieşi din Microsoft Access şi prezintă câteva opţiuni privind salvarea

obiectelor din baza de date înainte de a se executa ieşirea din Microsoft Access.RunApp – se foloseşte pentru a lansa o aplicaţie Windows sau MS–DOS ca Excel, Word, Power

Point din mediul Accesss. RunCod – se foloseşte pentru a apela o funcţie definită de utilizator în cod Visual Basic din

module Microsoft Access.RunMacro – se foloseşte pentru a lansa în execuţie un macro. Această acţiune se poate realiza

pentru a lansa un macro dintr–un alt macro, a lansa un macro atunci când sunt îndeplinite anumite condiţii definite de utilizator sau pentru a ataşa un macro unei comenzi dintr–un meniu definit de utilizator.

RunSQL – se foloseşte pentru a executa o acţiune de interogare folosindu–se instrucţiuni SQL. SetWarnings – se foloseşte pentru a opri sau nu mesajele sistemului. Se foloseşte pentru a

întâmpina apariţia unor ferestre modale sau casete de mesaj în momentul stopării execuţiei macro–ului.StopMacro – se foloseşte pentru a opri acţiunea unui macro curent ce se află în execuţie.StopAllMacros – se foloseşte pentru a opri mai multe macro–uri curente ce se află în execuţie.

Această acţiune se utilizează atunci când un macro este apelat dintr–un alt macro cu ajutorul acţiunii RunMacro şi se doreşte oprirea ambelor macro–uri.

4. Acţiune pentru crearea şi modificarea intefeţei cu utilizatorul

AddMenu – se foloseşte pentru a crea meniuri personalizate:Meniuri bară pentru formulare şi rapoarte;Meniuri cu acces rapid pentru formulare şi rapoarte;Meniuri bară globale pentru toate ferestrele Microsoft Access;Meniuri globale cu acces rapid pentru toate ferestrele Microsoft Access.ShowToolbar – se foloseşte pentru afişarea sau ascunderea unui toolbars generat de Microsoft

Access, sau construit de utilizator.SetMenuItem – se foloseşte pentru a seta statutul comenzilor dintr–un meniu realizat de

utilizator sau dintr–un meniu global definit de utilizator pentru o fereastră activă.

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

PrintOut – se foloseşte pentru tipărirea unui obiect din baza de date, fiind similară cu alegerea opţiunii Print din meniul File.

TransferDatabase – permite importarea sau exportarea obiectelor bazei de date.TransferSpreadsheed – permite operaţiunea de export sau import date din fişiere create cu

procesoare de tabele precum Microsoft Excel.Send Object – se foloseşte pentru a include obiecte Microsoft Access într–un mesaj electronic

pentru Microsoft Exchange, Microsoft Mail, mesaj care poate fi văzut şi transmis.