Interogari in Access
Interogari in Access
Interogari in Access
Din fereastra Database putem alege dintre cele 2 optiuni de a crea interogari asupra bazei de date:
In campul Field putem de asemenea sa folosim si campuri calculate. De exemplu vrem sa vedem clientii de la
ce agenti si ce produse au comandat impreuna cu valoarea lor finala care se obtine din pretul produsului *
cantitatea comandata:
Rezultatul va fi acesta:
Daca analizam expresia: valoare finala: [articole].[art pret]*[comenzi].[cant] se poate deduce ca:
- valoare finala reprezinta eticheta sau numele campului calculate care va apare in tabela rezultata;
- fiecare camp este apelat prin sitanxa: <nume tabela> . <nume camp>. Folosinde-se operatorul “.” se arata
astfel apartenenta campului la acea tabela. Parantezele patrate sunt folosite pentru a grupa numele compuse
asa cum avem in exemplul nostrum in cazul campului: art pret ce semnifica articol pret. Accessul va pune
implicit “[ ]” pentru fiecare nume de table si camp folosit. In final inmultirea dintre pretul unui articol care
se afla in tabela articole si cantitatea comadata, camp care se afla in tabela comenzi este:
[articole].[art pret] * [comenzi].[cant]
Interogari in Access – laborator 5 (continuare)
Pentru a realiza diferite criterii de selecţie se poate utiliza şi generatorul de expresii (Expression Builder) a cărui
fereastră se deschide selectând opţiunea Build a meniului pe care îl activaţi printr-un click dreapta de mouse în
rândul Criteria.
De exemplu vrem sa selectăm doar agentii care au primit comision. Asta înseamnă ca valoarea din comision să fie
mai mare decât 0. Interogarea va fi creată cu ajutorul generatorului de expresii.
Se face click dreapta sub câmpul comision in rândul Criteria si se allege Build:
Alegeţi acum toţi clienţii care sunt din oraşul Bacău sau Iaşi. Pentru a nu scrie în rânduri separate ale câmpului
Criteria numele fiecărui oraş, se va scrie într-un singur rand Bacău şi Iaşi folosindu-se operatorul OR.
Utilizarea operatorilor
Pentru a construi expresii pe rândul Criteria se utilizează operatorii:
aritmetici: adunare (+); scădere (–), înmulţire (*), împărţire (/), ridicare la putere (^), împărţirea a două
numere cu returnarea unui întreg (\), împărţirea a două numere cu returnarea restului împărţirii (MOD).
de comparaţie: <, >, =, <=, >=. Aceşti operatori returnează valorile logice True şi False.
Excepţie reprezintă cazul în care unul dintre operatori are valoarea NULL şi deci orice comparare va returna
valoarea NULL.
asociaţi operatorilor de comparare:
– IS NULL, IS NOT NULL – o valoare NULL (câmp necompletat) nu este nici TRUE nici FALSE.
Înregistrările care au valoarea NULL în câmpurile selectate nu apar ca rezultate ale interogării;
– LIKE – se foloseşte împreună cu caracterele de înlocuire „* ” şi „?” pentru a stabili dacă o valoare începe cu
unul sau mai multe caractere; caracterul „* ” poate înlocui orice număr de caractere; caracterul „? ” înlocuieşte
numai un caracter;
– IN – stabileşte dacă o valoare este cuprinsă într-o listă;
– BETWEEN – stabileşte dacă o valoare aparţine unui interval specificat.
logici:
– NOT – negaţia;
– AND – pentru conjuncţia a două valori;
– OR – pentru disjuncţia a două valori;
– XOR – pentru disjuncţia exclusivă a două valori;
– Eqv – verifică echivalenţa a două valori.
de concatenare a şirurilor de caractere: + şi &.
constante: constantele utilizate în construirea expresiilor Access pot fi de natură
– numerică (ex: 1200,5,0);
– text (“123”, “Toma Ion”, ’str. Viilor 15’);
– dată calendaristică (ex: #12.31.01# ceea ce indică data de 31 decembrie 2001).
Funcţiile: pot fi de natură:
– Dată calendaristică : Date(), Month(), Year (), etc.
Exemple:
1. Date() – returnează data curentă;
2. Month(Date()) returnează numărul lunii calendaristice curente.
3. Year(Date()) returnează anul curent.
– De tip text:
1. Len() – returnează lungimea unui şir;
2. Trim() – elimină spaţiile de la începutul şi de la sfârşitul unui şir;
3. Left() – returnează primele n caractere de la începutul unui şir, etc.
– Matematice şi trigonometrice:
1. ABS() – returnează valoarea absolută a unui număr;
2. INT() – returnează partea întreagă dintr-o valoare numerică, ROUND() – rotunjeşte o valoare
cu un anumit număr de zecimale;
3. SUM() – calculează suma;
4. AVG() – calculează media, etc.
– Financiare:
1. PV() returnează valoarea actuală a unei unităţi plătite în rate periodice egale;
2. SLN() returnează valoarea amortizării unui mijloc fix după o anumită perioadă (amortizare
liniară) etc.
– Funcţii diverse: ISNUMERIC(), ISNULL(), etc
Exerciţii:
1. Realizarea unei interogări pentru obţinerea unei liste cu clienţii a căror numele începe cu A.
Sub câmpul [cl nume] pe rândul Criteria se scrie expresia: LIKE “ A* ”
2. Realizarea unei interogări pentru obţinerea unei liste cu clienţii a căror numele NU începe cu A.
Sub câmpul [cl nume] pe rândul Criteria se scrie expresia: NOT LIKE “ A* ”
3. Realizarea unei interogări pentru obţinerea unei liste cu clienţii care nu au reducere (nu aţi scris
nimic în acest cîmp nici măcar valoare 0).
Sub câmpul reducere pe rândul Criteria se scrie expresia: IS NULL
4. Realizarea unei interogări pentru obţinerea unei liste cu clienţii din oraşul Bacău care nu au reducere
sau dacă au să fie mai mare ca 10 şi a căror nume începe cu litera A.
Pe rândul Criteria sub câmpul [cl oraş] se scrie “Bacau”, iar sub câmpul reducere se scrie expresia: IS NULL
OR [reducere] > 2 şi sub câmpul [cl nume] se scrie Like “A* ”.
5. Interogarea pentru obţinerea listei clienţilor cărora li s-a acordat o reducere între valorile 10 şi 15.
Sub câmpul reducere în rândul Criteria se scrie expresia: >="2" And <="5". Pentru date calendaristice se va
folosi expresia: >= # 01.12.2004 # And <= # 31.12.2004 # ce reprezinta perioada cuprinsă între 1 decembrie
2005 şi 31 decembrie 2004.
6. Pentru a obţine o listă a clienţilor cu [cl Id] dintre numerele 1, 2,3, se va realiza interogarea:
Sub câmpul [cl Id] se scrie expresia: IN (1 ; 2 ; 3).
7. Pentru a obţine o listă cu clienţii cu reducere intre valorile 5 şi 10 se scrie: Between 1 And 3.
8. Mergeţi în structura tabelei Clienţi şi adăugaţi câmpul: data de tipul Date/Time şi daţi apoi valori
acestui camp. Aflaţi apoi clienţii care au făcut comenzi între perioada 01.01.2006 şi 31.12.2007.
Sub câmpul data pe rândul Criteria veţi scrie: Between #01.01.2006# And #31.12.2007#.
• câmpurile calculate pot fi sortate, li se pot aplica criterii de selecţie sau se pot totaliza.
• în câmpurile calculate se poate utiliza funcţia IIF cu următoarea sintaxă:
IIF ( <expresie>, valoare 1, valoare2)
unde:
– <expresie> – este o expresie a cărei valoare de adevăr este evaluată pentru fiecare înregistrare;
– valoare 1 – este valoarea returnată dacă expresie este adevărată;
– valoare2 – este valoarea returnată dacă expresie este falsă.
Exemple pentru fiecare:
1. Calculaţi TVA-ul pentru fiecare articol în parte:
Rezultatul este:
2. Să realizăm o interogare în care să calculam pentru fiecare agent in parte, şi fiecărui client căruia s-a
furnizat un articol, valoarea articolului furnizat (din pret * cantitate), TVA-ul, valoarea finală (din valoare + TVA)
şi apoi să verificăm cât anume a plătit clientul scăzând din suma finala (câmpul din comenzi) valoarea finală
calculată.
Rezultatul interogării este unul de forma:
După cum se vede numele de coloană sunt corespunzătoare cu identificatorii scrişi pentru fiecare expresie
calculată:
Valoare, TVA, valoare finala şi Suma platita. Se poate observa cala Suma platita clinetul este pe minus, adică mai
are de plată respectiva suma din valoarea finală.
4. Afişaţi pentru fiecare comandă în parte, după ce calculaţi cât mai are de dat clientul, dacă are restanţă sau a
plătit în plus.
Pentru a rezolva această interogare vă veţi folosi de interogarea cu numărul doi de mai sus.
Rezultatul este următorul:
S-a realizat o interogare realizându-se o grupare după fiecare agent, ce produs şi cantitatea comandată.
TEMA
Realizaţi o interogare de grupare după fiecare produs şi cantitatea comandată.
Putem de asemenea să realizăm sumă de valoare produs comandată pentru fiecare articol:
Interogări de
acţiune
Interogările de
acţiune pot avea
ca rezultat:
• Crearea de noi
tabele (Make
Table Query)
• Actualizarea datelor (Update Query)
• Adăugarea de noi înregistrări (Append Query)
• Ştergerea înregistrărilor (Delete Query)
Interogările de acţiune se realizează similar interogărilor de selecţie de până acuma, specificându-se în plus prin
meniul Query tipul de cerere dorit.
Elaborarea unei interogări de selecţie în modul Design View (vor fi luate în calcul doar câmpurile ce dorim
să facă parte din structura noii tabele, iar, în cazul în care sunt necesare şi alte câmpuri pentru aplicarea
unor criterii, acestea nu vor fi marcate în linia Show a grilei de interogare.
Apelarea din meniul Query a opţiunii Make Table Query şi specificarea în casete Make Table a numelui
noii tabele (se poate opta pentru crearea noii tabele într-o altă bază de date bifând opţiunea Another
Database şi specificând numele fişierului).
Lansarea în execuţie a interogării.
Exemplu:
Crearea unei tabele ce va conţine numele clienţilor şi pentru fiecare client cantitatea totală de articole
comandate. Vom face o grupare după numele clienţilor, iar ca expresie calculată vom face sumă după
cantităţile de produse comandate. După ce am ales cîmpurile care vor forma noua tabelă, vom alege din meniul
Query opţiunea Make-Table Query. După care vom lansa în execuţie interogarea.
Exemplul 2:
Crearea unei tabele care să conţină aceleaşi câmpuri ca tabela comenzi însă, câmpul suma finală va fi
redenumit în valoare finală care va fi calculat după formula cant * pret, iar comenzile vor fi doar pentru clienţii
din oraşul Bacău.
De asemenea dvs. puteţi să bifaţi caseta de pe rândul Show, şi astfel va apare şi oraşul unde au avut loc
comezile.
Apoi alegeţi opţiunea Make- Table Query şi ca titlu pentru tabel puteţi scrie „comenzi dupa localitate”.
Exemplu:
Pentru clienţii din oraşul Bacau vom pune o reducere de valoarea 10.
Pentru a realiza o interogare de tip Update, se vor realiza următorii paşi:
a) În modul Design View se vor selecta câmpurile pentru care aplicăm modificarea:
Mergeţi apoi şi verificaţi în tabela clienţi daca valorile dorite au fost modificate.
În cadrul interogărilor Update nu sunt admise modificări asupra câmpurilor cheie primară sau modificări ce ar
putea conduce la nerespectarea restricţiilor de integritate.
b) Din meniul Query sau din bara de unelte de sub meniu, se va selecta opţiunea Append Query ce va conduce
la afişarea ferestrei Append în care se va selecta numele tabelei în care dorim adăugarea.
c) Transformarea interogării de selecţie într-o interogare de adăugare are ca efect apariţia rândului Append To
în fereastra de proiectare a interogării. În acest rând se va specifica pentru fiecare câmp din tabela ce
conţine datele, denumirea câmpului corespondent din tabela unde vor fi adăugate.
Rulaţi interogarea şi vedeţi dacă au fost adăugate înregistrări în tabela comenzi după localitate.
Interogările de ştergere deînregistrări - Delete oferă posibilitatea eliminării mai multor înregistrări din tabele pe
baza unor criterii impuse de utilizator. Atenţie însă, ştergerea de înregistrări poate fi realizată doar atunci când
nu sunt încălcate reguli de integritate ale bazei de date. Prin urmare nu putem şterge înregistrări dintr-o tabelă
(părinte) dacă de acele înregistrări depinde înregistrările din altă tabelă (copil).
Pentru a realiza o interogare de ştergere se elaborează în mod normal o cerere selectându-se câmpurile dorite şi
impunându-se restricţiile necesare după care se apelează din meniul Query sau folosindu-se shortcut-ul
respectiv, opţiunea Delete.
Exemplul următor prezintă modalitatea în care se pot şterge din baza de date toate comenzile efectuate de
clienţii ce au codurile 2 sau 3.
Se selectează câmpurile după care aplicăm criteriul dorit. Apoi se allege opţiunea Delete Query.
Interogarea va arăta astfel:
a) Rapoarte
Din fereastra Database alegeţi Reports şi „Create report by using wizard”.
Vom crea raportul cu numele Raport comenzi. Introducem toate cîmpurile din tabela Comezi, clic pe Next, şi în
continuare vom grupa pe nivele cîmpurile.
Pe primul nivel vor fi Id-urile. Dacă apare alt cîmp ca fiind pe primul nivel (cele scrise cu albastru), îl trecem în
partea stângă prin clic pe butonul „ < ” şi trecem în partea dreaptă cîmpul care ne interesează (prin clic pe
butonul „ > ”). De asemenea ne putem folosi de opţiunea Priority pentru a trece un cîmp la un nivel mai sus.
Clic Next. Putem sorta câmpurile ascendent dupa nume. La opţiunea Summary Options se va deschide o
fereastră unde puteţi să alegeţi una dintre funcţiile de calcul, astfel încât să aveţi rapoarte cu cîmpuri grupare.
În continuare alegeţi opţiunile pe care le doriţi, daţi numele Raport comenzi şi la urmă clic Finish.
Un alt exemplu de raport complex este cel în care vom afisa numele agenţilor, numele clienţilor, denumirea
articolelor, cantitatea comandată şi valoarea finală.
Atunci când fereastra Report Wizard se va deschide, alegeţi la câmpul Tables/Queries pe rând tabelele agenţi,
si de acolo câmpul agent nume, apoi tabela clienţi si de acolo câmpul nume client, tabela articole şi de acolo
câmpul articol nume, etc.
Rezultatul este:
b) Formulare
Vom crea un fomular cu numele Date Angenţi, pentru introducerea datelor în altă formă decât cea tabelară
avâd în plus şi indicaţii pentru cel ce introduce datele.
Din fereastra Database faceţi clic pe Forms şi apoi alegeţi opţiunea „Create form by using wizard”. În fereastra
nou apărută alegeţi tabela Angenţi. Veţi adăuga câmpurile ce trebuie sa apară în formular. Acest lucru este
realizat astfel: din Available fields selectaţi pe rând fiecare câmp dorit şi apoi apăsaţi butonul „ > ” pentru a le
trece în Selected fields.
Apoi modul de prezentare al formularuli şi la urmă denumiţi formularul. Rezultatul poate fi de forma:
Sau de forma:
Proiectul trebuie sa
contina:
1. o BD de 4 tabele
2. minim 10 inregistrari de tabela
3. 10 interogari impartite astfel:
- 2 interogari simple cu maxim 2 tabele (una dintre interogari sa faca si ordonare)
- 3 interogari cu campuri calculate
- 1 interogare cu group by
- 4 interogari de actiune cate una din fiecare categorie (make table, update, append si delete)
4. 2 rapoarte
5. 1 formular