eÎntr-o instituţie şcolară sunt memorate într-un catalog virtual toate notele elevilor. Pentru acest lucru, informaticianul a creat o bază de date în care a inclus informaţii despre elevi (numele, prenumele, CNP-ul acestuia), precum şi notele fiecărui elev. Este important să se cunoască data la care a fost pusă o notă, pentru a se putea urmări frecvenţa notării.
Diagrama ER 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 şi populaţi tabelele cu înregistrări relevante pentru cerinţele următoare:
b) Afişaţi numele, prenumele şi notele elevilor care au fost evaluaţi în luna martie 2010 la o materie a cărei denumire se citeşte de la tastatură.
c) Determinaţi media notelor obţinute la informatică în anul curent.
d) Afişaţi, pentru toţi elevii, toate notele primite. În raport, elevii trebuie să apară în ordine alfabetică.
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.
Se creează o bază de date nouă.
Structura tabelului ELEV pentru fiecare câmp:
- cnp - cheie primară, Data Type: Text (chiar dacă CNP este format din cifre, tipul se alege text)
proprietăţi modificate
Field Size: 13 (codul numeric personal are 13 cifre)
Format: 0000000000000 (13 de zero, pentru a elimina posibilitatea ca operatorul să greşească - să introducă mai multe sau mai puţine cifre)
Caption: C.N.P.
Validation Rule: Like "?????????????" (Like urmat de 13 semne de întrebare între ghilimele)
Validation Text: CNP este format din exact 13 cifre.
Required: Yes
Allow Zero Lenght: No
Index: Yes (No Duplicates)
- nume - Data Type: Text
proprietăţi modificate
Field Size: 30
Caption: Nume elev
Validation Rule: Is Not Null
Validation Text: Introduceti numele
Required: Yes
- prenume - Data Type: Text
proprietăţi modificate
Field Size: 30
Caption: Prenume elev
Validation Rule: Is Not Null
Validation Text: Introduceti prenumele
Required: Yes
Se introduc datele în tabel.
Structura tabelului NOTA pentru fiecare câmp:
- data - Data Type: Date/Time
proprietăţi modificate
Caption: Data
Validation Rule: Is Not Null
Validation Text: Introduceti data
Required: Yes
- nota - Data Type: Number
proprietăţi modificate
Field Size: Integer
Caption: Nota
Validation Rule: Between 1 And 10
Validation Text: Introduceti nota - o cifra intre 1 si 10.
Required: Yes
- materia - Data Type: Text
proprietăţi modificate
Field Size: 30
Caption: Disciplina
Validation Rule: Is Not Null
Validation Text: Introduceti disciplina
Required: Yes
- observatii - Data Type: Text (ar putea fi şi de tip Memo = maxim 64.000 caractere)
proprietăţi modificate
Field Size: 255
Caption: Observaţii
Required: No
* * Pentru putea a realiza o relaţie între cele două tabele, acestea trebuie să aibă un câmp comun. De aceea este necesară crearea a încă unui câmp în tabelul NOTA. Acest câmp va face legătura între cele două tabele. În tabelul NOTA adăugăm câmpul
- cnp - Data Type: Text, Field Size: 13, Required: Yes.
Notă (pentru cei avansaţi): Introducerea CNP în tabelul NOTA pentru fiecare înregistrare ia destul de mult timp, existând şi posibilitatea introducerii eronate a CNP. De aceea, valorile se pot alege dintr-o listă care să preia din tabelul ELEV şi numele elevului. Access selectează, pe baza unei interogări, câmpurile cnp, nume şi prenume din tabelul ELEV ş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 cnp, nume şi prenume din tabelul ELEV
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 (cnp)
Column Count: se indică numărul de coloane care vor fi afişate la completarea datelor. Alegem trei, pentru ca să fie vizibile numele şi prenumele elevilor (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.9848" (unitatea de măsură este în inch - sau ţoli) - indică lăţimea coloanelor
Astfel devine mai simplă şi mai rapidă completarea câmpului cnp (vezi figura de mai jos), prin alegerea acestuia din listă:
În modul Datasheet View se completează tabelul cu câteva înregistrări (minim o înregistrare cu data când a fost primită nota este în luna martie 2010 - vezi cerinţa b şi minim o înregistrare cu disciplina Informatică - vezi cerinţa c).
Se realizează relaţia dintre tabele legând
câmpul-cheie primară cnp din tabelul ELEV la
câmpul cnp din tabelul NOTA.
Între cele două tabele se realizează o relaţie One-to-many (una la mai multe, adică
o înregistrare din tabelul ELEV
corespunde
la mai multe înregistrări din tabelul NOTA.
Altfel zis, în acest caz, un elev poate avea mai multe note.
Se urmează aceiaşi paşi ca la subiectul 1.
b) Afişaţi numele, prenumele şi notele elevilor care au fost evaluaţi în luna martie 2010 la o materie a cărei denumire se citeşte de la tastatură.
Se creează o interogare care preia date din ambele tabele Create - Query Wizard - Simple Query Wizard:
- din tabelul ELEV se preiau numele şi prenumele elevilor;
- din tabelul NOTA se preiau data (pentru a selecta luna martie 2010), nota şi materia.
Pentru citirea materiei de la tastatură, în coloana corespunzătoare câmpului materia, pe rândul Criteria se introduce între paranteze pătrate textul Introduceti materia.
Pentru selectarea lunii se foloseşte funcţia Month (care extrage luna din data calendaristică), iar pentru selectarea anului - funcţia Year (care extrage anul din data calendaristică) - vezi figura de mai sus.
c) Determinaţi media notelor obţinute la informatică în anul curent.
Se creează o interogare care preia date din ambele tabele Create - Query Wizard - Simple Query Wizard - Summary (la Summary Options se bifează opţiunea Avg - media aritmetică):
După salvarea interogării, în modul de vizualizare Design View, se fac următoarele modificări (vezi figura de mai jos):
- în coloana corespunzătoare câmpului materia, pe rândul criteria se scrie între ghilimele Informatica;
- în coloana corespunzătoare datei
pe rândul Field se foloseşte funcţia Year pentru a extrage anul din data calendaristică
pe rândul Criteria se scrie 2010;
- se rotunjeşte media aritmetică la două zecimale: Media: Round(Avg([nota]),2) pentru a se evita afişarea mai multor zecimale.
d) Afişaţi, pentru toţi elevii, toate notele primite. În raport, elevii trebuie să apară în ordine alfabetică.
Se creează un raport.
Click pe butonul Create din meniu, apoi pe Report Wizard din grupul de butoane Reports. Se aleg datele care vor fi afişate în raport:
- din tabelul ELEV, se aleg câmpurile nume şi prenume;
- din tabelul NOTA se aleg câmpurile materia şi nota.
În fereastra următoare, gruparea datelor se face după elev (by Elev). Din fereastra următoare se poate alege încă un nivel de grupare: după materie.
În fereastra de ordonare a datelor există posibilitatea de ordonare crescătoare sau descrescătoare a notelor.
Următoarea fereastră ne propune modul de afişare al datelor folosind diferite şabloane (layout), după care, în ultima fereastră, ni se cere numele raportului nou creat şi deschiderea acestuia pentru previzualizare sau pentru modificare.
Modul previzualizare arată cum va fi listat raportul la imprimantă. E posibil ca la generarea automată a raportului unele câmpuri să nu încapă pe foaie sau să dorim să le poziţionăm altfel.
Ulterior, raportul poate fi modificat din modul Design View, unde se pot rearanja etichetele raportului şi se pot adăuga elemente grafice etc. În figura de mai sus se pot vedea nivelurile de grupare alese.
Am ataşat şi fişierul în format mdb.
Spor la lucru!