Microsoft Access 2019



Aplicații practice Microsoft Access 2019

Mod de lucru: realizați aplicațiile în ordinea propusă. Pentru fiecare bază de date creați tabelele în Vizualizare proiect, introduceți date de test, stabiliți relațiile, apoi construiți interogările, formularele și rapoartele. Salvați fiecare obiect imediat după creare.
Convenție: câmpurile care încep cu ID sunt identificatori. Cheia primară este de tip Numerotare automată; cheia externă corespunzătoare este de tip Număr, cu Dimensiune câmp = Întreg lung.
Aplicația 1 — Biblioteca începător

Obiectiv: evidența cărților și a autorilor, afișarea cărților disponibile cu prețul peste o valoare stabilită.

Etapa 1. Creați baza și tabelele

  1. Alegeți Fișier → Nou → Bază de date necompletată.
  2. Salvați fișierul cu numele Biblioteca.accdb.
  3. Alegeți Creare → Proiectare tabel și construiți tabelele de mai jos.
Tabela AutoriTip de dateProprietăți
IDAutorNumerotare automatăCheie primară
NumeAutorText scurtObligatoriu = Da
TaraText scurtDimensiune 50
Tabela CartiTip de dateProprietăți
IDCarteNumerotare automatăCheie primară
TitluText scurtDimensiune 150; Obligatoriu = Da
AnAparitieNumărRegulă: Between 1500 And Year(Date())
PretMonedăRegulă: >=0
DisponibilaDa/NuValoare implicită = Da
CopertaAtașareOpțional
IDAutorNumărÎntreg lung

Etapa 2. Introduceți datele — exemplu complet

Ordinea introducerii: completați mai întâi tabela Autori, apoi tabela Carti. Nu scrieți manual valorile din câmpurile de tip Numerotare automată; numerele de mai jos arată ID-urile obținute dacă introduceți înregistrările în această ordine.

Autori

IDAutorNumeAutorTara
1Ana MarinescuRomânia
2Mihai PopescuRomânia
3Radu DumitrescuRomânia
4Elena IonescuRomânia
5Jules VerneFranța

Carti

IDCarteTitluAnAparitiePretDisponibilaCopertaIDAutor
1Secretul bibliotecii202139,90Dacoperta_secretul.jpg1
2Orașul de hârtie201928,50Da—2
3Grădina cu povești202032,75Da—3
4Umbre peste lac202245,00Nu—4
5Călătorie spre centrul Pământului186427,90Dacoperta_calatorie.jpg5
6Insula misterioasă187436,50Da—5
7Algoritmi pentru începători202452,00Da—2
8Povești de seară201822,00Nu—4

Control rapid: interogarea cu Pret > 30 și Disponibila = Da trebuie să returneze cărțile cu ID 1, 3, 6 și 7.

Etapa 3. Creați relația

  1. Închideți tabelele și deschideți Instrumente bază de date → Relații.
  2. Adăugați Autori și Carti.
  3. Trageți Autori.IDAutor peste Carti.IDAutor.
  4. Bifați Impunere integritate referențială și apăsați Creare.

Etapa 4. Interogări

a) Carti_disponibile_peste_30_lei: câmpuri Titlu, NumeAutor, AnAparitie, Pret, Disponibila; criterii Pret >30 și Disponibila Da, pe același rând.

b) Carti_dupa_an: sub AnAparitie introduceți parametrul >=[Introduceți anul minim:].

c) Numar_carti_pe_autor: activați Totaluri, grupați după NumeAutor și aplicați Count asupra IDCarte.

Etapa 5. Formular și raport

  1. Creați cu Expert formular un formular pentru Carti, numit Formular_Carti.
  2. Verificați afișarea câmpului Coperta.
  3. Creați un raport din prima interogare, sortat crescător după Titlu.
  4. Salvați-l ca Raport_Carti_disponibile_peste_30_lei și verificați-l în Examinare înaintea imprimării.
Rezultat așteptat: baza conține două tabele legate 1–∞, trei interogări, un formular și un raport.
Aplicația 2 — Catalog școlar începător–mediu

Obiectiv: evidența elevilor, disciplinelor și notelor, calcularea mediilor și identificarea situațiilor sub 5.

Etapa 1. Structura bazei

Tabela EleviTipObservație
IDElevNumerotare automatăCheie primară
NumeText scurtObligatoriu
PrenumeText scurtObligatoriu
ClasaText scurtExemplu: 10A
DataNasteriiDată/OrăFormat Dată scurtă
Tabela DisciplineTip
IDDisciplinaNumerotare automată — cheie primară
DenumireText scurt
NumarOreNumăr
Tabela NoteTipRegulă
IDNotaNumerotare automatăCheie primară
IDElevNumărÎntreg lung
IDDisciplinaNumărÎntreg lung
NotaNumărBetween 1 And 10
DataNotaDată/Oră<=Date()

Etapa 2. Relații și date — exemplu complet

  1. Creați relațiile Elevi.IDElev → Note.IDElev și Discipline.IDDisciplina → Note.IDDisciplina.
  2. Activați integritatea referențială pentru ambele.
  3. Introduceți datele în ordinea Discipline, Elevi, Note. ID-urile se generează automat.

Discipline

IDDisciplinaDenumireNumarOre
1Informatică2
2Matematică4
3Limba română4
4Fizică2

Elevi

IDElevNumePrenumeClasaDataNasterii
1IonescuMara10A14.03.2010
2PopaAndrei10A22.07.2010
3StanElena10A09.11.2010
4DumitruVlad10A05.01.2010
5RaduIoana10B18.05.2010
6MarinDavid10B30.08.2010
7PavelSofia10B12.12.2010
8EnacheTudor10B02.02.2010

Note

IDNotaIDElevIDDisciplinaNotaDataNota
111901.09.2026
212802.09.2026
3131003.09.2026
421704.09.2026
522605.09.2026
624806.09.2026
7311007.09.2026
832908.09.2026
933909.09.2026
1041410.09.2026
1142511.09.2026
1244312.09.2026
1351813.09.2026
1452914.09.2026
1553815.09.2026
1661616.09.2026
1762417.09.2026
1864718.09.2026
19711019.09.2026
20721020.09.2026
2173921.09.2026
2281522.09.2026
2382723.09.2026
2484624.09.2026
2523925.09.2026

Control rapid: Note_sub_5 trebuie să afișeze notele 4, 3 și 4; Medii_peste_8 îi include pe Mara, Elena, Ioana și Sofia.

Etapa 3. Interogări

  1. Note_clasa: parametru în câmpul Clasa: [Introduceți clasa:]; sortare după Nume și Prenume.
  2. Note_sub_5: criteriu <5 în câmpul Nota.
  3. Medii_elevi: Totaluri; Group By după elev și Avg pentru Nota; redenumiți câmpul calculat Media: Avg([Nota]).
  4. Medii_peste_8: porniți de la Medii_elevi și aplicați criteriul >=8 sub Media.

Etapa 4. Formular și raport

  1. Creați un formular principal pentru Elevi și un subformular pentru Note.
  2. Verificați legătura câmpurilor master/child IDElev.
  3. Creați raportul Raport_Medii_elevi, grupat după Clasa și sortat descrescător după Media.
  4. Adăugați în subsol numărul elevilor folosind =Count([IDElev]).
Verificare: modificarea unui elev în formular schimbă automat notele afișate în subformular.
Aplicația 3 — Magazin și gestiunea stocului mediu

Obiectiv: evidența produselor, furnizorilor și intrărilor în stoc; calcularea valorii stocului.

Etapa 1. Tabele

Tabela CategoriiTip
IDCategorieNumerotare automată — cheie primară
DenumireCategorieText scurt
Tabela ProduseTipProprietate
IDProdusNumerotare automatăCheie primară
DenumireProdusText scurtObligatoriu
IDCategorieNumărÎntreg lung
PretUnitarMonedă>0
StocNumăr>=0
StocMinimNumărValoare implicită 5
Tabela FurnizoriTip
IDFurnizorNumerotare automată — cheie primară
NumeFurnizorText scurt
TelefonText scurt
EmailText scurt
Tabela AprovizionariTip
IDAprovizionareNumerotare automată — cheie primară
IDProdusNumăr — Întreg lung
IDFurnizorNumăr — Întreg lung
DataIntrareDată/Oră
CantitateNumăr; regulă >0

Etapa 2. Date de test complete

Introduceți în ordinea Categorii, Produse, Furnizori, Aprovizionari. ID-urile sunt generate automat.

Categorii

IDCategorieDenumireCategorie
1Birotică
2IT
3Papetărie
4Accesorii

Produse

IDProdusDenumireProdusIDCategoriePretUnitarStocStocMinim
1Hârtie A4129,90410
2Capsator metalic135,00125
3Tastatură USB289,9035
4Mouse wireless274,50186
5Caiet A4312,5058
6Pix albastru33,204015
7Stick USB 64 GB445,0024
8Căști cu microfon4120,0093

Furnizori

IDFurnizorNumeFurnizorTelefonEmail
1Office Plus0251 410 100comenzi@officeplus.ro
2Tech Distribution021 330 2020vanzari@techdistribution.ro
3Papetăria Sud0351 700 300contact@papetariasud.ro
4Digital Store031 555 4040office@digitalstore.ro

Aprovizionari

IDAprovizionareIDProdusIDFurnizorDataIntrareCantitate
11102.09.202620
22102.09.202610
33205.09.20268
44205.09.202615
55310.09.202630
66310.09.2026100
77412.09.202612
88412.09.202610
91318.09.202615
103220.09.20266
115121.09.202620
127423.09.20268

Control rapid: Produse_de_comandat trebuie să returneze IDProdus 1, 3, 5 și 7.

Etapa 3. Relații

  1. Categorii.IDCategorie → Produse.IDCategorie.
  2. Produse.IDProdus → Aprovizionari.IDProdus.
  3. Furnizori.IDFurnizor → Aprovizionari.IDFurnizor.
  4. Activați integritatea referențială.

Etapa 4. Interogări calculate

  1. Valoare_stoc: adăugați câmpul Valoare: [PretUnitar]*[Stoc].
  2. Produse_de_comandat: criteriu <=[StocMinim] sub Stoc.
  3. Aprovizionari_perioada: criteriu Between [Data început:] And [Data sfârșit:].
  4. Total_aprovizionat: grupați după produs și calculați Sum pentru Cantitate.

Etapa 5. Formulare și rapoarte

  1. Creați formularul Produse și transformați IDCategorie într-o casetă combinată care afișează denumirea categoriei.
  2. Creați formularul Furnizori cu subformularul Aprovizionari.
  3. Creați raportul Valoare_stoc, grupat după categorie.
  4. În subsolul raportului adăugați totalul general: =Sum([Valoare]).
Aplicația 4 — Evidența împrumuturilor mediu

Obiectiv: urmărirea obiectelor împrumutate, termenelor de restituire și întârzierilor.

Etapa 1. Tabele

Creați tabelele Persoane (IDPersoana, Nume, Telefon, Email), Obiecte (IDObiect, Denumire, Categorie, Disponibil) și Imprumuturi (IDImprumut, IDPersoana, IDObiect, DataImprumut, DataScadenta, DataRestituire).

  • DataImprumut: valoare implicită Date().
  • DataScadenta: regulă >=[DataImprumut].
  • DataRestituire poate rămâne necompletată până la returnare.

Etapa 2. Date de test complete

Introduceți mai întâi Persoane și Obiecte, apoi Imprumuturi. În coloana DataRestituire, gol înseamnă că nu introduceți nimic.

Persoane

IDPersoanaNumeTelefonEmail
1Ana Ionescu0712 111 101ana.ionescu@exemplu.ro
2Mihai Popescu0722 222 202mihai.popescu@exemplu.ro
3Elena Radu0733 333 303elena.radu@exemplu.ro
4Vlad Stan0744 444 404vlad.stan@exemplu.ro
5Ioana Pavel0755 555 505ioana.pavel@exemplu.ro
6David Marin0766 666 606david.marin@exemplu.ro

Obiecte

IDObiectDenumireCategorieDisponibil
1Laptop DellITNu
2Proiector EpsonEchipamentNu
3Aparat foto CanonMultimediaDa
4Tabletă SamsungITNu
5Microfon wirelessAudioDa
6Atlas geograficCarteDa
7Robot educaționalEducațieNu
8Cameră video SonyMultimediaDa

Imprumuturi

IDImprumutIDPersoanaIDObiectDataImprumutDataScadentaDataRestituire
11110.09.202617.09.2026gol
22220.09.202627.09.2026gol
33301.09.202608.09.202607.09.2026
44412.09.202619.09.2026gol
55505.09.202612.09.202612.09.2026
61615.08.202622.08.202620.08.2026
76718.09.202625.09.2026gol
82802.09.202609.09.202610.09.2026
93523.09.202630.09.202625.09.2026
105322.09.202629.09.202624.09.2026

Control la 26.09.2026: Imprumuturi_active returnează ID 1, 2, 4 și 7; Imprumuturi_intarziate returnează ID 1, 4 și 7. La o dată ulterioară, lista întârzierilor se actualizează automat.

Etapa 3. Relații

Persoane 1–∞ Imprumuturi și Obiecte 1–∞ Imprumuturi, cu integritate referențială.

Etapa 4. Interogări

  1. Imprumuturi_active: criteriu Is Null sub DataRestituire.
  2. Imprumuturi_intarziate: criterii <Date() sub DataScadenta și Is Null sub DataRestituire.
  3. Zile_intarziere: câmp calculat ZileIntarziere: Date()-[DataScadenta].
  4. Istoric_persoana: parametru [Introduceți numele:] sub Nume.

Etapa 5. Formular de lucru

  1. Creați formular pentru Imprumuturi.
  2. Înlocuiți IDPersoana și IDObiect cu liste derulante care afișează numele și denumirea.
  3. Adăugați un buton pentru înregistrare nouă și unul pentru închiderea formularului.
  4. Creați raportul Împrumuturi întârziate, sortat după numărul zilelor de întârziere.
Aplicația 5 — Cabinet medical mediu–avansat

Obiectiv: programarea pacienților la medici și obținerea listelor zilnice. Se folosesc numai date fictive.

Protecția datelor: nu introduceți date medicale reale în exercițiu.

Etapa 1. Tabele

TabelCâmpuri
PacientiIDPacient, Nume, Prenume, DataNasterii, Telefon
MediciIDMedic, NumeMedic, Specializare
ProgramariIDProgramare, IDPacient, IDMedic, DataProgramare, OraProgramare, Motiv, Status

Pentru Status creați o listă de valori: Programată;Efectuată;Anulată. Pentru DataProgramare folosiți regula >=Date() în momentul introducerii programării.

Etapa 2. Relații și date — exemplu complet

  1. Pacienti.IDPacient → Programari.IDPacient.
  2. Medici.IDMedic → Programari.IDMedic.
  3. Introduceți Pacienti și Medici înainte de Programari.

Pacienti (toate datele sunt fictive)

IDPacientNumePrenumeDataNasteriiTelefon
1IonescuAna12.04.19850712 100 101
2PopescuMihai23.09.19780722 100 102
3RaduElena05.02.19920733 100 103
4StanVlad19.11.20010744 100 104
5PavelIoana30.06.19690755 100 105
6MarinDavid08.01.19880766 100 106
7DumitruSofia14.08.19950777 100 107
8EnacheTudor21.03.19750788 100 108
9MateiIrina17.12.20040799 100 109
10GeorgescuPaul02.05.19810700 100 110

Medici

IDMedicNumeMedicSpecializare
1Dr. Andrei GeorgescuCardiologie
2Dr. Elena MarinescuDermatologie
3Dr. Radu PetrescuORL
4Dr. Ioana StanMedicină generală

Programari

Exemplul este raportat la 26.09.2026. Dacă lucrați după această dată și regula >=Date() respinge valorile, mutați toate datele programărilor în viitor, păstrând aceleași intervale; pentru testarea interogării Programari_azi, puneți data curentă în primele patru rânduri.
IDProgramareIDPacientIDMedicDataProgramareOraProgramareMotivStatus
11126.09.202609:00Control periodicProgramată
22226.09.202609:30Erupție cutanatăProgramată
33326.09.202610:00Durere de urecheProgramată
44426.09.202610:30Consultație generalăEfectuată
55128.09.202608:30Tensiune arterialăProgramată
66228.09.202609:15Control dermatologicProgramată
77328.09.202611:00Dureri în gâtAnulată
88429.09.202608:45Analize uzualeProgramată
99129.09.202610:15PalpitațiiProgramată
1010230.09.202609:00Control alunițeProgramată
111301.10.202609:30Control auditivProgramată
122401.10.202611:30Stare de obosealăProgramată
133102.10.202608:30Evaluare cardiacăProgramată
144202.10.202610:00Iritație cutanatăProgramată
155305.10.202609:45SinuzităProgramată
166405.10.202612:00Control anualProgramată
177107.10.202608:00EKGProgramată
188207.10.202610:30AlergieAnulată
199309.10.202609:00RăgușealăProgramată
2010410.10.202611:00Consultație generalăProgramată

Control rapid: la 26.09.2026, Programari_azi afișează patru înregistrări, în ordinea 09:00, 09:30, 10:00 și 10:30.

Etapa 3. Interogări

  1. Programari_azi: criteriu Date() sub DataProgramare; sortare după OraProgramare.
  2. Programari_medic: parametru sub NumeMedic.
  3. Programari_perioada: două valori parametrice pentru date.
  4. Numar_programari_medic: Group By după medic și Count pentru IDProgramare.

Etapa 4. Formular și raport

  1. Creați formularul Programari cu liste derulante pentru pacient și medic.
  2. Adăugați un filtru pentru Status.
  3. Creați raportul Programări zilnice, grupat după medic și sortat după oră.
  4. În antet afișați data prin expresia =Date().
Aplicația 6 — Agenție turistică avansat

Obiectiv: gestionarea clienților, destinațiilor și rezervărilor, cu calcularea valorii și a încasărilor.

Etapa 1. Tabele și relații

TabelCâmpuri principale
ClientiIDClient, NumeClient, Telefon, Email
DestinatiiIDDestinatie, Tara, Localitate, PretPersoana, LocuriDisponibile
RezervariIDRezervare, IDClient, IDDestinatie, DataRezervare, DataPlecare, NumarPersoane, Avans, Achitata
  1. Clienti.IDClient → Rezervari.IDClient.
  2. Destinatii.IDDestinatie → Rezervari.IDDestinatie.
  3. Pentru NumarPersoane folosiți regula >0.
  4. Pentru Avans folosiți Monedă și regula >=0.

Etapa 2. Date de test complete

Introduceți în ordinea Clienti, Destinatii, Rezervari. Datele sunt fictive, iar ID-urile sunt generate automat.

Clienti

IDClientNumeClientTelefonEmail
1Ana Ionescu0712 201 101ana.ionescu@exemplu.ro
2Mihai Popescu0722 202 202mihai.popescu@exemplu.ro
3Elena Radu0733 203 303elena.radu@exemplu.ro
4Vlad Stan0744 204 404vlad.stan@exemplu.ro
5Ioana Pavel0755 205 505ioana.pavel@exemplu.ro
6David Marin0766 206 606david.marin@exemplu.ro
7Sofia Dumitru0777 207 707sofia.dumitru@exemplu.ro
8Tudor Enache0788 208 808tudor.enache@exemplu.ro

Destinatii

IDDestinatieTaraLocalitatePretPersoanaLocuriDisponibile
1GreciaCreta1.800,0025
2ItaliaRoma1.500,0020
3SpaniaBarcelona2.100,0018
4FranțaParis1.950,0015
5TurciaAntalya1.600,0030
6AustriaViena1.400,0016

Rezervari

IDRezervareIDClientIDDestinatieDataRezervareDataPlecareNumarPersoaneAvansAchitata
11101.09.202615.10.202623.600Da
22202.09.202618.10.20261500Nu
33303.09.202622.10.202624.200Da
44404.09.202628.10.202632.000Nu
55505.09.202605.11.202623.200Da
66606.09.202610.11.20261400Nu
77107.09.202612.11.202647.200Da
88208.09.202620.11.202621.000Nu
91309.09.202603.12.202612.100Da
102410.09.202608.12.202621.500Nu
113511.09.202612.12.202634.800Da
124612.09.202618.12.20262800Nu
135113.09.202615.01.202711.800Da
146214.09.202620.01.202752.500Nu
158315.09.202625.01.2027195.000Nu

Control rapid: Rezervari_neachitate returnează ID 2, 4, 6, 8, 10, 12, 14 și 15; interogarea-provocare semnalează rezervarea 15, deoarece 19 > 18.

Etapa 3. Interogări calculate

  1. Valoare_rezervari: Valoare: [PretPersoana]*[NumarPersoane].
  2. Rest_de_plata: Rest: [Valoare]-[Avans].
  3. Plecari_luna: criteriu Month([DataPlecare])=[Introduceți luna:].
  4. Rezervari_neachitate: criteriu Nu sub Achitata.
  5. Incasari_destinatie: Group By după destinație și Sum pentru Valoare.

Etapa 4. Formular principal cu subformular

  1. Creați formularul principal Clienti.
  2. Adăugați subformularul Rezervari și legați-l prin IDClient.
  3. În subformular transformați IDDestinatie într-o listă derulantă.
  4. Adăugați un control calculat pentru valoare și unul pentru restul de plată.

Etapa 5. Rapoarte

  1. Creați raportul Plecări lunare, grupat după DataPlecare.
  2. Creați raportul Încasări pe destinații și adăugați total general.
  3. Verificați orientarea paginii și lățimea coloanelor.
  4. Exportați raportul final în PDF.
Provocare: creați o interogare care semnalează rezervările unde NumarPersoane depășește LocuriDisponibile.

Grilă de verificare pentru orice aplicație

  • Fiecare tabel are cheie primară.
  • Cheile externe au tipul Număr – Întreg lung.
  • Relațiile au integritate referențială.
  • Tipurile de date și regulile de validare sunt corecte.
  • Interogările returnează rezultatele așteptate.
  • Formularele permit navigarea și introducerea datelor.
  • Rapoartele nu au câmpuri sau etichete trunchiate.
  • Obiectele au denumiri clare și sunt salvate.
Înapoi la începutul paginii