Documente Academic
Documente Profesional
Documente Cultură
1
Crearea unui proiect şi configurarea sesiunii de lucru în Microsoft Access
Crearea unui proiect de bază de date sub controlul MS Access reprezintă etapa de la care vom porni în
particularizarea lecţiilor practice asociate celei de-a doua părţi a lucrării de faţă. Numele proiectului nostru de
bază de date va fi Biblio şi se va referi la o parte a operaţiilor derulate într-o bibliotecă.
După deschiderea sesiunii de lucru MS Access, prin parcurgerea succesiunii de meniuri apelabile
din butonul Start: Start → Microsoft Office 2013 → Access 2013, vom ajunge în fereastra din figura 2.1,
unde delimităm următoarele componente:
- Un panou de lucru, în stânga, de unde putem selecta baze de date create anterior ,
- O zonă de selecție, în dreapta, cu structuri de date predefinite, inclusiv posibilitatea de a selecta o
bază de date nouă (Blank). Sesizăm că avem posibilitatea de a selecta structuro de date cum
ar fi: Asset tracking, Contacts, Struents, Task management, Inventory, etc.
2
1
Pentru crearea bazei de date Biblio, vom proceda la activarea iconiţei Blank desktop database
(notată de noi cu în fereastra din figura nr. 2.1). Astfel, vom intra în fereastra din figura nr.2.2 în care
suntem puşi în situaţia de a preciza:
1. Numele noii baze de date. În cazul nostru Biblio;
2. Să selectăm folderul destinaţie. În cazul nostru D:\ISAid;
3. Să creăm noua structură (noul proiect de bază de date).
3
4 Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă
1 2
În figura nr. 2.4. prezentăm fereastra de lucru pentru proiectul Biblio în care pot fi regăsite
elementele de lucru necesare conceperii compenentelor bazei de date Biblio.
2 3
1
4
7
8
Figura 2.4. Interfață de lucru pentru definerea componentelor bazei de date Biblio
4
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 5
Pentru lucru cu datele structurate ale tabelelor, parte din baza de date dispunem de următoarele
elemente de control:
1. Buton Access pentru control general;
2. Linia cu butoane rapide: Save, Undo, Redo (Quick Access Toolbar);
3. Linia de titlu;
4. Meniu orizontal pentru apelarea benzilor de icoane;
5. Zonă rezervată benzilor de icoane;
6. Panou de control pentru obiectele bazei de date;
7. Instrumente de manipulare înregistrări din tabelă;
8. Linie de stare;
9. Linia de stare.
TTeem
maa nnrr.. 11
Crearea tabelelor şi definirea restricţiilor
Formularea cerinţelor
Pentru biblioteca judeţeană, se solicită o aplicaţie informatică centrată pe baza de date cu numele
biblio care este alcătuită din următoarele tabele:
CARTI {Nr_inv, Cota, Autori, Titlu, Vol, Cod_editura, An_pub, Loc_Pub, Pret, Data_in}
CITITORI {Cod_cit, NumePrenume, CNP, Strada, Localitatea, Judet}
EDITURI {Cod_editura, Denumire, Localit}
IMPRUMUT {Cod_cit, Nr_inv, Data_impr, Per}
Detalii:
Nr_inv este un cod numeric atribuit fiecărei cărţi care intră în patrimoniul bibliotecii (mărime: 7
întregi şi 0 zecimale);
Cota reprezintă o descriere sumară de 10 caractere text prin care se oferă informaţii despre
format, categorie, domeniu şi altele;
Autori este un şir de 80 de caractere text atribuit autorului sau autorilor cărţii. La cărţile cu mai
mulţi autori, se vor lua în calcul doar primii trei;
Titlu este un şir 80 de caractere text folosit pentru preluarea titlului pentru o carte;
Vol este o valoare numerică (mărime: 2 întregi şi 0 zecimale);
Cod_editura este un număr întreg (mărime: 3 întregi şi 0 zecimale);
An_pub este un număr întreg (mărime: 4 întregi şi 0 zecimale);
Loc_pub este un şir de 30 de caractere text pentru locul în care a apărut cartea;
Pret este o valoare numerică (mărime: 6 întregi şi două zecimale);
Data_in este data de intrare în patrimoniul bibliotecii;
Cod_cit este un număr întreg atribuit cititorului înscris la bibliotecă (mărime: 6 întregi);
NumePrenume reprezintă numele cititorului (mărime: 30 caractere text);
CNP reprezintă codul numeric personal al cititorului (mărime: 13 caractere text);
Strada reprezintă strada şi numărul străzii unde are domiciliul cititorul (mărime: un şir de 30 de
caractere text);
Localitatea reprezintă denumirea localităţii de domiciliu a cititorului (mărime: un şir de 25 de
caractere text);
Judeţ reprezintă denumirea judeţului de domiciliu a cititorului (mărime: un şir de 25 de caractere
text);
Denumire reprezintă denumirea editurii care a editat cartea ce intră în patrimoniul bibliotecii
(mărime: un şir de 25 de caractere text);
Propunere de rezolvare
1. Pentru crearea celor patru tabele din baza de date biblio, vom proceda la preluarea tabelei Table1
din fereastra de lucru prezentată în figura 2.4, tabelă pe care o vom redenumi şi proiecta după cerinţele
temei. În prima etapă, vom crea doar atributele tabelei, aşa cum ni se cere la pct. 1. În figura 2.5,
prezentăm cei patru paşi de urmat pentru schimbarea numelui.
1 2
3
4
Explicaţii:
Pasul 1: Vom proceda la activarea icoanei Design View cu simbolul (Echer & Creion & Linie),
adică în modul de lucru proiectant de tabele;
Pasul 2: Localizăm fereastra Save As;
Pasul 3: Vom scrie CARTI în loc de Table1;
Pasul 4: Vom activa butonul OK.
După parcurgerea paşilor din figura precedentă, vom ajunge în fereastra din figura 2.6.
1 2
În tabul CARTI, colorat cu galben, vom proceda la ştergerea numelui ID (pasul 2) şi vom introduce
primul atribut din tabela CARTI, adică Nr_inv în coloana Field Name, iar în coloana Data Type, vom tasta
n, ceea ce va determina apariţia valorii number. În acelaşi timp, vom avea în vedere să anulăm calitatea de
cheie primară, prin click pe icoana ce conţine o cheie (pasul 3 din figura 2.6).
Cu săgeată în jos de pe denumirea câmpului Nr_inv, vom trece la următorul câmp Cota ş.a.m.d. În
figura 2.7, prezentăm, pentru principalele atribute, modul în care au fost create.
Figura 2.7. Prezentare mod setare parametrii pentru atributele tabelei CARTI
Notă: Pentru atributul Preţ, vom avea aceeaşi definiţie ca la Nr_inv, cu menţiunea că se va stabili pentru
Decimal Places valoarea 2.
Pentru salvarea structurii declarate până în acest moment, vom proceda la a închide tabela CARTI
prin poziţionarea săgeţii mouse-ului pe tab-ul CARTI şi activarea meniului rapid cu click dreapta, după
care selectăm opţiunea Close, ceea ce va determina apariţia ferestrei prin care se solicită salvarea
modificărilor de structură pentru tabela CARTI. Din fereastra de mai sus, vom selecta Yes.
8
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 9
În mod similar, vom proceda şi pentru celelalte trei tabele: CITITORI, EDITURI şi IMPRUMUT. În
final, vom avea cele patru tabele cu structura din figura 2.9.
Proiectantul de tabele pentru fiecare dintre cele trei tabele, CITITORI, EDITURI şi IMPRUMUT,
este cel din figura 2.10.
Precizare: Atunci când se declară un atribut, în afara numelui său, mai trebuie specificat un număr
minim de proprietăţi, cum ar fi tipul (număr întreg (mai lung sau mai scurt), număr real, şir de caractere, dată
calendaristică etc.) şi lungimea. Prin opţiunile Format şi Input Mask, se poate controla modul în care se
vor afişa valorile fiecărui atribut la editarea tabelei respective.
Pentru uşurarea procesului de creare a tabelelor precedente, prezentăm, în tabelul 1, caracteristicile ce vor fi
avute în vedere pentru fiecare tabelă.
10
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 11
3. Stabilirea regulilor de validare la nivel de atribut presupune ca pentru fiecare tabelă să se ajungă
în modul de lucru cu proiectantul de tabele, Design view (a se vedea paşii 1 şi 2 de la stabilirea valorilor
implicite). În mod similar ca la stabilirea valorii implicite, stabilirea regulilor de validare la nivel de atribut
presupune ca în pasul al patrulea, vor fi folosite rubricile Validation Rule unde se introduce regula de
validare, ca de exemplu pentru CARTI.Cota StrComp(UCase([cota]),[cota],0)=0 şi Validation Text, unde se
poate introduce un text explicativ, care va anunţa utilizatorul de eventuala încălcare a restricţie pentru acel
atribut.
Restricţiile la nivel de atribut, de introdus pentru tabelele din baza de date biblio, sunt
următoarele:
- în tabela CARTI:
o literele din valorile atributului Cota sunt obligatoriu majuscule, expresia fiind (figura
2.13):
StrComp(UCase([cota]);[cota];0)=0;
12
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 13
Dacă tabela reproiectată conţine înregistrări, printr-un mesaj corespunzător (vezi figura 2.15), se
solicită confirmarea verificării acestor înregistrări de către sistem. Recomandăm ca răspunsul să fie Yes.
- în tabela CITITORI:
o literele din valoarea atributului NumePrenume sunt obligatoriu majuscule, expresia de
introdus în rubrica Validation Rule:
StrComp(UCase([NumePrenume]);[NumePrenume];0)=0;
În rubrica Validation Text, vom introduce mesajul:
„Numele şi prenumele trebuie introduse cu majuscule!!!“
- în tabela IMPRUMUT:
o Per este o valoare din următoarele (1, 3, 7, 14, 21). Expresia de introdus în rubrica
Validation Rule este:
[Per] IN (1;3;7;14;21)
În rubrica Validation Text, vom introduce mesajul:
„Nr. zilelor de împrumut trebuie să fie o valoare
dintre 1, 3, 7, 14, 21!!!“
Precizare: În cazul încălcării regulii de validare la nivelul atributului Per, adică se introduce valoarea
5, care nu se află în lista de valori 1, 3, 7, 14, 21, se va obţine mesajul din rubrica Validation Text, aşa cum se
prezintă în figura 2.16. După activarea butonului Yes, se va permite utilizatorului să se modifice valoarea 5, în
una din valorile recomandate.
4. La nivelul unei înregistrări, se pot pune restricţii în care sunt implicate două sau mai multe
atribute din aceeaşi tabelă. Aceste restricţii se regăsesc sub denumirea de reguli de validare la nivel de
înregistrare. Pentru declararea restricţiei la nivel de înregistrare şi a mesajului de eroare afişabil, la
încălcarea restricţiei, se realizează parcurgerea următorilor paşi:
14
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 15
a. Aducerea tabelei de lucru în modul „proiectare“ (Design view), ca în figura 2.17, după ce s-a dat
dublu-click pe tabela de lucru şi s-a activat unul din butoanele Design view;
b. Activarea ferestrei din partea dreaptă Property Sheet, în cazul în care aceasta nu a fost dezactivată.
În cazul în care fereastra a fost dezactivată, atunci se va activa din tab-ul Design, grupul de icoane Show-
Hide icoana Property Sheet;
c. În fereastra Property Sheet, în rubrica Validation Rule, se introduce regula de validare, iar în
rubrica Validation Text, se va introduce textul ce se va afişa în cazul nerespectării restricţiei impuse prin
regula de validare.
În figura 2.17, exemplificăm paşii pentru tabela CARTI. Astfel, în rubrica Validation Rule, vom
introduce
[An_pub] <= Year(Data_in)
Regula de mai sus va impune ca anul publicării (An_pub) cărţii să nu fie mai mare decât anul extras
din data intrării (Data_in) cărţii în bibliotecă. În cazul în care nu se respectă această regulă, utilizatorul va
primi mesajul: „Anul publicarii nu este corect – verificati-l!!!“.
Mesajul de mai sus se va introduce în rubrica Validation Text.
2
1
Ca urmare, în orice linie a tabelei CARTI, înainte de a se trece la altă linie, se va verifica întotdeauna
ca o carte să nu aibă anul publicării ulterior anului de intrare în bibliotecă. Cu alte cuvinte, nu poate să intre
o carte nepublicată încă in bibliotecă.
În cazul în care utilizatorul introduce un an al publicării ulterior anului de intrare în bibliotecă, se va
afişa un mesaj de înştiinţare, ca mesajul din figura 2.18.
- Pentru tabela IMPRUMUT: Perioada de împrumut (Per) va fi de 1 sau 3 zile în luna decembrie a
fiecărui an, ca urmare a operaţiilor de inventariere. Mesajul care va apărea în cazul încălcării
restricţiei este „Modificati durata imprumutului la 1 zi!!!“. Astfel, în rubrica Validation Rule, se va
introduce
IIf(Month([Data_impr])<>12;True;IIf([Per]=1 Or [Per]=3;True;False)),
Modele de lucrări în Microsoft Access 2013
16 Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă
Notă: Cheia primară se poate declara şi prin activarea icoanei Primary key din banda de meniu Design.
În urma declarării cheii primare în faţa lui Nr_inv, va apărea o cheie mică , ca simbol de cheie
primară.
Pentru declararea cheii alternative Cota, vom proceda ca în figura 2.20, prin poziţionare pe atributul
Cota (1), prin activarea cadrului de pagină General (2), prin identificarea rubricii Indexed şi a săgeţii ataşate
(3) şi prin selectarea din meniul activat a opţiunii Yes (No Duplicates).
În mod similar, se procedează pentru tabela CITITORI şi EDITURI. Detaliile pentru aceste două
tabele sunt cele din figura 2.21.
6. Restricţiile referenţiale sunt restricţiile aplicabile legăturilor dintre două tabele ale aceleiaşi baze
de date.
În acest context, legătura dintre două tabele este una de tip părinte-copil, unde tabela părinte este o
tabelă nomenclator, iar tabela copil este o tabelă de tranzacţii legate prin intermediul unui atribut comun de
acelaşi tip, de regulă, cu acelaşi nume.
Pentru o imagine de ansamblu asupra tabelelor din baza de date biblio, vom construi tabelul
alăturat.
18
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 19
În cele ce urmează, prezentăm paşii pentru a pune în aplicare regulile impuse prin tabelul precedent:
Primul pas presupune să se apeleze la instrumentul de declarare a legăturilor dintre tabele, prin
activarea icoanei Relationships din meniul Database Tools, aşa cum se vede în figura 2.23.
În pasul nr. 2, se apelează la meniul rapid (click dreapta) de afişare a tabelelor din baza de date, aşa
cum se vede în figura 2.24. Se va selecta opţiunea Show Table.
Selectarea tabelelor între care se stabilesc relaţii referenţiale. Astfel, în cazul nostru, din fereastra
Show Table, se va selecta tabela CARTI şi Add. În mod similar, se va proceda şi cu celelalte trei tabele.
Figura 2.26. Afişarea pe ecran a tuturor tabelelor din baza de date biblio
20
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 21
În urma declaraţiilor din fereastra din stânga a figurii 27, se va obţine legătura One-To-Many între
EDITURI şi CARTI (figura 2.27 dreapta).
În mod similar, se va proceda şi pentru legăturile dintre tabela părinte CARTI şi tabela copil
IMPRUMUT pe atributul comun Nr_inv. În fereastra Edit Relationships, în care se vor activa pe rând: 1.
Enforce Referential Integrity, 2. Cascade Update Related Fields, 3. Create.
Aceleaşi restricţii referenţiale vor fi avute în vedere şi între tabela părinte CITITORI şi tabela copil
IMPRUMUT pe atributul comun Cod_cit. Astfel, în fereastra Edit Relationships în care se vor activa pe
rând: 1. Enforce Referential Integrity, 2. Cascade Update Related Fields, 3. Create.
În final, relaţiile dintre cele patru tabele se prezintă ca în figura 2.28.
Figura 2.28. Schema finală a relaţiilor între tabelele bazei de date biblio
Formularea cerinţelor
Pentru baza de date biblio (CARTI {Nr_inv, Cota, Autori, Titlu, Vol, Cod_editura, An_pub,
Loc_Pub, Pret, Data_in}; CITITORI {Cod_cit, NumePrenume, CNP, Strada, Localitatea, Judet};
EDITURI {Cod_editura, Denumire, Localit}; IMPRUMUT {Cod_cit, Nr_inv, Data_impr, Per}) creată
în capitolul 1, se solicită:
În tabela CITITORI:
(2109; ‘Barbu Georgeta’; ‘2900114070029’; ‘Bd. Tudor Vladimirescu, nr. 78’; ‘Iasi’; ‘Iasi’)
(2110; ‘Zaharia Maria’; ‘2890611270850’; ‘Str. Ulmului, nr. 4’; ‘Cluj’; ‘Cluj’)
(2111; ‘Vornicu Sergiu’; ‘1890906336379’; ‘Bd. Republicii, nr. 78’; ‘Suceava’; ‘Suceava’)
(2112; ‘Stanescu Sanda’; ‘2890916046193’; ‘Str. Cornisa, nr. 9’; ‘Bacau’; ‘Bacau’)
(2113; ‘Marinescu Andrei’; ‘1890909330536’; ‘Aleea Rozelor, nr. 67’; ‘Iasi’; ‘Iasi’)
(2114; ‘Angelescu Ioana’; ‘2890801375485’; ‘Str. Costache Negri, nr. 45’; ‘Iasi’; ‘Iasi’)
(2115; ‘Romaniuc Rebeca’; ‘2890416226720’; ‘Str. Bularga, nr. 56’; ‘Iasi’; ‘Iasi’)
(2116; ‘Aparaschivei Marius’; ‘1890314226703’; ‘Calea Bucovinei, nr. 234’; ‘Vatra Dornei’; ‘Suceava’)
(2117; ‘Acatrinei Gabriela’; ‘2890624226711’; ‘Bd. Pacurari, nr. 35’; ‘Iasi’; ‘Iasi’)
(2118; ‘Amarandei Cornel’; ‘1881128226844’; ‘Str. Parcului, nr. 15’; ‘Tg. Neamt’; ‘Neamt’)
(2120; ‘Calistru Anca’; ‘2890306226721’; ‘Bd. Pacurari, nr. 42’; ‘Iasi’; ‘Iasi’)
(2121; ‘Paduraru Vasile’; ‘1890727226779’; ‘Str. Manta Rosie, nr. 20’; ‘Iasi’; ‘Iasi’)
(2122; ‘Anghel George’; ‘1891006226711’; ‘Str. Ciurchi, nr. 45’; ‘Iasi’; ‘Iasi’)
(2123; ‘Ignat Irina’; ‘2900316226711’; ‘Str. Vasile Pogor, nr. 15’; ‘Iasi’; ‘Iasi’)
(2124; ‘Acatrinei Sergiu’; ‘1891011226764’; ‘Bd. Copou, nr. 9’; ‘Iasi’; ‘Iasi’)
(2125; ‘Dascalu Loredana’; ‘2890120226737’; ‘Str. Vitejiei, nr. 24’; ‘Vaslui’; ‘Vaslui’)
(2126; ‘Topoliceanu Simona’; ‘2890505374520’; ‘Str. Ion Creanga, nr. 24’; ‘Piatra Neamt’; ‘Neamt’)
(2127; ‘Cojocaru Olivia’; ‘2890626226707’; ‘Bd. Tudor Vladimirescu, nr. 10’; ‘Iasi’; ‘Iasi’)
(2128; ‘Danis Daniel’; ‘1891122226758’; ‘Str Luceafarului, nr. 14’; ‘Suceava’; ‘Suceava’)
(2129; ‘Ardeleanu Adina’; ‘2890921046208’; ‘Str. Arcului, nr. 243’; ‘Iasi’; ‘Iasi’)
(2130; ‘Vernescu Mihai’; ‘2870623056318’; ‘Str. Macazului, nr. 9A’; ‘Iasi’; ‘Iasi’)
În tabela CARTI:
(12136; ‘IT/12136’; ‘Perry Greg’; ‘Microsoft Office 2007’; 1; ‘1001; 2007; 64,00 ‘#21.03.2008#)
(12137; ‘IT/12137’; ‘Gunderloy Mike’; ‘Office Access 2003’; 1; ‘1002; 2004; 35,00; #21.03.2008#)
(12138; ‘II/12138’; ‘Drucker Peter’; ‘Managementul viitorului’; 1; ‘1012; 2004; 24,00; #09.04.2006#)
23
24 Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă
(12139; ‘II/12139’; ‘Cehov Anton’; ‘Un roman cu un contrabas’; 1; ‘1003; 2005; 15,00; #11.03.2008#)
(12140; ‘IV/12140’; ‘Plesu Andrei’; ‘Despre bucurie’; 1; ‘1010; 2006; 19,00; #13.03.2008#)
(12141; ‘IV/12141’; ‘Austen Jane’; ‘Mandrie si prejudecata’; 1; ‘1010; 2007; 50,00; #21.03.2008#)
(12142; ‘II/12142’; ‘Goma Paul’; ‘Soldatul cainelui’; 1; ‘1010; 2002; 20,00; #21.03.2008#)
(12143; ‘I/12143’; ‘Turcanu Cristian’; ‘Arta de a trai’; 1; ‘1005; 2000; 11,00; #13.03.2008#)
(12144; ‘X/12144’; ‘Rebreanu Liviu’; ‘Ion’; 1; ‘1005’ 1991; 28,00; #19.09.2004#)
(12145; ‘X/12145’; ‘Eminescu Mihai’; ‘Poezii; 2; ‘1009; 2001; 12,00; #12.07.2009#)
(12146; ‘X/12146’; ‘Verne Jules’; ‘Insula misterioasa’; 1; ‘1007; 2003’ 12,00; #19.09.2004#)
(12147; ‘V/12147’; ‘Clavell James’; ‘Tai-Pan’; 1; ‘1004; 2002; 12,00; #19.09.2004#)
(12148; ‘I/12148’; ‘Preda Marin’; ‘Morometii’; 1; ‘1007; 2006; 16,00; #10.07.2006#)
(12149; ‘I/12149’; ‘Sadoveanu Mihail’; ‘Fratii Jderi’; 1; ‘1005; 2004; 15,00; #10.07.2006#)
(12150; ‘I/12150’; ‘Arghezi Tudor’; ‘Flori de mucegai’; 1; ‘1008; 2003; 19,00; #12.07.2009#)
(12151; ‘U/12151’; ‘Christie Agatha’; ‘Cianura spumoasa’; 1; ‘1005; 2008; 21,00; #12.07.2009#)
(12152; ‘U/12152’; ‘Baudelaire Charles’; ‘Fleures de male’; 1; ‘1008; 2002’ 11,00; #10.07.2006#)
(12153; ‘X/12153’; ‘Minulescu Ion’; ‘Poezii; 2; ‘1005; 2007; 11,00; #12.07.2009#)
(12154; ‘X/12154’; ‘Bacovia George’ ‘Plumb’; 1; ‘1009; 1995; 23,00; #10.07.2006#)
(12155; ‘X/12155’; ‘Blaga Lucian ‘‘Poezii’; 1; ‘1011; 1990; 17,00; #13.03.2008#)
(12156; ‘I/12156’; ‘Creanga Ion’ ‘Amintiri din copilarie’; 1; ‘1009; 1990; 15,00; #13.03.2008#)
(12157; ‘IT/12157’; ‘Mansfield Ron’ ‘Microsoft Windows Vista’; 1; 1006; 2008; 49,00; #12.07.2009#)
(12158; ‘I/12158’; ‘Rebreanu Liviu’ ‘Rascoala’; 1; 1007; 2002; 15,00; #13.03.2008#)
În tabela IMPRUMUT:
(2122; 12155; ‘16.12.2016’; 3)
(2117; 12144; ‘18.12.2016’; 1)
(2110; 12157; ‘21.12.2016’; 3)
(2110; 12153; ‘06.01.2017’; 14)
(2110; 12154; ‘05.02.2017’; 14)
(2123; 12145; ‘21.02.2017’; 14)
(2123; 12157; ‘21.02.2017’; 14)
(2123; 12156; ‘21.02.2017’; 21)
(2123; 12149; ‘21.02.2017’; 14)
24
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 25
- Adresa cititorului cu codul 2125 este greşită la stradă, astfel corect este Str. Vijeliei şi nu Str.
Vitejiei.
- Preţul cărţii cu număr de inventar 12138 este de 32 lei şi nu 24 lei.
- Fişa de împrumut pentru cărţile împrumutate în data de 07.03.2017 a cititorului Angelescu
Ioana, cod_cit 2114, a fost completată eronat, pentru perioada de împrumut cu 21 de zile. Astfel, se
impune ca aceasta să fie modificată pentru toate cărţile împrumutate, de la 21 de zile la 14 zile.
- În tabela IMPRUMUT:
cărţile nereturnate;
cărţile împrumutate în decembrie şi nereturnate încă.
Propunere de rezolvare
1. Operaţia de adăugare a înregistrărilor (populare) în tabele presupune lucrul direct în tabelă, care constă
în a scrie, rând pe rând, fiecare linie, cu respectarea următoarei restricţii: întâi se vor completa tabelele părinte
şi, mai apoi, tabelele copil.
Notă: În situaţia în care o tabelă este atât tabelă părinte, cât şi tabelă copil, trebuie să ne asigurăm că înaintea
populării ei, a fost populată tabela părinte corespunzătoare. În cazul nostru, avem:
a. tabele părinte: EDITURI şi CITITORI;
b. tabela părinte şi copil CARTI;
c. tabelă copil IMPRUMUT.
Vom prezenta ordinea operaţiilor de urmat pentru popularea tabelei EDITURI, aşa cum este precizată
în figura 2.29:
1. Dăm dublu click pe tabela EDITURI;
2. În cadranul din dreapta, apare tabela EDITURI deschisă şi pregătită să preia înregistrări.
Începând cu Cod_editura, vom introduce datele pentru editura Teora, adică (1001; Teora; Bucuresti);
3. După ce a fost introdus Bucureşti cu săgeată în jos, trecem la următorul rând;
4. Cu săgeată stânga, trecem la coloana a doua;
5. Cu o nouă săgeată, trecem în prima coloană a tabelei;
6. Vom introduce, începând cu Cod_editura, datele pentru a doua editură cu codul 1002.
În mod similar, se vor repeta etapele 3 – 6, până când vom popula tabela cu toatele datele pentru
toate editurile.
3
2
1
5 4
â
6
La final, tabela EDITURI va conţine toate datele, aşa cum se prezintă în figura 2.30.
În figura 2.31, avem tabela CITITORI după ce a fost deschisă cu dublu click pe numele acesteia (1)
şi după poziţionare pe Cod_cit (2).
2
1
După introducerea datelor corespunzătoare primului cititor (2109; ‘Barbu Georgeta’; ‘2900114070029’;
‘Bd. Tudor Vladimirescu, nr. 78’; ‘Iasi’; ‘Iasi’), tabela CITITORI se prezintă ca în figura 2.32.
Notă: Aşa cum se observă, atât în figura 2.31, cât şi în figura 2.32, primul rând şi al doilea rând conţin, în
coloana Judeţ, valoarea implicită Iasi, aşa cum ni s-a solicitat la proiectarea bazei de date.
Pentru trecerea la a doua înregistrare, se poate acţiona săgeata în jos sau se poate merge în tab-ul
Home, grupul de iconiţe Records, de unde se activează butonul New.
În figura 2.34, avem tabela CARTI după ce a fost deschisă cu dublu click pe numele acesteia (1) şi
după poziţionare pe Cod_cit (2).
28
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 29
1 2
b. să deschidem tabela IMPRUMUT, cu dublu click pe numele ei (1), ca în figura 2.38 stânga;
c. să trecem în modul de lucru Design View, prin click cu săgeata mouse-lui pe iconiţa cu linia şi
echerul din linia de stare (2), ca în figura 2.38 dreapta;
d. să poziţionăm cursorul sub câmpul Per şi să introducem numele noului atribut Data_retur, etapa
(1) din figura 2.39.
3 1
e. să poziţionăm cursorul în rubrica Data Type şi să selectăm Date / Time din lista de opţiuni sau să
scriem noi Date/Time, etapa (2) din figura 2.39;
d. să selectăm tab-ul General, etapa (3) din figura 2.39;
e. să selectăm formatul Short Date, etapa (4) din figura 2.39;
f. să selectăm valoarea No pentru Required, etapa (5) din figura 2.39, ceea ce înseamnă că poate să
nu fie introdusă la realizarea împrumutului.
În final, structura tabelei IMPRUMUT, cu atributul Data_retur va arăta ca în figura 2.40.
apoi grupul View, de unde selectăm Datasheet View. Există şi posibilitatea ca de pe linia de stare, să dăm
click pe iconiţa Datasheet View. Ambele variante sunt prezentate în figura 2.41.
1
21.12.2016
Figura 2.42. Returnarea cărţii cu Nr_inv 12144 de către cititoarea cu Cod_cit 2117
În figura 2.42, se prezintă poziţionarea pe linia cărţii cu codul 12144 împrumutată de cititoarea cu
codul 2117 (etapa 2) şi completarea datei de returnare (etapa 3).
b. Operaţia de returnare efectuată de către cititoarea Zaharia Maria, cu codul cititor 2110, din data
de 28.02.2010 pentru cărţile cu codurile 12153 şi 12154, presupune:
- localizarea codului de cititor 2110 în tabela CITITORI;
- dublu click pe semnul + din faţa codului 2110;
- localizarea pointerului pe Data_retur corespunzătoare cărţii cu codul 12153;
- introducerea datei de returnare 28.02.2017;
- în mod similar, şi pentru cartea cu codul 12154, pentru care se introduce data returului de
28.02.2017.
c. În figura 2.44, se prezintă operaţia de returnare efectuată în data de 3.03.2017, de către cititorul Anghel
George cu codul cititor 2122, pentru cartea cu codul 12155;
Figura 2.44. Returnarea cărţii cu Nr_inv 12155 de către cititorul cu Cod_cit 2122
d. Operarea împrumuturilor realizate de către cititoarea Angelescu Ioana cu codul cititor 2114, în
data de 07.03.2010, pentru 21 de zile, la următoarele cărţi: Ion cu codul 12144; Moromeţii cu codul
12148; şi Despre bucurie cu codul 12140, presupune parcurgerea următoarelor etape:
1. Identificarea în tabela CITITORI, a cititoarei Angelescu Ioana, cu codul cititor 2114;
2. Click pe plusul din faţa codului şi se va intra în tabela copil
IMPRUMUT asociată tabelei CITITORI;
3. În figura 2.45, se prezintă cele trei operaţii de adăugare pentru fiecare carte împrumutată.
Trecerea de la un rând la altul şi de la o coloană la alta se face cu ajutorul săgeţilor.
Notă: Renunţarea la afişarea împrumuturilor asignate codului de cititor se face dând click pe semnul – din faţa
Cod_cit.
4. Realizarea modificărilor asupra înregistrărilor din tabele va presupune trecerea prin următoarele
acţiuni:
a. Prenumele cititorului cu codul 2122 este Georgel în loc de George;
Vom localiza, în tabela CITITORI, codul cititorului 2122, după care ne vom poziţiona în coloana
NumePrenume şi vom adăuga un „l“ la prenumele George.
b. Adresa cititorului cu codul 2125 este greşită la stradă, astfel corect este Str. Vijeliei şi nu Str.
Vitejiei.
Vom localiza, în tabela CITITORI, codul cititorului 2125, după care ne vom poziţiona în coloana
Strada şi vom modifica din Vitejiei în Vijeliei.
d. Modificarea duratei de împrumut la cititorul cu Cod_cit 2114, la cele trei cărţi împrumutate în
data de 07.03.2010, se realizează astfel:
1. se deschide tabela CITITORI în modul de lucru Datasheet View;
2. se localizează clientul cu codul 2114;
3. se dă click pe semnul + din faţa codului 2114;
4. se identifică împrumuturile din data de 07.03.2010 şi se modifică perioada de împrumut de la 21
la 14 zile.
34
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 35
În figura 2.50, ilustrăm folosirea grupului Records, din tab-ul Home, pentru a şterge un cititor.
1 2
6. Pentru realizarea unor editări pe grupuri de înregistrări direct în tabele sau pentru diferite
informări rapide, se recurge la operaţia de filtrare pe o singură tabelă.
În vederea derulării cu succes a operaţiilor de filtrare, este necesar să se identifice în tab-ul Home,
grupul de iconiţe Sort & Filter, din care putem realiza sortări ascendente/descendente, filtrări rapide,
filtrări avansate, aşa cum se observă în figura de mai jos.
2
1
Rezultatul obţinut după parcurgerea paşilor 1 – 5 ilustraţi anterior este cel din figura 2.54.
36
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 37
Notă: Pentru a renunţa la filtrare, avem, pe ultimul rând din fereastra tabelei, butonul Filtered. La selectarea
acestui buton, se va dezactiva filtrul declarat.
În figura 2.55, prezentăm paşii de mai sus. Rezultatele acestei filtrări sunt aceleaşi ca şi cele din
figura 2.53.
1
4
- Pentru afişarea cărţilor care conţin în cotă particula IT, vom proceda la poziţionare pe una dintre
valorile coloanei Cota (1) şi apelare meniu rapid, activare opţiune Text Filter (2); activare opţiune Contains...
(3); introducere în fereastra Custom Filter la mesajul Cota contains a valorii IT (4) şi, în final, activarea
butonului Ok (5).
1
4
5
Figura 2.57. Filtrarea şi rezultatele pentru cititorii din Bacău sau Vaslui
38
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 39
40
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 41
2
1 3
5
4
1 3
6
4
5
v
7
1 5
3 4
Notă: Din acest punct, se procedează la apelarea Toggle Filter, pentru vizualizarea rezultatelor.
42
TTeem
maa nnrr.. 33
Obţinerea de informaţii din baza de date
Formularea cerinţelor
Pe datele deja existente în baza de date biblio, după parcurgerea temelor 1 şi 2, vom proceda la
exploatarea (interogarea), adică obţinerea de informaţii necesare unei bune gestiuni şi luării de decizii de
către conducerea bibliotecii. Pentru obţinerea de informaţii din una sau mai multe tabele, se procedează la
folosirea frazei SELECT din limbajul standard de interogare (SQL).
Astfel, folosind fraze SELECT SQL, să se afle următoarele informaţii din baza de date:
43
Propunere de rezolvare
Pentru obţinerea informaţiilor din bazele de date se foloseşte limbajul standard de interogare SQL.
Microsoft Access conţine propriul dialect SQL care se dovedeşte un limbaj destul de puternic şi de facil
pentru utilizatorul non-informatician. Răspunsurile la întrebările de mai sus vor fi obţinute folosind va-
rianta utilizării constructorului/proiectantului de interogări (Query Wizard sau Query Designer), precum
şi comenzile SELECT.
Q1: Care sunt cititorii din judeţul Suceava şi localitatea Vatra Dornei?
Ipoteze de lucru:
Tabela de lucru este CITITORI;
Toate atributele vor face parte din tabela destinaţie;
Localit trebuie să fie egal cu Vatra Dornei;
Judet trebuie să fie egal cu Suceava;
Numele interogării va fi CARTI_Q1.
Figura 2.64 arată paşii de urmat în lansarea constructorului de interogări.
(1) Se deschide tabela din care dorim şi extragem date despre cititori, adică tabela CITITORI;
(2) Se apelează tab-ul Create;
(3) Se activează iconiţa Query Wizard din grupul Other;
(4) Din fereastra New Query, selectăm opţiunea Simple Query Wizard;
(5) OK;
(6) Din fereastra Simple Query Wizard, dăm click pe butonul >>, pentru a trece toate câmpurile
disponibile din fereastra Available Fields în fereastra Selected Fields. În fereastra Available Fields, nu va
mai rămâne niciun câmp. Se pot folosi butoanele > pentru a trece câte un câmp. În cazul în care se doreşte
să se readucă un câmp din fereastra Selected Fileds în Available Fields, se pot folosi butoanele în sens
invers << sau <.
(7) Pasul (7) presupune vizualizarea şi acceptarea formei finale, aşa cum se prezintă lista cu toate
atributele din CITITORI;
(8) Next;
(9) Din următoarea fereastră Simple Query Wizard, selectăm butonul radio, cu opţiunea Modify the
query design, pentru a impune condiţiile legate de localitate şi judeţ;
(10) Finish;
(11) În fereastra nou afişată, în care se prezintă grafic tabela CITITORI cu câmpurile ei şi lista
câmpurilor selectate ce vor face parte din viitoarea tabelă rezultat, vom introduce pe rândul Criteria, în
dreptul câmpului Localit valoarea Vatra Dornei;
(12) Pe acelaşi rând Criteria, dar în dreptul câmpului Judet, vom introduce Suceava.
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 45
În figura 2.65, se prezintă continuarea interogării asistate. În partea de sus, este ilustrată scrierea
condiţiilor de respectat în linia Criteria, urmată de executarea interogării (1). În partea de jos, sunt
prezentate rezultatele interogării.
Notă: Se observă din figura 2.65 că numele tabelei rezultat este CITITORI_Query1, deoarece între etapa 8 şi 9,
nu am modificat titlul asociat automat de către MS Office Access. În acest moment, putem închide această tabelă
rezultat, prin apelarea meniului contextual / rapid cu click-dreapta pe numele CITITORI_Query1 şi selectare Close,
după care mergem în panoul de navigare şi apelăm meniul contextual pe CITITORI_Query1, ceea ce va da posibilitatea
selectării opţiunii Rename. Pentru numele nou, vom folosi CITITORI_Q1.
Q2: Care sunt cărţile publicate după 2003 şi intrate în bibliotecă în 2009?
Ipoteze de lucru:
Tabela de lucru este CARTI;
Toate atributele vor face parte din tabela destinaţie;
În lista de atribute, va apărea un atribut nou cu numele Expr1, calculat astfel Year([Data_in]). Acest
atribut nu va fi inclus în tabela destinaţie.
În cazul următor, vom proceda în mod similar ca la prima interogare, respectând etapele din figurile
2.62 şi 2.63, cu precizarea că se schimbă tabela de lucru şi condiţiile impuse.
În figura 2.66, se prezintă condiţiile de completat şi rezultatul interogării.
Notă: În partea de sus a figurii precedente este prezentat modul de lucru cu constructorul de interogări, iar în partea
de jos rezultatele la lansarea în execuţie a interogării.
Q3: Care sunt cărţile mai scumpe de 20 de lei, dar tipărite înainte de 2005?
Ipoteze de lucru:
Tabela de lucru: CARTI;
Toate atributele vor face parte din tabela destinaţie;
An_pub trebuie să fie mai mic sau egal cu 2005;
Pret trebuie să fie mai mare sau egal cu 20;
Numele interogării va fi CARTI_Q3.
În mod similar, se va proceda pentru a treia coloană unde se va selecta din meniul vertical
IMPRUMUT.Data_impr – vezi figura următoare (12).
Pentru coloana a patra, se va introduce pe linia Field C1: Month ([Data_ impr]), pe linia Criteria,
valoarea 2 corespunzătoare lunii februarie, iar pe linia Show, se va menţine bifa – vezi figura următoare
(13).
Pentru coloana a cincea, se va introduce pe linia Field C2: Year ([Data_ impr]), pe linia Criteria,
valoarea 2010 corespunzătoare anului 2010, iar pe linia Show, se va menţine bifa – vezi figura următoare
(14).
Pentru lansarea în execuţie, se va activa iconiţa Run din grupul Results aferent tab-ului Design –
vezi (15) în figura 2.72.
În figura de mai jos, sunt prezentate rezultatele execuţiei.
Schimbarea numelui din Query2 în Q6 se face respectând etapele 1 – 5 din figura 2.74.
Q9: Numele cititorilor şi adresele celor care au împrumutat cărţi de la editura Polirom în 2010.
Ipoteze de lucru:
Tabelele de lucru: CITITORI, CARTI, EDITURI şi IMPRUMUT;
Din tabela CITITORI vom selecta câmpurile: NumePrenume, Strada, Localitatea şi Judet;
Din tabela CARTI, vom selecta câmpul: Titlu;
Din tabela EDITURI, vom selecta câmpul: Denumire.
Se va pune condiţia ca Denumire să fie egală cu Polirom;
Din tabela IMPRUMUT, vom selecta câmpul: Data_impr;
C1: Year([Imprumut.Data_impr]) trebuie să fie egal cu 2010;
Câmpul C1 nu va fi inclus în tabela rezultat;
În figura 2.79, se prezintă apelarea la meniul rapid pe numele Query2 pentru salvare (1) şi
vizualizarea codului SQL prin apelarea meniului rapid prin click dreapta pe Q9.
Pentru a obţine această informaţie, vom proceda la scrierea comenzii SQL, fără să mai folosim
constructorul de interogări şi fără să mai aducem pe ecran o tabelă anume, ceea ce înseamnă că vom apela
tab-ul Create (1); din grupul de iconiţe Other, vom activa Query Design (2), dar la apariţia ferestrei Show
table, vom apăsa butonul Close (3), apoi vom apela meniul rapid pe numele Query2 cu click dreapta (4), din
care vom selecta SQL view (5) – a se vedea fereastra 74.
Instrumente software pentru afaceri. Lucrări practice şi întrebări grilă 53
Ipoteze de lucru:
Tabelele de lucru: CITITORI, CARTI şi IMPRUMUT;
Din tabela CITITORI, vom selecta câmpurile: NumePrenume, Strada, Localitatea şi Judet;
Din tabela CARTI, vom selecta câmpul: Titlu;
Din tabela IMPRUMUT, vom selecta câmpul: Data_impr;
C1: Year([Imprumut.Data_impr]) trebuie să fie egal cu 2009;
Câmpul C1 nu va fi inclus în tabela rezultat.
Q11: Numele cititorilor şi adresele celor care nu au returnat cărţile din decembrie 2009
Ipoteze de lucru:
Tabelele de lucru: CITITORI, CARTI şi IMPRUMUT;
Din tabela CITITORI, vom selecta câmpurile: NumePrenume, Strada, Localitatea şi Judet;
Din tabela CARTI, vom selecta câmpul: Titlu;
Din tabela IMPRUMUT, vom selecta câmpul: Data_impr;
Din tabela IMPRUMUT, vom selecta câmpul: Data_retur care trebuie să fie NULL. Atributul
acesta nu trebuie să apară în tabela rezultat;
C1: Month([Imprumut.Data_impr]) trebuie să fie egal cu 12;
C1: Year([Imprumut.Data_impr]) trebuie să fie egal cu 2009;
Câmpurile C1 şi C2 nu vor fi incluse în tabela rezultat.
Numele interogării va fi Q11.
Vom prezenta, în cele ce urmează, doar forma comenzii SQL scrise şi rezultatul execuţiei.
Comanda SQL este:
SELECT CITITORI.NumePrenume, CITITORI.Strada, CITITORI.Localitatea, CITITORI.Judet,
CARTI.Titlu, Month([Data_impr]) AS C1, Year([Data_impr]) AS C2
În cadrul acestui set de întrebări, apare necesitatea efectuării de calcule statistice pe datele cuprinse
în baza de date.
Q17: Care este media zilelor de întârziere pe total bibliotecă la nivelul anului 2009?
SELECT AVG((Date()-[Data_impr])-[Per]) AS Medie_2009
FROM IMPRUMUT
WHERE Year(Data_impr)=2009;
După ce am aflat codul cititorului, vom folosi operatorul IN, utilizând astfel o subinterogare în clauza
WHERE.
SELECT COUNT(*) AS NR_carti
FROM Imprumut
WHERE Imprumut.Cod_cit IN
(SELECT Cod_cit
FROM Cititori
WHERE Cititori.NumePrenume="Zaharia Maria");
Q20: Care sunt cărţile care au înregistrat cea mai mare perioadă de întârziere?
SELECT CARTI.Cota, CARTI.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)));
Acest ultim set de cerinţe va face trimitere la utilizarea unor operatori şi clauze, cum sunt: LIKE,
BETWEEN, DISTINCT, GROUP BY împreună cu HAVING, pentru formularea de condiţii la nivel de
grup de înregistrări.
Figura 2.83. Apelarea modului de lucru SQL View şi scrierea comenzii pentru Q21
Q26
Cod_Editura Denumire
1005 Polirom
Figura 2.85. Interogarea Q26 fără clauza DISTINCT
Rezultatul acestei interogări este prezentat în figura 2.85, cu precizarea că aceeaşi editură apare de
mai multe ori. Această repetiţie se evită prin folosirea clauzei DISTINCT.
SELECT DISTINCT EDITURI.Cod_Editura, EDITURI.Denumire
FROM EDITURI INNER JOIN (CARTI INNER JOIN IMPRUMUT ON CARTI.Nr_inv = IMPRUMUT.Nr_inv) ON
EDITURI.Cod_Editura = CARTI.Cod_editura
WHERE (((Year([Data_impr]))=2010))
ORDER BY EDITURI.Denumire;
În tabela din figura 2.86, prezentăm rezultatul interogării cu evitarea repetiţiei, adică am folosit
clauza DISTINCT.
Q26
Cod_Editura Denumire
1010 Humanitas
1009 Junimea
1007 Nemira
1006 Niculescu
1005 Polirom
Figura 2.86. Interogarea Q26 cu clauza DISTINCT
Notă: Pentru extragerea anului din câmpul Data_impr, am folosit funcţia Year. Facem precizarea că ar fi posibil să
înlocuim utilizarea acestei funcţii cu o condiţie compusă de forma:
WHERE [Data_impr]>=#1/1/2010# and [Data_impr]<=#31/12/2010#
Fraza SELECT va deveni:
SELECT DISTINCT EDITURI.Cod_Editura, EDITURI.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]<=#1/1/2010# And [Data_impr]<=#31/12/2010# ORDER BY EDITURI.Denumire;
Aceeaşi frază SELECT se poate rescrie prin utilizarea clauzei Between, ceea ce va conduce la
următoarea formă:
SELECT DISTINCT EDITURI.Cod_Editura, EDITURI.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/2010# And #31/12/2010# ORDER BY EDITURI.Denumire;
Q27: Care sunt cititorii care au împrumutat mai mult de 2 cărţi?
SELECT CITITORI.NumePrenume, Cod_cit
FROM CITITORI
WHERE CITITORI.cod_cit In
(SELECT Cod_cit FROM (SELECT COUNT(*), Cod_cit FROM IMPRUMUT GROUP BY IMPRUMUT.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ă?
SELECT EDITURI.Denumire, EDITURI.Cod_Editura
FROM EDITURI
WHERE EDITURI.Cod_Editura In (SELECT Cod_Editura FROM (SELECT COUNT(*), Cod_Editura FROM CARTI GROUP BY
CARTI.Cod_Editura HAVING COUNT(*)>=3));