La un oficiu poştal este ţinută evidenţa abonamentelor la diverse publicaţii (reviste). La fiecare publicaţie pot fi abonate una sau mai multe persoane. Pentru a gestiona mai usor aplicaţia, informaticianul a creat şi tabela ABONAMENTE cu informaţii despre fiecare abonament încheiat.
Pentru fiecare revistă se cunoaşte titlul şi preţul (în baza de date se memorează preţul fără TVA), dar dat fiind faptul că uneori, publicaţiile pot avea acelaşi nume, fiecărei publicaţii i s-a asociat un număr de identificare unic. Unele dintre revistele la care se pot face abonamente sunt: PC Magazin, Chip, Agora, Bravo.
Diagrama ERD (Entity-Relationship Diagram) care descrie scenariul de mai sus este:
Cerinţe:
a) Construiţi baza de date cu tabele corespunzătoare şi relaţiile reprezentate în ERD.
Populaţi tabelele cu înregistrări relevante pentru cerinţele următoare:
b) Afişaţi lista persoanelor ce au făcut abonamente pentru o perioadă mai mare de 6 luni.
c) Afişaţi lista persoanelor abonate la publicaţiile din domeniul IT, ordonată alfabetic după nume.
d) Afişaţi lista publicaţiilor la care se pot face abonamente, într-un tabel care va avea următoarea formă:
Rezolvare
a) Construirea bazei de date cu tabele corespunzătoare şi a relaţiilor reprezentate în ERD.
Se creează o bază de date nouă.
Structura tabelului PUBLICATIE pentru fiecare câmp:
- id_revista - cheie primară, Data Type: Autonumber
- titlu - Data Type: Text
proprietăţi modificate
Field Size: 50 (presupunem că un titlu de carte nu depăşeşte 50 de caractere)
Caption: Titlul publicatiei
Required: Yes
Allow Zero Lenght: No
Unicode Compression: No
- preţ - Data Type: Currency
proprietăţi modificate
Format: General Number
Decimal Places: 2
Required: Yes
- domeniu - Data Type: Text
proprietăţi modificate
Field Size: 50
Required: Yes
Allow Zero Lenght: No
Unicode Compression: No
În modul Datasheet View se completează tabelul cu câteva înregistrări (minim o înregistrare pentru domeniul IT - vezi cerinţa c). De exemplu:
Structura tabelului ABONAMENT:
- cod - cheie primară, Data Type: Autonumber
- data - Data Type: Date/Time (în Access, formatul implicit al datei este MDY, adică lună-zi-an)
- durata - Data Type: Number
proprietăţi modificate
Field Size: Integer
Caption: Durata in luni
Required: Yes
- nume- Data Type: Text
proprietăţi modificate
Field Size: 30 (presupunem că un nume nu depăşeşte 30 de caractere)
Caption: Nume abonat
Required: Yes
Allow Zero Lenght: No
* Pentru a realiza o relaţie între cele două tabele, acestea trebuie să aibă un câmp comun. De aceea este necesară crearea unui câmp în plus în tabelul ABONAMENT. Acest câmp va face legătura între cele două tabele:
Deci în tabelul ABONAMENT adăugăm câmpul
- id_revista, Data Type: Number, Field Size: Long Integer.
Notă (pentru cei avansaţi): pentru a completa câmpul id_revista din tabelul ABONAMENT alegând valorile dintr-o listă "extrasă" din tabelul PUBLICATIE, se poate realiza o căutare de tip LookUp. Astfel, la completarea câmpului, va apare o listă din care se poate alege numele revistei (Access selectează, pe baza unei interogări, câmpurile id_revista şi titlu din tabelul PUBLICATIE şi le afişează ca pe o listă în câmpul id_revista din tabelul ABONAMENT).
Setări necesare:
Display Control: List Box - indicăm că valoarea va fi preluată dintr-o listă de valori
Row Source Type: Table/Query - lista de valori va fi preluată dintr-un tabel sau dintr-o interogare, care va fi specificat mai jos
Row Source: aici avem mai multe posibilităţi - poate fi ales un tabel, o interogare, poate fi scrisă direct interogarea sau se poate apela la expertul de interogare pentru a creea interogarea. În cazul de faţă, interogarea selectează câmpurile id_revista şi titlu din tabelul PUBLICATIE
Bound Column: se indică de unde se preiau valorile - dintr-a câta coloană din interogare - aici, din prima coloană care rezultă în urma interogării (id_revista)
Column Count: se indică numărul de coloane care vor fi afişate la completarea datelor. Alegem două, pentru ca să fie vizibil şi numele revistei (vezi figura de mai jos)
Column Heads: pentru afişarea/ascunderea capului de tabel - am ales No, deci nu va fi afişat
Column Widths: 0.5" (unitatea de măsură este în inch - sau ţoli) - indică lăţimea coloanelor
Astfel devine mai simplă completarea câmpului id_revista (vezi figura de mai jos), în ideea că avem mult mai multe reviste şi nu e necesar să ţinem minte ID-ul fiecăreia:
În modul Datasheet View se completează tabelul cu câteva înregistrări (minim o înregistrare cu o durată mai mare de 6 luni - vezi cerinţa b). De exemplu:
**Pentru ca relaţia dintre cele două tabele să funcţioneze corect, în câmpul id_revista se vor trece valori care se regăsesc în câmpul cu acelaşi nume al tabelului PUBLICATIE.
Relaţia dintre tabele se va realiza legând
câmpul-cheie primară id_revista din tabelul PUBLICATIE la
câmpul id_revista din tabelul ABONAMENT.
Între cele două tabele se realizează o relaţie One-to-many (una la mai multe, adică
o înregistrare - în acest caz o revistă - din tabelul PUBLICAŢIE
poate corespunde / (aici, poate fi trimisă)
la mai multe înregistrări - în acest caz mai mulţi abonaţi - din tabelul ABONAMENT.
Editarea relaţiei se poate face cu click pe butonul Edit Relationships din partea stângă sus
sau cu click dreapta pe linia care sugerează relaţia şi alegerea opţiunii Edit Relationship din meniul rapid
Din fereastra Edit Relationships care apare,
cu click pe butonul Join Type se alege a doua opţiune (o înregistrare din tabelul PUBLICAŢIE să corespundă mai multor înregistrari din tabelul ABONAMENT).
b) Lista persoanelor ce au făcut abonamente pentru o perioadă mai mare de 6 luni.
Avem nevoie de date din tabelul ABONAMENT: numele şi durata.
Se creează o interogare - Create - Query Wizard - Simple Query Wizard.
În interogare se aleg din tabelul ABONAMENT câmpurile durata şi nume.
După salvarea interogării, în modul de vizualizare Design View, la criteriul de selecţie al câmpului durata se scrie >6 (ca în figura de mai jos). Pentru a nu se afişa şi câmpul durata, se va debifa în Design View marcatorul pentru afişare (rândul Show) din coloana durata.
La rularea interogării, se vor afişa doar persoanele al căror abonament depăşeşte 6 luni.
c) Lista persoanelor abonate la publicaţiile din domeniul IT, ordonată alfabetic după nume.
În acest caz vom realiza o interogare folosind ambele tabele, pentru că avem nevoie de nume (care se află în tabelul ABONAMENT) şi domeniu (din tabelul PUBLICATIE).
Se creează o interogare - Create - Query Wizard - Simple Query Wizard. Se aleg câmpurile din cele două tabele.
Criteriul de selecţie se scrie în coloana publicaţie, pe rândul Criteria: "IT".
Se debifează marcatorul de pe rândul Show.
d) Lista publicaţiilor la care se pot face abonamente, în tabelul dat.
Toate informaţiile de care avem nevoie pentru această interogare se află în tabelul PUBLICATIE.
Pentru ca interogarea să afişeze alte nume în antet, va trebui să facem câteva modificări în interogare (vezi figura de mai jos).
Pentru ca numele primei coloane să fie Cod Publicatie, în rândul Field vom scrie Cod Publicatie: id_revista.
Procedăm la fel şi cu celelalte coloane - ca în figura de mai jos.
Preţul cu TVA se calculează înmulţind valoarea preţului cu 1.24 (înainte de zecimale se pune punct, nu virgulă). Deci se va scrie
Pretul cu TVA: [publicatie]*1.24
unde
- Pretul cu TVA este titlul care va fi afişat,
- urmează două puncte,
- între paranteze pătrate numele câmpului care se calculează - aici [publicatie]
- semnul înmulţit (*) şi valoarea cu care înmulţim câmpul respectiv.
Am ataşat şi fişierul în format mdb.
Spor la lucru!