Documente Academic
Documente Profesional
Documente Cultură
Doros Ioan - Sisteme de Gestiune A Bazelor de Date
Doros Ioan - Sisteme de Gestiune A Bazelor de Date
Baze de date
Descrierea CIP a Bibliotecii Naionale a Romniei DOROS, IOAN Baze de date / Ioan Doros. - Bucureti : Cibernetica, 2010 ISBN 978-973-88451-6-9 004
CAPITOLUL I. DELIMITRI CONCEPTUALE ALE BAZELOR DE DATE .................... 6 1.1. Termeni specifici n lucrul cu bazele de date ........................................................... 6 1.2. Sisteme de gestiune a bazelor de date ...................................................................... 9 1.2.1. Noiuni generale privind sistemele de gestiune a bazelor de date ....................... 9 1.2.2. Funciuni ale sistemelor de gestiune a bazelor de date ...................................... 10 1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru o baz de date relaional ................................................................................................................ 11 1.2.4. Sistemul de gestiune a bazelor de date ACCESS .............................................. 13 1.3. Scopul unei baze de date ........................................................................................ 14 1.4. Componentele aplicaiei ACCESS .......................................................................... 15 1.5. Proiectarea bazelor de date..................................................................................... 16 1.5.1. Principii ale proiectrii bazelor de date ............................................................ 16 1.5.2. Normalizarea unei baze de date relaionale ...................................................... 18 1.5.3. Integritatea bazelor de date .............................................................................. 22 1.6. Operarea n mediul ACCESS .................................................................................. 24 1.6.1. Deschiderea aplicaiei. Crearea unei noi baze de date ....................................... 24 1.6.2. Moduri de vizualizare ..................................................................................... 26 1.6.3. Deschiderea, modificare a, salvarea i nchiderea unei baze de date existente ... 27 1.6.4. Folosirea funciei ajutor .................................................................................. 29 1.6.5. nchiderea aplicaiei ........................................................................................ 31 CAPITOLUL II. CREAREA I UTILIZAREA TABELELOR ............................................ 32 2.1. Crearea unei tabele ................................................................................................ 32 2.1.1. Proprietile cmpurilor ................................................................................... 33 2.1.2. Definirea unei chei primare ............................................................................. 37 2.1.3. Stabilirea unui index ....................................................................................... 37 2.1.4. Modificarea proprietilor unui cmp ............................................................... 38 2.2. Editarea datelor ntr - o tabel .................................................................................. 39 2.2.1. Introducerea de date n tabel .......................................................................... 39 2.2.2. Vizualizarea informaiilor dintr -o tabel .......................................................... 40 2.2.3. Modificarea datelor ntr -o tabel ..................................................................... 40 2.2.4. Adugarea de nregistrri ntr -o tabel ............................................................. 41 2.2.5. tergerea de date ntr -o tabel ......................................................................... 41 2.3. Crearea relaiilor ntre tabele ................................................................................. 43 CAPITOLUL III. UTILIZAREA INFORMAIILOR DINTR - O BAZ DE DATE .............. 45 3.1. Conectarea la o baz de date existent .................................................................... 45 3.2. Cutarea datelor cu ajutorul instrumentelor mediului Access .................................. 45 3.3. Crearea unei interogri simple ............................................................................... 46 3.4. Crearea interogrilor peste mai multe tabele ........................................................... 51 3.5. Selecia i sortarea d atelor ..................................................................................... 56 3.6. Salvarea unei interogri ......................................................................................... 57 3.7. Adugarea i eliminarea filtrelor ............................................................................ 57
3.8. Limbaj Structurat de Interogare SQL (Structured Query Language) ......................... 59 3.8.1. Limbajul SQL ................................................................................................. 59 3.8.2. Comenzi destinate tabelelor ............................................................................. 62 3.8.3. Instruciunile de selecie a datelor ................................................................... 63 3.8.4. Instruciunile pentru manipularea datelor ......................................................... 74 CAPITOLUL IV. CREAREA I UTIL IZAREA FORMULARELOR .................................. 77 4.1. Noiuni generale ................................................................................................... 77 4.2. Controale ............................................................................................................... 80 4.3. Proiectarea unui formular legat de o surs de nregistrri ........................................ 82 4.3.1. Proprietile eseniale ......................................................................................... 82 4.3.2. Obiectele simple ............................................................................................. 84 4.3.3. Culorile obiectelor .......................................................................................... 85 4.3.4. Aranjarea obiectelor ........................................................................................ 86 4.3.5. Alte faciliti .................................................................................................. 87 CAPITOLUL V. CREAREA I UTILIZAREA RAPOARTELOR ...................................... 91 5.1. Crearea unui raport ................................................................................................ 91 5.2. Particularizarea antetului i subsolului .................................................................. 94 5.3. Gruparea datelor ntr -un raport. Realizarea de totaluri i subtotaluri ....................... 97 CAPITOLUL VI. LIMBAJUL VISUAL BASIC .............................................................. 103 6.1 Editarea modulelor Visual Basic for Application ................................................... 103 6.2 Elemente de sintax .............................................................................................. 105 6.3 Casete de dialog predefinite .................................................................................. 106 6.4 Variabilele n VBA ............................................................................................... 109 6.4.1. Declararea variabilelor .................................................................................. 109 6.4.2. Tipurile variabilelor n VBA ......................................................................... 111 6.4.3. Iniializarea vari abilelor ................................................................................ 113 6.5. Tablouri .............................................................................................................. 113 6.6 Funcii i proceduri definite de utilizator ............................................................... 114 6.7 Structura alternativ ............................................................................................. 119 6.8 Structura repetitiv ............................................................................................... 120 6.8.1. Structura repetitiv cu numrtor ................................................................... 120 6.8.2. Structurile repetitive de tip Do Loop ......................................................... 122 6.8.3. Structura repetitiv pentru fiecare .............................................................. 124 6.9 Programarea recursiv .......................................................................................... 125 6.10 Obiecte ACCESS 2000 ........................................................................................ 126 6.11 Programarea dirijat de evenimente n ACCESS 2000 .......................................... 128 6.12 Accesul cu programele la obiectele bazei de date ................................................. 131 CAPITOLUL VII. NDRUMAR PENTRU REALIZAREA PROIECT ULUI LA DISCIPLINA BAZE DE DATE ........................................................................................................ 140 7.1. Cerine minimale ................................................................................................. 140 7.2. Baza de date ........................................................................................................ 141 7.3. Documentaia ...................................................................................................... 144
CONCEPTUALE
ALE
nregistri
Cmpuri
RECORDS). 6
Un tabel este de fapt o colecie a tuturor entitilor de date dintr -un singur tip de date (tip de entiti sau clas de date). nregistrrile dintr -un tabe l formeaz cardinalul , n vreme ce cmpurile definesc structura tabelului , numrul de cmpuri, tipul lor i dimensiunea lor. Cmpurile unui tabel pot fi de tipul: 1. Logic , putnd s suporte valorile Y, N, T, F; 2. Numeric , putnd fi definite cu ajutorul numerelor ntregi sau cu ajutorul zecimalelor; 3. Dat calendaristic , cmpurile putnd fi definite cu ajutorul unei date valabile; 4. ir de caractere , putnd fi de diferite lungimi; 5. Memo , cmpurile putnd conine articole de lungimi variabile. O baz de date are o structur care poate fi reprezentat sub forma unei colecii de descrieri statice ale diferitelor tipurilor de entiti, dar si a relaiilor logice dintre acestea. Aceste relaii logice reprezint de fapt, asociaiile dintre mai multe entiti. Astfel, o entitate poate fi definit ca o reprezentarea unic a unui obiect real. Aceasta corespunde unei nregistrri i este reprezentat prin luarea de valori pentru diferite atribute ale sale. Pentru a diferenia dou entiti este necesar ca mcar un atribut s aib valori diferite. Atributul este o proprietate important a unui obiect din lumea real, fiind necesar pentru a distinge entitile ntre ele. Atributul mai poate fi definit ca fiind o celul sau o csu dintr -un tabel. La fel ca i cmpurile, atributele pot fi de tip logic, numeric, dat calendaristic, ir de caractere sau memo. Domeniul de valori al atributului poate fi precizat la creearea bazei de date, cnd se vor specifica i intervalele de valori pentru fiecare cmp. Pentru identificar ea univoc a unei entiti este necesar crearea unui atribut sau a unei combinaii de atribute care poart denumirea de identificator sau cheie. n ACCESS identificatorii sunt cmpuri cheie principale, acetia fiind folosii pentru crearea indexului princ ipal al entitii. O baz de date este un ansamblu structurat de date evolutive, organizate pentru a fi prelucrate de programe informatice. Bazele de date sunt fiiere stocate pe suporturi magnetice, mpreun cu aplicaiile care le exploateaz (utilizeaz). Cele mai multe baze de date sunt relaionale (n proporie de 80% -90%). 7
Bazele de date relaionale sunt de fapt nite tabele cu relaii ntre ele. Aceste baze de date relaionale au redundan minim i controlat. Primul care a introdus noiunea de baz de date relaional a fost E. F. Codd 1, n anul 1970. Un exemplu de baz de date relaional ar putea fi prezentat cu ajutorul celor dou tabele, a cror structur este redat mai jos: Marc Nume Adres Salar nominal
Marc
Nume
Funcii
Salar nominal
Deduceri
Impozit
Faptul c urmtoarele coloane: marc, nume i salar nominal , apar de dou ori, nseamn c aceste coloane sunt redundante . Pentru a putea stabili relaii ntre tabele, cmpul care con ine marca trebuie s fie inclus n amb ele tabele. Nu este nevoie s fie denumit identic n ambele tabele, n schimb treb uie s aib acelai coninut. Rela iile ntre tabele pot fi stabilite i pe combina ii d e cmpuri (unele SGBD - uri permind i descrierea de astfel de combina ii prin expresii aritmetice). Astfel, s e pot stabili mai multe tipuri de relaii ntre tabele, dup cum urmeaz: Relaii de unu -la-unu; Relaii de unu -la- mai muli; Relaii de muli -la-unu; Relaii de muli -la- muli. Do u tabele aflate n rela ie de unu-la-unu, sun t interclasabile i pot fi privite ca unul singur, articolele rezultate cuprind reuniunea cmpurilor celor dou tabele. Relaiile de unu-la- muli i muli -la- unu, se refer la acelai lucru, dar privit din pr i diferite. n Access se utilizeaz rela iile de unu-la-mai- mul i. Relaiile de tipul muli la- muli , nu pot fi incluse n bazele de date rela ionale. Exemplificm, n figura de mai jos, 4 tabele cu rela ii de unu-la- mai mul i (scris 1- ), definite n A CCESS:
Edgar Frank Codd (23 august 1923, Insula Portland, Anglia 18 aprilie 2003, Williams Island,
Florida, SUA) a fost un informatician american de origine englez care, lucrnd pentru IBM, a inventat modelul relaional pentru gestiunea bazelor de date, model care constituie baza teoretic a bazelor de date relaionale. (conform wikipedia.com)
MySQL . Este un sistem de gestiune a bazelor de date foarte rspndit datorit faptului c este gratuit (de tip Open Source) ; Aplicaia Microsoft ACCESS , care este un sistem de gestiune a bazelor de date relativ nou, aceas aplicaie fcnd parte din suita de programe de birou Microsoft Office. Toate fiierele sunt n ultim instan un lung ir de bii, ceea ce face pn la urm diferena ntre ele, redarea sunetelor din fiierele tip .wav sau a imaginilor din fiierele .bmp sau .jpg, sunt programele dedicat e acestor meniri. Astfel, i un sistem de gestiune a bazelor de date are menirea de a conferi unor fiiere forma de tabele pentru ca informaiile coninute s fie accesibile utilizatori lor, care s poat efectua cele patru operaii (adugare, regsire, t ergere, modificare). Prin similitudine se poate spune c rolul unui sistem de gestiune a bazelor de date pentru o baz de date este asemntor rolului unui Sistem de O perare pentru un calculator. Principalul scop al unui sistem de gestiune a bazelor de dat e este acela de a pune la dispoziia utilizatorilor mijloacele necesare pentru crearea bazelor de date, dar i pentru crearea unor programe care s foloseasc aceste date.
date luate din tabelele (dicionarele) , unde se afl descris e structurile virtuale ale bazei de date, precum i structur a logic la care va avea acces. 3. Administrarea bazei de date . O sarcin important a gestiunii bazei de date se refer la supravegherea datelor din baza de date i supervizarea programelor de acces la aceste date. Persoana (sau grupul de persoane) care are aceste sarcini, este numit administratorul bazei de date, iar atribuiile ndeplinite se constituie n funcia de administrare a bazei de date. Un SGBD trebuie s includ mijloace le prin care un administrator de baze de date s i poat ndeplini sarcinile (funciile) de baz, cum ar fi: a). Organizarea bazei de date prin stabilirea structurii i ncrcarea ei cu date iniiale ; b). Urmrirea funcionrii bazei de date prin: Pstrarea n baza de date a datelor corecte i la zi; Asigurarea integritii i confidenialitii datelor; Urmrirea performan elor bazei de date, cu ajutorul unor programe utilitare; Punerea la dispoziia utilizatorilor a unor programe sau proceduri; Informarea continu cu privire la observaiile utilizatorilor bazei de date. c). Reorganizarea bazei de date prin actualizri ale structurilor sau ale programelor de acces. 4. Protecia informaiilor din baza de date este o problem la ordinea zilei datorit generalizrii bazelor de date cu acces partajat al mai multor utilizatori. Un SGBD asigur protecia datelor prin asigurarea: Confidenia1itii , realiznd protecia mpotriva accesului neautorizat la date; Integritii , realiznd protecia mpotriva alterrii coninutului bazei de date, datorit unor erori de programare, defecte de echipament, distru geri ru intenionate, etc.
1.2.3. Caracteristicile sistemelor de gestiune a bazelor de date pentru o baz de date relaional
De-a lungul timpului au fost concepute mai multe tipuri de sisteme de gestiune a bazelor de date care s-au pretat diferitelor m omente de evoluie fizic a tehnicii de calcul. n momentul de fa sunt folosite tot mai des sistemele de gestiune a bazelor de date relaionale i , mai nou, ncearc s se impun pe pia i sistemele de gestiune a bazelor de date distribuite. Acelai E. F. Codd a detaliat, n anul 1985, caracteristicile care trebuie s fie ndeplinite de un sistem de gestiune a bazelor de 11
date pentru ca ace sta s fie considerat relaional, sub forma a 13 reguli . Aceste reguli pot fi sintetizate astfel: Regula 0. Princ ipiul de baz , conform cruia orice sistem de gestiune a bazelor de date relaional trebuie s gestioneze toat baza de date numai prin posibilitile modelului relaional. Regula 1. Stocarea informaiei , potrivit creia toate datele trebuie s fie cupr inse n tabele de date, i deci datele trebuie s fie memorate i prelucrate n acelai mod. n A CCESS de exemplu, acest lucru este posibil cu ajutorul aplicaiei Microsoft Jet. Regula 2. Garantarea accesului la date , potrivit creia fiecare element de d at trebuie s fie accesibil logic, printr - o combinaie de genul: cheie primar, nume tabel i nume cmp. n A CCESS spre exemplu, se pot defini chei primare. Regula 3. Lipsa informaiei, adic n tabele trebuie s poat exista valori nule (vide), astfel de valori trebuie s specific e faptul c ntr - o celul o valoare nu a fost compl etat i acest lucru nu trebuie s fie con fundat cu valori 0 pentru tipul numeric sau spa iu pentru tipul text . n aplicaia A CCESS exist astfel de valori care poart denumirea de Null . Regula 4. Catalogul de sistem, acest lucru nsemnnd c descrierea bazei de date trebuie s se fac tot n tabele. n A CCESS acest lucru e posibil cu ajutorul motorului Microsoft Jet. Regula 5. Limbajul cuprinztor, un sistem de gestiune a bazelor de date trebuie s conin un limbaj cuprinztor pentru definirea datelor, descrierea tabelelor, realizarea unor adugri, actualizri sa u tergeri de cmpuri. ACCESS -ul de exemplu, suport limbajul SQL. Regula 6. Actualizarea vederilor , nsemnnd c toate vederile trebuie s fie actualizate de sisteme. n acest sens A CCESS-ul a fost primul sistem de gestiune a bazelor de date pentru PC- uri, care a permis realizarea interogrilor pentru actualizare. Regula 7. Actualizri la nivel de mulime . n tabele este necesar ca modificrile i actualizrile s se fac la nivel de mulime de articole. n cadrul aplicaiei A CCESS acest lucru este posibil. Regula 8. Independena fizic a datelor, altfel spus datele trebuie s fie fizic independente fa de programul aplicaiei. O aplicaie nu trebuie s se modifice dac , spre exemplu, se adaug sau se terge un index. n A CCESS acest lucru se realizeaz cu ajutorul aplicaiei Microsoft Jet, care are motor logic de stocare. Regula 9. Independena logic a dat elor. Conform acestei reguli, schimbrile efectuate asupra relaiilor dintr - o baz de date nu trebuie s afecteze programul de aplicaie. 12
Regula 10. Independena integritii datelor, sau altfel spus restriciile de integritate trebuie s poat fi definite ntr -un limbaj i s poat fi stocate ntr -un catalog. n ACCESS se pot crea reguli de integritate cu ajutorul limbajului SQL. Regula 11. Independena distribuiei . Potrivit acestei reguli, capacitile sistemelor de gestiune a bazelor de date nu au v oie s fie limitate datorit distribuiei unor componente ale acestora n baze de date separate. Regula 12. Inexistena subminrilor, nsemnnd c dac un sistem de gestiune a bazelor de date relaional are un limbaj de manipulare al unei singure nregist rri, acest limbaj nu va putea fi folosit la ocolirea regulilor de integritate sau a constrngerilor modelului relaional. n ACCESS acest lucru nseamn c nu se pot nclca regulile de integritate. Folosindu-se de lucrrile lui E. F. Codd referitoare la modelul relaional i la limbajele bazate pe algebra relaional sau calculul relaional, din ce n ce mai muli oameni de tiin au ncercat s redefinineasc i s mbunteasc aceste concepte. S- a ajuns astfel la dezvoltarea i perfecionarea unor limbaje relaionale precum SQL (Structured Query Language), QBE (Query-By-Example) sau QUEL(Query Language). Limbajul SQL se bazeaz pe calculul relaional, avnd n vedere utilizarea de variabile constituite din tupluri. Pentru a ajuta la extinderea acest ui limbaj n ntreaga comunitate a productorilor de baze de date, Institutul Naional American pentru Standarde (ANSI) a elaborat i lansat standardele SQL, n 1986, potrivit crora acest limbaj folosete acelai set de comenzi i structuri de baz standa rdizate, indiferent de varianta de limbaj folosit.
Beneficiaz de tehnologii avansate, deoarece este creat de firma Microsoft. Aceste tehnologii sunt: T ehnologia ActiveX, care permite realizarea aplicaiilor client/server; Permite accesul la baze de date din reeaua Internet, fiind un instrument util pentru publicarea informaiilor n paginile Web; Este autodocumenta t prin ajutor (help), scris n HTML compilat, ajutorul fiind apelabil contextual sau la cerere; Permite crearea foarte simpl a obiectelor bazei de date cu instrumentele expert (wizard); Bazele de date pot fi personalizate. P ermite protecia accesului la obiecte prin administrarea de drepturi de acces pentru utilizatorii ordonai n grupuri; P ermite crearea de grupuri de obiecte definite de utilizator n cadrul bazei de date; Limbajul propriu al SGBD- ului relaional ACCESS este Visual Basic; E foarte rspndit, utilizarea lui este intuitiv i este relativ uor de nvat . Pune la dispozi ia utilizatorilor un mediu prietenos pentru crearea, proiectarea, testarea i administrare obiectelor bazelor de date proprii. Aceste caracteristici, ne- au determinat s alegem pentru exemplificarea no iunilor despre baze de date aplicaiile r ealizate cu ajutorul mediului ACCESS , n capitolele urmtoare. Pe de alt parte este adevrat c SGBD Access nu poate concura cu Oracle, Informix, Microsoft SQL Server ca vitez sau concuren partajat de lucru. Din acest motiv pentru proiectele mari trebuiesc alese aceste sisteme de gestiune a bazelor de date, dar pentru proiectele mai mici avantajele de mai sus constituie argumente serioase pentru alegerea aplicaiei ACCESS.
Posibilitatea de pregtire a unor rapoarte precise, n forma dorit i utiliznd datele de la un moment dat; Asigurarea partajrii datelor cu ajutorul altor aplicaii sau a altor calculatoare; Asigurarea securitii datelor mpotriva accidentelor. n cazul utilizrii aplicaiei ACCESS, principalele avantaje ar fi: Asigurarea unor posibiliti avansate de manipulare, stocare i selecie a datelor; Stabilitatea aplicaiei n contextul sistemului de operare; Aplicaia este uor de nvat; Aplicaia este foarte direct n ceea ce privete posibilitile de modificare a cmpurilor i a tabelelor; Aplicaia este foarte rspndit n ntreaga lume.
15
Rapoartele sunt obiecte ale bazelor de date prin care sunt vizualizate sau tiprite informaii cu coninut i structur accesibil i conforme cerin elor utilizatorilor. Interogrile sunt obiecte care permit vizualizarea informaiilor obinute p rin prelucrarea datelor din una sau mai multe tabele, i/sau a altor cereri de interogare. Paginile Web de accesare a datelor reprezint obiecte care includ fiiere HTML i alte fiiere suport , n vederea furnizrii accesului la date prin intermediul browser-elor de Internet. Comenzile Macro reprezint obiecte care conin o definiie structurat a uneia sau mai multor aciuni pe care ACCESS -ul le realizeaz ca rspuns la un anumit eveniment. Modulele reprezint obiecte care conin proceduri definite de utilizator i sunt scrise n limbajul de programare Visual Basic for Applications (V.B.A.). n cadrul aplicaiei ACCESS utilizatorul poate apela la Vrjitori (Wizards) pentru a creea orice obiect (tabele, formulare, macro -uri etc). Aceste obiecte pot fi ns create i de ctre utilizator.
De ce se dorete realizarea bazei de date? (pentru a putea rspunde la aceast ntrebare se va porni mereu de l a rapoartele care ar trebui listate); Ce resurse avem la dispoziie? (cele mai importante resurse fiind n acest caz calculatoarele, oamenii, informaiile etc); Ce anume va fi de fcut? Abia apoi se va trece la proiectarea tabelelor, ceea ce presupune def inirea cmpurilor, a coninutului lor i a dimensiunilor acestora, dar i determinarea relaiilor dintre acestea. n demersul realizrii unei baze de date, exist trei niveluri de percepie a acesteia: nivelul extern , este nivelul n care sunt percepute b azele de date de utilizatori. Ei i exprim cerinele informaionale prin aa -numitele scheme exter ne. Pot exista o mulime de sub -scheme, fiecare sub- schem corespunznd viziunilor unui utilizator al bazei de date; nivelul conceptual , este nivelul afere nt administratorului bazei de date, n viziunea cruia baza de date este o abstractizare a unei p ri din lumea real. Aceast viziune se concretizeaz ntr - o schem conceptual; nivelul intern , corespunztor programatorului, care realizeaz modul de reprezentare a datelor pe suportul fizic. Determinarea structurii unei baze de date se poate aborda ascendent, realizndu - se descrierea schemelor externe, urmat de elaborarea schemei conceptuale, sau descendent, definind mai nti schema conceptual i deduc nd ulterior schemele externe posibil de obinut. n acest scop i vor da concursul un grup mai larg de persoane a cror activitate va fi influenat de modificarea acestei zone a sistemului informatic al instituiei. n momentul pr o iectrii unei baze de date se vor urmrii n primul rnd entitile, atributele i relaiile, indecii, machetele de introducere sau d e ieire, procedurile de calcul, precum i schemele logice sau interogrile, i abia apoi se va trece la ncercarea de nchegare a tabelelor, la normalizarea lor i stabilirea relaiilor dintre ele. Datele vor fi memorate n tabele i fiecare tabel va conine date doar despre un singur subiect (ex: elevi, discipline, etc). Redundana, adic apariia unei informaii de dou ori n baza de date, trebuie s fie minim i controlat. Proiectarea formularelor, a rapoartelor, a macrocomenzilor i a modulelor , este influenat n primul rnd de calitatea structurii datelor. ns trebuie s se in cont de faptul c, de cele mai multe ori, aceste forme de reprezentare extern a datelor se bazeaz pe interogri, nu direct pe tabele. O baz de date bine proiectat conine , de obicei, diferite tipuri de interogri care prezint informaiile necesare. 17
n ajutorul aplicaiei Microsoft Access (Help) sunt preze ntai paii care trebuie parcuri pentru proiectarea unei baze de date. Acetia sunt: Stabilirea scopului bazei de date, a utilizatorilor, a cerinelor lor . Pornind de la listele necesare (rapoarte), se schieaz formulare le de introducere a datelor. Se deduc apoi faptele ce trebuie memorate n baza de date i crui subiect i va aparine fiecare. Aceste fapte corespund cmpurilor (coloanelor) din baza de date, iar subiectele crora le aparin corespund tabelelor. Stabilirea cmpurilor necesare n baza d e date. Fiecare cmp este un fapt despre un anumit subiect. Nu trebuie s rmn vreun fapt fr un cmp corespondent , iar cmpurile trebuie s fie detaliate n cele mai mici pri logice. De exemplu, o adres trebuie s fie descompus n strad, numr, bloc, scar, etaj, apartament. De asemenea n cmpuri nu se nscriu liste sau valori calculate. Stabilirea tabelelor necesare n baza de date . Fiecare tabel trebuie s conin informaii despre un subiect . Stabilirea apartenenei fiecrui cmp la tabelul corespunztor . Identificare cmpurilor cu valori unice n fiecare nregistrare . Stabilirea relaiil or dintre tabele. mbuntirea proiectului . Introducerea datelor i crearea altor obiecte ale bazei de date . Utilizarea instrumentelor de analiz ale Mic rosoft ACCESS. Microsoft ACCESS conine dou instrumente cu care se poate mbuntii forma unei baze de date: 1. Analizatorul de Tabel , care poate analiza forma unui tabel la un moment dat i, dac este corespunztor, poate propune noi structuri de tabel i relaii, i poate scinda un tabel n noi tabele corelate, dac o astfel de corelaie are sens. 2. Analizatorul de Performan , care poate analiza ntreaga baz de date i poate efectua recomandri i sugestii pentru mbuntirea acesteia. Expertul poate i mplementa de asemenea aceste recomandri i sugestii.
E. F. Codd a demonstrat c ntr - o anumit form relaiile posed proprieti nedorite, pe care le-a numit anomalii de actualizare. Aceste anomalii sunt: Anomalia de tergere , care const n faptul c anumite date care urmeaz s fie terse fac parte din tupluri n care se gsesc i alte date care sunt necesare i n continuare, ori tergerea fcndu -se la nivelul tuplului, acestea se pierd; Anomalia de adugare , const n faptul c anumite date care urmeaz s fie adugate fac parte din tupluri incomplete (pentru care nu se cunosc toate datele), ceea ce face ca acestea s nu poat fi adugate; Anomalia de modificare , care rezult din faptul c este dificil de modificat o valoare a unui atribu t atunci cnd ea apare n mai multe tupluri ale relaiei. Pentru a nltura aceste anomalii , E. F. Codd a stabilit trei forme normale pentru relaii i a introdus procesul de normalizare care se bazeaz pe noiunea de dependen funcional (FD) ca relaie ntre atributele unei entiti cu caracter invariant. Procesul de normalizare a relaiilor se realizeaz n mai muli pai, ncepnd cu forma normal unu (1NF) i ajungnd (dup ultimele cercet ri) la forma normal cinci (5NF). Aceasta const n descompunerea unei relaii n conformitate cu mulimea dependenelor funcionale F, ntr - o colecie de relaii care s conserve informaiile i dependenele funcionale din relaia iniial (descompunerea fr pierderi). O baz de date este n forma normal 1 dac i numai dac toate cmpurile din tabelele ei nu sunt repetate i conin numai valori atomice. O baz de date este n forma normal 2 dac i numai dac a trecut de forma normal 1 i n tabelele ei orice cmp non - cheie este complet dependent funcio nal de cheia primar. O baz de date este n forma normal 3 dac i numai dac a trecut de forma normal 2 i n tabelele ei fiecare cmp non -cheie este dependent numai de cheia primar. Fie urmtorul set de date, referitoare la vnzri:
Dencli SC Secundul SRL SC Secundul SRL SC Secundul SRL SC Tera Parte SRL SC Tera Parte SRL SC Tera Parte SRL SC Secundul SRL SC First SRL SC First SRL SC First SRL Adrcli Str.Verii nr 2 Str.Verii nr 2 Str.Verii nr 2 Str.Toamnei nr 3 Str.Toamnei nr 3 Str.Toamnei nr 3 Str.Verii nr 2 Str Primaverii nr 1 Str Primaverii nr 1 Str Primaverii nr 1 Telcli Nrfact Datafact Delegat DenProd 0261222222 1 21.10.2009 Popescu Zahar 0261222222 1 21.10.2009 Popescu Ulei 0261222222 2 22.10.2009 Drago Lapte 0261333333 5 24.10.2009 Trandafir Zahar 0261333333 5 24.10.2009 Trandafir Ulei 0261333333 5 24.10.2009 Trandafir Lapte 0261222222 6 25.10.2009 Popescu Lapte 0261111111 3 22.10.2009 Anton Lapte 0261111111 4 23.10.2009 Anton Ulei 0261111111 4 23.10.2009 Anton Lapte UM Cant Pret Discount kg 15 3,1 Fl 20 3,27 l 30 2,9 5 kg 25 3,1 Fl 11 3,27 l 20 2,9 5 l 15 2,9 5 l 18 2,9 Fl 12 3,27 l 15 2,9
19
1. Prima form normal , spune c toate coloanele unui tabel trebuie s conin valori atomice (indivizibile). Aadar, nu trebuie s existe cmpuri ce conin liste de valori sau grupuri de date. Tabelul respect condiiile cerute pentru aceast form. Cmpul Adrcli ar putea fi considerat un cmp complex i divizat n strad i numr , dar deoarece valorile incluse sunt manipulate, de obicei, n mod agregat, foarte mul i practicieni stocheaz n acest mod informa iile despre adrese. 2. A doua form normal, conform creia un tabel este n aceast form dac a trecut de prima form normal i dac toate cmpurile care nu sunt chei sunt dependente de cheia primar. Pentru transformarea n 1NF a tabelelor se ncearc gsirea unui identificator (cheie primar) i cmpur ile care sunt dependente de identificator. S- a gsit Dencli de care sunt dependente cmpurile Adrcli , Telcli . Pentru legtur introducem cmpul Cocli. Acestea alctuiesc un tabel pe care l putem numi Clien i . n mod similar se procedeaz i cu grupul de c mpuri DenProd , UM , Pret , pentru care s-a introdus Codprod i le vom grupa n tabelul Produse . Restul cmpurilor, la care adugm i cele dou coduri pentru relaii, constituie mpreun un tabel pe care l putem numi Facturi, n care cheia o constituie com bina ia de cmpuri: Nrfact, Datafact i Codprod .
Codcli # Dencli Adrcli Str.Verii nr 2 Telcli 0261222222 0261333333
Nrfact
Datafact
Delegat CodProd CodCli 222222 222222 222222 333333 333333 333333 222222 111111 111111 111111
Cant Discount 15 20 30 25 11 20 15 18 12 15 5 5 5
1 21.10.2009 Popescu 1075 1 21.10.2009 Popescu 1009 2 22.10.2009 Dragos 7023 5 24.10.2009 Trandafir 1075 5 24.10.2009 Trandafir 1009 5 24.10.2009 Trandafir 7023
DenProd Kg Fl L
UM
6 25.10.2009 Popescu 7023 3 22.10.2009 Anton 4 23.10.2009 Anton 4 23.10.2009 Anton 7023 1009 7023
La rndul lui, datorit nedependenei cmpurilor Delegat i CodCli de cheia compus, tabelul facturi se descompune n dou tabele: n primul pot fi trecute informa iile generale despre facturi cu cheia compus din :
Nrfact# 1 2 5 6 3 4 Datafact# Delegat 21.10.2009 Popescu 22.10.2009 Drago 24.10.2009 Trandafir 25.10.2009 Popescu 22.10.2009 Anton 23.10.2009 Anton CodCli 222222 222222 333333 222222 111111 111111
n al doilea pot fi trecute informaiile cu rndurile din facturi cu informa ii despre pro dusele vndute: 20
Nrfact# 1 1 2 5 5 5 6 3 4 4
Datafact# CodProd# 21.10.2009 1075 21.10.2009 1009 22.10.2009 7023 24.10.2009 1075 24.10.2009 1009 24.10.2009 7023 25.10.2009 7023 22.10.2009 7023 23.10.2009 1009 23.10.2009 7023
CodCli Cant Discount 222222 15 222222 20 222222 30 5 333333 25 333333 11 333333 20 5 222222 15 5 111111 18 111111 12 111111 15
3. A treia form normal, presupune ca tabelele s treac de a doua form i cmpurile ne -cheie s fie mutual independente pentru ca acestea s fie n aceast form normal. n bazele de date nu se pun cmpuri calculate. Primele trei tabele respect criteri ile pentru 3NF:
Clineti Codcli # Dencli Adrcli Str Primaverii nr 1 Str.Verii nr 2 Str.Toamnei nr 3 Produse Codprod # DenProd Fl L UM Kg Pret 3,1 3,27 2,9 1075 Zahar 1009 Ulei 7023 Lapte FactGen Telcli 0261111111 0261222222 0261333333 111111 SC First SRL 222222 SC Secundul SRL 333333 SC Tera Parte SRL
Nrfact# 1 2 5
n cel de -al patrulea tabel, observm c exist cmpul Discount, care este dependent n mod tranzitiv de cheia primar. Drept urmare, din acest tabel, vor fi create dou tabele care vor fi n 3NF.
FactProd
Nrfact# 1 1 2 5 5 5 6 3 4 4
Datafact# CodProd# Cant 21.10.2009 1075 15 21.10.2009 1009 20 22.10.2009 7023 30 24.10.2009 1075 25 24.10.2009 1009 11 24.10.2009 7023 20 25.10.2009 7023 15 22.10.2009 7023 18 23.10.2009 1009 12 23.10.2009 7023 15
21
22
Relaiile dintre tabele se realizeaz prin referine 2, stabilite ntre nregistrrile tabelelor i cheile tabelelor. Viabilitatea acestor referine poate fi nfptuit prin integritatea referenial, a crei scop este de a mpiedica apariia nregist rrilor solitare i de a pstra sincronizate referinele, astfel nct s nu apar nregistrri care se refer la alte nregistrri care nu mai exist. n A CCESS , integritatea referenial poate fi impus atunci cnd se definesc relaiile dintre tabele, pr in precizarea actualizrilor i tergerilor n cascad a cmpurilor corelate, precum este redat n figura anterioar . Dup activarea acestei impuneri pentru o relaie dintre dou tabele, A CCESS nu va mai permite niciunei aplicaii care utilizeaz baza de date nclcarea integritii refereniale pentru acea relaie, adic nu sunt posibile actualizri care modific inta unei referine i nici tergeri care elimin inta unei referine. Mai mult chiar, orice modificare a cheii primare se va propaga, n cascad, i n cheile strine, sau tergerea unui articol dintr - un tabelul de iniiere a referinei, va provoca tergerea tuturor articolelor din tabelul int al referinei, pentru care cheia strin are valoarea pe care o are cheia primar a articolului ters. A CCESS permite chiar i afi area n cascad a rela iilor dintre tabe le, precum n figura de mai jos: De exemplu, n datele pe care le utilizm, modificarea n tabelul Clienti , a codului client ( Codcli ) pentru SC Secundul SRL la valoarea 999999 , va determina modificarea valorii cmpului Codcli , cu valoarea 999999, pentru articolele corelate din tabelul Factgen (3 articole care au valoarea Codcli =222222). Dac se terge din
tabelul Clieni , articolul care are valoarea pentru Codcli egal cu 22222 2, se va
de la verbul a referi
23
produce (bineneles dup o atenionare i acceptul utilizatorului) tergerea n cascad a celor 3 articole corelate din Factgen . Folosirea sintagmei n cascad este ndreptit n acest caz, deoarece cele 3 articole din tabelul Factgen , sunt corelate, la rndul lor, cu articole din tabelul Factprod , dup cheia compus din cmpurile Nrfact i Datafact (4 articole: dou corespunztoare facturii 1, unul corespunztor facturii 2 i unul corespunztor facturii 6). Rezumnd, n structura de cascad di n figur, tergerea unui articol din tabelul Clieni provoac tergerea a trei articole n tabelul Factgen , provocnd mai departe tergerea a 4 articole n tabelul Factprod .
24
Dup aceasta este afiat o fereastr cu titlul Fiier nou baz de date n care utilizatorul are de stabilit: directoru l n care va fi salvat fiierul; numele fiierului n care va fi stocat baza de date.
Creare director nou List cu foldere i Instrumente pentru fisiere fiiere Scrierea numelui fiierului Tipul fiierului Alegerea locului de stocare
n fereastra Fiier nou baz de date se procedeaz n felul urmtor: n caseta pentru alegerea tipului fiierului se specific extensia fiierului sau se alege un tip din lista ataat; Pentru a ajunge la directorul unde fiierul va fi stocat, ut ilizatorul se folosete de lista ascuns, din primul rnd al fesrestrei, unde alege unitatea de stocare i apoi alege directorul sau fiierul dorit din lista cu directoare i fiiere. Aceste operaii se repet pn cnd se ajunge la locaia dorit ; 25
n case ta Nume fiier se va trece numele fiierului. Dac numele fiierului dorit apare n list, se poate face un clic pe fiierul dorit i numele lui va fi trecut automat n caseta de scriere a numelui fiierului (Atenie , n acest caz se va suprascrie fiierul ales). Operaia se termin cnd se apas butonul OK . Dac se dore te, se poate crea un director nou sau se poate apela la instrumentele pentru fiiere pentru cutare a, ordonarea, modul de afi are, adugarea n lista de preferine sau afiarea proprieti lor. Intrarea n noua baz de date se face atunci cnd este afiat fereastra baz de date .
Vizualizarea n modul proiectare ( Design view ) este posibil pentru toate obiectele. n acest mod se configureaz coninutul i forma obiectelor. n modul Foaie de date ( Data view ) sunt afiate, pentru a putea fi modificate, datele legate de obiectul curent (tabele sau integogri) . n modul Vizualizare raport ( Report view ) sunt afiate, prin intermediul 26
formatrilor prevzute ntr -un raport, datele legate de raportul curent. n modul Vizualizare formular ( Form view ) sunt afiate, prin intermediul formatrilor prevzute ntr -un formular, datele legate de formularul curent, pentru a putea fi modificate. n modul Vizualizare aspect sunt afiate datele, prin intermediul formatrilor prevzute ntr -un formular sau raport i se pot face une le modificri intuitive aspra machetei obiectului prin care se expun datele. Vizualizare SQL este un mod specific interogrilor. Utilizatorii bazelor de date trebuie s neleag c o interogare este n primul rnd o comand SQL (Structured Query Language). Tabelele vzute n modul Foaie de date a interogrilor, conin datele rezultate n urma execuiei comenzilor SQL. O interogare, vizualizat n modul proiectare, mai este c unoscut i sub numele de gril QBE (acronim de la sinta gma din englez Query by Example ) i vizualizeaz grafic comanda SQL. Examinarea naintea imprimrii este o redare pe ecran a modului cum va fi tiprit documentul (raport) pe hrtia de imprimant. Vizualizare PivotTable : e un mod de vizualizare care sinte tizeaz i analizeaz datele dintr-o foaie de date sau dintr- un formular. Se utilizeaz diferite niveluri de detaliere sau se organizeaz datele prin glisarea de cmpuri i elemente, prin afiarea sau ascunderea elementelor din listele verticale pentru cm puri. Vizualizare PivotChart : este un mod de vizualizare care arat o analiz vizual a datelor dintr-o foaie de date sau dintr-un formular. Sunt vizibile diferite niveluri de detaliere sau se indic aspectul prin glisarea de cmpuri i elemente sau prin e xpunerea i ascunderea de elemente n listele verticale pentru cmpuri.
Dac aplicaia ACCESS este deja deschis, se poate aciona pe pictograma din meniul ascuns legat de Butonul Office sau se alege opiunea > Deschidere , sau se apas concomitent Ctrl + O. i n aceste trei ultime cazuri, se deschide automat fereastra cu titlu Deschidere , cu a crei elemente componente utilizatorul i alege fiierul cu care dorete s lucreze. n fine, este posibil ca documentul care se dorete a fi deschis s fi fost editat recent i s apar ntr - un istoric, coninut n partea dreapt a meniul ui ascuns legat de Butonul Office , sau n prima parte a panoului de activitate Fiier nou , de unde poate fi deschis. Dar o baz de date A CCESS , concomitent cu aplicaia Microsoft ACCESS, pot fi deschise dintr-un File Manager , printr- un dublu clic pe orice document de tip baz de date ACCESS cu extensia .mdb (versiuni anterioare anului 2007) sau .accdb (versiuni ulterioare anului 2007), dac aplicaia A CCESS este instalat pe calculator. Asupra unei baze de date deschise se pot face modificri ale obiectelor ncapsulate: se pot crea noi tabele, se pot modifica structurile sau coninutul datelor, se pot crea noi interogri, formulare, rapoarte, pagini Web, sau se pot face modificri asupra celor existente. ACCESS are opiuni de salvare a principalelor tipuri de obiecte compuse care apar n fereastra Baz de date . Salvarea se refer la obiectul curent, atunci cnd el este vizualizat n modul proiectare (pentru interogri i cnd sunt vizualizate n modul SQL). n restul modurilor de vizualizare, pentru toate obiectele, salvarea, dac are sens, se refer la datele pentru care obiectul este interfa. Pentru obiectele curente, se pot face salvri sub alt format: html, xml, pdf , xls, doc etc. Pentru prima salvare a unor obiecte nou create, se folosete una dintre comenzile: >Salvare ca sau > Salvare . Se ajunge la o fereastr de salvare unde se precizeaz numele sub care va fi salvat obiectul. Dac se apeleaz comanda >Salvare ca mai este afiat i o caset de editare text combinat cu o list ascuns din care se poate alege tipul obiectului, pe cnd, dac se apeleaz la coma nda > Salvare , aceast caset combinat nu mai apare. Aceast salvare se poate face i cu combinaia de taste Ctrl + S sau apsnd buton ul al treilea din bara de instrumente Standard cu pictograma: . Dac exist deja o versiune a obiectului, salvat n baza de date, cu comanda Salvare, versiunea veche se suprascrie. Dar, se poate salva noua versiune, cu un nou nume sau ca alt tip de obiec t bazat pe obiectul iniial prin comanda > Salvare ca . n modurile de vizualizare interactive, valorile stabilite pentru controalele dif eritelor obiecte se salveaz automat dup prsirea controalelor, de aceea cnd iese dintr- un obiect, dac nu s - au fcut modificri n modul proiectare, utilizatorul nu mai este atenionat s fac salvare. Dac utilizatorul a efectuat modificri asupra unu i 28
obiect n modul proiectare, chiar dac trece ntr -un mod interactiv, utilizatorul este atenionat cnd prsete obiectul s - i salveze modificrile efectuate n modul proiectare. Pentru nchiderea unei baze de date se alege opiunea >nchidere .
29
Get help? este o facilitate a Microsoft Office de a explica elementele de interfa din aplicaiile sale. Alegnd butonul care e plasat n col ul din dreapta sus, se deschide o fereastr cu explica ii dependente de context. Ajutor pentru Microsoft ACCESS este funciunea care poate fi lansat i apsnd tasta F1 sau cu clic pe butonul . Se afieaz o fereastr de ajutor asemntoare celei de mai jos cu posibilitatea de a vedea o list complex a termenilor d e ajutor. n partea de sus sunt cteva butoane folosite pentru rsfoirea convenabil a acestor pagini de ajutor. n partea de jos sunt dou cadrane de pagini. Prima are ca titlu Contents (contents nseamn cuprins), i conine lista de teme a documentaie i numit Ajutor Microsoft Access i este structurat arborescent. Temele explicate pot fi simple sau
compuse. O tem simpl are la nceputul rndului o pictogram cu semnul atunci cnd este selectat, se afieaz explicaia ei n partea dreapt.
i,
30
Temele care sunt compuse din alte subteme, pot avea la nceputul rndului unul dintre semnele sau . Dac au semnul , atunci nseamn c apar n lista din stnga fr detalierea subtemelor incluse. Aceste teme incluse, pentru fiecare tem complex, pot fi afiate printr -un clic pe semnul de la nceputul rndului. Cnd tema apare n tr-o list, expandat cu subtemele incluse, are la ncep utul rndului semnul . Deasupra cadranului din stnga are ca titlu Cutare ( n limba en glez Search ) un instruent folosit pentru cutarea unor termeni n manualul aplicaiei. Dup cutare, sunt afiate subiectele unde apar termenii c u tai, iar efectuare a unui clic pe un subiect are ca rezultat afiarea acestuia n partea dreapt a ferestrei de ajutor.
31
Se mai poate apela la instrumentul abloane tabel . n ultimul timp se obinuiete ca s se promoveze nite structuri predefinite pentru a crea tabele sau chiar baze de date, pentru diferite probleme. Neajunsul const n faptul c structurile predefinite sunt greu pliabile pe o problem real. Pr obabil lipsesc cmpuri, sau sunt de tip necorespunztor i nu n ultimul rnd au denumiri greu de accep tat. Crearea tabelelor se poate face i cu instrumentul Tabel, prin introducerea de date. ntr - un format asemntor cu Excel se pot introduce date i apoi n modul proiectare (n limba englez: Design) se pot reboteza i restructura cmpurile. Structuri de tabele pot fi realizate i prin subprograme VBA, create de utilizatori.
32
Modul cel mai elegant, cel mai utili zat i convenabil de creare i apoi de modificare a structurilor tabelelor rmne utilizarea ferestrei de proiectare, precum n figura de mai jos , n care este vizibil a utomat u ltima fil cu instrumente de prelucrare a tabelelor, fila Proiectare .
ro/access/HA100307391048.aspx?pid=CH100621861048
33
Microsoft ACCESS ide ntific un cmp prin numele su de cmp. Dup specificarea numelui de cmp, n Vizualizare proiect pentru tabel, numele poate fi utilizat n expresii, proceduri Visual Basic i instruciuni SQL. Setarea acestei proprieti se efectueaz n partea de sus a ferestrei deschise prin apelarea instrumentului Proiectare tabel din fila Creare , sau prin redenumirea unei coloane n fereastra deschis prin apelarea instrumentului Tabel din fila Creare, sau utiliznd un limbaj de programare (de obicei limbajul Visual Basic). Ca tipuri sau subtipuri de date se pot folosi: text, memo, numr, dat/or, moned, autonumerotare, da/nu, obiect OLE, etc. Proprietatea Tip de date se utilizeaz pentru a preciza tipul de date stocat n cmpul unui tabel. Fiecare cmp stocheaz date constnd dintr -un singur tip de date. Proprietatea Tip de date utilizeaz urmtoarele setri: Setare Tip de date Dimensiune (Implicit) Text sau combinaie de text i Pn la 255 de caractere sau o lungime Text numere, precum i numere care nu mai mic setat prin proprietatea necesit calcule, cum ar fi numerele de Dimensiune cmp. Microsoft ACCESS telefon. nu rezerv spaiu pentru poriuni neutilizate din cmpul text. Text lung sau combinaii de text i Pn la 65.535 de caractere. Memo numere. Noile versiuni ale ACCESS-ului nregistreaz istoricul revizuirilor. Date numerice utilizate n calcule 1, 2, 4 sau 8 octei (16 octei dac Numr matematice. proprietatea Dimensiune cmp este setat la ID reproducere). Valori de date calendaristice i ore pentru 8 octei. Dat/Or anii cuprini ntre 100 i 9999. Noile versiuni ale ACCESS-ului ofer asisten pentru alegerea datei ntr-un calendar interactiv ncorporat. Moned Valori monetare i date numerice 8 octei. utilizate n calcule matematice care implic date avnd ntre unul i patru poziii zecimale. Cu precizie de 15 cifre n stnga separatorului zecimal i de 4 cifre n dreapta lui. AutoNu- Un numr secvenial unic (incrementat 4 octei (16 octei dac proprietatea Dimensiune cmp este setat la ID merotare cu 1). reproducere). Valori i cmpuri Da i Nu care conin 1 bit. Da/Nu numai una din cele dou valori (Da/Nu, Adevrat/Fals sau Activat/Dezactivat). Un obiect (cum ar fi o foaie de date Pn la 1 gigaoctet (limitat la spaiul-disc Obiect Microsoft Excel, un document Microsoft disponibil). OLE Word, grafic, sunete sau alte date binare) legate sau ncorporate ntr-un tabel Microsoft ACCESS. 34
Hyperlink Text sau combinaie de text i numere stocate ca text i utilizate ca adres hyperlink. Permite stocarea de diferite tipuri de Atach documente i fiierele binare n baza de date fr a crete inutil dimensiunea bazei de date. Microsoft Access 2007 comprim automat atarile, cnd este posibil, pentru a minimiza utilizarea spaiului.
Fiecare din aceste trei pri ale tipului de date Hyperlink conine pn la 2048 de caractere. Limitat la spaiul de disc disponibil.
Cmpurile Memo, Hyperlink i Obiect OLE nu se indexeaz. Este bine s se utilizeze tipul de date Moned pentru un cmp care necesit multe calcule implicnd date cu una pn la patru zecimale. Cmpurile cu tipul de date Simpl precizie i Dubl precizie necesit calcule n virgul mobil. Tipul de date Moned utilizeaz un calcul n virgul fix, mai rapid. Proprietatea Dimensiune cmp se utilizeaz pentru a seta dimensiunea maxim pentru datele stocate ntr - un cmp avnd tipul de date Text, Numr sau AutoNumerotare. Setarea acestei proprieti se face n strns legtur cu setarea proprietii tip de dat a cmpului (data type). Pentru proprietatea Tip date setat la Text , dimensiunea poate fi un numr de la 0 la 255. Setarea implicit este 50. Pentru AutoNumerotare, proprietatea Dimensiune cmp se seteaz la ntreg lung sau ID reproducere . Pentru proprietatea Tip date setat la N umr , setrile proprietii Dimensiune cmp i valorile lor sunt corelate ca n tabelul de mai jos: Setare Descriere Precizie Dimensiune zecimal de stocare Numere de la 0 la 255 (fr fraciuni). Fr 1 octet Octet 38 38 Numere ntre -10 1 i 10 1. 28 12octei Zecimal Numere ntre -32.768 i 32.767 (fr fraciuni). Fr 2 octei ntreg Numere de la 2.147.483.648 la 2.147.483.647 Fr 4 octei ntreg lung (fr fraciuni). 7 4 octei Simpl precizie Numere de la 3,402823E38 la 1,401298E-45 pentru valori negative i de la 1,401298E45 la 3,402823E38 pentru valori pozitive. 15 8 octei Dubl precizie Stocheaz numere de la 1,79769313486231E308 la 4,94065645841247E324 pentru valori negative i de la 4,94065645841247E324 la 1,79769313486231E308 pentru valori pozitive. Identificator unic global (GUID). N/A 16 octei ID reproducere Setarea acestei proprieti se efectueaz numai din foaia de proprieti a tabelului. 35
Valorile implicite ale dimensiunilor de cmp pentru cmpurile Text i Numr se p ot seta prin modificarea valorilor de la opiunea Designeri de obiecte , din fereastra afiat la selecia Opiuni Access , dup ce se face clic pe Butonul Microsoft Office . Este bine s se utilizeze cea mai mic posibil setare pentru proprietatea Dimensiune cmp deoarece dimensiunile mai mici de date sunt prelucrate mai rapid i solicit mai puin memorie. Numrul de zecimale (n limba englez: Decimal places): n cadrul acestei proprieti se stabilete numrul cifrelor afiate la dreapta separatorului zecimal, pentru valorile cmpului. Aceast setare are sens doar la tipurile de date Numr i Moned i poate stabili ntre 0 i 15 cifre s au Auto pentru determinarea automat a numrului de cifre pentru partea fracionar. Format : formatul n care sunt afiate informaiile. Important este de reinut c proprietatea Format se utilizeaz pentru stabilirea modului n care numere, date calendaristice, timp i text vor fi afiate i tiprite i nu afecteaz introducerea datelor. Aceast sarcin revine proprietii Input mask . Formatul de introducere, masca de intrare (n limba englez: Input Mask) este ablonul de introducere a datelor Setarea f ormatului de afiare i al celui de intrare poate fi o operaie c omplex i anevoioas. Este recomandabil ca de ea s fac uz programatorii experimentai. Nenelegerea coninutului informaiei datorit unui format ambiguu poate duce la deteriorarea unor date. Legenda (n limba englez: Caption) , cu sensul pe care l are n general n programarea orientat pe obiecte, aceasta permite specificarea unui al doilea nume n situaiile n care primul nu este destul de semnificativ. El apare n antetul cererilor d e interogare, a formularelor i a rapoartelor. Valoarea implicit (n limba englez: Default Value): este o valoare care este atribuit automat de sistem, n momentul introducerii datelor, dac utilizatorul nu completeaz acel cmp. Regul de validare (n limba englez: Validation Rule): este o restricie de introducere a datelor care oblig datele s respecte expresia introdus la aceast proprietate. n expresie practic se folosesc regulile de sintax specifice A CCESSului. Textul de validare (n limba englez: Validation Text ): reprezint textul care va aprea pe bara de mesaje n cazul n care valoarea introdus nu respect criteriul impus de regul de validare. Obligatoriu (n limba englez: Required): oblig sau nu completarea respectivului cmp n fiecare nregistrare. Indexat (n limba englez: Indexed): poate suporta trei posibiliti: a) Nu; 36
ordonat descendent, indexul Codcli este f ormat din cmpul [ Codcli ] ordonat ascendent, iar indexul PrimaryKey este format doar din cmpul [ Codcli ] n ordine ascendent.
Problema se complic atunci cnd se dorete schimbarea tipului unui cmp. Trebuie avut n vedere dac sunt posibile conversiile datelor din vechiul tip n noul tip. Conversia din tipul numr n tipul moned, sau invers, se face fr 38
probleme. i conversiile din numere n date/or i invers se fac fr probleme. Partea ntreag a numerelor se transform n dat iar p artea fracionar se transform n or. Numrul 0 se transform n #1.1.1900#. Pentru numerele negative, se scade din 1 ianuarie 1900, un numr de zile egal cu valoarea numrului. Pentru ore se face fracionar . De exemplu: ora 12 se transform n corespondena 0,5=12/24, ora 1 se transform n 0,04167=1/24, ora 14h45 devine 0,614583333=14 : 24, etc. Dac se dorete transformarea din text n numere cu format obinuit, este necesar ca n toate celulele s existe doar caractere le necesare pentru a scrie numere: cifre, marcatorul zecimal i semnele + i - .
ora partea 24
Poziionarea n cadrul tabelului se poate face cu mouse -ul sau cu tastele pentru deplasare n cadrul foii (Tastele cu sgei, Insert, Home, PageUp, PageDown). n plus, trecerea la cmpul urmtor se face cu tasta TAB sau apsnd ENTER dup ce s au introdus date n celul. Trecerea la cmpul anterior se face cu ajutorul combinaiei de taste Shift + TAB.
39
Articolul pe care este poziionat cursorul este evideniat prin accent de culoare. La editare se ine cont de proprietile cmpurilor stabilite n modul proiectare, nepermindu -se violarea regulilor de integritate. n tabel se pot introduce date din alte zone ale tabel ului, din alte tabele sau chiar alte aplicaii (Word, Excel) prin intermediul ferestrei Clipboard, prin operaiile Decupare sau Copiere, cuplate cu operaia Lipire. Ca o particularitate generat de lucrul cu nregistrrile, n A CCESS este aproape omnipre zent grupul de butoane de navigare cu semnificaie similar butoanelor de pe aparatele audio sau video.
Pentru introducere/editare de informaii totui nu se obinuiete utilizarea ferestrei Datasheet. De obicei programatorii proiecteaz formulare, cu po sibilitile oferite de SGBD, pentru introducerea de date n tabele. Totui, pentru tabele mici, nu se justific efortul pentru a se crea formulare.
Datele modificate dintr- o celul sunt salvate imediat dup prsirea ei. Revocarea modificrilor fcute n celula curent se face apsnd ESC. Pentru a re voca modificrile din ntreaga nregistrare, se face clic pe Anulare din bara de instrumente de navigare n nregistrri sau opiunea cu acelai nume din meniul Editare . Aceast anulare nu mai este posibil dac se mai fac alte modificri ntr - o alt nreg istrare.
41
Dac se selecteaz aceast opiune din meniu, dup ce sunt selectate mai multe nregistrri, atunci aceste nregistrri vor fi terse, mpreun cu nregistrrile n cascad, dac sunt definite relaii ntre tabele n bazele de adte . Pentru protecia datelor mpotriva tergerilor accidentale, operaia de tergere se revoc, dac operatorul nu confirm tergerea, ntr - o caset de forma celei de mai jos.
n mod similar, dac se selecteaz una sau mai multe coloane, i se face clic drepata pe selecie, se pot terge cmpuri din tabel. i aceast tergere necesit confirmarea operatorului. Cmpurile pot fi terse i cu instrumentul tergere din grupul Cmpuri i coloane , fila Instrumente tabel/Foaie de date.
Exerciii:
Concepei o structur pentru urmtorul set de date i realizai un tabel pe baza acesteia, n mediul Access, a crui denumire va fi ANG i n care se adaug, ca nregistrri, datele .
NrAng NumeA
2000 CHIVU 2049 DOROS 2956 NEGRU 2084 OSAN 2789 POPA 2396 POPAN 2553 RUSU 2024 TULIAN 2987 VUSCA 2643 ZIMAN
Fnc
SOFER INGINER INGINER ANALIST SOFER DIRECTOR
2555 CONTRA VANZATOR 2956 19.12.2000 1250 1400 2731 MARCU ANALIST
VANZATOR 2956 23.01.1999 1500 VANZATOR 2956 15.09.1999 1600 INGINER 2553 14.10.1999 2450
42
43
O relaie ntre tabele este reprezentat printr - o linie de relaie trasat ntre tabelele din fereastra Relaii . O relaie care nu are impus integritatea referenial apare ca o linie subire ntre cmpurile comune care accept relaia. Cnd relaia este selectat, fcnd clic pe linia sa, linia este afiat ngroat. Cu dublu clic se pot re edita condiiile ei. Dac este impus integritatea referenial pentru o relaie, linia apare ngroat la fiecare capt. n plus, numrul 1 apare deasupra poriunii ngroate a liniei n partea unu a relaiei, iar simbolul infinit () apare deasupra liniei n cealalt parte .
Exerciiu:
Creai relaiile ntre tabelele create n ultimul exerciiu al subcapitolului precedent.
44
45
Se afieaz fereastra cu titlul Cutare i nlocuire , existent n toate aplica iile pachetului Microsoft Office, cu cteva particularit i specifice pentru lucrul cu bazele de date. n caseta de text De cutat , se scrie textul care trebuie cutat. Ult imele iruri cutate, rmn n istoricul din lista ascuns ataat casetei, i la nevoie pot fi readuse. Ctarea se face doar n cmpul curent sau n ntreg tabelul, n funcie de opiunea aleas din lista Privire n : . irul cutat trebuie s se potriveasc cu nceputul cmpului, cu ntreg cmpul sau cu o parte oarecare din cmp, dup cum se alege din lista Potrivire: . De exemplu, dac se caut textul os ntr - un catalog de produse, dac se alege prima opiune, se pot gsi articole n care exist cmpuri care ncep cu textul os (osnz, os, ospen, etc); dac se alege a doua opiune, se pot gsi doar acele articole n care exist cmpuri care conin cuvntul os i nimic altceva; dac se alege a treia opiune, se pot gsi articole n care exist cmpuri care conin textul os (osnz, costume, costie, os, ospen, etc). Articolele n care se caut pot fi: de la articolul curent n sus, n jos sau printre toate articolele din tabel. n fine, se poate bifa caseta de selecie Potrivire litere mari i mici dac se dorete s se fac cutri insensibile la litere mari sau mici sau se poate bifa caseta de selecie Cutare n cmpuri dup format pentru a se ine cont de formatul de afiare a datelor din cmpuri.
se numete SQL (abreviere pentru sintagma din limba englez: structured query language, care se traduce n limba romn: limbaj structurat de interogare ). Rezultatul execuiei unei cereri, n majoritatea limbajelor, se numete vedere, deoarece este un cadru n care sunt accesibile o anumit parte a informaiilor din baza de date. Cele mai importante moduri de vizualizare a interogrilor sunt: mo dul proiectare , foaie de date i vizualizare SQL . Important de re inut este faptul c e vorba despre acela i con inut, etalat n trei moduri diferite de vizualizare. Dintre aceste posibiliti, modul proiectare este cel mai recomandat pentru a crea inter ogri n mod eficient ( interogri simple ). Pentru a crea o cerere de interogare n modul proiectare se parcurg paii : Din fila Creare, din ultimul grup de instrumente se face clic pe butonul Proiectare interogare .
Sistemul deschide automat fereastra d e creare asistat a interogrilor. Se afieaz o caset de dialog cu titlul Afiare tabel care conine cadrele de pagini Tabele , Interogri i Ambele . n aceste cadre de pagin sunt afiate toate tabelele i interogrile din baza de date curent. Interogarea care va fi creat va conine rnduri i coloane derivate din tabelele sau interogrile pe care utilizatorul le va extrage din caseta Afiare tabel . Pentru a extrage obiecte, se face dublu clic pe numele fiecrui obiect care se dorete a fi folosit. Ace ast caset de afi are a tabelelor se ascunde printr-un clic pe butonul nchidere .
47
Automat apare vizibilil ultima fil cu instrumente de lucru pentru interogri, i anume fila Instrumente interogri/Proiectare . Fereastra de lucru are dou pri: n partea de sus sunt afiate casete le cu structuri de nregistrri ale tabelelor sau interogrilor selectate din caseta afiare tabel. Dac nu e vizibil caseta Afiare tabel , acest lucru se poate face selectnd din panglic instrumentul Afiare tabel sau fcnd clic dreapta i apoi selectare Afiare tabel . Partea de jos a ferestrei se numete gril de proiectare ( design grid ), i conine elemente cu ajutorul crora se pot construi interogri . Aceasta mai este cunoscut i sub numele de gril QBE (Prescurtare de la sintagma din limba englez: Query By Exemples care poate fi tradus n romne te Interogare prin exemple ). Cmpurile se pot prelua din structurile surs prin glisarea lor din casetele de structuri n primul rnd al grilei QBE (rndul Cmp), unde se nscriu cmpurile interogrii rezultate. Cmpurile pot fi nscrise i efectiv n aceast linie sau alese din lista ascuns ataat liniei cmp din gril. Dac se dorete aducerea tuturor cmpurilor dintr - o tabel, se scrie semnul * n rndul cmpuri lor , iar n rndul tabel se nscrie tabelul n cauz. Pe lng cmpurile preluate din tabele le sau interogrile disponibile, interogrile pot conine i cmpuri calculate. Calculele se pot face linie cu linie sau pe grupuri de nregistrri. Pentru a se obine o coloan n primul caz, se nscrie n linia Cmp formula de calcul care are forma general: Nume- rezultat: expresie_aritmetic_sau_logic De exemplu : Valoarea: cantitate*[Pret unitar] vrsta: (Date() - [data naterii])/365 NB: Expresia Date() se refer reprezint o funcie care returneaz data sistemului.
Exerciii:
1. S se extrag din tabelul PROD numele, unitatea de msur i pretul cu TVA. 2. n modul Vizualizare SQL observai comanda SQL construit.
48
Rezolvare: 1. n fila Creare a panglicii, se alege penultima op iune Proiectare interogare. n caseta Afiare tabel se selecteaz Prod, se apas Adugare i apoi nchidere. Se gliseaz apoi cmpurile DenProd i UM din caseta cu structura tabelului Clienti n rndul Cmp din grila QBE, iar pentru al treilea cmp se scrie expresia "pret cu TVA": [pret]*1,19. Lansarea n execuie a interogrii se face apsnd butonul cu semnul ! din fila special de instrumente de proiectare interogri din panglic. Pentru eventualele modificri se alege din nou modul proiectare din meniul primei op iuni, Vizualizare, din fila mai sus amintit. 2. Se alege din meniul Vizualizare din panglic, op iunea Vizualizare SQL i se obine comanda: SELECT CLIENTI.Dencli, CLIENTI.Adresa, CLIENTI.Telcli FROM CLIENTI; Plasm n figur interogarea n modurile foaie de date i SQL. Pentru a face calcule pe grupuri de nregistrri, trebuie adugat o linie, cu numele Total , n grila QBE, ac ionnd n panglic asupra butonului Totaluri . Celulele din aceast lin ie trebuie neaprat s conin ceva dac este bifat caseta din rndul afiare a coloanei la care se refer. n acest caz, pe rndul total trebuie s existe, fie expresia Grupare dup , fie o funcie de grup ( sum, medie, contor, min, max, etc). 49
Exerciiu:
1. S se extrag din tabela ANG , media vechimii tuturor angaja ilor. 2. S se extrag din tabela ANG , suma salariului angaja ilor pe departamente. 3. n modul Vizualizare SQL observai comanda SQL construit la punctul 2. Rezolvare: 1. Se creeaz o nou interogare, n modul proiect alegndu - se ca surs tabelul ANG. n grila QBE, prima coloan , n prima celul se face clic i apoi se nscrie : vechimea:(Date() - DataAnga)/365 n panglic se acioneaz asupra butonului Totaluri pentru a se ad uga rnd ul Total la gril. n acest rnd, la coloana vechimea se alege din lista ataat, funcia Medie . Se lanseaz n execuie interogarea. Comanda SQL corespunztoare este afiat n medalion n figur . i rezultatul execuiei interogrii este suprapus ntr -un medalion peste figur.
Dac se dorete ca s se partcilula rizeze rezultatul, este accesibil modificarea proprietilor, n Foaia de proprieti .
50
2. Se creeaz o nou interogare, n modul proiect , alegndu - se ca surs tabelul ANG . n grila QBE, prima coloan se alege cmpul NrDept , iar n a doua se alege cmpul Sal . Se adaug linia de total, n care se nscrie pentru prima coloan Grupare dup iar la a doua coloan se alege funcia Sum . Se lanseaz n execuie interogarea, iar rezultatul i comanda SQL corespunztoare sunt:
SELECT ANG.NrDept, Sum(ANG.Sal) AS [Suma salariu pe departamente] FROM ANG GROUP BY ANG.NrDept; NrDept
10 20 30
Explicarea stabi lirii relaiilor n interogri, o vom exem plifica cu ajutorul a dou tabele: Prod i FactProd , care au structurile ce pot fi deduse din con inutul prezentat n figur:
ntre aceste dou tabele exist o relaie de 1 la n prin c mpul cod, de la Prod spre FactProd . Acest lucru trebuie neles prin faptul c fiecare produs poate fi con inut n mai multe facturi. Dac nu exist legturile necesare ntre tabele, acestea se pot stabili doar pentru interegarea curent, printr -o pr ocedur similar stabilirii relaiilor ntre tabelele bazelor de date, prin glisarea mouse- ului de pe cmpul de legtur din tabela principal spre cmpul de legtur din tabela secundar. Cele dou cmpuri trebuie s fie de acelai tip i dimensiune i pot fi chei primare sau externe. Dac deja exist o legtur, permanent sau propus de sistem, caracteristicile acesteia pot fi modificate sau pur i simplu legtura poate fi tears. n stabilirea relaiilor n interogri, exist trei posibiliti (vez i figura cu propriet i de asociere):
52
Pentru prima posibilitate, relaia este definit astfel nct, n asocierea celor dou tabele se iau nregistrrile pentru care cmpurile de relaie au valori egale. Este cel mai ntlnit tip de relaie, se numete echicompunere i, n exemplul nostru, se descrie n comanda SQL, astfel: FROM [Prod] INNER JOIN FactProd ON Prod.Codpro = FactProd.Codprod Pentru cea de a doua posibilitate, relaia este definit astfel nct, n asocierea celor dou tabele se iau toate nregistrrile din catalog, i nregistrrile din rulaj pentru care cmpurile de relaie au valori egale. Relaia se numete compunere extern stnga. n exemplul nostru, n comanda SQL, relaia este descris astfel: FROM [Prod] LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod n cea de a treia posibilitate, relaia este definit astfel nct, n asocierea celor dou tabele, se iau toate nregistrrile din rulaj, i nregistrrile din catalog pentru care cmpurile de relaie au valori egale. Pentru exe mplul nostru, n comanda SQL, relaia este descris astfel: FROM [Prod] RIGHT JOIN FactProd ON Prod.Codpro = FactProd.Codprod
Exerciiu:
S se extrag din tabelele Prod i FactProd valoarea produselor pe facturi. S se verifice rezultatul ob inut p rin cele 4 posibilit i din punct de vedere al asocierii: cele 3 din figura de mai sus i ruperea legturii.
53
Rezolvare: Se creeaz o nou interogare, n modul proiect alegndu - se ca surs tabelele Prod i FactProd . Se gliseaz apoi cmpurile NrFact , DataFact , DenProd casetele cu structurile tabelelor n rndul Cmp din grila QBE , iar pentru al patrulea cmp se scrie expresia Pret*Cant . n primul caz vom verifica rezultatul dac nu exist nici o legtur ntre tabele, apoi se verific rezultatul n celelalte 3 posibilit i de asociere. Rezultatele ob inute sunt prezentate n tabelul urmtor:
DenProd DenProd DenProd DenProd Datafact Datafact Datafact Datafact Nrfact Nrfact Nrfact Nrfact
Val
Val
Val
1 1 1 1 1 1 1 1 2 2 2 2 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6
21.10.2009 Ulei
49,05
1 5 4 1 5 2 5 6 3 4
21.10.2009 Ulei 24.10.2009 Ulei 23.10.2009 Ulei 21.10.2009 Zahar 24.10.2009 Zahar 22.10.2009 Lapte 24.10.2009 Lapte 25.10.2009 Lapte 22.10.2009 Lapte 23.10.2009 Lapte
65,40 35,97 39,24 46,50 77,50 87,00 58,00 43,50 52,20 43,50
1 5 4 1 5 2 5 6 3 4
1 5 4 1 5 2 5 6 3 4
21.10.2009 Zahar 46,50 21.10.2009 Lapte 43,50 21.10.2009 Malai 33,75 21.10.2009 Ulei 65,40
21.10.2009 Zahar 46,50 24.10.2009 Zahar 77,50 22.10.2009 Lapte 24.10.2009 Lapte 25.10.2009 Lapte 22.10.2009 Lapte 23.10.2009 Lapte Malai 87,00 58,00 43,50 52,20 43,50
21.10.2009 Zahar 46,50 24.10.2009 Zahar 77,50 22.10.2009 Lapte 87,00 24.10.2009 Lapte 58,00 25.10.2009 Lapte 43,50 22.10.2009 Lapte 52,20 23.10.2009 Lapte 43,50
21.10.2009 Zahar 62,00 21.10.2009 Lapte 58,00 21.10.2009 Malai 45,00 22.10.2009 Ulei 98,10
22.10.2009 Zahar 93,00 22.10.2009 Lapte 87,00 22.10.2009 Malai 67,50 24.10.2009 Ulei 81,75
24.10.2009 Zahar 77,50 24.10.2009 Lapte 72,50 24.10.2009 Malai 56,25 24.10.2009 Ulei 35,97
24.10.2009 Zahar 34,10 24.10.2009 Lapte 31,90 24.10.2009 Malai 24,75 24.10.2009 Ulei 65,40
24.10.2009 Zahar 62,00 24.10.2009 Lapte 58,00 24.10.2009 Malai 45,00 25.10.2009 Ulei 49,05
54
Val
DenProd
DenProd
DenProd
DenProd
Datafact
Datafact
Datafact
Datafact
Nrfact
Nrfact
Nrfact
Nrfact
Val
Val
Val
3 3 3 3 4 4 4 4 4 4 4 4
22.10.2009 Ulei
58,86
22.10.2009 Zahar 55,80 22.10.2009 Lapte 52,20 22.10.2009 Malai 40,50 23.10.2009 Ulei 39,24
23.10.2009 Zahar 37,20 23.10.2009 Lapte 34,80 23.10.2009 Malai 27,00 23.10.2009 Ulei 49,05
n primul caz, atunci cnd nu au fost definite legturi ntre tabele, s -au f cut asocieri pentru fiecare dintre cele 4 tupluri din primul tabel (cu structura DenProd cmp individual i Pret ca parte component pe ntru Val ) cu fiecare dintre cele 10 tupluri din al doilea tabel (cu structura NrFact i DataFact cmpuri individuale i Cant ca parte component pentru Val ). Au rezultat 40 de articole. n cel de -al doilea caz s- au fcut asocieri doar petru tuplurile c are provin din articole n care Prod.Codpro = FactProd.Codprod, rezultnd 10 articole. Pentru cel de-al treilea caz s-a f cut adugare la rezultatul cazului doi, tuplurile din tabelul Prod care nu au corespondent n tabelul FactProd (e vorba de produsul Malai ). n cel de -al patrulea caz, s- ar fi fcut adugiri la rezultatul cazului al doilea, tupluri din tabelul FactProd care nu au corespondent n tabelul Prod , dar nu au fost gsite.
Exerciiu:
S se extrag din tabelele Clienti , FactGen , Prod i FactProd valorile din toate cmpurile i din toate nregistrrile, resp e ctnd rela iile dintre tabele. Rezolvare: Se creeaz o nou interogare, n modul proiect alegn du- se ca surs tabelele Clienti , FactGen , Prod i FactProd . Se gliseaz apoi c mpurile celor patru tabele, avndu - se grij ca dintre cmpurile de relaie s fie incluse doar o parte, 55
Val
333333 SC Ter a Parte SRL 333333 SC Ter a Parte SRL 333333 SC Ter a Parte SRL 222222 111111 111111 111111 SC Secundul SRL SC First SRL SC First SRL SC First SRL
Exerciiu:
S se extrag, din tabelul ANG , numele i func ia angaja ilor care au salariu ntre 1500 i 3000, ordonai descresctor dup vechime. 56
Rezolvare: Se creeaz o nou interogare bazat pe tabelul ANG . Se stabile sc ca i cmpuri ale interogrii: [NumeA], [Fnc], [DataAnga] i [Sal] . Cmpul DataAnga i Sal nu trebuie bifate la rndul Afiare i la Criterii trebuie nscris >10, iar n rndul Sortare pentru [DataAnga] se selecteaz Ascendent . Grila QBE este redat n figura de mai jos:
57
Alegerea filtrului n locul nregistrrilor este motivat atunci cnd operaia de extragere de informaii este mai simpl. Dac extragerea de informaii este mai laborioas, atunci este de preferat s se aleag interogrile. Exist mai multe categorii de filtre. Probabil, cel mai simplu este filtrul de selecie, stabilit prin ac ionarea instrumentului cu acela ii nume, din fila Pornire a panglicii Accesss. Dac un tabel sau o interogare este vizualizat n modul Foaie date , atunci cnd cursorul este ntr - o anumit celul i se face clic pe butonul Selec ie din grupu Sortare i selec ie , se selecteaz din foaia de date toate nregistrrile care au n cmpul curent o valoare care fa de valoarea aleas poate fi: aceea i; diferit; mai mic; mai mare; sau ntr -un interval. Filtrare a se mai poate efectua cu un clic dreapta aplicat unui cmp, ntr -un tabel se deschide un m eniu care are ca prime opiuni operaii de filtrare: Filtrare prin selecie; F iltrare cu excluderea seleciei; Filtrare pentru ; Eliminare Filtrare/sortare. Filtrar ea prin selecie e descris n alineatul precedent i redat n figura urmtoare.
58
Filtrarea cu excluderea seleciei extrage articolele care nu apar n cazul anterior. La Filtrare pentru se poate da un criteriu de cutare n cmpul curent. Dac pentru criteriu de selecie se d un text simplu, practic funcionarea este identic cu Filtrarea prin selecie . Dar acest filtru este mai complex deoarece n caseta pentru se pot introduce expresii, ca de exemplu: Mai mic < sau mai mare < dect anumite valo ri numerice sau literare; caracterul joker * pentru realizarea de expresii de forma contine text, ncepe cu textul, se termin cu textul, sau negarea acestor expresii etc. Filtrele se pot aplica prin suprapunere, mereu reducn du- se numrul nregistrrilor. Revenirea la situaia iniial se face selectnd din meniu opiunea Comutare filtrare . Filtrele mai complexe se pot executa cu opiunea Filtrare complex , prin care utilizatorul este ajutat s efectueze filtrri ale datelor cu ajutorul unei grile asemntoare grilei QBE (Vezi figura):
form mai mult sau mai puin dezvoltat de SQL. Pe lng manipularea i regsirea datelor, se efectueaz i operaii complexe privind actualizarea i administrarea bazei de date. SQL eare un set de comenzi n limba englez, simple i clare, care poate fi utilizat att de specialiti ct i de nespeciali ti. Nu este un limbaj procedural, nu are proceduri de control, fiecare SGBD avnd un motor care are printre func iuni sarcina optimizrii cererilor. Limbajul SQL f olosete cuvintele select, insert, delete ca pri ale setului de comenzi. SQL pune la dispoziia programatorilor comenzi pentru rezolvarea unor probleme ca: date interogate; inserarea, extragerea i tergerea rndurilor intr -un tabel; crearea, modificarea i tergerea obie ctelor de tip baza de date; controlul accesului la baza de date i la obiectele de tip baza de date; garantarea consistentei bazei de date. Limbajul SQL a fost dezvoltat ntr-un prototip de sistem de management a bazelor de date relaionale , System R, de ctre compania IBM, la mijlocul anilor 1970. n 1979, Corporaia Oracle introduce prima implementare a SQL n varianta comercial. Exist un anumit grad de standardizare a limbajului SQL, mai multe sisteme de gestiune a bazelor de date recunoscnd principalele instruciuni ale acestuia (de exemplu: Oracle, Access, Sysbase etc.). Pe plan mondial, standardul n domeniu este considerat ANSI (American National Standards Institute). SQL are n vedere att aspectele de definire, interogare, manipulare a dat elor, procesare a tranzaciilor, ct i caracteristicile complexe privind integritatea informaiilor, cursoarele derulante sau jonciunile externe. Muli productori de sisteme de gestiune a bazelor de date furnizeaz propriile extensii ale limbajului SQL, asigurndu - i astfel exclusivitatea. ACCESS utilizeaz versiuni standardizate ale SQL, prin setarea mediului la SQL ANSI-89 sau SQL ANSI-92. Mediul ACCESS ncurajeaz utilizarea limbajului SQL n scopul optimizrii i eficientizrii lucrului cu bazele de date. SGBD- urile manipuleaz , prin prisma instruc iunilor SQL, structuri de date, instruciunile SQL reprezentnd unul dintre modurile de vizualizare al diferitelor colec ii i structuri de date. Astfel comenzile SQL pot fi plasate n multe locuri din ACCESS , acolo unde se introduce numele unui tabel, al unei interogri sau al unui cmp. 60
n unele cazuri, A CCESS completeaz automat instruciunea SQL. De exemplu, atunci cnd se utilizeaz un expert pentru a crea un formular sau raport care preia date din mai multe tabele, ACCESS creeaz automat o instruciune SQL pe care o utilizeaz ca setare pentru proprietatea Surs nregistrri a formularului sau raportului. Atunci cnd trebuie creat o caset list sau combo cu un expert, A CCESS creeaz o instruciune SQL i o utilizeaz ca setare pentru proprietatea Surs nregistrri a casetei list sau a casetei combo. De asemenea, SQL poate fi utilizat n: Argumentul Instruciune SQL al aciunii de macrocomand ExecuieSQL . Aceast facilitate este uzitat i de limbaj ele clasice de programare pentru acces la bazele de date. n cod , ca ir de caractere literale sau ca instruciune SQL care conine variabile i controale. Proprietatea SQL a unui obiect QueryDef pentru a modifica instruciunea SQL subordonat unei interogri. n paragrafele anterioare ale acestui capitol au fost prezentate modalit i de concepere automat a interogrilor folosind tehnica grafic a grilei QBE, prin care informaia definit i apoi modificat pe grila QBE este automat transformat ntr -o in struciune SQL care este posibil de vizualizat sau actualizat n modul Vizualizare SQL . Grila QBE are limite n realizarea de interogri complexe, motiv pentru care nsuirea temeinic a clauzelor comenzilor limbajului SQL este indispensabil n realizarea unei activit i de proiectare, administrare i utilizare a bazelor de date. Implementrile n diferite limbaje SQL difer cte puin , f iecare prin sintax. n ACCESS principalele reguli sunt redate mai jos: o comand se ncheie cu ";" ; comenzile SQL pot fi pe una sau mai multe linii; clauzele sunt uzual plasate pe linii separate; comenzile SQL nu sunt 'case sensitive' ; ntr - o interogare unde se folosesc cmpuri din mai multe tabele, pentru a separa numele tabelului de numele cmpului, se va utiliza modelul: tabel.cmp ; dac se folosesc spaii sau diacritice n numele cmpurilor sau tabelelor, aceste nume trebuie s fie ncadrate ntre paranteze drepte; elementele din listele diferitelor clauze sunt separate prin virgul; valorile de tip ir de caractere sunt ncadrate nt re apostrof sau ghilimele; n expresiile din cadrul clauzelor se folosesc operatorii aritmetici, relaionali i logici obinuii din informatic;
61
simbolurile ? i * sunt folosite pentru a desemna unul sau mai multe caractere de nlocuire 5; valorile de tip dat/timp sunt ncadrate cu caracterul # . Pentru explicarea entit ilor i structurii unui limbaj de programare se utilizeaz metalimbajul. Cnd n descrierea unei instruciuni anumite pr i constitutive por s lipseasc, acestea sunt intercalate ntre paranteze 6 drepte [ ]. Dac dintre cteva elemente este necesar optarea penntru unul dintre ele, elementele sunt intercalate ntre acolade { }, separate de caracterul pipeline | . Dac un anumit tip de component se poate repeta, acest fapt se noteaz cu trei puncte .
5 6
Caractere jocker A nu se confunda cu utilizarea acestor paranteze n metalimbaj cu utilizarea lor n VBA pentru
62
Pentru modificarea structurii unui tabel se utilizeaz comanda ALTER TABLE cu urmtoarea sintax (simplificat): ALTER TABLE table {ADD {COLUMN field type[(size)] [NOT NULL] [CONSTRAINT index] | ALTER COLUMN tip de cmp[(dimensiune)] | CONSTRAINT multifieldindex} | DROP {COLUMN field I CONSTRAINT indexname} } Exemplu: Se modific n tabel a ANG pentru ultimul cmp, tipul n Byte : ALTER TABLE ANG ADD ALTER COLUMN NrDept Byte . Comanda DROP TABLE nume_tabel este folosit pentru a terge complet o tabel dintr - o baz de date (structura i valorile asociate).
63
DISTINCTROW : are n vedere nregistrrile duplicate n ansamblul lor, nu numai pe cele care au cmp uri duplicate; TOP : are ca efect prezentarea primelor articole rezultate, ca procent din total sau n numr absolut. Ceea ce urmeaz dup predicat n prima clauz formeaz o list de selec ie n care sunt cuprinse toate cmpurile care vor aprea n tabel cu rezultatele interogrii. Cmpurile adugate n rndul Field din grila Query a machetei grafice QBE, care au marcat caseta de validare Show , sunt aceleai cu cele menionate n lista de selecie. Simbolul * are rol de caracter jocker. De fapt n aceast list pot fi incluse i expresii care pot sau nu s fie sensibile la articolele din tabelele surs. De asemenea, n scrierea interogrilor de selecie simple SQL ACCESS este posibil i folosirea funciilor totalizatoare. Cele ma i importante funcii din aceast categorie sunt: COUNT : returneaz numrul de nregistrri care respect condiii le stabilite prin clauza WHERE ; SUM : red suma tuturor valorilor dintr- un cmp, op ereaz numai cu valori numerice; AVG : calculeaz valoarea medie a unui cmp nu meric; MAX : permite determinarea celei mai mari valori dintr- un cmp; MIN : duce la obinerea celei mai mici valori a unui cmp rmne valabil i aici restricia privind clauza WHERE . Aceste funcii se mai numesc i funcii de grupare , iar mulimea i valorile rezultatelor obinute sunt direct condiionate de clauza GROUP BY . n cadrul listei de selecie se pot defini i alias-uri . Acestea reprezint un pseudonim (nume) asociat unui cmp astfel: cmp AS alias al funciei agregat. Clauza FROM specific numele tabelei sau tabelelor care vor forma suportul interogrii. Dac n lista_selecie se includ cmpuri din mai multe tabele, n fa a numelui ac estora trebuie precizat tabela din care fac parte. Aa cum artam la regulile de sintax, pen tru separarea numelor de tabele se utilizeaz semnul , (virgul). Trebuie s precizm faptul c n cadrul acestei clauze se pot meniona pe lng tabele, ca surse de informaii pentru interogrile SQL, i interogri care au fost deja create. n continuare redm cte va exem plificri ale acestor precizri: Pentru a selecta toate coloanele dintr- o tabel se utilizeaz caracterul asterix ('*') dup cuvntul SELECT . 64
SELECT * FROM ANG; NrAng NumeA Fnc Csf DataAnga Sal Rate NrDept
2000 CHIVU SOFER 2956 23.02.1999 950 30 30 20 20 30 20 30 20 10 30 30 10
2555 CONTRA VANZATOR 2956 19.12.2000 1250 400 2049 2731 2956 2084 2789 2396 2553 2024 2987 2643 DOROS MARCU NEGRU OSAN POPA POPAN RUSU INGINER ANALIST INGINER ANALIST 2553 31.10.2000 2975 2049 19.03.1999 3000 2553 11.01.1999 2850 2049 19.12.2000 3000
VANZATOR 2956 26.03.1999 1250 500 SOFER DIRECTOR 2084 13.01.1999 800 19.02.1999 5000
TULIAN VANZATOR 2956 23.01.1999 1500 VUSCA VANZATOR 2956 15.09.1999 1600 300 ZIMAN INGINER 2553 14.10.1999 2450
SAL
950 1250 2975 3000 2850 3000 1250 800 5000 1500 1600 2450
Uneori dorim s crem noi coloane prin expresii. Regulile de sintax i de preceden sunt cele obinuite, funcie de tipurile de date ale operanzilor sau cmpurilor ce concur la realizarea expresiilor. n urmtorul exemplu se e valueaz prima dat nmulirile (Sal * 12 i Comp * 12); apoi cele dou valori produs sunt adunate. 65
Expr1001
Cmpul se va numi Expr1001. Pentru ca sistemul s nu i atribuie o denumire implicit trebuie s se specifice un alias asemeni celui din exemplul de mai jos: SELECT NumeA, Sal*12-Rate*12 as VenitAnual FROM ANG; SQL trateaz corect valorile nule. Dac apar n expresii, valorile nule provoac rezultatul Null, indiferent de tipul celorlai operatori implicai. Din pcate, acest lucru se poate perpetua n obiectele n care aceste interogri vor fi folosite mai departe. Pentru aceasta exist funcia Nz , care nlocuiete expresiile Null cu o anumit valoare, de obicei 0 pentru expresii care n mod firesc ar trebui s fie numerice, "" pentru string, etc. Deci, p entru a face ca interogarea s funcioneze corect ea trebuie transformat sub urmtoarea form:
SELECT NumeA, Sal*12 -Nz(Rate,0)*12 as VenitAnual FROM NumeA
CHIVU CONTRA DOROS MARCU NEGRU OSAN POPA
ANG;I VenitAnual
11400 10200 35700 36000 34200 36000 9000
66
ANG;I VenitAnual
9600 60000 18000 15600 29400
Prin clauza WHERE se pot selecta numai anumite articole, i anume acele a care ndeplinesc criteriul descris. Parametrul criteriul ui de selecie este o expresie care are rezultatul obligatoriu logic. n expresia clauzei WHERE obligatoriu trebuie s apar cel puin un cmp. Clauza WHERE este opional i nu opereaz cu funcii totalizatoare. n cadrul condiiei din clauza WHERE pot fi utilizai operatorii relaionali : (>, >=, <, <=, =, !=) , logici: (AND, OR, NOT) i SQL : (IN, BETWEEN, LIKE, IS NULL) . Apelnd la acetia, este posibil construirea unor condiii mai complexe. Redm n continuare cteva exemple de utilizare a acestei clauze: Pentru a afia angaja ii anterior datei 01.01.2000, se d comanda:
SELECT ANG.NumeA, ANG.DataAnga FROM ANG WHERE [DATAANGA]<=#1/1/2000#; NumeA
POPAN VUSCA POPA NEGRU ZIMAN MARCU RUSU TULIAN CHIVU
DataAnga
13.01.1999 15.09.1999 26.03.1999 11.01.1999 14.10.1999 19.03.1999 19.02.1999 23.01.1999 23.02.1999
Dac se dorete s se extrag angajaii ai cror salariu este ntre 1500 i 3 000:
67
SELECT ANG.NumeA, ANG.Fnc FROM ANG WHERE (((ANG.Sal)>1500 And (ANG.Sal)<3000)) ORDER BY ANG.DataAnga; NumeA
NEGRU VUSCA ZIMAN DOROS
Fnc
INGINER VANZATOR INGINER INGINER
Presupunem c dorim s gsim angajaii care sunt efi, au unul din numerele de marc apar innd (CSf):
SELECT WHERE NrAng
2049 2956 2553 2084
CSf
2553 2553
Pentru a selecta toi INGINER ii cu salarii peste 1500 i toi vnztorii se folosete:
SELECT NrAng,NumeA,Fnc,Sal,NrDept FROM AND OR NrAng
2987 2789 2049 2555 2956 2643 2024
NumeA
VUSCA POPA DOROS CONTRA NEGRU ZIMAN TULIAN
Sal
1600 1250 2975 1250 2850 2450 1500
NrDept
30 30 20 30 30 10 30
Dac se dorete selectarea tuturor INGINERilor i a vnztorilor cu salarii peste 1500 se introduce:
68
NumeA
VUSCA DOROS NEGRU ZIMAN
Sal
1600 2975 2850 2450
NrDept
30 20 30 10
Parantezele specific ordinea n care operatorii vor fi evaluai. n al doilea exemplu operatorul OR este evaluat naintea operatorului AND . n astfel de operaii complexe trebuie avut mare atenie la precedena operatorilor de toate tipurile, pentru c altfel rezultatul poate fi imprevizibil. Sumar, regulile de preceden sunt redate n ceea ce urmeaz: Toi operatorii sunt aranjai ntr -o ierarhie, ceea ce le determin precedena. ntr - o expresie operaiile sunt executate n ordinea precedenei lor de la mare la mic. Cnd operatorii au precedena egal atunci ei se evalueaz de la stnga l a dreapta. 1. Toi operatorii de comparaie i SQL au precedena egal: =,!=,,<=,>=,BETWEEN...AND,IN,LIKE,IS NULL. 2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE not(sal=2000)) 3. AND 4. OR. De fiecare dat cnd exist dubiu despre care dintre dou operaii vor fi executate mai nti cnd o expresie este evaluat, se recomand utilizarea parantezelor pentru clarificarea semnificaiei dorite i obinerii rezultatului scontat. Clauza ORDER BY se utilizeaz atunci cnd se dorete ca rezul tatele interogrii s fie ordonate dup unul sau mai multe cmpuri_criteriu (definite drept chei de sortare). Sortarea este opional i se poate realiza n mod cresctor (ASC) sau descresctor (DESC), separat pentru fiecare cmp din list. Exemplificare a folosirii acestei clauze este comanda prin care se extrag n ordine a cresctoare a vechimii (invers a valorilor coloanei DataAnga) date din tabelul ANG:
69
Clauza GROUP BY precizeaz cmpul sau cmpurile pe baza crora se va efectua gruparea nregistrrilor. n acelai timp, prin intermediul acestei clauze, se pot executa funciile agregate descrise n lista de selecie pentru fiecare dintre grupri (constituite pe baza cmpurilor de grupare). Echivalentul acestei clauze n macheta grafic QBE de construcie a interogrii l reprezint rndul Total . Pentru a calcula totalul salariilor pe departamente, se utilizeaz comanda:
SELECT SUM(SAL) AS [TOTAL DEPARTAMENT], NRDEPT FROM ANG GROUP BY NRDEPT; TOTAL DEPARTAMENT NRDEPT
7450 9775 9400 10 20 30
Pentru a calcula suma salariulu i salariul mediu distribuite de ctre persoanele cu funcii de conducere, se utilizeaz comanda:
SELECT Sum(ANG.SAL) AS Sum, Avg(ANG.SAL) AS Medie, ANG.CSF AS Responsabil FROM ANG GROUP BY ANG.CSF; Sum Medie Responsabil
5000 6000 800 8275 6550 5000,00 3000,00 800,00 2758,33 1310,00 2049 2084 2553 2956
70
La prima vedere s- ar prea c clauza HAVING ar fi redundant. Din contr, ea este foarte necesar. Spre deosebire de WHERE , care acioneaz nainte de a se efectua gruparea nregistrrilor, HAVING va opera dup definirea acesteia. Pentru HAVING c riteriul va fi aplicat cmpului definit ca argument al funciei agregat. Altfel spus, cnd se folosete clauza GROUP BY i este necesar i o condiie, se va utiliza clauza HAVING . Un exemplu edificator ar fi extragerea funciilor pentru care toi angajaii au salariu mai mare dect 1 500:
SELECT Fnc, MIN(Sal) as [salariu minim] FROM ANG GROUP BY Fnc HAVING MIN(Sal) >= 1500 ORDER BY MIN(Sal); Fnc salariu minim
INGINER ANALIST DIRECTOR 2450 3000 5000
Rezultatul este diferit de cel care de obine prin mutarea condiiei la la clauza WHERE. Interpretarea unei astfel de nregistrri ar fi: extragerea pe funcii a salariului minim, pentru toi angajai i cu salarii mai mari sau egale dect 1500 :
SELECT Fnc, MIN(Sal) as [salariu minim] FROM ANG where Sal >= 1500 GROUP BY Fnc ORDER BY MIN(Sal); Fnc salariu minim
VANZATOR INGINER ANALIST DIRECTOR 1500 2450 3000 5000
De remarcat faptul c se admite utilizarea unei funcii agregat care nu apare n lista de selecie, precum i apelarea la mai multe criterii de grupare. Puterea limbajului SQL este pus n eviden atunci cnd se lucreaz cu mai multe tabele, cnd se exploateaz relaiile sau chiar asocierea dintre ele. Operaiile de asociere induse de clauza JOIN au ca rezultat producerea tuturor combinaiilor posibile, pentru coninutul informaional al fiecrei tabele. Noile nregistrri care rezult n urma jonciunii vor deveni disponibile pentru seleciile ulterioare. La o asociere pot participa mai mult de dou tabele. Principala modalitate de realizare a jonciunii este sintetizat de urmtoarea sint ax , a celei de-a doua clauze a comenzii SELECT : FROM nume_tabela1 {INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabela2 ON criteriul_de_asociere 71
[{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabela3 ON criteriul_de_asociere]... Semnificaia elementelor de sintax descrise mai sus este urmtoarea: INNER, LEFT OUTER, RIGHT OUTER se refer la tipurile de jonciuni (INNER JOIN , intern de tip echivalent, LEFT OUTER JOIN , extern de stnga, RIGHT OUTER JOIN , extern de dreapta). De remarcat faptul c SQL ACCESS a ccept scrierea interogrilor externe fr specificarea explicit a lui OUTER . JOIN specific tabela care va fi asociat (nume_tabela2, nume_tabela3...) tabelei precizat n clauza FROM ,. ON este criteriul de asociere i arat relaia dintre cmpurile pe care se bazeaz jonciunea. Unul se afl n tabela asociat, iar cel lalt exist ntr - o alt tabel din lista cu numele tabelelor. Expresia criteriul_de_asociere conine un operator de comparaie (=,<,>,<>,<=,>=) i va returna valorile logice TRUE sau FALSE . Jonciunile tip INNER JOIN determin o asociere a nregistrrilor din tabele, astfel nct s rezulte doar informaii din nregistrrile din fiecare tabel care respect criteriul de asociere. Jonciunile externe (OUTER) sunt de dou tipuri: de stnga (LEFT OUTER JOIN) i de dreapta (RIGHT OUTER JOIN) , fiind destul de puin utilizate. Echivalentul QBE al acestor categorii de jonciuni este alegerea opiunilor 1, 2 sau 3, din caseta Join Properties , care au fost explicate ntr -un capitol precedent (3.4). Ca exemplu, fie urmtoarea interogare totul si toate : SELECT CLIENTI.Codcli, CLIENTI.Dencli, CLIENTI.Adresa, CLIENTI.Telcli, FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod, Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret FROM Prod INNER JOIN ((CLIENTI INNER JOIN FactGen ON CLIENTI.Codcli=FactGen.Codcli) INNER JOIN FactProd ON (FactGen.Nrfact=FactProd.Nrfact) AND (FactGen.Datafact=FactProd.Datafact)) ON Prod.Codpro=FactProd.Codprod; De observat c este este recomandabil scrierea complet din punct de vedere sintactic a numelui cmpurilor. Precedarea sintactic a numelui cmpurilor de numele tabelului i semnul . e obligatorie, n multimea cmpurilor tabelelor la care se face referire n clauza FROM , dac o denumire de cmpuri apare de cel puin dou ori . Acelai rezultat poate fi obinut fr a se recurgere la opiunile JOIN n clauza FROM , ci specificare condiiilor de legtur n clauza WHERE , precum n comanda de mai jo s : 72
SELECT CLIENTI.Codcli, CLIENTI.Dencli, CLIENTI.Adresa, CLIENTI.Telcli, FactGen.Nrfact, FactGen.Datafact, FactGen.Delegat, FactProd.Codprod, Prod.DenProd, Prod.UM, FactProd.Cant, Prod.Pret FROM Prod, Clienti, FactGen, FactProd WHERE (CLIENTI.Codcli=FactGen.Codcli) AND (FactGen.Nrfact=FactProd.Nrfact) AND (FactGen.Datafact=FactProd.Datafact)AND (Prod.Codpro=FactProd.Codprod) ; Opiunea JOIN a fost introdus n standardul SQL din 1992, pn atunci, specificarea relaiilor s - a fcut prin clauza WHERE . Prin parametrii RIGHT sau LEFT opiunea JOIN a adus i o simplificare a unor comenzi. Fie, de exemplu, interogarea de extragere a totalului valorii i cantitii pe produse:
SELECT Prod.DenProd, Prod.UM, Sum(FactProd.Cant) AS SumalCant, Prod.Pret, Sum([Cant]*[PRET]) AS SumValoare FROM Prod LEFT JOIN FactProd ON Prod.Codpro = FactProd.Codprod GROUP BY Prod.DenProd, Prod.UM, Prod.Pret; TOTAL VALOARE SI CANT DenProd UM SumalCant Pret SumValoare
Lapte Malai Ulei Zahar l kg Kg kg 98,00 43,00 40,00 2,9 2,25 3,27 3,1 284,20 140,61 124,00
Fr opiunea JOIN , trebuie s se recurg pentru relaii la clauza WHERE i, pentru adgarea produselor pentru care nu s - a facturat nimic, la opiunea UNION : SELECT Prod.DenProd, Prod.UM, Sum(FactProd.Cant) AS SumalCant, Prod.Pret, Sum([Cant]*[PRET]) AS SumValoare FROM Prod, FactProd WHERE Prod.Codpro=FactProd.Codprod GROUP BY Prod.DenProd, Prod.UM, Prod.Pret; UNION SELECT Prod.DenProd, Prod.UM, 0.00 AS SumalCant, Prod.Pret, 0.00 AS SumValoare FROM Prod, FactProd WHERE Prod.Codpro NOT IN (SELECT DISTINCT CodProd FROM FactProd) GROUP BY Prod.DenProd, Prod.UM, Prod.Pret;
73
Scrierea unei interogri n cadrul alteia duce la apariia unei subinterogri; setul de rezultate obinut de la o interogare va constitui argument pentru o alta. Utilizatorul poate astfel s creeze legturi ntre mai multe interogri SQL ACCESS, pe baza unor cmpuri unice, cu rol de cutare n structura tabelelor. Subinterog rile nlocuiesc interogrile imbricate din versiunile precedente, cu performan e mult mbuntite. Pot fi construite i pri n varianta de lucru a machetei grafice QBE ACCESS. Cea mai simpl subinterogare are sintaxa urmtoare: SELECT * FROM Tabela1 WHERE Tabela1.nume_ cmp operator (SELECT nume_cmp FROM Tabela2 WHERE criteriul_de_selecie); Tabela1 i Tabela2 vor avea un cmp comun (nume_cmp) care va reprezenta de fapt cmpul de legtur ce st la baza construirii subinterog rii. Clauza SELECT din subinterogare va avea acelai numr de cmpuri i de natur similar cu cele din clauza WHERE a interogrii externe. Operatorul poate fi unul relaional sau unul dintre BETWEEN...AND, IN, LIKE, IS NULL . Ca exemplu redm urmtoarea comand: SELECT DenProd FROM Prod WHERE Pret= (SELECT MAX(Pret) from Prod).
INSERT INTO nume_tabel [IN baza_de_date_extern] [(cmp1[, cmp2[, ...]])] SELECT [surs.]cmp1[, cmp2[, ...] FROM listtabele n acest caz se adaug nregistrri ntr - o tabel, menionndu - se cmpurile i valorile asociate acestora. Dup lansarea n execuie a interogrii apare un mesaj de avertizare privind adugarea de noi nregistrri n baza de date i caracterul ireversibil al acestei operaii. n cadrul acestui tip de inserare a datelor trebuie s se respecte urmtoarele reguli: valorile menionate n clauza VALUES vor avea aceeai natur cu cmpu rile specificate n clauza INTO ; mrimea valorii corespunztoare fiecrui cmp va fi mai mic dect dimensiun ea cmpului; nu va fi obligatorie spec ificarea denumirii cmpurilor, deoarece SQL ACCESS va asocia listei de valori cmpurile n ordinea din structura nregistrrii (prima valoare se va introduce n primul cmp, a doua valoa re, n al doilea cmp s.a.m.d.) ; dac un cmp are definiia NOT NULL , va fi obligatorie introducerea unei valori pentru acesta. Exemplu: S se adauge un articol pentru un nou angajat, Paznic: INSERT INTO Ang values (8888, "VALCU" , "PAZNIC", 2553, #3/3/2009#,2000,null ,10) Comanda DELETE are urmtoarea sintax: DELETE FROM nume_tabel [WHERE criteriul_de_tergere] se materializeaz n interogarea aciune de tergere parial sau total a nregistrrilor din tabele. n acelai timp se va terge doar coninutul tabelei nu i aceas ta (pentru eliminarea tabelei se va apela la instruciunea DROP TABLE ). Exemplu: DELETE FROM ANG WHERE NrAng = 8888 Comanda UPDATE are urmtoarea sintax : UPDATE nume_tabel SET nume_cmp1 = valoare1 [,nume_cmp2 = valoare2]... [WHERE criteriul_de_actualizare] 75
Aceast comand are rolul i de a modifica valorile cmpurilor din nregistrrile existente. Ca i n cazul instruciunii INSERT , se va urmri dac n cmpul cu valori de actualizat sunt permise numai valori unice. Atunci cnd se dorete actualizarea datelor din mai multe cmpuri se folosete virgula ca separator ntre cmpuri i valorile acestora. Se pot utiliza mai multe condiii , WHERE apelnd la operatorul logic AND pentru a limita actualizarea la nregistrri mai bine specificate. Exemplu: S se mreasc salariile VANZATORilor cu 15%: UPDATE Ang SET Sal= Sal * 1,15 where Fnc=VANZATOR;
76
CREAREA
UTILIZAREA
Pentru introducerea n siguran a informaiilor n tabelele bazelor de da te se recurge la utilizarea formularelor (n limba englez: forms). Deoarece bazele de date trebuie s poat gestiona un numr de articole de ordinul miilor sau chiar milioanelor, la proiectarea formularelor trebuie s se gseasc soluii pentru ntreinerea datelor n siguran, introducerea eficient de date, posibilitatea de regsire a articolelor, n scopul modificrii, asigurarea concordanei datelor introduse cu datele existente, verificarea i partajarea accesului utilizatorilor la bazele de date, vizualizarea rapid a valorilor introduse i apoi tiprirea lor. Crearea formularelor necesit activiti complexe de analiz, proiectare i programare a sistemelor, care consum cea mai mare parte din bugetul de timp alocat crerii i implementrii aplicaiei de gestionare a bazei de date. Majoritatea formularelor sunt legate de unul sau mai multe tabele i interogri dintr- o baz de date. Datele cu care lucreaz formularul sau raportul sunt constituite n sursa de nregistrri a formularului n cmpurile din tabelele i interogrile pe care acesta se bazeaz. Un formular nu e obligatoriu s conin toate cmpurile din fiecare tabel sau interogare pe care se bazeaz. Un formular legat de date memoreaz sau regsete informaii din sursa de nregistrri de baz. Pe lng acestea formularele mai pot conine i alte informaii, cum ar fi: titlu, data i numrul paginii (vezi figura).
Elementele grafice, cum sunt liniile i dreptunghiurile, sunt memorate n forma formularului. 77
Datele provin din cmpurile provenite din sursa de nregistrri de baz. Un calcul provine dintr- o expresie, care este memorat n forma formularului. Textul descriptiv este i el memorat n forma formularului. Aceste elemente se numesc controale. Un control este un o biect grafic care poate fi poziionat pe un formular sau raport, putnd afia date, putnd fi legat de efectuarea unor aciuni declanate de evenimente intervenite n rularea aplicaiei sau pur i simplu sunt create pentru mai buna lizibilitate sau pentru scop estetic. Asupra controalelor acioneaz utilizatorii cu mouse - ul sau tastatura. Aciunea se poate face la un moment dat doar asupra unui singur obiect, aspect numit focalizare. Obiectul care a primit focalizarea este, n mod normal, indicat prin evid eniere grafic. Focalizarea poate fi setat de utilizator sau de aplicaie cu ajutorul metodei SetFocus . Mediile de proiectare a bazelor de date pun la dispoziia utilizatorilor diverse instrumente pentru crearea de formulare. n versiunea 2007 a Microsoft ACCESS au fost introduse instrumentele de creare formulare, grupate ntr - o zon cu acelai nume, n fila Creare a panglicii Access, prezentate n figura alturat. Crearea formularelor se poate face: prin salvarea unui tabel sau interogri ca for mular, creindu-se un formular care afieaz toate cmpurile i nregistrrile din sursa de date. n ACCESS 2007 a fost introdus un instrument nou n fila creare n acest scop; utiliznd expertul, caz n care utilizatorii sunt asistai de un expert care p une ntrebri i creeaz un formular bazat pe rspunsurile primite; prin apelarea la unul dintre noile instrumente introduse n mediul de proiectare i ntreinere: Scindare formulare , Elemente multiple sau Dialog Modal . Formularele astfel create pot fi pa rticularizate n modul dorit, n modul Vizualizare proiec t. n Formularul scindat sunt generate automat, n partea de sus, toate cmpurile unui tabel, iar n partea de jos, nregistrrile n modul de vizualizare Foaie de date . Un Formular cu elemente multiple , denumit i formular continuu , permite afiarea simultan a informaiilor mai multor nregistrri. Un formular cu elemente multiple ntr - o versiune iniial poate fi confundat cu un tabel n modul Foaie de date , dar fiind formular, poate fi particularizat. Un formular este de tip modal dac are setat proprietatea modal . Aceast proprietate face ca atunci cnd e terminat o sesiune de editare ntr - un astfel de formular, fereastra s trebuiasc nchis neaprat nainte de a fi posibil mutarea focalizri i la alt obiect. Aici programatorii 78
beneficiaz de tehnologii bazate pe obiecte i - pentru sarcinile mai dificile - de ajutorul limbajului Visual Basic. Ca i n cazul tabelelor, odat cu creterea experienei proiectanilor, munca n modul Vizualizare pr oiect va fi preponderent n crearea sau particularizarea formularelor. Spre exemplu formularul Produse este prezentat mai jos, n modul Proiectare (n limba englez: Design View ).
Panglica Access Instrumente pentru crearea controalelor formularelor Caset text Panou de navigare Caset combinat
Etichet
n modul Vizualizare proiect, ntr -un formular, se pot particulariza ur mtoarele elemente: Pentru controlul i asistarea utilizatorului se pot seta proprietile formularului pentru a permite sau preveni utilizatorii de la adugarea, tergerea sau editarea nregistrrilor afiate ntr - un formular. De asemenea se poate aduga Ajutor particularizat unui formular pentru a asista utilizatorii la folosirea formularului. n fereastra Formular se pot aduga sau elimina butoanele Maximizare i Minimizare, butoanele de navigare, meniuri rapide i alte elemente ale ferestrei Formular. n s eciuni se poate aduga, elimina, ascunde sau redimensiona antetul, subsolul i seciunea detalii ale unui formular. De asemenea, se pot seta proprietile seciunii pentru a controla aspectul i imprimarea unui raport. Controale. Se pot muta, redime nsiona sau seta proprietile fonturilor unui control. De asemenea, se pot aduga controale pentru a afia valori calculate, 79
totaluri, data i ora curent i alte informaii folositoare ntr -un formular. Se pot crea proceduri particularizate de tratare a evenimentelor ocazionate de lucrul cu controalele.
4.2. Controale
Sistemul de gestiune a bazelor de date ACCESS ofer utilizatorilor un mediu de proiectare orientat pe obiecte, dezvoltat n special pentru realizarea elementelor de interfa. Obiectele a u diverse proprieti prin care se formateaz caracteristicile de stare, legtura cu datele sau modul de reacie la evenimente. Pentru a putea fi incluse n formulare, exist instrumente de creare a acestora, grupate ntr - o zon a Controalelor , n fila Instrumente proiectare formular , din panglica Access. Procedura de amplasare a acestora n formulare este urmtoarea: se face clic pe tipul de control dorit; se selecteaz o zon pe formular unde acest control va fi amplasat; cnd mouse - ul este lsat, controlul este ataat; configurarea parametrilor controlelor prin atribuirea de valori
Inserare pagin
Buton opiune
Control fil
Subformular/ subraport
Imagine
Caseta de selectare
Inserare hyperlink
Ataament
Caset list
Instrument selecie
Buton de comutare
Inserare diagram
Grup de opiuni
Cadru independent
Grosime linie
Toate aceste operaii se fac n modul vizualizare proiectare (DesignView), i constituie activitatea preponderent a proiectanilor de aplicaii de baze de date, munca programatorilor de interfee de lucru cu informaiile din baza de date. Miestria utilizrii controalelor se deprinde odat cu experiena, cu asimilarea accepiunii proprietilor i reaciei controalelor la evenimente. Instrumentele din fila Instrumente proiectare formular , din panglica Access destinate proiectrii controalelor pentru formulare, care nu sunt prezentate mpreun cu numele lor, le am prezentat n figura anterioar : Proprietile unui obiect sunt disponibile pentru modificare dac numele acelui obiect se gsete n titlul ferestrei de proprieti. Fereastra de proprieti este disponibil prin aplicarea unui clic pe instrumentul Foaie de Proprieti din panglica Access sau fcnd clic dreapta pe un obiect i alegnd ultima opiune (Proprie ti ) din meniul contextual. Poate pentru nceptori gsirea proprietilor formularului este mai dificil, dar clic- ul dreapta trebuie fcut n afara zonei unde se aeaz obiectele. Exist controale simple, nelegate de date, care nu au proprietatea Control source . Dintre acestea amintim: etichetele, liniile, dreptunghiurile sau unele imagini. Dar exist controale cu mult mai complexe dect cele de mai sus, chiar mai complexe dect casetele de text. Cele mai multe dintre ele, cnt sunt create n modul de sign, apeleaz automat la un expert (wizard). Aa sunt, de exemplu controalele tip: Caset combinat, Buton de comand, Caset cu list sau Control de pagini . Un regim oarecum diferit de cel al controalelor l au subformularele. Un subformular este un f ormular inclus ntr -un alt formular, pentru a permite afiarea datelor din mai multe tabele sau cereri de interogare, aflate n general n relaii de tip unu la unu sau unu la mai muli. Astfel, n formularul principal vor fi afiate datele din partea unu a relaiei, iar n subformular cele din partea mai muli. n mod implicit, legtura dintre un formular i un subformular reflect legtura dintre ta belele pe care se bazeaz. Prin urmare, la un moment dat n formular va fi afiat o nregistrare aflat de partea unu a relaiei iar n subformular nregistrrile corespondente din tabela aflat de partea mai muli a acesteia. ntr - un formular care conine un subformular se pot specifica criterii de filtrare numai asupra cmpurilor din formularul principal. Ca exemplu putem prezenta o relaie 1 n, dintre un catalog de materiale i documente de micare a acestor materiale astfel:
81
Un subformular poate fi nglobat ntr - un formular n dou moduri: foaie de date (n limba englez: Datasheet view ) sau formular (n limba englez: Form view ). Atunci cnd se include un subformular ntr -un formular principal trebuie realizate urmtoarele operaii: se creeaz formularul principal; se creeaz subformularul; se adaug obiectul subformular din ToolBox ntr -o manie r similar cu adugarea oricrui control. Dac tabelele pe baza crora sunt create formularele sunt ntr - o anumit relaie, ACCESS -ul propune stabilirea acestei relaii i ntre cele dou formulare. Odat nglobat un subformular ntr -un formular, se poate verifica rezultatul operaiunii n modul Vizualizare machet . Eventualele retuuri se pot face n modul Proiectare.
Pentru casete de text, ca de altfel pentru majoritatea controalelor, legtura cu datele este realiz at de proprietatea Surs Control (n limba englez: Control Source) i reprezint de obicei cmpurile tabelului sau interogrii de unde sunt luate valorile pentru o nregistrare. Pentru formular " Record Source " se poate stabili proprietatea mai trziu, n modul Design view . Sunt disponibile pentru modificare proprietile unui obiect dac numele acelui obiect se gsete n titlul ferestrei de proprieti. Fie, de exemplu, tabelul CLIENTI, care are urmtoarea structur:
Cum se construiete un fo rmular pentru introducerea acestor date? Tabelul trebuie s existe n baza de date, mcar structura lui. Recomandm utilizarea instrumentului . Se deschide apoi o fereastr goal pentru crearea formularului, i este util s fie activat Foaie de pro prieti , prin instrumentul comutator , plasat ultimul n fila Instrumente proiectare formular a panglicii. Penultimul buton din aceeai fil este instrumentul comutator care face activ/inactiv Lista de cmpuri a bazei de date curente, pe locul Foii d e proprieti.
83
Aceast modificare se poate realiza dup dou clicuri pe etichet, atunci cnd cursorul mouse- ului devine |, sau dup selecia controlului (a etichetei, n cazul de fa), prin modificarea proprietii Legend a filei Format, din Foaia de proprieti . De altfel, prin acest procedeu se recomand s fie particularizate toate proprietile (caracteristicile) obiectelor plasate n formulare (inclusiv a formularului nsui): 84
culoare, dimensiune, plasament, font (tip, dimensiune, stil, culoare), efecte speciale, legend, nume etc. Cu ajutorul instrumentelor din fila Aranjare pot fi aranjate obiectele.
85
Unul sau mai multe obiecte selectate se pot muta cu ajutorul tastelor cu sgei sau prin tragere cu mouse- ul atunci cnd cursorul este sub forma unei cruci de sgei. n mod similar, unul sau mai multe obiecte sele ctate se pot redimensiona cu ajutorul tastelor cu sgei apsate concomitent cu tasta Shift sau prin tragere cu mouse- ul de unul dintre cele opt puncte negre din coluri sau mijloace de laturi, atunci cnd cursorul este sub forma unei sgei cu vrfuri l a ambele capete. Atunci cnd sunt suprapuse obiecte, se poate uzita de opiunile: Aducere n prim plan sau Trimitere n ultimul plan pentru a stratifica corect obiectele. n fine, ordinea de parcurgere a controalelor se poate stabili cu opiunea Ordine de tabulare unde, n fereastra Ordine de tabulare se poate modifica, prin glisare cu mouse- ul, ordinea de parcurgere, existent la un moment dat. A mai rmas de legat formularul i controalele de date. Dup ce este selectat formularul (clic n zona din exteriorul grilei din fereastra formularului) se stabilete valoare Clienti prin modificarea proprietii Surs nregistrri (sau se alege din lista ascuns) a filei Date din Foaia de proprieti . Apoi, pe rnd, pentru fiecare caset de text n parte, dup ce se selecteaz, se alege cmpul corespunztor din lista ascuns a proprietii Surs control a filei Date din Foaia de proprieti . Dup efectuarea acestor operaii, formularul este funcional, precum este redat n modul 86
87
n exemplul de mai jos caseta Text25 , care va afia valoarea, va avea la proprietatea Control Source formula =[prettt]*[1.19] unde 'prettt' este numele unui control. n loc de 'prettt' se putea scrie 'prettt.value' ca referire complet a proprietii sau 'pret' ca referire a cmpului ' pret ' dintr- o tabel ' produs ' care este stabilit la proprietatea 'Record Source' a formularului. Exist controale mai complexe pentru plasarea crora n formulare mediul Access are prevzute instrumente expert i indic posibilitile lor cele mai frecvente de utilizare. Bu toanele de comand , sunt frecvent utilizate n formulare, instrumentele mediului Access propunnd utilizarea acestora pentru aciuni pe categorii, redate n figur: De exemplu, pentru a se crea un buton care face salt la nregistrarea anterioar celei curente a formularului, se stabilete aciunea Salt la nregistrarea anterioar din categoria Navigare nregistrri . Controalele de tip Caset combo sau Caset list ofer utilizatorilor posibilitatea de a selecta dintr- o list valori care pot fi introduse ntr - o baz de date. Diferena dintre cele dou tipuri de controale este dat de faptul c, prin
casetele combo valorile introduse pot fi preluate fie din lista controlului, fie prin tastarea lor ntr -o caset text , component a controlului. Sintagma Caset combo definete combinarea a dou tipuri de controale: Caseta text i Caseta list .
88
Valorile din liste pot fi preluate din cmpuri de tabele s au interogri i pot fi utilizate mai departe pentru a fi stocate sau pentru a cuta valori n tabele, precum se vede n figura de mai jos.
De exemplu, ntr - un formular al produselor, pentru unitatea de msur se pot introduce valori care p ot fi, la rndul lor, preluate dintr - o list. Valorire acestei liste pot fi preluate din interogarea pe care o putem salva cu denumirea UM, bazat pe comanda SQL: Select distict UM from Produs order by UM
. Alegerea interogrii sau a tabelului care furnizeaz informaiile, alegerea cmpurilor, a modului de sortare, a limii de afiare, a modului de stocare i utilizare a valorii selectate i Proprietatea Legend a etichetei cuplate de list, pot fi precizate n ferestre ale expertului Access, prin care utilizatorul e ghidat pentru a personaliza controalele de list. Opiunile alese de utilizator sunt nregistrate ca parametrii pentru proprietile casetei list , precum se vede n figura de mai jos:
89
Aceti parametrii pot fi modificai de utilizatori. De exemplu, dac se consider c ar fi mai portrivit pentru acest control o list de valori predefinit, nu o interogare, se poate modifica proprietatea Tip surs rnduri la valoarea List valori i se poate completa proprietatea Surs rnduri cu expres ia Fl; Kg; L . ntr - un formular pot fi folosite date i din diverse tabele, sau interog ri, altele dect cele precizate la proprietatea Surs nregistrri a formularului, prin folosirea unor proceduri de tratare a evenimentelor. Utilizarea n cont roale a expresiilor din alte formulare se face prin sintaxa: Forms![Nume formular]![Nume control]. Pentru a putea fi evaluate astfel de expresii, trebuie ca acele formulare de pe care sunt referite controale s fie deschise n acel moment. Utilizarea ntr-o expresie, de pe un formular, a unor controale din subformular, se realizeaz prin: [Nume subformular].Form![Nume control].
90
Penultimul buton din aceiai fil este instrumentul comutator care face activ/inactiv Lista de cmpuri a bazei de date curente, pe locul Foii de proprieti .
91
n continuare, trebuie ataate controalele. Procedura de ataare a controalelor este similar cu procedura plasare a acestora lor n formulare. Raportele constituie unul din tipurile de obiecte fundamentale ale ACCESS ului. Deoarece menirea lor de baz este de prezentare a informaiilor di n bazele de date, cele mai importante proprieti ale unui raport sunt proprietile referitoare la date. Stabilirea tabelului sau cererii de interogare de unde raportul i va extrage informaiile se face prin proprietatea surs de nregistrri (n limba englez: Record Source ). Precum la formulare, i la rapoarte, stabilirea cmpului de unde provin valorile afiate n controale, se face cu ajutorul proprietii surs control (n englez: Control source ). Informaiile provenite din celulele tabelelor vor fi afiate n seciunea de detaliu . Controalele inserate n aceast seciune vor fi afiate n raport, n mod repetat, pentru fiecare articol al sursei de nregistrri. n rapoarte mai pot fi create anteturi i subsoluri pe diferite niveluri: antet i s ubsol de raport, antet i subsol de pagin, antet i subsol de grup.
Exerciiu:
Pe baza informa iilor din interogarea totul i toate crea i un raport cu produsele vndute clien ilor. Rezolvare Utiliznd instrumentul , se deschide o fereastr goal pen tru crearea 92
raportului. Vom ncepe prin a lega raportul i controalele de date. Dup ce este selectat raportul (clic n zona din exteriorul grilei din fereastra raportului) , se stabile te valoarea totul i toate prin modificarea propriet ii Surs nregistrri (sau se alege din lista ascuns) a filei Date din Foaia de propriet i . Apoi, pe rnd, pentru fiecare valoare de expus n rndurile raportului, se plaseaz cte o caset text. Pentru fiecare caset text n parte, trebuie elimitat eticheta care e agat de mediu l Access, automat de caset (se face clic pe etichet i se apas tasta Delete ). Legarea casetelor de date se face dup ce se selecteaz prin alegerea cmpul ui corespunztor din lista ascuns a propriet ii Surs control a filei Date din F oaia de propriet i . Dup efectuarea acestor opera ii, raportul este func ional, precum este redat n modul Vizualizare proiect n figura de mai jos .
Dup ce s -au stabilit sursele d e date pentru ntreg raportul, trebuie stabilite controalele care vor fi coninute n raport, proprietile lor i, n mod special, pentru 93
fiecare control n parte, sursa datelor. Aceast activitate constituie particularizarea unui raport. ntr -un raport s e pot particulariza urmtoarele elemente: Sursa de nregistrri . Se modific tabelele i interogrile pe care se bazeaz un raport. Sortarea i gruparea datelor . Se pot sorta date n ordine ascendent sau descendent. De asemenea, se pot grupa nregistrri n unul sau mai multe cmpuri i afia subtotaluri i totaluri generale ntr -un raport. Fereastra Raport. Se pot aduga sau elimina butoanele Maximizare i Minimizare , modifica textul din bara de titlu i alte elemente ale ferestrei Raport . Seciuni . Se p ot aduga, elimina, ascunde sau redimensiona seciunile antet, subsol i detaliu ale unui raport. De asemenea, se pot seta proprietile seciunilor pentru a controla aspectul i imprimarea unui raport. Controale. Se pot muta, redimensiona sau seta proprie tile fonturilor unui control. De asemenea, se pot aduga controale pentru a afia valori calculate, totaluri, data i ora curente i alte informaii utile ntr -un raport.
94
A ntetul de pagin este utilizat pentru a afia titlul, titluri de coloane, date calendaristice sau numere de pagin n partea de sus a fiecrei pagini a unui formular sau raport. Subsolu l de pagin este u tilizat pentru a afia rezumate de pagin, date calendaristice sau numere de pagin n partea de jos a fiecrei pagini dintr -un formular sau raport A ntetul i s ubsolu l de pagin apar n partea superioar i cea inferioar a fiecrei pagini. Antet de grup este utilizat pentru a plasa informaii, cum ar fi numele de grup sau totalul de grup, la nceputul unui grup de nregistrri. Subsol grup se utilizeaz pentru a plasa informaii, cum ar fi numele de grup sau totalul de grup, la sfritul unui grup de nregistrri. A ntetul i s ubsolul de grup apar n partea superioar i cea inferioar a gruprilor articolelor. Adugarea sau eliminarea acestor elemente se face cu ajutorul instrumentelor din grupul Afiare/Ascundere din fila Instrumente proiectare rapoarte/Aranjare a panglicii. Antet/Subsol raport Antet/Subsol pagina
Cu excepia antetului i subsolului de grup, celelalte niveluri de anteturi i subsoluri sunt perechi. Ele pot fi disponibile doar mpreun. Dac este necesar doar o component, pentru cealalt se seteaz nlimea la dimen siunea 0. Eliminarea anteturilor i subsolurilor atrage dup sine si tergerea tuturor controalelor plasate pe suprafaa lor.
Exerciiu
Adugai antet i subsol raportului de la exerci iul precedent . n antetul raportului s se nscrie un antet de firm, i numele de coloane, iar la subsol s se scrie data listrii i semntura persoanei care a fcut listarea. Rezolvare: se deschide baza de date Facturi; se alege din panoul de navigare raportul Raport TEST; se comut n Vizualizare n mod proiectare ; se urmrete s existe setat Antet/subsol raport; 95
se gliseaz n antetul raportului, din bara de instrumente, etichet a pentru a se scrie firma, n partea stng sus i ca titlu: Lista produselor vndute pe clien i . Titlul se poate face cu un font mai mare i aldin; se mrete nlimea antetului i se adaug n antet etichete pentru antetul coloanelor, care se aliniaz n linie cu cea mai de sus ; se traseaz un dreptunghi, care s nconjoare etichetele, i pentru ca s nu acopere etichetele se seteaz propri etatea Stil fundal cu culoarea Ro u i se plaseaz n spatele etichetelor realizate cu instrumentul Trimitere n ultim plan din fila Aranjare ; la subsolul raportului se adaug etichet cu coninutul (legenda) Listat n data i o etichet ntocmit / Semntu ra; se ac ionez pe instrumentul Data i ora din panglic, i pentru c se adaug etichete cu data i ora sistemului n partea stng a antetului, data trebuie glisat n zona de subsol, lng Listat n data , iar eticheta cu ora se poate terge; se trase az o linie n partea de subsol, pentru a delimita elementele acestuia de articolele listate.
96
(simbolul
n subsolul ferestrei mediului ACCESS apare caseta de dialog Grupare, sortare si totaluri , i se face clic pe butonul Adgare grup i automat este afiat un rnd n caset pentru a ajuta la precizarea Gruprii dup selectare Cmp sau Expresie .
Pentru particularizare se aleag parametrii dorii: modul de sortare, dac exit totaluri sau titluri, dac se afieaz sau ascunde seciunea de antet sau subsol la nivel de grup. Gruprile se nscriu n aceast caset n ordinea ariei lor de cuprindere. Pentru adugarea de controale care vor reda totalul tuturor valorilor unui cmp, la nivel de raport, se procedeaz n felul urmtor: 1. Se adaug o caset text n zona de subsol a raportului. Este de preferat ca aceast caset s fie o copie a unei casete pe care o totalizeaz (cu operaiile obinuite de copiere i lipire) ; 2. La proprietatea Surs control se seteaz: = Sum([expresie]) unde expresie poate lua valorile variabile, funcie de nregistrri, care vor fi totalizate ; 3. La proprietatea Execuie sum se seteaz valoarea Nu. Totalizarea unor valori pe grupuri (subtotaluri de raport) se face n mod similar cu totalurile generale pe raport cu diferena c ele se plaseaz n subsolurile de grup. Problema se pune n mod similar i pentru totalurile pe pagini.
Exerciii
1. S se adauge o grupare dup denumirea produselor n raportul construit 97
n exerciiu precedent. 2. S se gliseze n antetul gruprii produsului , din zona de detaliu, informa iile generale despre produse. 3. S se realizeze n zona de detaliu, o caset pentru valoarea fiecrei livrri i s se rectifice antetul coloanelor. 4. S se totalizeze valorile facturilor pe produse i pe ntreg raportul. Pent ru lizibiliate, totalurile produselor sunt precedate de o etichet Total pe produsul: i de o caset text ce va reda codul i numele produslui. Pentru raport, valoarea va fi precedat doar de o etichet Total general. Totalul pe produse i informa iile din antetul acestei grupri s fie incadrate ntr -un dreptunghi cu fond galben, iar cele de antet/suport - pe ntreg raportul - ntr -un dreptunghi ro u. Rezolvare: 1. Pentru adugarea gruprii dup cmpul furnizori se face clic Sortare i
2. n subsolul ferestrei mediului ACCESS apare caseta de dialog Grupare, sortare i totaluri , i se face clic pe butonul Adgare grup i automat este afiat un rnd n caset, cu o list din care se alege cmpul DenProd . Acionnd pe butonul Mai multe , se stabilete s fie vizibile seciunea antet i seciunea subsol. Se gliseaz din zona detaliu casetele text corespunztoare cmpurilor: Codprod , Denprod , Um i Pret . 3. Se face o copie a casetei text corespunztoare cmpului Cant . (Prin intermediul memoriei clipboard cu operaiile Copy (Ctrl + C) i Paste (Ctrl + V ). Acest control se mut n partea dreapt a benzii Detaliu . La proprietatea Surs control se scrie: = Cant * Pret , pentru a se specifica fa ptul c e vorba de produsul a dou valori (Semnul = este indispensabil). La proprietatea Format se alege Fix , iar la Zecimale se precizeaz 2 . Redm mai jos, n modul Vizualizare aspect, configurrile fcute. 98
4. n modul Vizualizare proiect , se selecteaz , cu un clic, caseta de text corespunztoare expresiei valoare , se copiaz n clipboard, cu Ctrl + C i se lipete cu Ctrl + V. Cu mouse- ul se gliseaz caseta copiat, n seciunea Subsol DenProd . Se face o nou lipire i se gliseaz caseta n seciunea Subsol raport . Se reajusteaz nlimea seciunii de detaliu. Pentru cele dou casete copiate se seteaz urmtoarele proprieti de dat: Surs control : =Sum (Cant * Pret); Execuie sum : Nu. Se traseaz un dreptunghi cu ajutorul instrumentului din fila Instrumente raport/ Proiectare din panglic, se coloreaz cu galben prin intermediul listei ascunse de culori, legat de instrumentu din panglic i se trimite, pentru a nu acoperi obiectele, n ultimul plan cu
ajutorul butonului , din fila Instrumente raport/ Aranjare . n mod similar se traseaz dreptunghi n subsolul raportului i antetul grupului.
99
Exerciii
1. S se adauge o grupare dup denumirea clien ilor n raportul construit n exerciiu precedent. 2. S se gliseze n antetul gruprii Clien ilor , din zona de detaliu, 100
informa iile generale referitoare la Clien i i s se rectifice antetul coloanelor. 3. S se totalizeze valorile facturilor pe Clieni . Pentru lizibiliate, totalurile produselor sunt precedate de o etichet Facturat clientului: , i de o caset text ce va reda codul i numele clientului. Totalul pe client i informa iile din antetul a cestei grupri s fie ncadrate ntr -un chenar albastru deschis, cu fond alb. S se elimine fondul controalelor din detaliu. 4. S se pun o caset care s redea numrul curent al ieirilor pe clieni. 5. S se salveze raportul ntr -un document Word. Rezolvare: 1. Operaii le sunt evidente, i se rezolv n mod similar exerci iului anterior. 2. Idem. 3. Idem. 4. O caset cu numr curent al articolelor se realizeaz prin urmtorii pai: din caseta cu instrumente se selecteaz caseta text i se gliseaz n p artea stng a z onei de detaliu; se terge eticheta lipit de caseta de text ; pentru proprietatea Surs control se seteaz: =1 ; pentru proprietate Execuie sum se seteaz Peste tot;. Rezultatul este prezentat n modul Vizualizare proiectare , n figur:
101
5. Pentru a salv a lista rezultat ntr - un document Word, n prealabil, documentul trebuie vizualizat n modul Examinare aspect i din linia cu instrumente proprie acestui mod de vizualizare se alege pictograma aplicaiei Microsoft Word i se produce deschiderea raportului cu procesorul de texte. Nu sunt importate elementele grafice. Rezultatul este redat mai jos:
SC DEPOZITUL SRL LISTA PRODUSELOR VANDUTE PE CLIENTI Cod Produs 7023 Lapte 111111 SC First SRL 1 2 Facturat clientului: 222222 SC Secundul SRL 1 2 Facturat clientului: 333333 SC Tera Parte SRL 1 Facturat clientului: Total pe produs: 1009 Ulei 111111 SC First SRL 1 Facturat clientului: 222222 SC Secundul SRL 1 Facturat clientului: 333333 SC Tera Parte SRL 1 Facturat clientului: Total pe produs: 1075 Zahar 222222 SC Secundul SRL 1 Facturat clientului: 333333 SC Tera Parte SRL 1 Facturat clientului: Total pe produs: Total pe produsul: Listat n data: 8 mai 2010 17:56:03 ntocmit Semntura Str.Toamnei nr 3 26133333 5 24.10.2009 Trandafir 333333SC Tera Parte SRL 1075Zahar 25 77,50 77,50 124,00 548,81 Str.Verii nr 2 26122222 1 21.10.2009 Popescu 222222SC Secundul SRL 15 46,50 46,50 Str.Toamnei nr 3 26133333 5 24.10.2009 Trandafir 333333SC Tera Parte SRL 1009Ulei 11 35,97 35,97 140,61 3,1 /kg Str.Verii nr 2 26122222 1 21.10.2009 Popescu 222222SC Secundul SRL 20 65,40 65,40 Str Primaverii nr 1 26111111 4 23.10.2009 Antonescu 111111SC First SRL 12 39,24 39,24 Str.Toamnei nr 3 26133333 5 24.10.2009 Trandafir 333333SC Tera Parte SRL 7023Lapte 20 58,00 58,00 284,20 3,27/Kg Str.Verii nr 2 26122222 6 2 25.10.2009 Popescu 22.10.2009 Popescu 222222SC Secundul SRL 15 30 43,50 87,00 130,50 Str Primaverii nr 1 26111111 4 3 23.10.2009 Antonescu 22.10.2009 Antonescu 111111SC First SRL 15 18 43,50 52,20 95,70 Denumire Produs Client Adresa Telefon Nr. factur Data factur Delegat Pre/UM UM Cantitate Val 2,9 /l
102
CAPITOLUL VI. LIMBAJUL VISUAL BASIC 6.1 Editarea modulelor Visual Basic for Application
Visual Basic for Application (abreviat VBA) este limbajul de programare intern al pachetului software pentru birouri Microsoft Office. Cu ajutorul VBA pot fi create modulele Access, obiecte ale baze de date care
Exploratorul proiectelor
Instrumente
permit scrierea de rutine (subprograme, proceduri 8, funcii 9) pentru accesa i face particularizri n mod intim tabelele, formularele, rapoartele i interogrile din baza de date i funcionarea conjugat a acestora. VBA este un dialect al limbajului Visual Basic. n VBA nu pot fi create programe de sine stttoare ci proceduri a cro r execu ie poate fi iscat de interac iunea utilizatorului cu obiectele incluse n fi ierele Office (documente de tip Word, registre de tip Excel, prezentri de tip Power Point i baze de date Access). Aceste proceduri constituie o perfec ionare a unui limbaj de macrocomenzi a
8
subprogram, parte din sintaxa limbajelor evoluate, conform www.dexonline.ro preluat din Marele dicionar de neologisme, Florin Marcu, Editura Saeculum, 2000
9
ib idem
103
pachetului Office. Produsele pachetului Office, ele nsele, creaz n unele situa ii, module scrise n VBA, a cror prezen i rulare pot fi sesizate sau nu de utilizatori. Unitatea elemetar prin care programatorii scriu un algorit m ntr -un limbaj de programare este instruc iunea. Un grup de instruc iuni realizeaz o unitate de program; n cazul VBA, o procedur. Exist mai multe tipuri de proceduri: proceduri eveniment : O procedur executat automat ca rspuns la un eveniment ini iat de utilizator sau de codul program, sau activat de sistem prin adugarea de cod la un eveniment dintr -un formular sau raport. proceduri Function : Procedur care returneaz o valoare i care poate fi utilizat ntr - o expresie. Funcia se declar cu instruciunea Function i se sfrete cu instruciunea End Function. proceduri Sub : Procedur care ndeplinete o operaiune. Spre deosebire de o procedur Function, o procedur Sub nu returneaz valori. O procedur Sub se declar cu instruciunea Sub i se ncheie cu o instruciune End Sub. Procedurile sunt amplasate n module. Pentru crearea, testarea, depanarea i/sau rularea procedurilor utilizator, se recurge la instrumentele speciale asigurate de mediul Visual Basic, care se ini iaz prin butonul , care este a ezat n captul din stnga al filei Instrumente baza de date a panglicii. Procedurile sunt definite prin tastarea instruciunii Function sau Sub , eventual precedate de specificatorul de domeniu Public sau Private . Pe acela i prim rnd se scrie efectiv un nume de procedur (funcie sau subrutin) imediat urmat de toate argumentele ntre paranteze iar la funcie i de comutator funciei. De exemplu, urmtoarea declaraie pentru funcia ncrcat specific ir NumeForm ca argument: Function ncrcat (sirNumeForm As String) As Boolean Sau, urmtoarea declaraie pentru procedura Sub : AfiEveniment indic NumeEveniment ca argument: Sub AfiEveniment (NumeEveniment as String) Corpul definirii procedurilor con ine liniile de cod n limbaj Microsoft Visua l Basic care vor efectua operaiunile sau calculele necesare pentru realizarea algoritmilor i se termin cu linia de final End Sub sau End Function scris automat de editor cnd s -a declarat procedura. Pentru a facilita gestionarea obiectelor, a proceduri lor n module, n editor exist pentru programatori fereastre de afiare a propriet ilor i de exploarare a proiectelor, permi ndu -se crearea de proceduri i module, ctarea i actualizarea sau stergerea lor. Editorul mediului are faciliti de colorare a cuvintelor cheie, declaraiilor utilizator, frazelor eronate, comentariilor etc. Cea mai puternic facilitate a editorului 104
VBA este posibilitatea afirii contextuale n momentul scrierii instruc iunilor n limbajul VBA, a elementelor care caracterizea z un anumit context: n fine, dar nu mai puin important, este depanatorul , nelipsit din mediile de programare deja de aproape 20 de ani. n seciunile urmtoare ale acestui capitol vom prezenta elemente de limbaj VBA n scopul eviden ierii unor metode de access la obiectele bazei de date.
105
n general n Visual Basic dac se dorete s se scrie mai multe instruc iuni pe o linie, aceasta sunt separate prin caracterul (:) . Invers, dac o declaraie este prea mare se poate scrie pe mai multe linii, pentru continuare se folose te caracterul continuator de linie ( _)(un spaiu urmat de o linie jos). Algoritmii care sunt transforma i n programe pot fi concepu i ini ial prin scheme logice. Schemele logice pot s fie sub forma unui pseudocod - care este un limbaj mai pu in riguros dect un limbaj de programare, posibil i cu termeni din limba romn - sau sub form grafic . Cele mai utilizate dintre aceste simboluri sunt: start i final de algorim blocuri secve niale operaii de intrare - ieire bloc de decizie apel de subprograme conectori
106
butonul OK ; dac se apas butonul Cancel ir ul returnat este irul vid "". Sintaxa este: InputBox(prompt[,title] [,default] [,xpos] [,ypos] [,helpfile, context]) Dac nu se pun parantezele rotunde InputBox se transform n procedur . Elementele din sintax reprezint: prompt reprezint un ir de caractere afiat ca mesaj n caseta de dialog. Numrul maxim de caractere este de 1024; title, este un ir de caractere ce va fi afiat drept titlu n bara de titlu a casetei de dialog; default, reprezint un ir de caractere ce va fi afiat n caseta cu text i care va fi returnat de funcie n caz c utilizatorul nu introduce alte date; xpos, ypos, sunt expresii numerice care specific coordonatele colului stnga sus al casetei de dialog fa de colul stnga sus al ecranului; helpfile, este un ir de caractere ce specific fiierul Help ce va fi folosit pentru a oferi asisten n lucrul cu caseta de dialog; Exemplu: InputBox "Introducei forma de nvmnt:", _ "Form de dialog predefinit", "Zi", 1000, 1000 Funcia MsgBox se utilizeaz pentru a obine rspunsuri de tip Da / Nu de la utilizatori sau pentru a afia diferite mesaje de avertizare, erori, atenionri. Dup citirea mesajului utilizatorul va apsa un buton pentru a nchide fereastra. Funcia returneaz un Integer specificnd ce buton a fost apsat. Sintaxa este: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) Unde: prompt - un ir de caractere afiat ca mesaj n caseta de dialog. Numrul maxim de caractere este de 1024; buttons o expresie numeric ce reprezint suma valorilor care specific numrul i tipul butoanelor afiate sau pictograma ; title un ir de caractere ce va fi afiat drept titlu n bara de titlu a casetei de dialog; helpfile - un ir de caractere ce specific fiierul Help ce va fi folosit pentru a oferi asiste n n lucrul cu caseta de dialog. Pentru setarea butoanelor exist predefinite urmtoarele constante specifice VisualBasic: 107
Constante vbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical VbQuestion VbExclamation VbInformation VbDefaultButton1 VbDefaultButton2 VbDefaultButton3 VbDefaultButton4 VbApplicationModal VbSystemModal
Descriere afiare Numai buton OK Butoanele OK i Cancel Butoan ele Abort, Retry i Ignore Butoanele Yes, No i Cancel Butoanele Yes i No Butoanele Retry i Cancel Pictograma Critical Message Pictograma Warning Query Pictograma Warning Message Pictograma Information Message Primul buton este implicit Al doilea buton este implicit Al treilea buton este implicit Al patrulea buton este implicit Modul de aplicaie; Aplicaia ateapt i utilizatorul trebuie s rspund la caseta de dialog Modul de sistem; Toate aplicaiile sunt suspendate pn la rspunsul la caseta de dialog
Primele constante cu valori (0 5) numrul i tipul de butoane afiate; grupul urmtor (16, 32, 48, 64) descrie stilul pictogramelor; apoi grupul urmtor (0, 256, 512, 768) determin care buton este implicit; n fine ultimul grup (0, 4096) d tipul modulului . Prin adunarea numerelor se obin efecte compuse, dar se adun exclusiv o singur valoare dintr -un grup. Valorile returnate de funcia MsgBox sunt: Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Valoare 1 2 3 4 5 6 7 Descriere OK Cancel Abort Retry Ignore Yes No
108
Exemplu: MsgBox "Mesaj de atenionare !", vbExclamation _ + vbOKCancel + vbDefaultButton1+vbsystemmodal, "Sistemul st!"
definete variabila iCant de tip Integer definete variabila dtZiSal de tip date 109
definete variabila sNume de tip String definete variabila lstListaPret ce va conine o referin ctre un obiect de tip ListBox
O caracteristic deosebit de important a variabilelor este do meniul de valabilitate i durata de existen. Astfel exist variabile locale la nivelul unei proceduri. Aceste variabile se declar n interiorul procedurii cu ajutorul cuvntului cheie Dim . Ele exist atta timp ct se execut procedura n care au fost declarate. De asemenea, ele pot fi utilizate numai n cadrul acelei proceduri neavnd nici o semnificaie n alt parte a programului. Au un domeniu de valabilitate doar la nivelul proceduri i au o durat de via temporar. Este recomandat s se folosea sc Dim doar pentru declararea acestui tip de variabile chiar dac Visual Basic permite folosirea lui i n alte contexte. Un alt tip de variabile sunt cele cu domeniu de vizibilitate la nivelul unui modul. Aceste variabile pot fi folosite oriunde n interiorul modulului n care au fost declarate i exist atta timp ct este folosit modulul respectiv. Este recomandabil ca declararea lor s se fac cu ajutorul cuvntului cheie Private n loc de Dim . Un al treilea tip de variabile sunt cele globale la nive lul ntregului program. Acestea sunt pot fi folosite oriunde n program, au un domeniu de valabilitate global i exist atta timp ct se execut programul. Declararea acestor variabile se face folosind cuvntul cheie Public . Un alt tip de variabile sunt cele statice . Acestea pot avea un domeniu de valabilitate local sau la nivelul unei proceduri , dar o durat de existen permanent. Declararea se face cu ajutorul cuvntului cheie Static . Chiar dac sunt definite la nivelul procedurilor, variabilele Sta tic i pstreaz valoarea i dup ce procedurile gazd i termin execuia. Dac procedura va fi din nou apelat variabila static nu va fi iniializat automat de Visual Basic, lucru ce se ntmpl cu variabilele care nu sunt statice, ci va avea valoare pe care a avut-o la ultima ei folosire. Variabilele locale la nivelul unui modul sau publice se declar n seciunea de declaraii a modulului (Declarations). n unele versiuni de Visual Basic se permite declararea variabilelor i implicit, adic o variabil este considerat declarat la prima ei folosire. Nu este necesar o declarare prealabil cu ajutorul cuvintelor cheie Dim, Private, Public . n mod implicit Visual Basic le consider de tip Variant pe toate. n VBA acest lucru nu este permis. Una dintr e cele mai periculoase erori ntlnite la declararea unei variabile este urmtoarea: 110
Dim a, b, c as Integer, care la prima impresie pare c sunt definite trei variabile a,b,c de tip Integer dar de fapt numai c este de tip Integer, celelalte fiind n mod implicit de tip Variant. Corect este Dim a as Integer, b as Integer, c as Integer
Double
Currency
String
tipurile precedente
Cu fiecare tip de dat sunt permise o serie de operaii. Ast fel: operaiile care se pot face cu valorile unui tip ntreg sunt: adunarea (+); scderea( - ); nmulirea(*); mprirea ntreag ( \) a \ b returneaz ctul mpririi lui a cu b; mprirea real(/); restul mpririi ntregi (mod); ridicarea la putere (^) de asemenea sunt permise operaiile relaionale: mai mic sau egal (<=); mai mic (<); egal (=); mai mare(>); mai mare sau egal (>=);Rezultatul unor astfel de operaii este de tip boolean , avnd valorile True sau False; operaiile care se pot face cu valori le unui tip real sunt: adunarea (+); scderea( - ); nmulirea(*); mprirea(/); ridicarea la putere (^); sunt permise operaiile relaionale prezentate la tipurile ntregi; irurile de caractere suport operaia de concatenarea (& sau uneori +) i operaiile de comparaie (<,<=,=,>=,>). Prin concatenare dou sau mai multe iruri de caractere pot fi lipite formnd un singur ir de caractere. Cu ajutorul operaiilor de comparaie se stabilete poziia alfabetic a irurilor de caractere; valorile logice, bool eene (True i False) suport urmtoarele operaii logice: negarea logic (Not); i logic (And); sau logic (Or); sau exclusiv logic (Xor); echivalena logic (Eqv); implicaia logic (Imp); tipurile de dat de tip obiect suport o singur operaie cea de comparaie (Is). Cu ajutorul acestei operaii se verific dac dou variabile de tip obiect refer acelai obiect sau nu. Un tip particular de date sunt constantele . n expresii, constantele au regim obinuit ca al oricror ali operanzi. O definiie de constant introduce un identificator ca sinonim al unei valori constante. n Visual Basic exist dou tipuri de constante: intrinseci sau definite de sistem. Visual Basic pune la dispoziie o serie ntreag de constante p entru culori, taste, figuri etc; simbolice sau definite de utilizator. Putei defini propriile dumneavoastr constante cu ajutorul cuvntului cheie Const astfel: [Public|Private] Const NumeConstanta[As type] = expresie Exemple: Const PI = 3.14159265358979 Const NR_CARACTERE = 256 Const ZI_DE_NASTERE = #02.04.1981# Const NUME_DE_COD = "acalul" 112
variabila a va stoca valoarea 170; variabila va stoca irul de caractere "Popescu Ioan" variabila va stoca data 13.06.2000 reprezint primul oc ntlnit de novicii n informatic, care nu sesizeaz c e vorba de operatorul de atribuire nu de comparare, n cazul de fa , n locaia de memorie s; va fi suprascris coninutul anterior incrementat cu 1
Unei variabile de tip obiect (tipul generic Object sau de tipul celorl alte obiecte Access 2000) nu i se poate atribui un obiect n varianta clasic : variabila=expresie sau variabila1=variabila2, ci utilizndu - se instruciunea Set : Set variabila_obiect = expresie_obiect . n urma apelului acestei instruciuni, variabila_obiect va referi obiectul returnat de expresia expresie_obiect. i numele de p roceduri pot fi considerate un caz particular de variabile.
6.5. Tablouri
n limbajele de programare se ncearc crearea de structuri de date complexe. n aproape toate exist posibilitatea de lucru cu tablouri sau masive. Un tablou este o structur de date percepute ca fiind adiacente, care poart un singur nume i au acelai tip, care poate s pstreze mai multe valori de acelai tip. Tabloul poate fi asimilat unui ir finit din matematic, Ca i irurile, tablourile pot fi uni-, bi-, tri- sau multi- dimensionale. Distincia ntre elemente se face cu ajutorul 113
indecilor care redau un numr de ordine al elementelor pe fiecare dimensiune. Bineneles, dac tabloul este de tip Variant atunci elementele acestuia pot s conin diferite tipuri de date (n umerice, iruri de caractere, date calendaristice, obiecte). De obicei un tablou unidimensional este numit vector iar unul bidimensional matrice. Tablourile sunt intuitiv create n programare implica ie a scopului declarat al calculatoarelor programabile, acela de a efectua cu vitez operaii de rutin, omogene i repetivive. Pentru gestionarea ct mai eficient a elementelor tablourilor sunt de mare folos structurile repetitive. Declararea unui tablou cu dimensiune fix se poate face astfel: Dim|Public|Private _ NumeTablou([[NrPrimElement to] NrUltimElement], _ [[NrPrimElement to] NrUltimElement], ...) [As TipDat] Dac nu se specific NrPrimElement to se consider a fi 0. Dac se specific NrUltimElement pentru toate dimensiunile, tabloul este considerat a fi de dimensiuni fix. Dac nu se specific NrUltimElement pentru o dimensiune, tabloul este considerat a fi dinamic i n interiorul procedurilor aceasta poate fi precizat cu instruc iunea Redim , care are aceia i sintax ca instruc iunea Redim . Ca de exemplu prin urmtoarea instruciune se declar un vector cu 7 elemente: Dim zi(6) As string Alte exemple ar fi: Dim PunctenPlan(10,10) As Byte matrice cu 121 elemente Private PunctenSpaiu( 1 To 30,1 To 30, 1 To 30) As Byte masiv cu 30 3 elemente Dup declaraie, elementele tabloului pot fi folosite n expresii sau n orice loc unde poate fi utilizat o variabil obinuit. Deci: zi(0)=Luni ncarc primul element al vectorului zi cu irulLuni
modificare a proprietilor obiectelor sau rspunsului acestora la diferite evenimente s - i corespund cte un subprogram. Pentru a da un grad de generalitate ct mai mare, funciile i/sau procedurile conin n definirea acestora o list de parametri formali. n momentul apelrii unei funcii i/sau proceduri se transmit ctre acestea valori pentru fiecare parametru al procedurii sau funciei (sau nimic dac nu exist parametri). Sintaxa pentru definirea unei proceduri este urmtoarea: [{Private|Pub lic}]Sub nume_procedur[([{ByRef|ByVal}] param_1 [as tip_date],)] [instruciuni] .... [Exit Sub] ... [instruciuni] End Sub Unde: Private i Public au semnifica ie similar cazului declarrii variabilelor. O procedur eveniment poate fi definit doar Private ; Sub permite ieirea forat dintr - o procedur; instruciunile care ncep cu Exit provoac ie irea for at din blocurile de instruc iuni ale anumitor structuri; Parametrii din definirea procedurii se numesc parametrii formali, ei precizeaz (implic it sau explicit) doar tipul parametrilor; {ByRef|ByVal} precizeaz modul de transmitere a parametrilor, care poate fi prin valoare sau referin . Implicit se consider a fi ByVal . Dac se utilizeaz ByVal modificrile fcute argumentelor transmise procedu rii se pierd dup ieirea din procedur, pe cnd, dac se utilizeaz ByRef modificrile fcute argumentelor transmise procedurii rmn i dup ie irea din procedur. Apelul unei proceduri se poate face astfel: [Call]nume_procedura [(valoare_param_1,valoare_param_2,....)] Parametrii din apelul procedurii se numesc parametrii reali , ei sunt purttori de valoare n momentul apelului, iar dac nu corespund ca tip cu parametrii formali, parametrii reali sunt converti i. Referitor la definirea i apelul proce durilor s considerm urmtorul exemplu: Sub test() v=7 transmit v 115
MsgBox v End Sub Sub transmit(ByVal a) a=a+3 End Sub Procedura test de tip Sub apeleaz procedura transmit de tip Sub . Modul de transmitere a parametrului este prin valoare. Prin rularea subrutinei test se afi eaz valoarea 7, cu toate c n interiorul subrutinei transmit parametrul este modificat, aceste transformri nu rmn la ieirea din subrutin. Dac se schmb modul de transmitere a parametrului prin ByRef , linia de definirea a subrutinei apelate fiind Sub transmit(ByVal a) , atunci rezultatul execu iei subrutinei test va fi afi area valorii 10. Sintaxa unei funcii este urmtoarea: [{Private|Public}]Function nume_funcie[([{ByRef|ByVal}]param_1 tip_date],)] _ [as tip_date] [instruciuni] [nume_funcie = expresie] ... [Exit Function] [instruciuni] [nume_funcie = expresie] End Function
[as
Unde precizrile de la explicarea sintaxei procedurilor de tip Sub , rmn valabile i pentru acest tip de proceduri. Diferen ele apar de la de la specificul capacit ii func iilor de a returna o valoare. Tipul valorii returnate este specificat n linia de antet a definirii func iilor, dup lista de parametrii. Valoarea se returneaz prin linia descris de sintaxa: nume_funcie = e xpresie Acest rezultat va fi returnat n momentul terminrii execuiei funciei. Apelul unei funcii se poate face astfel: Variabila=nume_funcie[(valoare_param_1,valoare_param_2,...)] , variabila preia rezultatul returnat de funcie. Dar, prin apelarea u nei func ii se returneaz o valoare, deci func ia apelat poate fi folosit ca un operand n orice expresie unde este permis tipul returnat. Referitor la definirea i apelul func iilor s considerm urmtorul exemplu : 116
Function test1() As Integer Dim v As Integer MsgBox increment(7) End Function Function increment(a As Integer) As Integer increment = a + 1 End Function Execu ia func iei afi eaz valoarea 8. Pentru a testa un subprogram fr parametri direct dintr -un modul, se poziioneaz cursorul n corpul subprogramului, apoi se selecteaz comanda: Run , Go/Continue F5 . Dac se dorete executarea subprogramului n modul Trace , se alege din meniul Debug , Step into F8 . Limbajul VBA cuprinde n plus o serie de funcii predefinite care faciliteaz scrierea procedurilor i funciilor utilizator. Unele mai des folosite dintre acestea sunt: Abs(expresie_numeric) : returneaz valoarea absolut a unei expresii numerice, sau a unui numr ; Asc(sir_caractere) : returneaz codul primului caracter din irul de caract ere specificat; CDate(expresie) : face conversia la tipul Date; CDbl(expresie) : face conversia la tipul Double; Dec(expresie) : face conversia la tipul Decimal; CInt(expresie) : face conversia la tipul Integer; CLng(expresie) : face conversia la tipul Long; CSng(expresie) : face conversia la tipul Single; CStr(expresie) : face conversia la tipul String; Cos(expresie_numeric) : returneaz cosinus dintr - o expresie numeric sau dintr- un numr. Valoarea returnat este de tip Double ; Chr(COD_CARACTER) : returneaz c aracterul ASCII cu codul specificat; Date() : Returneaz data calendaristic ; Day(data_calendaristic) : returneaz numrul zilei din luna ; Exp(expresie_numeric) : returneaz valoarea constantei e ridicat la o puter e (expresie numeric sau numr); Log(ex presie_numeric ): returneaz logaritmul natural dintr - un numr sau dintr- o expresie numeric; InStr ([intStart, ]strir, strCaut[, intCompar]) : verific dac un caracter sau un ir( strCaut) se gsete n interiorul altui ir (strir). n caz afirmativ funcia returneaz poziia primului caracter cutat n irul strir; 117
IsDate(expresie) : returneaz valoarea adevrat (TRUE) dac expresia dintre paranteze este compatibil cu o dat calendaristic ; IsEmpty(expresie) : returneaz valoarea adevrat (TRUE) dac expresia dintre paranteze nu conine o valoar e. Null este considerat valoare; IsNumeric(expresie) : returneaz valoarea adevrat (TRUE) dac expresia dintre parant eze poate fi evaluat ca numr; IsObject(expresie) : returneaz valoarea adevrat (TRUE) dac identificatorul dintre paranteze este de tip obiect; IsError(expresie) : returneaz valoarea adevrat (TRUE) dac expresia dintre parantez e conine o eroare; Lcase(ir_de_caractere) : transform literele mari dintr - un ir n litere mici ; Left(strir,intNr Caractere) : extrage dintr- un ir de caractere primele intNrCaractere din partea stng a irului; Len(ir_caractere/variabil) : returneaz numrul de caractere ale irului de caractere specificat sau numrul de octei necesari pentru a stoca coninutul unei variabile; Mid((ir_caractere, poziie_start[, lungimea])) : extrage un ir de caractere dintr- un alt ir de caractere ; Month(data_calendaristic) : returneaz numrul lunii din an ; Right(strir,intNrCaractere) : extrage dintr- un ir de caractere primele intNrCaractere din partea dreapt a irului ; Space(numr) : returneaz numrul de spaii specificate ; Str(expresie_numeric) : convertete rezultatul evalurii expresiei numerice dintre paranteze ntr - un ir de caractere ; Ucase(ir_de_caractere) : transform literele mici dintr- un ir n litere mari ; Val(ir_caractere) : returneaz conversia irului de caractere specificat, ntr un numr ; WeekDate(dat_calendaristic,prima_zi) : returneaz numrul zilei din saptmna datei calendaristice ; Year(dat_calendaristic): returneaz anul . Pentru scrierea programelor fiecare limbaj dispune de implementarea aaziselor structuri de control al execuiei programelor. S - a demonstrat c orice algoritm, fie el ct de complex, poate fi scris cu doar 3 sau 4 astfel de structu ri. Principalele structuri de control implementate n Visual Basic for Aplication sunt:
118
Da secvena instruciuni A
Condiie
Nu secvena instruciuni A
Un exemplu de utilizare a acestei instruciuni, este urmtorul subprogram, care calculeaz soluiile ecuaiei de gradul al doilea, pentru care prezentm schema logic i codul surs, scris n Visual Basic. '-----------------------Private Sub ec2(double a, _ double b, double c) Dim delta As Double Dim x As Double Dim x1 As Double Dim x2 As Double If a <> 0 Then delta = b ^ 2 - 4 * a * c If delta >= 0 Then x1=(-b+Sqr(delta))/(2*a) 119
x2=(-b-Sqr(delta))/(2*a) Sub ec2(a, b, c) MsgBox "x1 =" & x1 MsgBox "x2 =" & x2 Da Nu Else a0 MsgBox _ "ec. nu are solutii reale" Da 2 delta=b -4ac End If Else Da x=-c/b Nu delta>=0 If b <> 0 Then x = -c/b Scrie x MsgBox "x =" & x x 1 =(-b+ )/2a delta Else x 2 =(-b)/2a Nu exis t delta MsgBox_ soluii "ecuatia n- are sens" reale Scrie x 1 , x 2 End If End If End Sub
Terminare
b0
Nu
6.8.1. numrtor
Structura
repetitiv
cu
val c = val i
Operaii care
Cele mai multe limbaje folosesc pentru instruciunea repetitiv cu numrtor o form a instruc iunii FOR . n Visual Basic aceasta este numit n mod obinuit instruciunea FOR...NEXT . Sintaxa instruciunii FOR...NEXT este : 120
se repet
For valc=vali To valf [Step valp] [secven instruciuni] [Exit For] [secven instruciuni ] Next [valc ] Schema logic de reprezentare a acestei structuri este redat alturat sintaxei . n descrierea sintaxei instruc iunii avem : val i , val f - reprezint valoarea iniial, respectiv valoarea final pentru o variabil contor val c ; val p - re prezint valoarea pasului de incrementare/decrementare pentru variabila contor, implicit are valoarea =1; val i , val f , val p - pot fi i rezultatul evalurii unor expresii. La ntlnirea acestei structuri, se repet secvena de instruciuni de un numr de ori, plecndu - se de la valoarea iniial a variabilei contor, pn la valoarea final a acesteia, incrementndu -se ntotdeauna variabila contor cu val p . Dac partea de [Step ...] lipsete, compilatorul consider val p egal +1. Pentru ieirea forat din structura repetitiv se poate uza de partea Exit Fo r a instruciunii care de obicei trebuie intercalat ntr - o structur alternativ. Prin execuia rndului Exit For , controlul instruciunii este transferat la prima instruciune dup Next. Redm mai jos, codul surs pentru algoritmul de ordonare al unui vector cu n elemente.
121
122
n schimb dac condiia este pe o linie cu Loop atunci structura este repetitiv cu condiie posterioar, deci instruciunile din corpul structurii vor fi executate ce l puin odat, indiferent de valoarea de adevr a condiiei. Existena acestei instruciuni pluriforme este fireasc deoarece n algoritmi sunt poate, ntotdeauna substituibile instruciunile repetitive Dac este ntlnit rndul cu Exit Do , atunci controlul programului este transmis forat n afara buclei, la prima instruciune care se gsete dup linia Loop . Redm mai jos, schema logic i codul surs pentru algoritmul de calcul al sumei primelor n numere naturale, folosind cele 4 variante ale instruc iunii. i) Cazul Do While cu condiie anterioar : '-----------------------Function sum(n As Integer)_ Function Sum (n) As Integer sum = 0 Dim i As Integer sum = 0 i=1 i=1 Da Do While i <= n i <= n sum = sum + i sum = sum + i Return i=i+1 Loop i=i+1 End Function ii) Cazul Do Until cu condiie anterioar: '-----------------------Function sum(n As Integer)_ As Integer Dim i As Integer sum = 0 i=1 Do Until i > n sum = sum + i i=i+1 Loop End Function
Function sum(n As Integer)_ As Integer Dim i As Integer sum = 0 i=1 Do sum = sum + i i=i+1 Loop While i <= n End Function
Function Sum (n) sum = 0 i=1 sum = sum + i i=i+1 i>n Ieire Nu
Function Sum (n) sum = 0 i=1 sum = sum + i i=i+1 i <= n Ieire Da
iv) Cazul Do Until cu condiie posterioar: '-----------------------Function sum(n As Integer)_ As Integer Dim i As Integer sum = 0 i=1 Do sum = sum + i i=i+1 Loop Until i > n End Function
obiect specif ic de variabil. Pentru masive element poate fi doar de tipul variant. grup este un nume de colecie sau masiv. Exemplul urmtor listeaz numele tuturor controalelor incluse n formularul Produse . Pentru a fi accesate controalele, formularul trebuie s fi e deschis. '-----------------------------------Sub Form() Dim f As Form Dim c As Control Set f = Forms("Produse") For Each c In f Debug.Print c.Name Next End Sub Redm n figura de mai jos, rularea n mediul VBA alturi de mediul Access cu formularul deschis.
Un exemplu de funcie recursiv, scris n VBA, cal culeaz suma primelor n numere naturale: ------------------------Function sum_rec(n As Integer) If n > 0 Then sum_rec = n+sum_rec(n 1) End If End Function Apelul se poate face chiar din Debug Window prin linia: sum_rec(100). Pentru a nu se apel a la infinit, n subprogramele recursive trebuie plasat un bloc de instruciuni care s conin o secven de oprire, oarecum similar algoritmilor iterativi. n programare, recursivitatea este inspirat din recursivitatea sau recurena din matematic. Dac efectiv subprogramul se apeleaz direct pe el nsui atunci avem recursivitate direct, pe cnd dac un subprogram SP1 apeleaz un altul SP2 care apeleaz la rndul lui pe SP1 atunci avem recursivitate indirect. Prin aceasta se ajunge la realizarea re petabilitii unor blocuri de instruciuni. n general ns recursivitatea nu face economie de memorie, deoarece trebuie meninut o stiv cu valorile de prelucrat, putndu - se suprancrca stiva i memoria. n schimb pot subprogramele recursive sunt lizibi le i uor de depanat.
126
3. nume_obiect_colecie(index_obiect) numr care indic poziia n colecie a unui obiect. Aceste numere de ordine ncep de la zero. Invocarea formularului sau raportului curent se poate face prin apelativul Me. Printre nume roasele obiectele care pot fi utilizate de programatori sunt i obiectele Applicaton i Form. Obiectul Application refer aplicaia Microsoft Access 2000. Principalele metode ale obiectului Application sunt: CurrentDb returneaz un obiect baza de date (D ataBase) care refera baza de date curent; CurrentUser returneaz utilizatorul curent, conectat la baza de date curent ; SysCmd se poate utiliza n principal pentru a afia un text n bara de stare ( Status Bar ) sau pentru gestionarea unui Progress Bar; SetOption stabilete valori pentru parametrii care se gsesc n meniul Tools, opiunea Options: ; obiect_Application.SetOption nume_opiune, setri ; GetOption returneaz valorile unor parametri care se gsesc n meniul Tools, opiunea Options:; obiect_Appl ication.GetOption(nume_opiune). Principalele proprieti ale obiectului Application sunt: DoCmd apeleaz obiectul DoCmd , descris n paragraful precedent; Forms permite accesul la colecia de formulare deschise dintr -o baza de date; Reports permite ac cesul la colecia de rapoarte deschise dintr -o baza de date; Screen permite accesul la obiectul Screen (va fi descris n paragrafele urmtoare). Obiectul Form refer un obiect de tip formular. Toate formularele deschise din baza de date se regsesc n colecia Forms , fiind identificate printr- un numr, alocat n ordinea deschiderii acestora. Primul formular deschis are numrul de ordine zero. Pentru a afla numrul de formulare deschise la un moment dat, trebuie citit proprietatea Count a coleciei Forms . Metodele obiectului Form sunt: Repaint redeseneaz pe ecran formularul pentru care a fost apelat aceast metod; Requery reactualizeaz nregistrrile din formular (dac formularul are ca surs o interogare se reface aceasta); 127
SetFocus se cedeaz controlul formularului specificat mpreun cu metoda; Undo - toate modificrile fcute datelor afiate n formular se pierd. Dintre proprietile acestui obiect amintim: OpenArgs - ir de caractere care poate fi transmis ca parametru la deschiderea unui formular; RecordSource - numele unei tabele, interogri sau o fraza SQL ce are ca rezultat un set de nregistrri de care este ataat formularul; RecordSelectors stabilete apariia marcatorului de nregistrare pe formular (TRUE) sau dezactivarea acestuia (FALSE); DataEntry - formularul este deschis numai pentru introducerea de nregistrri noi; AutoCenter - formularul este afiat pe centrul ecranului; AutoResize - formularul se redimensioneaz pe ecran automat, astfel nct sa se vad tot coninutul s u; Caption - ir de caractere afiat n bara de titlu a ferestrei formularului; ControlBox seteaz activarea (TRUE) sau dezactivarea (FALSE) butoanelor de control ale ferestrei formularului; NavigationButtons - seteaz activarea (TRUE) sau dezactivarea (FALSE) controlului pentru deplasarea ntre nregistrrile unui formular; Toolbar - indic bara de instrumente (Toolbar) afiat o dat cu formularul; Controls - reprezint colecia de controale de pe un formular.
Pentru a particulariza o procedur a unui eveniment legat de un obiect trebuie parcurse urmtoarele etape: se afiaz Foaia de proprieti ; se selecteaz seciunea Event ; se selecteaz evenimentul la care se dorete ataarea procedurii ; cli ck pe butonul pentru editarea procedurii respective. Sistemul deschide n editorul VBA o procedur de tip Sub sau Function cu numele compus din numele obiectului legat de numele evenimentului prin semnul _ . Pentru un obiect formular ( Form) principalele evenimente sunt: OnClose : se produce la nchiderea i tergerea de pe ecran a formularului, OnLoad : se produce la deschiderea formularului, n momentul n care o nregistrare din tabela sau interogarea ataata formularului (n proprietatea Record Sour ce) este afiat pe ecran, OnCurrent : se declaneaz atunci cnd o nregistrare din tabela sau interogarea ataat formularului devine nregistrare curent. Pentru controale dintre evenimentele caracteristice acestora se pot enumera: OnClick :se declaneaz n momentul n care se activeaz butonul mouse ului, OnDblClick : se declaneaz n momentul n care se activeaz de dou ori butonul mouse-ului (la dublu clic), OnMouseMove : se declaneaz n momentul n care utilizatorul mut mouse ul pe deasupra c ontrolului unde se trateaz acest eveniment, OnChange : se declaneaz atunci cnd coninutul unui control caset de text (Text Box) sau list derulant (Combo Box) se modific.
Exerci iu:
Redm un exemplu n care, ntr - un formular sunt plasate dou dre ptunghiuri: caset1 i caset2 . Pentru nceput colorm fondul pentru caset1 cu rosu, iar pentru caset2 cu albastru. Particularizm procedurile de evenimente astfel: la clic pe caset1 formularul s devin ro u; la clic pe caset2 formularul s devin al bastru; la clic pe formular , acesta s devin gri;
129
O alt grupare a principalelor evenimente ar putea fi redat in tabelul de mai jos: Tip de eveniment
Nume
Utilizatorul
Apare cnd
realizeaz o aciune cu formularul sau raportul Exit, Obiectul primete sau pierde focalizarea sau devine activ respectiv inactiv
de fereastr Close, Load, Open, Resize, Unload de focalizare Activate, Deactivate, Enter,
de date
Se
fac
modificri
ale
datelor
sau
nregistrrilor
de mouse
MouseMove, MouseUp
funcia SendKeys pentru transmiterea unei aciuni Un raport este tiprit sau este formatat n vederea tipririi Creat de Access la intervale de timp definite de utilizator
de tiprire de ceas
130
de eroare
Error
Atunci cnd utilizatorul deruleaz o operaie, Access - ul lanseaz o secven de evenimente. Aa se ntmpl pentru diversele operaii ca re pot fi executate de operatori. Programatorii pot s modifice sau nu aceste evenimente, VBA le ofer ca potenial de particularizare. n tabelul urmtor redm succesiunile de evenimente ocazionate de diferite operaii: Operaie Succesiune de evenimente
Deschiderea unui formular cu controale active Deschiderea unui formular fr controale active nchiderea unui formular cu controale active nchiderea unui formular fr controale active Intrarea ntr -un control Ieirea dintr -un control controale active Cumutarea ntre dou formulare F1 i F2 fr LostFocus(F1), Deactivate(F1), GotFocus(F2), controale active Modificarea unui text ntr - o caset combinat, pentru fiecare caracter introdus: Actuali zarea datelor ntr - un control sau nregistrare KeyDown, KeyPressed, Change, KeyUp, BeforeUpdate, AfterUpdate, Exit nserarea unei nregistrri, la intrarea n primul KeyDown, KeyPressed, BeforeInsert, Change, control control Stergerea uneinregistrri Delete, Current, BeforeDelConfirm i dac se apas Yes se mai face i AfterDelConfirm KeyUp nserarea unei nregistrri, la ieirea din ultimul BeforeUpdate, AfterUpdate, AfterInsert Activate(F2) text sau KeyDown, KeyPressed, Change, KeyUp Open, Load, Resize, Activate, Current Open, Current Unload, Deactivate, Close Unload, LostFocus, Deactivate, Close Enter, GotFocus Exit, LostFocus Load, Resize, Activate, GotFocus,
Deja am dat cteva exemple n acest sens n subcapitolele ante rioare. Obiectele bazelor de date Access sunt structurate n ierarhii: ADODB (ActiveX Data Objects), ADOX (Microsoft ADO Extensions for DLL and Security) i JRO (Microsoft Jet and replication Objects). Pentru exploatarea datelor se folosesc obiectele ADODB iar pentru definiia datelor se folosesc obiectele ADOX. ADODB este un model ierarhic de obiecte, Catalog redat n figura alturat. Tables Table Casetele gri reprezint obiecte, iar Columns Column Properties Propert casetele albe colecii de obiecte. y Indexes Index Specificarea unui obiect aparinnd unei Columns Column colecii se p oate face conform uneia dintre Properties Propert urmtoarele variante: Keys Key y nume_colecie![nume_obiect] fiind nevoie Columns Column Groups Group Properties Propert de paranteze drepte numai dac nu mele y Users User obiectului conine spa ii; User Users nume_colecie("nume_obiect") ; Groups Group nume_colecie(index_obiect) index care Procedure Procedur s e Commmand indic poziia n coleci e a unui obiect. Views View Aceste numere de ordine ncep de la zero. Commmand ADOX este o c olecie de obiecte produse de Microsoft pentru definirea i crearea structurilor bazelor de date i a securitii acestora, redat n figur. Specificarea unui obiect aparinnd unei colecii se poate face n mod similar specificrii obiectelor n cazul ierarhiei ADODB. Cel mai important obiect din ADODB este obiectul Connection care definete o sesiune de lucru pentru un utilizator al unei date particulare. Cum am mai spus, se pot folosi n principal, informa ii din baze de date Access, SQL Server sau MSDE. Pentru a ne conecta la baza de date, Data Source=C: \My Documents\ bdNelu.accdb, trebuie scris urmtorul cod: '--------------------------------------Public Sub conexiune() Dim con As ADODB.Connection ' realizeaz o conectare con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;" _ & "Data Provider=Microsoft.ACE.OLEDB.12.0"; & _ "Data Source=C:\My Documents\bdNelu.accdb " con.Open MsgBox con.ConnectionString set con= Nothing End Sub 132
Deci trebuie declarat o variabil pentru obiectul conexiune. Apoi trebuie precizat coninutul iniial al irului conexiunii, care conine valorile pentru proprietile conexiunii. Pentru a realiza conexiunea s unt obligatorii specificarea proprietii Provider, Data Source i User. ns de cele mai multe ori se lucreaz cu datele din baza de date curent. n consecin codul se simplific astfel: '--------------------------------------Public Sub conexiune() Dim con As ADODB.Connection ' realizeaz o conectare Set con = CurrentProject.Connection MsgBox con.ConnectionString set con= Nothing End Sub Se observ c nici mcar nu trebuie dat comanda Open pentru conexiunile la datele proiectului curent. Pn aici s - a prezentat doar prima chestiune care trebuie rezolvat n lucrul cu datele. Obiectul care conine informaiile care vor fi procesate de rutine este mulimea de nregistrri (n limba englez: RecordSet ). Pentru iniializarea lucrului cu o mulime de nregistrri se utilizeaz urmtoarea secven de instruciuni: Dim m as RecordSet set m = New ADODB.RecordSet m.Open Surs, Conexiune, TipCursor, TipBlocare, Opiuni " m " este numele variabilei prin care se face referire la mulimea de nregistrri, iar ultima linie, bineneles c este prezentat ca ca sintax pe care o vom explica. Parametrul " surs " poate fi numele unui tabel sau numele unei interogri, comenzi, intuciuni SQL sau procedur ce are rezultat o mulime de nregistrri. Despre " conexiune " am scris puin nainte. Parametrul " tipcursor " poate fi specificat cu urmtoarele constante predefinite: adOpenDynamic, adOpenKeyset, adOpenStatic sau adOpenForwardonly. Diferenele ntre aceste tipuri de cursoare apar de la modul cum e tr atat nregistrarea referit la un moment dat, deplasarea prin nregistrri sau posibilitatea de a se seziza modificrile fcute de ali utilizatori. Numele lor sugereaz oarecum despre ce e vorba. 133
Parametru "tipblocare" se refer la modul de tratare a nregistrrilor pe timpul editrii lor, posibilitatea de acces la ele a altor utilizatori. Constantele predefinite care stabilesc acest parametru sunt: adLockReadOnly, adLockPessimistic, adLockOptimistic i adLockBatchOptimistic. Implicit ultimii doi param etrii sunt dai de constantele: adOpenForwardonly i respectiv adLockReadOnly. Pentru parametrul opiuni se pot folosi urmtoarele constante VB: adCmdText, adCmdTable, adCmdTableDirect, adCmdStoredProc, adCmdUnknown i adCmdFile care precizeaz modul cum este evaluat parametrul "surs". Acestea fiind precizate putem s trecem la prezentarea unor exemple mai edificatoare. Pentru trecerea de la o nregistrare la alta ntr - o mulime de nregistrri (navigare) se folosesc metodele Move, MoveNext, MovePrevious, MoveFirst i MoveLast. '--------------------------------------Public Sub Navigare(tabel as string) Dim rs As ADODB.Recordset Dim con As ADODB.Connection Set con = CurrentProject.Connection Set rs = New ADODB.Recordset with rs .CursorType = adOpenStatic .CursorLocation = adUseClient .Open tabel, con, , , adCmdTable If .RecordCount > 0 Then .MoveFirst Do For i = 0 To .Fields.Count - 1 Debug.Print .Fields(i).Value; Next Debug.Print .MoveNext Loop Until .EOF End If End With rs.close con.close set rs=nothing set con=nothing 134
End Sub Acest exemplu afieaz valorile cmpurilor nregistrrilor unui tabel (dac exist cmpuri de tip obiect OLE rezultatul e imprevizibil). Apelul poate fi fcut din fereastra Immediate, acolo unde va afi a: S- a artat doar navigarea printre nregistrri, un proces ReadOnly. Pentru a se putea interveni cu actualizri trebuie s se fac apel la metodele .AddNew, .Update sau .Delete. Actualizrile practic sunt fcute dup o cutare prealabil a articolului n cauz. Fie un tabel "persoane" cu campurile marca i nume . Scriem o procedur care va cuta articolul cu marca 50. Dac tabelul este indexat ctarea se poate face cu metoda .Seek altfel cu metoda .Find. O vom folosi pe aceasta din urm, dar atenie este mai lent i folosirea ei repetat ncetinete lucrul. Metoda .Find are urmtoarea sintax: Recordset.Find condiie, articolesarite, sens, articolstart Parametrul "c ondiie" e evident. "articolesarite" specific un numr de articole din vecintatea articolului de unde se ncepe cutarea care nu sunt verificate (implicit 0). "sens" poate fi adSearchForward sau adSearchBackWard (implicit n fa). nceput poate fi primu l articol, ultimul sau articolul curent (implicit). Procedura este urmtoarea: '--------------------------------------Public Sub Modificare_Stergere() Dim rs As ADODB.Recordset Dim con As ADODB.Connection dim sirdate as String Set con = CurrentProject.Connection Set rs = New ADODB.Recordset with rs 135
.CursorType = adOpenStatic .CursorLocation = adUseClient .Open "persoane", con, adOpenStatic, _ adLockOptimistic, adCmdTable .Find "marca=50" If Not .Eof Then sirdate="" For i = 0 To .Fields.Count - 1 sirdate =sirdate & .Fields(i).Value Next Dim rasp rasp = InputBox("articolul cautat este" + vbCr _ +sirdate + vbCr + "m- modificare, d -stergere", "m") If lCase(rasp)="d" Then .Delete Else .Fields("Marca")=InputBox( _ "Alt valoare pentru Marca") .Fields("Nume")=InputBox( _ "Alt valoare pentru Nume") .Update End If End If End With rs.close con.close set rs=nothing set con=nothing End Sub Ce operaii se realizeaz? Dup iniializri se caut articolul cu marca = 50 si se afieaz coninutul lui. Apoi operatorul e ntrebat dac dorete s modifice sau s tearg articolul. Pentru tergere se utilizeaz metoda .Delete. Pentru modi ficare se citete valori noi pentru cele dou c \ mpuri i apoi se utilizeaz metoda .Update. Pentru adugarea unei noi nregistrri se poate folosi procedura: '--------------------------------------Public Sub adugare() Dim rs As ADODB.Recordset Dim con As ADODB.Connection 136
Set con = CurrentProject.Connection Set rs = New ADODB.Recordset with rs .CursorType = adOpenStatic .CursorLocation = adUseClient .Open "persoane", con, adOpenStatic, _ adLockOptimistic, adCmdTable .AddNew .Fields("Marca")=InputBox( _ "Alt valoare pentru Marca") .Fields("Nume")=InputBox( _ "Alt valoare pentru Nume") .Update End With rs.close con.close set rs=nothing set con=nothing End Sub Reamintim c la deschiderea unei mulimi de nregistrri ca surs se poate lua i o interogare de selecie ca i comand sau o interogare de selecie salvat, s.a.m.d. Din proceduri VBA se pot lansa i interogri de tergere, actualizare sau adgare cu ajorul comenzii .Execute. Pn acum, n aceast seciune am prezentat exemple de folosire a obiectelor ADODB. n continuare vom analiza folosirea obiectelor ADOX pentru definirea i crearea structurilor de baze de date. Procedura urmtoare creaz un tabel cu numele "colaboratori" ce are dou cmpuri "Marca" i "Nume" n baza de date: C: \doros\Ang.accdb Sub CreareTabelPrinVBA() On Error GoTo CreateTableError Dim tbl As New Table Dim cat As New ADOX.Catalog ' Deschide catalogul bazei de date cat.ActiveConnection = "Provider=Microsoft.Access.OLEDB.10.0;" _ & "Data Source=C:\doros\Ang.accdb;" _ & "Data Provider=Microsoft.ACE.OLEDB.12.0" tbl.Name = "colaboratori" tbl.Columns.Append "Marca", adInteger 137
tbl.Columns.Append "Nume", adVarWChar, 50 cat.Tables.Append tbl Debug.Print "Table 'MyTable' is added." 'eliberarea memoriei obiectelor Set cat.ActiveConnection = Nothing Set cat = Nothing Set tbl = Nothing Exit Sub CreateTableError: Set cat = Nothing Set tbl = Nothing If Err <> 0 Then MsgBox Err.Source & "-->" & Err.Description, , "Error" End If End Sub Odat create tabelele, structura lor poate fi modificat. Se pot aduga noi coloane, se pot terge dintre cele existente se pot modifica dintre atributele lor, etc. Pr incipalele tipuri de coloane care trebuie precizate la instruciunea .Column.Append sunt: Constant Codul Description
adBinary adBoolean adUnsignedTinyInt adCurrency adDate adDouble adGUID adInteger adLongVarBinary adLongVarChar adNumeric adSmallInt adSingle adVarWChar 128 11 17 6 7 5 72 3 205 201 131 2 4 202 Binary Boolean Byte Currency Date/Time Double GUID Long Long Binary (OLE Object) Memo Numeric Integer Single Text
ADOX conine obiecte i pentru creare sau modificare de indeci, creare sau modificare de interogri, creare de indeci. n fine, urmtorul exemplu modific comanda SQL a unei interogri stocate n baza de date: 138
'--------------------------------------Public Sub ADOXSchimbSQL() Dim cat As New ADOX.Catalog Dim cmd As New ADODB.Command ' Deschiderea catalogului de tabele ale bazei de date cat.ActiveConnection = CurrentProject.Connection ' Accesarea interogrii Set cmd = cat.Procedures(1).Command ' Modificarea comenzii cmd.CommandText = "SELECT * FROM ANG;" ' Salcvarea noii comenzi Set cat.Procedures(1).Command = cmd Set cat = Nothing Set cmd = Nothing End Sub
139
140
Cerinele prezentate mai sus pentru baza de date i pentru documentaia aferent sunt obligatorii i minimale.
141
Tema problemei de rezolvat este aleas de student, nu neaprat din list i se va aprecia orig inalitatea. Este recomandabil, ca studenii s - i aleag teme cu care au avut tangen n experiena lor profesional. Bazele de date vor fi relaionale, normalizate mcar pn la forma normal 3 i vor conine informaii neredundante. Deci, este inc orect ca s existe dou tabele cu urmtoarea structur: Catalog Rulaj Cod Nume Pre Cod Nume Data Cantitate TipOperatie d eoarece al doilea tabel conine informaii redundante (cmpul Nume ) i nu respect a doua regul de normalizare care necesit ca fiecare coloan care nu este cheie s depind complet de cheia primar, nu doar de o parte a cheii. (cmpul Nume depinde numai de cmpul Cod , nu de combinaia Cod+Data , care constituie cheia primar). Nu este corect nici un tabel de forma: TaxeStuden i Nr. Matricol Nume Rata1 Rata2 deoarece conine o list de cmpuri i nu e n forma normal 1.
Rata2
b. Interogrile
Prin obiectele create, studentul va face dovada c nelege diversele tipuri de interogri: de extragere (SELECT cu toate clauzele), de inserare (INSERT), de modificare (UPDATE) i de tergere (DELETE). Cele mai importante interogri ale proiectului vor fi cele care se refer la datele din mai multe tabele, simultan.
c. Formularele
Formularele create trebuie s conin posibiliti de introducere a tuturor datelor definite n 142
tabele. Atunci cnd e necesar s se introduc date prin exploatarea unor relaii dintre tabele, se va apela la tehnica modulelor Visual Basic, a interogrilor (de tip join) sau a subformularelor. Mai mult de jumtate din numrul formularelor din proiect, trebuie s nu fie create cu expertul. n formulare se vor plasa controale de urmtoare tipuri: Etichete; Casete text; Casete combo; Imagini, linii sau dreptunghiuri; B utoane de comand. n figurile de mai sus sunt prezentate cteva exemple de formulare . Se va aprecia pozitiv, existena n proiect, a unui formular care monitorizeaz funcionarea obiectelor proiectului.
d. Rapoartele
Rapoartele trebuie s poat lista toate informaiile din tabele, sub diferit e forme, n diferite moduri ordonare sau de grupare. Mai mult de jumtate din numrul rapoartelor din proiect, trebuie s nu fie create cu expertul. Atunci cnd e necesar listeze date prin exploatarea unor relaii dintre tabele, se va apela la tehnica i nterogrilor (de tip join). n rapoarte se vor plasa controalele urmtoare: Etichete; Casete text; Imagini, linii sau dreptunghiuri. Cel puin ntr - un raport, se vor plasa cmpuri care vor conine valori rezultate ale funciilor de grupare. n figura de mai jos prezentm un exemplu de raport:
143
7.3. Documentaia
Studentul va prezenta mpreun cu baza de date o documentaie a coninutului, listat i ndosariat (cca 10 - 15 pagini), structurat pe urmtoarele seciuni: motivaia lucrrii; descrierea datelor i variabilelor utilizate; descrierea machetelor pentru formularele de introducere de date; descrierea machetelor pentru rapoartele de listare a informaiilor coninute n tabele; listingul i explicaia diverselor interogri sau module utilizate; concluzii trase dup realizarea proiectului i propuneri de perfecionare. Studenii vor trebui s respecte ntocmai structura acestei documentaii, dar n redarea ei nu este obligatoriu s se recurg la formulrile stricte redate mai jos, ca model. n documentaie nu vor fi redate elemente teoretice, ci vor fi prezentate succint elementele coninute n proiect. Prima pagin a dosarului va avea urmtorul format: 144
PROIECT LA DISCIPLINA BAZE DE DATE Folosirea MS ACCESS n gestionarea unei baze de date coninutul bazei de date . Autor student:
numele studentului, anul i specializarea .
a. Motivaia lucrrii
n aceast seciune se pot prezenta elemente precum cele redate n modelul de mai jos:
coninutul bazei de date Acest proiect este destinat gestionrii , menirea organizaiei ntr - o organizaie , pentru angajaii si de la numele compartimentului sau biroului compartimentul . Proiectul este realizat cu ajutorul aplicaiei MS Access Office 2003. Pentru funcionarea lui sunt necesare: numrul i pregtirea angajailor, numrul de calculatoare, alte resurse de hard sau soft, etc
Camp NrCarnet
Nul Explicaii despre coninut Da Numrul legitimaiei are 6 cifre, e necesar o variabil de tip ntreg lung, valori pozitive
Nume
Numele sportivului, nu depete 50 caractere, cu litere mari, Da fr diacritice. Dac sunt mai multe cuvinte, ntre ele se intercaleaz cratim Toate prenumele pe care le are sportivul, nu depete 70 Da caractere, cu litere mari, fr diacritice. Dac sunt mai multe cuvinte, ntre ele se intercaleaz cratim Una dintre valorile M pentru sexul masculin, sau respectiv, F pentru sexul feminine
Titlu
Titlul sau categoria sportiv. Pentru sportivii de sex masculi ne sunt posibile valorile: NC neclasificat, III categoria a III- a, II categoria a II- a, I categoria a I-a, text (3) Da CM candidat de maestru, M maestru, FM maestru FIDE, MI maestru internaional, GM mare maestru internaional. Pentr u sportive sunt posibile valorile corespunztoare: WCM, WM, WFM, WMI, WGM. Coeficientul valoric al sportivului. Poate lua valori ntre 401 i 1400, cnd e calculat de federaia naional, sau valori Da ntre 1401 i 2900, cnd e calculat de federaia internaional, Valorile pot fi stocate ntr - un numr ntreg pozitiv (pe doi octei) Numele ntreg (inclusive calea de directoare) a fiierului acre Da conine imagine pozei sportivului. E recomandat s existe un camp cu l rgime considerabil. Codul acordat de federaia internaional pentru sportiv. Are Da 7 cifre, e necesar o variabil de tip ntreg lung, valori pozitive.
CIV
ntreg
Poza
IdFide
c. Descrierea machetelor pentru formularele de introducere de date sau a rapoart elor de ieire
n aceste seciuni vor fi prezentate sau explicate formularele (sau rapoartele) folosite. n documentaie formularele i rapoartele vor fi prezentate distinct, n seciuni separate. 146
Machetele corespunztoare formularelor (sau rapoartele) vor fi captate cu ajutorul tastei PrintScreen i inserate n documentaie. Se vor prezenta toate controalele incluse n fiecare formular (sau raport). Se vor prezenta toate proprietile, metodele i evenimentele la care s - a intervenit cu modificri, la nivel global pentru formular (sau raport), sau pentru fiecare control n parte. De exemplu: Primul formular este destinat, dup cum are i numele, completrii tabelului CATALOG. Este un formular simplu, finisrile care s - au fcut sunt: scoaterea butoanelor de navigare; introducerea unui combobox pentru selectarea articolelor dup nume; introducerea a 4 butoane de comenzi pentru tergere, salvare, res taurare i adugare articole.
Dac proiectul conine module VisualBasic, sursele acestora vor fi listate i explicate.
148
BIBLIOGRAFIE
Doros, I.. Societatea informaional. Oraul virtual-Editura Gutenberg Arad-2009 Doros, I., Popei, V. Dictionar pentru utilizatorii de calculatoare personale - Editura Dacia Cluj-Napoca-2007 Doros, I., Todor., L, Ardelean, A.E., Tulbure, C. Informatica pentru utilizatorii de calculatoare personale - Editura Dacia Cluj-Napoca-2005 Lungu, I., Sabu, Gh. ,s.a. Sisteme informatice. Analiz, proiectare i implementare, Editura Economic, Bucureti 2003 Muntean, D.V., Andreica, A., Todor, L.S., Doros, I. Bazele informaticii. Aplicaii- Editura Gutenberg Arad-2009 Nstase,P., Mihai,F. Baze de date Microsoft Access 2000 , Editura Teora, Bucureti 2003 Sabu,G.,Muntean,M., Dardal,M.,Bologa,R., Bologa, A.R. Baze de date, Editura MatrixRom, Bucureti 2008 Velicanu, M.-Baze de date prin exemple- Editura ASE Bucureti -2007
149