39
1 GESTIUNE PRODUSE FINITE ........................................................................................................... 2 1.1 STRUCTURA BAZEI DE DATE............................................................................................................ 2 1.2 SCHEMA BAZEI DE DATE ................................................................................................................. 2 1.3 RESTRICŢII ...................................................................................................................................... 3 1.3.1 Restrictii la nivel de atribut........................................................................................................ 3 1.3.2 Restrictii la nivel de inregistrare ................................................................................................ 4 1.4 POPULAREA CU DATE ...................................................................................................................... 4 1.5 INTEROGĂRI ....................................................................................................................................5 1.5.1 Filtrarea şi ordonarea directă a datelor dintr-o tabelă ................................................................ 5 1.5.2 Actualizarea directă a datelor ....................................................................................................5 1.5.3 Crearea de interogări cu instrumente de tip Wizard ..................................................................5 1.5.3.1 Crearea unei interogări cu Simple Query Wizard ............................................................. 5 1.5.3.2 Crearea unei interogări cu Crosstab Query Wizard ......................................................... 6 1.5.4 Definirea interogărilor prin Query Design ................................................................................ 7 1.5.4.1 Interogări de selecţie ......................................................................................................... 7 1.5.4.2 Interogări de adăugare ...................................................................................................... 8 1.5.4.3 Interogări de modificare ....................................................................................................9 1.5.4.4 Interogări de ştergere ........................................................................................................ 9 1.5.4.5 Interogare folosind două tabele......................................................................................... 9 1.5.5 Interogări SQL ......................................................................................................................... 10 1.5.5.1 Primele argumente ale interogărilor SQL....................................................................... 10 1.5.5.2 Utilizarea principalilor operatori.................................................................................... 11 1.5.5.3 Funcţii de agregare ......................................................................................................... 12 1.5.5.4 Gruparea înregistrărilor .................................................................................................15 1.6 RAPOARTE .................................................................................................................................... 15 1.6.1 Asistentul de rapoarte .............................................................................................................. 15 1.6.2 Raport simplu din două tabele .................................................................................................17 1.6.3 Raport cu gruparea înregistrărilor şi subtotaluri ...................................................................... 18 1.7 FORMULARE .................................................................................................................................19 2 EVIDENŢĂ STUDENŢI..................................................................................................................... 23 2.1 Crearea tabelelor şi definirea restricţiilor .................................................................................... 23 2.1.1 Crearea tabelelor şi declararea valorilor implicite ...................................................................23 2.1.2 Reguli de validare .................................................................................................................... 23 2.1.2.1 La nivel de atribut ............................................................................................................ 23 2.1.2.2 La nivel de înregistrare .................................................................................................... 23 2.1.3 Declararea restricţiilor referenţiale .......................................................................................... 24 2.2 Editarea tabelelor şi navigarea prin înregistrări ........................................................................... 24 2.3 Obţinerea de informaţii din baza de date ..................................................................................... 25 2.3.1 Setul nr. 1 de întrebări ............................................................................................................. 25 2.3.2 Setul nr. 2 de întrebări ............................................................................................................. 27 2.3.3 Setul nr. 3 de întrebări ............................................................................................................. 28 2.3.4 Setul nr. 4 de întrebări ............................................................................................................. 28 2.3.5 Setul nr. 5 de întrebări ............................................................................................................. 30 2.3.6 Setul nr. 6 de întrebări ............................................................................................................. 31 2.3.7 Setul nr. 7 de întrebări ............................................................................................................. 32 3 MODELE LUCRĂRI PRACTICE ...................................................................................................... 33 3.1 Lucrarea practică nr. 1 ................................................................................................................. 33 3.2 Lucrarea practică nr. 2 ................................................................................................................. 34 3.3 Lucrarea practică nr. 3 ................................................................................................................. 36 3.4 Lucrarea practică nr. 4 ................................................................................................................. 38

Exercitii Access Rezolvate

Embed Size (px)

DESCRIPTION

ddd

Citation preview

Page 1: Exercitii Access Rezolvate

1 GESTIUNE PRODUSE FINITE ........................................................................................................... 2

1.1 STRUCTURA BAZEI DE DATE ............................................................................................................ 2

1.2 SCHEMA BAZEI DE DATE ................................................................................................................. 2

1.3 RESTRICŢII ...................................................................................................................................... 3

1.3.1 Restrictii la nivel de atribut ........................................................................................................ 3

1.3.2 Restrictii la nivel de inregistrare ................................................................................................ 4

1.4 POPULAREA CU DATE ...................................................................................................................... 4

1.5 INTEROGĂRI .................................................................................................................................... 5

1.5.1 Filtrarea şi ordonarea directă a datelor dintr-o tabelă ................................................................ 5

1.5.2 Actualizarea directă a datelor .................................................................................................... 5

1.5.3 Crearea de interogări cu instrumente de tip Wizard .................................................................. 5

1.5.3.1 Crearea unei interogări cu Simple Query Wizard ............................................................. 5

1.5.3.2 Crearea unei interogări cu Crosstab Query Wizard ......................................................... 6

1.5.4 Definirea interogărilor prin Query Design ................................................................................ 7

1.5.4.1 Interogări de selecţie ......................................................................................................... 7

1.5.4.2 Interogări de adăugare ...................................................................................................... 8

1.5.4.3 Interogări de modificare .................................................................................................... 9

1.5.4.4 Interogări de ştergere ........................................................................................................ 9

1.5.4.5 Interogare folosind două tabele ......................................................................................... 9

1.5.5 Interogări SQL ......................................................................................................................... 10

1.5.5.1 Primele argumente ale interogărilor SQL ....................................................................... 10

1.5.5.2 Utilizarea principalilor operatori.................................................................................... 11

1.5.5.3 Funcţii de agregare ......................................................................................................... 12

1.5.5.4 Gruparea înregistrărilor ................................................................................................. 15

1.6 RAPOARTE .................................................................................................................................... 15

1.6.1 Asistentul de rapoarte .............................................................................................................. 15

1.6.2 Raport simplu din două tabele ................................................................................................. 17

1.6.3 Raport cu gruparea înregistrărilor şi subtotaluri ...................................................................... 18

1.7 FORMULARE ................................................................................................................................. 19

2 EVIDENŢĂ STUDENŢI ..................................................................................................................... 23

2.1 Crearea tabelelor şi definirea restricţiilor .................................................................................... 23

2.1.1 Crearea tabelelor şi declararea valorilor implicite ................................................................... 23

2.1.2 Reguli de validare .................................................................................................................... 23

2.1.2.1 La nivel de atribut ............................................................................................................ 23

2.1.2.2 La nivel de înregistrare .................................................................................................... 23

2.1.3 Declararea restricţiilor referenţiale .......................................................................................... 24

2.2 Editarea tabelelor şi navigarea prin înregistrări ........................................................................... 24

2.3 Obţinerea de informaţii din baza de date ..................................................................................... 25

2.3.1 Setul nr. 1 de întrebări ............................................................................................................. 25

2.3.2 Setul nr. 2 de întrebări ............................................................................................................. 27

2.3.3 Setul nr. 3 de întrebări ............................................................................................................. 28

2.3.4 Setul nr. 4 de întrebări ............................................................................................................. 28

2.3.5 Setul nr. 5 de întrebări ............................................................................................................. 30

2.3.6 Setul nr. 6 de întrebări ............................................................................................................. 31

2.3.7 Setul nr. 7 de întrebări ............................................................................................................. 32

3 MODELE LUCRĂRI PRACTICE ...................................................................................................... 33

3.1 Lucrarea practică nr. 1 ................................................................................................................. 33

3.2 Lucrarea practică nr. 2 ................................................................................................................. 34

3.3 Lucrarea practică nr. 3 ................................................................................................................. 36

3.4 Lucrarea practică nr. 4 ................................................................................................................. 38

Page 2: Exercitii Access Rezolvate

Gestiune produse finite

1 GESTIUNE PRODUSE FINITE

1.1 STRUCTURA BAZEI DE DATE Tabela Denumire atribut Tipul Lungime Observaţii

Documente de intrare

numar nota intrare

data document

cod gestiune

Text

Date/Ti me

Text

8

Short Date

8

pk1

Linii in documente

numar nota intrare

cod produs

cantitate

Text

Text

Number

8

8

Single

parte din pk (fk2 - din Documente de

intrare)

parte din pk (fk - din Produse)

Avize de expeditie

numar aviz

data aviz

cod gestiune

cod client

Text

Date Time

Text

Text

8

Short Date

8

8

pk

fk - din gestiune

fk - din clienţi

Linii in avize numar aviz

cod produs

cantitate

procent tva

pret

Text

Text

Number

Number

Number

8

8

Single

Byte

Single

parte din pk (fk - din Avize de expeditie)

parte din pk (fk - din Produse)

Gestiune

cod gestiune

denumire gestiune

nume gestionar

Text

Text

Text

8

20

20

pk

Incasari

numar document

data document

cod client

suma

tip de document

Text

Date/Time

Text

Number

Text

S

Short Date

8

Single

20

parte din pk

parte din pk (fk - din Clienţi)

parte din pk

Produse cod produs

denumire produs

unitate de măsură

pret

stoc

Text

Text

Text

Number

Number

8

20

3

Single

Single

pk

Clienti

cod client

denumire client

cod localitate

sold

Text

Text

Text

Number

8

20

4

Single

pk

fk - din Localitati

Localitati

cod localitate

denumire localitate

denumire judet

Text

Text

Text

8

20

20

pk

Câmpurile care au conţinut numeric, dar nu sunt folosite în calcule pot fi configurate ca de tip Text, fiind mai uşor de gestionat.

Cheia primară se setează dând clic dreapta pe câmpul stabilit ca având acest rol şi alegând din meniul contextual opţiunea

Primary Key. Aceeaşi opţiune poate fi aleasă din meniul Design.

În cazul în care este nevoie de cheie primară compusă, se selectează primul câmp, apoi se „alunecă” spre celălalt, dacă sunt

alăturate sau se ţine apăsată tasta Ctrl şi se apasă şi pe celălalt câmp.

Baza de date în forma în care se pot stabili cheile primare, introdus valori

implicite, reguli de validare etc. gestiune produse finite - simpla.accdb

1.2 SCHEMA BAZEI DE DATE

1. Pentru a crea legăturile între tabele, se alege, din meniul Database Tools, opţiunea Relationships. Dacă este aleasă prima

dată pentru respectiva bază de date, va apărea un formular de unde se pot introduce tabelele. Dacă a mai fost apelată

această opţiune pentru acea bază de date, pentru a mai adăuga tabele:

- fie se alege din meniul Design, butonul Show Table;

- fie se dă clic dreapta pe zona gri unde sunt tabelele şi se alege, din meniul contextual, aceeaşi opţiune Show Table;

1 pk - primary key – cheie primară 2 fk - foreign key - cheie străină

Page 3: Exercitii Access Rezolvate

Gestiune produse finite - fie se dă clic în panoul din stânga unde sunt tabelele, pe tabela dorită şi, ţinând apăsat butonul mouse-ului, se trage

peste fundalul gri, unde sunt tabelele.

2. Se dă clic pe cheia primară din tabela-părinte, ţinându-se apăsat butonul stânga al mouse-ului, şi se trage mouse-ul peste

tabela-copil, eliberând butonul mouse-ului peste cheia străină (corespondentul cheii primare din tabela părinte). Va apărea

un formular precum cel de jos. În cazul în care nu apare corespondenţa cheie primară – cheie străină, se poate schimba

dând clic pe câmpul eronat şi alegerea, din combobox.

De regulă, se bifează primele două casete (Enforce Referential Integrity şi Cascade Update Related Fields)

1.3 RESTRICŢII

1.3.1 Restrictii la nivel de atribut3

1. În tabela Clienti, denumirea clientului să fie obligatoriu cu majuscule.

Validation Rule: StrComp(UCase([denumire client]);[denumire client];0)=0

2. Validation Text: "DENUMIREA CLIENTULUI - CU MAJUSCULE !!!"

3. În tabela Linii in documente, cantitatea trebuie să fie pozitivă.

Validation Rule: >0

Validation Text: „CANTITATEA TREBUIE SA FIE POZITIVA!!!”

4. Tabela Produse, unitate de masura să aibă prima literă scrisă cu majuscule.

Validation Rule4: StrComp(Left(UCase([unitate de masura]);1);Left([unitate de masura];1);0)=0

Validation Text: "INTRODUCETI PRIMA LITERA MAJUSCULA !!!"

3 Atenţie ca, regula de validare să fie aplicată câmpului solicitat! Ceea ce înseamnă că, întâi vom da clic pe câmpul respectiv apoi se

completează Validation Rule şi Validation Text. 4 După cum se observă delimitatorul argumentelor funcţiilor este punctul şi virgula (;), dar poate fi şi virgula (,), funcţie de setările regionale

ale sistemului de operare.

Page 4: Exercitii Access Rezolvate

Gestiune produse finite

1.3.2 Restrictii la nivel de inregistrare5

În tabela Incasari, pentru chitante suma trebuie să fie mai mică de 500 de lei:

Validation Rule: IIf(UCase([tip de document])="CHITANŢĂ";IIf([suma]<=500;True;False);True)

Validation Text: "CU CHITANŢĂ, NU MAI MULT DE 500 RON !!!"

1.4 POPULAREA CU DATE Baza de date utilizabilă pentru antrenament la popularea cu date. Conţine

deja chei primare, legăturile între tabele, restricţii gestiune produse finite - cu restrictii.accdb

Ordinea de populare (introducere de date) se face începând cu tabelele părinte, apoi cu tabelele copil.

Baza de date pentru antrenarea interogărilor, formularelor, rapoartelor etc.

gestiune produse finite - populata.accdb

5 Atunci când regula de validare solicită cel puţin două atribute, din meniul Design se alege opţiunea Property Sheet, afişând un panou în

partea dreaptă, unde se introduce regula de validare în fereastra Validation Rule. Dacă se doreşte să se lucreze mai uşor, se poate apăsa pe

butonul cu trei puncte ( ), care apare când se selectează opţiunea Validation Rule. Astfel va fi afişat formularul Expression Builder.

Page 5: Exercitii Access Rezolvate

Gestiune produse finite

1.5 INTEROGĂRI

1.5.1 Filtrarea şi ordonarea directă a datelor dintr-o tabelă6

Ex. 1 Să se identifice clienţii din localitatea cu codul 1002, folosindu-se filtrarea directă a datelor.

1.5.2 Actualizarea directă a datelor

Adăugare Ştergere

1.5.3 Crearea de interogări cu instrumente de tip Wizard

1.5.3.1 Crearea unei interogări cu Simple Query Wizard

Ex. 2 Să se obţină o listă cu toţi clienţii şi toate localităţile din care aceştia fac parte. Lista trebuie să conţină numele

clienţilor şi numele localităţilor.

6 Se foloseşte doar pentru a obţine rezultate rapide, dar nu se prea practică într-o manieră profesionistă.

Page 6: Exercitii Access Rezolvate

Gestiune produse finite

1.5.3.2 Crearea unei interogări cu Crosstab Query Wizard

Ex. 3 Să se creeze o listă cu încasările de la fiecare client pe tipuri de documente. Lista trebuie să conţină pe prima

coloană clienţii şi câte o coloană pentru fiecare tip de document. La intersecţia fiecărui client cu fiecare tip de

document trebuie să apară suma încasărilor.

Page 7: Exercitii Access Rezolvate

Gestiune produse finite

sau sau

TRANSFORM Sum([suma]) AS SumOfsuma

SELECT [cod client], Sum([suma]) AS [Total suma] FROM incasari

GROUP BY [cod client]

PIVOT [tip de document]

1.5.4 Definirea interogărilor prin Query Design7

1.5.4.1 Interogări de selecţie

Ex. 4 Să se întocmească lista clienţilor din localitatea cu codul 1002. lista va cuprinde numai denumirea clienţilor.

SELECT [denumire client]

FROM clienti WHERE [cod localitate]="1002"

Dacă, în loc de select, din meniul QUERY se alege opţiunea Make-Table Query, se poate crea o nouă tabelă cu rezultatul

respectivei interogări. Mult mai simplu este, introducerea la fraza SQL, expresia INTO si numele noii tabele:

SELECT [denumire client] INTO [Tabela Noua]

FROM clienti

WHERE [cod localitate]="1002"

Parametru

Pentru realizarea unui parametru cu specificaţie clară a tipului de dată solicitat, se alege din meniul Design, opţiunea

Parameters, unde, în formularul ce apare se introduce expresia ce solicită inserarea unui element.

Aceeaşi expresie se introduce ca şi criteriu.

7 Ca şi în exemplificările de mai sus, vom prezenta la fiecare interogare utilizând Query Design şi alternativa SQL.

Page 8: Exercitii Access Rezolvate

Gestiune produse finite

PARAMETERS [Introdu codul localitatii] Text ( 255 ); SELECT [denumire client], [cod localitate]

FROM clienti

WHERE [cod localitate]=[Introdu codul localitatii]

Ex. 5 Care este conţinutul avizului de expediţie cu numărul 1002. lista va conţine câmpurile: data aviz, denumire gestiune,

denumire client, denumire localitate (localitatea clientului), denumire produs, cantitate, procent TVA, preţ.

1.5.4.2 Interogări de adăugare

Ex. 6 Introduceţi în tabela Clienţi clientul SC BENNY HILL S.R.L. cu codul 1008, din localitatea cu codul 1001, ce are

soldul 777.

Page 9: Exercitii Access Rezolvate

Gestiune produse finite

1.5.4.3 Interogări de modificare

Ex. 7 Să se modifice pentru clientul cu codul 1008 soldul în 888

1.5.4.4 Interogări de ştergere

Ex. 8 Ştergeţi clientul cu codul 1008

1.5.4.5 Interogare folosind două tabele

SELECT [denumire client], [denumire localitate]

FROM localitati INNER JOIN clienti ON localitati.[cod localitate] = clienti.[cod localitate]

Page 10: Exercitii Access Rezolvate

Gestiune produse finite

1.5.5 Interogări SQL

1.5.5.1 Primele argumente ale interogărilor SQL

Formatul specific unei interogări:

SELECT câmp_1, câmp_2, ……, câmp_n FROM tabel_1, tabel_2, ………., tabel_n

WHERE condiţie

ORDER BY câmp_i, câmp_j

Ex. 9 Lista clienţilor din localitatea cu codul 1002. Lista va cuprinde numai denumirea clienţilor.

SELECT [denumire client]

FROM clienti WHERE [cod localitate]= "1002"

Obs: Constantele de tip text pot fi scrise între ghilimele (“) sau apostrof (’)

Ex. 10 Care sunt clienţii din localitatea cu codul 1006 care au soldul >1000. Lista va cuprinde: denumire client, cod client.

SELECT [denumire client], [cod client] FROM clienti

WHERE [cod localitate]="1006" AND sold>1000

Obs: Pot fi folosiţi şi operatorii logici (AND/OR/NOT)

Ex. 11 Care sunt documentele de intrare emise între 15 februarie şi 15 martie 2006. Lista va cuprinde numărul şi data documentului.

SELECT [numar nota intrare], [data document]

FROM [documente de intrare] WHERE [data document]>=#2006/02/15#

AND [data document]<=#2006/03/15#

Obs: Data calendaristică s-a scris în format ISO: YYYY/MM/DD. Se pot folosi şi: DD/MM/YYYY sau MM/DD/YYYY.

În loc de slash (/) se poate folosi ca delimitator şi cratimă (-)

Ex. 12 Care sunt clienţii din judeţul cu codul IS. Lista va cuprinde doar denumirea clienţilor.

Varianta 18)

SELECT [denumire client]

FROM clienti, localitati WHERE clienti.[cod localitate]=localitati.[cod localitate]

AND [denumire judet]= "IS"

Varianta 2)

SELECT [denumire client]

FROM localitati INNER JOIN clienti ON localitati.[cod localitate] = clienti.[cod localitate]

WHERE [denumire judet]="IS"

Ex. 13 Întocmiţi lista clienţilor din judeţul Iaşi în ordinea alfabetică a denumirii acestora. Lista va cuprinde: denumirea

clientului şi soldul acestuia.

SELECT [denumire client], [sold]

FROM clienti c, localitati l

WHERE c.[cod localitate]=l.[cod localitate] AND [denumire judet]= "IS"

ORDER BY [denumire client]

8 Atunci când se lucrează cu interogări SQL, un avantaj al scrierii eficiente este redată de alias-uri: în loc de numele unei tabele, se declară o

literă sau două pentru a înlocui numele tabelei cu acel alias.

SELECT [denumire client] FROM clienti c, localitati l WHERE c.[cod localitate]=l.[cod localitate]

AND [denumire judet]= "IS"

Page 11: Exercitii Access Rezolvate

Gestiune produse finite Ex. 14 Întocmiţi lista clienţilor din judeţul Iaşi, ordonată după soldul descrescător. Lista va cuprinde denumire client şi sold

SELECT [denumire client], sold

FROM clienti AS c, localitati AS l WHERE c.[cod localitate]=l.[cod localitate]

AND [denumire judet]="IS" ORDER BY sold DESC

1.5.5.2 Utilizarea principalilor operatori

Operatori: =,<,>,<=,>=,AND, OR, BETWEEN, UNION, LIKE, IN

Reluarea Ex. 11

SELECT [numar nota intrare], [data document] FROM [documente de intrare]

WHERE [data document] BETWEEN #2006/02/15# AND #2006/03/15#

Ex. 15 Ce încasări s-au făcut în perioada 1 ianuarie 2006 – 31 martie 2006, cu valori între 1000 şi 10000 de la clienţii a

căror denumire începe cu una din literele de la A la S.

Varianta 1)

SELECT i.*

FROM incasari i, clienti c WHERE i.[cod client]=c.[cod client]

AND [data document] BETWEEN #2006/01/01# AND #2006/03/31# AND suma BETWEEN 1000 AND 10000

AND MID([denumire client],1,1) BETWEEN "A" AND "S"

Varianta 2)

SELECT i.*

FROM incasari i, clienti c

WHERE i.[cod client]=c.[cod client] AND MONTH([data document]) BETWEEN 1 AND 3

AND YEAR([data document]) AND suma BETWEEN 1000 AND 10000

AND LEFT([denumire client],1) BETWEEN "A" AND "S"

Ex. 16 Care sunt codurile produselor ce apar în documentele de intrare sau în avizele de expediţie?

SELECT [cod produs] FROM [linii in documente] UNION

SELECT [cod produs] FROM [linii in avize]

Obs: Cu ajutorul operatorului UNION se realizează reuniunea a două sau mai multe interogări.

Se elimină automat liniile identice. Dacă se doreşte obţinerea tuturor liniilor din respectivele mulţimi, se foloseşte clauza ALL

Ex. 17 Întocmiţi fişa produsului având codul 1001 (fişa produsului conţine stocul iniţial, intrările şi ieşirile pentru produsul

respectiv)

SELECT 'Stoc initial' AS TipDoc, SPACE(8) AS NrDoc, stoc AS Cantitate

FROM produse WHERE [cod produs] = '1001'

UNION

SELECT 'Nota intrare', [numar nota intrare], cantitate FROM [linii in documente]

WHERE [cod produs]='1001' UNION

SELECT 'Aviz de expeditie', [numar aviz], cantitate FROM [linii in avize]

WHERE [cod produs]='1001'

Obs: Funcţia SPACE returnează un şir de caractere spaţiu de o anumită lungime.

Ex. 18 Întocmiţi fişa produsului având codul 1001, în care ordinea liniilor din rezultat să fie ordinea cronologică de apariţie

a documentelor (prima linie va fi ocupată de soldul iniţial)

SELECT #2006-01-01# AS Data, 1 AS Ord, 'Stoc initial' AS TipDoc, SPACE(8) AS NrDoc, Stoc AS

Cantitate

Page 12: Exercitii Access Rezolvate

Gestiune produse finite

FROM produse WHERE [cod produs]='1001'

UNION

SELECT [data document], 2, 'Nota intrare', i.[numar nota intrare], cantitate FROM [linii in documente] L, [documente de intrare] i

UNION SELECT [data aviz], 3, 'Aviz de expeditie', a.[numar aviz], cantitate

FROM [linii in avize] L, [avize de expeditie] a

WHERE L.[numar aviz] = a.[numar aviz] AND [cod produs]='1001'

Ex. 19 Care sunt clienţii de tip SRL9?

SELECT * FROM clienti

WHERE [denumire client] LIKE '*SRL*'

Ex. 20 Care sunt gestionarii care au numele de familie format din 7 caractere şi se termină în ‘escu’10

?

SELECT *

FROM gestiune WHERE UCASE([nume gestionar]) LIKE '???ESCU*'

Ex. 21 Întocmiţi lista clienţilor din judeţul Iaşi, Vaslui, Suceava, Botoşani.

Varianta 1)

SELECT c.* FROM clienti c, localitati l

WHERE c.[cod localitate]=l.[cod localitate] AND l.[denumire judet] IN ('IS','VS', 'SV', 'BT')

Obs: Operatorul IN este folosit pentru a testa dacă o expresie se regăseşte într-o listă de valori.

Varianta 2) Se poate şi prin utilizarea operatorului logic OR

SELECT c.* FROM clienti c, localitati l

WHERE c.[cod localitate]=l.[cod localitate] AND (l.[denumire judet] = 'IS'

OR l.[denumire judet] = 'VS'

OR l.[denumire judet] = 'SV' OR l.[denumire judet] = 'BT')

Varianta 3) Mulţimea în care caută IN nu e neapărat o listă de valori; poate fi mulţimea obţinută dintr-o subinterogare

SELECT * FROM clienti

WHERE [cod localitate] IN (SELECT[cod localitate]

FROM localitati WHERE [denumire judet] IN ('IS', 'VS', 'SV', 'BT'))

1.5.5.3 Funcţii de agregare

COUNT, SUM, AVG, MIN, MAX

Ex. 22 Câţi clienţi aveau soldul mai mare ca zero?

SELECT COUNT (*)

FROM clienti WHERE sold>0

Ex. 23 Câţi clienţi sunt din judeţul Iaşi?

SELECT COUNT (*) FROM clienti

9 Caracterul asterix (*) înlocuieşte un şir de caractere 10 Semnul întrebării (?) înlocuieşte un singur caracter.

Page 13: Exercitii Access Rezolvate

Gestiune produse finite

WHERE [cod localitate] IN ( SELECT [cod localitate]

FROM localitati

WHERE [denumire judet]='IS')

Ex. 24 Câte documente de intrare s-au întocmit în gestiunea lui Popescu în anul 2006

SELECT COUNT (*)

FROM gestiune g, [documente de intrare] d WHERE g.[cod gestiune]=d.[cod gestiune]

AND UCASE([nume gestionar]) LIKE '*POPESCU*' AND YEAR([data document])=2006

Ex. 25 Care este valoarea încasărilor de la clientul cu codul 1001?

SELECT SUM(suma) AS Total FROM incasari

WHERE [cod client]='1001'

Ex. 26 Care a fost suma totală a soldurilor clienţilor?

SELECT SUM(sold) AS Total

FROM clienti

Ex. 27 Care este suma încasată de la clienţii din municipiul Iaşi?

Varianta 1)

SELECT SUM(i.suma) AS Total

FROM incasari i, clienti c, localitati l WHERE i.[cod client]=c.[cod client]

AND c.[cod localitate]=l.[cod localitate]

AND UCASE([denumire localitate]) LIKE 'IA?I'

Varianta 1’) Folosind o subinterogare şi operatorul IN

SELECT SUM(suma) AS Total

FROM incasari WHERE [cod client] IN (

SELECT [cod client] FROM clienti c, localitati l

WHERE c.[cod localitate]=l.[cod localitate]

AND UCASE([denumire localitate]) LIKE 'IA?I')

Varianta 2) Folosind o subinterogare şi operatorul IN, dar o subinterogare mai mică

SELECT SUM(i.suma) AS Total

FROM incasari i, clienti c WHERE i.[cod client]=c.[cod client]

AND c.[cod localitate] IN ( SELECT [cod localitate]

FROM localitati WHERE UCASE([denumire localitate]) LIKE 'IA?I')

Varianta 3) Folosind o subinterogare şi operatorul NOT IN

SELECT SUM(suma) AS Total FROM incasari

WHERE [cod client] NOT IN (

SELECT [cod client] FROM clienti c, localitati l

WHERE c.[cod localitate]=l.[cod localitate] AND UCASE([denumire localitate]) NOT LIKE 'IA?I')

Varianta 4) Folosind două subinterogări imbricate

SELECT SUM(suma) AS Total FROM incasari

WHERE [cod client] IN (

SELECT [cod client] FROM clienti c

Page 14: Exercitii Access Rezolvate

Gestiune produse finite

WHERE [cod localitate] IN ( SELECT [cod localitate]

FROM localitati

WHERE UCASE([denumire localitate]) LIKE 'IA?I'))

Varianta 5) Folosind funcţia IIF

SELECT SUM(IIF([denumire localitate] LIKE 'Ia?i', i.suma,0)) AS Total

FROM incasari i, clienti c, localitati l WHERE i.[cod client]=c.[cod client]

AND c.[cod localitate]=l.[cod localitate]

Ex. 28 Care este volumul încasărilor din luna februarie 2006?

SELECT SUM(i.suma) AS Total

FROM incasari i WHERE MONTH([data document])=2

AND YEAR([data document])=2006

Ex. 29 Care este totalul vânzărilor din luna februarie 2006?

SELECT SUM(cantitate*pret*(1+[procent TVA]/100))

FROM [avize de expeditie] a, [linii in avize] l

WHERE a.[numar aviz]=l.[numar aviz] AND MONTH([data aviz])=2

AND YEAR([data aviz])=2006

Ex. 30 Care este totalul valorii producţiei din luna februarie 2006?

SELECT SUM(cantitate*pret) AS Productie

FROM [documente de intrare] d, [linii in documente] l, produse p WHERE d.[numar nota intrare]=l.[numar nota intrare]

AND l.[cod produs]=p.[cod produs]

AND MONTH([data document])=2 AND YEAR([data document])=2006

Ex. 31 Care este valoarea totală a avizului de expediţie cu numărul 1001?

SELECT SUM(cantitate*pret*(1+[procent TVA]/100)) AS [Valoare Totala] FROM [linii in avize]

WHERE [numar aviz]='1001'

Ex. 32 Ce cantitate de lapte s-a vândut, pe piaţa municipiului Iaşi, în anul 2006?

SELECT SUM(la.cantitate) AS Cantitate_Totala

FROM localitati l, clienti c, [avize de expeditie] a, [linii in avize] la, produse p WHERE l.[cod localitate]=c.[cod localitate]

AND c.[cod client]=a.[cod client] AND a.[numar aviz]=la.[numar aviz]

AND la.[cod produs]=p.[cod produs]

AND UCASE(l.[denumire localitate]) LIKE 'IAS?I' AND UCASE(p.[denumire produs]) LIKE '*LAPTE*'

Ex. 33 Care este valoarea medie a încasărilor?

SELECT AVG(suma) AS [Media incasarilor] FROM incasari

Ex. 34 Care este produsul care avea la începutul anului cel mai mare stoc?

SELECT [denumire produs] FROM produse

WHERE stoc IN ( SELECT MAX(stoc) FROM produse)

Ex. 35 Care este cea mai mare încasare din anul 2006?

SELECT * FROM incasari

WHERE suma IN(

SELECT MAX(suma)

Page 15: Exercitii Access Rezolvate

Gestiune produse finite

FROM incasari WHERE YEAR([data document])=2006)

1.5.5.4 Gruparea înregistrărilor

Ex. 36 Care sunt documentele de intrare cu cele mai multe linii (pot exista mai multe documente cu acelaşi număr maxim de

linii)? Lista va cuprinde doar numerele documentelor de intrare.

SELECT [numar nota intrare] FROM [linii in documente]

GROUP BY [numar nota intrare] HAVING COUNT(*)=(

SELECT MAX(cate) FROM ( SELECT COUNT(*) AS cate

FROM [linii in documente]

GROUP BY [numar nota intrare]))

Obs: Clauza GROUP BY determină grupuri pe baza valorilor luate de unul sau mai multe câmpuri. Această clauză are sens

doar dacă se foloseşte în interogare cel puţin o funcţie de agregare.

Clauza HAVING este asemănătoare cu clauza WHERE, numai că operează cu funcţii de agregare asupra grupului.

Baza de date completată pentru verificare

gestiune produse finite - finala.accdb

1.6 RAPOARTE

1.6.1 Asistentul de rapoarte

Ex. 1 Să se realizeze un raport simplu care să conţină toate informaţiile despre gestiunile existente şi persoanele

responsabile cu administrarea lor.

Alegerea tabelei gestiune, fără a se deschide, dând clic panoul obiecte, din stânga. Apoi, click pe opţiunea Report, din meniul

Create, grupul de butoane Report11

.

Rezultatul este afişat în modul de vizualizare Layout View, de unde se mai pot ajusta dimensiunile obiectelor. Dacă se doreşte

vizualizarea produsului finit, se alege Print Preview sau Report View.

Ex. 2 Periodic serviciul vânzări solicită o listă actualizată a clienţilor pentru a analiza sumele încasate şi debitele pe care

le au produsele vândute fiecăruia dintre ei.

11 În aceeaşi manieră rapidă se poate realiza şi un formular, în cazul de faţă pentru actualizarea gestiunii.

Page 16: Exercitii Access Rezolvate

Gestiune produse finite

Page 17: Exercitii Access Rezolvate

Gestiune produse finite

1.6.2 Raport simplu din două tabele

Ex. 3 Periodic, serviciul de vânzări solicită lista actualizată a clienţilor în vederea elaborării politicilor de marketing pe

localităţi.

1. Proiectarea raportului

Macheta raportului Lista clienţilor la data de 3/21/2007

Codul

localităţii

Denumirea

localităţii

Denumirea

judeţului

Codul

clientului

Denumirea clientului

1005 Bârlad VS 1001 SC KOMBASAN SA

1002 Iaşi IS 1002 SC UNIREA SA

1002 Iaşi IS 1003 SC HOFFER SA

1006 Galaţi GL 1004 SC CORAL SRL

1005 Bârlad VS 1005 SC AMBRAS SA

1006 Galaţi GL 1006 SC VADUL SA

1007 Tecuci GL 1007 SC HORBAD SRL

Pag 1

2. Pregătirea datelor sursă

Interogarea Rap_3_clienti_pe_localitati12

SELECT l.[cod localitate], [denumire localitate], [denumire judet], [cod client], [denumire client]

FROM localitati l, clienti c WHERE l.[cod localitate]=c.[cod localitate]

3. Construirea raportului

12 Readucem aminte că, pentru a economisi timp, în loc de a scrie numele unei tabele, într-o interogare se poate folosi „alias-ul” care ajută

înlocuind un cuvânt sau mai multe cu o literă sau două... (astfel, în loc de Localităţi ajunge doar un L, iar în loc de Clienţi se poate folosi un

sugestiv C)

Page 18: Exercitii Access Rezolvate

Gestiune produse finite Click dreapta pe raport şi selectarea opţiunii Properties sau din meniul Design, alegerea opţiunii Property Sheet.

Inserarea câmpurilor prin tragere, din acest tabel, în zona Detail a raportului.

Controlul de tip Label, care conţine denumirea câmpului respectiv va fi dusă în zona Page

Header. Afişarea/ascunderea zonelor Page Header/Footer sau Report Header/Footer se poate

realiza fie dând clic pe butoanele din meniul Arrange sau din meniul contextual, dând clic

dreapta pe una din „benzile” pe care scrie Detail, Page Header sau

Report Header ori Report Footer sau Page Footer.

Atribuirea unui titlu raportului şi inserarea datei curente se face alegând opţiunea Title, respectiv

Date &Time din meniul Design. Va apărea un obiect de tip Label, în care se introduce textul: „Lista

clienţilor pe localităţi la data de” şi formatarea textului de tip Garamond, 16 pt.

1.6.3 Raport cu gruparea înregistrărilor şi subtotaluri

Ex. 4 Periodic, serviciul marketing solicită o situaţie a produselor vândute, grupate pe clienţi, care să conţină denumirea

clienţilor, denumirea produselor, cantităţile livrate, unităţile de măsură, procentul TVA, preţurile, numărul şi data

avizelor de expediţie. Valoarea totală a vânzărilor se va determina atât pentru fiecare client, cât şi pentru toţi clienţii

la sfârşitul raportului.

1. Proiectarea raportului

Lista produselor vândute clienţilor până la data 3/21/2006

Denumirea clientului Numărul avizului

Data avizului

Denumirea produsului

Cantitatea Unitatea de măsură

Procentul TVA

Preţul

SC HOFFER SA

1005 02.06.2006 Cornuri 30 Buc 19 25

1006 02.06.2006 Lapte 12 L 19 12,5

Valoarea produselor vândute clientului SC HOFFER SA 17,5

SC KOMBASAN SA Kg

1002 02.05.2006 Biscuiţi 25 Buc 19 12

1002 02.05.2006 Covrigi 10 Kg 19 15

1003 02.07.2006 Colaci 4 Buc 19 20

Valoarea produselor vândute clientului SC KOMBASAN SA 47

Valoarea totală a produselor vândute 64,5

2. Pregătirea datelor13

SELECT [denumire client], AE.[numar aviz], [data aviz], [denumire produs], cantitate, [unitate de

masura], [procent TVA], LA.pret, LA.[cod produs]

13 După cum se remarcă, reamintim că după SELECT, câmpurile care sunt unice (nu se regăsesc în mai multe tabele, cum este deseori cazul

cheilor sau, ca în exemplul nostru, PRET, nu necesită referinţa la tabelă. Obligatoriu, însă ea se va trece la realizarea „punţii”, prin

intermediul cheilor. Aliasul poate fi precedat sau nu de particula AS: clienti C este identic cu clienti AS C

Page 19: Exercitii Access Rezolvate

Gestiune produse finite

FROM clienti C, [avize de expeditie] AE, [linii in avize] LA, produse P WHERE C.[cod client]=AE.[cod client] AND AE.[numar aviz]=LA.[numar aviz]

AND LA.[cod produs]=P.[cod produs]

3. Construirea raportului

Aidoma exemplului anterior

4. Gruparea înregistrărilor. Meniul Design Group & Sort. La denumire client, în partea inferioară a ferestrei se alege

pentru Group Header, Group Footer se alege opţiunea Yes.

Pentru a calcula suma, se introduce un obiect de tip TextBox în zona denumire client Footer şi se dă apoi clic dreapta pe acest

obiect, alegând din meniul contextual opţiunea Properties.

1.7 FORMULARE Ex. 5 Să se realizeze un formular care să permită actualizarea ambelor tabele: localitati şi clienti.

Page 20: Exercitii Access Rezolvate

Gestiune produse finite 4. Proiectarea formularului

Macheta formularului Actualizare clienţi

Cod localitate

Denumire localitate

Judeţ

Clienţi Cod client Denumire client Sold

5. Definirea formularului cu asistentul de formulare. Din meniul Create se alege dând clic pe More Forms, opţiunea Form

wizard.

Page 21: Exercitii Access Rezolvate

Gestiune produse finite

Ex. 6 Să se realizeze un formular, denumit Avize de expediţie, pentru actualizarea informaţiilor despre produsele livrate

clienţilor după macheta următoare

Actualizare avize de expediţie Data curentă

Numărul avizului Data Denumirea clientului

Denumire produs Cantitate Unitate de măsură Procent TVA Preţ

Aviz nou

Căutare

Ştergere

Valoarea totală a avizului de expediţie numărul Salvare

Închidere formular

|< < > >|

Page 22: Exercitii Access Rezolvate

Gestiune produse finite

Page 23: Exercitii Access Rezolvate

Evidenţă studenţi

2 EVIDENŢĂ STUDENŢI

2.1 Crearea tabelelor şi definirea restricţiilor Baza de date necesară pentru antrenarea cheilor, restricţiilor, regulilor de validare

EvStud - simpla.accdb

2.1.1 Crearea tabelelor şi declararea valorilor implicite Primary

Key

Atribut

(Field Name)

Tip

(Data Type)

Lungime

(Field Size)

Valori implicite

(Default Value)

STUDENTI

Matricol Text 10

NumePren Text 40

CNP Text 15

Specializare Text 50 "Trunchi comun"

AnStudii Number Long Integer 1

Fstudii Text 2 "ID"

Grupa Number Long Integer 1

DISCIPLINE

CodDisc Text 6

DenumireDisc Text 40

NrCredite Number Long Integer 6

NrOreCurs Number Long Integer 28

NrOreSeminar Number Long Integer 28

EXAMENE

Matricol Text 10

CodDisc Text 6 "AE1101"

DataEx Date/Time IIf(Date()<#20/01/2006#;Date();#20/01/2006#)

NotaEx Number Long Integer 7

2.1.2 Reguli de validare

2.1.2.1 La nivel de atribut

Atribut

(Field Name)

Restrictii

Validation Rule

Validation Text

STUDENTI

Matricol StrComp(UCase([Matricol]);[Matricol];0)=0 Literele din matricol, obligatoriu cu

majuscule!

Specializare StrComp(Left(UCase([Specializare]);1);Left([Specializare];1);0)=0 Prima litera din Specializare e majuscula!

AnStudii [AnStudii] Between 1 And 5 An studii intre 1 si 5!

Fstudii [Fstudii] In ('ZI';'ID') Forma studii doar ZI sau ID!

Grupa [Grupa]>0 Nr grupei pozitiv!

DISCIPLINE

CodDisc StrComp(UCase([CodDisc]);[CodDisc];0)=0 Literele din CodDisc cu majuscule!

NrCredite <=8 Nr credite nu mai mult de 8!

NrOreCurs <=42 Nr orelor de curs nu mai mult de 42!

NrOreSeminar <=42 Nr orelor de seminar nu mai mult de 42!

EXAMENE

DataEx Month([DataEx]) In (1;2;5;6;7) And Year([DataEx])=2006 Numai lunile IAN, FEB, MAI, IUN sau IUL

din 2006!

NotaEx Between 1 And 10 Nota este cuprinsa intre 1 - 10!

2.1.2.2 La nivel de înregistrare

Se deschide tabela în modul Design View, apoi se alege, din meniul View, opţiunea Properties

Restrictii

(Validation Rule)

Textul de afişat

(Validation Text)

Tabela (Table) STUDENTI

[AnStudii]<>4 Or [AnStudii]=4 And [Grupa]<=10 La anul 4 de studiu pot fi maximum 10 grupe!

Tabela (Table) DISCIPLINE

[NrOreCurs]+[NrOreSeminar]<=70 Nr ore curs + ore seminar cel mult 70!

Tabela (Table) EXAMENE

[CodDisc]<>'AE1101' Or [CodDisc]='AE1101' And [DataEx] In Examenele la Macroeconomie au fost programate pe 28 ian,

Page 24: Exercitii Access Rezolvate

Evidenţă studenţi (#28.01.2006#;#02.11.2006#;#07.04.2006#) 11 feb si 4 iul!

2.1.3 Declararea restricţiilor referenţiale Legătura se realizează apelând în meniul DATABASE TOOLS, opţiunea RELATIONSHIPS.

În tabela părinte, se dă clic pe cheia primară, se ţine apăsat butonul stânga şi se deplasează peste câmpul cu acelaşi

nume din tabela părinte şi se eliberează apoi mouse-ul.

2.2 Editarea tabelelor şi navigarea prin înregistrări În gestionarul de obiecte, se apasă dublu clic pe tabela ce se doreşte a fi editată.

Page 25: Exercitii Access Rezolvate

Evidenţă studenţi

2.3 Obţinerea de informaţii din baza de date

Baza de date cu restricţii şi populată, pentru antrenamentul cu interogări.

EvStud - populata.accdb

2.3.1 Setul nr. 1 de întrebări

a) Care sunt studenţii din anul III, specializarea Informatică economică, ZI?

Varianta 1 – utilizarea Query Design

Din meniul Create se alege Query Design, apoi tabela cerută

Varianta 2 – utilizarea SQL View

Din meniul Create se alege Query Design, dar în formularul ce apare se apasă butonul Close şi nu Add;

se alege, din meniul Design, butonul View (SQL

View)14

.

Notă: Modalitatea de scriere în modul SQL View nu este dependentă

de capitalizarea sau nu a literelor dar este mai elegant. De asemenea,

tot scriptul ar putea fi scris pe un singur rând dar se citeşte mai uşor.

După ce a fost finalizată operaţiunea prin una din cele

două variante, se alege opţiunea Run din meniul Query

sau butonul de forma semnului exclamării de pe bara de butoane (!).

b) Ce studenţi trebuie felicitaţi de Sf. Vasile (1 ianuarie)?

Se utilizează, în cadrul criteriului, simbolul % înainte şi după cuvântul/cuvintele folosite ca şi

condiţie, între primul simbol % şi cuvânt introducându-se şi spaţiu pentru a sugera identificarea

cuvântului al doilea.

14 O altă modalitate este: în zona alocată tabelei (gri) sau pe banda de titlu (Query1: Select Query) se apasă mouse-ul cu clic

dreapta şi se alege opţiunea SQL View.

Page 26: Exercitii Access Rezolvate

Evidenţă studenţi

Varianta 1 – utilizarea Query Design

Notă: În cazul în care nu

funcţionează condiţionarea utilizând

simbolul %, atunci, sigur va merge

cu simbolul *, nemailăsând spaţiu

între simbolul * şi cuvânt, acest

simbol având rolul de a înlocui un

şir de caractere.

c) Ce studenţi trebuie felicitaţi de Sf. Ion (7 ianuarie)?

d) Componenţa grupei 4 de la specializarea Contabilitate şi Informatică de Gestiune, ZI, anul III;

Notă: Pentru a face proba, în tabela Studenţi am mai introdus un nou student.

a) Care sunt disciplinele cu peste 6 credite?

b) Care sunt disciplinele cu peste 28 de ore de curs şi sub 42 de ore de seminar?

Varianta 2 – utilizarea SQL View

Page 27: Exercitii Access Rezolvate

Evidenţă studenţi

c) În ce zile a susţinut examene studentul cu matricolul ELZ02001?

d) La ce discipline a susţinut examene studentul cu matricolul ELZ02001?

e) Care este codul disciplinelor la care s-au susţinut examene în luna februarie 2006?

2.3.2 Setul nr. 2 de întrebări

a) zilele în care s-a susţinut examen la Microeconomie;

b) numele studenţilor examinaţi pe 28 ianuarie 2006;

Note: 1. Clauza DISTINCT elimină apariţia repetată a unui examen, în cazul în care ar da mai multe examene în aceeaşi zi.

2. Se va avea în vedere formatul datei. Este posibil ca cel românesc să nu fie acceptat, de aceea este bine a se încerca,

spre exemplu şi formatul: #1/28/2006#. A nu se uita de simbolul #.

c) Care sunt studenţii de la Trunchi comun, Zi, Anul I care au picat măcar un examen în februarie

2006?

Page 28: Exercitii Access Rezolvate

Evidenţă studenţi

2.3.3 Setul nr. 3 de întrebări

a) denumirea disciplinelor la care a susţinut examen studentul Lama W. Dalai, datele şi notele

obţinute;

b) numele studenţilor care au picat examenul Baze de date I măcar o dată;

c) rezultatele din 14 februarie 2006 ale grupei 1 din anul IV, specializarea Marketing, zi, la

disciplina Cercetări de marketing (situaţia va cuprinde matricolul, numele şi nota);

Notă: Pentru a face proba, a fost introdus un student la specializarea cerută şi specializarea Marketing (CodDisc: AE4002)

2.3.4 Setul nr. 4 de întrebări

a) Câte discipline au 7 credite?

b) Câţi studenţi sunt în anul III, specializarea Informatică Economică, cursuri de zi?

Page 29: Exercitii Access Rezolvate

Evidenţă studenţi

c) Câte credite a obţinut studentul Barbu I. Vasile (atenţie, nu se iau în calcul examenele

”picate”!)?

d) Câte credite s-au obţinut la nivelul anului III al specializării Informatică economică, Zi?

e) Care este cea mai mare notă la Microeconomie?

Notă: Chiar dacă nu este necesar, este mai prudent a plasa un câmp între paranteze pătrate, atunci când el reprezintă

argumentul unei funcţii, adică este plasat şi între paranteze rotunde. Parantezele pătrate se folosesc atunci când

denumirea unui câmp, tabelă etc. au mai mult de un cuvânt.

f) Care este cea mai mică notă obţinută la nivelul anului III, specializarea Informatică Economică,

Zi?

g) Care este media grupei 1 din anul III, specializarea Informatică Economică, Zi, la disciplina Baze

de date I pentru examenul susţinut pe 24 ianuarie 2006?

Page 30: Exercitii Access Rezolvate

Evidenţă studenţi

h) Câte puncte (nr. de credite înmulţit cu nota de la examen) a obţinut Lama W. Dalai (atenţie, nu

se iau în calcul examenele ”picate”!)?

2.3.5 Setul nr. 5 de întrebări

a) La ce disciplină a susţinut primul examen studentul Barbu I. Vasile?

b) Care a fost disciplina/disciplinele la care s-au susţinut examenele în ultima zi de sesiune din

februarie 2006?

c) La ce discipline studentul Barbu I. Vasile a obţinut note peste media sa?

Page 31: Exercitii Access Rezolvate

Evidenţă studenţi

d) Care a fost ultimul examen promovat de studentul Barbu I. Vasile?

e) Care este media notelor obţinute la primul examen de Microeconomie de la anul I?

2.3.6 Setul nr. 6 de întrebări

a) Câţi studenţi sunt în fiecare an de studii?

b) Câte note sub 5 au fost, în total, la fiecare disciplină?

c) Câte examene a susţinut (la câte s-a prezentat) fiecare student din anul I?

Page 32: Exercitii Access Rezolvate

Evidenţă studenţi

d) Câţi studenţi au susţinut examene în fiecare zi de sesiune?

e) Câţi studenţi au fost examinaţi în cele patru luni de sesiuni, pentru fiecare disciplină?

f) Numărul de examene picate, pentru fiecare an de studii.

2.3.7 Setul nr. 7 de întrebări

a) Care dintre anii de studii numără mai mult de 1000 de studenţi?

Notă: Pentru a putea verifica interogarea, am ales ca şi condiţie cifra 2 în locul lui 1000, neavând o bază de date cu peste 1000

de înregistrări.

b) Care sunt studenţii care au susţinut în sesiunile ianuarie-februarie 2006 mai mult de 3 examene?

c) Ştiind că facultatea are doar patru săli pentru examinare, să se extragă zilele în care numărul

examenelor este mai mare decât cel al sălilor.

Baza de date rezolvată, pentru verificare

EvStud - rezolvata.mdb

Page 33: Exercitii Access Rezolvate

Modele lucrări practice

3 MODELE LUCRĂRI PRACTICE

3.1 Lucrarea practică nr. 1

Transport-rez.mdb

Dispuneti de baza de date TRANSPORT cu tabelele AUTOBUZE(Numar, Tip, Locuri), PLECARI(Ora,

Destinatie, Marca, Numar) şi SOFERI(Marca, Numepren, CNP, Strada, Numar, Telefon).

Se cere:

Să se analizeze structurile celor trei tabele şi să se stabilească cheile primare şi, unde este posibil,

cheile alternative.

Să se stabilească legăturile permanente dintre tabele.

Să se definească următoarele restricţii:

o În tabela Autobuze literele din câmpul Numar să fie majuscule.

o În tabela Plecari, valorile câmpului Ora să fie cuprinse între 6 şi 22.

o În tabela Plecari, şoferului Zaharia Cezar (marca 1010) îi sunt interzise cursele spre Bacau.

Să se scrie o frază SELECT SQL pentru obţinerea listei cu plecările spre Bacău, realizate cu autobuze

care au mai mult de 40 de locuri. Lista va oferi următoarele informaţii: ora plecării, numărul de

înmatriculare, tipul autobuzului, numărul de locuri.

Propunere de rezolvare cheile primare / cheile alternative: a se vedea în figura de mai jos

15.

legăturile permanente dintre tabele16

.

restricţii:

o În tabela Autobuze literele din câmpul Numar să fie majuscule.

StrComp(UCase([numar]);[numar];0)=0 o În tabela Plecari, valorile câmpului Ora să fie cuprinse între 6 şi 22.

Between 6 And 22 o În tabela Plecari, şoferului Zaharia Cezar (marca 1010) îi sunt interzise cursele spre Bacau

17.

IIf([marca]=1010;IIf([destinatie]="Bacau";False;True);True) frază SELECT SQL pentru obţinerea listei cu plecările spre Bacău, realizate cu autobuze care au mai mult de 40 de locuri.

SELECT ora, Autobuze.numar, tip, locuri, destinatie

FROM Autobuze INNER JOIN Plecari ON Autobuze.numar = Plecari.numar

WHERE locuri>=40 AND destinatie="Bacau"

15 Cheia alternativă ar fi CNP-ul, pe care-l regăsiţi în enunţ, la tabela SOFERI, dar nemaifigurat în tabela propriu-zisă. Pe lângă atributul

Indexed, setat Yes (No Duplicates), ar mai putea fi ales şi Required cu opţiunea Yes, pentru a evita valori nule.

16 A nu se face confuzia între câmpul NUMAR, existent în tabelele AUTOBUZE şi PLECĂRI, cu câmpul NUMAR din tabela SOFERI, care

se referă la numărul străzii şi nu al autobuzului ca în primele tabele. 17 Validare la nivel de înregistrare (Property Sheet) pentru că avem nevoie de două câmpuri.

Page 34: Exercitii Access Rezolvate

Modele lucrări practice

3.2 Lucrarea practică nr. 2

Aprov-rez.mdb

Dispuneţi de baza de date APROV care conţine tabelele: FURNIZOR(Codfurn, Numefurn, Localitate,

Banca), APROVIZIONARE(Nrfactura, Data, Categorie, Codfurn, Valoarefact) şi PLATI(Nrfactura,

Dataplata, Valoare).

Se cere:

Să se analizeze structura tabelei Plati şi să se stabilească cheia primară.

Să se stabilească legăturile permanente dintre tabele şi să se aplice restricţiile referenţiale.

Să se înregistreze în baza de date o nouă aprovizionare: de la un furnizor nou de birotică (datele

despre furnizor: 1010, FLAMINGO SRL, Iasi, BRD), factura nr. 12445, din 10 mai 2011, în valoare

de 215 lei.

Să se afişeze o listă a furnizorilor din Iasi sau Vaslui.

Să se scrie o frază Select SQL pentru a obţine o listă a facturilor din categoria “utilitati”, cu valoarea

de peste 200 lei (Nrfactura, Numefurn, Data, Valoarefact).

Să se întocmească un raport al aprovizionărilor (Număr factură, Data, Nume furnizor, Valoare), cu

gruparea înregistrărilor după categoria de furnizor. Pentru fiecare categorie de furnizor se va calcula

totalul valoric al facturilor.

Propunere de rezolvare cheia primară pentru tabela Plăţi – conform figurii de mai jos.

legăturile permanente dintre tabele şi restricţiile referenţiale.

aprovizionare nouă: de la un furnizor nou de birotică (datele despre furnizor: 1010, FLAMINGO SRL, Iasi, BRD), factura

nr. 12445, din 10 mai 2011, în valoare de 215 lei.

INSERT INTO Aprovizionare (nrFactura, data, valoareFac, codFurn, categorie ) SELECT 12445, #5/10/2010#, 215, 1010, "birotica"

sau18

şi

INSERT INTO Furnizori ( codFurn, numeFurn, localitate, banca )

SELECT 1010, "FLAMINGO SRL", "Iasi", "BRD"

sau

În oricare din variantele alese, acţiunea se finalizează apăsând butonul Run (!) din meniul Design. Verificarea operaţiunii se

18 Varianta cu Append Query presupune următorii paşi:

Create Query Design.

Se apasă butonul Close (nu se adaugă nicio tabelă).

Se alege din meniul Design opţiunea Append Query. În acest formular se va adăuga tabela dorită (de ex. APROVIZIONARE).

În formularul structurii interogării se scrie la Field noua înregistrare (de ex. 12445) şi la Append To câmpul unde se adaugă înregistrarea

(de ex. NrFactura). La fel se face şi cu restul înregistrărilor.

A se avea în vedere următoarele aspecte: la valori tip dată se vor scrie între simbolul #, la text, între ghilimele.

De asemenea, dacă trebuie să facem adăugări în mai multe tabele trebuie respectate ordinea populării: întâi părinţii.

Page 35: Exercitii Access Rezolvate

Modele lucrări practice face deschizând tabelele şi urmărind dacă s-au operat adăugările.

Lista a furnizorilor din Iasi sau Vaslui.

sau

SELECT codFurn, numeFurn, localitate, banca

FROM Furnizori WHERE localitate="Iasi"

OR localitate="Vaslui"

Lista facturilor din categoria “utilitati”, cu valoarea de peste 200 lei (Nrfactura, Numefurn, Data, Valoarefact).

SELECT nrFactura, numeFurn, data, valoareFac

FROM Furnizori INNER JOIN Aprovizionare ON Furnizori.codFurn = Aprovizionare.codFurn

WHERE valoareFac>=200 AND categorie="utilitati" Raport al aprovizionărilor (Număr factură, Data, Nume furnizor, Valoare), cu gruparea înregistrărilor după categoria de

furnizor. Pentru fiecare categorie de furnizor se va calcula totalul valoric al facturilor19

.

La rulare va arăta ca mai jos:

19 Realizarea acestui raport se poate face din Report Wizard.

Page 36: Exercitii Access Rezolvate

Modele lucrări practice

3.3 Lucrarea practică nr. 3 Dispuneţi de baza de date APROV care conţine tabelele FURNIZOR(Codfurn, Numefurn, Localitate,

Banca), APROVIZIONARE(Nrfactura, Data, Categorie, Codfurn, Valoarefact) şi PLATI(Nrfactura,

Dataplata, Valoare).

Se cere:

Să se analizeze structura tabelei Plati şi să se stabilească cheia primară.

Să se stabilească legăturile permanente dintre tabele.

Să se definească o regulă de validare care să impună ca valoarea maximă a unei facturi pentru un

furnizor din categoria “birotica” să nu fie mai mare de 300 lei.

Folosind o interogare Select SQL, să se afişeze o listă cu facturile care nu au fost plătite integral,

ordonate descrescător după valoarea facturii. Lista va conţine: Nrfactura, Categorie, Valoare.

Să se obţină un formular pentru vizualizarea /actualizarea nomenclatorului de furnizori.

Să se întocmească un raport al plăţilor (Număr factură, Nume furnizor, Data plată, Valoare), cu gruparea

înregistrărilor pe zile. Se va calcula total valoare facturi pentru fiecare zi şi valoarea medie a plăţilor zilnice.

Propunere de rezolvare Dispuneţi de baza de date APROV care conţine tabelele FURNIZOR(Codfurn, Numefurn, Localitate, Banca),

APROVIZIONARE(Nrfactura, Data, Categorie, Codfurn, Valoarefact) şi PLATI(Nrfactura, Dataplata, Valoare).

Se cere:

analiza tabelei Plati şi stabilirea cheii primară – conform figurii de mai jos.

legăturile permanente dintre tabele.

regulă de validare care să impună ca valoarea maximă a unei facturi pentru un furnizor din categoria “birotica” să nu fie

mai mare de 300 lei20

.

IIf([categorie]="birotica";IIf([valoareFac]<=300;True;False);True) interogare Select SQL, să se afişeze o listă cu facturile care nu au fost plătite integral, ordonate descrescător după

valoarea facturii.21

.

SELECT Aprovizionare.nrFactura, categorie, valoarefac-SUM(NZ([valoare],0)) AS [valoare neachitata]

FROM Aprovizionare LEFT JOIN Plati

ON Aprovizionare.nrFactura = Plati.nrFactura GROUP BY Aprovizionare.nrFactura, categorie, data, valoarefac

HAVING valoareFac >SUM(NZ([valoare],0)) ORDER BY data DESC sau

20 Validare la nivel de înregistrare (Property Sheet) 21 Dacă enunţul făcea referire doar la facturi neplătite, se putea realiza următoarea interogare:

SELECT nrFactura, categorie, valoareFac FROM Aprovizionare WHERE nrFactura Not In (SELECT nrFactura FROM Plati) ORDER BY data DESC

Page 37: Exercitii Access Rezolvate

Modele lucrări practice formular pentru vizualizarea /actualizarea nomenclatorului de furnizori.

raport al plăţilor (Număr factură, Nume furnizor, Data plată, Valoare), cu gruparea înregistrărilor pe zile. Se va calcula

total valoare facturi pentru fiecare zi şi valoarea medie a plăţilor zilnice.

Page 38: Exercitii Access Rezolvate

Modele lucrări practice

Următorii paşi ţin de gustul estetic, altfel puteţi da direct Finish.

3.4 Lucrarea practică nr. 4

Vanzare-rez.mdb Dispuneţi de o bază de date VANZARE cu tabelele AGENŢI(Codag, Nume, Adresa, Telefon),

VANZARI(Nrfactura, Data, Valfact, Codag, Codzona) şi ZONE(Codzona, Denumire, Procent).

Se cere:

Să se analizeze atributele din fiecare tabel şi să se stabilească cheile primare corespunzătoare

acestora.

Să se stabilească legăturile permanente dintre cele 3 tabele şi să se aplice restricţiile referenţiale.

Să se adauge factura cu numărul 2222, din data de 12 mai 2011, în valoare de 100 lei. Factura este

întocmită pentru zona Tataraşi de către un agent nou, Marinescu Ioana, de pe strada Ion Creangă, nr.

13, care are codul A10.

Folosind o interogare SQL, să se afişeze o listă cu vânzările din zona 1, cu valori mai mici de 300 lei

(Lista va conţine: Nume agent, Număr factură, Data facturii, Valoare factură).

Să se obţină într-un raport vânzările agentului A2, grupate pe zile. Raportul va conţine: Numele

agentului, Numărul facturii, Data facturii şi Valoarea facturii.

Propunere de rezolvare cheile primare sunt redate în figura de mai jos.

legăturile permanente dintre cele 3 tabele şi restricţiile referenţiale.

factura cu numărul 2222, din data de 12 mai 2011, în valoare de 100 lei. Factura este întocmită pentru zona Tataraşi de

către un agent nou, Marinescu Ioana, de pe strada Ion Creangă, nr. 13, care are codul A1022

.

INSERT INTO Agenti ( codAg, nume, adresa )

SELECT "A10", "Marinescu Ioana", "strada Ion Creangă, nr. 13" şi

INSERT INTO Vanzari (nrFactura, data, valFact, codAg, codZona)

SELECT 2222, #1/12/2010#, 100, "A10", 5 lista cu vânzările din zona 1, cu valori mai mici de 300 lei

SELECT nume, nrFactura, data, valFact

FROM Agenti INNER JOIN Vanzari ON Agenti.codAg = Vanzari.codAg

WHERE valFact<=300 AND codZona=1

22 Pentru varianta Append Query a se vedea LP2

Page 39: Exercitii Access Rezolvate

Modele lucrări practice Raport cu vânzările agentului A2, grupate pe zile.

Restul paşilor pot fi doar NEXT sau FINISH direct (nu sunt atât de importanţi, în cazul cerinţei noastre).

Se închide modul de vizualizare PrintPreview (Close Print Preview). Va apărea automat fereastra Report Design.

Se activează formularul Property Sheet.

În acest formular se alege în fereastra Selection Type, cuvântul Report (apăsarea pe săgeţica de la ComboBox-ul

respectiv şi apoi a literei R va duce direct la Report).

Din Tab-ul Data, la Recodr Source, se apasă butonul de extindere a ferestrei de editare.

. Va apărea Query Design, aferent acestui raport.

Se dă dublu clic pe câmpul CodAg din tabela Agenti pentru a o introduce în structura interogării, dar se debifează caseta

Show

Apoi, se scrie la Criteria A2 (ghilimelele vor apărea automat). Se poate face proba ca să ne convingem că sunt doar

selecţiile agentului A2, apoi se închide interogarea.

Rularea raportului va reda doar vânzările agentului A2 grupate pe zile.