Subiect_17
O companie care oferă on-line sau la telefon (contra cost, desigur) numerele de telefon ale abonaților din toate rețelele de telefonie, fixă sau mobilă, şi-a organizat informaţiile ca în diagrama de mai jos:
Abonatul poate fi persoană fizică sau juridică, caracteristica fiind specificată prin atributul tip. Un abonat poate avea mai multe numere de telefon în cadrul aceleiaşi reţele sau în reţele diferite. Pentru entitatea NR_TELEFON atributul tip poate fi: telefon sau fax.
Cerințe:
a) Construiţi tabela şi apoi populaţi-o cu înregistrări relevante pentru cerinţele următoare:
b) Afișați pentru abonații din localitatea Suceava numerele de telefon din rețeaua Romtelecom.
c) Afișați abonații persoane fizice din București, în ordinea alfabetică a numelor, împreună cu toate numerele de telefon şi fax, precizând pentru fiecare număr şi tipul şi rețeaua din care face parte.
d) Afișați abonații care au mai mult de un număr de telefon. Pentru fiecare astfel de abonat afișați numele, localitatea, adresa, numărul de numere de telefon, numărul de rețele diferite în care sunt alocate aceste numere.
Rezolvare
a) Construiţi tabela şi apoi populaţi-o cu înregistrări relevante pentru cerinţele următoare:
Structura tabelului ABONAT pentru fiecare câmp:
- id - cheie primară, Data Type: AutoNumber
- nume - Data Type: Text
proprietăţi modificate
Field Size: 80
Required: Yes
- tip - Data Type: Text
proprietăţi modificate
Field Size: 80
opţional:
Default Value: "Persoana fizica"
Validation Rule: "Persoana fizica" Or "Persoana juridica"
Validation Text: Alegeti tipul din lista.
Required: Yes
şi crearea unei liste în Lookup:
Display Control: List Box
Row Source Type: Value List
Row Source: "Persoana fizica"; "Persoana juridica"
- localitate - Data Type: Text
proprietăţi modificate
Field Size: 80
Required: Yes
- adresa - Data Type: Text
proprietăţi modificate
Field Size: 80
Structura tabelului NR_TELEFON pentru fiecare câmp:
- id - Data Type: Number - pentru a realiza o relaţie cu cheia primară id din tabelul ABONAT, aici se dezactivează butonul cheie primară
proprietăţi modificate
Field Size: Long Integer
Decimal Places: 0
Opţional: Pentru a completa mai rapid datele în câmpul id, se poate realiza o interogare care să preia din tabelul ABONAT câmpurile id, nume şi localitate. Pentru aceasta, se va realiza o interogare în Lookup:
- numar - Data Type: Text
proprietăţi modificate
Field Size: 20
Required: Yes
opţional:
Input Mask: 9999"- "000.000;;_
- retea - Data Type: Text
proprietăţi modificate
Field Size: 30
- tip - Data Type: Text
proprietăţi modificate
Field Size: 30
opţional, crearea unei liste în Lookup:
Display Control: List Box
Row Source Type: Value List
Row Source: "Telefon"; "Fax"
Se realizează relaţia de tip one-to-many legând
câmpul-cheie primară id din tabelul ABONAT la
câmpul id din tabelul NR_TELEFON.
b) Afișați pentru abonații din localitatea Suceava numerele de telefon din rețeaua Romtelecom.
Se creează o interogare care preia date din ambele tabele.
c) Afișați abonații persoane fizice din București, în ordinea alfabetică a numelor, împreună cu toate numerele de telefon şi fax, precizând pentru fiecare număr şi tipul şi rețeaua din care face parte.
Se creează o interogare care preia date din ambele tabele.
d) Afișați abonații care au mai mult de un număr de telefon. Pentru fiecare astfel de abonat afișați numele, localitatea, adresa, numărul de numere de telefon, numărul de rețele diferite în care sunt alocate aceste numere.
Interogarea va afişa o singură dată abonaţii (grupare după nume, localitate şi adresă) care au mai mult de un număr de telefon (funcţia Count cu criteriul >1).
Se creează o interogare care preia date din ambele tabele.
Gruparea se face după nume abonat. Pe acelaşi rând se afişează localitatea şi adresa corespunzătoare abonatului. Numărul de telefoane se obţine folosind funcţia Count, iar la criteriu se completează cu >1. Funcţia Count numără înregistrările grupate. Numărul de reţele poate fi diferit de numărul de telefoane, dar modul în care este formulată cerinţa duce la o afişare incorectă a numărului de reţele pentru un abonat.
Pentru a afişa şi numărul de reţele diferite în care sunt alocate aceste numere, va trebui să realizăm încă o interogare care să calculeze acest lucru
şi
care să aibă o relaţie cu prima interogare după id abonat.
Am ataşat fişierul în format .mdb.