Într-o bază de date se memorează informaţii despre regizorii şi filmele acestora. Fiecare regizor poate regiza unul sau mai multe filme, dar fiecare film este regizat de un singur regizor. Durata filmului este exprimată în număr de minute (90, 120 sau mai mare de 120), iar bugetul este suma alocată producerii filmului. Diagrama ERD ce modelează situaţia este dată în figură. Se cere:
a) Construiţi baza de date cu tabele corespunzătoare şi relaţiile reprezentate în ERD şi populaţi tabelele cu înregistrări relevante pentru cerinţele următoare:
b) Afişaţi în ordine alfabetică toate filmele cu buget mai mic de 30000 de euro, precum şi regizorul acestora (titlul filmului, anul apariției, bugetul şi numele regizorului).
c) Afişaţi un raport care va cuprinde denumirea fiecărui film, numele regizorului şi durata filmului astfel: dacă filmul durează 120 de minute afișați în coloana „TIMP ALOCAT” mesajul Durata e de 2 ore, dacă durează 90’ afișați mesajul Obișnuit, altfel afișați Două serii.
d) Determinaţi şi afişaţi numărul filmelor produse în anul 2009.
Rezolvare
a) Construiţi baza de date cu tabele corespunzătoare şi relaţiile reprezentate în ERD şi populaţi tabelele cu înregistrări relevante pentru cerinţele următoare:
Structura tabelului FILM pentru fiecare câmp:
- id - cheie primară, Data Type: AutoNumber
- titlu - Data Type: Text
proprietăţi modificate
Field Size: 50
Caption: Titlu film
Validation Rule: Is Not Null
Validation Text: Introduceti titlul filmului
Required: Yes
- durata - Data Type: Number
proprietăţi modificate
Field Size: Integer
Caption: Durata film
Required: Yes
- an_apar - Data Type: Number
proprietăţi modificate
Field Size: Integer
Caption: Anul aparitiei
Required: Yes
- buget - Data Type: Number
proprietăţi modificate
Field Size: Long Integer
Decimal places: 2
Caption: Buget
Required: Yes
- id_regizor - Data Type: Number
proprietăţi modificate
Field Size: Long Integer - pentru a face legătura cu numele regizorului din tabelul REGIZOR
Required: Yes
Structura tabelului REGIZOR pentru fiecare câmp:
- id - cheie primară, Data Type: AutoNumber
- nume - Data Type: Text
proprietăţi modificate
Field Size: 60
Caption: Nume regizor
Validation Rule: Is Not Null
Validation Text: Introduceti numele regizorului
Required: Yes
Se realizează relaţia dintre tabele legând
câmpul-cheie primară id din tabelul REGIZOR la
câmpul id_regizor din tabelul FILM.
b) Afişaţi în ordine alfabetică toate filmele cu buget mai mic de 30000 de euro, precum şi regizorul acestora (titlul filmului, anul apariției, bugetul şi numele regizorului).
Se creează o interogare care preia date din ambele tabele - Create - Query Wizard - Simple Query Wizard:
- din tabelul REGIZOR se preia numele regizorului;
- din tabelul FILM se preiau titlul, anul apariţiei şi bugetul.
Ordonarea se face crescător după titlu. Se vor selecta şi afişa doar filmele care au buget mai mic de 30000 - la intersecţia rândului Criteriu cu coloana corespunzătoare bugetului filmului se scrie condiţia <30000.
c) Afişaţi un raport care va cuprinde denumirea fiecărui film, numele regizorului şi durata filmului astfel: dacă filmul durează 120 de minute afișați în coloana „TIMP ALOCAT” mesajul Durata e de 2 ore, dacă durează 90’ afișați mesajul Obișnuit, altfel afișați Două serii.
Înainte de realizarea raportului este bine să analizăm cerinţa care se referă la durata filmului.
Mai jos este schema logică.
Se va folosi funcţia IIF, imbricată în altă funcţie IIF.
IIF este o funcţie care permite luarea unei decizii în funcţie de o condiţie.
Funcţia IF are o condiţie şi două "răspunsuri", două ramuri, adica două acţiuni:
-- o acţiune pentru cazul în care condiţia este adevărată şi
-- o acţiune pentru cazul în care condiţia este falsă.
Dacă (condiţie, actiunea pentru adevărat, actiunea pentru fals).
În acest caz ni se cere afişarea a 3 mesaje, de accea folosim încă o funcţie IIF, care "se activează" atunci când nu este îndeplinită condiţia din prima funcţie IIF.
Raportul se poate realiza în două moduri:
- prin crearea unui raport nou în care se aleg câmpurile film şi durata din tabelul FILM şi nume din tabelul REGIZOR, după care pentru elementul durata se modifică proprietatea Control source
=IIf([durata]=120,"Durata e de doua ore",IIf([durata]=90,"Obisnuit","Doua serii")).
Este o metodă destul de anevoioasă şi necesită mai multe cunoştinţe despre realizarea rapoartelor în Access.
- prin crearea unei interogări, pe baza căreia se creează automat raportul - metodă mai rapidă şi mai simplu de realizat.
Mai jos este descrisă realizarea raportului pe baza interogării.
Interogarea extrage datele necesare din cele două tabele. Pentru câmpul durata se scrie condiţia
Timp alocat: IIf([durata]=120,"Durata e de doua ore",IIf([durata]=90,"Obisnuit","Doua serii"))
După ce se verifică dacă interogarea este corect realizată, se creează raportul folosind toate elementele interogării.
d) Determinaţi şi afişaţi numărul filmelor produse în anul 2009.
Se creează o interogare care preia date din ambele tabele Create - Query Wizard - Simple Query Wizard - Summary (la Summary Options se bifează opţiunea Numărare înregistrări). În figura de mai jos se poate observa cum filmele sunt grupate după anul apariţiei (Group by) şi sunt numărate (Count). Scriind la Criteriu 2009, interogarea va afişa doar numărul filmelor care au fost produse în anul 2009.
În fişierul ataşat se află atât raportul realizat "în mod clasic", cât şi cel realizat pe baza unei interogări.
Succes!