Sunteți pe pagina 1din 39

1

GESTIUNE PRODUSE FINITE ...........................................................................................................2 1.1 STRUCTURA BAZEI DE DATE ............................................................................................................2 1.2 SCHEMA BAZEI DE DATE .................................................................................................................2 1.3 RESTRICII ......................................................................................................................................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 INTEROGRI ....................................................................................................................................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 interogri cu instrumente de tip Wizard ..................................................................5 1.5.3.1 Crearea unei interogri cu Simple Query Wizard .............................................................5 1.5.3.2 Crearea unei interogri cu Crosstab Query Wizard .........................................................6 1.5.4 Definirea interogrilor prin Query Design ................................................................................7 1.5.4.1 Interogri de selecie .........................................................................................................7 1.5.4.2 Interogri de adugare ......................................................................................................8 1.5.4.3 Interogri de modificare ....................................................................................................9 1.5.4.4 Interogri de tergere ........................................................................................................9 1.5.4.5 Interogare folosind dou tabele.........................................................................................9 1.5.5 Interogri SQL .........................................................................................................................10 1.5.5.1 Primele argumente ale interogrilor SQL .......................................................................10 1.5.5.2 Utilizarea principalilor operatori....................................................................................11 1.5.5.3 Funcii de agregare .........................................................................................................12 1.5.5.4 Gruparea nregistrrilor .................................................................................................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 nregistrrilor i subtotaluri ......................................................................18 1.7 FORMULARE .................................................................................................................................19 EVIDEN STUDENI.....................................................................................................................23 2.1 Crearea tabelelor i definirea restriciilor ....................................................................................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 restriciilor refereniale ..........................................................................................24 2.2 Editarea tabelelor i navigarea prin nregistrri ...........................................................................24 2.3 Obinerea de informaii din baza de date .....................................................................................25 2.3.1 Setul nr. 1 de ntrebri .............................................................................................................25 2.3.2 Setul nr. 2 de ntrebri .............................................................................................................27 2.3.3 Setul nr. 3 de ntrebri .............................................................................................................28 2.3.4 Setul nr. 4 de ntrebri .............................................................................................................28 2.3.5 Setul nr. 5 de ntrebri .............................................................................................................30 2.3.6 Setul nr. 6 de ntrebri .............................................................................................................31 2.3.7 Setul nr. 7 de ntrebri .............................................................................................................32 MODELE LUCRRI 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

Gestiune produse finite

1 GESTIUNE PRODUSE FINITE


1.1 STRUCTURA BAZEI DE DATE
Tabela Denumire atribut Documente de intrare numar nota intrare data document cod gestiune Linii in documente numar nota intrare cod produs cantitate Avize de expeditie numar aviz data aviz cod gestiune cod client Linii in avize numar aviz cod produs cantitate procent tva pret Gestiune cod gestiune denumire gestiune nume gestionar Incasari numar document data document cod client suma tip de document Produse cod produs denumire produs unitate de msur pret stoc Clienti cod client denumire client cod localitate sold Localitati cod localitate denumire localitate denumire judet Tipul Text Date/Ti me Text Text Text Number Text Date Time Text Text Text Text Number Number Number Text Text Text Text Date/Time Text Number Text Text Text Text Number Number Text Text Text Number Text Text Text Lungime 8 Short Date 8 8 8 Single 8 Short Date 8 8 8 8 Single Byte Single 8 20 20 S Short Date 8 Single 20 8 20 3 Single Single 8 20 4 Single 8 20 20 Observaii pk1 parte din pk (fk2 - din Documente de intrare) parte din pk (fk - din Produse) pk fk - din gestiune fk - din clieni parte din pk (fk - din Avize de expeditie) parte din pk (fk - din Produse)

pk

parte din pk parte din pk (fk - din Clieni) parte din pk pk

pk fk - din Localitati pk

Cmpurile care au coninut numeric, dar nu sunt folosite n calcule pot fi configurate ca de tip Text, fiind mai uor de gest ionat. Cheia primar se seteaz dnd clic dreapta pe cmpul stabilit ca avnd acest rol i alegnd din meniul contextual opiunea Primary Key. Aceeai opiune poate fi aleas din meniul Design. n cazul n care este nevoie de cheie primar compus, se selecteaz primul cmp, apoi se alunec spre cellalt, dac sunt alturate sau se ine apsat tasta Ctrl i se apas i pe cellalt cmp. 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 legturile ntre tabele, se alege, din meniul Database Tools, opiunea Relationships. Dac este aleas prima dat pentru respectiva baz de date, va aprea un formular de unde se pot introduce tabelele. Dac a mai fost apelat aceast opiune pentru acea baz de date, pentru a mai aduga 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, aceeai opiune Show Table;

1 2

pk - primary key cheie primar fk - foreign key - cheie strin

Gestiune produse finite


fie se d clic n panoul din stnga unde sunt tabelele, pe tabela dorit i, innd apsat butonul mouse -ului, se trage peste fundalul gri, unde sunt tabelele. 2. Se d clic pe cheia primar din tabela-printe, inndu-se apsat butonul stnga al mouse-ului, i se trage mouse-ul peste tabela-copil, elibernd butonul mouse-ului peste cheia strin (corespondentul cheii primare din tabela printe). Va aprea un formular precum cel de jos. n cazul n care nu apare corespondena cheie primar cheie strin, se poate schimba dnd clic pe cmpul eronat i alegerea, din combobox. -

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

1.3 RESTRICII
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

Atenie ca, regula de validare s fie aplicat cmpului solicitat! Ceea ce nseamn c, nti vom da clic pe cmpul respectiv apoi se completeaz Validation Rule i Validation Text. 4 Dup cum se observ delimitatorul argumentelor funciilor este punctul i virgula (;), dar poate fi i virgula (,), funcie de setrile regionale ale sistemului de operare.

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. Conine deja chei primare, legturile ntre tabele, restricii
gestiune produse finite - cu restrictii.accdb

Ordinea de populare (introducere de date) se face ncepnd cu tabelele printe, apoi cu tabelele copil .

Baza de date pentru antrenarea interogrilor, formularelor, rapoartelor etc.


gestiune produse finite - populata.accdb

Atunci cnd regula de validare solicit cel puin dou atribute, din meniul Design se alege opiunea Property Sheet, afind un panou n partea dreapt, unde se introduce regula de validare n fereastra Validation Rule. Dac se dorete s se lucreze mai uor, se poate apsa pe butonul cu trei puncte ( ), care apare cnd se selecteaz opiunea Validation Rule. Astfel va fi afiat formularul Expression Builder.

Gestiune produse finite

1.5 INTEROGRI
1.5.1 Filtrarea i ordonarea direct a datelor dintr-o tabel6
Ex. 1 S se identifice clienii din localitatea cu codul 1002, folosindu -se filtrarea direct a datelor.

1.5.2 Actualizarea direct a datelor

Adugare

tergere

1.5.3 Crearea de interogri cu instrumente de tip Wizard


1.5.3.1 Crearea unei interogri cu Simple Query Wizard Ex. 2 S se obin o list cu toi clienii i toate localitile din care acetia fac parte. Lista trebuie s conin numele clienilor i numele localitilor.

Se folosete doar pentru a obine rezultate rapide, dar nu se prea practic ntr -o manier profesionist.

Gestiune produse finite

1.5.3.2 Crearea unei interogri cu Crosstab Query Wizard Ex. 3 S se creeze o list cu ncasrile de la fiecare client pe tipuri de documente. Lista trebuie s conin pe prima coloan clienii i cte o coloan pentru fiecare tip de document. La intersecia fiecrui client cu fiecare tip de document trebuie s apar suma ncasrilor.

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 interogrilor prin Query Design7


1.5.4.1 Interogri de selecie Ex. 4 S se ntocmeasc lista clienilor din localitatea cu codul 1002. lista va cuprinde numai denumirea clienilor. SELECT [denumire client] FROM clienti WHERE [cod localitate]="1002"

Dac, n loc de select, din meniul QUERY se alege opiunea Make-Table Query, se poate crea o nou tabel cu rezultatul respectivei interogri. 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 specificaie clar a tipului de dat solicitat, se alege din meniul Design, opiunea Parameters, unde, n formularul ce apare se introduce expresia ce solicit inserarea unui element.

Aceeai expresie se introduce ca i criteriu.

Ca i n exemplificrile de mai sus, vom prezenta la fiecare interogare utiliznd Query Design i alternativa SQL.

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 coninutul avizului de expediie cu numrul 1002. lista va conine cmpurile: data aviz, denumire gestiune, denumire client, denumire localitate (localitatea clientului), denumire produs, cantitate, procent TVA, pre.

1.5.4.2 Interogri de adugare Ex. 6 Introducei n tabela Clieni clientul SC BENNY HILL S.R.L. cu codul 1008, din localitatea cu codul 1001, ce are soldul 777.

Gestiune produse finite

1.5.4.3 Interogri de modificare Ex. 7 S se modifice pentru clientul cu codul 1008 soldul n 888

1.5.4.4 Interogri de tergere Ex. 8 tergei 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]

Gestiune produse finite 1.5.5 Interogri SQL


1.5.5.1 Primele argumente ale interogrilor SQL Formatul specific unei interogri: SELECT cmp_1, cmp_2, , cmp_n FROM tabel_1, tabel_2, ., tabel_n WHERE condiie ORDER BY cmp_i, cmp_j Ex. 9 Lista clienilor din localitatea cu codul 1002. Lista va cuprinde numai denumirea clienilor. SELECT [denumire client] FROM clienti WHERE [cod localitate]= "1002" Constantele de tip text pot fi scrise ntre ghilimele () sau apostrof () Care sunt clienii 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: Ex. 10

Obs: Pot fi folosii i operatorii logici (AND/OR/NOT) Ex. 11 Care sunt documentele de intrare emise ntre 15 februarie i 15 martie 2006. Lista va cuprinde numrul 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 clienii din judeul cu codul IS. Lista va cuprinde doar denumirea clienilor.

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 ntocmii lista clienilor din judeul Iai 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]

Atunci cnd se lucreaz cu interogri 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"

Gestiune produse finite


Ex. 14 ntocmii lista clienilor din judeul Iai, ordonat dup soldul descresctor. 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 ncasri s-au fcut n perioada 1 ianuarie 2006 31 martie 2006, cu valori ntre 1000 i 10000 de la clienii a cror 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 expediie? 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 interogri. Se elimin automat liniile identice. Dac se dorete obinerea tuturor liniilor din respectivele mulimi, se folosete clauza ALL Ex. 17 ntocmii fia produsului avnd codul 1001 (fia produsului conine stocul iniial, intrrile i ieirile 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: Funcia SPACE returneaz un ir de caractere spaiu de o anumit lungime. Ex. 18 ntocmii fia produsului avnd codul 1001, n care ordinea liniilor din rezultat s fie ordinea cronologic de apariie a documentelor (prima linie va fi ocupat de soldul iniial) SELECT #2006-01-01# AS Data, 1 AS Ord, 'Stoc initial' AS TipDoc, SPACE(8) AS NrDoc, Stoc AS Cantitate

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 clienii de tip SRL9? SELECT * FROM clienti WHERE [denumire client] LIKE '*SRL*' 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*' ntocmii lista clienilor din judeul Iai, Vaslui, Suceava, Botoani.

Ex. 20

Ex. 21

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 regsete 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) Mulimea n care caut IN nu e neaprat o list de valori; poate fi mulimea obinut 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 Funcii de agregare COUNT, SUM, AVG, MIN, MAX Ex. 22 Ci clieni aveau soldul mai mare ca zero? SELECT COUNT (*) FROM clienti WHERE sold>0 Ci clieni sunt din judeul Iai? SELECT COUNT (*) FROM clienti

Ex. 23

10

Caracterul asterix (*) nlocuiete un ir de caractere Semnul ntrebrii (?) nlocuiete un singur caracter.

Gestiune produse finite


WHERE [cod localitate] IN ( SELECT [cod localitate] FROM localitati WHERE [denumire judet]='IS') Ex. 24 Cte 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 Care este valoarea ncasrilor de la clientul cu codul 1001? SELECT SUM(suma) AS Total FROM incasari WHERE [cod client]='1001' Care a fost suma total a soldurilor clienilor? SELECT SUM(sold) AS Total FROM clienti Care este suma ncasat de la clienii din municipiul Iai?

Ex. 25

Ex. 26

Ex. 27

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 subinterogri imbricate SELECT SUM(suma) AS Total FROM incasari WHERE [cod client] IN ( SELECT [cod client] FROM clienti c

Gestiune produse finite


WHERE [cod localitate] IN ( SELECT [cod localitate] FROM localitati WHERE UCASE([denumire localitate]) LIKE 'IA?I')) Varianta 5) Folosind funcia 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 ncasrilor din luna februarie 2006? SELECT SUM(i.suma) AS Total FROM incasari i WHERE MONTH([data document])=2 AND YEAR([data document])=2006 Care este totalul vnzrilor 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 Care este totalul valorii produciei din luna februarie 20 06? 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 Care este valoarea total a avizului de expediie cu numrul 1001? SELECT SUM(cantitate*pret*(1+[procent TVA]/100)) AS [Valoare Totala] FROM [linii in avize] WHERE [numar aviz]='1001' Ce cantitate de lapte s-a vndut, pe piaa municipiului Iai, 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*' Care este valoarea medie a ncasrilor? SELECT AVG(suma) AS [Media incasarilor] FROM incasari 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) Care este cea mai mare ncasare din anul 2006? SELECT * FROM incasari WHERE suma IN( SELECT MAX(suma)

Ex. 29

Ex. 30

Ex. 31

Ex. 32

Ex. 33

Ex. 34

Ex. 35

Gestiune produse finite


FROM incasari WHERE YEAR([data document])=2006) 1.5.5.4 Gruparea nregistrrilor Ex. 36 Care sunt documentele de intrare cu cele mai multe linii (pot exista mai multe documente cu acelai numr 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])) Clauza GROUP BY determin grupuri pe baza valorilor luate de unul sau mai multe cmpuri. Aceast clauz are sens doar dac se folosete n interogare cel puin o funcie de agregare.

Obs:

Clauza HAVING este asemntoare cu clauza WHERE, numai c opereaz cu funcii 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 conin toate informaiile despre gestiunile existente i persoanele responsabile cu administrarea lor.

Alegerea tabelei gestiune, fr a se deschide, dnd clic panoul obiecte, din stnga. Apoi, click pe opiunea Report, din meniul Create, grupul de butoane Report11.

Rezultatul este afiat n modul de vizualizare Layout View, de unde se mai pot ajusta dimensiunile obiectelor. Dac se dorete vizualizarea produsului finit, se alege Print Preview sau Report View. Ex. 2 Periodic serviciul vnzri solicit o list actualizat a clienilor pentru a analiza sumele ncasate i debitele pe care le au produsele vndute fiecruia dintre ei.

11

n aceeai manier rapid se poate realiza i un formular, n cazul de fa pentru actualizarea gestiunii.

Gestiune produse finite

Gestiune produse finite

1.6.2 Raport simplu din dou tabele


Ex. 3 Periodic, serviciul de vnzri solicit lista actualizat a clienilor n vederea elaborrii politicilor de marketing pe localiti.

1. Proiectarea raportului Macheta raportului


Lista clienilor la data de 3/21/2007 Codul localitii 1005 1002 1002 1006 1005 1006 1007 Denumirea localitii Brlad Iai Iai Galai Brlad Galai Tecuci Denumirea judeului VS IS IS GL VS GL GL Pag 1 Codul clientului 1001 1002 1003 1004 1005 1006 1007 Denumirea clientului SC KOMBASAN SA SC UNIREA SA SC HOFFER SA SC CORAL SRL SC AMBRAS SA SC VADUL SA SC HORBAD SRL

2. Pregtirea 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 cuvnt sau mai multe cu o liter sau dou... (astfel, n loc de Localiti ajunge doar un L, iar n loc de Clieni se poate folosi un sugestiv C)

Gestiune produse finite


Click dreapta pe raport i selectarea opiunii Properties sau din meniul Design, alegerea opiunii Property Sheet.

Inserarea cmpurilor prin tragere, din acest tabel, n zona Detail a raportului. Controlul de tip Label, care conine denumirea cmpului respectiv va fi dus n zona Page Header. Afiarea/ascunderea zonelor Page Header/Footer sau Report Header/Footer se poate realiza fie dnd clic pe butoanele din meniul Arrange sau din meniul contextual, dnd 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 alegnd opiunea Title, respectiv Date &Time din meniul Design. Va aprea un obiect de tip Label, n care se introduce textul: Lista clienilor pe localiti la data de i formatarea textului de tip Garamond, 16 pt.

1.6.3 Raport cu gruparea nregistrrilor i subtotaluri


Ex. 4 Periodic, serviciul marketing solicit o situaie a produselor vndute, grupate pe clieni, care s conin denumirea clienilor, denumirea produselor, cantitile livrate, unitile de msur, procentul TVA, preurile, numrul i data avizelor de expediie. Valoarea total a vnzrilor se va determina att pentru fiecare client, ct i pentru toi clienii la sfritul raportului. Lista produselor vndute clienilor pn la data 3/21/2006 Denumirea clientului Numrul avizului Data avizului Denumirea produsului Cantitatea Unitatea de msur Procentul TVA Preul

1. Proiectarea raportului

SC HOFFER SA 1005 1006 SC KOMBASAN SA 1002 1002 1003 02.06.2006 Cornuri 30 Buc 19 02.06.2006 Lapte 12 L 19 Valoarea produselor vndute clientului SC HOFFER SA Kg 02.05.2006 Biscuii 25 Buc 19 02.05.2006 Covrigi 10 Kg 19 02.07.2006 Colaci 4 Buc 19 Valoarea produselor vndute clientului SC KOMBASAN SA Valoarea total a produselor vndute 25 12,5 17,5 12 15 20 47 64,5

2. Pregtirea datelor SELECT [denumire client], AE.[numar aviz], [data aviz], [denumire produs], cantitate, [unitate de masura], [procent TVA], LA.pret, LA.[cod produs]

13

13

Dup cum se remarc, reamintim c dup SELECT, cmpurile care sunt unice (nu se regsesc n mai multe tabele, cum este deseori cazul cheilor sau, ca n exemplul nostru, PRET, nu necesit referina la tabel. Obligatoriu, ns ea se va trece la realizarea punii, prin intermediul cheilor. Aliasul poate fi precedat sau nu de particula AS: clienti C este identic cu clienti AS C

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 nregistrrilor. Meniul Design Group & Sort. La denumire client, n partea inferioar a ferestrei se alege pentru Group Header, Group Footer se alege opiunea 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, alegnd din meniul contextual opiunea Properties.

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

Gestiune produse finite


4. Proiectarea formularului Macheta formularului
Actualizare clieni Cod localitate Denumire localitate Jude Clieni Cod client Denumire client Sold

5. Definirea formularului cu asistentul de formulare. Din meniul Create se alege dnd clic pe More Forms, opiunea Form wizard.

Gestiune produse finite

Ex. 6

S se realizeze un formular, denumit Avize de expediie, pentru actualizarea informaiilor despre produsele livrate clienilor dup macheta urmtoare
Data curent Data Denumirea clientului

Actualizare avize de expediie Numrul avizului

Denumire produs

Cantitate

Unitate de msur

Procent TVA

Pre

Aviz nou

Cutare

tergere Valoarea total a avizului de expediie numrul

Salvare

|<

<

>

>|

nchidere formular

Gestiune produse finite

Eviden studeni

2 EVIDEN STUDENI
2.1 Crearea tabelelor i definirea restriciilor
Baza de date necesar pentru antrenarea cheilor, restriciilor, regulilor de validare
EvStud - simpla.accdb

2.1.1

Crearea tabelelor i declararea valorilor implicite


Primary Key Atribut (Field Name) STUDENTI Matricol NumePren CNP Specializare AnStudii Fstudii Grupa DISCIPLINE CodDisc DenumireDisc NrCredite NrOreCurs NrOreSeminar EXAMENE Matricol CodDisc DataEx NotaEx Tip (Data Type) Text Text Text Text Number Text Number Text Text Number Number Number Text Text Date/Time Number Lungime (Field Size) 10 40 15 50 Long Integer 2 Long Integer 6 40 Long Integer Long Integer Long Integer 10 6 Long Integer Valori implicite (Default Value)

"Trunchi comun" 1 "ID" 1

6 28 28

"AE1101" IIf(Date()<#20/01/2006#;Date();#20/01/2006#) 7

2.1.2
2.1.2.1

Reguli de validare
La nivel de atribut
Restrictii Validation Rule STUDENTI StrComp(UCase([Matricol]);[Matricol];0)=0 Validation Text

Atribut (Field Name) Matricol

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, opiunea Properties
Restrictii (Validation Rule) Textul de afiat (Validation Text)

Tabela (Table) STUDENTI 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, [AnStudii]<>4 Or [AnStudii]=4 And [Grupa]<=10

Eviden studeni
(#28.01.2006#;#02.11.2006#;#07.04.2006#) 11 feb si 4 iul!

2.1.3

Declararea restriciilor refereniale


Legtura se realizeaz apelnd n meniul DATABASE TOOLS, opiunea RELATIONSHIPS.

n tabela printe, se d clic pe cheia primar, se ine apsat butonul stnga i se deplaseaz peste cmpul cu acelai nume din tabela printe i se elibereaz apoi mouse -ul.

2.2 Editarea tabelelor i navigarea prin nregistrri


n gestionarul de obiecte, se apas dublu clic pe tabela ce se dorete a fi editat.

Eviden studeni

2.3 Obinerea de informaii din baza de date


Baza de date cu restricii i populat, pentru antrenamentul cu interogri.
EvStud - populata.accdb

2.3.1

Setul nr. 1 de ntrebri Varianta 1 utilizarea Query Design

a) Care sunt studenii din anul III, specializarea Informatic economic, ZI?

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 rnd dar se citete mai uor.

Dup ce a fost finalizat operaiunea prin una din cele dou variante, se alege opiunea Run din meniul Query sau butonul de forma semnului exclamrii de pe bara de butoane (!). b) Ce studeni trebuie felicitai de Sf. Vasile (1 ianuarie)? Se utilizeaz, n cadrul criteriului, simbolul % nainte i dup cuvntul/cuvintele folosite ca i condiie, ntre primul simbol % i cuvnt introducndu-se i spaiu pentru a sugera identificarea cuvntului al doilea.

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 opiunea SQL View.
14

Eviden studeni Varianta 1 utilizarea Query Design

Not: n cazul n care nu funcioneaz condiionarea utiliznd simbolul %, atunci, sigur va merge cu simbolul *, nemailsnd spaiu ntre simbolul * i cuvnt, acest simbol avnd rolul de a nlocui un ir de caractere.

Varianta 2 utilizarea SQL View

c) Ce studeni trebuie felicitai de Sf. Ion (7 ianuarie)?

d) Componena grupei 4 de la specializarea Contabilitate i Informatic de Gestiune, ZI, anul III;

Not: Pentru a face proba, n tabela Studeni 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?

Eviden studeni c) n ce zile a susinut examene studentul cu matricolul ELZ02001?

d) La ce discipline a susinut examene studentul cu matricolul ELZ02001?

e) Care este codul disciplinelor la care s-au susinut examene n luna februarie 2006?

2.3.2

Setul nr. 2 de ntrebri

a) zilele n care s-a susinut examen la Microeconomie;

b) numele studenilor examinai pe 28 ianuarie 2006;

Note: 1. Clauza DISTINCT elimin apariia repetat a unui examen, n cazul n care ar da mai multe examene n aceeai zi. 2. Se va avea n vedere formatul datei. Este posibil ca cel romnesc 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 studenii de la Trunchi comun, Zi, Anul I care au picat mcar un examen n februarie 2006?

Eviden studeni 2.3.3 Setul nr. 3 de ntrebri a) denumirea disciplinelor la care a susinut examen studentul Lama W. Dalai, datele i notele obinute;

b) numele studenilor care au picat examenul Baze de date I mcar o dat;

c) rezultatele din 14 februarie 2006 ale grupei 1 din anul IV, specializarea Marketing, zi, la disciplina Cercetri de marketing (situaia 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 ntrebri

a) Cte discipline au 7 credite?

b) Ci studeni sunt n anul III, specializarea Informatic Economic, cursuri de zi?

Eviden studeni c) Cte credite a obinut studentul Barbu I. Vasile (atenie, nu se iau n calcul examenele picate!)?

d) Cte credite s-au obinut la nivelul anului III al specializrii Informatic economic, Zi?

e) Care este cea mai mare not la Microeconomie?

Not: Chiar dac nu este necesar, este mai prudent a plasa un cmp ntre paranteze ptrate, atunci cnd el reprezint argumentul unei funcii, adic este plasat i ntre paranteze rotunde. Parantezele ptrate se folosesc atunci cnd denumirea unui cmp, tabel etc. au mai mult de un cuvnt.

f) Care este cea mai mic not obinut 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 susinut pe 24 ianuarie 2006?

Eviden studeni h) Cte puncte (nr. de credite nmulit cu nota de la examen) a obinut Lama W. Dalai (atenie, nu se iau n calcul examenele picate!)?

2.3.5

Setul nr. 5 de ntrebri

a) La ce disciplin a susinut primul examen studentul Barbu I. Vasile?

b) Care a fost disciplina/disciplinele la care s-au susinut examenele n ultima zi de sesiune din februarie 2006?

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

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

e) Care este media notelor obinute la primul examen de Microeconomie de la anul I?

2.3.6

Setul nr. 6 de ntrebri

a) Ci studeni sunt n fiecare an de studii?

b) Cte note sub 5 au fost, n total, la fiecare disciplin?

c) Cte examene a susinut (la cte s-a prezentat) fiecare student din anul I?

Eviden studeni d) Ci studeni au susinut examene n fiecare zi de sesiune?

e) Ci studeni au fost examinai n cele patru luni de sesiuni, pentru fiecare disciplin?

f) Numrul de examene picate, pentru fiecare an de studii.

2.3.7

Setul nr. 7 de ntrebri

a) Care dintre anii de studii numr mai mult de 1000 de studeni?


Not: Pentru a putea verifica interogarea, am ales ca i condiie cifra 2 n locul lui 1000, neavnd o baz de date cu peste 1000 de nregistrri.

b) Care sunt studenii care au susinut n sesiunile ianuarie-februarie 2006 mai mult de 3 examene?

c) tiind c facultatea are doar patru sli pentru examinare, s se extrag zilele n care numrul examenelor este mai mare dect cel al slilor.

Baza de date rezolvat, pentru verificare


EvStud - rezolvata.mdb

Modele lucrri practice

3 MODELE LUCRRI 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 legturile permanente dintre tabele. S se defineasc urmtoarele restricii: o n tabela Autobuze literele din cmpul Numar s fie majuscule. o n tabela Plecari, valorile cmpului 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 obinerea listei cu plecrile spre Bacu, realizate cu autobuze care au mai mult de 40 de locuri. Lista va oferi urmtoarele informaii: ora plecrii, numrul de nmatriculare, tipul autobuzului, numrul de locuri. Propunere de rezolvare
cheile primare / cheile alternative: a se vedea n figura de mai jos15. legturile permanente dintre tabele16.

restricii: o n tabela Autobuze literele din cmpul Numar s fie majuscule. StrComp(UCase([numar]);[numar];0)=0 o n tabela Plecari, valorile cmpului 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 Bacau17. IIf([marca]=1010;IIf([destinatie]="Bacau";False;True);True) fraz SELECT SQL pentru obinerea listei cu plecrile spre Bacu, 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 regsii n enun, la tabela SOFERI, dar nemaifigurat n tabela propriu -zis. Pe lng atributul Indexed, setat Yes (No Duplicates), ar mai putea fi ales i Required cu opiunea Yes, pentru a evita valori nule.

16

A nu se face confuzia ntre cmpul NUMAR, existent n tabelele AUTOBUZE i PLECRI, cu cmpul NUMAR din tabela SOFERI, care se refer la numrul strzii i nu al autobuzului ca n primele tabele. 17 Validare la nivel de nregistrare (Property Sheet) pentru c avem nevoie de dou cmpuri.

Modele lucrri practice

3.2 Lucrarea practic nr. 2


Aprov-rez.mdb

Dispunei de baza de date APROV care conine 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 legturile permanente dintre tabele i s se aplice restriciile refereniale. 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 afieze o list a furnizorilor din Iasi sau Vaslui. S se scrie o fraz Select SQL pentru a obine o list a facturilor din categoria utilitati, cu valoarea de peste 200 lei (Nrfactura, Numefurn, Data, Valoarefact). S se ntocmeasc un raport al aprovizionrilor (Numr factur, Data, Nume furnizor, Valoare), cu gruparea nregistrrilor dup categoria de furnizor. Pentru fiecare categorie de furnizor se va cal cula totalul valoric al facturilor. Propunere de rezolvare
cheia primar pentru tabela Pli conform figurii de mai jos. legturile permanente dintre tabele i restriciile refereniale.

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, aciunea se finalizeaz apsnd butonul Run (!) din meniul Design. Verificarea operaiunii se
18

Varianta cu Append Query presupune urmtorii pai: Create Query Design. Se apas butonul Close (nu se adaug nicio tabel). Se alege din meniul Design opiunea Append Query. n acest formular se va aduga tabela dorit (de ex. APROVIZIONARE). n formularul structurii interogrii se scrie la Field noua nregistrare (de ex. 12445) i la Append To cmpul unde se adaug nregistrarea (de ex. NrFactura). La fel se face i cu restul nregistrrilor. A se avea n vedere urmtoarele aspecte: la valori tip dat se vor scrie ntre simbolul #, la text, ntre ghilimele. De asemenea, dac trebuie s facem adugri n mai multe tabele trebuie respectate ordinea populrii: nti prinii.

Modele lucrri practice


face deschiznd tabelele i urmrind dac s-au operat adugrile. 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 aprovizionrilor (Numr factur, Data, Nume furnizor, Valoare), cu gruparea nregistrrilor dup categoria de furnizor. Pentru fiecare categorie de furnizor se va calcula totalul valoric al facturilor 19.

La rulare va arta ca mai jos:

19

Realizarea acestui raport se poate face din Report Wizard.

Modele lucrri practice

3.3 Lucrarea practic nr. 3


Dispunei de baza de date APROV care conine 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 legturile 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 afieze o list cu facturile care nu au fost pltite integral, ordonate descresctor dup valoarea facturii. Lista va conine: Nrfactura, Categorie, Valoare. S se obin un formular pentru vizualizarea /actualizarea nomenclatorului de furnizori. S se ntocmeasc un raport al plilor (Numr factur, Nume furnizor, Data plat, Valoare), cu gruparea nregistrrilor pe zile. Se va calcula total valoare facturi pentru fiecare zi i valoarea medie a plilor zilnice. Propunere de rezolvare
Dispunei de baza de date APROV care conine 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. legturile permanente dintre tabele.

regul de validare care s impun ca valoarea maxim a unei facturi pentru un furnizor din categoria birotica s nu fie 20 mai mare de 300 lei . IIf([categorie]="birotica";IIf([valoareFac]<=300;True;False);True) interogare Select SQL, s se afieze o list cu facturile care nu au fost pltite integral, ordonate descresctor 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 21

Validare la nivel de nregistrare (Property Sheet) Dac enunul fcea referire doar la facturi nepltite, se putea realiza urmtoarea interogare: SELECT nrFactura, categorie, valoareFac FROM Aprovizionare WHERE nrFactura Not In (SELECT nrFactura FROM Plati) ORDER BY data DESC

Modele lucrri practice


formular pentru vizualizarea /actualizarea nomenclatorului de furnizori.

raport al plilor (Numr factur, Nume furnizor, Data plat, Valoare), cu gruparea nregistrrilor pe zile. Se va calcula total valoare facturi pentru fiecare zi i valoarea medie a plilor zilnice.

Modele lucrri practice

Urmtorii pai in de gustul estetic, altfel putei da direct Finish.

3.4 Lucrarea practic nr. 4


Vanzare-rez.mdb

Dispunei de o baz de date VANZARE cu tabelele AGENI(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 corespunztoare acestora. S se stabileasc legturile permanente dintre cele 3 tabele i s se aplice restriciile refereniale. S se adauge factura cu numrul 2222, din data de 12 mai 2011, n valoare de 100 lei. Factura este ntocmit pentru zona Tatarai de ctre un agent nou, Marinescu Ioana, de pe strada Ion Creang, nr. 13, care are codul A10. Folosind o interogare SQL, s se afieze o list cu vnzrile din zona 1, cu valori mai mici de 300 lei (Lista va conine: Nume agent, Numr factur, Data facturii, Valoare factur). S se obin ntr-un raport vnzrile agentului A2, grupate pe zile. Raportul va conine: Numele agentului, Numrul facturii, Data facturii i Valoarea facturii. Propunere de rezolvare
cheile primare sunt redate n figura de mai jos. legturile permanente dintre cele 3 tabele i restriciile refereniale.

factura cu numrul 2222, din data de 12 mai 2011, n valoare de 100 lei. Factura este ntocmit pentru zona Tatarai de ctre 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 vnzrile 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
Pentru varianta Append Query a se vedea LP2

22

Modele lucrri practice


Raport cu vnzrile agentului A2, grupate pe zile.

Restul pailor pot fi doar NEXT sau FINISH direct (nu sunt att de importani, n cazul cerinei noastre). Se nchide modul de vizualizare PrintPreview (Close Print Preview). Va aprea automat fereastra Report Design.

Se activeaz formularul Property Sheet. n acest formular se alege n fereastra Selection Type, cuvntul Report (apsarea pe sgeica 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 aprea Query Design, aferent acestui raport. Se d dublu clic pe cmpul CodAg din tabela Agenti pentru a o introduce n structura interogrii, dar se debifeaz caseta Show

Apoi, se scrie la Criteria A2 (ghilimelele vor aprea automat). Se poate face proba ca s ne convingem c sunt doar seleciile agentului A2, apoi se nchide interogarea. Rularea raportului va reda doar vnzrile agentului A2 grupate pe zile.