MODELE DE FIŞIERE ACCESS PENTRU ANTRENARE 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 .................................................................................................3 1.4 ALTE „ACCESORII” ..............................................................................................................................4 1.4.1 Format .........................................................................................................................................4 1.4.2 Input Mask ..................................................................................................................................4 1.4.3 Default value (valoare implicită) ................................................................................................5 1.5 POPULAREA CU DATE ..........................................................................................................................5 1.6 INTEROGĂRI ........................................................................................................................................6 1.6.1 Filtrarea şi ordonarea directă a datelor dintr-o tabelă .................................................................6 1.6.2 Actualizarea directă a datelor .....................................................................................................6 1.6.3 Crearea de interogări cu instrumente de tip Wizard ...................................................................6 1.6.4 Definirea interogărilor prin Query Design................................................................................11 1.6.5 Interogări SQL ..........................................................................................................................14 1.1 RAPOARTE ........................................................................................................................................18 1.1.1 Asistentul de rapoarte ...............................................................................................................18 1.1.2 Raport simplu din două tabele ..................................................................................................19 1.1.3 Raport cu gruparea înregistrărilor şi subtotaluri .......................................................................21 1.2 FORMULARE......................................................................................................................................22 2 EVIDENŢĂ STUDENŢI ........................................................................................................................ 26 2.1 Crearea tabelelor şi definirea restricţiilor ........................................................................................26 1. Crearea tabelelor şi declararea valorilor implicite ....................................................................26 2. Reguli de validare .....................................................................................................................26 3. Declararea restricţiilor referenţiale ...........................................................................................27 2.2 Editarea tabelelor şi navigarea prin înregistrări ...............................................................................27 2.3 Obţinerea de informaţii din baza de date .........................................................................................27 1. Setul nr. 1 de întrebări...............................................................................................................28 2. Setul nr. 2 de întrebări...............................................................................................................30 3. Setul nr. 3 de întrebări...............................................................................................................30 4. Setul nr. 4 de întrebări...............................................................................................................30 5. Setul nr. 5 de întrebări...............................................................................................................31 6. Setul nr. 6 de întrebări...............................................................................................................32 7. Setul nr. 7 de întrebări...............................................................................................................33 3 EVIDENŢA VÂNZĂRILOR ................................................................................................................. 34 3.1 Detalii bază date ...............................................................................................................................34 3.2 Schema bazei de date .......................................................................................................................35 3.3 Interogări ..........................................................................................................................................35 4 EVIDENŢĂ BIBLIOTECĂ.................................................................................................................... 53 5 MODELE LUCRĂRI PRACTICE ......................................................................................................... 68 Lucrarea practică nr. 1 ...........................................................................................................................68 Lucrarea practică nr. 2 ...........................................................................................................................69 Lucrarea practică nr. 3 ...........................................................................................................................70 Lucrarea practică nr. 4 ...........................................................................................................................72 Lucrarea practică nr. 5 ...........................................................................................................................74 Note 1. Este posibil să fie anumite “scăpări”, materialul fiind lucrat în timp (muuult timp)… “printre picături”. 2. În anumite locuri din document există o zonă în care se face trimitere la fişierul pe care este bine de lucrat, fişier care se găseşte în secţiunea Attachments (Ataşamente). Zona arată cam aşa: 3. Deseori, în informatică, se poate ajunge la un rezultat pe mai multe căi (totul este să nu ajungeţi … „pe mai multe cărări” ;) ) 1
1 GESTIUNE PRODUSE FINITE 1.1 STRUCTURA BAZEI DE DATE Tabela
Denumire atribut
Documente de intrare
i Lungime
Tip dată numar nota intrare Short Text data document Date/Time cod gestiune Short Text
8 Short Date 8
Tabela Incasari
Linii in documente
numar nota intrare Short Text 8 Short Text 8 cod produs cantitate Number Single
Produse
Avize de expeditie
Clienti
Linii in avize
Gestiune
numar aviz data aviz cod gestiune cod client numar aviz cod produs cantitate procent tva pret cod gestiune denumire gestiune nume gestionar
Short Text Date Time Short Text Short Text Short Text Short Text Number Number Number Short Text Short Text Short Text
8 Short Date 8 8 8 8 Single Byte Single 8 20 20
Localitati
Denumire atribut
Tip dată
Lungime
numar document data document cod client suma tip de document cod produs denumire produs unitate de măsură pret stoc cod client denumire client cod localitate sold cod localitate denumire localitate denumire judet
Short Text Date/Time Short Text Number Text Short Text Short Text Short Text Number Number Short Text Short Text Short Text Number Short Text Short Text Short Text
S Short Date 8 Single 20 8 20 3 Single Single 8 20 4 Single 8 20 20
Câmpurile care au conţinut numeric, dar nu sunt folosite în calcule pot fi configurate 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. În acest punct, pentru antrenare, descarcă Baza de date se află în cadrul acestui document PDF GestProdFin-simpla.accdb Baza de date în forma în care se pot stabili cheile primare, introdus valori implicite, reguli de validare etc.
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; - 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.
2
Gestiune produse finite De regulă, se bifează primele două casete (Enforce Referential Integrity1 şi Cascade Update Related Fields2). Cascade Delete Related Records3 nu prea se obişnuieşte a fi bifată, decât ca excepţie.
1.3 RESTRICŢII 1.3.1 Restrictii la nivel de atribut4 1. În tabela Clienti, denumirea clientului să fie obligatoriu cu majuscule. Validation Rule: StrComp(UCase([denumire client]);[denumire client];0)=0 Validation Text: "DENUMIREA CLIENTULUI - CU MAJUSCULE !!!" 2. În tabela Linii in documente, cantitatea trebuie să fie pozitivă. Validation Rule: >0 Validation Text: „CANTITATEA TREBUIE SA FIE POZITIVA!!!” 3. Tabela Produse, unitate de masura să aibă prima literă scrisă cu majuscule. Validation Rule5: StrComp(Left(UCase([unitate de masura]);1);Left([unitate de masura];1);0)=0 Validation Text: "INTRODUCETI PRIMA LITERA MAJUSCULA !!!" 4. În tabela Incasari, suma să fie cuprinsă între 100 şi 1000 lei Validation Rule: Between 100 And 1500 Validation Text: „Suma trebuie să fie între 100 şi 1500!!!” 5. În tabela Incasari, documentul poate fi doar de tip „CEC”, „Ordin de plată”, „Chitanţă” Validation Rule: In ("Chitanta";"Ordin de plata";"CEC") Validation Text: „DOCUMENTUL - Chitanta, Ordin de plata sau CEC!!!” 6. În tabela Încasări, data document să fie cuprinsă între 1 ianuarie 2006 şi 31 martie 2006. Validation Rule: Between #01.01.2006# And #31.03.2006# Validation Rule: „Data necorespunzătoare” 7. În tabela Documente de intrare, data documentului trebuie să nu depăşească data curentă Validation Rule: <=Date() Validation Rule: „Data documentului trebuie să nu depăşească data curentă!”
1.3.2 Restrictii la nivel de inregistrare6 Î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 !!!" Nu va fi permisă introducerea unei înregistrări în tabelul-copil dacă valoarea din cheia străină nu există în cheia primară din tabelul părinte. La modificarea valorii cheii primare din tabelul părinte se modifică toate înregistrările aferente din tabelul copil. 3 Selectarea acestei opţiuni determină ca la o ştergere a valorii unei chei primare din tabela părinte să se şteargă toate înregistrările aferente din tabela copil. 4 Atenţie: regula de validare să fie aplicată câmpului solicitat! Asta presupune ca, întâi să dăm clic pe câmpul respectiv apoi se completează Validation Rule şi Validation Text. 5 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 (punct şi virgulă pentru setările româneşti, virgula pentru cele americane). La versiunile actuale de Access, când începem scrierea unei funcţii, în momentul în care este recunoscută, i se va reda sintaxa – de văzut acolo ce sugerează Access-ul: punct şi virgulă sau virgulă. 6 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. 1 2
3
Gestiune produse finite
1.4 ALTE „ACCESORII” 1.4.1 Format7 Se foloseşte pentru a afişa datele într-o manieră mai prietenoasă. De exemplu, într-un fel arată 128934 şi altfel 128.934 lei. Sau, într-un fel este 01/01/2016 şi altfel arată 1 ianuarie 2016. Setările se realizează, din formularul din partea de jos, unde se regăseşte opţiunea Format.
Exemple pentru valori numerice
şi pentru valori dată-timp
Exemple pentru valori de tip text @@@-@@-@@@@ - Depozit→D-ep-ozit (desigur, acest format este mai util pentru valorile ce conţin cifre, dar sunt în câmpuri de tip Text. @@@@@@@@@ - Depozit → Depozit. D-ep-ozit→D-ep-ozit > Va afişa cu majuscule, indiferent cum este scris: Depozit → DEPOZIT DEPOZIT →DEPOZIT depozit →DEPOZIT < Va afişa cu litere mici, indiferent cum este scris: Depozit → depozit DEPOZIT →depozit depozit →depozit @;"Lipsa produs" – dacă nu sunt valori într-o celulă de tip text (Null) sau valori de lungime 0, va afişa textul scris între ghilimele. Va simula şi opţiunea Default Value, apărând ca valoare potenţială
1.4.2 Input Mask Uşurează modul de introducere a datelor. Afişarea ulterioară, însă, va fi după setările de la proprietatea Format. Pentru unele tipuri de date (Number, Date) poate fi util Wizard-ul; are avantajul că poate să dea feedback rapid asupra corectictudinii. Tabelul 1 Exemple de măşti de intrare 0 9 # L ? A a
Trebuie introdusă o cifră Poate fi introdusă o cifră Poate fi introdusă o cifră, spaţiu, semnul plus sau minus. Dacă este sărit, Access-ul va introduce un spaţiu gol. Trebuie introdusă o literă Poate fi introdusă o literă Trebuie introdusă o literă sau o cifră – literele vor fi afişate cu majuscule Poate fi introdusă o literă sau o cifră – literele vor fi afişate cu majuscule
Sursa: http://en.tekstenuitleg.net/articles/software/create-an-input-mask-in-access-tutorial
Tabelul 2 Exemple de măşti de intrare This input mask
Provides this type of value
Notes
(000) 000-0000
(206) 555-0199
In this case, you must enter an area code because that section of the mask (000, enclosed in parentheses) uses the 0 placeholder.
(999) 000-0000!
(206) 555-0199 ( ) 555-0199
In this case, the area code section uses the 9 placeholder, so area codes are optional. Also, the exclamation point (!) causes the mask to fill in from left to right.
(000) AAA-AAAA
(206) 555-TELE
Allows you to substitute the last four digits of a U.S. style phone number with letters. Note the use of the 0 placeholder in the area code section, which makes the area code mandatory.
#999
-20 2000
Any positive or negative number, no more than four characters, and with no thousands separator or decimal places.
7
Mai multe detalii pot fi găsite accesând acest link: https://support.office.com/en-us/article/Specify-how-data-displays-by-using-customformatting-a5e5bcde-85da-4c7a-8164-1fe286636668 4
Gestiune produse finite This input mask
Provides this type of value
Notes
>L????L?000L0
GREENGR339M3 MAY R 452B7
A combination of mandatory (L) and optional (?) letters and mandatory numbers (0). The greater-than sign forces users to enter all letters in uppercase. To use an input mask of this type, you must set the data type for the table field to Text or Memo.
00000-9999
9811598115-3007
A mandatory postal code and an optional plus-four section.
>L?????????????
Maria Pierre
A first or last name with the first letter automatically capitalized.
ISBN 0&&&&&&&&&-0
ISBN 1-55615-507-7
A book number with the literal text, mandatory first and last digits, and any combination of letters and characters between those digits.
>LL00000-0000
DB51392-0493
A combination of mandatory letters and characters, all uppercase. Use this type of input mask, for example, to help users enter part numbers or other forms of inventory correctly.
Sursa: https://support.office.com/en-us/article/Control-data-entry-formats-with-input-masks-e125997a-7791-49e5-8672-4a47832de8da
1.4.3 Default value (valoare implicită) Se foloseşte atunci când se doreşte evitarea repetiţiei obositoare, în popularea datelor identice. De exemplu, la un câmp unde s-ar stoca numărul matricol al unui student, primele caractere (31040701SL15), pot fi deja introduse, completând doar celelalte patru. Dacă se doreşte afişarea datei curente, la introducerea unei înregistrări noi, se poate folosi funcţia Date().
1.5 POPULAREA CU DATE În acest punct, pentru antrenare, descarcă Baza de date se află în cadrul acestui document PDF Baza de date utilizabilă pentru antrenament la popularea cu date. GestProdFin-restrictii.accdb Conţine deja chei primare, legăturile între tabele, restricţii
Ordinea de populare (introducere de date) se face începând cu tabelele părinte, apoi cu tabelele copil. Pentru a evita anumite surprize, se poate face popularea unei tabele-copil, din interiorul tabelei-părinte, apăsând acel plus ce se regăseşte în stânga primului atribut. Se ve deschide un subformular 8 ce afişează câmpurile tabelei-copil (mai puţin, cheia străină, care va fi introdusă automat dacă, la setarea restricţiilor referenţiale, se bifează Cascade Update Related Fields.
8
Dacă tabela-părinte are mai multe tabele subordonate, înaintea acelui subformular, va fi afişat un formular de unde se poate alege care dintre tabelele-copil se doreşte a fi conectată. 5
Gestiune produse finite În acest punct, pentru antrenare, descarcă Baza de date se află în cadrul acestui document PDF Baza de date pentru antrenarea interogărilor, formularelor, rapoartelor etc. GestProdFin-populata.accdb
1.6 INTEROGĂRI 1.6.1 Filtrarea şi ordonarea directă a datelor dintr-o tabelă9 [Ex. 1] Să se identifice clienţii din localitatea cu codul 1002, folosindu-se filtrarea directă a datelor. Se dă clic dreapta pe câmpul unde se doreşte a se face filtrarea, iar din meniul contextual se alege una din variantele dorite.
După cum se constată, pe lângă opţiunea avansată Text Filters (dacă câmpul este configurat de tip Number, apare Number Filters), se poate face filtrare rapidă, funcţie de înregistrarea pe care ne aflăm (în cazul de faţă 1002)
1.6.2 Actualizarea directă a datelor Se dă clic dreapta pe banda din stânga înregistrărilor, pentru a se selecta tot rândul, apoi se alege, din meniu, opţiunea dorită.
Adăugare Ştergere
1.6.3 Crearea de interogări cu instrumente de tip Wizard 1.6.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. Din meniul Create Query Wizard
9
Se foloseşte doar pentru a obţine rezultate rapide, dar nu se prea practică într-o manieră profesionistă. 6
Gestiune produse finite
Variantă Query Design
Variantă SQL SELECT [denumire client], [denumire localitate] FROM localitati INNER JOIN clienti ON localitati.[cod localitate] = clienti.[cod localitate]
1.6.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.
7
Gestiune produse finite
sau Variantă Query Design:
sau Variantă SQL: TRANSFORM Sum([suma]) AS SumOfsuma SELECT [cod client], Sum([suma]) AS [Total suma] FROM incasari GROUP BY [cod client] PIVOT [tip de document]
8
Gestiune produse finite 1.6.3.3 Găsirea unei valori-duplicat folosind Query Wizard [Ex. 4] Să se afişeze înregistrările avizelor de expediţie cu preţ identic.
Variantă Query Design
Variantă SQL SELECT pret, [numar aviz], [cod produs], cantitate, [procent TVA] FROM [linii in avize] WHERE pret In ( SELECT pret FROM [linii in avize] GROUP BY pret HAVING Count(*)>1 ) ORDER BY pret
9
Gestiune produse finite 1.6.3.4 Afişarea valorilor dintr-o tabelă care nu au corespondent în altă tabelă folosind Query Wizard [Ex. 5] Să se afişeze clienţii de la care nu sunt încasări
10
Gestiune produse finite Variantă Query Design
Variantă SQL SELECT C.[cod client], [denumire client], [cod localitate], sold FROM clienti C LEFT JOIN incasari I ON C.[cod client] = I.[cod client] WHERE I.[cod client] Is Null
1.6.4 Definirea interogărilor prin Query Design10
Pentru a ajunge la aceste interogări, din meniul Create Query Design se ajunge la formularul Show Table. Se pot adăuga tabelele prin mai multe metode: Dublu clic pe tabela/tabelele ce se doresc a fi interogate (este şi metoda cea mai comodă), sau Clic pe fiecare tabelă în parte şi apăsarea, de fiecare dată a butonului Add, sau Selectarea tabelelor necesare (dacă e nevoie, la selecţie, se poate folosi şi tasta Ctrl sau Shift, după caz), apoi apăsarea butonului Add
Obs. Adăugarea de mai multe ori a unei tabele nu trebuie să sperie. După închiderea formularului Show Table, pur şi simplu, se dă clic pe tabela inutilă şi apoi tasta Delete. Dacă se doreşte a se mai include în interogare şi altă tabelă, se poate apela din nou formularul Show Table, fie din meniul Design, fie dând clic dreapta pe fundalul unde sunt afişate simbolurile tabelelor şi alegerea opţiunii Show Table. 1.6.4.1 Interogări de selecţie [Ex. 6] 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. 10
Ca şi în exemplificările de mai sus, vom prezenta la fiecare interogare utilizând Query Design şi alternativa SQL. 11
Gestiune produse finite Aceeaşi expresie se introduce cu rol de criteriu.
PARAMETERS [Introdu codul localitatii] Text ( 255 ); SELECT [denumire client], [cod localitate] FROM clienti WHERE [cod localitate]=[Introdu codul localitatii]
[Ex. 7] 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ţ.
SELECT [avize de expeditie].[numar aviz], [data aviz], [denumire gestiune], [denumire client], [denumire localitate], [denumire produs], cantitate, [procent TVA], [linii in avize].pret FROM produse INNER JOIN ((gestiune INNER JOIN ( (localitati INNER JOIN clienti ON localitati.[cod localitate] = clienti.[cod localitate]) INNER JOIN [avize de expeditie] ON clienti.[cod client] = [avize de expeditie].[cod client]) ON gestiune.[cod gestiune] = [avize de expeditie].[cod gestiune]) INNER JOIN [linii in avize] ON [avize de expeditie].[numar aviz] = [linii in avize].[numar aviz]) ON produse.[cod produs] = [linii in avize].[cod produs] WHERE [avize de expeditie].[numar aviz]="1002"
Obs. Câmpurile [numar aviz] şi pret au nevoie de referinţă la tabele deoarece, în interogarea dată, se găsesc în cel puţin două tabele. La joncţiuni, însă este evident că trebuie şi referinţa pentru a şti de unde este cheia primară, respectiv cheia străină. 1.6.4.2 Interogări de adăugare [Ex. 8] 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. Se apelează, ca la interogarea de selecţie, meniul Create Query Design, doar că, din Show Table, nu se adaugă nicio tabelă, ci se apasă Close. Apoi, din meniul Design se alege opţiunea Append Query (sau dând clic dreapta pe fundalul unde ar fi fost tabelele.
12
Gestiune produse finite
INSERT INTO clienti ( [cod client], [denumire client], [cod localitate], sold ) SELECT 1008, "SC BENNY HILL SRL", 1001, 777
1.6.4.3 Interogări de modificare [Ex. 9] Să se modifice pentru clientul cu codul 1008 soldul în 888
UPDATE clienti SET sold = 888 WHERE [cod client]="1008"
1.6.4.4 Interogări de ştergere [Ex. 10] Ştergeţi clientul cu codul 1008
DELETE * FROM clienti WHERE [cod client]="1008"
13
Gestiune produse finite 1.6.4.5
Interogare folosind două tabele
SELECT [denumire client], [denumire localitate] FROM localitati INNER JOIN clienti ON localitati.[cod localitate] = clienti.[cod localitate]
1.6.5 Interogări SQL 1.6.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. 11]
Lista clienţilor din localitatea cu codul 1002. Lista [Ex. 12] Care sunt clienţii din localitatea cu codul 1006 care va cuprinde numai denumirea clienţilor. au soldul >1000. Lista va cuprinde: denumire SELECT [denumire client] client, cod client. FROM clienti WHERE [cod localitate]= "1002"
SELECT [denumire client], [cod client] FROM clienti WHERE [cod localitate]="1006" AND sold>1000
Obs: Constantele de tip text pot fi scrise între ghilimele (“) sau apostrof (’) [Ex. 13]
Obs: Pot fi folosiţi şi operatorii logici (AND/OR/NOT)
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#
sau
SELECT [numar nota intrare], [data document] FROM [documente de intrare] WHERE [data document] BETWEEN #2006/02/15# AND #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. 14]
Care sunt clienţii din judeţul cu codul IS. Lista va cuprinde doar denumirea clienţilor. Varianta 111) Varianta 2)
SELECT [denumire client] FROM clienti, localitati WHERE clienti.[cod localitate]=localitati.[cod localitate] AND [denumire judet]= "IS"
SELECT [denumire client] FROM localitati INNER JOIN clienti ON localitati.[cod localitate] = clienti.[cod localitate] WHERE [denumire judet]="IS"
[Ex. 15] Întocmiţi lista clienţilor din judeţul Iaşi în ordinea [Ex. 16] Întocmiţi lista clienţilor din judeţul Iaşi, ordonată alfabetică a denumirii acestora. Lista va cuprinde: după soldul descrescător. Lista va cuprinde denumirea clientului şi soldul acestuia. denumire client şi sold SELECT [denumire client], [sold] FROM clienti c, localitati l WHERE c.[cod localitate]=l.[cod localitate] AND [denumire judet]= "IS" ORDER BY [denumire client]
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.6.5.2 Utilizarea principalilor operatori Operatori: =,<,>,<=,>=,AND, OR, BETWEEN, UNION, LIKE, IN 11
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" 14
Gestiune produse finite Reluarea [Ex. 13] SELECT [numar nota intrare], [data document] FROM [documente de intrare] WHERE [data document] BETWEEN #2006/02/15# AND #2006/03/15#
[Ex. 17] 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) Varianta 2) 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"
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. 18] 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 Este obligatoriu ca, numărul câmpurilor din tabelele reunite să fie egal. [Ex. 19] Î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. 20] Î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 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. 21] Care sunt clienţii de tip SRL12? SELECT * FROM clienti WHERE [denumire client] LIKE '*SRL*'
[Ex. 23]
12 13
[Ex. 22] Care sunt gestionarii care au numele de familie format din 7 caractere şi se termină în ‘escu’13? SELECT * FROM gestiune WHERE UCASE([nume gestionar]) LIKE '???ESCU*'
Întocmiţi lista clienţilor din judeţul Iaşi, Vaslui, Suceava, Botoşani.
Caracterul asterix (*) înlocuieşte un şir de caractere Semnul întrebării (?) înlocuieşte un singur caracter. 15
Gestiune produse finite Varianta 2) Se poate şi prin utilizarea operatorului logic OR
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.
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')) [Ex. 24]
Întocmiţi lista clienţilor din localitatea Iaşi. (Rezolvarea unei solicitări prin trei modalităţi) Varianta 1 (Design View) Varianta 2 – SQL cu INNER JOIN SELECT [denumire client] FROM localitati l INNER JOIN clienti c ON l.[cod localitate] = c.[cod localitate] WHERE [denumire localitate]="Iaşi"
Varianta 2 – SQL cu INNER JOIN
Varianta 1 (Design View)
SELECT [denumire client] FROM localitati l, clienti c WHERE l.[cod localitate] = c.[cod localitate] AND [denumire localitate]="Iaşi"
1.6.5.3 Funcţii de agregare [Ex. 25] Câţi clienţi aveau soldul mai mare ca zero?
COUNT, SUM, AVG, MIN, MAX [Ex. 26] Câţi clienţi sunt din judeţul Iaşi?
SELECT COUNT (*) FROM clienti WHERE sold>0
SELECT COUNT (*) FROM clienti WHERE [cod localitate] IN ( SELECT [cod localitate] FROM localitati WHERE [denumire judet]='IS')
[Ex. 27] 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. 28] Care este valoarea încasărilor de la clientul cu [Ex. 29] Care a fost suma totală a soldurilor clienţilor? codul 1001? SELECT SUM(sold) AS Total FROM clienti
SELECT SUM(suma) AS Total FROM incasari WHERE [cod client]='1001'
[Ex. 30]
Care este suma încasată de la clienţii din municipiul Iaşi? Varianta 1) Varianta 1’) Folosind o subinterogare şi operatorul IN
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'
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')
16
Gestiune produse finite Varianta 2) Folosind o subinterogare şi operatorul IN, dar o subinterogare mai mică
Varianta 3) Folosind o subinterogare şi operatorul NOT IN
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')
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
Varianta 5) Folosind funcţia IIF
SELECT SUM(suma) AS Total FROM incasari WHERE [cod client] IN ( SELECT [cod client] FROM clienti c WHERE [cod localitate] IN ( SELECT [cod localitate] FROM localitati WHERE UCASE([denumire localitate]) LIKE 'IA?I'))
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. 31] Care este volumul încasărilor din luna [Ex. 32] Care este totalul vânzărilor din luna februarie 2006? februarie 2006? SELECT SUM(cantitate*pret*(1+[procent TVA]/100)) SELECT SUM(i.suma) AS Total FROM incasari i WHERE MONTH([data document])=2 AND YEAR([data document])=2006
[Ex. 33]
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 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. 34]
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. 35]
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. 36] Care este valoarea medie a încasărilor?
[Ex. 37] Care este produsul care avea la începutul anului cel mai mare stoc?
SELECT AVG(suma) AS [Media incasarilor] FROM incasari
[Ex. 38]
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) FROM incasari WHERE YEAR([data document])=2006)
1.6.5.4 Gruparea înregistrărilor [Ex. 39]
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] 17
Gestiune produse finite 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.
1.1 RAPOARTE 1.1.1 Asistentul de rapoarte 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 Report14.
[Ex. 40]
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. 41]
14
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.
În aceeaşi manieră rapidă se poate realiza şi un formular, în cazul de faţă pentru actualizarea gestiunii. 18
Gestiune produse finite
1.1.2 Raport simplu din două tabele [Ex. 42] 1.
Periodic, serviciul de vânzări solicită lista actualizată a clienţilor în vederea elaborării politicilor de marketing pe localităţi.
Proiectarea raportului Macheta raportului Lista clienţilor la data de 3/21/2007 Codul localităţii 1005
Denumirea localităţii Bârlad
Denumirea judeţului VS 19
Codul clientului 1001
Denumirea clientului SC KOMBASAN SA
Gestiune produse finite 1002 1002 1006 1005 1006 1007
Iaşi Iaşi Galaţi Bârlad Galaţi Tecuci
IS IS GL VS GL GL
1002 1003 1004 1005 1006 1007
SC UNIREA SA SC HOFFER SA SC CORAL SRL SC AMBRAS SA SC VADUL SA SC HORBAD SRL
Pag 1
2.
Pregătirea datelor sursă
Interogarea Rap_3_clienti_pe_localitati15 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
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.
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) 15
20
Gestiune produse finite 1.1.3 Raport cu gruparea înregistrărilor şi subtotaluri [Ex. 43]
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
Procentul TVA
Preţul
02.06.2006 Cornuri 30 Buc 19 02.06.2006 Lapte 12 L 19 Valoarea produselor vândute clientului SC HOFFER SA Kg 02.05.2006 Biscuiţi 25 Buc 19 02.05.2006 Covrigi 10 Kg 19 02.07.2006 Colaci 4 Buc 19 Valoarea produselor vândute clientului SC KOMBASAN SA Valoarea totală a produselor vândute
25 12,5 17,5
Data avizului
Denumirea produsului
Cantitatea
Unitatea de măsură
SC HOFFER SA 1005 1006 SC KOMBASAN SA 1002 1002 1003
12 15 20 47 64,5
2. Pregătirea datelor16 SELECT [denumire client], AE.[numar aviz], [data aviz], [denumire produs], cantitate, [unitate de masura], [procent TVA], LA.pret, LA.[cod produs] 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.
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 16
21
Gestiune produse finite
1.2 FORMULARE [Ex. 44] Să se realizeze un formular care să permită actualizarea ambelor tabele: localitati şi clienti. 4. Proiectarea formularului Macheta formularului Actualizare clienţi Cod localitate Denumire localitate Judeţ Clienţi
Cod client
Denumire client
22
Sold
Gestiune produse finite 5.
Definirea formularului cu asistentul de formulare. Din meniul Create se alege dând clic pe More Forms, opţiunea Form wizard.
23
Gestiune produse finite [Ex. 45]
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 Numărul avizului
Denumire produs
Data curentă Data
Cantitate
Denumirea clientului
Unitate de măsură
Procent TVA
Preţ
Aviz nou
Căutare
Ştergere Valoarea totală a avizului de expediţie numărul
|<
<
Salvare
>
>|
24
Închidere formular
Gestiune produse finite
Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF GestProdFin-rezolvata.accdb Baza de date rezolvată, pentru verificare
25
2 EVIDENŢĂ STUDENŢI 2.1 Crearea tabelelor şi definirea restricţiilor Crearea tabelelor şi declararea valorilor implicite
1.
PK
Atribut (Field Name)
Tip (Data Type)
Matricol NumePren CNP Specializare AnStudii Fstudii Grupa
Text Text Text Text Number Text Number
CodDisc DenumireDisc NrCredite NrOreCurs NrOreSeminar
Text Text Number Number Number
Matricol CodDisc DataEx NotaEx
Text Text Date/Time Number
Lungime Valori implicite (Field Size) (Default Value) STUDENTI 10 40 15 50 "Trunchi comun" Long Integer 1 2 "ID" Long Integer 1 DISCIPLINE 6 40 Long Integer 6 Long Integer 28 Long Integer 28 EXAMENE 10 6 "AE1101" IIF(DATE()<#20/01/2006#;DATE();#20/01/2006#) Long Integer 7
â
Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF EvStud-simpla.accdb Baza de date necesară pentru antrenarea cheilor, restricţiilor, regulilor de validare
2.
Reguli de validare 2.1.2.1 La nivel de atribut Atribut (Field Name)
Restrictii Validation Rule STUDENTI
Validation Text
Matricol Specializare AnStudii Fstudii Grupa
StrComp(UCASE([Matricol]);[Matricol];0)=0 StrComp(LEFT(UCASE([Specializare]);1);LEFT([Specializare];1);0)=0 [AnStudii] BETWEEN 1 AND 5 [Fstudii] IN ('ZI';'ID') [Grupa]>0
CodDisc NrCredite NrOreCurs NrOreSeminar
StrComp(UCASE([CodDisc]);[CodDisc];0)=0 <=8 <=42 <=42
DataEx NotaEx
Month([DataEx]) IN (1;2;5;6;7) AND Year([DataEx])=2006 BETWEEN 1 AND 10
Literele din matricol, obligatoriu cu majuscule! Prima litera din Specializare e majuscula! An studii intre 1 si 5! Forma studii doar ZI sau ID! Nr grupei pozitiv!
DISCIPLINE Literele din CodDisc cu majuscule! Nr credite nu mai mult de 8! Nr orelor de curs nu mai mult de 42! Nr orelor de seminar nu mai mult de 42!
EXAMENE Numai lunile IAN, FEB, MAI, IUN sau IUL din 2006! 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 Textul de afişat (Validation Text)
Restrictii (Validation Rule) STUDENTI [AnStudii]<>4 OR [AnStudii]=4 AND [Grupa]<=10
La anul 4 de studiu pot fi maximum 10 grupe!
DISCIPLINE [NrOreCurs]+[NrOreSeminar]<=70
Nr ore curs + ore seminar cel mult 70!
EXAMENE [CodDisc]<>'AE1101' OR [CodDisc]='AE1101' AND [DataEx] IN (#28.01.2006#;#02.11.2006#;#07.04.2006#)
Examenele la Macroeconomie au fost programate pe 28 ian, 11 feb si 4 iul!
26
3.
Evidenţă studenţi 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ă.
2.3 Obţinerea de informaţii din baza de date Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF EvStud-populata.accdb Baza de date cu restricţii şi populată, pentru antrenamentul cu interogări.
27
Evidenţă studenţi 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)17. 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.
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. 17
28
Evidenţă studenţi Varianta 1 – utilizarea Query Design Varianta 2 – utilizarea SQL View SELECT * FROM studenti WHERE [NumePren] Like '*Vasile' OR [NumePren] Like '*Sile' OR [NumePren] Like '*Vasilica'
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.
e) Care sunt disciplinele cu peste 6 credite?
f) Care sunt disciplinele cu peste 28 de ore de curs şi sub 42 de ore de seminar?
g) În ce zile a susţinut examene studentul cu matricolul ELZ02001?
h) La ce discipline a susţinut examene studentul cu matricolul ELZ02001?
i) Care este codul disciplinelor la care s-au susţinut examene în luna februarie 2006?
29
Evidenţă studenţi 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?
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)
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?
30
Evidenţă studenţi
c) Câte credite a obţinut studentul Barbu I. Vasile (atenţie, nu se iau în calcul examenele ”picate”!)?
e) Care este cea Microeconomie?
mai
mare
notă
la
d) Câte credite s-au obţinut la nivelul anului III al specializării Informatică economică, Zi?
f) Care este cea mai mică notă obţinută la nivelul anului III, specializarea Informatică Economică, Zi?
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. 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?
5.
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”!)?
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?
31
Evidenţă studenţi
c) La ce discipline studentul Barbu I. Vasile a obţinut note peste media sa?
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?
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?
d) Câţi studenţi au susţinut examene în fiecare zi de sesiune?
32
Evidenţă studenţi
e) Câţi studenţi au fost examinaţi în cele patru luni de sesiuni, pentru fiecare disciplină?
7.
f) Numărul de examene picate, pentru fiecare an de studii.
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 ianuariefebruarie 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.
Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF EvStud-rezolvata.accdb Baza de date rezolvată, pentru verificare
33
3 EVIDENŢA VÂNZĂRILOR 3.1 Detalii bază date PK
Denumire atribut
Tipul de datăii
Valori implicite
Lungime
Reguli de validare
Text validare
Clienţi
Cod client Denumire client Localitate Strada Numar strada Distanta
Number Text Text Text Number Number
Long integer 25 15 15 Integer Integer
0
>=100 AND <=999
0 0
>=0 >=0
(18)
(19)
(20) (21)
Comenzi
Cod cda Numar cda Cod client Cod produs Cantitate Data comenzii
Number Number Number Number Number Date/Time
Long integer Long integer Long integer Long integer Long integer Short Date
>=100 AND <=999 >=0 <=DATE()
(22)
BETWEEN 34500 AND 37199
(24)
IN ("BC";"ML";"TO";"MP";"MC")
(25)
(23)
Produse
Cod produs Denumire produs U_M Pret intreg
Number Text Text Number
Long integer 20 3 Single, Decimal Places
sau BETWEEN 100 and 999 client eronat. Corect este: [100,999] (20) Numarul strazii trebuie sa fie pozitiv! (21)Distanta este mai mare ca zero! (22)Cantitatea trebuie sa fie pozitiva! (23)Data comenzii depaseste data curenta! (24)Codul produsului trebuie să fie din intervalul [34500, 37199] (25)Unitatea de masura poate fi BC, ML, TO, MP, MC (18)
(19) Cod
34
34500
Evidenţa vânzărilor
Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF EvidVanzari-simpla.accdb Baza de date necesară pentru antrenarea cheilor, restricţiilor, regulilor de validare
3.2 Schema bazei de date
Idem şi pentru cealaltă legătură
3.3 Interogări Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF EvidVanzari-populata.accdb Baza de date cu restricţii şi populată, pentru antrenamentul cu interogări.
[Ex. 1.1.] Lista comenzilor (numar comanda, data comenzii, denumire client, cantitate, preţ întreg) pentru clienţii din Iaşi care au comandat cantităţi mai mari de 2000 um. Query Design
SQL SELECT [Numar cda], [Data comenzii], [Denumire client], Cantitate, [Pret intreg] FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] 35
Evidenţa vânzărilor ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Cantitate>2000 AND Localitate="Iasi"
Rezultat
[Ex. 1.2.] Lista comenzilor (numar comanda, data comenzii, denumire client, cantitate, preţ întreg) pentru clienţii din Iaşi sau pentru cei care au comandat cantităţi mai mari de 2000 um. Query Design
SQL SELECT [Numar cda], [Data comenzii], [Denumire client], Cantitate, [Pret intreg] FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Localitate="Iasi" OR Cantitate>2000
Rezultat
[Ex. 2.] Lista clienţilor care au comandat produsul Sacou AC-226 (denumire client, număr comandă, data comenzii, denumire produs, cantitate) Query Design
36
Evidenţa vânzărilor SQL SELECT [Denumire client], [Numar cda], [Data comenzii], [Denumire produs], Cantitate FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client]) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE [Denumire produs]="Sacou AC-226"
Rezultat
[Ex. 3.] Lista clienţilor care au trimis comenzi în luna martie (denumire client, numar comanda, data comenzii, denumire produs) Query Design
SQL SELECT [Denumire client], [Numar cda], [Data comenzii], [Denumire produs] FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Month([Data comenzii])=3
Rezultat
[Ex. 4.] Lista produselor comandate pe localităţi (localitate, denumire produs) Query Design
SQL SELECT Localitate, [Denumire produs] FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs]
37
Evidenţa vânzărilor Rezultat
[Ex. 5.] Lista produselor comandate de clientii din Suceava şi Vaslui (denumire client, data comenzii, denumire produs, cantitate) Query Design
SQL SELECT [Denumire client], [Data comenzii], [Denumire produs], Cantitate FROM Produse INNER JOIN ( Clienti INNER JOIN Comenzi ON Clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Localitate="Suceava" Or Localitate="Vaslui"
Rezultat
[Ex. 6.] Lista comenzilor în care cantitatea este mai mare de 2000 iar preţul de înregistrare este de peste 150000 lei. Query Design
38
Evidenţa vânzărilor SQL SELECT [Numar cda], Cantitate, [Denumire produs], [Pret intreg] FROM Produse LEFT JOIN Comenzi ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Cantitate>=2000 AND [Pret intreg]>=150000
Rezultat
[Ex. C1.] Lista localităţilor de unde sunt clienţii26 SQL SELECT DISTINCT Localitate FROM clienti
Rezultat
[Ex. C2.] Lista clienţilor în ordine alfabetică: denumire client, cod client, localitate.
Query Design
SQL SELECT [Denumire client], [Cod client], Localitate FROM Clienti ORDER BY [Denumire client]
Rezultat
26
Clauza DISTICT elimină repetarea valorilor care apar mai mult de o dată. 39
Evidenţa vânzărilor [Ex. C3.] Lista clienţilor, în ordine alfabetică, pe localităţi Query Design
SQL
SELECT Localitate, [Denumire client], [Cod client] FROM Clienti ORDER BY Localitate, [Denumire client]
Rezultat
[Ex. C4.] Lista clienţilor, în ordinea alfabetică a localităţilor şi în ordinea descrescătoare a atributului cod client. Query Design
SQL
SELECT Localitate, [Denumire client], [Cod client] FROM Clienti ORDER BY Localitate, [Denumire client] DESC
40
Evidenţa vânzărilor Rezultat
[Ex. C5.] Lista comenzilor întocmite de clienţii din Iaşi: cod comanda, numar comanda, denumire client, localitate Query Design
SQL
SELECT [cod cda], [Numar cda], [Denumire client], Localitate FROM Clienti INNER JOIN Comenzi ON Clienti.[Cod client] = Comenzi.[Cod client] WHERE Localitate="Iasi"
Rezultat
[Ex. C6.] Lista produselor comandate, în ordinea descrescătoare a cantităţilor: numar comanda, cod produs, denumire produs, cantitate, valoare
41
Evidenţa vânzărilor Query Design
SQL SELECT [cod cda], Produse.[Cod produs], [Denumire produs], Cantitate, Cantitate*[Pret intreg] AS Valoare FROM Produse INNER JOIN Comenzi ON Produse.[Cod produs] = Comenzi.[Cod produs] ORDER BY Cantitate DESC
Rezultat
[Ex. C7.] Totalul valoric al comenzilor emise de clienţii din aceeaşi localitate: localitate, total comandat. Query Design
SQL SELECT Localitate, Sum([Cantitate]*[Produse].[Pret intreg]) AS Valoare FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] GROUP BY Localitate
42
Evidenţa vânzărilor Rezultat
[Ex. C8.] Lista produselor comandate în a căror denumire primele litere sunt “Sa” (cod produs, denumire produs, preţ înregistrare) Query Design
SQL SELECT Comenzi.[Cod produs], [Denumire produs], [Pret intreg] FROM Produse INNER JOIN Comenzi ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE [Denumire produs] Like "Sa*"
Rezultat
[Ex. C9.] Situaţia produselor comandate (cod client, nr. de comenzi, valoare) Query Design
SQL SELECT [Denumire client], Count(Comenzi.[cod cda]) AS [Nr comenzi], Sum([Cantitate]*[Pret intreg]) AS Valoare FROM Clienti INNER JOIN ( Produse INNER JOIN Comenzi ON Produse.[Cod produs] = Comenzi.[Cod produs] ) ON Clienti.[Cod client] = Comenzi.[Cod client] GROUP BY [Denumire client];
43
Evidenţa vânzărilor Rezultat
[Ex. C10.] Situaţia produselor comandate (cod client, nr de comezi, valoare medie pe comandă, nr produse comandate) Query Design
SQL SELECT [Denumire client], Count([cod cda]) AS [Numarul comenzilor], Avg([Cantitate]*[Pret intreg]) AS Media FROM Produse INNER JOIN ( Clienti INNER JOIN Comenzi ON Clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] GROUP BY [Denumire client]
Rezultat
44
Evidenţa vânzărilor [Ex. C11.] Lista comenzilor care au comandat produsul “Sacou” (denumire client, localitate, denumire produs, cantitate)
Query Design
SQL SELECT [Denumire client], Localitate, [Denumire produs], Cantitate FROM Produse INNER JOIN ( Clienti INNER JOIN Comenzi ON Clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE [Denumire produs] Like "Sacou*"
Rezultat
[Ex. C12.] Lista tuturor clienţilor firmei, care au sau nu comenzi (Cod client, denumire client, localitate, Numar cda, Data comenzii)
Query Design
SQL SELECT Clienti.[Cod client], [Denumire client], Localitate, [Data comenzii] FROM Clienti LEFT JOIN Comenzi ON Clienti.[Cod client] = Comenzi.[Cod client] 45
Evidenţa vânzărilor Rezultat
[Ex. S1.]
Lista clienţilor fără comenzi Query Design
SQL
SELECT Clienti.[Cod client], [Denumire client], Localitate FROM Clienti LEFT JOIN Comenzi ON Clienti.[Cod client] = Comenzi.[Cod client] WHERE [cod cda] Is Null
Rezultat
46
Evidenţa vânzărilor Varianta – Subquery Query Design cu SubQuery
SQL cu SubQuery SELECT [Cod client], [Denumire client], Localitate FROM Clienti WHERE [Cod client] Not In ( SELECT [cod client] FROM comenzi )
[Ex. S2.]
Liste clienţi pe localităţi, cu parametru de căutare Query Design
(27)
Acest buton poate fi apelat atunci când se doreşte ca parametrul să accepte oar un anumit tip de dată. Utilizarea sa este important, în special pentru datele de tip numeric, monetary, date/time, deoarece utilizatorul poate fi avertizat explicit când greşeşte tipul de dată, la introducere. Dacă parametrul este configurat să accepte date de tip text, nu va apărea niciun mesaj de eroare, orice s-ar introduce fiind interpretat ca text. De regulă, se ignoră folosirea acestui mod de declarare a parametrului, rezumându-se la introducerea lui direct în zona Criteria. Astfel, varianta simplă este: SELECT [Cod client], [Denumire client], Localitate FROM clienti WHERE Localitate=[Care este localitatea?] 27
47
Evidenţa vânzărilor
SQL PARAMETERS [Care este localitatea?] Text ( 255 ) ; SELECT [Cod client], [Denumire client], Localitate FROM clienti WHERE Localitate=[Care este localitatea?]
[Ex. S3.]
Lista clienţilor de tip SRL Query Design
SQL SELECT * FROM clienti WHERE [Denumire client] Like "*Srl"
Rezultat
[Ex. S4.]
Lista clienti din localitati cu nume din 7 caractere 48
Evidenţa vânzărilor Query Design
SQL SELECT [Denumire client], Localitate FROM clienti WHERE Localitate Like "???????"
Rezultat
[Ex. S5.]
Lista produselor din localităţi ce nu au patru caractere Query Design
SQL SELECT Comenzi.[Cod produs], [Denumire produs], [Pret intreg], [Denumire client], Localitate FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Localitate Not Like "????"
Rezultat
49
Evidenţa vânzărilor [Ex. S6.]
Lista produselor din localităţi care nu se termină în „i”. Query Design
SQL SELECT Comenzi.[Cod produs], [Denumire produs], [Pret intreg], [Denumire client], Localitate FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] WHERE Localitate Not Like "*i"
Rezultat
[Ex. S7.]
Lista comenzilor grupate pe client Query Design
SQL
SELECT Comenzi.[Cod client], [Denumire client], Count([cod cda]) AS [Nr comenzi], Sum(Cantitate*[Pret intreg]) AS Valoare FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] GROUP BY Comenzi.[Cod client], [Denumire client]
Rezultat
50
Evidenţa vânzărilor [Ex. S8.]
Lista comenzi grupate pe localitati Query Design
SQL SELECT Localitate, Count([cod cda]), Sum(Cantitate*[Pret intreg]) AS Valoare FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] GROUP BY Localitate
Rezultat
[Ex. S9.]
Număr comenzi mai mari de 1 Query Design
SQL SELECT Comenzi.[Cod client], [Denumire client], Count([cod cda]) AS [Nr comenzi], Sum(Cantitate*[Pret intreg]) AS Valoare FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs] GROUP BY Comenzi.[Cod client], [Denumire client] HAVING Count([cod cda])>1
Rezultat
51
Evidenţa vânzărilor [Ex. S10.] Lista produse comandate Query Design
SQL
SELECT DISTINCTROW [Denumire produs], [Cod produs] FROM Produse WHERE [Cod produs] In ( SELECT [cod produs] FROM [Comenzi] )
Rezultat
[Ex. S11.] Lista produse necomandate Query Design
SQL SELECT [Denumire produs], [Cod produs] FROM Produse WHERE [Cod produs] Not In ( SELECT [cod produs] FROM comenzi )
Rezultat
52
Evidenţa vânzărilor [Ex. S12.] Lista valorilor comenzilor pentru fiecare client Query Design
SQL SELECT [Denumire client], [Numar cda], [Data comenzii], Cantitate*[Pret intreg] AS Valoare FROM Produse INNER JOIN ( clienti INNER JOIN Comenzi ON clienti.[Cod client] = Comenzi.[Cod client] ) ON Produse.[Cod produs] = Comenzi.[Cod produs]
Rezultat
Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF EvidVanzari-rezolvata.accdb Baza de date rezolvată, pentru verificare
4 EVIDENŢĂ BIBLIOTECĂ Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF Biblio.accdb Baza de date necesară pentru antrenarea cheilor, restricţiilor, regulilor de validare
SETUL NR. 1 DE CERINŢE Q1. Care sunt cititorii din judeţul Suceava şi localitatea Vatra Dornei? QUERY DESIGN
SQL SELECT Cod_cit, NumePrenume, CNP, Strada, Localitatea, Judet FROM CITITORI WHERE Localitatea="Vatra Dornei" AND Judet="Suceava"
53
Evidenţa vânzărilor Notă: Access-ul va introduce automat valorile de tip text între ghilimele, cu condiţia ca acea valoare să nu coincidă cu anumite expresii rezervate. (De ex. dacă pentru Judet, s-ar folosi redarea din două litere, IS ar însemna judeţul Iaşi, dar IS este şi cuvânt rezervat de Access; ca atare, în astfel de caz, se introduc manual ghilimelele).
Q2. Care sunt cărţile publicate după 2003 şi intrate în bibliotecă în 2009? QUERY DESIGN
SQL SELECT Nr_inv, Cota, Autori, Titlu, Vol, Cod_editura, An_pub, Pret, Data_in FROM CARTI WHERE An_pub>=2003 AND YEAR(Data_in)=2009
Q3. Care sunt cărţile mai scumpe de 20 de lei, dar tipărite înainte de 2005? QUERY DESIGN
SQL SELECT Nr_inv, Cota, Autori, Titlu, Vol, Cod_editura, An_pub, Pret, Data_in FROM CARTI WHERE An_pub<=2005 AND Pret>=20
54
Evidenţa vânzărilor
Q4. Care sunt editurile din Iaşi? QUERY DESIGN
SQL SELECT Cod_Editura, Denumire, Localit FROM EDITURI WHERE Localit="Iasi"
Q5. Care sunt editurile din Bucureşti? Idem ca interogarea Q4. SETUL NR. 2 DE CERINŢE Q6. Ce cărţi au fost împrumutate în luna februarie 2017? QUERY DESIGN
SQL SELECT Cota, Titlu, Data_impr, Month(Data_impr) AS C1, Year(Data_impr) AS C2 FROM CARTI INNER JOIN IMPRUMUT ON CARTI.Nr_inv = IMPRUMUT.Nr_inv WHERE Month(Data_impr)=2 AND Year(Data_impr)=2017 55
Evidenţa vânzărilor Notă: Pentru a realiza un ALIAS (ca în exemplul de mai sus – C1 şi C2 – se poate folosi sau nu AS)
Q7. Ce cărţi au fost împrumutate şi returnate în februarie 2017? QUERY DESIGN
SQL SELECT Cota, Titlu, Data_retur FROM Carti INNER JOIN Imprumut ON Carti.Nr_inv = Imprumut.Nr_inv WHERE Month(Data_retur)=2 AND Year(Data_retur)=2017
Q8. Care sunt editurile cărţilor împrumutate în 2017? QUERY DESIGN
56
Evidenţa vânzărilor SQL SELECT i.Nr_inv, Data_impr, Titlu, Denumire FROM Edituri e INNER JOIN (Carti c INNER JOIN Imprumut i ON c.Nr_inv = i.Nr_inv) ON e.Cod_Editura = c.Cod_editura WHERE Year(Data_impr)=2017 Notă: Dacă se foloseşte mai des referinţa la o tabelă/un câmp, se poate utiliza un ALIAS; de ex., pentru tabela Edituri, se poate scrie Edituri e sau Edituri AS e.
Q9. Numele cititorilor şi adresele celor care au împrumutat cărţi de la editura Polirom în 2017 QUERY DESIGN
SQL SELECT NumePrenume, Strada, Localitatea, Judet, Titlu, Denumire, Data_impr FROM Edituri INNER JOIN (Cititori INNER JOIN (Carti INNER JOIN Imprumut ON Carti.Nr_inv = Imprumut.Nr_inv) ON Cititori.Cod_cit = Imprumut.Cod_cit) ON Edituri.Cod_Editura = Carti.Cod_editura WHERE Denumire="Polirom" AND Year(Data_impr)=2017
57
Evidenţa vânzărilor Q10. Numele cititorilor din Iaşi care au împrumutat cărţi în 2016 QUERY DESIGN
SQL SELECT NumePrenume, Strada, Localitatea, Judet, Titlu, Data_impr FROM Cititori INNER JOIN (Carti INNER JOIN Imprumut ON Carti.Nr_inv = Imprumut.Nr_inv) ON Cititori.Cod_cit = Imprumut.Cod_cit WHERE Localitatea="Iasi" AND Year(Data_impr)=2016
Q11. Numele cititorilor şi adresele celor care nu au returnat cărţile din decembrie 2016 QUERY DESIGN
58
Evidenţa vânzărilor SQL SELECT NumePrenume, Strada, Localitatea, Judet, Titlu, Month(Data_impr) AS C1, Year(Data_impr) AS C2 FROM Cititori INNER JOIN (Carti INNER JOIN Imprumut ON Carti.Nr_inv = Imprumut.Nr_inv) ON Cititori.Cod_cit = Imprumut.Cod_cit WHERE Month(Data_impr)=12 AND Year(Data_impr)=2016 AND Data_retur Is Null
Q12. Numele cititorilor, adresele şi cărţile cu scadenţa la împrumut depăşită. QUERY DESIGN
SQL SELECT NumePrenume, Strada, Localitatea, Judet, Titlu, Data_impr, (Date()-[Data_impr])-[per] AS Depasire FROM Cititori INNER JOIN (Carti INNER JOIN Imprumut ON Carti.Nr_inv = Imprumut.Nr_inv) ON Cititori.Cod_cit = Imprumut.Cod_cit WHERE Date()-Data_impr-per>0 AND Data_retur Is Null
59
Evidenţa vânzărilor SETUL NR. 3 DE CERINŢE Q13. Câte împrumuturi au fost realizate în 2010? QUERY DESIGN
SQL SELECT Count(*) AS Nr_impr_2017 FROM Imprumut WHERE Year(Data_impr)=2017
Q14. Câte edituri sunt din Bucureşti? QUERY DESIGN
SQL SELECT Count(*) AS Nr_Edit_Buc FROM Edituri WHERE Localit="Bucuresti"
60
Evidenţa vânzărilor Q15. Câte edituri sunt din afara Bucureştiului? QUERY DESIGN
SQL SELECT Count(*) AS Nr_Edit_Alte FROM Edituri WHERE Localit<>"Bucuresti"
Q16. Care este perioada de întârziere cea mai mare, înregistrată de o carte împrumutată? QUERY DESIGN
SQL SELECT Max(Date()-Data_impr-Per) AS Max_per FROM Imprumut
61
Evidenţa vânzărilor Q17. Care este media zilelor de întârziere, pe total bibliotecă, la nivelul anului 2016? QUERY DESIGN
SQL SELECT Avg(Date()-Data_impr-Per) AS Medie_2016 FROM IMPRUMUT WHERE Year(Data_impr)=2016
Q18. Câte cărţi a împrumutat cititorul cu numele Zaharia Maria? QUERY DESIGN
SQL SELECT Count(*) AS NR_carti FROM Imprumut WHERE Cod_cit IN ( SELECT Cod_cit FROM Cititori WHERE NumePrenume="Zaharia Maria")
62
Evidenţa vânzărilor Q19. Câte cărţi împrumutate au cea mai mare perioadă de întârziere? QUERY DESIGN
SQL SELECT Count(*) FROM Imprumut WHERE Date()-Data_impr-Per In ( SELECT Max(Date()-Data_impr-Per) AS Max_per FROM Imprumut)
Q20. Care sunt cărţile care au înregistrat cea mai mare perioadă de întârziere? QUERY DESIGN
SQL SELECT Cota, Titlu FROM Carti INNER JOIN Imprumut ON Carti.Nr_inv = Imprumut.Nr_inv WHERE Date()-Data_impr-Per In ( SELECT Max(Date()-Data_impr-Per) AS Max_per FROM Imprumut)
63
Evidenţa vânzărilor SETUL NR. 4 DE CERINŢE Q21. Numele cititorilor care au prenumele ca derivat de la Vasile QUERY DESIGN
SQL SELECT * FROM Cititori WHERE NumePrenume Like '* Vasil*' Or NumePrenume Like '* Sile*' Or NumePrenume Like '* Vasilica*'
Q22. Câte cărţi sunt intrate pe fiecare an în bibliotecă? QUERY DESIGN
SQL SELECT Year(Data_in), Count(*) AS Nr_carti FROM Carti GROUP BY Year(Data_in) ORDER BY Year(Data_in)
64
Evidenţa vânzărilor Q23. Care este numărul cărţilor publicate pe ani, din cele deţinute de bibliotecă? QUERY DESIGN
SQL SELECT An_pub, Count(*) AS Nr_carti FROM Carti GROUP BY An_pub ORDER BY An_pub
Q24. Să se afişeze anii în care numărul cărţilor publicate şi deţinute de biblioteca este mai mare sau egal cu 3 QUERY DESIGN
SQL SELECT An_pub, Count(*) AS Nr_carti FROM Carti GROUP BY An_pub HAVING Count(*)>=3 ORDER BY An_pub
65
Evidenţa vânzărilor Q25. Câte împrumuturi au fost sub 7 zile (inclusiv) în fiecare an? QUERY DESIGN
SQL SELECT Year(Data_impr), Count(*) FROM Imprumut WHERE Per<=7 GROUP BY Year(Data_impr) ORDER BY Year(Data_impr)
SETUL NR. 5 DE CERINŢE Q26. Care sunt editurile care ale căror cărţi editate au fost împrumutate în 2017? QUERY DESIGN
SQL SELECT DISTINCT Edituri.Cod_Editura, Denumire FROM Edituri INNER JOIN (Carti INNER JOIN IMPRUMUT ON Carti.Nr_inv = IMPRUMUT.Nr_inv) ON Edituri.Cod_Editura = Carti.Cod_editura WHERE Data_impr Between #1/1/2017# And #12/31/2017# ORDER BY Denumire
66
Evidenţa vânzărilor Q27. Care sunt cititorii care au împrumutat mai mult de 2 cărţi? QUERY DESIGN
SQL SELECT NumePrenume, Cititori.Cod_cit FROM Cititori WHERE Cititori.cod_cit In ( SELECT Cod_cit FROM ( SELECT COUNT(*), Cod_cit FROM Imprumut GROUP BY Cod_cit HAVING COUNT(*)>=2))
Q28. Care sunt editurile care au editate mai mult de 4 cărţi din cele deţinute de bibliotecă? QUERY DESIGN
SQL SELECT Denumire, Cod_Editura FROM Edituri WHERE Cod_Editura In ( SELECT Cod_Editura FROM ( SELECT COUNT(*), Cod_Editura FROM Carti GROUP BY Cod_Editura HAVING COUNT(*)>=3)) Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF biblio_rezolvat.accdb Baza de date rezolvată, pentru verificare 67
5 MODELE LUCRĂRI PRACTICE Lucrarea practică nr. 1 Dispuneţi de baza de date VANZARI cu tabelele CLIENTI(Codcl, Nume, Adresa, Zona), AGENTI(Codag, Nume, Salbaza, Zona) şi COMENZI(Nrcom, Data, Codcl, Codag, Valoare). Analizaţi atributele din fiecare tabel şi stabiliţi cheile primare corespunzătoare acestora. Definiţi legăturile dintre tabele şi aplicaţi restricţiile referenţiale. Definiţi o regulä de validare pentru data comenzii (data comenzii nu poate depăşi data curentă). Să se adauge comanda nr. 211 din 11 mai 2010, pentru un client nou (Florio SRL, din zona Nicolina, pentru care nu se cunoaşte adresa) care va avea codul 550. Comanda a fost preluată de agentul A3 şi are o valoare de 58 lei. Să se afişeze pe ecran o listä a comenzilor din ziua de 9 mai 2010, în ordinea zonelor. Calculaţi totalul comenzilor pe zone. Să se modifice salariul de bază al agentului cu codul A1 la 460 lei. Să se afişeze comenzile cu valoare mai mică de 50 lei din zonele Păcurari sau Bucium (Nrcom, Codcl, Valoare). Să se realizeze un raport al comenzior grupate după agentul care a preluat comanda (Nrcom, Data, Valoare). În antetul de grup se va afişa numele agentului, iar la sfârşitul grupului valoarea totală a comenzilor fiecărui agent. Definiţi un formular pentru vizualizarea/ actualizarea comenzilor. Propunere de rezolvare Pentru antrenare a se descărca Vanzari.accdb Baza de date pentru antrenare
Baza de date se află în cadrul acestui document PDF
cheile primare Clic dreapta pe tabela AGENTI, apoi alegerea opţiunii Design View
Clic dreapta pe câmpul CODAG şi alegerea opţiunii Primary Key
La tabela CLIENTI, de aceeaşi manieră, se stabileşte cheia primară câmpul CODCL, iar pentru tabela COMENZI, unde cheia primară este NRCOM. legăturile dintre tabele şi restricţiile referenţiale: a se vedea în figura de mai jos.
regulä de validare: data comenzii nu poate depăşi data curentă. În tabela COMENZI, modul Design View, clic pe câmpul DATA, apoi, se completează, ca mai jos: 68
Modele lucrări practice comanda nr. 211 din 11 mai 2010, pentru un client nou (Florio SRL, din zona Nicolina, pentru care nu se cunoaşte adresa) care va avea codul 550. Comanda a fost preluată de agentul A3 şi are o valoare de 58 lei. Întrucât tabela COMENZI este tabelă copil, atât pentru AGENTI, cât şi pentru CLIENTI, întâi va fi necesar să introducem noile înregistrări pentru celelalte două comenzi (dacă nu există agentul A3 sau clientul Florio SRL) Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF Vanzari-rez.accdb Baza de date rezolvată, pentru verificare
Lucrarea practică nr. 2 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 Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF Transport.accdb Baza de date pentru antrenare
cheile primare / cheile alternative: a se vedea în figura de mai jos28. legăturile permanente dintre tabele29.
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 Bacau30. 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 28
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.
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. 30 Validare la nivel de înregistrare (Property Sheet) pentru că avem nevoie de două câmpuri. 29
69
Modele lucrări practice ON Autobuze.numar = Plecari.numar WHERE locuri>=40 AND destinatie="Bacau" Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF Transport-rez.accdb Baza de date rezolvată, pentru verificare
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 ş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 Pentru antrenare a se descărca Baza de date se află în cadrul acestui document PDF Aprov.accdb Baza de date pentru antrenare
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"
sau31 ş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 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. 31
70
Modele lucrări practice operaţiunii se 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 facturilor 32.
La rulare va arăta ca mai jos:
Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF Aprov-rez.accdb Baza de date rezolvată, pentru verificare
32
Realizarea acestui raport se poate face din Report Wizard. 71
Modele lucrări practice
Lucrarea practică nr. 4 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 rezolvare33 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 lei34.
interogare SELECT SQL, să se afişeze o listă cu facturile care nu au fost plătite integral, ordonate descrescător după valoarea facturii.35.
IIF([categorie]="birotica";IIF([valoareFac]<=300;True;False);True)
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
33 Este
aceeaşi bază de date folosită la lucrarea anterioară. Validare la nivel de înregistrare (Property Sheet) 35 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 34
72
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.
73
Modele lucrări practice
Următorii paşi ţin de gustul estetic, altfel puteţi da direct Finish.
Lucrarea practică nr. 5 Dispuneţi de o bază de date VANZ 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 Pentru antrenare a se descărca Vanz.accdb Baza de date pentru antrenare
Baza de date se află în cadrul acestui document PDF
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 A10 36. 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
36
Pentru varianta Append Query a se vedea LP2 74
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. Pentru verificare a se descărca Baza de date se află în cadrul acestui document PDF Vanz-rez.accdb Baza de date rezolvată, pentru verificare 75
Modele lucrări practice
i
Tipuri de date Format
Utilizare
Text
Valori scurte, alfanumerice, cum ar fi numele sau adresa străzii.
Memo
Porțiuni lungi de text. O utilizare obișnuită a câmpului Memo este descrierea detaliată a unui produs.
Number
Valori numerice, cum ar fi distanțe. Rețineți că există un tip de date separat pentru valori monetare. Dimensiune câmp* Selectați una dintre următoarele variante: Byte - Se utilizează pentru numere întregi ∈ [0 ; 255]. Cerința de stocare = 1 byte (octet). Integer - Se utilizează pentru numere întregi ∈ [-32,768 ; 32,767]. Cerința de stocare = 2 octeți. Long Integer* - Se utilizează pentru numere întregi ∈ [-2.147.483.648 ; 2.147.483.647]. Cerința de stocare = 4 octeți. Single - Se utilizează pentru valori numerice în virgulă mobilă, ∈ [-3,4 x 1038 ; 3,4 x 1038] și până la șapte cifre relevante. Cerința de stocare = 4 octeți. Double - Se utilizează pentru valori numerice în virgulă mobilă, ∈ [-1,797 x 10308 ; 1,797 x 10308] și până la 15 cifre relevante. Cerința de stocare = 8 octeți. Replication ID - Se utilizează pentru stocarea identificatorilor unici globali necesari reproducerilor. Cerința de stocare = 16 octeți. Rețineți că reproducerea nu este utilizată în formatul de fișier .accdb. Decimal - Se utilizează pentru valori numerice ∈ [-9,999... x 1027 ; 9,999... x 1027]. Cerința de stocare = 12 octeți.
Date/Time
Valorile de dată și oră pentru anii cuprinși în intervalul 100 și 9999.
Currency
Valori ale simbolurilor monetare.
AutoNumber
Numere ce sunt generate automat pentru fiecare înregistrare
Yes/No
Valori Da și Nu și câmpuri care conțin o singură valoare din două. (valori booleene)
OLE Object
Obiecte OLE, cum ar fi documente Word.
Hyperlink
Text sau combinații de text și numere stocate ca text și utilizate ca adresă hyperlink.
Lookup Wizard…
Afișează o listă de valori care este regăsită dintr-un tabel sau o interogare sau un set de valori pe care l-ați specificat când ați creat câmpul. Va porni expertul Căutare și poate fi creat un câmp Căutare. Tipul de date al unui câmp Căutare este Text sau Număr, în funcție de opțiunile pe care le selectați în expert.
__________________________ *
Pentru cele mai bune performanțe, specificați întotdeauna cea mia mică Dimensiune de câmp suficientă Utilizați Long Integer când creați o cheie externă pentru a crea o asociere la câmpul cheie primară AutoNumber din alt tabel.
**
ii
Tipuri de date Format
Utilizare
Text
Valori scurte, alfanumerice, cum ar fi numele sau adresa străzii.
Memo
Porțiuni lungi de text. O utilizare obișnuită a câmpului Memo este descrierea detaliată a unui produs.
Number
Valori numerice, cum ar fi distanțe. Rețineți că există un tip de date separat pentru valori monetare. Dimensiune câmp* Selectați una dintre următoarele variante: Byte - Se utilizează pentru numere întregi ∈ [0 ; 255]. Cerința de stocare = 1 byte (octet). Integer - Se utilizează pentru numere întregi ∈ [-32,768 ; 32,767]. Cerința de stocare = 2 octeți. Long Integer* - Se utilizează pentru numere întregi ∈ [-2.147.483.648 ; 2.147.483.647]. Cerința de stocare = 4 octeți. Single - Se utilizează pentru valori numerice în virgulă mobilă, ∈ [-3,4 x 1038 ; 3,4 x 1038] și până la șapte cifre relevante. Cerința de stocare = 4 octeți. Double - Se utilizează pentru valori numerice în virgulă mobilă, ∈ [-1,797 x 10308 ; 1,797 x 10308] și până la 15 cifre relevante. Cerința de stocare = 8 octeți. Replication ID - Se utilizează pentru stocarea identificatorilor unici globali necesari reproducerilor. Cerința de stocare = 16 octeți. Rețineți că reproducerea nu este utilizată în formatul de fișier .accdb. Decimal - Se utilizează pentru valori numerice ∈ [-9,999... x 1027 ; 9,999... x 1027]. Cerința de stocare = 12 octeți.
Date/Time
Valorile de dată și oră pentru anii cuprinși în intervalul 100 și 9999.
Currency
Valori ale simbolurilor monetare.
AutoNumber
Numere ce sunt generate automat pentru fiecare înregistrare
Yes/No
Valori Da și Nu și câmpuri care conțin o singură valoare din două. (valori booleene)
OLE Object
Obiecte OLE, cum ar fi documente Word. 76
Modele lucrări practice
Hyperlink
Text sau combinații de text și numere stocate ca text și utilizate ca adresă hyperlink.
Lookup Wizard…
Afișează o listă de valori care este regăsită dintr-un tabel sau o interogare sau un set de valori pe care l-ați specificat când ați creat câmpul. Va porni expertul Căutare și poate fi creat un câmp Căutare. Tipul de date al unui câmp Căutare este Text sau Număr, în funcție de opțiunile pe care le selectați în expert.
__________________________ *
Pentru cele mai bune performanțe, specificați întotdeauna cea mai mică Dimensiune de câmp suficientă Utilizați Long Integer când creați o cheie externă pentru a crea o asociere la câmpul cheie primară AutoNumber din alt tabel.
**
77