Cuprins
Introducere. Baze de date relationale. Sistemul Microsoft Access.
Teoria Relationala. Teoreme de normalizare. Proiectarea unei baze de date.
Tabele. Tipuri de date.
Relatii. Integritate referentiala. Metoda QBE.
Interogari simple utilizānd SQL.
Operatori. Functii de biblioteca.
Interogari SQL avansate (I).
Interogari SQL avansate (II).
Interogari active.
Formulare. Importul si exportul datelor.
Rapoarte.
Sistemul de Macrocomenzi. VBA. Securitatea BD Access.
Cap. Baze de date relationale . sistemul Microsoft Access
Baze de date. Sisteme de gestiune a bazelor de date.
Prin termenul "Baza de date" se īntelege un sistem software care gestioneaza stocarea, regasirea si prelucrarea unor date structurate, incluzānd, pe lānga datele īn sine, rutine de prelucrare a lor, sisteme de protectie, securitate etc.
Termenul "Sisteme de gestiune a unei baze de date" (SGBD-DBMS) desemneaza sistemele de dezvoltare care permit crearea si gestionarea bazelor de date.
Exemple de sisteme de gestiune a bazelor de date relationale considerate de nivel industrial:
Oracle
IBM DB2
Informix
Exemple de sisteme de gestiune a bazelor de date relationale considerate de nivel desktop:
Microsoft Access
Microsoft FoxPro
Borland dBase
Ce este sistemul Access?
Sistemul Microsoft Access este un sistem complex care permite atāt dezvoltarea aplicatiilor mici cāt si al sistemelor software industriale complexe. Avantajul sau īnsa este dat de posibilitatea asimilarii graduale si a unui start facil.
Microsoft Access este un sistem de gestiune a bazelor de date relational.
Ca sistem de gestiune, Microsoft Access cuprinde destul de multe facilitati:
un sistem relational care suporta doua limbaje de interogare standard: Structured Query Language (SQL) si Query By Example (QBE);
un limbaj de programare complet reprezentānd īn esenta un dialect al limbajului Visual Basic;
un macro-limbaj procedural usor de utilizat;
un mediu de dezvoltare rapida a aplicatiilor (RAD) cu interfata vizuala si unelte de creare automata a rapoartelor;
o extensie orientata pe obiecte intuitiva;
o mare varietata de asistenti (wizards) care usureaza faza de dezvoltare a aplicatiilor.
Pentru cei neavizati, aceasta multitudine de facilitati poate parea de o complexitate frustranta. Adevarul este ca fiecare dintre aceste fatete se bazeaza pe un set diferit de cerinte si perspective asupra aplicatiilor. Spre exemplu:
caracterul relational implicat considera aplicatia ca un set de date;
programare procedurala īn VB sau macro comenzi considera aplicatia ca un set de instructiuni care vor fi executate secvential;
elementele de orientare pe obiecte dau o perspectiva structurala asupra aplicatiei, care poate fi considerata ca o multime de obiecte care īncapsuleaza stari si comportamente specifice, interactionānd la momentul executiei prin schimb de mesaje.
Aceste fatete ale unei aplicatii īnsa nu sunt integrate logic, lucru care ar fi greu de realizat. īn acest sens este lasata la latitudinea dezvoltatorului alegerea si utilizarea uneia sau alteia. El poate alege metoda ce se potriveste cel mai bine aplicatiei care o dezvolta.
Atāta timp cāt exista o asa de mare varietate de metode puse la dispozitie, alegerea uneia sau alteia denota īn final cunoasterea sistemului de catre dezvoltator. īn plus, studierea acestui sistem va duce implicit la studierea diverselor concepte fara a fi necesara familiarizarea cu diferite unelte de dezvoltate, specifice fiecarei metode.
Fisier baza de date Access.
Toate informatiile continute de o baza de date Access sunt reunite īntr-un singur fisier. Pe lānga tabelele continānd date, el mai contine diverse tipuri de obiecte, cum ar fi:
interogarile pentru organizarea si regasirea datelor;
formulare pentru interfata cu utilizatorii bazei de date;
rapoarte pentru tiparirea rezultatelor;
rutine macro si Visual Basic pentru extinderea functionalitatii aplicatiilor. Fisierul baza de date are extensia standard ".mdb" (ex. "contabilitate.mdb"). Cānd fisierul este deschis īn Access, el va fi automat blocat, evitāndu-se pierderea datelor. Prin blocare se va crea un fisier cu acelasi nume dar cu extesia ".ldb", care īnsa nu contine date ci doar informatiile de blocare.
Rularea sistemului Access. Crearea unei baze de date.
Pentru rularea sistemului Microsoft Access se va apela la intrarea Access meniul Windows Start sau icoana de pe desktop.
Pentru crearea unei baze de date noi se va apela la meniul File/New din Microsoft Access, la butonul de pe bara de unelte (toolbar) sau la optiunea din fereastra New File. Suplimentar se va alege directorul īn care se face salvarea si se va completa numele bazei de date nou create, de exemplu "baza1.mdb".
Deschiderea unei baze de date existente.
Deschiderea unei baze de date existente se poate face prin executia unui dublu click pe fisierul .mdb aferent sau, dupa pornirea sistemului Access, prin selectarea intrarii de meniu File/Open. Īn cazul utilizarii celei de a doua metode se va alege īn prealabil directorul īn care este salvata baza de date dorita.
Observatie: Versiunile mai recente de Microsoft Access pot deschide baze de date create cu versiuni anterioare dar reciproca nu este valabila (compatibilitatea este doar īn jos).
Gestionarea proiectului.
Pentru a putea gestiona diversele aspecte ale unei baze de date sistemul Access le organizeaza pe categorii īn cadrul unei ferestre speciale prezentate īn figura de mai jos.
Categoriile de clasificare a obiectelor sunt:
Tables - tabelele continute īn baza de date precum si legaturi spre tabele din alte baze de date;
Queries - interogari pasive si active;
Forms - formulare pentru interfata cu utilizatorii;
Reports - rapoarte pentru tiparirea infromatiilor;
Pages - pagini de Web pentru afisarea datelor din baza de date;
Macros - rutine continānd comenzi de tip macro pentru implementarea unor secvente automate de prelucrare a datelor;
Modules - module de cod Visual Basic care permit implementarea unor algoritmi complecsi de prelucrare.
Pentru deschiderea unui obiect din fereastra de gestiune a bazei de date, se va selecta obiectul si se va apasa butonul Open.
Pentru stergerea sau redenumirea unui obiect se va selecta din meniul context al obiectului optiunea Delete respectiv Rename.
Observatie: Meniul context al unui obiect poate fi accesat prin apasarea butonului din dreapta al mouse-ului deasupra acestuia.
Utilizarea optiunii Help
Aproape toate aplicatiile dezvoltate recent pun la dispozitia utilizatorului nu doar manuale de utilizare tiparite ci si un sistem de informare interactiva numita generic "Online Help". si sistemul Access se īnscrie īn aceasta categorie. Pentru a accesa aceste informatii este suficient sa se apese tasta F1 īn contextul de interes sau sa se selecteze intrarea Microsoft Access Help din meniul Help.
Sistemul de informare poate fi utilizat si pentru īnvatarea unor secvente de lucru cu sistemul dar, principala lui menire este aceea de a servi drept referinta rapida īn cadrul procesului de dezvoltare.
Dezvoltarea unei aplicatii Access.
Īn general, dezvoltarea unei aplicatii Access poate urma doua cai oarecum divergente:
"in-depth systems analysis, design, and impiementation" - presupune analiza amanuntita a sistemului de modelat si crearea īn prealabil a unui proiect complet īnaintea īnceperii fazei de implementare;
"rapid prototyping" - presupune combinarea iterativa a fazelor de analiza, proiectare si implementare.
Prima metoda este potrivita pentru bazele de date complexe si a sistemelor de mari dimensiuni. Pentru sisteme mici si mijlocii cea de a doua metoda da rezultate mai rapide si are costuri mai scazute. Īn plus, Microsoft Access pune la dispozitia dezvoltatorilor un mare numar de facilitati destinate acestei metode, cum ar fi: unelte grafice de proiectare, generatoare si instructiuni de nivel foarte īnalt (macro-comenzi). Secventa de dezvoltare a aplicatiilor va fi urmatoarea:
Modelarea informatiilor de interes īn entitati si relatii dintre acestea.
Crearea unei tabele pentru fiecare entitate, urmata de normalizarea tabelelor astfel rezultate.
Specificarea relatiilor īntre tabele.
Organizarea informatiilor prin intermediul interogarilor.
Crearea de formulare si rapoarte pentru tranzactiile de intrare si iesire.
Crearea de interogari active, macro si rutine Visual Basic pentru procesarea informatiilor.
Cap. 2. Teoria Relationala. Teoreme de Normalizare. Proiectarea unei baze de date.
1. Elemente de algebra relationala.
Principiile algebrei relationale au fost stabilite de dr. F. Codd īn 1970. Ea reprezinta fundamentarea matematica a bazelor de date relationale. Īn conceptia relationala o baza de date este formata dintr-o colectie de relatii (tabele, fisiere de date) asupra carora se aplica o colectie de operatori pentru a gestiona datele continute de relatii.
Un operator relational se aplica asupra unor tabele si va avea ca si rezultat tot o tabela. Potrivit algebrei relationale nu este permis accesul direct asupra īnregistrarilor dintr-o tabela.
Īn continuare se vor da cāteva definitii a termenilor folositi de algebra relationala.
Constituantii (cāmpuri, atribute, caracteristici) sunt informatiile elementare (atomice) ale unei relatii.
Domeniul (tipul) este ansamblul valorilor pe care īl poate lua un constituant. Domeniul este un set de valori atomice.
N-upletul este un ansamblu de constituanti (X1, X2, ..., Xn) sau de date (a1, a2, ..., an) cu aiЄ dom(Xi). Un N-uplet de constituanti poate fi considerat ca si un constituant compus.
O relatie N-ara R(X) se defineste prin trei elemente:
precizarea unui N-uplet de constituanti (X1, X2, ..., XN);
definirea domeniului pentru fiecare constituant Xi
definirea unui predicat logic care pentru orice N-uplet de date (a1, a2, ..., an) cu aiЄ dom(Xi) cu i de la 1 la N da o propozitie adevarata sau falsa.
Relatia R(X) este formata din ansamblul N-upletilor pentru care predicatul da propozitii adevarate.
Gradul unei relatii este dat de numarul atributelor ce formeaza relatia.
Principalele caracteristici ale unei relatii sunt:
N-upletii din relatie nu sunt ordonati.
Ordinea valorilor īn N-upleti este data de ordinea definirii atributelor īn modelul relatiei.
Valorile atributelor din N-upleti sunt atomice. Un atribut nu poate avea valori multiple. Sunt permise īn schimb valori nule.
Relatie poate fi privita ca o specificare a unui tip compus. Definitia tipului este data de structura relatiei.
O relatie este definita ca un set de N-upleti distincti (din acest punct de vedere corespunde tipului algebric multime).
Se numeste supercheie (SK) un grup de atribute care identifica īn mod unic un N-uplet al relatiei. Exista relatii care au o singura supercheie formata din toate atributele.
Se numeste cheie a relatiei R o supercheie minima, cu proprietatea ca, īnlocuind sau stergānd orice atribut din ea, se obtine un grup de atribute care nu este supercheie pentru relatia data. Multimea cheilor unei relatii formeaza cheile candidat din care trebuie aleasa o cheie primara.
Cheia primara (PK - primary key) este o cheie aleasa de administratorul bazei de date pentru a identifica īnregistrarile. De obicei pe acest post se alege o cheie cu un numar minim de atribute, daca este posibil chiar un singur atribut.
Se numeste cheie externa (FK - foreign key) un grup de atribute care constituie o cheie primara īntr-o alta relatie. O cheie externa ajuta la legarea datelor din cele doua relatii.
Pentru prelucrarea datelor din tabele teoria relationala defineste doua tipuri de operatori: operatori din teoria multimilor - UNION, INTERSECT, DIFERENCE, KHARTEZIAN PRODUCT, respectiv operatori specifici algebrei relationale: SELECT, PROJECT, UNION. Acesti operatori stau la baza limbajelor de interogare relationale, dintre care cel mai cunoscut este SQL.
2. Normalizarea unei baze de date relationale. Teoreme de normalizare.
Normalizarea unei baze de date consta īn principal īn descompunerea modelului bazei de date īn mai multe relatii (tabele) astfel īncāt sa se reduca la maxim redundanta datelor si implicit sa elimine anomaliile de actualizare. Operatia de normalizare se bazeaza pe dependentele functionale care exista īntre datele unei aplicatii.
O dependenta functionala, notata X→Y, īntre doua seturi de atribute a unei relatii R, specifica o constrāngere asupra N-upletilor posibili. Ea se defineste īn felul urmator:
V t1, t2 Є R, t1(X) = t2(X) => t1(Y) = t2(Y)
Se spune īn acest caz ca X determina functional pe Y sau ca Y este dependent functional de X..
Faptul ca X nu determina functional pe Z se va nota X | → Z.
Pentru determinarea dependentelor functionale se pot aplica urmatoarele reguli de inferenta (prin XY se noteaza concatenarea seturilor de atribute X si Y):
Regula reflexiva: XY => X→Y
Regula de marire: => XZ→Y
Regula tranzitiva: => X→Z
Regula de decompozitie: => X→Y
Regula de reuniune: => X→YZ
Regula pseudotranzitiva: => WX→Z
Normalizarea bazei de date presupune aducerea relatiilor gradual pe diverse forme normale conform unor teoreme de normalizare. Fiecare forma normala preia constrāngerile formei anterioare la care adauga noi conditii.
Forma normala 1 (1NF) cere:
domeniul atributelor sa cuprinda valori atomice; se interzic cāmpurile compuse sau "relatii īn relatie"
fiecare atribut din N-uplet trebuie sa aibe o singura valoare īn domeniu.
Forma normala 2 (2NF) cere:
relatia sa fie īn 1NF
orice atribut neprim (care nu face parte din cheia primara) din R sa fie complet dependent functional de cheia primara a relatiei.
O alta varianta: se cere sa nu existe atribute care sa depinda numai de o parte a cheii primare.
Forma normala 3 (3NF) cere:
relatia sa fie īn 2NF
nu exista nici un atribut neprim care sa fie dependent tranzitiv de cheia primara a relatiei
Varianta: nu se permit atribute care nu fac parte din cheile candidat ale relatiei si care determina alte atribute.
Se poate da si o definitie generalizata pentru forma 3NF. Orice atribut al relatiei īndeplineste:
este complet dependent functional de orice cheie din R;
este dependent netranzitiv de orice cheie din R.
O varianta mai restrictiva este BCNF - Boyce Codd Normal Form. O relatie este īn BCNF daca, pentru orice dependenta X→Y din R, X este o cheie candidat a lui R.
Aducerea unei baze de date pe o forma normala superioara presupune extragerea unor atribute din relatiile existente si crearea pe baza lor a unor noi relatii astfel īncāt rezultatul sa respecte forma normala īn cauza. Acest lucru duce la fragmentarea bazei de date dar elimina din anomaliile de actualizare si reduce spatiul pierdut datorita redundantei datelor.
3. Proiectarea unei baze de date.
Concret, pasii care trebuie facuti la proiectarea unei baze de date relationale sunt urmatorii:
Analiza aplicatiei: analiza circuitului informational, studierea intrarilor si iesirilor, stabilirea claselor de utilizatori;
Analiza semanticii atributelor din entitati: identificarea atributelor si a sensului lor functional, gruparea atributelor īn relatii pe entitati, stabilirea cheilor primare si externe;
Normalizarea relatiilor obtinute la punctul anterior: micsorarea redundantei prin gruparea atributelor īn relatii conform definitiilor pentru formele normale, stabilirea de constrāngeri pentru eliminarea anomaliilor de actualizare;
Scoaterea din relatiile principale a atributelor care au peste 70% valori nule.
Observatie: Daca se opteaza pe o metoda de tip rapid prototyping acesti pasi vor fi repetati īn mod iterativ pe parcursul procesului de dezvoltare.
Cap. 3. Tabele Microsoft Access. Tipuri de date.
1. Crearea unei tabele.
Crearea unei tabele noi se face din gestionarul de proiecte de la intrarea Create table in Design view.
2. Tipuri de date si proprietatile acestora.
A. Tip TEXT (max. 255 caractere). sir de caractere. Proprietati:
Filed Size - numar maxim de caractere
Format - format la afisarea datelor
Input Mask - format la citirea datelor
Caption - text eticheta asociata cāmpului
Default Value - valoare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Alow Zero Length - permite siruri vide
Indexed - specifica crearea unui index pentru acest cāmp
Unicode Compression - asigura codare UNICODE
Lookup Display Control - specifica tipul elementului de tip control utilizat la afisare
B. Tip MEMO (max. 65.535 caractere). Text lung. Proprietati:
Format - format la afisarea datelor
Caption - text eticheta asociata
Def ault Value - valoare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Alow Zero Length - permite siruri vide
Unicode Compression - asigura codare UNICODE
C. Tip Number (numere pe 1, 2, 4, 8 sau 12 biti). Numere īntregi sau zecimale. Proprietati:
Filed Size - dimensiune cāmp:
a. Byte - interval
b. Decimal - interval [±1028-l]
c. Integer - interval [±32.767]
d. Long Integer - interval [± 2,147,483,648]
e. Single - interval [±3.40282338]
f. Double - interval [±1.79769313486231308]
g. Replication ID - identificator unic global
Format - format la afisarea datelor
Decimal Places - numar de zecimale acceptat
Input Mask - format la citirea datelor
Caption - text eticheta asociata
Def ault Value - valoare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Indexed - specifica crearea unui index pentru acest cāmp
Lookup - Display Control - specifica tipul elementului de tip control utilizat la afisare
D. Tip "Date/Time" (data - an pe 4 pozitii). Data calendaristica, moment orar sau ambele.
Format - format la afisarea datelor
Input Mask - format la citirea datelor
Caption - denumire eticheta asociata
Def ault Value - valuare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Indexed - specifica crearea unui index pentru acest cāmp
E. Tip Currency (suma de bani īn precizie 15 cifre + 4 zecimale). Proprietati:
Format - format la afisarea datelor
Decimal Places - numar de zecimale acceptat
Input Mask - format la citirea datelor
Caption - text eticheta asociata
Def ault Value - valoare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Indexed - specifica crearea unui index pentru acest cāmp
F. Tip Auto Number (index generat automat). Proprietati:
Filed Size - dimensiune cāmp:
a. Long Integer - interval [ 0.. 4,294,967,296]
b. Replication ID - numar pe 16 octeti
New Values - metoda de generare: incrementala sau aleatoare
Format - format la afisarea datelor
Caption - text eticheta asociata
Indexed - specifica crearea unui index pentru acest cāmp
G. Tip Yes/No (valoare logica). Adevarat / Fals. Proprietati:
Format - format Yes/No, True/False, On/Off
Caption - text eticheta asociata
Def ault Value - valoare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Indexed - specifica crearea unui index pentru acest cāmp
H. Tip OLE Object (obiect OLE). Referinta spre un obiect al unei alte aplicatii (ex: document Word, imagine BMP etc). Propiretati:
Caption - text eticheta asociata
Required - este obligatorie introducerea unei valori pentru acest cāmp
I. Tip Hyperlink (adresa URL). Adresa Web. Proprietati:
Format - format la afisarea datelor
Caption - text eticheta asociata
Def ault Value - valoare implicita
Validation Rule - conditie de validare intrare
Validation Text - mesaj la citire date eronate
Required - este obligatorie introducerea unei valori pentru acest cāmp
Alow Zero Length - permite siruri vide
Indexed - specifica crearea unui index pentru acest cāmp
J. Tip Lookup wizard (cāmp de selctie relationala). Valoare asociata din alta tabela. Permite alegerea unei valori dintr-o lista de valori fixe sau obtinute din cāmpurile altei tabele. Se aplica pentru tipurile Text, Number si Yes/No.
3. Formate de afisare si introducere.
Proprietatea Format poate contine un sir de caractere cu semnificatia de masca de afisare. Aceasta poate forta de exemplu afisarea textelor cu o anumita combinatie de litere mari si mici sau a numerelor cu o anumita dispunere a virgulei zecimale. sirul Format poate contine caractere de control si caractere obisnuite. Caracterele vor masca caracterele din cāmp, pe cānd restul caracterelor vor fi afisate ca atare (se vor adauga fortat caracterelor din cāmp). īn acest sens se pot folosi urmatoarele caractere de control:
Pentru tipul text si memo:
Exemple:
- afiseaza numarul 0256444555 sub forma 0256-444555
@;"Date inexistente" - afiseaza sirul nemodificat daca contine cel putin un caracter; afiseaza mesajul "Date inexistente" daca sirul este vid sau nu a fost introdus.
Pentru tipul number:
Exemple:
$#,##0.00[Green];($#,##0.00)[Red];"Zero";"Necompletat" va afisa numarul 100 īn verde sub forma "$100.00", numarul -150 īn rosu sub forma "$150.00" numarul 0 sub forma "Zero" iar un cāmp necompletat sub forma "Necompletat".
Pentru tipul Yes/No:
Exemplu:
;"Da";"Nu" va afisa "Da" pentru valoarea Yes si "Nu" pentru valoarea No.
Pentru tipul Date/Time:
Exemplu:
ddd", "mmm d", "yyyy va fi afisat sub forma: Mon, Jun 2,1997
"Today is "dddd va afisa Today is Tuesday (limba depinde de setarea Windows - Regional Settings).
4. Stabilirea cheii primare (PK) si salvarea tabelei.
Pentru stabilirea cheii primare se va da un click dreapta de mouse peste marcajul cāmpului dorit si se alege intrarea din meniul aferent.
Salvarea tabelei se va face de la intrarea de meniu File/Save as. La salvare se va stabili de preferinta un nume sugestiv pentru datele retinute, dar nu foarte lung.
Observatie: Pentru a se permite salvarea tabelei trebuie stabilita īn prealabil cheia primara a acesteia.
Cap. 4. Relatii. Interogari. Metoda QBE.
1. Crearea unei relatii.
Crearea relatiilor īntre tabele se poate realiza apelānd la intrarea de meniu Tools -Relationships. Pentru a adauga tabele īn fereastra de relatii se va selecta Relationships - Show Table. (a).
a) b)
Relatiile se vor crea prin tragerea cu mouse-ul a cheii primare din tabela secundara peste cheia externa din tabela principala. Concordanta cāmpurilor se va verifica īn fereastra de editare a relatiilor (b).
Pentru a asigura integritatea referentiala a bazei de date, se va marca obligatoriu, la fiecare relatie creata, optiunea Enforce Referential Integrity. De asemenea, o optiune utila īn cele mai multe situatii este cea de actualizare automata a cāmpurilor relationate (Cascade Update Related Fields).
2. Interogari. QBE.
Interogarile permit filtrarea si ordonarea datelor din tabele precum si reunirea datelor din mai multe tabele, respectiv calcularea unor noi informatii.
Pentru crearea unei interogari, sistemul Access pune la dispozitie doua limbaje cu proprietati diferite. Primul, numit QBE - Query by Example - este un limbaj vizual al carui principal avantaj este simplitatea. Al doilea limbaj, SQL - Structured Query Language - este un limbaj declarativ care, desi contine relativ putine cuvinte cheie, permite exprimarea unor interogari mult mai elaborate decāt QBE.
Interogarile pot fi clasificate īn functie de actiunea realizata īn:
Interogari de selectie
Interogari de actualizare
Interogari de stergere
Interogari de creare sau insertie
Īn acest capitol vor fi prezentate doar interogarile de selectie. Din punct de vedere al operatiilor implicate de interogari, putem distinge īntre: proiectie, sortarea, filtrarea (selectia), reuniunea (JOIN), gruparea si sumarizarea.
2.1. Operatia de proiectie
Operatia de proiectie presupune excluderea din rezultat a coloanelor care nu sunt relevante īn contextul interogarii. Aceasta excludere se realizeaza prin ne-includerea lor īn macheta de proiectie.
2.2. Operatia de sortare
Operatia de sortare presupune ordonarea rezultatului functie de unul sau mai multe criterii. Īn cazul īn care sunt mai multe criterii, primul criteriu va fi cel dominant, restul fiind considerate īn mod ierarhic, īn ordinea īn care apar.
2.3. Operatia de selectie
Operatia de filtrare (selectie) presupune excluderea din rezultat a īnregistrarilor care nu īndeplinesc diverse criterii exprimate prin conditii (expresii) logice.
2.4. Operatia de JOIN
Operatia de reuniune (JOIN) consta īn reunirea datelor aflate īn diferite tabele īntre care exista stabilite relatii.
2.5. Operatia de grupare si sumarizare
Operatia de grupare si sumarizare presupune īmpartirea īnregistrarilor īn grupuri si extragerea informatiilor la nivelul fiecarui grup īn parte. Pentru a avea acces la linia Total se va marca optiunea Totals din meniul View.
Optiunile de sumarizare sunt: Group by, Sum, Avg, Min, Max, Count, StDev, Var, First, Last, Expression, Where.
Cap. 5. Interogari SQL.
1. Limbajul SQL.
Limbajul SQL - Structured Query Language - este un limbaj declarativ care, desi contine relativ putine cuvinte cheie, permite exprimarea unor interogari foarte complexe pe o baza de date.
Īn cazul limbajelor declarative, programatorul va descrie algoritmul de rezolvat īn loc sa implementeze algoritmul de rezolvare. Īn acest caz sistemul va cauta algoritmul de rezolvare, problemele fiind legate de respectarea sintaxei limbajului la descrierea problemei.
Limbajul SQL permite atāt crearea entitatilor specifice unei baze de date (ex. tabele, indecsi, utilizatori etc.) cāt si editarea si regasirea īnregistrarilor din aceasta, īn acest capitol vor fi prezentate doar interogarile de selectie.
Din punct de vedere al operatiilor implicate de interogari, putem distinge īntre: proiectie, sortarea, filtrarea (selectia), reuniunea (JOIN), gruparea si sumarizarea.
1.1. Operatia de proiectie
Operatia de proiectie presupune excluderea din rezultat a coloanelor care nu sunt relevante īn contextul interogarii. Aceasta excludere se realizeaza prin ne-includerea lor īn lista de proiectie.
Sintaxa instructiunii SQL care realizeaza proiectia unei tabele este:
SELECT lista_proiectie
FROM tabela;
Lista de proiectie va cuprinde specificarea cāmpurilor din tabela, despartite prin virgula. Ordinea de aparitie a acestora va determina ordinea cāmpurilor īn rezultat. Prin proiectie se reduce īn general numarul de coloane dar nu este afectat numarul de īnregistrari.
Proiectia 1:1 se poate realiza īnlocuind lista de proiectie cu caracterul *, caz īn care toate coloanele vor fi proiectate īn ordinea īn care ele apar īn tabela.
Daca se doreste, prin proiectie pot fi redenumite si cāmpurile din tabela. Sintaxa listei de proiectie va fi īn acest caz:
nume_cāmp1 AS nume_nou1, nume_cāmp2 AS nume_nou2,...
Exemplu:
SELECT cods AS CodStudent, nume AS NumeStudent
FROM Studenti;
1.2. Operatia de sortare
Operatia de sortare presupune ordonarea rezultatului functie de unul sau mai multe criterii.
Īn cazul īn care sunt mai multe criterii, primul criteriu va fi cel dominant, restul fiind considerate īn mod ierarhic, īn ordinea īn care apar īn lista.
Sintaxa instructiunii SQL care realizeaza ordonarea rezultatului este:
SELECT lista_proiectie
FROM tabela
ORDER BY lista_ordonare;
Lista de ordonare va cuprinde specificarea unor cāmpuri din tabela sau expresii īn care acestea intervin, despartite prin virgula.
Implicit sortarea se face īn sens crescator (ascendent). Pentru a sorta īn mod descrescator (descendent) se va utiliza marcajul DESC dupa pozitia dorita.
Exemplu:
SELECT *
FROM Studenti
ORDER BY Nume, Medie DESC, DataN
Va ordona studentii crescator dupa nume, la nume egale descrescator dupa medie, iar si la medii egale crescator dupa data nasterii.
1.3. Operatia de selectie
Operatia de filtrare (selectie) presupune excluderea din rezultat a īnregistrarilor care nu īndeplinesc diverse criterii exprimate prin conditii (expresii) logice.
Sintaxa instructiunii SQL care realizeaza selectia īnregistrarilor este:
SELECT lista_proiectie
FROM tabela
WHERE conditie_selectie;
Īn rezultat vor fi incluse doar īnregistrarile pentru care conditie_selectie este adevarata. Conditia de selectie este o expresie logica care combina operatori, valori si cāmpuri. Ca si elementele de legatura se pot utiliza operatorii AND (sI logic) sau OR (SAU logic).
Prin selectie se pastreaza numarul de coloane dar numarul de īnregistrari din rezultat este de obicei mai mic decāt īn tabela originala.
Pentru a īnlatura duplicatele din rezultat se poate utiliza optiunea DISTINCT:
SELECT DISTINCT lista_proiectie
FROM tabela
WHERE conditie_selectie;
Exemplu:
SELECT cods, nume FROM Student WHERE nume = "Popescu";
Cap. 6. Operatori. Functii de biblioteca.
1. Functii pe siruri de caractere
l.a. Concatenarea sirurilor. Operatorul "&".
Sintaxa: sirl & sir2 & sir3 & ...
Exemplu: [Oras] & " " & [Judet] & " - " & [CodPostal]
l.b. Extragerea prefixului unui sir. Functia "Left".
Sintaxa: Left(sir, lungime)
Exemplu: Left("Popescu", 3) = "Pop"
l.c. Extragerea sufixului unui sir. Functia "Right".
Sintaxa: Right (sir, lungime)
Exemplu: Right ("Popescu", 4) = "escu"
l.d. Extragerea mijlocului unui sir. Functia "Mid".
Sintaxa: Mid(sir, start, lungime)
Exemplu: Mid ("Popeseu", 4, 3) = "esc"
l.e. stergerea spatiilor de īnceput si sfārsit de sir. Functia "Trim
Sintaxa: Trim (sir)
Exemplu: Trim(" Popescu ") = "Popescu"
l.f. Cautarea unui subsir īntr-un sir. Functia "InStr".
Sintaxa: InStr([start,] sir, subsir [, tipComparatie])
Exemplu: lnStr("Popeseu", "op") = 2
Observatii:
daca subsirul nu se gaseste īn sir se va returna 0.
daca parametru start este prezent, cautarea va īncepe de pe pozitia respectiva.
tipComparatie poate lua valorile:
vbBinaryCompare - comparatia se va face binar (ASCII, 'A'<>'a').
vbTextCompare - comparatia se va face textual ('A'='a').
daca subsirul este gasit se va returna pozitia de īnceput a lui īn sir.
l.g. Transformarea tuturor literelor sirului īn litere mici. Functia "LCase".
Sintaxa: LCase (str)
Exemplu: LCase ("PopESCU 23.") = "popescu 23."
l.h. Transformarea tuturor literelor sirului īn litere mari. Functia "UCase".
Sintaxa: UCase (str)
Exemplu: UCase ("PopESCU 23.") = "POPESCU 23."
l.i. Aflarea lungimii unui sir. Functia "Len".
Sintaxa: Len (str)
Exemplu: Len ("Popescu") = 7
l.j. Obtinerea unui sir format din spatii. Functia "Space".
Sintaxa: Space (nr)
Exemplu: Space (3) = "
l.k. Compararea sirurilor. Functia "StrComp".
Sintaxa: StrComp(sirl, sir2 [, tipComparatie])
Exemplu: StrComp ("Popeseu", "Vasilescu") = -l
Observatii:
daca sirl < sir2 se va returna -1.
daca sirl = sir2 se va returna 0.
daca sirl > sir2 se va returna 1.
tipComparatie poate lua valorile:
vbBinaryCompare - comparatia se va face binar (ASCII, 'A'<>'a').
vbTextCompare - comparatia se va face textual ('A'='a').
2. Functii pentru date calendaristice si timp
2.a. Testarea unui interval. Operatorul "between".
Sintaxa: data between data1 and data2
Exemplu: (#2-06-1998* between #1-01-1990* and #l-01-2000#) = true
2.b. Obtinerea datei curente a sistemului. Functiile "Date" si "Now".
Sintaxa: Date () respectiv Now ()
Exemplu: (#2-06-1998* between #1-01-1990* and Now()) = true
2.c. Obtinerea intervalului dintre doua date. Functia "DateDiff".
Sintaxa: DateDiff(specificarelnterval, datai, data2)
Exemplu: DateDiff ("d", #ll-01-2004#, #ll-20-2004#) = 19
Observatii:
Parametrul specificarelnterval va determina modul īn care se calculeaza diferenta:
2.d. Extragerea anului. Functia "Year".
Sintaxa: Year (data)
Exemplu: Year(#2-0 6-1998#) = 1998
2.e. Extragerea lunii. Functia "Month".
Sintaxa: Month (data)
Exemplu: Month(#2-06-1998#) = 2
2.f. Extragerea zilei. Functia "Day".
Sintaxa: Day (data)
Exemplu: Day(#2-O6-1998#) = 6
2.g. Extragerea zilei din saptamāna. Functia "Weekday".
Sintaxa: Weekday (data)
Exemplu: Weekday(#1-01-2004#) = 5 (ziua de joi)
Observatie: Se considera ca prima zi din saptamāna este duminica.
2.h. Obtinerea orei curente a sistemului. Functia "Time".
Sintaxa: Time ()
Exemplu: Time () = 10:37:16 AM
3. Functii numerice
3.a. Valoarea absoluta a unui numar. Functia "abs".
Sintaxa: abs(nr)
Exemplu: abs (-4) = 4
3.b. Cosinusul, sinusul si tangenta unui unghi. Functiile "cos", "sin" si "tan
Sintaxa: cos(unghi), sin(unghi), tan(unghi)
Exemplu: cos (3.1415926535897932) = -l
3.c. Logaritm natural. Functia "log".
Sintaxa: log(nr)
Exemplu: log
3.d. Radical de ordinul 2. Functia "sqr".
Sintaxa: sqr(nr)
Exemplu: sqr (9) =3
4. Functii de conversie
4.a. Conversie sir de caractere īn data calendaristica. Functia "DateValue".
Sintaxa: DateValue(sir)
Exemplu: DateValue ("February 12, 1969") = #2-12-1969*
4.b. Conversie unui numar real la un numar īntreg. Functia "Int".
Sintaxa: int(nr)
Exemplu: int(4.6869) = 4
4.c. Conversie unui numar la un sir. Functia "Str".
Sintaxa: str(nr)
Exemplu: Str (4.6869) = " 4.6869" (spatiul este rezervat pt. semnul +)
4.d. Conversie unui sir la un numar. Functia "Val".
Sintaxa: Val (sir)
Exemplu: Val ("-4.6869 de unitati") = -4.6869
4.e. Conversia conditionala. Functia "IIF".
Sintaxa: ii£(conditie, valoareAdevarata, valoareFalsa)
Exemplu: iif( [bursa] >0, "Bursier", "Nebursier")
5. Operatori logici
5.a. si logic. Operatorul "And".
Sintaxa: expl And exp2
Exemplu: true And false = false
5.b. Sau logic. Operatorul "Or".
Sintaxa: exp1 Or exp2
Exemplu: true Or false = true
5.c. Nu logic. Operatorul "Not".
Sintaxa: Not exp
Exemplu: Not false = true
6. Operatori relationali
6.a. Operatori relationali pentru testarea inegalitatii.
Sintaxa: expl Op exp2, Op poate fi <, >, <=, >=, <>
Exemplu: 5 < 9 = true
6.b. Operatorul relational pentru testarea egalitatii.
Sintaxa: expl = exp2
Exemplu: (7-5) = 2 = true
6.c. Operatori de comparatie. Operatorul "like".
Sintaxa: sir like tipar
Exemplu: "Popeseu" like "P*" = true
Observatii:
Tiparul de comparare poate cuprinde urmatoarele caractere speciale:
Cap. 7. Interogari SQL avansate.
7.1. Operatia de JOIN
Operatia de reuniune (JOIN) are ca scop principal reunirea datelor aflate īn diferite tabele īntre care exista stabilite relatii.
O operatie de JOIN va uni tot timpul o cheie externa a unei tabele cu cheia primara din tabela asociata.
Operatia de JOIN poate fi privita ca un produs cartezian peste care se aplica apoi o selectie corespunzatoare conditiei de JOIN.
Din punct de vedere al rezultatului obtinut se pot distinge urmatoarele tipuri de JOIN:
INNER JOIN - rezultatul va include doar perechi de īnregistrari care au corespondenta īn ambele tabele
LEFT OUTER JOIN - rezultatul va include si īnregistrarile din tabela stānga care nu au corespondent in tabela din partea dreapta a relatiei. Cāmpurile care lipsesc din tabela corespondenta se vor completa automat cu valoarea NULL
RIGHT OUTER JOIN - va include īn rezultat si īnregistrarile din tabela din dreapta care nu au corespondent īn tabela din partea stānga.
1. INNER JOIN
Pentru operatia de INNER JOIN, limbajul SQL pune la dispozitie doua sintaxe diferite:
A) SELECT lista_proiectie
FROM tabelaL, tabelaR
WHERE (tabelaL.cheiePrimara = tabelaR.cheieExterna)
AND conditii_supilmentare_de_selectie
Sintaxa permite specificarea unui produs cartezian explicit urmat de o selectie bazata pe conditia de JOIN restrictionata eventual cu alte conditii suplimentare impuse de problema. Atentie: daca se omite conditia de JOIN din clauza WHERE (sau daca aceasta este incorecta), rezultatul va fi de obicei un produs cartezian.
B) SELECT lista_proiectie
FROM tabelaL INNER JOIN tabelaR
ON tabelaL. cheiePrimara = tabelaR. cheieExterna
WHERE conditii_supilmentare_de_selectie
Sintaxa aceasta are avantajul departajarii clare a conditiei de JOIN.
2. RIGHT OUTER JOIN
RIGHT OUTER JOIN (prescurtat RIGHT JOIN) va include īn rezultat īnregistrarile comune plus īnregistrarile din tabela din dreapta care nu au corespondent īn tabela din partea stānga. Cāmpurile care lipsesc din tabela corespondenta se vor completa automat cu valoarea NULL.
Sintaxa SQL pentru RIGHT OUTER JOIN este:
SELECT lista_proiectie
FROM tabelaL RIGHT OUTER JOIN tabelaR
ON tabelaL. cheiePrimara = tabelaR. cheieExterna
WHERE conditii_supilmentare_de_selectie
3. LEFT OUTER JOIN
LEFT OUTER JOIN (prescurtat LEFT JOIN) va include īn rezultat īnregistrarile comune plus īnregistrarile din tabela din stānga care nu au corespondent īn tabela din partea dreapta. Cāmpurile care lipsesc din tabela corespondenta se vor completa automat cu valoarea NULL.
Sintaxa SQL pentru LEFT OUTER JOIN este:
SELECT lista_proiectie
FROM tabelaL LEFT OUTER JOIN tabelaR
ON tabelaL. cheiePrimara = tabelaR. cheieExterna
WHERE conditii_supilmentare_de_selectie
4. Aliasuri pentru nume de tabele.
Datorita necesitatii repetarii numelui tabelei ca prefix pentru cāmpurile care apar īn lista de proiectie, conditiile de selectie, listele de ordonare etc, limbajul SQL permite crearea unor aliasuri (porecle) mai scurte pentru desemnarea acestora:
SELECT listajproiectie
FROM tabelaL AS TL, tabelaR AS TR
WHERE (TL.cheiePrimara = TR.cheieExterna)
AND conditii_supilmentare_de_selectie
sau
SELECT lista_proiectie
FROM tabelaL AS TL INNER JOIN tabelaR AS TR
ON TL.cheiePrimara = TR.cheieExterna
WHEKE conditii_supilmentare_de_selectie
Exemplu:
SELECT S.Nume, F.Denumire
FROM Facultati AS F INNER JOIN Studenti AS S ON F.CodF = S.CodF
WHERE (((S.Nume)>='H')) ORDER BY S.Nume;
5. Specificarea tipului de JOIN in QBE:
Se poate realiza din meniul context JoinProperties pentru o relatie.
Cap. 8. Interogari SQL avansate (II).
1. Gruparea īnregistrarilor.
Gruparea īnregistrarilor se realizeaza īn scopul extragerii unor informatii globale despre īnregistrarile din fiecare grup.
Pentru gruparea īnregistrarilor se va utiliza clauza GROUP BY urmata de criteriile de grupare, despartite prin virgula.
Īn cazul gruparii, lista de proiectie va putea cuprinde doar cāmpurile din lista criteriilor de grupare sau functii de sumarizare. Rezultatul operatiei de grupare va contine un numar de īnregistrari corespunzator cu numarul de grupuri rezultate, respectiv cāte o īnregistrare pentru fiecare grup.
Īn cazul īn care lista de proiectie va cuprinde una sau mai multe functii de sumarizare īn lipsa clauzei GROUP BY, implicit se considera ca toate īnregistrarile apartin aceluiasi grup, sumarizarea producānd o singura īnregistrare īn rezultat. īn acest caz, lista de proiectie nu va contine decāt functii de sumarizare.
2. Functii de sumarizare.
Functiile de sumarizare vor calcula o valoare corespunzatoare valorilor īnregitrarilor din fiecare grup rezultat īn urma gruparii. Ele sunt prezentate īn lista urmatoare:
Sintaxa SQL pentru operatia de grupare si sumarizare este:
SELECT lista_proiectie
FROM lista_tabele
WHERE conditii_selectie
GROUP BY expresii_grupare
Considerānd o tabela de studenti care cuprinde cāmpurile Cods, Nume, Prenume, CodFacultate, An, DataNasterii si Bursa, un exemplu de interogare de grupare si sumarizare este:
SELECT CodFacultate, An, Avg(Bursa) as BursaMedie,
Sum(Bursa) As SumaBurselor, Min(DataNasterii) as DNCelMaiMare
FROM Studenti
GROUP BY CodFacultate, An;
Aceasta interogare va produce cāte o īnregistrare pentru fiecare pereche distincta CodFacultate-An cuprinzānd informatiile de sumarizare respective.
3. Filtrarea grupurilor. Clauza HAVING.
Sunt cazuri īn care nu toate grupurile rezuntate din operatia de grupare sunt necesare īn rezultat. īn aceste situatii ele pot fi excluse din rezultate folosind clauza HAVING.
Clauza HAVING poate fi folosita doar īn conjunctie cu operatia de grupare.
Sintaxa clauzei HAVING permite specificarea unei conditii de filtrare a grupurilor care nu sunt necerare. Toate grupurile care nu indeplinesc conditia vor fi excluse din rezultat. Conditia din HAVING trebuie sa refere doar expresii existente īn clauza de grupare.
SELECT lista_proiectie
FROM lista_tabele
WHERE conditii_selectie
GROUP BY expresii_grupare
HAVING conditie_includere_grup;
4. Interogari de grupare si sumarizare īn QBE.
Īn QBE interogarile de sumarizare sunt cunoscute sub numele de interogari de tip TOTALS. Pentru a creea o astfel de interogare se va marca optiunea Totals din meniul View. Linia Total va specifica expresia de gruapre sau functia de sumarizare aplicata coloanei respective.
Cap. 9. Interogari active.
1. Interogari pentru crearea de tabele (Make-Table Queries).
Īn mod uzual datele rezultate dintr-o interogare sunt folosite pentru consultare imediata. Sunt īnsa si situatii cānd aceste date trebuie pastrate īntr-o tabela. Pentru a realiza acest lucru se va crea o interogare de tip Make-Table care va avea ca rezultat la rulare crearea unei noi tabele avānd cāmpurile selectate īn interogare.
O tabela creata printr-o astfel de interogare poate pastra atāt valori din cāmpuri existente īn tabelele de origine cāt si cāmpuri calculate. Pentru valorile calculate se va crea un cāmp avānd tipul dat de tipul expresiei de calcul.
Pentru tabela creata īn acest mod trebuie setata, ulterior, cheia primara.
Pentru a crea o interogare de tip Make-Table se va crea īn prealabil o interogare de selectie. Prin rularea acestei interogari se verifica rezultatul obtinut. Dupa validarea acestuia se va apela optiunea Make-Table Query din meniul Query. La transformarea unei interogari de selectie īntr-o interogare de tip Make-Table se va preciza numele tabelei noi ce va fi creata la rulare.
La fiecare rulare a interogarii tabela se va crea peste tabela existenta, datele vechi (de la rularea anterioara) fiind pierdute.
2. Interogari de actualizare (Update Queries).
Acest tip de interogare este folosit pentru a modifica datele din una sau mai multe īnregistrari ale unei tabele.
Pentru o interogare de actualizare se vor specifica cāmpurile care vor fi actualizate si respectiv conditiile de selectie a īnregistrarilor care se vor actualiza. Specificarea conditiilor se va face īn cāmpul Criteria. Daca nu se specifica nici o conditie, se vor actualiza toate īnregistrarile din tabela.
Pentru a crea o interogare de tip actualizare se va crea īn prealabil o interogare de selectie. Prin rularea acestei interogari se verifica rezultatul obtinut, el indicānd daca conditiile de selectie a īnregistrarilor de modificat sunt corecte sau nu. Dupa validarea acestora se va apela optiunea Update Query din meniul Query. Dupa transformare va fi disponibila o noua bara īn fereastra de editare a interogarii purtānd eticheta Update To. Aici se vor specifica noile valori ale cāmpurilor de modificat. Acestea pot fi valori constante sau pot fi expresii de calcul. O expresie poate referi prin numele cāmpului valoarea anterioara actualizarii din acel cāmp.
La rularea unei astfel de interogari se va cere confirmarea actualizarii cu precizarea numarului de īnregistrari afectate.
3. Interogari de adaugare date (Append Queries).
Acest tip de interogare se poate utiliza pentru a adauga īnregistrari preluate din alte tabele sau interogari. De asemenea se poate utiliza pentru a copia īnregistrari īn alta baza de date.
O interogare de tip actualizare are una sau mai multe tabele sursa (de unde se preiau datele de copiat) si o singura tabela destinatie. Tabela destinatie se specifica doar īn momentul īn care interogarea este transformata īntr-una de adaugare.
Pentru o interogare de adaugare se vor specifica cāmpurile care vor fi copiate si respectiv conditiile de selectie a īnregistrarilor care se vor copia. Specificarea conditiilor se va face īn cāmpul Criteria. Daca nu se specifica nici o conditie, se vor copia toate īnregistrarile din tabela sursa. Valorile copiate īn tabela destinatie pot fi identice cu cele din tabelele sursa sau pot fi calculate prin expresii.
Pentru a crea o interogare de tip adaugare se va crea īn prealabil o interogare de selectie. Prin rularea acestei interogari se verifica rezultatul obtinut, el indicānd daca conditiile de selectie a īnregistrarilor care trebuie copiate sunt corecte sau nu. Dupa validarea acestora se va apela optiunea Append Query din meniul Query. Dupa transformare va fi disponibila o noua bara īn fereastra de editare a interogarii purtānd eticheta Append To. Aici se vor specifica cāmpurile destinatie īn care se va realiza copierea. Sistemul īncearca sa completeze automat aceste coloane bazat pe denumiri identice sau foarte apropiate īn cele doua tabele. Pentru atributele al caror nume nu se potrivesc, respectiv pentru cāmpurile calculate prin expresii, corespondenta trebuie facuta manual.
4. Interogari de stergere date (Delete Queries).
Acest tip de interogare se poate utiliza pentru a sterge īnregistrari care nu mai sunt utile.
Pentru a selecta īnregistrarile care se vor sterge este necesar sa se specifice conditii de selectie. Specificarea conditiilor se va face īn cāmpul Criteria. Daca nu se specifica nici o conditie, se vor sterge toate īnregistrarile din tabela.
Atentie: īnregistrarile sterse nu mai pot fi recuperate!
Pentru a crea o interogare de tip stergere de date se va crea īn prealabil o interogare de selectie. Prin rularea acestei interogari se verifica rezultatul obtinut, el indicānd daca conditiile de selectie a īnregistrarilor care trebuie sterse sunt corecte sau nu. Dupa validarea acestora se va apela optiunea Delete Query din meniul Query.
Daca tabela din care sunt sterse īnregistrari are coloane referite din alte tabele, sistemul va detecta automat necesitatea stergerii acestora doar īn cazul īn care relatia dintre tabele are marcata optiunea Enforce Referential Integrity, respectiv Cascade Delete Related Records.
5. Interogari active īn sintaxa SQL.
Interogare de tip Make-Table:
SELECT Studenti.Matricola, Studenti.Nume INTO StudAnl
FROM Studenti
WHERE (Studenti.An = 1);
Interogare de tip Update:
UPDATE Studenti
SET Studenti.Bursa = Studenti.Bursa+100000
WHERE (((Studenti.An)=1));
Interogare de tip Append:
INSERT INTO StudAnl
SELECT FROM Studenti
WHERE (Studenti.An = 1);
Interogare de tip Delete:
DELETE FROM Studenti
WHERE ( (Bursa>0 AND Bursa<1000000)
AND (Studenti.An =1) );
Cap. 10. Formulare. Importul si exportul datelor.
1. Formulare Access.
Formularele reprezinta o posibilitate de vizualizare a datelor apropiate de utilizatorul uman. Ele permit formatarea fina a iesirii si un control asupra intrarii de date, inclusiv o validare stricta a acesteia. Formularele pot avea ca si sursa de date fie direct tabele, fie interogari.
2. Crearea formularelor.
Pentru crearea unui formular se poate folosi fie o metoda automata (Wizard), fie o proiectare directa (Design).
3. Elementele constituente ale unui formular.
4. Uneltele din Fereastra de unelte.
a) Label - eticheta pentru afisare text fix.
b) Text Box - cāmp de editare text.
c) Group Option - grup de optiuni pentru casute de marcaj, butoane radio etc.
d) Toggle Button - buton basculant pentru īnregistrarea unei stari.
e) Option Button - buton tip radio pentru marcarea unor optiuni cu excludere mutuala.
f) Check Box - casuta de marcaj pentru marcarea unei stari.
g) Combo Box - lista derulanta de valori,
h) List Box - lista de valori.
i) Command Button - buton de comanda pentru executia de cod.
j) Image - control pentru afisarea unei imagini.
k) (Un)Bond Object Frame - cadru pentru afisarea unui obiect OLE.
l) Tab Control - control pentru paginarea ferestrei.
m) Subform - control pentru crearea unui sub-formular īn interiorul formularului curent,
n) Line - linie de decorare,
o) Rectangle - dreptunghi de decorare.
5. Importul datelor din surse externe
In multe situatii este necesar importul datelor din alte aplicatii. Acestea pot fi:
Datele pot fi importate sau se pot crea legaturi catre acestea. īn cazul īn care se opteaza pentru legaturi, datele se pastreaza īn fisierele originale si pot fi prelucrate atāt din Ms Access cāt si din aplicatia originala.
Importul datelor din alta baza de date Ms Access. Tabelele existente īn alte baze de date Access pot fi importate sau legate. Aceste operatii pot fi realizate utilizānd meniul File - Get Externai Data si optiunile Import respectiv Link Table. Observatie: Optiunea Import permite importul tabelelor dar si al interogarilor, formularelor, rapoartelor sau modulelor de cod. Optiunea Link permite doar legarea unei tabele.
Importul datelor din Ms Excel. Pentru un import eficient din Excel intr-o baza de date Access este de dorit denumirea coloanelor foii din Excel pe prima linie importata din foaie. O foaie de calcul poate fi importata īntr-o tabela existenta sau īntr-o tabela noua, care se va fi creata īn timpul operatiei de import. Importul efectiv se face tot din meniul File - Get Externai Data.
Importul datelor dintr-un fisier text. Pentru un import corect al datelor stocate īntr-un fisier text este necesar ca acesta sa respecte o conventie clara cu privire la delimitarea cāmpurilor. De asemenea este de dorit ca informatia de tip text sa fie cuprinsa īntre ghilimele. Delimitarea cāmpurilor se poate face fie printr-un semn special (virgula, tab, spatiu etc.) fie punānd toate cāmpurile de dimensiune egala. La import, numele atributelor se pot lua de pe prima linie din fisier sau se pot specifica direct īn fereastra de import. De asemenea se pot modifica tipul de date (se detecteaza automat) si daca se face sau nu indexarea dupa acel cāmp. īn īncheiere se cere stabilirea unei chei primare (Access poate adauga automat un cāmp cu acest rol).
Importul datelor din Ms Outlook (Address Book). Daca este necesar sa fie importate adresele stocate īn Outlook, se va apela la meniul File - Get Externai Data, optiunea Import. Importul se va face automat, fara a fi necesari completarea pasilor intermediari prezentati la celelalte tipuri de importuri
6. Exportul datelor.
Exportul datelor īntr-o alta baza de date Ms Access. Exportul datelor se realizeaza din meniul File - Export. Baza de date īn care se face exportul trebuie sa existe īn prealabil. Se poate opta pentru a exporta doar definitia unei tabele sau si datele continute de aceasta.
Exportul datelor īntr-o foaie de calcul Ms Excel. La exportul unei tabele īn format Excel, se va crea automat un fisier nou. Prima linie din foaia exportata va contine numele atributelor (coloanelor). Procesul de export decurge complet automatizat.
Exportul īn format text. La exportul īn format text se va opta pentru formatarea rezultatului. īn acest caz rezultatul este de genul:
CodDep |
Denumire |
Productie |
|
Management |
Exportul īn format HTML. Acesta este util pentru a realiza publicarea rezultatelor pe Web. Pentru un control mai precis al aspectului paginii se poate utiliza salvarea īn HTML a unui raport special creat care sa formateze datele. Atentie: īn ambele situatii datele sunt statice (fixate īn momentul exportului).
Cap. 11. Rapoarte.
1. Rapoarte Access.
Rapoartele reprezinta o posibilitate de obtinere a unor situatii tiparite prezentate īntr-o forma atractiva si accesibila celor interesati. Ele au de obicei un impact semnificativ asupra persoanelor care vin in contact cu baze de date, fara a avea īnsa cunostinte de specialitate īn domeniul bazelor de date (manageri, directori, contabili etc).
Spre deosebire de formulare, rapoartele nu modifica niciodata datele. Ele doar parcurg secvential īnregistrarile pentru a genera eventual sub-totaluri si rezumate.
Rapoartele sunt folosite atāt pentru liste simple cāt si pentru etichete postale tiparite automat, grafice de analiza sau rezumate si analize financiare complicate.
Īn toate cazurile se va avea īn vedere claritatea raportului si accentuarea elementelor esentiale pe care le contine. Pentru aceasta pot fi utilizate o serie de trucuri precum: diverse fonturi, marimi si stiluri de caractere, diverse culori de afisare, diverse elemente grafice de individualizare sau grupare īn genul liniilor, dreptunghiurilor etc.
De o foarte mare importanta este posibilitatea de a grupa vizual datele si de a extrage informatii sintetice referitoare la fiecare grup īn parte.
2. Crearea rapoartelor.
Pentru crearea unui raport se poate folosi, ca si īn cazul formularelor, fie o metoda automata (Wizard), fie o proiectare directa (Design).
Īn ambele situatii se va alege o tabela sau o interogare care va furniza datele utilizate īn raport. Daca datele provin din mai multe tabele, se va utiliza obligatoriu o interogare.
3. Elementele constituente ale unui raport.
Un raport este compus din mai multe benzi. O banda (sectiune) are corespondenta directa cu o anumita portiune fizica din pagina tiparita. Benzile puse la dispozitie sunt:
Antetul si subsolul raportului (report header si report footer) apar doar pe prima, respectiv ultima pagina a raportului. Antetul afiseaza de obicei titlul raportului, sigla firmei etc. Subsolul cuprinde de obicei un rezumat al tuturor datelor din raport.
Antetul si subsolul de pagina (page header si pagefooter) cuprinde elementele din partea de sus si de jos al fiecarei pagini. īn mod tipic, antetul de pagina cuprinde numele coloanelor afisate in sectiunea de detaliere iar subsolul de pagina afiseaza numarul paginii si eventual data tiparirii raportului.
Sectiunea de detaliere (detail) va fi repetata pentru fiecare īnregistrare la rularea raportului. Ea cuprinde datele de afisat. La nevoie, un raport poate cuprinde si sub-rapoarte.
Antetul si nota de subsol al fiecarui grup {group header si group footer) vor fi afisate īnaintea, respectiv imediat dupa fiecare grup. Ele vor cuprinde de obicei informatii despre grupul care va fi afisat, respectiv informatii de sumarizare despre datele respectivului grup. Pentru a sorta datele sau a include/exclude un grup se va apela la meniul View->Sorting and Grouping. Un grup va fi creat automat daca se selecteaza cel putin una din optiunile Group Header sau Group Footer.
Pentru a verifica corectitudinea si aspectul unui raport se va apela la comanda Print Preview.
4. Uneltele din Fereastra de unelte.
a) Label - eticheta pentru afisare text fix.
b) Text Box - cāmp de editare text.
c) Group Option - grup de optiuni pentru casute de marcaj, butoane radio etc.
d) Toggle Button - buton basculant pentru īnregistrarea unei stari.
e) Option Button - buton tip radio pentru marcarea unor optiuni cu excludere mutuala.
f) Check Box - casuta de marcaj pentru marcarea unei stari.
g) Combo Box - lista derulanta de valori,
h) List Box - lista de valori.
i) Command Button - buton de comanda pentru executia de cod.
j) Image - control pentru afisarea unei imagini.
k) (Un)Bond Object Frame - cadru pentru afisarea unui obiect OLE.
l) Tab Control - control pentru paginarea ferestrei.
m) Subform - control pentru crearea unui sub-formular īn interiorul formularului curent,
n) Line - linie de decorare,
o) Rectangle - dreptunghi de decorare.
Cap. 12. Sistemul de Macrocomenzi. VBA. Securitatea BD Access.
1. Sistemul de Macrocomenzi Access. Limbajul VBA.
Macrocomenzile permit automatizarea actiunilor repetitive din Access īntr-o maniera simplificata fata de un limbaj de programare.
Desi nu permit realizarea operatiilor pretentioase, macrocomenzile ramān cea mai rapida cale de rezolvare a unor probleme simple.
Exemple de actiuni rezolvate prin Macrocomenzi: afisarea unui mesaj de īnstiintare (MsgBox), schimbarea barei de stare (Echo), schimbarea unei proprietati a unui obiect (SetValue), pentru a tipari un raport (Open Report).
Macrodefinitia AutoExec poate fi folosita pentru a deschide un formular de īnceput la pornirea bazei de date (Acest lucru se poate specifica si prin optiune Tools - StartUp), respectiv poate rula o procedura VBA de initializare.
Limbajul VBA (Visual Basic for Applications) permite implementarea unei game mult mai largi de actiuni. Printre acestea ar fi: tratarea erorilor, executia tranzactiilor, structuri ciclice, apel functii Windows API, crearea dinamica de obiecte. Liniile de cod VBA sunt reunite īn rutine, respectiv proceduri si functii. Acestea pot face la rāndul lor parte din module de cod si pot raspunde automat la evenimentele generate de interfata aplicatiei.
Subprogramele VBA pot fi definite in module globale sau pot fi legate de formulare si rapoarte - CBF (Code Behind Form). īn ambele situatii ele pot fi publice sau private.
Variabilele folosite se declara cu Dim si pot fi de tip: byte, boolean, integer, long integer, single, double, currency, date, object, fixed string,, var string,, variant sau type.
Īn functie de modul de declarare ele pot fi publice, la nivel de modul sau locale, respectiv simple sau statice.
Structurile de control din VBA sunt urmatoarele: if ... then ... else, select ... case, do while ... loop, do ... loop while ..., for ... step ... next. Ele sunt folosite asemanator cu cele din alte limbaje de nivel īnalt precum C, Pascal etc.
Pentru a declara proceduri VBA se va folosi constructia Sub... End Sub.
Sub numeProc(P1 As Type1, ...)
End Sub
Spre deosebire de proceduri, functiile pot returna un rezultat. Sintaxa este īnsa asemanatoare cu cea a procedurilor. La final, numele functiei va primi valoarea de returnat.
Function numeFunctie ( PI As Typel, ...)
.
numeFunctie = valoare
End Function
Biblioteca de functii predefinite este foarte importanta īn toate sistemele de programare moderne. De la aceasta regula nu face exceptie nici sistemul Access. Exista o colectie importanta de functii VBA predefinite precum: Format, InStr, Mid, UCase, DatePart etc.
2. Utilizarea unei baze de date in mediu concurent (retea).
Problema care apare la folosirea unei aplicatii Access īntr-o retea este partajarea datelor īntre utilizatori.
Rezolvarea acestei probleme se poate face prin blocarea datelor pentru evitarea conflictelor. Partajarea se poate face la nivelul datelor sau pentru toate obiectele aplicatiei.
Exista trei tehnici de blocare: blocarea paginii, blocarea tabelului si deschiderea unei baze de date cu acces exclusiv.
Controlul global al blocarii se poate face din meniul Tools - Options -Advanced
Blocarea īnregistrarilor pentru o interogare se poate face din fereastra de proprietati a interogarii, optiunea Record Locks. Intr-o rutina VBA blocarea se poate face la prelucrarea unui set de īnregistrari prin setarea proprietatii LockEdits.
3. Īntretinerea bazei de date
Datorita stergerii datelor din interiorul tabelelor, fisierul bazei de date se "fragmenteaza". Pentru a remedia aceasta situatie care īncetineste procesarea trebuie executata o operatie de compactare. Aceasta se realizeaza pe o baza de date prin optiunea Compact and Repair Database din meniul Tools/Database Utilities.
Repararea unei baze de date distruse se poate īncerca folosind aceiasi optiune de meniu. īnainte de reparare este necesara crearea unei copii de siguranta.
4. Securitatea datelor.
Principial, o baza de date Microsoft Access poate fi protejata de accese neautorizate folosind trei mecanisme: protejarea prin parola, criptarea si stabilirea unui sistem de utilizatori si drepturi asociate.
Protejarea prin parola se stabileste pentru o baza de date deschisa din meniul Tools - Security - Database Password.
Criptarea bazei de date se face din meniul Tools - Security - Encrypt / Decript Database. Prin criptare baza de date este protejata la citirea informatiilor din alte programe.
Cea mai completa (dar si complexa) metoda de securitate se bazeaza pe un sistem de drepturi acordate utilizatorilor. Pentru o administrare eficienta utilizatorii vor fi inclusi in grupuri, drepturile fiind acordate la nivel de grup.
Din motive de securitate, se va renunta la utilizatorul Admin, dupa ce īn prealabil īn grupul Admins a fost creat un nou utilizator.
Administrarea se face din meniul Tools - Security - Users and Groups Accounts. Sistemul de utilizatori nu apartine unei baze de date ci sistemului.
Schimbarea parolei de intrare īn sistem se face prin optiunea de meniu Change Logon Password.
|