De ce o baza de date si nu inca o foaie de calcul
Baza de date pe care o vei construi pas cu pas in acest capitol o vei face in Microsoft Access, programul de baze de date inclus in pachetul Microsoft Office. Termenii tehnici din lectiile urmatoare (Text scurt, Field Size, Design View etc.) sunt denumirile exacte pe care le vei intalni in meniurile Access.
Liste scurte, de cateva zeci de randuri, fara legaturi cu alte liste, folosite de o singura persoana — de exemplu un inventar rapid al sculelor din propria trusa.
Cand ai mii de piese, mai multe tabele care trebuie legate intre ele (piese, furnizori, comenzi, clienti) si mai multi oameni care introduc date in acelasi timp. Baza de date impune un tip de date fix per camp (asa cum vei vedea in atomii urmatori) si poate impiedica de la inceput introducerea unui cod de piesa duplicat, prin regula de cheie primara — subiect pe care il vei aprofunda in lectia urmatoare.
Tipul de date Text — coduri, denumiri, furnizori
Campul Cod_Piesa cu valoarea AM-0231 sau 00452 trebuie sa fie Text. Chiar daca "0231" sau "00452" par numere, ele sunt de fapt identificatori — codul de catalog al furnizorului — si trebuie comparate caracter cu caracter, nu calculate.
Cum recunosti: codul afisat in evidenta are mai putine cifre decat cel de pe factura sau catalogul furnizorului.
Cum repari: schimba tipul campului in Text inainte sa reintroduci codurile; intr-un tabel deja populat gresit, va trebui sa retastezi valorile dupa schimbarea tipului, pentru ca zerourile pierdute nu se recupereaza automat.
Tipul de date Numeric — cantitati si masuratori
In Access, subtipul Integer ocupa 2 octeti si accepta doar valori intre -32.768 si 32.767 — suficient pentru cantitati de piese mari (amortizoare, planetare), dar prea putin pentru un depozit de piese marunte vandute cu miile (suruburi, clipsuri, saibe). Din acest motiv, Field Size implicit propus de Access pentru un camp numeric este de fapt Long Integer (pana la peste 2 miliarde), iar pentru Cantitate_Stoc la piese marunte alegi explicit Long Integer, nu Integer.
Ai in stoc Cantitate_Stoc = 24 de amortizoare (Numar intreg — se numara doar in bucati). Fiecare amortizor cantareste Greutate_Unitara = 3,2 kg (Numar cu zecimale — masuratoare reala). Greutatea totala pentru transport se calculeaza asa: Greutate_totala = Cantitate_Stoc x Greutate_Unitara = 24 x 3,2 = 76,8 kg.
Cum recunosti: valorile din evidenta au mereu cifre rotunde, desi pe bonul de achizitie scrie o cantitate cu zecimale.
Cum repari: schimba subtipul campului la Numar cu zecimale (Single sau Double) cand valoarea poate avea fractii de unitate.
Tipul de date Data — receptii si termene de garantie
O piesa este receptionata pe Data_Receptie = 01.01.2026, iar garantia furnizorului este de 90 de zile. Data expirarii se calculeaza adaugand 90 de zile calendaristice: ianuarie are 31 de zile, februarie 2026 are 28 de zile, martie are 31 de zile — 31 + 28 + 31 = 90. Asadar Data_Expirare_Garantie = 01.04.2026 (1 aprilie 2026). In Access, acest calcul se face automat cu functia DateAdd, fara sa numeri manual zilele din fiecare luna: DateAdd("d", 90, [Data_Receptie]) — primul argument ("d") spune ca adaugi zile, al doilea (90) e numarul de zile de adaugat, al treilea e campul cu data de start; functia intoarce direct 01.04.2026.
Cand data de start e la mijlocul lunii, nu mai ai granite de luna "pe gratis" — numeri in doi pasi, luna cu luna. Exemplu: Data_Receptie = 15.03.2026, garantie 100 de zile.
1) Din 15 martie pana la sfarsitul lunii: martie are 31 de zile, deci raman 31 − 15 = 16 zile pana pe 31.03. Din cele 100, mai raman 100 − 16 = 84.
2) Aprilie are 30 de zile: 84 − 30 = 54 ramase, ajungi la 30.04.
3) Mai are 31 de zile: 54 − 31 = 23 ramase, ajungi la 31.05.
4) Cele 23 de zile ramase intra in intregime in iunie: 23 zile de la inceputul lunii inseamna 23.06.2026. Asadar Data_Expirare_Garantie = 23.06.2026. Tehnica, in scurt: scazi din total zilele ramase pana la sfarsitul lunii curente si treci in luna urmatoare, repetand pana cand restul de zile incape intr-o singura luna.
Cum recunosti: datele din rapoarte par "amestecate" pentru valori sub 12 (zilele si lunile isi schimba locul de la un rand la altul).
Cum repari: foloseste intotdeauna campul de tip Data (nu Text) si verifica formatul de afisare stabilit pentru camp (de exemplu zi.luna.an), astfel incat toate randurile sa fie interpretate la fel.
Tipul de date Logic — stari cu doar doua variante
Campul Piesa_Originala: bifat inseamna ca piesa e originala, fabricata de OEM (Original Equipment Manufacturer — producatorul de echipament original, adica exact specificatia constructorului auto); nebifat inseamna ca e piesa echivalenta, de tip "aftermarket" (piesa compatibila OEM, dar fabricata de alt producator — atentie, in limbajul de atelier "compatibil OEM" e eticheta pe care si-o pun chiar piesele aftermarket, nu piesele originale). La fel, un camp Stoc_Epuizat (Da/Nu) iti da o alerta rapida, fara sa numeri manual fiecare cantitate din tabel.
Cum recunosti: un filtru dupa "da" nu prinde toate randurile care, la ochiul liber, par identice.
Cum repari: schimba campul in tip Logic (Da/Nu), care impune structural doar doua valori posibile, indiferent cine introduce datele.
Tipul de date Moneda — preturi de achizitie si vanzare
Ai Cantitate_Stoc = 24 bujii (Numar intreg), cu Pret_Achizitie = 12,35 lei/bucata (Moneda). Valoarea totala a stocului pentru acest tip de piesa: Valoare_totala = Cantitate_Stoc x Pret_Achizitie = 24 x 12,35 = 296,40 lei.
Cum recunosti: totalul calculat de program difera cu cativa bani fata de totalul adunat manual de pe facturi.
Cum repari: schimba tipul campului in Moneda pentru orice valoare baneasca — pret de achizitie, pret de vanzare, valoare totala.
Recapitulare — tabelul tipurilor de date
| Camp | Tip de date | Exemplu de valoare | De ce acest tip |
|---|---|---|---|
| Cod_Piesa | Text scurt | AM-0231 | identificator, poate avea zerouri la inceput |
| Denumire_Piesa | Text scurt | Amortizor fata | sir de caractere, nu se calculeaza |
| Cantitate_Stoc | Numar intreg | 24 | se numara doar in bucati intregi |
| Pret_Achizitie | Moneda | 12,35 lei | valoare baneasca, fara erori de rotunjire |
| Data_Receptie | Data/Ora | 01.01.2026 | permite calcule cu date calendaristice |
| Piesa_Originala | Logic (Da/Nu) | Da | doar doua stari posibile, impuse de camp |
Ai vazut cum se alege tipul de date pentru fiecare camp in parte. In lectia urmatoare vei invata cum se organizeaza aceste campuri intr-un tabel propriu-zis, ce este o inregistrare (un rand), ce este o cheie primara (campul care garanteaza ca fiecare piesa are un identificator unic, fara duplicate) si de ce ai nevoie de un index pentru cautari rapide.