Documente Academic
Documente Profesional
Documente Cultură
Marin FOTACHE
Alexandru UGUI
Florin DUMITRIU
CUPRINS
Noiuni de baz privind instrumentele software .......................................................................................................3
1.1. Istoricul limbajelor de programare ................................................................................................................ 4
1.2. Etapele elaborrii programelor de aplicaii i rolul economitilor ................................................................. 8
1.3. Instrumente pentru dezvoltarea aplicaiilor ................................................................................................. 11
1.4. Instrumente software pentru economiti...................................................................................................... 12
1.5. Tendine n instrumente software................................................................................................................ 14
STRUCTURI DE DATE I STRUCTURI DE PRELUCRARE ...........................................................................19
2.1. Aspecte introductive.................................................................................................................................... 20
2.2. Structuri de date .......................................................................................................................................... 20
2.3. STRUCTURI algoritmice DE PRELUCRARE .......................................................................................... 27
Programele de calcul tabelar i utilizarea lor n gestiunea organizaiilor................................................................36
3.1. PROGRAMELE DE CALCUL TABELAR INSTRUMENTE DE SPRIJINIRE A DECIZIILOR ........ 37
3.2. Crearea i gestionarea registrelor de lucru i a foilor de calcul................................................................... 42
3.3. FORMULE I FUNCII N EXCEL ......................................................................................................... 52
3.4. Crearea i formatarea graficelor.................................................................................................................. 61
3.5. LISTE I BAZE DE DATE N EXCEL ..................................................................................................... 66
MODELUL RELAIONAL DE ORGANIZARE A BAZELOR DE DATE ........................................................76
4.1. Cte ceva despre baze de date..................................................................................................................... 77
4.2. PREZENTARE GENERAL a modelului relaional................................................................................. 83
4.3. Restricii ale bazei de date........................................................................................................................... 86
4.4. Schema i coninutul unei baze de date RELAIONALE .......................................................................... 94
SISTEME DE GESTIUNE A BAZELOR DE DATE. ACCESS...........................................................................96
5.1. SGBD ACCESS PREZENTARE GENERAL ...................................................................................... 97
5.2. CREAREA I ACTUALIZAREA BAZELOR DE DATE ACCESS....................................................... 100
5.3. Formulare ACCESS.................................................................................................................................. 111
5.4. Obtinerea de informatii din BAZA DE DATE n ACCESS ..................................................................... 115
5.5. Construirea i utilizarea rapoartelor .......................................................................................................... 119
5.6. Aplicaii, programe, proceduri VBA N ACCESS.................................................................................... 125
Interogarea bazelor de date. Limbajul SQL ..........................................................................................................128
6.1. Prezentare general a limbajului SQL....................................................................................................... 129
6.2. CREAREA TABELELOR I DECLARAREA RESTRICTIILOR.......................................................... 132
6.3. Comenzi de actualizare a tabelelor............................................................................................................ 135
6.4. Structura de baz a frazei SELECT........................................................................................................... 137
6.5. JONCIUNI.............................................................................................................................................. 141
6.6. Funcii-agregat: COUNT, SUM, AVG, MAX, MIN ................................................................................ 143
6.7. Sub-consultri. Operatorul IN ................................................................................................................... 144
6.8. REUNIUNE, INTERSECTIE, DIFERENT........................................................................................... 145
6.9. Gruparea tuplurilor. Clauzele GROUP BY i HAVING........................................................................... 145
BIBLIOGRAFIE...................................................................................................................................................149
Capitolul 1
Obiective:
i.
ii.
iii.
iv.
Rezultate ateptate:
i.
ii.
iii.
iv.
v.
este necesar deoarece un calculator tie s interpreteze i s execute doar programele scrise n cod
main.
Principalele limbaje din aceast categorie sunt: ASSIRIS, ASSEMBLER, MAGIRIS.
Dincolo de avantajele sale, limbajele de asamblare rmn orientate-main, deoarece
comenzile sale corespund instruciunilor n limbaj main, conform tipului de calculator utilizat. O
singur instruciune n limbaj de asamblare corespunde unei singure instruciuni n limbaj main i,
deci, este nevoie de acelai numr de instruciuni pentru scrierea programelor n ambele cazuri. Deci,
n continuare, ele nu pot fi portate de pe un tip de calculator pe altul. Totui, ele sunt nc utilizate
astzi, mai ales de ctre programatorii care dezvolt software de sistem, pentru c ele permit utilizarea
mai eficient a resurselor calculatorului i sunt mai rapide la execuie.
n practica programrii calculatoarelor, limbajele main i cele de asamblare sunt considerate
de nivel redus.
O dat cu lansarea limbajului FORTRAN (1954) s-a trecut la o alt generaie de limbaje,
numite de nivel nalt sau evoluate. Alte limbaje din aceast categorie sunt: COBOL, BASIC, C i
C++, ADA, PROLOG.
Limbajele de nivel nalt au fost dezvoltate pentru a crete productivitatea muncii
programatorilor. Ele sunt mai uor de asimilat i de neles dect un limbaj de asamblare, deoarece
regulile, normele i sintaxa sunt mai suple, ceea ce reduce riscul erorilor. Instruciunile n limbajele
evoluate, numite enunuri, se aseamn mult cu limbajul uman sau cu conveniile de scriere n
matematic. De fapt, fiecare enun constituie o macroinstruciune, adic ea realizeaz operaiuni
specifice mai multor instruciuni n limbajul main. Iat cteva exemple de comenzi ntlnite n
limbajele de nivel nalt: COMPUTE, DISPLAY, SUBSTRACT.
Pentru a fi executat, programul surs, scris ntr-un limbaj de nivel nalt, trebuie convertit n
program obiect, scris n limbaj main. Aceast operaiune poate fi realizat prin intermediul unor
programe speciale, numite interpretoare sau compilatoare. Interpretoarele trateaz programul surs la
nivel de linie de program, fiecare linie fiind executat imediat ce este convertit n cod obiect. n
schimb, compilatoarele realizeaz conversia ntregului program surs n program obiect i dup aceea
el poate fi executat. Datorit manierei diferite de lucru, programele interpretate au o vitez de execuie
mai mic dect cele compilate. Dup compilare/interpretare mai trebuie urmat o etap nainte de a fi
executat programul. Este vorba despre editarea de legturi, n care programul obiect este completat cu
module preluate din bibliotecile sistemului de operare.
Principalele avantaje ale limbajelor de nivel nalt sunt:
sunt centrate n jurul bazelor de date, n mod deosebit a celor relaionale, oferind
faciliti pentru stocarea i interogarea datelor din baz;
includ limbaje de programare de nivel nalt pentru scrierea de proceduri program prin
care s se acopere anumite funciuni ale aplicaiilor care nu pot fi rezolvate prin
instrumentele 4GL;
Apariia limbajelor 4GL a reprezentat rspunsul la neajunsurile limbajelor de nivel nalt. Dei
acestea au permis o sporire considerabil a productivitii muncii programatorilor, n comparaie cu
limbajele de ansamblare, ea nu a fost suficient n condiiile extinderii rapide a utilizrii
microcalculatoarelor din anii 80, a creterii permanente a cerinelor utilizatorilor i a complexitii
aplicaiilor informatice. De fapt, prin introducerea limbajelor 4GL s-a urmrit rezolvarea a trei
probleme: reducerea costurilor mari cu dezvoltarea programelor, nevoia de obinere a programelor n
timp ct mai scurt i creterea calitii programelor, mai ales n ce privete includerea cerinelor
funcionale ale utilizatorilor.
1
prelucrare dup Curtis, G., Cobham, D. Business Information Systems. Analysis, Design and Practice, fourth edition,
Prentice Hall, 2002, p. 122
aplicaiile dezvoltate n 4GL sunt mai puin eficiente dect limbajele de nivel nalt, din
punctul de vedere al utilizrii resurselor calculatorului, aspect care devine mai evident
cu ct crete complexitatea aplicaiilor sau volumul datelor de prelucrat. Viteza de
execuie a programelor generate automat de aceste limbaje, pe baza specificaiilor
utilizatorilor, este mai mic, fapt care se rsfrnge n timpi de rspuns mai mari, dar i
pretenii sporite n ce privete puterea de calcul. Unii chiar se ntreab dac reducerea
costurilor i a timpului de dezvoltare a aplicaiilor nu sunt depite de costurile
suplimentare cu achiziia echipamentelor necesare pentru obinerea de performane
echivalente limbajelor din a treia generaie.
unii autori linclud limbajele naturale tot n categoria 4GL. Vezi OBrien, J.A. Introduction ti Information Systems.
Essentials for the Internetworked E-Business Enterprise, McGraw-Hill, 2001, p.158
Principalul lor neajuns este legat de translatarea programelor din limbajul natural n limbaj
main, o operaiune extrem de complex i costisitoare din punctul de vedere al resurselor hardware
solicitate. Ele sunt integrate cu aplicaiile de inteligen artificial, incluse i ele n aceast generaie.
Un astfel de exemplu l reprezint LISP.
Dei limbajele naturale sunt nc n faza de nceput a dezvoltrii lor, ele reflect foarte bine
caracteristica principal a evoluiei limbajelor de programare apropierea de limbajul uman. Aceast
caracteristic, precum i altele, sunt evideniate figura 1.1 3.
Generatia
Caracteristici
II
Limbaj
masina
Limbaj de
ansamblare
Apropierea de
limbajul uman
III
Limbaj de
nivel nalt
IV
Limbaj
neprocedural
Limbaj
natural
Progres
Productivitate
Progres
Eficienta
utilizarii
resurselor
Diminuare
Portabilitate
Nu
Nu
Da
Da
Da
Utilizarea de
macroinstructiuni
Nu
Nu
Da
Da
Da
Utilizarea
simbolurilor
Nu
Da
Da
Da
Da
adaptare dup Turban, E., McLean, E., Wetherbe, J. Information Technology for Management, John Wiley&Sons, 2001,
p. 735
10
proiectarea logic a bazelor de date, prin care este conceput schema relaional a bazei de
date, sub forma unui ansamblu de tabele normalizate ntre care exist legturi.
i n aceast etap economitii pot juca un rol important. nelegerea corect a modului de
11
organizaionale. Aceast etap este, de obicei, cea mai costisitoare, avnd n vedere c timpul pe care
i-l petrec specialitii din departamentele informatice reprezint cam 48-60% din totalul timpului
alocat pentru dezvoltarea sistemului.
12
13
testarea programelor,
generarea automat a documentaiei pentru aplicaia dezvoltat.
Implicarea direct a economitilor n procesul de dezvoltare va determina sporirea anselor de
reuit datorit calitii mai bune a programelor dar i creterii probabilitii de acceptare de ctre ei a
noilor programe. Cele mai cunoscute instrumente CASE sunt Oracle Designer i Visible Analyst.
SGBD-urile sunt, fr ndoial, cele mai populare instrumente software n dezvoltarea
aplicaiilor economice. Datorit acestui fapt, furnizorii au pus la dispoziia utilizatorilor nespecializai
astfel de produse, cele mai utilizate fiind ACCESS, Visual FoxPro, Corel Paradox sau Lotus
Approach. Prin instrumentele grafice furnizate, ele se disting de produsele destinate profesionitilor,
precum Oracle. Apelnd la un astfel de produs, utilizatorii vor fi n msur s dezvolte aplicaii de
complexitate relativ redus, fr a avea cunotine de specialitate.
Principalele faciliti oferite de aceste SGBD-uri sunt:
Crearea i actualizarea bazei de date. Utilizatorii pot defini structura datelor, sub forma
tabelelor i a relaiilor dintre acestea, dar i aspectele de comportament a datelor, sub
forma restriciilor de integritate. De asemenea, ei pot aduga, modifica sau terge date fie
prin intermediul unor ferestre, fie apelnd la comenzile limbajului SQL.
Interogarea bazei de date. Accesarea datelor din baz se poate face prin intermediul unor
faciliti grafice de interogare, dar i prin utilizarea frazei SELECT SQL, de cei cu
cunotine ceva mai avansate.
Dezvoltarea de aplicaii. Utilizatorii au la dispoziie o serie de instrumente prin care pot
crea formulare pentru introducerea datelor n baz, rapoarte pentru extragerea datelor i
prezentarea informaiilor ntr-o form plcut, meniuri pentru exploatarea mai uoar a
aplicaiei, pagini Web. Prin integrarea lor se pot obine aplicaii destul de complexe.
Programele de calcul tabelar, precum EXCEL, LOTUS 1-2-3, QuatroPro au reprezentat
prima categorie de instrumente software destinate utilizatorilor neinformaticieni. Ele pot fi utilizate de
economiti n activitile de planificare i elaborarea bugetelor, n analize complexe privind activitatea
firmei, n procesul decizional etc. Aceste programe sunt considerate instrumente elementare de asistare
a procesului decizional.
Programele de calcul tabelar organizeaz datele n centralizatoare formate din linii i coloane,
la intersecia crora se gsesc csue n care pot fi introduse date numerice i de tip text, precum i
formule complexe de calcul. De asemenea, n centralizatoare pot fi create i afiate grafice. n
momentul introducerii datelor n centralizatoare, calculele din csuele cu formule sunt efectuate
automat, iar rezultatele sunt afiate imediat.
Principalele faciliti de lucru sunt:
o gam larg de funcii predefinite, cum sunt cele financiare, statistice, matematice
etc., pe care utilizatorii le pot folosi n elaborarea unor modele de calcul complexe;
14
Microsoft Office
Lotus SmartSuite
Calcul tabelar
Excel
Lotus 1-2-3
QuatroPro
SGBD
Access
Approach
Paradox
Gestiunea informaiilor
personale
Outlook
Organizer
Corel Central
15
La mijlocul anilor 90, multe organizaii au contientizat c nu mai pot rezista pe pia dac vor
continua s utilizeze vechile sisteme informatice neintegrate. Nevoii de integrare i-au rspuns
sistemele ERP (Enterprise Resource Planning). ERP reprezint o mega-aplicaie multi-modular
care integreaz procesele economice i optimizeaz resursele disponibile ale organizaiei, reunind
toate funciunile sale ntr-o singur soluie software. ERP elimin barierele departamentale, prin
integrarea tuturor sistemelor informaionale tranzacionale ntr-o singur baz de date, accesibil oricui
din organizaie 4. Nu n ultimul rnd, se urmrete eliminarea granielor organizaiei cu partenerii si de
afaceri. Dou aplicaii, adesea incluse n soluiile ERP, stau drept mrturie: CRM (Customer
Relationship Management), centrat pe gestiunea relaiilor cu clienii, i SCM (Supply Chain
Management), orientat spre gestiunea relaiilor cu furnizorii.
ERP nu realizeaz doar integrarea funcional, ci i pe cea tehnologic. Sub egida sa sunt reunite
diverse tehnologii, precum: groupware, EDI (Electronic Data Interchange), Internet, Intranet, data
warehouse (depozite de date) etc.
Principalele avantaje obinute prin apelarea la soluiile ERP constau n: reducerea costurilor
produciei i a stocurilor, planificarea integral a resurselor ntreprinderii, mbuntirea productivitii
globale, maximizarea profitului prin flexibilitate i reactivitate sporit la cerinele pieei. Aceste
avantaje nu deriv doar din integrarea funcional i tehnologic, ci i ca urmare a expertizei de care
sunt nsoite soluiile ERP. Furnizorii de astfel de sisteme desfoar ample activiti de cercetare
pentru a gsi cele mai bune practici n diferite domenii de afaceri.
Dincolo de aceste avantaje, apelarea pe scar larg la soluiile ERP este deocamdat limitat,
situaie explicabil prin trei mari neajunsuri: preul exorbitant de mare, timpul ndelungat de
implementare i adaptabilitatea redus la condiiile particulare din firm. Soluiile ERP implic riscuri
destul de mari pentru firme, legate de volumul mare al investiiilor iniiale, costuri ascunse
semnificative, incertitudini privind adaptabilitatea ei i responsabilitile sporite ncredinate
personalului.
Cel de-al doilea acronim, ASP, a devenit cunoscut odat cu tendina, din ce n ce mai accentuat,
de externalizare a serviciilor informaionale, n scopul reducerii costurilor i mbuntirii
performanelor acestora. Externalizarea serviciilor informaionale cuprinde o palet larg de
posibiliti, de la externalizarea integral a lor i pn la externalizarea dezvoltrii unei pri a
sistemului informaional. Externalizarea serviciilor informaionale este astzi posibil prin apelarea la
furnizorii specializai, numii ASP (Application Service Providers). ASP reprezint o companie care
dezvolt i furnizeaz servicii informaionale folosite n comun de mai muli utilizatori, care pltesc un
abonament sau taxe de folosire, serviciile fiind furnizate dintr-o locaie central prin Internet sau
printr-o reea privat. Un ASP permite clienilor si accesul la un mediu de aplicaii complet,
preocupndu-se de investiiile necesare n licene de aplicaii, servere, angajai i alte resurse.
Apelarea la serviciile unor astfel de furnizori ofer numeroase beneficii, dintre care amintim:
Fotache D., Hurbean, L. Soluii informatice integrate pentru gestiunea afacerilor ERP, Ed. Economic,
Bucureti, 2004, p. 16
16
acces la suport tehnic i consultan de specialitate pentru servicii cu nalt nivel tehnologic;
17
proprietile i metodele superclasei, ns va putea modifica definiiile acestora sau aduga proprieti
i metode noi. De exemplu, STUDENT poate fi considerat o clas n sistemul de eviden a
studenilor, iar un anumit student va reprezenta o instan a acestei clase, adic un obiect. Clasa
STUDENT poate fi considerat o subclas a FIINTA_UMANA, aceasta fiind superclasa. La rndul
su, STUDENT poate avea ca subclas STUDENT_BURSIER. Aceast clas va avea, n plus fa de
student, proprietatea TipBursa. Oricum, proprietile i metodele clasei STUDENT sunt motenite de
STUDENT_BURSIER.
Un alt mare avantaj al limbajelor orientate-obiect, pe lng reutilizabilitate, se refer la faptul
sunt mai apropiate de modul n care utilizatorii vd lumea. Se consider c este mult mai natural
descrierea realitii nconjurtoare n termenii claselor de obiecte, cu proprieti i comportament,
dect sub forma unor funcii de prelucrare i a datelor, aa cum cereau limbajele anterioare.
Limbajele orientate-obiect au aprut n anii 70, odat cu Smalltalk. Astzi, cele mai utilizate
limbaje sunt Java i C#.
Dezvoltarea limbajelor orientate-obiect a determinat apariia unei alte tehnologii, numit
programarea vizual. Aceste limbaje dispun de un mediu grafic ce permite programatorilor s
dezvolte aplicaii prin manipularea direct a unor imagini, n loc de scrierea de programe. Visual Basic
este cel mai cunoscut astfel de limbaj, ns tot aici se nscriu DELPHI, Power Objects i Visual C++.
Limbajele de programare orientate-obiect au influenat i alte domenii ale sistemelor
informaionale, astfel c astzi exist metode de analiz i proiectare orientate-obiect, sisteme de
gestiune a bazelor de date orientate obiect (SGBDOO), instrumente CASE orientate-obiect.
Limbajele orientate-Internet se refer la tehnologiile care stau la baza dezvoltrii aplicaiilor
Web, cele mai importante fiind limbajele HTML i XML.
HTML (HyperText Markup Language) reprezint un limbaj de descriere utilizat pentru
crearea paginilor Web sub forma documentelor hypertext sau hypermedia. El este derivat din SGML
(Standard Generalized Markup Language), o metod de reprezentare a limbajelor de formatare a
documentelor, ceea ce permite ca la crearea documentelor s se separe informaia de modul de
prezentare a ei. Aceasta nseamn c documente care conin aceeai informaie pot fi diferite prin
modul de prezentare, adic tipul i mrimea fontului, spaierea paragrafelor etc., fr ca informaia s
fie modificat. HTML utilizeaz instruciuni numite tag-uri, pentru a descrie cum vor fi plasate n
document informaiile de tip text, grafic, video i sunet i pentru a crea legturi dinamice (numite i
hiper-legturi) ctre alte documente i obiecte stocate pe acelai calculator sau pe altul. Aceste legturi
permit utilizatorului s deschid un alt document printr-un simplu clic pe un text subliniat sau pe o
imagine.
Popularitatea nregistrat de acest limbaj a determinat principalii furnizori de software s-l
includ n produsele lor. Astzi, majoritatea procesoarelor de text, programelor de calcul tabelar,
programelor de procesare grafic sau sistemelor de gestiune a bazelor de date ofer faciliti pentru
generarea automat a documentelor n format HTML. De asemenea, dup cum am vzut n paragraful
anterior, au fost puse la dispoziia utilizatorilor instrumente software speciale pentru dezvoltarea
paginilor Web, fr a fi nevoie s se scrie programe HTML. Cele mai cunoscute sunt Microsoft
FrontPage i Lotus FastSite.
XML (eXtensible Markup Language) nu este un limbaj de descriere a formatului unei
pagini Web, ci un limbaj de descriere a coninutului paginilor Web. De exemplu, informaiile privind
18
zborurile aeriene de pe pagina Web a unei agenii de turism vor fi descrise prin intermediul tag-urilor
XML. El este derivat tot din standardul SGML.
Exemple de teste gril
1. Care dintre urmtoarele instrumente software se adreseaz economitilor, ca utilizator final
informatizat?
a) Programe de calcul tabelar
b) Limbajul Java
c) Produsele de tip CASE
d) Limbajele de ansamblare (numite i simbolice)
2. Evoluia limbajelor de programare reflect progresele nregistrate n privina:
a) Eficienei utilizrii resurselor calculatoarelor
b) Productivitii muncii programatorilor
c) Apropierii de limbajul uman
d) Memorarea datelor
19
Capitolul 2
Obiective:
i.
ii.
Rezultate ateptate:
i.
ii.
iii.
20
Pret
UM
Intrare
Data
paine
0.5
buc
100
05/12/05
A1
A2
An
21
de vedere logic. La rndul lor, datele structurate sau compuse se definesc ca fiind o grupare de date
elementare i chiar de alte date compuse.
Trebuie precizat c toate datele n baze de date sau entiti sunt declarate n dicionarul de date
pe ultimul nivel ca fiind date elementare.
La rndul lor, datele structurate se grupeaz n:
Date structurate de nivel redus, care permit operaii la nivel de component. Sunt
incluse n aceast categorie tablourile i articolele;
Nume_dat
Valoare
Tip
Produs
Paine
ir de caractere
Pre
0.5
Numeric
UM
Buc
ir de caractere
Intrare
100
Numeric
Data
05/12/05
Dat calendaristic
Particularizm crearea datelor elementare din tabelul 2.1 n Visual Basic for Application:
Sub algoritm()
' creare -initializare
produs = "paine"
pret = 0.5
um = "buc"
intrare = 100
data = "12/12/2005"
' calcul valoare
v = pret * intrare
22
Un tablou se definete ca fiind cea mai simpl dat structurat organizat sub form tabelar.
O caracteristic important a unui tablou o reprezint dimensiunea acestuia. Un tablou cu o singur
dimensiune (o singur coloan) poart denumirea de vector, iar un tablou cu dou dimensiuni poart
denumirea de matrice. n figura de mai jos reprezentm schematic un vector i o matrice.
Din figura urmtoare i din definiiile date trebuie s se rein faptul c n fiecare celul a unui
tablou se regsete o dat elementar.
1
1
A(1)
A(1,1)
A(1,2)
A(2)
A(2)
A(i,1)
A(i)
A(n)
A(n,1)
A(1,j)
A(2)
A(2,j)
A(2,m)
A(i,2)
A(i,j)
A(i,m)
A(n,2)
A(n,j)
A(n,m)
A(1,m)
23
Exemplul precedent, de la datele elementare, se poate converti sub urmtoarea form folosind
un tablou cu o singur dimensiune.
Sub Alg_tablou_1()
' creare-initializare
Dim aprov(5)
aprov(0) = "paine"
' intializare cu "paine"
aprov(1) = 0.5
' intializare cu 0.5
aprov(2) = "buc"
' intializare cu "buc"
aprov(3) = 100
' intializare cu 100
aprov(4) = "12/12/2005" ' intializare cu "12/12/2005"
' calcul valoare
aprov(5) = aprov(1) * aprov(3)
' afisare rezultate
MsgBox "Total intrari " & produs & ": " & Str(aprov(5)) & " RON" ' Afisare rezultate finisate
End Sub
n Visual Basic se pot crea tablouri cu maximum 60 de dimensiuni. Noi vom particulariza
crearea pe un tablou cu dou dimensiuni. Astfel vom considera intrrile de pine pe 3 zile.
Sub Alg_tablou_2()
' creare-initializare
Dim aprov(5, 1)
' prima zi
aprov(0, 0) = "paine"
' intializare cu "paine"
aprov(1, 0) = 0.5
' intializare cu 0.5
aprov(2, 0) = "buc"
' intializare cu "buc"
aprov(3, 0) = 100
' intializare cu 100
aprov(4, 0) = "12/12/2005"
' intializare cu "12/12/2005"
' a doua zi
aprov(0, 1) = "paine"
' intializare cu "paine"
aprov(1, 1) = 0.5
' intializare cu 0.5
aprov(2, 1) = "buc"
' intializare cu "buc"
aprov(3, 1) = 100
' intializare cu 108
aprov(4, 1) = "12/12/2005"
' intializare cu "12/12/2005"
' a treia zi
aprov(0, 2) = "paine"
' intializare cu "paine"
aprov(1, 2) = 0.5
' intializare cu 0.5
aprov(2, 2) = "buc"
' intializare cu "buc"
aprov(3, 2) = 100
' intializare cu 116
aprov(4, 2) = "12/12/2005"
' intializare cu "12/12/2005"
' calcul valoare
aprov(5, 0) = aprov(1, 0) * aprov(3, 0)
aprov(5, 1) = aprov(1, 1) * aprov(3, 1)
aprov(5, 2) = aprov(1, 2) * aprov(3, 2)
' afisare rezultate
MsgBox "Intrari Luni" & produs & ": " & Str(aprov(5, 0)) & " RON"
MsgBox "Intrari Marti" & produs & ": " & Str(aprov(5, 1)) & " RON"
MsgBox "Intrari Miercuri" & produs & ": " & Str(aprov(5, 2)) & " RON"
End Sub
Pointer-ul reprezint o legtur ctre o dat elementar. Cu alte cuvinte, o variabil care
conine o adres sau un nume de variabil pentru o alt dat elementar. Schematic un pointer se
reprezint ca n figura de mai jos.
24
V1
Adr1
Adr2
Nume variabil: V1
Adres: Adr1
Coninut/Valoare: Adr2
V2
Adr2
Iasi
Nume variabil: V2
Adres: Adr2
Coninut/Valoare: Iai
2.2.3. Liste
O list reprezint o colecie omogen i secvenial de date. Astfel, aceasta constituie cea mai
comun dat structurat. Schematic cea mai simpl list se reprezint ca n figura de mai jos.
Intrare
list
Ieire
list
Definiia pentru stabilirea ordinii nodurilor, adic pentru fiecare nod exist un
predecesor i un succesor.
n situaia n care definiia pentru stabilirea ordinii nodurilor conine o regul care conduce la
o succesiune ntre ultimul nod i primul nod, atunci discutm de liste circulare.
B
C
F
25
Unei liste i se pot aplica operaii de actualizare (modificare, inserare i tergere) nod-uri din
list, operaii de concatenare cu alt list i de numrare a nodurilor declarate.
Pentru implementarea unei liste se pot folosi dou strategii:
a. Implementarea secvenial sau static, ceea ce presupune atribuirea de locaii succesive de
memorie n coresponden cu ordinea nodurilor din list.
b. Implementarea nlnuit sau dinamic. n acest caz, fiecare nod conine dou pri: informaia
propriu-zis i adresa nodului succesor.
n practic se ntlnesc dou cazuri particulare de liste:
a. Stive. O stiv (stack) este o list liniar cu proprietatea c operaiile de inserare/extragere a
nodurilor se fac n/din coada listei. Dac nodurile A, B, C, D sunt inserate ntr-o stiv n aceasta
ordine, atunci primul nod care poate fi extras este D. In mod echivalent, spunem ca ultimul nod inserat
va fi i primul ters. Din acest motiv, stivele se mai numesc i liste LIFO (Last In First Out), sau liste
pushdown.
b. Cozi. O coada (queue) este o list liniar n care inserrile se fac doar n capul listei, iar
extragerile doar din coada listei. Cozile se numesc i liste FIFO (First In First Out).
2.2.4. Arbori
Arborii reprezint o dat structurat cu dou-dimensiuni n care nodurile formeaz o ierarhie.
Astfel, o asemenea structur de date dispune de un nod rdcin (plasat fie n vrf, fie la baza
arborelui). La rndul su. un nod rdcin dispune de unul sau mai multe niveluri de noduri-copil,
care pot s aib, la rndul lor, proprii lor noduri-copil. Astfel, putem spune c ntr-un arbore deosebim:
nodul rdcin, noduri copil i noduri-printe. Mai multe noduri subordonate succesiv unul altuia
formeaz o ramur, iar un nod care nu are subordonat un nod-copil se numete nod frunz. n forma sa
cea mai sintetic un arbore se reprezint ca n figura 2.7.
nod rdcin: a;
noduri copil: b, c, d, e, f, g, h, i, j i k;
nod printe: b fa de e i f; c fa de g; d fa de h i i; f fa de j i k;
ramur: a, b i e;
26
noduri frunz: e, j, k, g, h i i;
n literatura de specialitate sunt prezentai: arbori cu rdcin (figura 2.8.a), arbori binari
(figura 2.8.b), arborii multi-cale (figura 2.8.c).
b. Arbore binar
a. Arbore cu rdcina
A
valoarea vrfului
adresa fiului din stnga
adresa fiului din dreapta
valoarea nodului-fiu
din stnga
D
B
c. Arbori multi-cale
27
Figura 2.9 Reprezentri ale structurilor de date externe de tip articol i fiier 5
Din punct de vedere al activitilor de programare este interesant s cunoatem metoda de
organizare i tipul de acces aferente structurilor de date externe.
a. Metoda de organizare. Aceasta poate fi una din urmtoarele: secvenial, relativ i
indexat;
b. Tipul de acces la date n operaii de citire i scriere a valorilor din /n cmpuri. Se poate
folosi accesul secvenial sau accesul direct.
Capitolele 4, 5 i 6 prezint exemple suplimentare de structuri de date de tip fiiere (tabele) i articole.
28
Sub atribuire()
precizare variabilele care se folosesc mai jos trebuie in principiu declarate (create) inainte
LET cont=212
se atribuie valoarea numerica 212 pentru variabila cont
Den = Mijloace fixe se atribuie irul Mijloace fixe pentru variabila den
Tip_C= True
valoarea True este atribuit conturilor de activ
Data=#12/31/2004#
se atribuie valoarea 31.12.2004 variabilei data
Nota: Trebuie se foloseste semnul #, iar formatul este ll/zz/aaaa
End Sub
29
Sub citire()
Cont = InputBox(Simbol cont,Introduceti o valoare, 0)
Den = InputBox(Denumire cont:,Introduceti o valoare, )
Data= InputBox(Data operatiei:,Introduceti o valoare in formatul ll/zz/aaaa, 0)
MsgBox ("Informatii despre cont")
MsgBox ("Denumire cont: " & Den)
MsgBox ("Simbol cont: " & Str(cont))
MsgBox ("" & data)
End Sub
Prezentm n figura 2.12 fereastra afiat pentru instruciunea MsgBox ("Denumire cont: " &
Den) i a instruciunii MsgBox ("Denumire cont: " & Den).
30
n figura 2.13. prezentm rezultatul dup lansarea n execuie a procedurii de mai sus.
Se observ c n formatul precedent ramura ELSE este opional (inclus n paranteze drepte.)
31
IF <condiie> THEN
<set_comenzi>
END IF
n procedura de mai sus se observ dou instruciuni IF una dup alta. Exist ns posibilitatea
ca pe ramura Else a unei structuri IF s nu fie nici o secven, ceea ce ne conduce la o structur
alternativ cu ramur vid de forma IF THEN END IF, dar i la posibilitatea ca pe oricare din
cele dou ramuri s apar o alt structur alternativ, ceea ce ne-ar conduce la un IF imbricat de forma
IF THEN If Then Else End If ELSE END IF.
b. Codificarea structurilor de control alternative generalizate se realizeaz cu ajutorul
comenzii: SELECT CASE CASE CASE ELSE END SELECT. Formatul general pentru
aceast comand este urmtorul:
SELECT CASE <var>
CASE <var_1>
32
<set_comenzi_1>
[CASE <var_2>
<set_comenzi_2>]
[CASE <var_k>
<set_comenzi_k>]
[]
[CASE <var_m>
<set_comenzi_m>]
CASE ELSE
<set_comenzi>]
END SELECT
Modul de utilizare a acestei comenzi este simplu i const n a identifica cazurile de descris,
care se vor reprezenta sub forma unor condiii. De fiecare dat se compar coninutul variabilei <var>
cu coninutul variabilelor <var_1>, <var_2> . Dac se ajunge s fie indeplinit o condiie
<var>=<var_k> se va executa set_comenzi_k (k poate fi o valoare din intervalul 1,m). n cazul n
care nu se ndeplinete nici una din condiii, se transfer controlul pe ramura lui CASE ELSE spre a
se executa setul de comenzi <set_comenzi>.
Exemplu de utilizare Dorim s aflm dup data naterii ziua din cadrul sptmnii, tiind
c datele calendaristice sunt valori numerice, iar restul mpririi la 7, la care se adaug 1, ne asigur
obinerea unui numr n intervalul 1-7.
Function zi(numzi As Byte) As String
Select Case numzi
Case 1
zi = "Luni"
Case 2
zi = "Marti"
Case 3
zi = "Miercuri"
Case 4
zi = "Joi"
Case 5
zi = "Vineri"
Case 6
zi = "Sambata"
Case 7
zi = "Duminica"
End Select
End Function
Sub case_zi()
Dim varzi As Date
varzi = InputBox("Introduceti ziua Dvs de nastere in format ll/zz/aaaa")
MsgBox ("Sunteti nascut(a) intr-o zi de " + zi((Int(varzi) Mod 7) + 1))
End Sub
Not: (Int(varzi) Mod 7) + 1 asigur obinerea restului la mprirea lui varzi la 7 in intervalul 1 7.
33
Sub dist()
Dim d
d = InputBox("Introduceti distanta pana la localitatea dvs. in Km.")
Select Case d
Case Is <= 50
MsgBox ("Localitatea este foarte aproape, la distanta de " + Str(d) + " km.")
Case 51 To 100
MsgBox ("Localitatea este aproape, la distanta de " + Str(d) + " km.")
Case 101 To 250
MsgBox ("Localitatea este departe, la distanta de " + Str(d) + " km.")
Case Is > 250
MsgBox ("Localitatea este foarte departe, la distanta de " + Str(d) + " km.")
Case Else
MsgBox ("Distanta introdusa trebuie sa fie un numar intreg!")
End Select
End Sub
Not: Se observ n exemplul precedent utilizarea lui Case Is pentru comparare i a lui Case v1 to v2 pentru
a acoperi valorile ntregi pe intervalul v1-v2.
WHILE WEND
n VBA aceast structur repetitiv este considerat cea mai simpl, deoarece nu ofer
posibilitatea prsirii forate a setului de comenzi cu o instruciune de tipul EXIT. Formatul su este:
WHILE conditie
CT TIMP conditie
<set_comenzi>
<set_comenzi>
WEND
SFRIT_CT_TIMP
Iat un exemplu de utilizare a acestei structuri de prelucrare pe exemplul introducerii de date
n tabloul cu dou dimensiuni pentru produsele care au intrat n magazin ntr-o perioad de timp
stabilit de utilizator.
Sub Wend_tablou_2()
Dim i As Integer ' definirea variabilei pentru control executie
Dim var As Integer ' definirea variabilei de ciclare
i = InputBox("Numar de intrari in cadrul zilei: ")
Dim aprov(5, 100) ' definirea tabloului
var = 0
While var < i
aprov(0, var) = InputBox("Denumire produs: " & (var + 1))
aprov(1, var) = InputBox("Pret de intrare: " & (var + 1))
aprov(2, var) = InputBox("Unitate de masura: " & (var + 1))
aprov(3, var) = InputBox("Cantitate:" & (var + 1))
aprov(4, var) = InputBox("Data intrarii (ll/zz/aaaa):")
var = var + 1
Wend
End Sub
34
Not: Pentru a nu se repeta la infinit este necesar introducerea unei clauze de actualizare a
valorii variabilei de ciclare var (vezi linia var = var + 1).
FOR NEXT
Aceast structur ofer posibilitatea prestabilirii numrului de execuii pentru set_comenzi.
Din punct de vedere logic se aseamn cu WHILE WEND, cu precizarea c actualizarea lui se face
cu clauza NEXT . Formatul su este:
FOR i =1 to n
<set_comenzi>
NEXT i
PENTRU i = 1 la N
<set_comenzi>
URMTORUL i
Vom adapta exemplul precedent n cazul utilizrii structurii de prelucrare FOR NEXT, dar
pe zile ale sptmnii.
Sub For_tablou_2()
Dim i As Integer ' definirea variabilei de ciclare
Dim aprov(5, 100) ' definirea tabloului
Dim zi As String
i=0
For i = 0 To 6
Select Case i
Case 0
zi = "Luni"
Case 1
zi = "Marti"
Case 2
zi = "Miercuri"
Case 3
zi = "Joi"
Case 4
zi = "Vineri"
Case 5
zi = "Sambata"
Case 6
zi = "Duminica"
End Select
aprov(0, i) = InputBox("Denumire produs intrat " & zi & ":")
aprov(1, i) = InputBox("Pret de intrare:")
aprov(2, i) = InputBox("Unitate de masura:")
aprov(3, i) = InputBox("Cantitate:")
aprov(4, i) = InputBox("Data intrarii (ll/zz/aaaa):")
Next i
End Sub
DO LOOP
Aceast structur de prelucrare de tip repetitiv permite utilizarea a dou clauze diferite, i
anume: pentru transferul controlului n cazul ndeplinirii condiiei (WHILE) i pentru transferul
controlului n cazul nendeplinirii condiiei (UNTIL). n varianta cu WHILE DO LOOP
corespunde structurii de control repetitive condiionate anterior, n timp ce n varianta cu UNTIL,
permite codificarea structurilor de control condiionate posterior (adic set_comenzi se execut
naintea verificrii condiiei, deci cel puin o dat).
35
DO WHILE <conditie>
<set_comenzi_1>
[EXIT DO]
<set_comenzi_2>
LOOP
DO UNTIL <conditie>
<set_comenzi_1>
[EXIT DO]
<set_comenzi_2>
LOOP
DO <conditie>
<set_comenzi_1>
[EXIT DO]
<set_comenzi_2>
LOOP [UNTIL|WHILE]
LOOP
Den = InputBox(Denumire cont:,Introduceti o valoare, )
Data= InputBox(Data operatiei:,Introduceti o valoare in formatul ll/zz/aaaa, 0)
End Sub
Sub citire()
DO WHILE CONT>900 and CONT<100
Cont = InputBox(Simbol cont,Introduceti o valoare, 0)
LOOP
Den = InputBox(Denumire cont:,Introduceti o valoare, )
Data= InputBox(Data operatiei:,Introduceti o valoare in formatul ll/zz/aaaa, 0)
End Sub
36
CAPITOLUL 3
Obiective:
i. Cunoaterea i familiarizarea cu componentele programelor de calcul tabelar:
registrul de lucru i foaia de calcul.
ii. Analiz rapid a datelor prin reprezentarea lor grafic.
iii. Folosirea n foile de calcul a formulelor i funciilor pentru efectuarea unei
game variate de operaiuni: calcule matematice, financiare, statistice, logice,
cutri de informaii, simulri i analize etc.
Rezultate ateptate:
i. Obinerea i gestionarea registrelor de lucru i a foilor de calcul astfel nct
modelele proiectate s automatizeze cererile utilizatorilor.
ii. Alegerea tipului de grafic n aa fel nct acesta s fie sugestiv.
iii. Susinerea procesului decizional prin simulri i analize de date n foile de
calcul i n grafice.
iv. Exploatarea listelor i a bazelor de date Excel prin actualizri, sortri i
interogri.
37
meniul Start (figura 3.1), selectnd din meniul Programs opiunea Microsoft Excel,
meniul rapid (figura 3.2), selectnd comanda New i apoi opiunea Microsoft Excel;
shortcut-ul de pe Desktop (figura 3.3), accesnd pictograma de pe desktop, dac a fost creat o
scurttur Excel.
38
Bara standard
Foaia de calcul
Task Pane
39
Create an interactive Web site - crearea interactiv a unui site Web folosind, sub
supravegherea unui asistent, programul Front Page;
Find links in a workbook cutarea unor legturi Web, n registrul de lucru curent;
Open deschiderea unuia dintre fiierele aflate n lista ultimelor fiiere cu care s-a lucrat,
sau a unui alt fiier, cutat cu ajutorul butonului More...care deschide o fereastr Open.
Componenta principal ntr-o aplicaie realizat cu un program de calcul tabelar o reprezint
foaia de calcul, care trebuie privit ca un centralizator uria cu linii i coloane, la intersecia crora
sunt celulele n care se introduc date, formule i funcii. Rezult c, ntr-o foaie de calcul elementul de
baz este celula.
O foaie de calcul are:
La intersecia coloanelor cu liniile sunt celulele (csue /casete) care sunt referite n mod
univoc cu ajutorul adreselor, care se obine prin concatenarea codurilor de coloane cu cele de linii.
La rndul lor, adresele de celule pot fi:
relative;
absolute;
mixte.
Adresele relative sunt implicite i se modific prin operaiile de copiere sau mutare n funcie
de zona destinaie stabilit de utilizator. Acest tip de adrese se obine prin combinarea simpl a
codurilor de coloan cu a celor de linie (de exemplu, A1, BC234, IV65536). Adresele absolute se
stabilesc explicit de ctre utilizator prin plasarea semnului $ naintea codului de coloan i a celui de
linie (de exemplu, $A$1, $BC$234, $IV$65536). Avantajul adreselor absolute const n faptul c la
copiere sau mutare ele nu se modific. O combinaie a acestor dou tipuri de adrese o reprezint
adresele mixte, n care numai una dintre coordonate se modific (de exemplu, A$1, $BC234).
Adresele mixte sunt utilizate, cel mai adesea, la formatarea condiionat a datelor din foile de calcul.
Foile de calcul sunt organizate n agende sau registre de lucru numite Book<n>. ncepnd cu
versiunea Excel 7 ntr-un registru de lucru, implicit, sunt definite trei foi de calcul numite Sheet<n>,
numrul maxim putnd fi de 255. Adugarea de noi foi de calcul n registrul de lucru curent se
realizeaz din meniul Insert folosind opiunea Worksheet. Numele implicite Book i Sheet pot fi
schimbate de utilizator odat cu salvarea coninutului registrelor de lucru sau prin operaia de
redenumire. Este recomandat ca n acelai registru de lucru s fie organizate foile de calcul care conin
date relative la aceeai aplicaie sau care privesc acelai utilizator.
ntr-o foaie de calcul pot fi referite celule /date din alte foi de calcul, ntlnindu-se urmtoarele
situaii:
cnd foaia de calcul este din acelai registru de lucru, adresa celulei va fi precedat de semnul ! i
numele foii de calcul (de exemplu, Sheet2!C34, Rentabilitate!B5);
40
cnd foaia de calcul este din alt registru de lucru, adresa celulei va fi precedat de semnul !,
numele foii de calcul i numele registrului de lucru din care face parte, specificat ntre paranteze
ptrate (de exemplu, [Situatie_scolara]Anul_1!F6, [IDD]Anul_1!A15).
Cnd o comand /operaie urmeaz a fi aplicat asupra mai multor celule, pentru creterea
vitezei de lucru acestea sunt grupate ntr-un domeniu (range). Domeniile la rndul lor pot fi contigue
(cnd celulele sunt adiacente /nlnuite), sau necontigue (cnd celulele nu sunt nvecinate /conectate).
n primul caz, operatorul de referire (numit operator de domeniu) este caracterul dou puncte
(exemplu, domeniul A3:J75 ). n cel de al doilea caz, operatorul de referire (numit operator de
reuniune) este caracterul punct i virgul (exemplu, domeniul A5; D5; M5).
Celula (csua) n care este plasat prompterul sistem se numete celul curent sau activ i
este evideniat printr-un chenar trasat cu o linie ngroat. n aceast celul vor fi preluate elementele
nou introduse sau se vor reda rezultatele obinute n urma evalurii formulelor i /sau a funciilor.
n principal facilitile oferite de Excel sunt apelate prin intermediul opiunilor organizate ntro reea de meniuri specializate care respect principiile Windows. Implicit, n bara meniu sunt
disponibile meniurile File, Edit, View, Insert, Format, Tools, Data, Windows i Help. Foarte multe
opiuni sunt cunoscute din procesorul de texte Word. n funcie de comanda lansat la un moment dat,
n bara meniu devin disponibile i alte meniuri cu propriile comenzi. De exemplu, pentru modificarea
unui grafic, n bara meniu, apare meniul Chart ale crui opiuni permit, printre altele, reluarea pailor
de obinerea a unui grafic.
41
Ctrl + End - mutarea n colul dreapta-jos al seciunii de date din foaia de calcul;
F5 /Ctrl + G <adresa celul> - mutarea ntr-o anumit celul sau zon din foaia de calcul;
Tab - deplasarea de la stnga la dreapta sau de sus n jos ntr-un domeniu selectat;
Un rol aparte l are tasta End ce comut n modul End, oferind opiuni de navigare
suplimentare:
End + tasta Enter determin ajungerea la sfritul de linie;
End + o tast direcional determin deplasarea la urmtoarea celul ocupat din direcia
respectiv;
End + tasta Home determin deplasarea la ultima celul ocupat din foaia de calcul (acelai rol
cu Ctrl + End).
Pe lng aceste modaliti, Excel permite selectarea celulelor i dup coninutul lor sau dup
relaiile folosite n formule. Pentru aceasta se folosete opiunea Special a comenzii Go To din meniu
Edit.
Pentru derularea foii de calcul sunt folosite barele i butoanele de defilare /deplasare vertical
sau orizontal plasate n dreapta i respectiv la baza foii de calcul. Acestea sunt identice cu barele i
butoanele de defilare /derulare din orice fereastr Windows.
42
pentru selectarea celulelor nlnuite (domeniu contiguu) se execut clic pe celula dintr-o
extremitate a domeniului i se deplaseaz indicatorul mouse-ului n cealalt extremitate, prin
tehnica tragerii drag&drop; celulele adiacente pot fi selectate rapid i prin urmtoarea
secven de operaii: clic de mouse de pe prima celul din domeniu, apsarea continu a tastei
Shift, clic de mouse pe ultima celul din domeniul dorit;
pentru a selecta un domeniu necontiguu se selecteaz prima celul din grup, se ine apsat
tasta Ctrl, dup care, pe rnd, se selecteaz cu mouse-ul, celelalte celule dorite;
selectarea n ntregime a unei linii sau a unei coloane se realizeaz printr-un clic pe antetul
liniei, respectiv cel al coloanei dorite;
pentru selectarea n ntregime a mai multor linii sau coloane contigue se execut clic pe antetul
primei linii sau coloane domeniul dorit, dup care prin drag&drop (tragere de mouse) se
acoper toate liniile, respectiv coloanele din domeniu. Acest tip de selecie se poate realiza
prin urmtoarea secven de operaii: clic de mouse de pe antetul primei linii sau coloane din
domeniu, apsarea tastei Shift, clic de mouse pe ultima linie, respectiv coloan din domeniul
dorit;
pentru selectarea n ntregime a mai multor linii sau coloane necontigue se execut clic pe
antetul primei linii sau coloane din domeniu, se ine apsat tasta Ctrl, dup care, prin clic de
mouse pe antetele liniilor, respectiv a coloanelor dorite se selecteaz ntregul domeniu.
Asociate datelor numerice sunt i datele calendaristice, care intern se reprezint ca numere.
O dat este de tip caracter dac primul caracter introdus este:
43
Prin formatarea unei celule sau a unui domeniu de celule se poate stabili att tipul datelor
introduse ct i aspectul acestora. Se folosete din meniul Format comanda Cells. La selectarea
acesteia se deschide fereastra Format Cells n care comenzile sunt grupate pe cadre de pagin
(etichetele): Number, Alignment, Font, Border, Patterns i Protection (figura 3.9).
Cadrul de pagin Number permite stabilirea formatelor pentru datele numerice, inclusiv a
celor de tip dat calendaristic i timp. Formatul implicit este General care asigur preluarea i
afiarea datelor numerice pe cea mai scurt lungime posibil.
Celelalte categorii de formate permit:
Number - stabilirea numrului de zecimale (maximum 30) i a modului de afiare a numerelor
negative (scrise cu culoare neagr sau roie, precedate sau nu de semnul (pentru cele scrise n rou);
Currency - afiarea numerelor precedate sau urmate, dup caz, de simbolul monetar ales de
utilizator (figura 3.10);
Accounting - stabilirea de ctre utilizator a monedei n care vor fi reprezentate datele;
Percentage - stabilirea numrului de zecimale ntr-o reprezentare procentual;
Scientific - reprezentarea n format tiinific, cu mantis i exponent, a datelor (de exemplu,
numrul 6.100.000, n format tiinific devine 6,10E+06);
Stabilirea numrului de
zecimale (max. 30)
Zona de previzualizare a
coninutului celulei curente
Afiarea prii ntregi n
grupe de trei cifre separate
printr-un punct (.)
Formate de afiare /
tiprire a numerelor
negative
Formatele de afiare / tiprire
a datelor numerice
44
Lista simbolurilor
monetare (n ultimele
versiuni de Office este
disponibil i moneda
pentru Romnia)
Lista formatelor
pentru datele
calendaristice
Lista zonelor
geografice
45
Wrap text (Alt + Enter) - permite scrierea pe mai multe linii n cadrul aceleiai celule;
Shrink to fit - stabilete dimensiunea datei introduse astfel nct s ncap n celula curent;
Merge cells - mbin celulele selectate i centreaz, n spaiul astfel obinut, data din celula cea
mai de sus, sau cea mai din stnga.
Scrierea oblic
Scrierea
pe
vertical
Alinierea pe
vertical
46
47
48
formulelor (Formulas);
comentariilor (Comments);
ntregului coninut, mai puin marginile zonei surs ((All except borders).
49
50
ncercarea de a modifica date din celulele unei foi de calcul protejate duce la afiarea unui
mesaj de avertizare (figura 3.25).
51
52
formula matriceal este inclus ntre acolade, introduse automat de ctre Excel;
execuia unei formule matriceale se realizeaz cu ajutorul combinaiei de taste: Shift + Ctrl +
Enter.
53
n formule pot fi folosite i nume date de utilizator pentru anumite domenii (grupuri de celule
apelate frecvent). n figura 3.30 este prezentat un exemplu n care au fost definite pentru dou domenii
de celule, nume care ulterior sunt referite n formule.
Pentru nlocuirea adreselor de celule cu nume se folosete, fie caseta Name box din stnga
barei de formule (figura 3.32), fie comanda Name, din meniul Insert.
Domeniul de celule referit ntr-o formul poate primi ulterior un nume, care s apar n
formul dac se folosete comanda Apply, din fereastra comenzii Name a meniului Insert.
54
Argumentele pot fi adrese de celule, nume de domenii, valori numerice, iruri de caractere sau
chiar alte funcii etc. Argumentele de tip ir de caractere sunt ncadrate de ghilimele. n general,
argumentele sunt separate prin punct i virgul, dac nu a fost setat un alt separator, de exemplu,
virgula. Rezultatele pot fi valori calculate, valori de tip text, referine, valori logice etc.
Editarea funciilor se poate realiza fie direct n bara de formule sau celula curent, fie
apelndu-se generatorul de funcii (Function Wizard). Cea mai comod variant o reprezint
asistentul de funcii apelat:
55
numrul de perioade trebuie s fie exprimat n aceeai unitate de timp (lun, an);
folosite.
56
Funcia SLN( ) calculeaz amortizarea dup metoda liniar prin stabilirea valorii anuale a
deprecierii unui bun (de exemplu, imobilizri corporale). Formatul general al funciei este
=SLN(val_inv, val_rez, durat), n care:
Funcia SYD( ) folosete, pentru calculul amortizrii, metoda sumei cifrelor anilor. Formatul
general este =SYD(val_inv, val_rez,durat,per), n care pe lng argumentele funciei precedente se
mai adaug prin per anul din durata de via pentru care se calculeaz deprecierea (primul an, al
doilea, al treilea etc.).
Funcia DDB( ) calculeaz deprecierea pentru o perioad indicat folosind metoda balanei
dublu depreciate sau o alt metod specificat. Formatul funciei este =DDB(val_inv, val_rez,
durat,per[,factor]), n care factor indic viteza /rata de depreciere, care dac este omis, se consider
egal cu doi.
Pentru calcularea anuitilor Excel folosete n principal funciile =FV(), =PMT(), =PV() i
RATE( ).
Observaie
Anuitatea este un procedeu prin care, de regul, un capital mprumutat se ramburseaz ntr-un
anumit numr de ani /luni, printr-o serie de pli periodice, cuprinznd n afara dobnzii i o sum
destinat a reconstitui capitalul.
Funcia FV( ) stabilete valoarea viitoare pentru o serie de ncasri provenite din pli egale
(plat), fcute ntr-un numr de perioade (nper), cu o anumit dobnd (dobnd). Formatul general al
funciei este =FV(dobnd, nper, plat, [vp,tip]). Se observ c din format pot lipsi vp (suma global
investit la nceputul operaiei) i tip (care stabilete dac plata va fi fcut la nceputul perioadei 1,
sau la sfritul perioadei 0). n absena lor, aceste argumente sunt considerate ca avnd valoarea 0.
Funcia PMT( ) calculeaz plile periodice pentru diferite tipuri (tip) i valori viitoare ale
unei investiii (vv), fiind date dobnda investiiei (dobnd), termenul (nper) i valoarea prezent (vp).
Formatul general este =PMT(dobnd, nper, vp [,vv, tip]), funcia determinnd valoarea ratei lunare
/anuale pentru un mprumut pe un numr de luni /ani cu o dobnd lunar /anual fixat. Dac pentru
vv i tip nu sunt introduse valori, sunt considerate egale cu zero.
Funcia PV( ) calculeaz valoarea prezent a unei investiii pe baz de vrsminte egale.
Formatul general este =PV(dobnd, nper, plat [,vv, tip]). Dac vrsmintele nu sunt egale se
folosete funcia NPV( ).
Funcia RATE( ) stabilete procentual dobnda necesar pentru ca o investiie s ajung la
valoarea capitalizat scontat. Formatul general este =RATE(nper, plata, vp [,vv, estimare]). Aceast
funcie poate furniza mai multe valori dependente de estimare. Dac acest argument nu este folosit,
estimarea implicit este de 10%. Pe de alt parte, dac estimarea se deprteaz de valoarea corect
Excel returneaz mesajul de eroare #NUM!.
Funcia IRR( ) determin rata intern de rentabilitate pentru o serie de venituri sau ncasri.
Formatul general este =IRR(valori, estimare). Valorile pot fi pozitive sau negative, coninute ntr-un
domeniu sau o matrice de celule referite, iar estimarea este un numr care de obicei este cuprins ntre 0
i 1, i indic evaluarea privind beneficiul final.
57
Funcii pentru baze de date. Funciile din aceast categorie sunt construite n principal pe
funciile statistice (DAVERAGE(), DCOUNT(), DMAX(), DSTV() etc.) i o serie de funcii
matematice (DSUM(), DPRODUCT() etc.), realiznd aceste calcule cu valori ale cmpurilor ncrcate
n articolele bazelor de date.
Funciile logice. Aceste funcii sunt printre cele mai folosite funcii Excel, ele oferind
posibilitatea de a aduga noi faciliti logice i de decizie foilor de calcul. Cele mai utilizate funcii din
aceast categorie sunt: =IF(), =AND(), =OR(), =NOT(), =FALSE() i =TRUE().
Funcia IF( ) este cea mai simpl funcie logic avnd totodat i cele mai multe aplicaii
practice. IF() este folosit pentru testarea unor condiii i pentru luarea unor decizii. Formatul general
este =IF(condiie, val_adevr, val_fals), rezultnd faptul c funcia IF( ) folosete trei argumente:
testul logic i valorile pentru adevrat i pentru fals. n cazul n care condiia evaluat este adevrat,
funcia returneaz rezultatul aciunii val_adevr. n caz contrar este returnat rezultatul aciunii val_fals.
Dac val_fals lipsete, iar condiia este evaluat ca fiind fals se va returna valoarea FALSE. Pentru
testarea unor condiii complexe /multiple se pot construi IF-uri imbricate prin plasarea altor funcii
IF() n val_adevr i /sau n val_fals, sau pot fi folosite funciile AND( ) i OR( ).
Funcia AND( ) are rolul de a reuni condiii n care toate argumentele logice trebuie s
respecte condiia stabilit. Formatul general este =AND(argument1; argument2;), cu precizarea c
argumentele trebuie s fie valori logice unice. Funcia returneaz TRUE dac toate argumentele logice
sunt adevrate i FALSE dac cel puin un argument este fals.
Funcia OR( ) are acelai format cu funcia AND() i este folosit pentru obinerea condiiilor
multiple n care este suficient ca mcar unul dintre argumente s respecte condiia specificat. Altfel,
funcia va returna valoarea FALSE dac nici unul dintre argumentele folosite nu respect condiia.
Funcia NOT( ) inverseaz condiia de test logic n cadrul unei funcii IF(). Formatul general
este =NOT(argument), funcia avnd rolul de a inversa valoarea argumentului de la TRUE la FALSE
i invers.
Funciile TRUE( ) i FALSE( ) returneaz ntotdeauna TRUE i respectiv FALSE putnd fi
folosite n construciile utilizatorului chiar i fr parantezele rotunde.
Funcii matematice. Acest tip de funcii ofer faciliti pentru efectuarea unei game deosebit
de variate de calcule matematice, tiinifice, inginereti etc. n calculele economice sunt utilizate:
=SUM(), =SUMIF(), =PRODUCT(), =INT(), =ROUND().
Funcia SUM( ) este cea mai utilizat funcie, motiv pentru care n bara de instrumente
Standard este disponibil pictograma AutoSum- specializat n nsumarea coninutului celulelor unei
foi de calcul. Prin AutoSum, implicit, este nsumat coninutul numeric al celulelor plasate la stnga sau
deasupra celulei curente. Pentru o totalizare rapid a fiecrei coloane dintr-un tabel, se selecteaz tot
tabelul (cu mouse-ul sau cu combinaia Ctrl+Shift+*), dup care se activeaz AutoSum. Procedura
funcioneaz i pentru domenii neadiacente. Dup selectarea acestora, executnd clic pe AutoSum,
totalurile vor aprea la baza coloanelor sau n dreapta liniilor selectate. Funcia SUM() are formatul
general =SUM(argment1;argument2;) i calculeaz suma argumentelor specificate (maxim 30).
Funcia SUMIF( ) calculeaz suma tuturor celulelor dintr-un domeniu care verific o condiie
stabilit. Formatul general este =SUMIF(domeniu, condiie, domeniu_sum). ntotdeauna condiia este
precizat sub forma unui ir de caractere inclus ntre ghilimele.
58
Funcii de cutare i referire. Funciile din aceast categorie asigur cutarea i returnarea unor
valori dintr-un anumit domeniu. n aplicaiile economice cele mai utilizate funcii de acest tip sunt
=VLOOKUP() i =HLOOKUP().
Funcia HLOOKUP( ) permite realizarea cutrilor pe orizontal, pe rndul din partea de sus
a unui tabel, pn la gsirea unei valori de comparare adecvate. Formatul general este:
=HLOOKUP(val_cutat, matrice_tabel, nr_linie_index, dom_cutare). Funcia ncepe cutarea
valorii specificate n prima linie a domeniului definit, dup care cutarea continu, pe vertical i se
oprete n linia specificat prin nr_linie_index. Domeniul de cutare este o valoare logic opional
(TRUE (implicit) sau FALSE) i permite returnarea exact a valorii cutate sau a unei valori
aproximative.
Funcia VLOOKUP( ) efectueaz cutarea pe vertical a unui element n coloana cea mai din
stnga a unui domeniu dintr-o tabel indexat. Formatul este asemntor cu cel al funciei
HLOOKUP(). Dac nu este gsit valoarea dorit, funcia va returna, urmtoarea valoare mai mare,
dect cea cutat.
59
Funcia PV(). O societate de asigurri ofer polie de asigurare prin care asiguratul poate s
beneficieze de 18.000 Euro, cu condiia s se plteasc trimestrial, timp de 15 ani cte 150 . Dobnda
la depozitele n Euro este de 5,5% pe an i se consider constant n aceast perioad. Care este
valoarea real (prezent) a unei astfel de polie de asigurare? (figura 3.39)
Funcia IRR(). Un investitor dispune de 100.000.000 lei i i investete n comerul cu
amnuntul. El prognozeaz s obin de pe urma acestei investiii, n urmtorii 4 ani, urmtoarele
venituri 35.000.000 lei, 27.500.000 lei, 29.000.000 lei i 45.000.000 lei. S se calculeze rata intern de
rentabilitate a investiiei, aproximarea rezultatului fiind de 10%. Reamintim c investiia iniial
60
trebuie introdus cu semnul minus, fiind o plat. Modelul proiectat pentru acest exemplu este
prezentat n figura 3.40.
% spor vechime
0
5%
10%
15%
20%
25%
61
n figura 3.42 a fost proiectat un model n care s-a folosit funcia IF() n combinaie cu o alt
funcie logic AND() pentru a verifica apartenena la un anumit interval a valorilor vechimii exprimat
n ani. Funcia a fost construit pentru primul salaria din list (celula E6), apelndu-se adresele relative
pentru valorile aferente vechimii i salariului de baz. n bara de formule este afiat funcia IF()
pentru celula E6:
=IF(C6<5;0;IF(AND(C6>=5;C6<10);D6*5%;IF(AND(C6>=10;C6<15);D6*10%;
IF(AND(C6>=15;C6<20);D6*20%;D6*25%))))
Din E6 funcia este copiat pentru toi salariaii, n celulele coloanei Valoare spor vechime.
Funcii de cutare: VLOOKUP(), HLOOKUP()
Funcia VLOOKUP. Din statul de plat simplificat, pentru o marc specificat s se
gseasc Numele i prenumele i Salariul de baz. Respectnd restriciile funciei de cutare pe
vertical, prima coloan este ordonat ascendent (ordinea cresctoare numerelor de marc a
salariailor). n celula A22 se va introduce numrul de marc dorit, iar n celulele B22 i C22 sunt
construite funciile Vlookup() de gsire a datelor cutate (figura 3.43).
Funcia HLOOKUP(). Din situaia centralizatoare a vnzrilor pe raioane, n perioada 20012005, s se afle care a fost, n anul 2004, volumul vnzrilor la raionul Jucrii. n figura 3.44 n bara
de formule este afiat funcia Hlookup() i argumentele folosite pentru B18.
62
Chart Wizard, fie din bara de instrumente Standard, prin pictograma Chart Wizard, fie din meniul
Insert, prin opiunea Chart (figura 3.45).
63
64
Implicit, sunt reprezentate datele din domeniul selectat. Pagina Series permite stabilirea sau
modificarea explicit a fiecrei serii de date. Este posibil i adugarea (cu butonul de comand Add),
sau eliminarea (cu butonul de comand Remove) unor serii de date n /din grafic. n zona Name pot fi
atribuie sau pot fi modificate numele seriilor de date reprezentate n grafic. De asemenea, pot fi
modificate etichetele axei OX (figura 3.49).
stabilirea modului de afiare a etichetelor pentru axa OX i dac vor fi sau nu afiate
valorile pentru axa OY, (n cazul graficelor 2D) sau pentru axa OZ, (n cazul graficelor
3D) Axes;
65
stabilirea poziiei legendei i dac aceasta va fi sau nu afiat Legend (figura 3.52);
plasarea sau nu a unor etichete de tip text sau valoare corespunztoare datelor reprezentate
- Data Labels (figura 3.53);
plasarea sub grafic a unui tabel ce conine datele din domeniul reprezentat - Data Table
(figura 3.54).
n ultimul pas, al patrulea - Chart Location, se stabilete locaia n care va fi salvat graficul
obinut (figura 3.55). Graficul poate fi plasat ca un obiect n foaia de calcul curent (As object in), sau
salvat ntr-o foaie de calcul special Chart<n>, care va fi plasat n registrul de lucru activ, naintea
foii de calcul curente. Foaia cu grafic va avea plasat n bara meniu, meniul Chart care organizeaz o
serie de opiuni care permit, n principal, reluarea independent a fiecrui pas prezentat mai sus.
66
fiecare nregistrare este memorat pe o singur linie i fiecare cmp este definit ca o
singur coloan;
listele au un antet opional (header row) constituit din prima linie din list i care indic
numele cmpurilor listei;
pentru cmpuri este recomandat folosirea unor nume scurte prin care s se sugereze
coninutul informaional al datelor ncrcate;
ntr-o list pot fi organizate orice tip de date: text, cifre, date calendaristice, imagini etc.;
datele unei coloane trebuie s fie de acelai tip, ele fiind valori pentru un singur cmp;
pentru fiecare articol trebuie s existe cel puin un cmp ncrcat cu date.
Organizarea i gestionarea datelor dintr-o list sau baz de date se realizeaz cu ajutorul
opiunilor meniului Data.
67
Formularul de date ofer posibilitatea cutrii i editrii, la un moment dat, a unei singure
nregistrri, n timp ce opiunea Filter afieaz, n acelai timp, toate nregistrrile care respect
68
criteriul /criteriile stabilite. La rndul lor, filtrele pot fi obinute cu ajutorul comenzilor AutoFilter i
Advanced Filter.
Opiunea All este implicit, n list fiind prezente toate nregistrrile. n plus, dup o filtrare
anterioar, aceast opiune reface lista iniial.
Opiunea Top 10 poate fi folosit numai n coloanele ce conin numere sau date calendaristice
i permite extragerea celor mai mari sau mai mici valori din list pe baza unui numr sau a unui
procent ales de utilizator.
Custom permite crearea unor condiii folosind operatori relaionali (>, <, >=, <= etc.). Pentru
expresii compuse se folosesc butoanele de opiuni AND sau OR.
Blanks permite afiarea tuturor nregistrrilor din baza de date care, n coloana curent, conin
celule libere (n care nu au fost introduse date). NonBlanks are efectul invers opiunii Blanks afind
nregistrrile ce conin date n coloana curent de filtrare.
Valorile cmpurilor permit extragerea din baza de date numai a articolelor care conin
valoarea selectat. De exemplu, din baza de date s se extrag doar articolele care conin informaii
privind economitii. Se va realiza un filtru pe cmpul Functie pentru articolele care conin irul de
caractere economist (figura 3.61).
Prin AutoFilter se pot construi condiii orict de complexe singurul aspect negativ al opiunii
putndu-l constitui suprascrierea rezultatelor filtrului peste datele de intrare. Cu opiunea Show All,
din comanda Filter nregistrrile pot fi reafiate.
69
70
Copy to (pentru zona datelor de ieire). Zona Copy to poate fi utilizat numai dup
selectarea butonului de opiuni Copy to another location.
grupul de intrare care conine baza de date sau o parte din aceasta;
cmpul a crui valori vor fi supuse prelucrrii; cmpul se precizeaz prin numrul de
ordine a coloanei pe care se gsete sau prin numele su, scris ntre ghilimele;
criteriul este zona n care se specific restricia /restriciile de selecie. Aceast zon
include pe o linie numele cmpului / cmpurilor (aa cum este scris n zona grupului de
intrare), i n celula /celulele de sub numele de cmp /cmpuri se precizeaz condiia de
selecie propriu-zis.
n figura 3.63 sunt exemplificate cteva funcii de lucru cu bazele de date.
71
s schimbe o dat de intrare pentru a vedea efectul pe care l produce asupra uneia sau mai multor
formule /funcii;
s schimbe dou date de intrare pentru a vedea efectul produs asupra unei singure formule /funcii.
Pentru aceasta se utilizeaz comanda Table din meniul Data care deschide fereastra Table
unde n zonele Row input cell i /sau Column input cell utilizatorul precizeaz celula sau celule n
funcie de care Excel va realiza simularea. Realizarea simulrilor presupune o formul /funcie n care
se folosete variabila /variabilele ce se modific.
Pentru exemplificare s-a utilizat funcia PMT() care stabilete plata constant de efectuat
pentru un credit /mprumut pe o perioada determinat (un numr de ani /luni) i cu o rat a dobnzii
constant.
se genereaz, pe coloan (n zona B12:B25) o serie de poteniale valori ale ratei dobnzii
(ntre 8,5% i 15%);
cu o linie mai sus, n coloana urmtoare (celula C11) se editeaz funcia din celula (C8);
n fereastra Table se precizeaz, n zona Column input cell, celula din zona datelor de intrare
care conine variabila ce se modific ($C$6);
se activeaz butonul de comand OK.
Cnd se modific dou variabile (figura 3.65), paii pentru realizarea simulrii sunt:
72
se genereaz, pe coloan (n zona B12:B25) o serie de poteniale valori ale ratei dobnzii
(ntre 8,5% i 15%), iar pe linie (C11:I11) o serie de poteniale valori pentru numrul de ani
(ntre 10 i 22);
n celula B11 (situat n colul stnga-sus a zonei de simulare cu dou variabile) se reediteaz
funcia sau coninutul celulei folosit la simulare (C8);
n fereastra Table se precizeaz n zona Row input cell celula care conine variabila ce se
modific pe linie (numrul de ani - $C$5), iar n zona Column input cell celula din zona
datelor de intrare care conine variabila ce se modific pe coloan (rata dobnzii - $C$6);
Observaie! S-a forat plasarea ferestrei Table pentru a se observa care dintre variabile se
modific pe coloan i care pe linie.
Dup obinere, tabela nu poate fi modificat datele din celulele ei fiind stabilite pe baza altor
date considerate date de intrare.
73
luna decembrie s se fi nregistrat un profit de 8.800.000? n figura 3.66 este prezentat foaia de
calcul i graficul obinut pe baza datelor de start.
Pentru a realiza o astfel de simulare, dup selectarea seriei de date pe care urmeaz s o
aducem la o alt valoare (prin dublu clic de pe bara corespunztoare profitului din luna decembrie), se
folosete tehnica drag&drop i prin tragere n sus /jos se stabilete valoarea int /scop (figura 3.67).
Deoarece profitul se obine pe baza unei formule (Venituri Cheltuieli), automat Excel activeaz
instrumentul Goal Seek cernd precizarea celulei din formul care s fie modificat pentru a se ajunge
la valoarea dorit a profitului (figura 3.68).
74
75
Rezumat
Programele de calcul tabelar sunt instrumente specifice care permit utilizatorului s-i rezolve
singur problemele de prelucrare automat a datelor.
Modelele de rezolvare a aplicaiilor sunt proiectate n foile de calcul, care sunt organizate n
registre de lucru.
Celulele foilor de calcul se identific prin adrese (relative, absolute i mixte). Introducerea datelor
se realizeaz n celula curent.
Graficele sunt reprezentri sugestive ale datelor organizate n foile de calcul.
Apelnd la teoria jocurilor, n Excel sunt posibile analize de tip What if ?- Ce se ntmpl
dac? folosind fie datele din tabele, fie elementele unui grafic.
10
20
30
10
20
30
=IF(E7+$D$7>35,DA,NU)
76
Capitolul 4
Obiective:
vi.
vii.
viii.
ix.
Rezultate ateptate:
x.
xi.
xii.
xiii.
xiv.
xv.
77
78
Data 1
Raport 1
Data 2
Data 3
FIIER 1
PRELUCRARE 1
Data 4
Data 2
Raport 4
Data 4
FIIER 2
Data 5
Fiier de
legturi
PRELUCRARE 2
Raport 3
Raport 2
Data 6
Data 1
FIIER 3
PRELUCRARE 3
Raport 5
PRELUCRRI
IEIRI
Data 5
Data 7
Data 8
DATE
FIIERE
79
modificarea simultan a unei aceleai date. Rezolvarea acestui gen de conflicte presupune existena
unui program-supervizor al prelucrrilor, care este greu de realizat cu o multitudine de fiiere, create la
distan n timp i, n formate diferite.
Problemele de securitate in de dificultatea crerii unui mecanism care s protejeze pe deplin
datele din fiiere de accesul neautorizat.
Probleme legate de integritatea datelor. Informaiile stocate n fiiere sunt supuse la
numeroase restricii semantice. Toate aceste restricii alctuiesc mecanismul de integritate a datelor,
deosebit de complex n mediile de lucru multi-utilizator i eterogene.
Inabilitatea de a obine rspunsuri rapide la probleme ad-hoc simple.
Costul ridicat se datoreaz gradului mare de redundan a datelor, eforturilor deosebite ce
trebuie depuse pentru interconectarea diferitelor tipuri de fiiere de date i pentru asigurarea
funcionrii sistemului n condiiile respectrii unui nivel minim de integritate i securitate a
informaiilor.
Inflexibilitatea fa de schimbrile ulterioare, ce sunt inerente oricrui sistem informaional.
Modelarea inadecvat a lumii reale.
Aceste dezavantaje sunt mai mult dect convingtoare, nct v putei ntreba dac au existat
aa incontieni care s-i arunce banii pe apa... fiierelor independente. Ei bine, o serie de aplicaii
dezvoltate n anii '60 sau '70 au fost motenite i folosite pn zilele noastre. De ce ? Datorit
consistentelor sume investite, care au putut fi amortizate (trecute pe costuri) doar n ani buni, chiar
decenii. Un alt motiv a fost ns funcionalitatea i viteza unor asemenea aplicaii. i, nu n ultimul
rnd, un mediu economic relativ aezat (v dai seama c nu de mediul nostru economic este vorba),
n care nu au fost necesare modificri majore ale procedurilor i funciilor eseniale.
80
B A Z A DE D A T E
Fiier de date 1
Dicionar
de date
Fiier de date 2
Fiier de date n
Aplicaia 1
Aplicaia 2
Aplicaia 3
Utilizator A1
Aplicaie
Utilizator A2
81
Utilizator B1
Comenzi
autonome
Aplicaie
Schem extern
Imagine A
A
(nivel extern)
Utilizator B3
Aplicaie
Comenzi
autonome
Imagine B
Schem extern
B
(nivel extern)
Interfa A
dintre nivelele
global i extern
Schema
conceptual
(global)
Utilizator B2
Interfa B
dintre nivelele
global i extern
Imagine global
(nivel global)
SISTEM DE
GESTIUNE A
BAZEI
DE DATE
Definirea structurii
interne de stocare
(Schema intern)
82
consisten ori de cte ori diverse aspecte ale proceselor sau fenomenelor reale sunt preluate
n baz sub forma a doua sau mai multor entiti sau atribute, aceste entiti/atribute trebuie s
fie n concordan unele ce celelalte, s respecte relaiile existente ntre aspectele
proceselor/fenomenelor reale;
83
84
Modelului relaional i este asociat teoria normalizrii, care are ca scop prevenirea
comportamentului aberant al relaiilor n momentul actualizrii lor, eliminarea datelor redundante i
nlesnirea nelegerii legturilor semantice dintre date.
Dei IBM a fost prima care a iniial un proiect destinat elaborrii unui SGBD relaional
(System/R, ncepnd cu 1974), prima firm care a lansat primul SGBDR comercial a fost Relational
Software Inc., astzi Oracle. nfiinarea firmei a avut loc n 1977, iar lansarea produsului n 1979.
Impunerea pe pia a SGBD-urilor grefate pe modelul relaional a fost mult mai dificil dect s-ar
putea nelege astzi. Abia n deceniul 9, datorit vitezei ameliorate, securitii sporite i mai ales
productivitii dezvoltatorilor de aplicaii, modelul relaional a ctigat supremaia.
Exist o larg tipologie a SGBDR-urilor, aa nct orice categorisire i are riscul su. Cele
mai accesibile i, implicit, cele mai utilizate sunt SGBD-urile dedicate iniial uzului individual:
Access, Paradox, Visual FoxPro. Astzi, multe dintre acestea au caracteristici profesionale i pot fi
folosite la dezvoltarea aplicaiilor pentru simulant a zeci de utilizatori.
Pentru aplicaiile complexe din bnci, corporaii, organizaii i instituii de mari dimensiuni sau impus SGBDR-urile de "categoria grea": Oracle, DB2 (IBM), Informix (DB2), Sybase, SQL Server
(Microsoft). Acestea sunt mult mai robuste, mult mai fiabile, dar i costisitoare.
n ultimul timp i-au fcut apariia, ca alternative la marii coloi, aa zisele Free-DBMS-uri,
precum PostgreSQL, MySQL, Interbase etc. Acestea ruleaz, de obicei, pe sisteme de operare de tip
Linux (foarte ieftine) i se ntrevd ca adversari serioi ai marilor productori.
85
ntr-o tabel destinat datelor generale ale angajailor, pentru atributul Sex, domeniul
este alctuit din dou valori: Femeiesc i Brbtesc;
domeniul atributului Judet este alctuit din numele fiecrui jude (plus Bucureti).
domeniul unui atribut precum PreUnitar, care se refer la preul la care a fost vndut un
produs/serviciu, este cu mult mai larg, fiind alctuit din orice valoarea cuprins ntre 1
i 99999999 lei (ceva mai noi).
i acum, cteva senzaii tari (urmeaz un pic de matematic) ! Dac notm cu D1 domeniul
atributului CodClient, cu D2 domeniul atributului NumeClient, cu D3 domeniul pentru Adresa, i cu
D4 domeniul atributul CodPostal, se poate spune c fiecare linie a tabelei CLIENI este un tuplu de
patru elemente, iar relaia n ansamblu corespunde unui subansamblu din ansamblul tuturor tuplurilor
posibile alctuite din patru elemente, ansamblu care este produsul cartezian al celor patru domenii.
n general, orice relaie R poate fi definit ca un subansamblu al produsului cartezian de n domenii Di:
R D1 x D2 x D3 x ...x Dn ,
n fiind denumit gradul sau ordinul relaiei. Relaiile de grad 1 sunt unare, cele de grad 2 - binare, ...,
cele de grad n - n-are. Aceast definiie pune n eviden aspectul constant al relaiei, de independen
n timp (se spune c n acest caz relaia este definit ca un predicat).
86
n care:
dk1 este o valoare n D1, dk2 este o valoare n D2, , dkn este o valoare n Dn;
n - reprezint ordinul lui R;
m - cardinalitatea lui R.
Pentru un (mic) plus de claritate, vezi figura 4.6.
87
n cel mai bun caz, pentru cel care le-a instituit). Partea cea mai enervant este c respectarea
restriciilor este (supra)vegheat de o anumit autoritate nzestrat cu anumite instrumente de
constrngere, de la bastoane de cauciuc, la creterea i scderea impozitelor, salariilor, banilor de
buzunar etc.
Ei bine, n bazele de date, restriciile sunt ceva mai acceptabile. Cei care lucreaz cu bazele de
date sunt foarte interesai n declararea restriciilor, pentru c, odat definite, de respectarea lor se va
ngriji sistemul de gestiune a bazelor de date (adic programele de lucru cu bazele de date). Esenial
este c, ajutai de restricii, putem crete gradul de corectitudine i de ncredere al datelor din baz. n
cele ce urmeaz vor fi prezentate pe scurt cele mai importante restricii definibile ntr-o baz de date
relaional: restricia de domeniu, de atomicitate, de unicitate, referenial i restriciile-utilizator.
4.3.2. Atomicitate
Conform teoriei bazelor de date relaionale, orice atribut al unei tabele oarecare trebuie s fie
atomic, n sensul imposibilitii descompunerii sale n alte atribute. Implicit, toate domeniile unei baze
de date sunt musai atomice (adic elementare). n aceste condiii, se spune c baza de date se afl n
prima form normal sau prima form normalizat (1NF).
Astzi, atomicitatea valorii atributelor a devenit o int predilect a atacurilor dumnoase la
adresa modelului relaional, datorit imposibilitii nglobrii unor structuri de date mai complexe,
specifice unor domenii ca: proiectare asistat de calculator, baze de date multimedia etc. Muli autori,
dintre care merit amintii cu deosebire Chris J. Date i Hugh Darwen, se opun ideii de atomicitate
formulat de Codd.
88
4.3.3. Nenulitate
Modelul relaional accept ca, atunci cnd nu se cunoate valoarea unui atribut pentru o
anumite entitate, sau cnd pentru acel obiect, entitate, persoan etc. atributul este inaplicabil, s se
foloseasc (meta)valoare NULL. Celui de-al treilea client din figura 4.4 nu i cunoate adresa. Dac am
avea o tabel PRODUSE cu atributele CodProdus, DenumireProdus, UM, Culoare, este posibil ca,
pentru anumite sortimente, cum ar tricouri, cmi, jachete, atributul s fie important, n timp ce
pentru altele, precum vodc, cafea, lapte atributul culoare s nu furnizeze nici o informaie, adic s nu
fie aplicabil. Iar dac laptele poate fi doar alb, vodca chiar c nu are culoare (sunt foarte muli
specialiti n acest domeniu, i putei ntreba !).
89
NumeClient din tabela CLIENI i se interzic valorile nule, prin setarea opiunii Required pe valoarea
Yes, n timp ce atributul Adresa din aceeai tabel poate avea valori NULL, Required fiind setat pe
valoarea No.
Ca regul, atributele importante, ce in de identificarea sau caracterizarea unei entiti, proces,
fenomen, precum i cele implicitate n calculul unor informaii importante, sunt declarate NOT NULL,
iar atributele fr importan deosebit pot fi mai relaxate.
compoziie minimal: atunci cnd cheia primar este compus, nici un atribut din cheie
nu poate fi eliminat fr distrugerea unicitii tuplului n cadrul relaiei; n cazuri
limit, o cheie poate fi alctuit din toate atributele relaiei.
Domeniul unui atribut care este cheie primar ntr-o relaie este denumit domeniu primar.
Dac ntr-o relaie exist mai multe combinaii de atribute care confer unicitate tuplului, acestea sunt
denumite chei candidate. O cheie candidat care nu este identificator primar este referit ca i cheie
alternativ.
n tabela CLIENI cheia primar este simpl - CodClient, CodClient reprezint un numr unic
asociat fiecrei firme creia i-am fcut vnzri. Exist ns suficiente cazuri n care cheia primar este
compus din dou, trei .a.m.d. sau, la extrem, toate atributele relaiei. S lum spre analiz o relaie
PERSONAL care conine date generale despre angajaii firmei. Fiecare tuplu al relaiei se refer la un
angajat, atributele fiind: Nume, Prenume, DataNaterii, Vechime, SalariuTarifar.
- atributul Nume nu poate fi cheie, deoarece chiar i ntr-o ntreprindere de talie mijlocie, este
posibil s existe doi angajai cu acelai nume.
- dac apariia a dou persoane cu nume identice este posibil, atunci apariia a dou persoane
cu acelai Prenume este probabil.
- nici unul din aceste atributele DataNaterii, Vechime, SalariuTarifar nu poate fi "nzestrat"
cu funciunea de identificator.
90
n acest caz, se ncearc gruparea a dou, trei, patru .a.m.d. atribute, pn cnd se obine
combinaia care va permite diferenierea clar a oricrei linii de toate celelalte.
Oricare din cele dou combinaii prezint riscul violrii restriciei de entitate, deoarece este
posibil ca, la preluarea unui angajai n baz, s nu i se cunoasc adresa sau data naterii, caz n care
atributul respectiv ar avea valoarea NULL. Dificultile de identificare fr ambiguitate a angajailor au
determinat firmele ca, la angajare, s aloce fiecrei persoane un numr unic, numr denumit Marc.
Prin adugarea acestui atribut la cele existente, pentru relaia PERSONAL problema cheii primare este
rezolvat mult mai simplu. Actualmente, sarcina este simplificat i prin utilizarea codului numeric
personal (CNP), combinaie de 13 cifre care prezint avantajul c rmne neschimbat pe tot parcursul
vieii persoanei.
Revenim la tabela CLIENI. Dac n ara noastr s-ar respecta regula: nu pot exista dou
firme cu aceeai denumire, atunci tabele mai are, pe lng CodClient, o cheie candidat NumeClient.
ntruct CodClient a fost preferat drept cheie primar, NumeClient va fi cheie alternativ. n Access
un atribut de tip cheie primar are n dreptul su o cheie (de yal) vezi figura 4.8. Cheile alternative
sunt declarate prin setarea opiunii Indexed pe valoarea Yes (NoDuplicates).
91
Observaii
1. Pentru muli utilizatori i profesioniti ai bazelor de date, denumirea de "relaional"
desemneaz faptul c o baz de date este alctuit din tabele puse n legtur prin
intermediul cheilor strine. Aceasta este, de fapt, a doua accepiune a termenului de BDR,
prima, cea "clasic", avnd n vedere percepia fiecrei linii dintr-o tabel ca o relaie ntre
clase de valori.
92
4.3.6. Restricii-utilizator
Restriciile utilizator mai sunt denumite i restricii de comportament sau restricii ale
organizaiei. De obicei, aceste restricii iau forma unor reguli de validare la nivel de atribut, la nivel de
linie/tabel sau a unor reguli implementate prin declanatoare (triggere).
Reguli la nivel de atribut
O restricie la nivel de atribut poate preveni introducerea n baza de date a unor valori din alte
intervale dect cele stabilite, n alte formate dect cele acceptate etc. Forma clasic a unei restricii la
nivel de atribut este o expresie n care apar constante, funcii-sistem i, nu n ultimul rnd, atributul
respectiv. La orice editare a atributului cu pricina (declanat n cazul inserrii unei linii n tabela din
care face parte, sau la modificarea sa) expresia este evaluat i dac rezultatul evalurii este TRUE
(adevrat), atunci inserarea/modificarea este permis, iar dac rezultatul este FALSE, atunci
inserarea/modificarea este blocat.
n partea stng a figurii 4.10 este ilustrat o regul de validare conform creia n tabela
CLIENI valorile atributului CodClient trebuie s fie mai mari dect 1000. Rubrica Validation Rule
este cea n care apare expresia-restricie - [CodClient]>1000 - (observai c numele atributului este
scris ntre paranteze unghiulare), iar n rubrica Validation Text se indic mesajul care va aprea pe
ecran atunci cnd se ncalc restricia - Cel mai mic cod de client acceptat este 1001 !.
93
n dreapta figurii apare o regul ceva mai impresionant, prin care literele din valorile
atributului NumeClient sunt obligatoriu majuscule. Expresia este de-a dreptul impresionant StrComp(Left(UCase([NumeClient]),1),Left([NumeClient],1),0) = 0 i nu vom strica vraja pn n
capitolul urmtor.
Reguli la nivel de nregistrare
Expresia care definete o restricie la nivel de nregistrare poate conine dou sau mai multe
atribute i este evaluat la inserarea sau modificarea oricrei linii din tabel. Tabela FACTURI
conine, printre altele dou atribute valorice, unul pentru pstrarea valorii totale (inclusiv TVA)
facturii respective i un altul care indic doar cuantumul TVA colectate pentru factur. Majoritatea
produselor i serviciilor comercializate la noi n ar au un procent al taxei pe valoarea adugat de
19%. Exist, ns, i produse la care procentul poate fi 9% sau chiar scutite de TVA (0%). De aceea,
TVA colectat pentru o factur este mai mic poate fi egal sau dect 19% din valoarea fr tva. S
punem sub form de formul: ValoareaTotal = ValoareaFrTVA + TVA. Dac factura conine
numai produse cu 19%: ValoareaTotal = ValoareaFrTVA + 0.19 * ValoareaFrTVA, sau
ValoareaTotal = 1.19 * ValoareaFrTVA. Dar tabela noastr are doar atributele ValoareTotal i
TVAColectat, aa c nlocuim ValoareaFrTVA prin diferena celorlalte dou. Scriem:
ValoareTotal = 1.19 * (ValoareTotal TVAColectat), i dup calcule de matematic superioar,
TVAColectat * 1.19 = 0.19 * ValoareTotal, altfel spus TVAColectat = ValoareTotal * 0.19 / 1.19.
Prin urmare, regula este TVAColectat <= ValoareTotal * 0.19 / 1.19, iar n Access
declararea sa este ilustrat n figura 4.11.
94
Coninut celor trei tabele, ce vor constitui suportul editrilor i interogrilor din
capitolele urmtoare sunt prezentate 4.13.
95
Figura 4.13. Coninutul celor trei tabelei ale bazei de date VNZRI
Rezumat
Modelul relaional al datelor se poate defini printr-o serie de structuri de date (relaii alctuite
din tupluri), operaii aplicate asupra structurilor de date (selecie, proiecie, jonciune
etc.) i reguli de integritate care s asigure consistena datelor (chei primare, restricii
refereniale . a.). n prezent se manifest o puternic orientare a relaionalului ctre
aplicaii web i orientarea pe obiecte. Au aprut SGBD-uri gratuite (free-database),
precum PostgreSQL, MySQL etc.
Noiunea esenial a acestui model de organizare a datelor este relaia, vzut fie ca
subansamblu al produsului cartezian de n domenii (unde n este numrul atributelor ordinul relaiei), fie ca ansamblu de m tupluri (unde m este denumit cardinalitate).
Valoarea oricrui atribut (fiecare atribut are un nume distinct) ntr-un tuplu oarecare conine a
singur valoare (o valoare atomic), valoare ce face parte dintr-un domeniu.
Fiecare tuplu este distinct, adic nu pot exista dou tupluri identice, iar Ordinea tuplurilor nu
influeneaz coninutul informaional al relaiei.
Restricia de domeniu se refer la ansamblul valorilor autorizate pentru un atribut. Domeniul
poate fi alctuit din valori finite (sexul unei persoane, judeele rii) sau infinite
(valoarea unei facturi etc.)
Conform modelului relaional, fiecare relaie are un atribut sau un grup de atribute ale cror
valori nu se repet. Aceasta este restricia de unicitate. Noiunile legate de aceast
restricie sunt: chei candidat, chei primare i chei alternative.
Restricia referenial se instituie ntre dou tabele, prin intermediul unui atribut comun (de
fapt, numele poate s difere, dar s aib aceeai semnificaie). n virtutea acestei
restricii, se interzice apariia de valori ale cheii strine care s nu re regseasc n tabela
printe.
96
CAPITOLUL 5
Obiective:
i.
crearea practic a tabelelor ce compun o baz de date,
concomitent cu declararea cheilor i restriciilor aferente.
ii.
Actualizarea, interogarea bazelor de date i obinerea de rapoarte.
iii. Elaborarea de proceduri
iv.
Utilizarea de meniuri pentru integrarea procedurilor i
programelor n aplicaii
Rezultate ateptate:
i.
Familiarizarea cu mediul de lucru ACCESS.
ii.
Obinerea unei baze de date, a cheilor primare i stabilirea
legturilor permanente dintre tabele.
iii. Dezvoltarea de proceduri i aplicaii economice.
97
asigur afiarea pe ecran sau tiprirea la imprimant a datelor ntr-un format uor de neles;
meniul Start (figura 5.1), selectnd din meniul Programs opiunea Microsoft Office ACCESS
2003,
meniul rapid (figura 5.2), selectnd comanda New i apoi opiunea Microsoft Office ACCESS
Application;
shortcut-ul de pe Desktop (figura 5.3), accesnd pictograma de pe desktop, dac a fost creat o
scurttur ACCESS 2003.
98
Interfaa ACCESS
Dialogul utilizator-sistem se realizeaz, prin intermediul interfeei ACCESS constituit, n
principal, din bara de instrumente Database, bara meniu i panoul de activiti.
Bara de instrumente Database, pe lng butoanele prezente n barele Standard ale altor
produse MS Office, are n componen o serie de butoane specifice:
OfficeLinks
La deschiderea sesiunii este activat, n dreapta ecranului, panoul de activiti Task Pane care
ofer o serie de legturi, ce difer n funcie de operaia n curs de derulare (figura 5.4):
Afiarea sau ascunderea panoului de activiti se realizeaz din meniul View, prin comanda
Task Pane.
Dac se opteaz pentru crearea unui nou fiier, Task Pane ofer variantele (figura 5.5):
Blank database - crearea unei baze de date goale care nu conine nici o dat sau orice alte
obiecte (opiunea cea mai des utilizat);
99
From Existing File crearea unei baze de date noi folosind structura unei baze de date
existente;
On my computer construirea unei baze de date dintr-un fiier ablon;
Project using existing data) i Project using new data) - proiectele ACCESS combin
interfaa prietenoas cu utilizatorul a programului ACCESS cu puterea unui server de baze de
date performant, cum este Microsoft SQL Server.
Proiectele ACCESS permit dezvoltarea unor noi aplicaii client-server n urmtoarele situaii
mai complexe:
datele sunt foarte importante; nu se accept nici un fel de pierderi da date i nici o
indisponibilitate temporar a datelor;
datele vor fi folosite simultan de mai multe persoane. ACCESS admite cel mult 255 de
utilizatori, dar performanele pot fi mult diminuate dac utilizatorii sunt deosebit de activi;
Declararea directorului
curent
n ambele variante este asigurat i nchiderea i salvarea bazei de date deschis n acel
moment.
Tipuri de obiecte n proiectele ACCESS
Un proiect ACCESS se organizeaz n jurul unei baze de date, i poate conine urmtoarele
tipuri de obiecte:
100
Tabele (Tables) reprezint locul n care sunt stocate datele brute ale unei baze de date;
Interogri (Queries) tabele care conin rspunsuri la anumite ntrebri despre date;
Formulare (Forms) interfee de introducere i afiare a datelor;
Rapoarte (Reports) faciliti care ofer diferite modaliti de afiare /tiprire a datelor
coninute n tabele;
Pagini (Pages) sunt asemntoare formularelor, n plus ele pot fi afiate ntr-un browser
Web. Astfel, ACCESS este prima BD care permite transferul datelor pe un site Web;
Macro-uri (Macros) - sunt liste de comenzi pe care ACCESS le poate salva i executa;
Module (Modules) sunt obiecte care conin coduri de programare, scrise n VBA.
Modulele ofer utilizatorilor avansai posibilitatea de a personaliza bazele de date i
coninutul acestora.
Text este folosit pentru stocarea irurilor de cel mult 255 de caractere alfanumerice
(litere, numere, simboluri etc.);
Memo este indicat pentru a stoca iruri care depesc 255 de caractere, nu sunt
structurate i /sau au un anumit caracter de confidenialitate; coninutul cmpurilor memo
nu este vizualizat atunci cnd se afieaz coninutul tabelelor;
Number accept doar date numerice (ntregi sau cu zecimale), cu un numr suficient de
poziii, pentru aproape toate datele economice. La rndul lor datele numerice pot fi
reprezentate n diferite formate: Byte - General Number, Format Euro, Currency, Fexed,
Standard, Percent, Scientific; Long Integer - General Number, Format Euro, Currency,
Fexed, Standard, Percent, Scientific; Integer - General Number, Format Euro, Currency,
Fexed, Standard, Percent, Scientific; Single - General Number, Format Euro, Currency,
Fexed, Standard, Percent, Scientific; Double - General Number, Format Euro, Currency,
Fexed, Standard, Percent, Scientific; Replication ID; Decimal - General Number, Format
Euro, Currency, Fexed, Standard, Percent, Scientific;
Date /Time General Date este tipul de date folosit pentru a stoca data calendaristic
i/sau timpul i are mai multe formate: Long Date, Medium Date, Short Date, Long Time,
Medium Time, Short Time;
Currency este asemntor datelor numerice, cu deosebirea c accept doar patru digii
pentru partea zecimal. Este conceput pentru a evita erorile de rotunjire, astfel nct
calculele cu bani s fie precise. i datele de acest tip pot avea mai multe formate: General
number, Format Euro, Currency, Fexed, Standard, Percent, Scientific;
101
Yes /No - este conceput pentru a pstra nregistrri simple de tip On /Off;
Ole Object permite stocarea informaiilor ntr-un format accesibil altor programe
(documente Word, foi de calcul Excel, imagini, fiiere cu muzic etc.)
Hyperlink este un tip de date text special conceput pentru a stoca hyperlink-uri ctre
site-uri Web sau alte resurse Internet;
Remarcm disponibilitatea datelor de tip Lookup Wizard care folosite pentru a declara
cmpuri de cutare. Majoritatea bazelor de date organizeaz dou tipuri de tabele: cele care includ
date primare i cele care conin liste de valori folosite n tabele. Aceste tabele auxiliare se numesc
tabele de cutare (lookup tables) i prezint dou avantaje: pun la dispoziia utilizatorului opiuni
consecvente i simplu de utilizat i permit validarea datelor, acceptnd numai datele din tabel.
Observaie
n expresii datele text sunt incluse ntre ghilimele (de exemplu, FEAA),
calendaristice sunt ncadrate de semnul # (de exemplu, #12/18/2005#).
iar datele
O noutate deosebit n ACCESS 2003 o reprezint etichetele inteligente (Smart Tags) care
pot fi aplicate cmpurilor. Aceast facilitate este preluat din Excel care folosete etichete inteligente
pentru a semnaliza erorile din foile de calcul i pentru a oferi soluii posibile. Prin etichete inteligente
se pot accesa informaii de pe Internet sau ndeplini anumite sarcini. n principal, aceste etichete sunt
oferite de Microsoft i cele mai multe dintre ele sunt gratuite.
Locaia n care va fi
salvat BD
Numele BD
Extensia implicit
a BD
102
Pentru crearea unui tabel ACCESS ofer trei posibiliti (figura 5.8):
Obiectele unei BD
Create table in Design view - folosind modul de proiectare a tabelului; este cea mai
puternic i mai flexibil modalitate fiind specificate detaliile fiecrui cmp;
Create table using wizard - apelnd asistentul Table Wizard care precizeaz paii care
trebuie urmai pentru construirea unor tabele obinuite;
Create table by entering date introducnd datele n cmpurile create de ACCESS;
aceast metod este apropiat de modul de lucru n Excel.
Figura 5.10 Fereastra Create table by entering date pentru tabela Clieni
103
Tipuri de abloane
Structuri de articole
Redenumirea unui
cmp
104
Dup stabilirea cmpurilor, n pasul urmtor se precizeaz numele sub care va fi salvat tabela
i modalitatea n care va fi stabilit cheia primar (vezi paragraful 4.3.4), de ctre utilizator sau,
implicit, de ctre ACCESS (figurile 5.13 i 5.14).
Numele tabelei
105
Introducerea datelor n
tabel
Stabilirea cheii
primare
din
bara cu instrumente Database, fie selectnd comanda Primary Key din meniul rapid activat de pe
numele cmpului (figura 5.17). Din lista General se stabilesc proprietile i pentru celelalte cmpuri
(figurile 5.18 i 5.19).
106
107
108
n figura 4.7 am ilustrat modul n care, setnd opiunea Required a proiectantului de tabele
pentru oricare atribut pe valoarea Yes, acelui atribut i se vor interzice valorile nule. Ca o mic
ciudenie a ACCESS-ului, atributele de tip cheie primar apar n macheta proiectantului de tabele ca
avnd proprietatea Required pe No vezi partea stng a figurii 4.8 n timp ce, de fapt, nici un
atribut de tip cheie primar nu poate avea valori nule.
Opiuni pentru
Integritatea
referenial
109
nu se permite modificarea valorii cheii primare din tabela printe dac exist n tabela copil
mcar o nregistrare cu care este n legtur;
nu poate fi introdus nici o valoare a unei chei strine dac respectiva valoare nu exist deja ca
i cheie primar n tabela printe.
Dac se alege opiunea Cascade Update Related Fields orice modificarea a unei chei primare n
tabela primare va atrage modificarea n cascad a tuturor cheilor strine n nregistrrile copil, iar
bifnd opiunea Cascade Delete Related Records la tergerea unei nregistrri din tabela printe se
vor elimina automat toate nregistrrile copil.
Din fereastra Database pot fi realizate diverse operaii cu tabelele i nregistrrile ncrcate n
acestea. Pentru a vizualiza coninutul unei tabele este suficient un dublu click de mouse de pe numele
tabelei. La afiare unele tabele au n stnga o coloan n care apare semnul plus (+) sau spaiu. Semnul
plus n dreptul unei nregistrri semnific faptul c aceasta este legat prin chei strine de nregistrri
aflate n alte tabele. Click pe semnul plus determin schimbarea n semnul minus (-) i afiarea
nregistrrilor nrudite (copil) ntr-o subfoaie de date (figura 5.25).
Semnul +
nregistrarea are cel
puin o nregistrare
nrudit ntr-o alt
tabel
110
111
Atunci cnd numrul de linii dintr-o tabel este imens, iar datele trebuie modificate dup
criterii riguroase, este necesar recurgerea la interogri pe care le vom discuta n paragraful 5.4 i
capitolul 6.
112
Urmare a aciunii 2 din figura precedent se va activa fereastra New Form (figura 5.29), n
care va trebui s selectm varianta de lucru pentru organizarea cmpurilor (1) i tabela de legtur (2)
aa cum se prezint n figura 5.29.
2
3
4
2
113
5. Putem modifica foarte uor, chiar prea uor, valorile oricrui cmp cu respectarea
restriciilor de integritate referenial declarate deja;
6. Putem realiza operaii de sortare, filtrare, cutare, tergere ( ) i adugare ( ) din
butoanele din linia de instrumente. Adugarea este posibil i din butoanele de navigare cu
acelai buton
Dup crearea formularului de mai sus este necesar s-l salvm cu un nume, n cazul nostru i
vom da numele Clienti. Acest lucru se realizeaz prin activarea opiunii Save din meniul File sau
direct click pe discheta. Rezultatul va fi apariia ferestrei de salvare a formularului cu un nume
recomandat de ACCESS, n cazul nostru clienti. Dac dorim s pstrm numele, nu ne rmne dect
s dm click pe butonul Ok. n caz c dorim s schimbm numele, vom introduce numele nou i vom
da Ok (figura 5.31).
2
1
114
115
116
Figura 5.39 Facturile (inclusiv valoarea fr TVA) emise dup 20 iunie 2005
117
Figura 5.40 Macheta interogrii pentru obinerea listei din figura 5.39
Mai nti, n linia Criteria a coloanei Data este formulat criteriu de filtrare a liniilor din
rezultat: > #6/20/2005#. Este modalitate de a indica faptul c valorile de pe coloana Data trebuie s fie
mai mari dect 20 iunie 2005. Dar cel mai captivant este ceea ce se petrece pe a treia coloan a
machetei. n prima faz pe linia Field se introduce expresia ValoareTotala TVAColectata. Apoi se
face un click discret pe butonul Properties (pasul 2) i se obine pe ecran modesta fereastr Field
Properties. Aici vom indica formatul de afiare fix (Format...Fixed) cu dou zecimale (Decimal
Places...2), precum i numele coloanei calculate (Caption...ValoareFaraTVA). Simplu, nu ? (v
ateptm cu drag la restane !)
Se salveaz macheta (celebra pictogram a dischetei din figura de mai sus) sub numele
Facturi_dupa_20iunie2005, o imagine izbitor de asemntoare figurii 5.39 fiind obinut dup click-ul
de rigoare pe butonul View din stnga-sus-ul ferestrei interogrii.
118
20 iunie 2005, facturile trebuie s fi fost emise unor clieni din localitatea Iai. Pentru aceasta, pe linia
Criteria, n dreptul coloanei Localitate este specificat Iasi.
Figura 5.41. Interogare ce folosete trei tabele, dou condiii de filtrare i ordonare
n plus, s-a dorit i ordonarea cresctoare a liniilor din rezultat dup valorile atributului
NumeClient. V lsm pe dvs. s vizualizai rezultatul acestei interogri.
119
Pentru declararea modalitii de grupare trebuie mai nti folosit simbolul de nsumare din
bara de instrumente a interogrii. Ca urmare, n machet, ntre liniile Table i Sort apare linia Total.
Pe aceast linie, pentru coloanele TVAColectat i ValoareTotal este suficient selectarea opiunii
Sum, n timp ce pentru valoarea fr TVA trebuie selectat opiunea Expression, deoarece valoarea sa
se determin prin diferena dintre celelalte dou (vezi n linia Fields expresia ValFaraTVA:
SUM(ValoareTotala TVAColectata)).
Un alt artificiu care face o impresie bun este noul criteriu prin care utilizatorul poate indica n
momentul vizualizrii rezultatelor interogrii intervalul de vizualizare, adic data iniial i data final
a acestuia: BETWEEN [Data Initiala:] AND [Data finala:]. La vizualizare (click pe simbolul View
din stnga barei de instrumente a interogrii) pe ecran apare o fereastr minuscul, ca n figura 5.43,
urmat de o alta, le fel de minuscul, n care se solicit data final i numai dup aceea se afieaz
rezultatul cu liniile ce desemneaz zile din intervalul specificat n care exist mcar o factur.
Figura 5.43. Solicitarea valorii primului parametru de intrare (data iniial a intervalului)
Cam att deocamdat. Ne revedem cu interogrile n capitolul 6.
120
Seciunea de detaliu (Detail). Este seciunea principal a oricrui raport i conine valorile
cmpurilor din baza de date i a expresiilor calculate ce vor forma o linie cu date. Pentru fiecare
nregistrare prelucrat din baza de date se va crea cte o linie n raport.
Antetul i sfritul grupului (Group Header i Group Footer). Aceste dou seciuni apar n
rapoarte numai atunci cnd se dorete gruparea datelor. n exemplul din figura 5.48, vnzrile sunt
grupate pe clieni, iar codul clientului reprezint cmpul de control, adic acela dup valorile cruia
se va face gruparea. Elementele incluse n aceste seciuni vor apare o singur dat pentru fiecare
grup de date, deasupra primei linii cu date din grup, respectiv sub ultima linie. n antetul grupului
se includ, de regul, datele de identificare ale grupului adic, n exemplul nostru, codul i numele
clientului. n seciunea de sfrit se pot afia totaluri sau rezultatele altor operaiuni de agregare la
nivelul grupului, precum numrul elementelor, valoarea medie, valoarea minim i valoarea
maxim pentru cmpurile numerice.
n ACCESS, rapoartele pot fi construite n trei moduri:
Crearea rapid a unui raport pe baza unei singure tabele sau interogri, prin utilizarea facilitii
AutoReport (Columnar sau Tabular). Utilizatorul trebuie doar s specifice tabela din care se vor
extrage datele, iar raportul va fi generat i afiat pe ecran imediat. Dac se opteaz pentru
Columnar, raportul obinut va fi de tip coloan, adic datele unei linii din tabel vor fi aranjate pe
o singur coloan. Dac se alege Tabular, raportul generat va fi de tip tabel, rezervndu-se cte o
coloan pentru fiecare cmp din tabel.
Apelarea la vrjitor (Report Wizard). Utilizatorul va construi raportul, pas cu pas, sub
ndrumarea vrjitorului, rolul su constnd n furnizarea de rspunsuri la anumite ntrebri, care
privesc sursa datelor (tabelele i/sau interogrile), cmpurile de date care vor fi reinute n raport,
modul de grupare i ordonare a datelor, formatul i titlul raportului. Spre deosebire de cazul
anterior, acum pot fi create rapoarte pe baza mai multor tabele i/sau interogri.
Utilizarea ferestrei de proiectare (Design View). n acest mod de lucru, rapoartele vor fi create
Figura 5.44 Fereastra de dialog pentru alegerea modalitii de realizare a unui raport
n continuare vom descrie numai ultimul mod de lucru, ntruct acesta ne permite realizarea de
rapoarte complexe i personalizate, iar celelalte dou ci sunt mult mai simple de urmat.
121
122
csu de text
, pentru adugarea cmpurilor de date i a expresiilor de calcul ale cror
valori vor fi afiate la vizualizarea /tiprirea raportului.
linie
i dreptunghi
nfrumusearea raportului;
sgeat
, atunci cnd dorim selectarea unui obiect din raport.
Pentru adugarea unui text, se selecteaz butonul etichet, se poziioneaz mouse-ul n poziia
din care dorim s nceap textul i se d clic, dup care se introduce textul. Pentru a continua textul pe
linia urmtoare, dar n aceeai csu, se folosete combinaia de taste CTRL+ENTER.
Mai nti se completeaz antetul raportului (Report header), n care se include data afirii sau
tipririi, i antetul paginii (Page header). Pentru includerea datei curente se adaug o csu de text
care va avea ca expresie de calcul funcia DATE(). Specificarea expresiei de calcul se face astfel: se
selecteaz csua, se apas butonul dreapta al mouse-ului i se alege opiunea Properties din meniul
afiat. Efectul acestei aciuni const n afiarea ferestrei cu proprieti, prezentat n figura 5.46.a). n
aceast fereastr se alege proprietatea Control Source i se apas butonul trei puncte, din dreapta,
pentru deschiderea ferestrei Expression Builder (construirea expresiilor de calcul). n figura 5.46.b) se
poate vedea coninutul acestei ferestre i modul n care a fost introdus expresia DATE(). Expresia de
calcul poate fi introdus i de la tastatur, direct n csua de editare. Se revine n pagina raportului
prin apsarea butonului OK i nchiderea ferestrei cu proprieti.
a) Fereastra cu proprieti
123
n subsolul raportului (seciunea Report Footer) se adaug o linie pentru totalul general, n
care vor fi nsumate valoarea facturilor i valoarea TVA. Cele dou formule de calcul se introduc tot
prin intermediul csuelor de text i vor avea forma:
= SUM ([ValoareTotal])
= SUM ([TVAColectata])
ValoareTotala i TVAColectata sunt cmpurile din rezultatul interogrii pentru valoarea total a
unei facturi i valoarea TVA aferent.
4. Gruparea i ordonarea datelor. Liniile din raport pot fi ordonate sau grupate n funcie de
mai multe criterii, iar pentru fiecare grup de date se pot introduce n raport alte dou seciuni: antetul i
subsolul grupului. Cele dou operaiuni sunt realizate din fereastra Sorting and Grouping. Deschiderea
ei se face prin selectarea opiunii Sorting and Grouping din meniul View sau prin apsarea butonului
din linia cu instrumente, situat deasupra ferestrei de construirea a raportului.
Fereastra (prezentat n figura 5.47) conine un grid (tabel), format din dou coloane, Field
/Expression i Sort Order, i un grup de proprieti pentru definirea grupurilor de date, n partea sa
inferioar. Coloana Field /Expression este utilizat pentru specificarea cmpurilor sau expresiilor dup
care se face gruparea i /sau ordonarea datelor n raport. n raportul nostru datele trebuie grupate dup
codul clientului i ordonate dup numrul facturii. De aceea, vom selecta n prima linie cmpul
CodClient, iar n cea de-a doua Nrfact. Aceast coloan poate conine cel mult zece nume de cmpuri i
/sau expresii, adic pot fi utilizate cel mult zece criterii de grupare i sortare.
Group Header prezint dou valori posibile Yes /No. Dac se alege valoarea Yes, atunci pentru
cmpul sau expresia selectat din coloana Field /Expression se adaug n raport o seciune nou
pentru antetul grupului. Valoarea implicit este No, adic nu se creeaz automat o seciune pentru
antetul grupului.
124
Group On stabilete modul de grupare a valorilor cmpului selectat. Valorile posibile depind de
tipul cmpului sau expresiei de grupare (text, numeric sau dat calendaristic). De exemplu, dac
s-a ales data facturii drept cmp de grupare, atunci prin aceast proprietate se va stabili dac datele
vor fi grupate pe fiecare valoare distinct (se alege valoarea Each Value), pe fiecare an (Year),
lun (Month), sptmn (Week) .a.m.d.
Group Interval specific un interval sau un numr de caractere pe care se bazeaz gruparea
liniilor din raport. n cazul unui cmp de grupare de tip Date/Time, stabilirea valorii 12 semnific
gruparea liniilor care aparin aceleiai jumti de zi, dac pentru proprietatea Group On a fost
stabilit valoarea Hour.
Keep together se refer la modul de tiprire a liniilor raportului care fac parte din acelai grup.
Pentru aceast proprietate exist trei valori posibile: No permite tiprirea liniilor dintr-un grup i
pe pagina urmtoare, dac s-a ajuns la sfritul paginii; Whole group (Grupul ntreg) are ca efect
tiprirea tuturor seciunilor grupului (antetul, detaliile i subsolul) pe o singur pagin, dac este
posibil; With First Detail (Cu prima linie de detaliu) antetul grupului va fi tiprit pe aceeai
pagin cu prima linie a seciunii de detaliu.
Dup adugarea tuturor cmpurilor i expresiilor de ordonare i grupare i configurarea
proprietilor de grupare, se nchide fereastra Sorting and Grouping i se trece la completarea
seciunilor nou introduse n pagina raportului. Cerinele raportului ales de noi ca exemplu impun
crearea unui grup de date, n funcie de codul clientului. n seciunea de antet se introduc codul i
numele clientului, iar n cea de subsol se adaug sumele calculate pentru valoarea facturilor i valoarea
TVA, n maniera descris pentru seciunea Report Footer.
continuare se poate configura pagina (dimensiune, orientare, margini etc.), folosind opiunea Page
125
Setup din meniul File. De asemenea, se poate tipri raportul prin comanda Print din acelai meniu
File.
La vizualizare raportul va arta ca n figura 5.49.
Odat salvat, raportul poate fi ulterior modificat. n acest sens, se alege obiectul Report din
fereastra bazei de date, apoi se alege raportul dorit din fereastra din dreapta, ce conine rapoartele
create deja, i se apas butonul
din linia cu instrumente. Efectul acestei comenzi va consta
n deschiderea ferestrei de proiectare a raportului (figura 5.48), n care vor fi regsite toate obiectele
raportului i care pot fi modificate n conformitate cu noile cerine.
End sub
a. Funcii procedurale care se refer la instruciuni VBA cuprinse ntre Function End
Function i care returneaz o valoare.
Function nume_funct(param)
End Function
126
Orice procedur cuprinde un set de instruciuni care ndeplinesc o anumit sarcin. n scrierea
unei proceduri se folosesc cuvinte cheie, adic acele cuvinte de culoare albastr, care reprezint
cuvinte rezervate ale mediului VBA. Celelalte cuvinte de culoare neagr sunt cuvinte utilizator de
natura variabilelor sau valorilor.
La rndul lor, procedurile i modulele se regrupeaz n module, care pot fi: clase de module i
module standard.
Toate aceste proceduri se scriu n VBA i devin parte a componentei module din proiectantul
de baz de date (vezi figura de mai jos). Tot ca proceduri i funcii se scriu i interogrile aplicate
asupra bazei de date. Pentru a vizualiza coninutul unui modul este necesar s se dea dublu click pe
numele acestuia i astfel se va intra n VBA.
Dublu
click
Figura 5.50 Componenta Module din BD Vinzari i vizualizarea coninutului pentru Meniu n VBA
n mod similar se vizualizeaz coninutul celorlalte module i a interogrilor (ramura Query).
Lansarea n execuie a unei proceduri n VBA se face direct din meniul Run opiunea Run
Sub/User Form sau simplu cu F5. Acelai lucru se poate realiza dac se d click pe butonul
din
linia de instrumente (de obicei se gsete sub Run). Dac n urma unei execuii se intr n modul
Break (adic se blocheaz execuia n VBA prin colorarea n galben a unei linii cu instruciuni), va
trebui s se reseteze din meniul Run opiunea Reset sau simplu click pe butonul
din linia de
instrumente.
Lansarea n execuie n cadrul procedurilor de interogare i a celor din module se realizeaz cu
urmtoarele instruciuni:
Run (Auto_Open)
Sau
127
128
Capitolul 6
Obiective:
xvi.
xvii.
xviii.
Rezultate ateptate:
xix.
xx.
xxi.
xxii.
129
130
131
Definirea datelor
Consultarea BD
Manipularea datelor din baz
Controlul accesului
Partajarea bazei ntre mai muli utilizatori ai acesteia
Meninerea integritii BD.
Dei toate clasificrile l ncadreaz la limbaje de generaia a IV-a, SQL nu este, totui, un
limbaj de programare propriu-zis, prin comparaie cu Basic, Pascal, C, COBOL etc. SQL nu conine
(pn la SQL3) instruciuni/comenzi pentru codificarea secvenelor alternative i repetitive, cu att
mai puin faciliti de lucru cu obiecte vizuale, specifice formularelor de preluare a datelor (csuetext, butoane radio, liste, butoane de comand etc.). Din acest punct de vedere, poate fi referit ca sublimbaj orientat pe lucrul cu bazele de date. Comenzile sale pot fi, ns, inserate n programe redactate
n limbaje de programare "clasice".
Principalele atuuri ale SQL sunt:
1. Independena de productor, nefiind o tehnologie "proprietar".
2. Portabilitate ntre diferite sisteme de operare.
3. Este standardizat.
4. "Filosofia" sa se bazeaz pe modelul relaional de organizare a datelor.
5. Este un limbaj de nivel nalt, cu structur ce apropie de limba englez.
6. Furnizeaz rspunsuri la numeroase nterogri simple, ad-hoc, neprevzute iniial.
7. Constituie suportul programatic pentru accesul la BD.
8. Permite multiple imagini asupra datelor bazei.
9. Este un limbaj relaional complet.
10. Permite definirea dinamic a datelor, n sensul modificrii structurii bazei chiar n timp ce o parte
din utilizatori sunt conectai la BD.
11. Constituie un excelent suport pentru implementarea arhitecturilor client-server.
132
Principalele comenzi ale SQL, care se regsesc, ntr-o form sau alta, n multe dintre SGBDRurile actuale sunt prezentate n tabelul 6.1.
Tabel 6.1. Clase de comenzi SQL
Comand
Scop
133
Dei n capitolul 4 spuneam c structura unei baze de date este constant, exist situaii n care
trebuie s:
- adugm un atribut;
- eliminm un atribut;
- schimbm tipul unui atribut;
- modificm lungimea unui atribut;
- s declarm o nou restricie
- s anulm o restricie n vigoare.
Deoarece baza de date este n uz, nu ne putem permite s tergem i apoi s recrem tabelele,
pentru c aceasta echivaleaz cu pierderea iremediabil a nregistrrilor existente. Aa c este necesar
folosirea comenzii ALTER TABLE. Dac n tabela CLIENI se dorete pstrarea i a codului fiscal al
fiecrui furnizor, este necesar adugarea atributului CodFiscal, care este un ir de caractere (un numr
precedat de litera R, dac clientul respectiv este pltitor de TVA) de lungime 10 caractere. Comanda
utilizat este:
ALTER TABLE CLIENI ADD CodFiscal CHAR(10)
n SQL tergerea unei tabele din baza de date este realizabil cu ajutorul comenzii DROP
TABLE. Iat cum ar putea lansate comenzile de tergere ale celor trei tabele pe care abia le-am creat
acum jumtate de pagin:
Sub StergeTabele()
Dim dbs As Database
Set dbs = OpenDatabase("Z:\ Medii_2006_ID\BD\vinzari.mdb")
dbs.Execute "DROP TABLE facturi ;"
dbs.Execute "DROP TABLE clienti ;"
dbs.Execute "DROP TABLE codpost_loc ;"
End Sub
Am trecut n revist pn n acest moment principalele clauze ale comenzii CREATE TABLE
(i ALTER TABLE) pentru declararea cheilor primare, alternative i strine, i valorilor nenule.
134
Nemeritat, a fost omis clauza CHECK prin care putem defini restricii utilizator sub forma regulilor
de validare la nivel de atribut sau nregistrare. Astfel, n tabela CLIENI valorile atributului CodClient
trebuie s nceap de la 1001, iar numele clientului se dorete a fi scris cu majuscule ntotdeauna.
Aceste dou reguli de validare pot fi definite n SQL att n momentul crerii:
CREATE TABLE clienti (
CodClient INTEGER CONSTRAINT pk_cp PRIMARY KEY
CONSTRAINT ck_codclient CHECK (CocClient > 1000),
NumeClient CHAR (30) NOT NULL CONSTRAINT un_numeclient UNIQUE
CONSTRAINT ck_numeclient CHECK (NumeClient = UPPER(NumeClient)),
Adresa CHAR(60),
CodPostal CHAR(6) NOT NULL CONSTRAINT ref_cl_codpost
REFERENCES codpost_loc (CodPostal) ) ;
ct i ulterior prin ALTER TABLE. Din pcate, ACCESSul nu este prea ngduitor n aceast privin,
clauza CHECK fiind interzis. Singura modalitate de declarare a regulilor este cea procedural:
Sub Reguli_Atribute()
Dim dbs As Database, tdf As TableDef, fld As Field
Set dbs = CurrentDb
' CLIENTI.CodClient > 1000
Set tdf = dbs.TableDefs("clienti")
Set fld = tdf.Fields("CodClient")
fld.ValidationRule = "[CodClient] > 1000"
fld.ValidationText = "Cel mai mic cod de client acceptat este 1001 !"
' CLIENTI.NumeClient se scrie numai cu majuscule
Set tdf = dbs.TableDefs("clienti")
Set fld = tdf.Fields("NumeClient")
fld.ValidationRule = "StrComp(UCase([NumeClient]), [NumeClient], 0) = 0"
fld.ValidationText = "Literele din numele clientului sunt obligatoriu majuscule !"
' Prima litera din CLIENTI.Adresa este majuscula. Restul, la alegere !
Set tdf = dbs.TableDefs("clienti")
Set fld = tdf.Fields("Adresa")
fld.ValidationRule = "StrComp(LEFT(UCase([Adresa]),1), LEFT([Adresa],1), 0) = 0"
fld.ValidationText = "Prima litera din adresa clientului trebuie sa fie majuscula !"
'Data facturii
Set tdf = dbs.TableDefs("facturi")
Set fld = tdf.Fields("Data")
fld.ValidationRule = "[Data] BETWEEN #1-1-2005# AND #12-31-2010# "
fld.ValidationText = "Data facturii trebuie sa se incadreze in intervalul 1 ian.2005 - 31 dec.2010 !"
End Sub
Despre reguli la nivel de nregistrare, ce s mai vorbim... Astfel, dac n tabela FACTURI s-ar
dori instituirea regulii dup care TVA-ul poate fi cel mult egal cu 0,19/1,19 din valoarea total a
fiecrei facturi (prietenii tiu de ce !), restricia ar putea fi definit la creare astfel:
CREATE TABLE facturi (
NrFact INTEGER CONSTRAINT pk_facturi PRIMARY KEY,
CodClient INTEGER NOT NULL CONSTRAINT ref_fact_cl REFERENCES clienti (CodClient),
Data DATE NOT NULL,
ValoareTotala NUMERIC NOT NULL,
TVAColectata NUMERIC NOT NULL),
CONSTRAINT ck_tva_valtot CHECK (TVAColectata <= ValoareTotala * 0.19 / 1.19) );
ACCESS-ul este, dup cum v imaginai, impasibil la graiile (de tip CHECK) ale SQL-ului,
aa c singura soluie e tot cea procedural:
Sub Regula_inregistrare()
End Sub
135
6.3.1. Adugare
S presupunem c, la un moment dat, ntreprinderea vinde produse i firmei RODEX SRL
care are sediul pe strada Sapienei, nr.44 bis, n localitatea Iai. Acest nou client trebuie "introdus" n
baza de date, operaiune care n SQL, se realizeaz prin comanda:
INSERT INTO clienti VALUES (1009, RODEX SRL, Sapienei, 44 bis, 706600)
Fraza INSERT de mai sus poate fi scris i sub forma:
INSERT INTO clienti (CodClient, NumeClient, Adresa, CodPostal)
VALUES (5009, RODEX SRL, Sapienei 44 bis, 706600)
Dup cum se observ, dup numele tabelei (CLIENI) au fost enumerate toate atributele
pentru care se introduc valori prin clauza VALUES. Dac nu s-ar fi cunoscut adresa clientului RODEX,
atunci fraza INSERT ar fi avut una din formele:
INSERT INTO clienti (CodClient, NumeClient, Adresa, CodPostal)
VALUES (5009, "RODEX SRL", NULL, 6600) sau
INSERT INTO clienti (CodClient, NumeClient, CodPostal) VALUES (5009, RODEX SRL, 6600)
n noua linie a tabelei CLIENI valoarea atributului Adresa va fi NULL.
Coninutul celor trei tabele din finalul capitolului 4 a fost realizat n ACCESS prin modulul
urmtor n care comanda INSERT este argumentul unei comenzi DoCmd.RunSQL:
Sub Inserturi()
' CODPOST_LOC
DoCmd.RunSQL ("INSERT INTO codPost_loc VALUES ('706600', 'Iasi', 'Iasi') ;")
DoCmd.RunSQL ("INSERT INTO codPost_loc VALUES ('706610', 'Iasi', 'Iasi') ;")
DoCmd.RunSQL ("INSERT INTO codPost_loc VALUES ('705300', 'Focsani', 'Vrancea') ;")
DoCmd.RunSQL ("INSERT INTO codPost_loc VALUES ('705725', 'Pascani', 'Iasi') ;")
DoCmd.RunSQL ("INSERT INTO codPost_loc VALUES ('706750', 'Tg.Frumos', 'Iasi') ;")
' CLIENTI
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1001, 'TEXTILA SA', 'Bld. Copou, 87', '706600' );")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1002, 'MODERN SRL', 'Bld. Grii, 22', '705300' ) ;")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1003, 'OCCO SRL', NULL, '706610') ;")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1004, 'FILATURA SA', 'Bld. Unirii, 145', '705300' ) ;")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1005, 'INTEGRATA SA', 'I.V.Viteazu, 115', '705725' ) ;")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1006, 'AMI SRL', 'Galatiului, 72', '706750' );")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1007, 'AXON SRL', 'Silvestru, 2', '706610' ) ;")
DoCmd.RunSQL ("INSERT INTO clienti VALUES (1008, 'ALFA SRL', 'Prosperittii, 15', '705725' ) ;")
'FACTURI
DoCmd.RunSQL ("INSERT INTO facturi VALUES (111111, 1003, #6-17-2005#, 17000, 0) ;")
136
2850, 0);")
5850, 0);")
2850, 0);")
35700, 0);")
8700, 0);")
1100, 0);")
15000, 0);")
4720, 0);")
3000, 0);")
4250, 0);")
8750, 0);")
66000, 0);")
38600, 0);")
1280, 0);")
54250, 0);")
End Sub
Dup cum se observ, deliberat TVA colectat este declarat zero la toate liniile inserate n
FACTURI. Aceasta pentru a avea motiv de modificare (UPDATE) vezi paragraful pe peste linia
curent.
137
6.3.3. tergeri
Operaiunea de eliminarea a una sau mai multe linii dintr-o tabel, pe baza unui predicat, se
realizeaz n SQL prin comanda DELETE care are sintaxa: DELETE FROM nume-tabel WHERE predicat
Dac am dori s eliminm din tabela CLIENI linia aferent clientului MODERN SRL (cod
1002), comanda ar fi:
DELETE FROM clienti WHERE CodClient = 1002
n ACCESS, similar interogrilor pentru modificare pot fi create i interogri pentru tergere,
n care se specific criteriul pe care trebuie s-l satisfac liniile pentru a fi terse din tabela indicat
(fiind n criz de spaiu, nu vom mai prezenta nici o figur n acest scop). Prin program, dac am dori
eliminarea tuturor nregistrrilor din tabelele bazei, apoi re-adugarea i re-modificarea lor, ne-am
putea servi de blocul urmtor:
Sub Stergeri()
DoCmd.RunSQL ("DELETE FROM facturi ;")
DoCmd.RunSQL ("DELETE FROM clienti ;")
DoCmd.RunSQL ("DELETE FROM codPost_loc ;")
Call Inserturi
Call Updateuri
End Sub
138
interogare se formuleaz printr-o fraz SELECT. Aceasta prezint trei clauze principale: SELECT,
FROM i WHERE.
SELECT este utilizat pentru desemnarea listei de atribute (coloanele) din rezultat;
FROM este cea care permite enumerarea relaiilor din care vor fi extrase informaiile aferente
consultrii;
prin WHERE se desemneaz condiia (predicatul), simpl sau complex, pe care trebuie s le
ndeplineasc liniile tabelelor (enumerate n clauza FROM) pentru a fi extrase n rezultat.
La modul general (i simplist) o consultare simpl n SQL poate fi prezentat astfel: SELECT
Modulul interogareBETWEEN() declar (prin Dim) obiectul consultare ca fiind definiia unei
interogri (QueryDef), preia (prin comanda Set) n consultare fraza SELECT care constituie definiia
139
interogrii create anterior interog , modific definiia acestea prin linia consultare.SQL = SELECT
i, n final, execut noua variant a interogrii, rezultatul fiind similar variantei din figura 6.3.
140
IN
Rezultatul evalurii unui predicat ce conine acest operator va fi "adevrat" dac valoarea expresiei1
este egal cu (cel puin) una din valorile: expresie2, expresie3, ...
Spre exemplu, pentru a afla care sunt clienii din localitile din judeele Iai i Vaslui, fr
utilizarea operatorului IN se scrie:
SELECT * FROM codpost_loc WHERE Judet = 'Iasi' OR Judet = 'Vaslui'
Iar utiliznd IN:
SELECT * FROM codpost_loc WHERE Judet IN ("Iasi", "Vaslui")
Operatorul IS NULL
O valoare nul este o valoare nedefinit. Este posibil ca la adugarea unei linii ntr-o tabel,
valorile unor atribute s fie necunoscute. n aceste cazuri valoarea atributului pentru tuplul respectiv
este nul. Reamintim c, prin definiie, nu se admit valori nule pentru grupul atributelor care constituie
cheia primar a relaiei. Pentru aflarea clienilor pentru care nu s-a introdus adresa, se poate scrie:
SELECT * FROM clienti WHERE Adresa IS NULL
Cum n baza noastr de date, numai clientului OCCO SRL nu-i cunoatem adresa, rezultatul
interogrii este cel din figura 6.5 (n ACCESS valorile NULL se afieaz ca i cum ar conine spaii).
141
n continuare vrem s obinem denumirea fiecrei localiti i judeul n care se afl, dar liniile
rezultatului trebuie ordonate n funcie de jude i, n cadrul aceluiai jude, n ordinea invers a
localitii (de la Z la A), fraza SELECT se formuleaz dup cum urmeaz, rezultatul fiind prezentat n
figura 6.7.
6.5. JONCIUNI
Dup cum afirmam i n paragraful 5.4 majoritatea informaiilor obinute dintr-o baz de date
necesit rsfoirea simultan a dou sau mai multe tabele. Interogarea Fac_dupa20iunie2005v2 din
figura 5.41 folosete trei tabele. Folosind opiunea SQLView obinem o fraz SELECT cu totul
remarcabil:
SELECT facturi.NrFact, facturi.Data, clienti.NumeClient, codPost_loc.Localitate,
[ValoareTotala]-[TVAColectata] AS Expr1, facturi.TVAColectata, facturi.ValoareTotala, *
FROM (codPost_loc INNER JOIN clienti ON codPost_loc.CodPostal = clienti.CodPostal)
INNER JOIN facturi ON clienti.CodClient = facturi.CodClient
WHERE (((facturi.NrFact)>#6/20/2005#) AND ((codPost_loc.Localitate)="Iasi"));
Clauza FROM vine acum n centrul ateniei prin apariia clauzei INNER JOIN. Iat cum stau
lucrurile: deoarece n lista pe care vrem s obinem se gsesc atribute plasate n cele trei tabele, n
clauza FROM trebuie enumerate cele trei numere; n fapt, dup cum am vzut n capitolul 4, cele trei
tabele prin legate prin restricii refereniale, atributele de legtura fiind cheile strine cheile primare.
Astfel, legtura dintre FACTURI i CLIENI se poate realiza prin intermediul atributului CodClient
care este cheie primar n CLIENI (tabela printe) i cheie strin n FACTURI (tabela copil).
Legtura dintre aceste dou tabele care prezint un cmp comun se numete jonciune i se
simbolizeaz n SQL prin INNER JOIN:
SELECT *
FROM facturi INNER JOIN clienti ON facturi.CodClient=clienti.CodClient
142
Fr a intra n prea multe detalii teoretice, reinem c, ori de cte ori informaiile necesare i
condiiile pe care trebuie s le ndeplineasc acele informaii privesc atribute aflate n tabele diferite,
trebuie fcut jonciunea acestor tabele. Cnd tabele nu pot fi joncionate direct, trebuie aduse cu
fora n clauza FROM i tabelele care s completeze lanul.
Ne intereseaz, spre exemplu, numrul i data facturilor emise clienilor din judeul Iai.
Numrul i data facturilor se gsesc n tabela FACTURI (atributele NrFact i Data), ns pentru
denumirea judeului exist un atribut (Judet) n tabela CODPOST_LOC. Cele dou tabele nu pot fi
joncionate direct, aa nct atragem n interogare i cea de-a treia tabel CLIENI:
SELECT NrFact, Data
FROM (facturi INNER JOIN clienti ON facturi.codclient=clienti.codclient)
INNER JOIN codpost_loc ON codpost_loc.codpostal=clienti.codpostal
WHERE judet=Iasi
ORDER BY NrFact
Scris sub form de modul ACCESS InterogareJONCTIUNE1() i lansat prin apsarea
butonului Run, fraza SELECT obine rezultatul este cel din figura 6.8.
Figura 6.8. Un modul ACCESS cu fraz SELECT ce joncioneaz cele trei tabele (plus rezultatul)
Lsam s se neleag, la un moment dat, c n SQL pot fi formulate interogri mult mai
complexe dect se poate realiza cu ajutorul machetei din paragraful 5.4. Haidei s lum o asemenea
problem, ce-i drept nu att de complicat precum ameninam: Care sunt facturile emise n aceeai zi
ca i factura 111113 ? Dificultatea ine de faptul c cerina este formulat indirect, adic vrem s
aflm facturile emise ntr-o zi (Data), dar noi nu tim data etalon, ci factura-etalon.
Problema propus poate fi rezolvat relativ uor folosind o subconsultare, dup cum va fi
prezentat ntr-un paragraf viitor. Pn una-alta, soluia pe care o avem n acest moment la ndemn se
bazeaz pe autojonciune. Autojonciunea nseamn jonciunea unei tabele (FACTURI) cu ea-nsi,
practic, jonciunea a dou instane ale unei aceleai tabele. Pentru a jonciune cele dou instane
trebuie s aib pseudonime (aliasuri) diferite, n cazul nostru F1 i F2. ntruct ne intereseaz facturi
emise n aceeai zi cu 111113, autojonciunea se face dup atributul Data:
SELECT *
FROM facturi F1 INNER JOIN facturi F2 ON F1.data=F2.data
WHERE F2.NrFact = 111113
143
Iat rezultatul vezi figura 6.9. Rezultatul conine 10 coloane, cinci din prima instan a
tabelei FACTURI (F1) i cinci din a doua instan (F2). ACCESSul e destul de inspirat s scrie
naintea fiecrui atribut din ce instan provine.
144
Funcia SUM calculeaz suma valorilor unei coloane. Pentru a afla suma valorilor totale ale
facturilor, soluia este ct se poate de simpl:
SELECT SUM (ValoareTotala) AS Total_ValoriFacturi FROM facturi
iar totalul valorilor pentru facturile trimise clientului AXON SRL este obinut astfel:
SELECT SUM (ValoareTotala) AS Total_Fact_AXON
FROM facturi INNER JOIN clienti ON facturi.CodClient = clienti.CodClient
WHERE NumeClient = AXON SRL
Funciile MAX i MIN
Determin valorile maxime, respectiv minime ale unei coloane n cadrul unei tabele. Valorile
cea mai mic i cea mai mare ale unei facturi se afl astfel:
SELECT MIN(ValoareTotala), MAX(ValoareTotala) FROM facturi
Atenie ! La ntrebarea Care este factura emis cu cea mai mare valoare ? nu putem rspunde
deocamdat. Varianta urmtoare nu este corect: SELECT NrFactura, MAX(ValoareTotala ) FROM facturi
La execuia acestei interogri se afieaz un mesaj de eroare, soluia problemei fiind posibil
ceva mai pe finalul capitolului.
145
146
n paragraful 5.4 fceam cunotin cu o prim interogare n care era necesar gruparea
liniilor. Ne interesa valoarea zilnic a vnzrilor ntr-o anumit perioad, iar cadrul construirii
interogrii (VinzariPeZile_interval_la_alegere) lua forma din figura 5.42. Folosind din nou opiunea
SQL View s vedem fraza SELECT ce se ascunde n spatele machetei:
SELECT facturi.Data, Sum(facturi.TVAColectata) AS SumOfTVAColectata,
Sum(facturi.ValoareTotala) AS SumOfValoareTotala,
Sum([ValoareTotala]-[TVAColectata]) AS ValFaraTVA
FROM facturi
GROUP BY facturi.Data
HAVING (((facturi.Data) Between [Data initiala:] And [Data finala:]))
ORDER BY facturi.Data;
SQL permite utilizarea clauzei GROUP BY pentru a forma grupe (grupuri) de tupluri ale unei
relaii, pe baza valorilor comune ale unei coloane. n frazele SELECT formulate pn n acest paragraf,
prin intermediul clauzei WHERE au fost selectate tupluri din diferite tabele. Prin asocierea unei clauze
HAVING la o clauz GROUP BY este posibil selectarea anumitor grupe de tupluri ce ndeplinesc un
criteriu.
Clauza GROUP BY
Rezultatul unei fraze SELECT ce conine aceast clauz este o tabel care va fi obinut prin
regruparea tuturor liniilor din tabelele enumerate n FROM, care prezint o aceeai valoare pentru o
coloan sau un grup de coloane. Formatul general este:
SELECT coloan 1, coloan 2, ...., coloan m FROM tabel GROUP BY coloan-de-regrupare
Simplificm problema, dorind o list cu are este totalul zilnic al valorii facturilor emise. Fraza
este ceva mai simpl:
SELECT Data, SUM (ValoareTotala) AS Total_Zilnic FROM facturi GROUP BY Data
Tabela-rezultat va avea un numr de linii egal cu numrul de date calendaristice distincte din
tabela FACTURI. Pentru toate facturile aferente unei zile se va calcula suma valorilor, datorit
utilizrii funciei SUM(ValoareTotala). Succesiunea pailor este urmtoarea:
1. Se ordoneaz liniile tabelei FACTURI n funcie de valoarea atributului Data - figura 6.12.
2. Se formeaz cte un grup pentru fiecare valoare distinct a atributului Data - vezi figura 6.13.
3. Pentru fiecare din cele nou grupuri se calculeaz suma valorilor atributului ValoareTotala. Tabela
rezultat va avea nou linii, ca n figura 6.14.
147
Dac intereseaz este numrul facturilor emise pentru fiecare client, rspunsul poate fi obinut
prin interogarea:
SELECT NumeClient, COUNT(NrFact) AS NrFacturi_pe_Client
FROM facturi INNER JOIN clienti ON facturi.CodClient = clienti.CodClient
GROUP BY NumeClient
Pn la standardul SQL:1999 i publicarea Amendamentului OLAP la acest standard, n SQL
nu puteau fi calculate, prin GROUP BY, subtotaluri pe mai multe niveluri. Pentru aceasta este necesar
scrierea de programe n SGBD-ul respectiv.
Clauza HAVING
Clauza HAVING permite introducerea unor restricii care sunt aplicate grupurilor de tupluri,
deci nu tuplurilor "individuale", aa cum "face" clauza WHERE. Din tabela rezultat sunt eliminate
toate grupurile care nu satisfac condiia specificat. Clauza HAVING "lucreaz" mpreun cu o clauz
GROUP BY, fiind practic o clauz WHERE aplicat acesteia. Formatul general este:
SELECT coloan 1, coloan 2, .... , coloan m FROM tabel
GROUP BY coloan-de-regrupare HAVING caracteristic-de-grup
Pentru facturile emise intereseaz valoarea zilnic a acestora (n funcie de data la care au fost
ntocmite), dar numai dac aceasta (valoarea zilnic) este de mai mare de 40000 lei noi (RON).
SELECT Data, SUM(ValoareTotala) AS Vinzari_Zilnice
FROM facturi GROUP BY Data HAVING SUM(ValoareTotala) > 40000
La execuia acestei fraze, se parcurg cei trei pai descrii la nceputul acestui paragraf, apoi,
dintre cele nou tupluri obinute prin grupare, sunt extrase numai cele care ndeplinesc condiia
SUM(ValoareTotala) > 40000. Rezultatul final este cel din figura 6.15.
i acum, o interogare cu adevrat interesant: S se afieze ziua n care s-au ntocmit cele mai
multe facturi ! Iat soluia:
SELECT Data, COUNT(*) AS nr_facturilor FROM facturi
GROUP BY Data HAVING COUNT(*) >= ALL
(SELECT COUNT(*) FROM facturi GROUP BY Data)
148
Avem de-a face cu o subconsultare al crei rezultat (stnga figurii 6.16) servete drept termen
de comparaie al predicatului (condiiei) formulat n clauza HAVING.
Cam att pentru acest capitol, disciplin, semestru (informatic) i an (tot informatic) ! V
mulumim pentru rbdare, i v asigurm c cine a ajuns cu cititul (i nelesul) pn n acest punct, are
toate ansele unui examen ncununat de succes.
Rezumat
nc de la apariia bazelor de date s-a pus problema elaborrii unui limbaj universal acceptat
care s permit lucrul cu bazele de date, n sensul crerii obiectelor din baz, ct mai
ales extragerii informaiilor.
SQL reprezint cel mai rspndit limbaj de interogare a bazelor de date, fiind prezent n toate
SGBD-urile importante la aceast or. Standardele SQL considerate decisive n evoluia
bazelor de date: SQL-92, SQL:1999 i SQL:2003.
SQL pune la dispoziie comenzi att pentru crearea tabelelor i modificarea structurii:
CREATE TABLE, ALTER TABLE, ct i pentru modificarea lor: INSERT, UPDATE,
DELETE. Cea mai important comand este SELECT.
Structura de baz a interogrilor, adic a frazei SELECT cuprinde, obligatoriu clauzele
SELECT - n care sunt enumerate atributele i expresiile ce vor constitui coloanele
rezultatului i FROM - n care se specific tabelele n care se gsesc atributele extrase n
rezultat sau asupra crora se formuleaz condiiile din clauza WHERE.
n multe situaii, obinerea informaiilor reclam joncionarea a dou sau mai multe tabele din
baza de date, precum i folosirea subconsultrilor, operatorul tradiional fiind IN.
Obinerea informaiilor sintetice presupune folosirea funciilor agregat: COUNT, SUM, AVG,
MIN, MAX, folosite ca atare sau n combinaiile cu clauzele de grupare GROUP BY i
HAVING.
149
BIBLIOGRAFIE
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Airinei, D., .a., Medii de programare, ediia 2, Ed. Sedcom Libris, Iai, 2002
Fotache, M., Baze de date relaionale, Ed. Junimea, Iai, 1997
Fotache, M.,SQL Dialecte DB2, Oracle, Visual FoxPro, Ed. Polirom, Iai, 2001
Fotache, M., Proiectarea bazelor de date, Ed. Polirom, Iai, 2005
Grama, A, Filip, M., Faciliti Excel n aplicaiile economice, Ed. Sedcom Libris, Iai, 2000
Grama, A., Filip, M., Medii de programare n economie, Ed. Sedcom Libris, Iai, 2000
Grama, A., Fotache, M., ugui, Al., Dumitriu, F., Medii de programare, Ed. Sedcom Libris,
Iai, 2002
Gunderloy, M., Harkins, S.S., Microsoft Office Access 2003, Editura All, Timioara, 2003
Maniez, D., VBA pour Microsoft Word, Excel, Access, Dunod, Paris, 2000
ugui, Al, Teoria mediilor de programare, Ed. Junimea, Iai, 2001
***, Microsoft Office Access 2003. Step by Step, Microsoft Press, 2004