Sunteți pe pagina 1din 77

Ce sunt interogarile parametrizate?

Sunt acele interogari ce depind de o valoare de input. De exemplu, decat sa facem cate o
interogare pentru gasirea clientilor dintr-un anumit oras (una pentru Ploiesti, una pentru
Bucuresti, ...), realizam o singura interogare parametrizata dupa Oras. La rularea acestei
interogari o sa introducem orasul pentru care dorim clientii.
De exemplu dorim sa gasim clientii din Bucuresti:

Problema este ca de fiecare data cand refolosim aceasta interogare ea ne afiseaza numai
clientii din Bucuresti.
Daca dorim sa-i vizualizam pe cei din Ploiesti trebuie refacuta interogarea.
Putem modifica interogarea de mai sus astfel:
-declaram valoarea Bucuresti ca fiind un parametru
-de fiecare data cand ruleaza interogarea, utilizatorul va putea introduce alta valoare pt
parametru.

Practic la rularea interogarii de mai sus apare mai intai o fereastra cu textul "Introduceti Orasul",
sub acest mesaj apare un textbox unde se poate scrie un oras.

In acest tutorial prezentam 2 exercitii


1. Parametrizare simpla dupa o singura valoare
2. Parametrizare complexa dupa mai multe valori
Pas preliminar
Descarcati fisierul resurse.zip (dezarhivati-l). Arhiva contine urmatoarele fisiere:
-o prezentare PowerPoint: Lectia 1 - Interogari avansate (I) - Interogari parametrizate.pps
(trebuie sa aveti instalat PowerPoint Viewer)
-o baza de date: Microsoft Access 2007: Lectia 1 - Interogari avansate (I) - Interogari
parametrizate.accdb
-o baza de date: Rezolvari Lectia 1 - Interogari avansate (I).accdb
Exercitiul 1: Parametrizare simpla dupa o singura valoare
Pasul 1:
Deschideti baza Lectia 1 - Interogari avansate (I) - Interogari parametrizate.accdb
Pasul 2:
Deschideti tabela Clienti (vizualizati datele din tabela)
Pasul 3:
Dorim sa realizam o interogare parametrizata dupa Orasul
Inchideti tabela Clienti
Incepem o noua interogare (Query Design), cu tabela Clienti

Pasul 4:
Din lista de coloane alegem: Nume, Prenume, Orasul
Pasul 5:
Sub Orasul in dreptul liniei Criteria scriem: [Scrieti Orasul]

Pasul 6:
Rulati interogarea (apoi salvati cu numele 1-Parametrizat dupa Oras)

Exercitiul 2: Parametrizare dupa mai multe valori


Pasul 1:
Sa fie deschisa baza Lectia 1 - Interogari avansate (I) - Interogari parametrizate.accdb
Pasul 2:
Deschideti tabelele Clienti, Produse si Tranzactii (vizualizati datele din ele). Intre tabelele Clienti
si Produse exista o relatie n la m (relatia este rezolvata de tabela Tranzactii)
Pasul 3:
Inchideti tabelele Clienti, Produse si Tranzactii
Pasul 4:
Incepem o noua interogare (Query Design), cu tabelele Clienti, Produse, Tranzactii
Pasul 5:
Din lista de coloane alegem: CLIENTI.Nume, CLIENTI.Prenume, CLIENTI.Orasul,
Produse.Produs, TRANZACTII.DATAT

Pasul 6:
Scriem sub Orasul (in dreptul liniei Criteria) : [Scrieti Orasul]
Pasul 7:
Scriem sub DATAT (in dreptul liniei Criteria) : Between [Alegeti Data de inceput] And [Alegeti
Data de sfarsit]

Pasul 8:
Rulam interogarea introducand valorile: Ploiesti , 01/01/2005, 01/01/2007
Pasul 9:
Putem schimba ordinea de aparitie a parametrilor folosind fereastra Parameters:
Apasati butonul Parameters
Completati cum doriti ordinea de aparitie a parametrilor: de ex. ca in poza de mai jos

Pasul 10:
Rulati interogarea: Observati ca suntem intrebati prima data datele calendaristice
Pasul 11:
Salvati cu numele 2 - Parametrizat Complex
2. Interogari incrucisate (CrossTab Queries) - Partea 1

Conceptual de CrossTab Queries din Access este sinonim cu Pivot Table din Excel. El nu
reprezinta altceva decat o imagine de ansamblu asupra datelor din tabele.
Pentru a crea CrossTab Queries trebuie sa raspundem la cateva intrebari:

Care este coloana din tabelul nostru initial care va genera liniile in CrossTab
Query? Observati ca in exemplul nostru, liniile reprezinta niste orase. Deci
vom avea atatea linii distincte, cate orase avem in tabelul original.
Care este coloana din tabelul original ce va genera coloanele in CrossTab
Query? In exemplul nostru vom folosi profesia, si vom avea atatea coloane,
cate valori distincte avem in coloana Profesia.

Care este coloana ce urmeaza a fi agregata? In cazul nostru avem veniturile.

Care este functia agregata pe care o aplicam? Noi ne vom ocupa de media
veniturilor.

Vom incerca sa cream exact tabelul din imaginea de mai sus.


Din ribbon-ul Create > Query, facem click pe Query Design.

Din fereastra deschisa alegem tabela clienti, si apasam Add, apoi Close.

Din ribbon-ul contextual Design, sectiunea Query Type, trebuie sa alegem tipul Crosstab (acest
pas este foarte important)
Prima coloana pe care o alegem este Orasul, iar in campul Crosstab alegem Row Heading.
In acelasi mod alegem coloana Profesia, unde mentionam Group By Column Heading, si
coloana VenitLunar, unde nu mai avem grupare, ci alegem functia agregata AVG (media) iar la
Crosstab avem Value.
Apasam Run. Observam ca tabelul afisat are coloanale generate dinamic: avem atatea coloana
cate valori dinstincte avem in coloana Profesia. Randurile se comporta la fel, pentru coloana
Orasul. Tabelul creat este destul de clar si usor de interpretat.

3. Interogari incrucisate (CrossTab Queries)

Partea 2Mai jos avem un alt exemplu de Crosstab Queries. Din ribbon-ul Create > Query,
facem click pe Query Design. Din fereastra deschisa alegem toate cele 3 tabele, si apasam

Add,apoi Close.

Din ribbon-ul contextual Design, sectiunea Query Type, trebuie sa alegem tipul Crosstab.
Vrem sa realizam un Crosstab Query, ca in imaginea de mai jos. Sa vedem, pentru fiecare oras,
care au fost vanzarile pe fiecare an, iar la final sa avem o coloana cu totalul vanzarilor.

Completati campul Orasul, care ca generea randurile, si campul calculat Anii: Year([DATAT])
care va genera coloanele.

In cea de-a treia coloana, introducem o formula care sa calculeze veniturile, ca Pret X Cantitate:
Valoarea: Sum(Produse.Pret*Trazactii.Cantitatea)
Atata timp cat la Field am introdus noi formula, la Total o sa alegem Expression. La Crosstab
alegem Value.

Apasam Run. Observam ca tabelul afiseaza pentru fiecare oras in parte, valoarea vanzarilor,
calculate ca produs intre pret si cantitate, pentru fiecare an.

Daca dorim sa vedem si suma totala, adaugam inca o coloana in designerul interogarii copiind
aceeasi formula (cu aliasul Total), iar la Crosstab alegem Row Heading.

Apasam Run.

Observati ca implicit coloana Total a fost pusa dupa coloana Orasul, dar putem sa o mutam
manual la sfarsit (Drag & Drop).
Putem acum sa salvam interogarea.

4. Subinterogari (Subqueries)

Subinterogarile reprezinta o tehnica foarte puternica cu care putem sa extragem anumite valori
relevante din baza de date.
In tabela Clienti avem o coloana numerica denumita VenitLunar, si ne propunem sa gasim toti
clientii care au un venit lunar mai mare decat media. In mod normal trebuie sa gasim intai media,
apoi pe acei clienti care au venitul peste acea medie.
Subinterogarile sunt acele select-uri ce nu se pot executa din prima, ci ele sunt dependente de
alte interogari, subordonate. Vom avea un astfel de exemplu: Cine are venituri peste medie?
(trebuie sa gasim mai intai media)
Pana acum am lucrat cu designerul de interogari din Access, dar acum vom arunca o privire
asupra interogarilor de tip SQL.
Cine are venituri peste medie?
Mergem in Query Design, alegand doar tabela Clienti.
Toate interogarile pe care noi le facem in designer, sunt traduse intr-un limbaj nativ al Accessului: SQL (Structured Query Language).
Alegem modul de vizualizare al interogarii SQL View.

Subinterogarile nu se pot scrie decat in interiorul acestui SQL view.


Scriem:

SELECT AVG(VenitLunar)
FROM CLIENTI
Daca revenim in modul Datasheet View, vom vedea rezultatul interogarii: media tuturor
veniturilor lunare.

Modificam codul SQL la:


SELECT AVG (VenitLunar) as Media
FROM CLIENTI; si observam ca acum rezultatul are si un alias.

Pentru a face subinterogarea sa afiseze doar acei clienti cu venitul peste medie, folosim codul:
Select * from Clienti where VenitLunar >=(SELECT AVG (VenitLunar) as Media FROM
CLIENTI);
Caracterul * inlocuieste toate coloanele din tabela.

Desi pare o comanda complicat, ea este in realitate destul de simpla. Access detecteaza
parantezele folosite, si proceseaza mai intai interogarea dintre paranteze rezultatul era 2500.
Apoi este procesata interogarea initala, extragand valorile VenitLunar peste 2500.
Observati ca Access-ul a tradus deja codul introdus de noi.

Recomandarea este sa folositi SQL pentru interogari, sa migrati din designerele graifce catre
acest SQL pentur ca acest mod prezinta o serie de avantaje.
5. Interogari Make Table

Stim foarte bine ca interogarile nu stocheaza date. Ele reprezinta doar o legatura catre date,
tintesc catre date. Putem face oricate interogari si baza de date nu se va marii.
In anumite situatii, insa, se impune sa pastram rezultatul intros de un anumit query. Operatia
aceasta, in care reusim sa copiem rezultatele intoarse de un query si sa le pastram in baza de date,
se numeste Bulk Copy.
O interogare de tipul Make Table nu reprezinta decat o interogare normala, la rularea careia,
liniile intoarse sunt persistate intr-un tabel fizic.
Vrem sa stocam in tabela TRANZACTII_VALOROASE toate tranzactiile ce depasesc valoarea
1000.
Mai intai facem interogarea.
Din ribbon-ul Create > Query, facem click pe Query Design.

Din fereastra deschisa alegem toate cele 3 tebele, si apasam Add, apoi Close.
Cream o interogare care sa intoarca numele clientului, produsul si valoarea tranzactiei
(pret*cantitate).

Daca rulam interogrea, vom vedea rezultatul.

Filtram interogarea astfel incat sa returneze numia acele valori peste 1000.

Rulam interogarea. Observam ca au ramas numai acele linii care indeplinesc conditia logica.

Din acest query putem sa face o interogare de tipul Make Table. In modul de vizualizare Design
View, din ribbon-ul cotextual facem click pe Make Tabel.

Introducem numele de tabela Tranzactii_Valoroase si apasam OK.

Apasam Run. Access ne intreaba daca suntem de acord sa creeze un tabel cu un anumit numar
de linii. Apasam Yes.

Tabela s-a creat in mod automat si poate fi vizualizata ca orice alta tabela.
Salvam interogarea cu numele: Interogare ce populeaza un tabel fizic.

De fiecar data cand rulam interogarea de tipul Make Tabel, tabela Tranzactii_Valoroase va fi
stearsa si va fi populata din nou cu rezultatul intors de interogare.
6. Interogari de tip modificare (Update Query)

Comenzile de tip Update Query, ne permit sa automatizam modificarile in interiorul bazei de


date. De regula noi suntem obisnuiti doar sa interogam bazele de date, dar in anumite scenarii
trebuie sa si modificam cat mai rapid datele din interiorul unei baze de date.
In tabela produse vrem sa adaugam 3 Ron pentru fiecare pret al caiselor.
Avem 2 modalitati:
Facem un query care sa ne gaseasca liniile cu Caise, apoi facem modificarile manual direct in
interogare;
A doua varianta este sa folosim o comanda de tip Update Query.
Facem query-ul care sa ne returneze toate produsele caise, si pretul aferent.

Daca rulam interogarea, se returneaza cele 2 tipuri de caise.

Putem face modificarile direct, manual. Dar ar fi foarte greu de urmat acest pas daca avem un
numar foartre mare de linii.
Reluam designer-ul interogarii, si alegem tipul Update.

Si aici putem sa folosim modul de lucru cu limbajul SQL, dar o sa continuam in Design View.
Completam campurile astfel incat interogarea sa returneze produsele Caise si sa creasca pretul cu
3 unitati.

Rulam interogarea. Access ne intreba daca vrem sa acceptam modificarile celor 2 randuri.
Apasam Yes.

Daca deschidem tabela Produse observam ca pretul a crescut pentru acele linii.
Putem studia si codul SQL transcris de Access, pentru a ne familiariza cu acesta:
UPDATE Produse SET Produse.Pret = [Produse].[Pret]+3
WHERE (([Produse].[Produs] Like '*Caise*'));
7. Ce sunt interogarile de tip stergere (Delete Query) ?

Sunt comenzi de tip Delete ce ne permit stergerea din baza de date a uneia sau a mai multor
inregistrari, in functie de o anumita conditie logica.
Pasul 1:

Pentru a sterge o informatie dintr-o tabela Access putem folosi o comanda numita Delete Query
care sa ne permita stergerea in mod automat pe baza unei conditii logice.
Legatura dintre tabele se face pe baza unui Relationship.

Pasul 2:
In relatia dintre tabelele de Produse si Tranzactii vrem sa adaugam o optiune de stergere.
Pentru a realiza acest lucru vom bifa optiunea Cascade Delete Related Records.
Asta inseamna ca in clipa in care sterg liniile din tabela de produse ce contin un anumit termen,
sa se stearga si din tabela de tranzactii acele linii care tin de produsul nostru.

Pasul 3:
Din Ribbon-ul Create vom alege optiunea Query Design pentru a face o stergere.
Acesta va fi un Query de tip Select.
Citeriul de cautare are comanda de cautare a termenului dorit de noi.
Daca rulam acest query va gasi toate liniile ce contin acel cuvant iar noi le vom sterge manual.

Pasul 4:
O alta metoda de stergere mai rezonabila este sa cream un Query de tip Delete.
Aceasta metoda modifica Designer-ul si comanda SQL.
In clipa in care rulam acest query suntem avertizati ca vor fi sterse acele linii ce contin cuvantul
nostru.

Pasul 5:
In functie de setarile puse in comanda SQL designer-ul se va completa automat.
In clipa in care rulam query-ul tabelei noastre ii vor lipsi liniile ce contineau cuvantul specificat
de noi.
Poza 12, 13

8.
Ce sunt interogarile de tip Append Query ?
Acestea ne permit sa automatizam inserarile de linii intr-o tabela de date..
Pasul 1:
Se va crea o tabela cu coloanele pe care le dorim.

Pasul 2:
Vom crea un Query care va adauga in tabela nou facuta, o linie ce va contine data curenta si
suma ce a fost tranzactionata pana la momentul curent.
Pasul 3:
Din Ribbon-ul Create vom alege optiunea Query Design.
Acesta va fi un Query de tip Append.
In caseta de dialog deschisa ne va intreba unde sa scrie valoarea obtinuta.
Din meniul derulant vom alege tabela in care dorim sa fie inserate datele.
Acest Query va intoarce doua coloane.

Pasul 4:
In Designer vom introduce functiile si criteriile pentru Query.

Pasul 5:
Din Ribbon-ul Desiggn vom alege optiunea Run pentru a rula Query-ul scris.
In aceasta clipa el va detecta ca are de inserat un rand si ne va daca vrem sau nu sa il inseram.

9Ce sunt interogarile Union ?

In cazul in care avem mai multe tabele diferite dar identice din punct de vedere al structurii se
vor creea Select-uri ce concateneza datele din acele tabele.
Pasul 1:
Vom creea tabelele ce vor contine informatiile dorite
Din Ribbon-ul Create vom alege optiunea Query Design.
Aici alegem tabelele pe care vrem sa le concatenam.

Pasul 2:
In Ribbon-ul Design vom selecta optiunile Union.
Operatorul Union numai are suport grafic, asa ca se vor scrie manual interogarile.
Pentru a functiona Union trebuie sa avem acelasi numar de coloane si tipurile de coloane sa fie
identice.
Operatorul Union face si sortare automata in prima coloana.

10. Ce sunt interogarile Data Definition ?

Sunt comenzi ce permit automatizarea modificarilor dintr-o baza de date.


Ex:
- update;
- append;
- delete;
- etc.

Comenzile DDL ne permit automatizarea modificarilor de structura dintr-o baza de date


CREATE TABLE Angajati
(
Nume
TEXT(50),
Salariul INTEGER
)
ALTER TABLE Angajati DROP COLUMN Salariul
---------------------------------------------------------CREATE TABLE Cars
(
CarID LONG,
CarName TEXT(50),
ColorID LONG
)
CREATE TABLE Colors
(
ColorID LONG CONSTRAINT PK_Colors PRIMARY KEY,
ColorName TEXT(50)
)
ALTER TABLE Cars
ADD CONSTRAINT MyColorIDRelationship
FOREIGN KEY (ColorID) REFERENCES Colors (ColorID)
Pasul 1:
Din Ribbon-ul Create vom alege optiunea Query Design.

Se va selecta optiunea Data Definition.

Pasul 2:
In clipa in care vom introduce scriptul si dam comanda Run, Access va crea o noua tabela,
conform script-ului nostru.
Aceasta tabela va avea caracteristicile specificate de script.

Pasul 3:
Comenzile Alter si Drop inserate intr-un script vor sterge dintr-o tabela un anumit camp sau o
coloana, conform datelor introduse in script.

Pasul 4:
Folosind comanda Drop pe o tabela, aceasta va sterge tabela respectiva.

Pasul 5:
Comanda Create va crea o tabela noua, ce va avea caracteristicile specificate de script.

Pasul 6
Folosind un script putem sa realizam relatii intre doua sau mai multe tabele.

11. Ce sunt interogarile la distanta (Pass-Throuh) ?

Aceste interogari sunt folosite pentru a interoga o baza de date SQL situata in alta parte.
Access va primi doar rezultatul.
Se pot folosi orice fel de baze de date externe.
Pasul 1:
Din Ribbon-ul Create vom alege optiunea Query Design. Nu vom alege nici un tabel.

Apoi vom apasa butonul Pass-Through si Property Sheet.

Pasul 2:
In meniul din partea dreapta la rubrica OBDC Connect Str vom face legatura dintre Access si
baza de date externa.

Pasul 3:
Din fereastra de dialog deschisa vom alege sa facem un noua conexiune.

Vom urma pasii impusi de Wizard-ul Data Source.

Pasul 4:
In clipa in care incheiem pasii de mai sus, intr-un Query va aparea sintaxa care face legatura
dintre Access si baza de date externa.

Pasul 5:
De fiecare data cand vom rula acest Query, el va interoga baza de date externa si va extrage
mereu doar primele din persoane din tabela specificata in Wizard-ul de la Pasul 3.

S-ar putea să vă placă și