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:

s17-erd

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:

S17-lookup-interogare

- 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.

S17-relatie

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.

S17-interogare1

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.

S17-interogare2

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.

S17-interogare-3

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.