Invatare Atomica

Exploatarea bazei de date

Interogari de gestiune si raport tiparibil pentru farmacie

Progres lectie:
0%
🎯

Obiectivul lectiei

Un tabel plin cu sute de produse nu-i spune sefei de farmacie nimic direct — ea are nevoie de raspunsuri: ce expira curand, ce trebuie comandat, cat valoreaza stocul. In aceasta lectie inveti sa pui bazei de date exact aceste intrebari, folosind interogari (queries) in Access, si sa transformi rezultatul intr-un raport de gestiune gata de tiparit. Este ultima lectie din modulul C3 — leaga tot ce ai invatat despre structura tabelelor si incarcarea datelor de scopul lor real: informatia utila pentru gestiune.

Dupa aceasta lectie vei putea:

  • Sa explici diferenta dintre a rasfoi un tabel si a rula o interogare asupra lui
  • Sa construiesti o interogare care gaseste loturile expirate sau aproape expirate, folosind functia Date()
  • Sa construiesti doua interogari legate — una care totalizeaza stocul curent pe produs, alta care il compara cu stocul minim
  • Sa construiesti o interogare de totalizare (Totals) care calculeaza valoarea stocului pe fiecare forma farmaceutica
  • Sa transformi o interogare intr-un raport (Report) formatat, gata de tiparit pentru dosarul de gestiune
  • Sa recunosti si sa corectezi cea mai frecventa greseala la scrierea criteriilor

Incearca singur!

Provocare — inainte sa citesti:

E sfarsit de luna. Seful de farmacie iti cere trei liste, pana maine: loturile care expira in urmatoarele 30 de zile, produsele al caror stoc a scazut sub minimul admis (trebuie comandate), si valoarea totala a stocului pe fiecare forma farmaceutica, pentru raportul lunar de gestiune. Ai tabelele Produse si Intrari in Access, cu sute de randuri. Cum obtii cele trei liste FARA sa rasfoiesti manual tabelele rand cu rand si FARA sa modifici datele originale?

💡 Ai nevoie de un indiciu?

Gandeste-te la doua dulapuri cu dosare, legate intre ele printr-un cod comun: cautarea manuala, dosar cu dosar, dureaza ore si e usor sa scapi ceva din vedere. O interogare este ca un asistent care rasfoieste el toate dosarele, din unul sau din amandoua dulapurile, in cateva secunde, dupa o regula pe care i-o dai tu (o data, un stoc, o forma farmaceutica), si iti aduce doar dosarele care se potrivesc — fara sa mute sau sa modifice nimic din dulap.

Subiectul lectiei de azi raspunde exact la aceasta intrebare!

1

De la tabel la raspuns — ce e o interogare

Un tabel pastreaza toate datele, fara nicio selectie: fiecare produs sau fiecare livrare primeste un rand. O interogare (Query) este o intrebare pusa tabelului (sau mai multor tabele legate) — de exemplu "care produse au stocul sub minim?" — care returneaza doar randurile si coloanele care raspund la intrebare, fara sa modifice, sa stearga sau sa mute vreo data din tabelele originale. Poti rula aceeasi interogare oricand, si rezultatul se actualizeaza automat cu datele curente.
Reamintim structura celor doua tabele legate (din lectiile anterioare):

Produse — un rand pentru fiecare produs din nomenclator: cod_produs (cheia primara), denumire_produs, forma_farmaceutica (ex: comprimate, sirop, unguent, solutie), unitate_masura, pret_amanuntul, stoc_minim.

Intrari — un rand pentru fiecare livrare: id_intrare (cheia primara), numar_factura, data_intrare, cod_produs (leaga randul de Produse), cod_furnizor (leaga randul de Furnizori), lot, data_expirare, cantitate, pret_achizitie.

Observatie importanta: tabelul Produse NU are un camp gata scris cu stocul curent, si nici cu data de expirare — acelea tin de fiecare livrare in parte si stau in Intrari (acelasi produs poate avea mai multe loturi, cu date de expirare diferite). De aceea, cand o interogare de gestiune are nevoie si de denumirea produsului (din Produse), si de lot sau data de expirare (din Intrari), trebuie sa adaugi AMBELE tabele in interogare — Access le leaga automat prin cod_produs, relatia definita inca de la lectia 1.

Cum deschizi o interogare noua in Access, si ce vezi:

Din ribbon, fila Create (Creare) → grupul Queries → Query Design (Proiectare interogare). In fereastra de alegere a surselor adaugi tabelul de care ai nevoie — de exemplu Produse, sau Produse si Intrari deodata, daca ai nevoie de campuri din amandoua. Te afli acum in Design View: fereastra de proiectare, cu lista campurilor disponibile pentru fiecare tabel adaugat (Field List) in partea de sus, si grila de proiectare (Query By Example, prescurtat QBE) in partea de jos. Grila are randuri cu rol fix: Field — numele campului afisat pe acea coloana; Table — din ce tabel vine; Sort — daca si cum se sorteaza; Show — daca acea coloana apare in rezultat; Criteria — conditia pe care trebuie sa o indeplineasca randul; or (si randurile de sub el) — conditii alternative, combinate cu SAU fata de randul Criteria. Dubla-clic pe un camp din Field List il adauga pe o coloana noua in grila. Rulezi interogarea cu butonul Run (semnul "!" rosu) din ribbon — rezultatul apare in Datasheet View, ca un tabel obisnuit, dar filtrat sau calculat dupa ce ai cerut tu.

2

Loturi expirate sau aproape expirate

Access are o functie predefinita, Date(), care returneaza data curenta a calculatorului la momentul rularii. O poti folosi direct in criteriul unei coloane de tip data, in grila de proiectare a interogarii (randul Criteria, sub coloana data_expirare din tabelul Intrari).
Doua criterii, doua interogari separate:

Loturi deja expirate — sub coloana data_expirare, in randul Criteria, scrii: <Date() — inseamna "orice data mai mica (mai veche) decat astazi".

Loturi aproape expirate (in urmatoarele 30 de zile) — sub coloana data_expirare scrii: Between Date() And Date()+30 — inseamna "orice data cuprinsa intre astazi si astazi plus 30 de zile", inclusiv capetele intervalului.

Exemplu numeric complet — presupunem ca astazi este 10 martie 2026:

Atunci Date() = 10.03.2026, iar Date()+30 = 09.04.2026. Patru loturi din tabelul Intrari:

Lot A, data_expirare 01.02.2026 → mai veche decat 10.03.2026 → apare la "deja expirate" (<Date()).
Lot B, data_expirare 25.03.2026 → cade intre 10.03.2026 si 09.04.2026 → apare la "aproape expirate".
Lot C, data_expirare 15.04.2026 → depaseste 09.04.2026 → nu apare in niciuna dintre cele doua interogari, e inca prea departe.
Lot D, data_expirare 09.03.2026 → cu o zi inainte de 10.03.2026 → apare la "deja expirate".

Pasii in Access:

Create → Query Design → adaugi tabelele Produse si Intrari (ca sa ai si denumirea produsului, nu doar codul lui) → adaugi coloanele denumire_produs, lot, data_expirare → sub data_expirare, in Criteria, scrii criteriul dorit → Run. Poti salva interogarea cu Ctrl+S si un nume clar, de exemplu InterogareExpirate, ca sa o rulezi din nou oricand fara sa o construiesti de la zero.

3

Stoc sub minim — o interogare peste alta interogare

Tabelul Produse are un camp stoc_minim (cat ar trebui sa fie minimum), dar NU are un camp gata scris cu stocul curent — cantitatea aflata acum in farmacie se obtine insumand cantitatile din toate liniile din Intrari pentru acel produs (asa cum ai vazut si la lectia 2, la eroarea de dublare a intrarilor). Ca sa compari "cat mai e" cu "cat ar trebui sa fie minimum", trebuie mai intai sa calculezi stocul curent, printr-o interogare de totalizare, si abia apoi sa il compari cu stoc_minim, intr-o a doua interogare construita peste rezultatul primei.
Interogarea 1 — StocPeProdus (totalizare pe Intrari):

Create → Query Design → adaugi tabelul Intrari → adaugi coloana cod_produs → adaugi coloana cantitate → in ribbon, grupul Show/Hide → butonul Totals (simbolul Σ) — apare randul nou Total in grila → sub cod_produs, in Total, ramane Group By; sub cantitate, schimbi din Group By in Sum, si redenumesti coloana in randul Field: StocCurent: cantitate → Run. Salvezi interogarea cu numele StocPeProdus.

Interogarea 2 — ProduseSubMinim (peste interogarea 1):

Create → Query Design → in fereastra de alegere a surselor, fila Queries: adaugi StocPeProdus; fila Tables: adaugi si Produse — Access le leaga automat prin cod_produs, campul comun → adaugi coloanele denumire_produs si stoc_minim (din Produse) si StocCurent (din StocPeProdus) → sub StocCurent, in Criteria, scrii: <[stoc_minim] → Run. Parantezele drepte [ ] spun Access-ului ca stoc_minim este numele unui alt camp din interogare, comparat rand cu rand, nu un text oarecare.

Exemplu numeric complet:

Produs, StocCurent, stoc_minim, rezultat:
Paracetamol 500mg (comprimate) — StocCurent 12, stoc_minim 20 → 12<20 → apare (trebuie comandat)
Fastum gel (unguent) — StocCurent 300, stoc_minim 100 → 300<100 este fals → nu apare
Ser fiziologic (solutie) — StocCurent 8, stoc_minim 15 → 8<15 → apare (trebuie comandat)
Augmentin (sirop) — StocCurent 25, stoc_minim 25 → 25<25 este fals (sunt egale) → nu apare

4

Valoarea stocului pe forma farmaceutica — interogare de totalizare

Pentru raportul de gestiune ai nevoie nu de fiecare produs in parte, ci de un total pe fiecare forma farmaceutica (comprimate, sirop, unguent, solutie). Folosesti tot o interogare de totalizare, de data asta pornind de la StocPeProdus (interogarea salvata la atomul anterior), legata cu Produse, ca sa ai la un loc StocCurent, pret_amanuntul si forma_farmaceutica.
Pasii in Access:

1. Create → Query Design → fila Queries: adaugi StocPeProdus; fila Tables: adaugi si Produse (se leaga automat prin cod_produs).
2. Adaugi coloana forma_farmaceutica (din Produse).
3. Intr-o coloana noua, in randul Field, scrii un camp calculat: ValoareStoc: [pret_amanuntul]*[StocCurent] — numele dinaintea celor doua puncte (ValoareStoc) devine titlul coloanei in rezultat, iar formula de dupa calculeaza pretul de vanzare inmultit cu stocul curent, pentru fiecare produs.
4. In ribbon, grupul Show/Hide → butonul Totals (simbolul Σ) — apare randul nou Total in grila.
5. Sub coloana forma_farmaceutica, in randul Total, lasi Group By (grupeaza dupa aceasta forma farmaceutica).
6. Sub coloana ValoareStoc, in randul Total, schimbi din Group By in Sum (aduna valorile din fiecare grup).
7. Run. Salvezi interogarea, de exemplu ca ValoareStocPeForma.

Exemplu numeric complet, dus pana la rezultat:

Forma farmaceutica comprimate: Produs 1 (pret_amanuntul 3,20 lei, StocCurent 150 buc) → 3,20 × 150 = 480,00 lei; Produs 2 (pret_amanuntul 5,00 lei, StocCurent 80 buc) → 5,00 × 80 = 400,00 lei. Total forma farmaceutica = 480,00 + 400,00 = 880,00 lei.

Forma farmaceutica unguent: Produs 3 (pret_amanuntul 12,50 lei, StocCurent 40 buc) → 12,50 × 40 = 500,00 lei (singurul produs din grupa, deci totalul e chiar aceasta valoare).

Interogarea de totalizare va afisa exact doua randuri: comprimate — 880,00 lei si unguent — 500,00 lei, indiferent cate produse individuale sunt in spatele fiecarei sume.

5

De la interogare la raport tiparibil

O interogare arata rezultatul pe ecran, ca un tabel simplu — util pentru lucru, dar nu arata bine pe hartie. Un raport (Report) preia datele dintr-o interogare si le aseaza intr-un format gata de tiparit: titlu, aliniere clara, data generarii, numar de pagina.
Pasii pentru a construi raportul de gestiune:

1. In ribbon, fila Create → grupul Reports → Report Wizard.
2. La "Tables/Queries" alegi interogarea ValoareStocPeForma, construita la atomul anterior — ea are deja exact un rand pentru fiecare forma farmaceutica, cu totalul calculat.
3. Muti in coloana "Selected Fields" campurile forma_farmaceutica si ValoareStoc, apoi Next.
4. La pasul de grupare (grouping levels) NU adaugi niciun nivel — datele sunt deja un singur rand pe forma farmaceutica, un nivel de grupare suplimentar nu ar face nimic util aici — apesi direct Next.
5. La pasul de sortare, alegi sortare descrescatoare dupa ValoareStoc — de data asta sortarea chiar schimba ordinea randurilor din raport (nu exista niciun grup deasupra care sa o anuleze), asa ca cea mai valoroasa forma farmaceutica apare prima.
6. La pasul de layout apar toate cele trei optiuni (Columnar, Tabular, Justified), pentru ca nu ai adaugat niciun nivel de grupare — alegi Tabular (cel mai potrivit pentru un tabel de gestiune), apoi Finish.
7. Raportul se deschide in Print Preview — verifici cum arata, apoi tiparesti cu butonul Print, sau exporti ca PDF cu butonul PDF or XPS din grupul Data al filei Print Preview (sau din External Data → Export → PDF or XPS). Fila File → Print nu ofera export PDF, doar Print, Quick Print si Print Preview.

De ce nu tiparesti direct interogarea:

O interogare tiparita direct din Datasheet View arata ca un tabel brut, fara titlu clar si fara aliniere ingrijita pe pagina — greu de citit si de semnat. Raportul rezolva exact aceasta problema, fara sa recalculezi nimic: foloseste automat datele curente din interogare la fiecare deschidere.

6

Greseala tipica — numele de camp scris gresit

Cea mai frecventa greseala la interogarile din atomii 3 si 4 este un nume de camp scris gresit in paranteze drepte sau in formula unui camp calculat.
Cum se recunoaste:

Daca scrii din greseala <[stoc_min] in loc de <[stoc_minim] in interogarea ProduseSubMinim, interogarea nu da o eroare la salvare — Access nu stie inca daca greseai sau chiar voiai un parametru introdus manual. Abia cand apesi Run, apare o fereastra "Enter Parameter Value" care iti cere sa tastezi tu o valoare pentru "stoc_min". Aceasta fereastra este semnul sigur ca ai un nume de camp gresit scris — Access nu a gasit un camp cu acel nume exact, asa ca a presupus ca e ceva ce vrei sa completezi manual.

Cum se repara:

Apesi Cancel pe fereastra de parametru (altfel interogarea ruleaza gresit, cu valoarea pe care ai introdus-o manual). Te intorci in Design View, verifici litera cu litera numele campului din criteriu sau din formula, si il compari cu numele exact al coloanei din Field List, panoul din partea de sus a ferestrei de proiectare (aici, campurile venite din Produse sau din StocPeProdus). Corectezi ortografia si rulezi din nou.

Aceeasi capcana la campul calculat din atomul 4:

Daca la ValoareStoc: [pret_amanuntul]*[StocCurent] scrii gresit [pret_amanuntul] ca [pret_amanunutul], se intampla exact acelasi lucru — o fereastra de parametru la rulare, in loc de calculul asteptat. Verificarea e identica: recitesti cu atentie numele exacte ale campurilor.

7

Recapitulare — de la date brute la raport de gestiune

Aceasta a fost ultima lectie a modulului C3: ai pornit de la structura tabelelor (lectia 1), ai invatat cum se incarca si valideaza datele (lectia 2), iar acum stii sa scoti din ele exact informatia ceruta de gestiune.
Uneltele invatate azi:

Interogare simpla cu criteriu pe data<Date() pentru expirate, Between Date() And Date()+30 pentru aproape expirate, pe coloana data_expirare din Intrari.
Interogare de totalizare pe un singur tabel — StocPeProdus: Group By pe cod_produs, Sum pe cantitate, redenumit StocCurent.
Interogare construita peste o interogare salvata — ProduseSubMinim: StocPeProdus si Produse, legate prin cod_produs, criteriu <[stoc_minim] sub StocCurent.
Interogare de totalizare pe doua surse legate, cu camp calculat — ValoareStocPeForma: Group By pe forma_farmaceutica, Sum pe ValoareStoc: [pret_amanuntul]*[StocCurent].
Raport tiparibil — Report Wizard pornind de la o interogare deja agregata, cu sortare si layout Tabular.

De retinut pentru activitatile practice:

Interogarea NU modifica niciodata tabelele originale — poti rula si re-rula in siguranta.
Parantezele drepte [NumeCamp] leaga o expresie de un camp real dintr-o interogare sau tabel, chiar daca vine dintr-o sursa diferita de cea totalizata.
Un camp calculat se scrie NumeNou: formula, cu doua puncte dupa numele nou.
O interogare salvata poate deveni sursa altei interogari — util cand ai nevoie sa totalizezi intai, si sa compari sau sa grupezi abia dupa.
Fereastra "Enter Parameter Value" la rulare = aproape sigur un nume de camp scris gresit.
Query = date pe ecran, pentru lucru; Report = document formatat, pentru tiparit si atasat la dosar.

Exercitii practice

Exercitiul 1 (Nivel minim) — Expirate sau aproape expirate?

Presupune ca astazi este 1 iunie 2026. Ai patru loturi in tabelul Intrari: Lot A — data_expirare 15 mai 2026; Lot B — data_expirare 20 iunie 2026; Lot C — data_expirare 10 iulie 2026; Lot D — data_expirare 25 iunie 2026. Pentru fiecare lot, precizeaza: (a) daca apare in interogarea cu criteriul <Date() (deja expirate), (b) daca apare in interogarea cu criteriul Between Date() And Date()+30 (aproape expirate). Scrie si cele doua criterii, exact cum le-ai introduce in randul Criteria din Access.

Vezi rezolvarea

Date() = 01.06.2026 (azi), iar Date()+30 = 01.07.2026.

  1. Lot A (15.05.2026): apare la <Date() (mai veche decat 01.06.2026) - DA la (a). NU apare la (b), nu e in intervalul 01.06-01.07.
  2. Lot B (20.06.2026): NU la (a). DA la (b) - 20.06 e intre 01.06 si 01.07.
  3. Lot C (10.07.2026): NU la niciuna - e dupa 01.07.2026, in afara intervalului.
  4. Lot D (25.06.2026): NU la (a). DA la (b) - 25.06 e intre 01.06 si 01.07.

Criteriile exacte, pe coloana data_expirare, randul Criteria: expirate = <Date(); aproape expirate = Between Date() And Date()+30.

Exercitiul 2 (Nivel standard) — Stoc sub minim si valoare pe forma farmaceutica

Ai urmatoarele sase produse in tabelul Produse. Considera ca StocCurent de mai jos a fost deja obtinut dintr-o interogare StocPeProdus rulata anterior (nu mai reface acel pas aici):

1. Ibuprofen 400mg — forma_farmaceutica "comprimate", pret_amanuntul 4 lei, StocCurent 30, stoc_minim 40
2. Paracetamol 500mg — forma_farmaceutica "comprimate", pret_amanuntul 2 lei, StocCurent 90, stoc_minim 50
3. Sirop de tuse Tussin — forma_farmaceutica "sirop", pret_amanuntul 20 lei, StocCurent 15, stoc_minim 20
4. Augmentin ES sirop — forma_farmaceutica "sirop", pret_amanuntul 18 lei, StocCurent 25, stoc_minim 10
5. Fastum gel — forma_farmaceutica "unguent", pret_amanuntul 12 lei, StocCurent 40, stoc_minim 15
6. Diclofenac unguent — forma_farmaceutica "unguent", pret_amanuntul 6 lei, StocCurent 5, stoc_minim 20

Cerinte: (a) Care produse ar aparea intr-o interogare de tip ProduseSubMinim, cu criteriul <[stoc_minim] pe coloana StocCurent? Numeste-le. (b) Calculeaza manual, ca la interogarea ValoareStocPeForma (Group By pe forma_farmaceutica, Sum pe pret_amanuntul×StocCurent), valoarea stocului pentru fiecare din cele trei forme farmaceutice. (c) Scrie formula exacta a campului calculat, asa cum ar aparea in randul Field din Access.

Vezi rezolvarea

(a) Produse sub minim (StocCurent < stoc_minim): Ibuprofen 400mg (30<40), Sirop de tuse Tussin (15<20), Diclofenac unguent (5<20). Celelalte trei au StocCurent peste stoc_minim.

(b) Valoare stoc pe forma farmaceutica (Sum din pret_amanuntul x StocCurent):

  1. comprimate: 4x30 + 2x90 = 120 + 180 = 300 lei
  2. sirop: 20x15 + 18x25 = 300 + 450 = 750 lei
  3. unguent: 12x40 + 6x5 = 480 + 30 = 510 lei

(c) Formula campului calculat, in randul Field: ValoareStoc: [pret_amanuntul]*[StocCurent]

Exercitiul 3 (Nivel performanta) — Combinarea alertelor de expirare cu SAU

Seful de farmacie vrea o singura interogare care sa adune, la un loc, TOATE loturile care au nevoie de atentie din motive de expirare: cele deja expirate SAU cele aproape expirate (in 30 de zile) — indiferent de motiv. Foloseste tabelul Intrari, coloana data_expirare. In grila de proiectare (QBE) din Access, conditiile scrise pe aceeasi linie Criteria se combina cu SI (trebuie indeplinite toate deodata); conditiile scrise pe linii diferite (Criteria si randul de dedesubt, "or") se combina cu SAU (e suficient sa fie indeplinita una singura).

Cerinte: (a) Descrie exact ce scrii, pe ce coloana si pe ce rand (Criteria sau "or"), ca sa obtii aceasta interogare combinata cu SAU intre cele doua conditii de expirare. (b) Foloseste cele patru loturi din Exercitiul 1 (presupunand tot data de 1 iunie 2026) si precizeaza care loturi ar aparea in acest rezultat combinat. (c) Sefa de farmacie ar vrea sa adaugi, ca a treia conditie legata prin SAU in aceeasi interogare, si "stoc sub minim", ca sa aiba o singura lista cu toate alertele. Explica in doua-trei propozitii de ce acest lucru NU e posibil in aceeasi interogare simpla — interogarea de la (a) porneste de la Intrari, cu un rand pe fiecare lot, in timp ce stocul sub minim vine din ProduseSubMinim, o interogare cu un rand pe fiecare produs — si care e solutia practica folosita in farmacie (doua liste separate, in loc de una singura).

Vezi rezolvarea

Schita de rezolvare (nu solutia gata facuta - construieste-o singur in Access):

  1. (a) Pe coloana data_expirare din Intrari, randul Criteria: scrii <Date(). Pe randul de dedesubt, "or": scrii Between Date() And Date()+30. Doua randuri diferite = conditiile se combina cu SAU.
  2. (b) Cu datele din Exercitiul 1 (1 iunie 2026): apar Lot A (expirat) si Lot B, Lot D (aproape expirate). Verifica singur de ce Lot C nu apare.
  3. (c) Nu e posibil in aceeasi interogare simpla: (a) porneste de la Intrari, cu un rand pe fiecare LOT; stocul sub minim vine din ProduseSubMinim, cu un rand pe fiecare PRODUS (obtinut prin totalizare pe Intrari + Produse). Adaugarea directa ca a treia conditie SAU ar strica granularitatea randurilor.

Atentie: unirea reala a doua interogari cu granularitati diferite se face cu o interogare UNION (SQL) - nu a fost predata in lectie; recunoaste limita, nu incerca sa o scrii.

Criterii de evaluare: rand+coloana corecte pentru SAU, identificarea corecta A/B/D, explicatia clara a diferentei de granularitate, mentionarea solutiei practice (UNION sau doua liste separate).

Ce ai invatat astazi

  • Interogarea (Query) filtreaza sau calculeaza date fara sa modifice tabelele originale
  • Functia Date() da data curenta; <Date() = expirate, Between Date() And Date()+30 = aproape expirate, pe coloana data_expirare din Intrari
  • O interogare de totalizare (Group By + Sum) poate porni de la un singur tabel (StocPeProdus, pe Intrari) sau poate combina o interogare salvata cu un tabel (ValoareStocPeForma, StocPeProdus + Produse)
  • Parantezele drepte [NumeCamp] compara doua coloane intre ele, chiar daca vin din surse diferite (ex. <[stoc_minim])
  • Raportul (Report), construit cu Report Wizard dintr-o interogare deja agregata, e obiectul potrivit pentru un document tiparibil; exportul PDF se face din Print Preview cu butonul PDF or XPS, nu din fila File → Print
  • Fereastra "Enter Parameter Value" la rularea unei interogari inseamna aproape sigur un nume de camp scris gresit
  • Pe linii diferite din grila QBE, conditiile se combina cu SAU; pe aceeasi linie, cu SI

Vrei mai mult?

Provocare: Proiecteaza pe hartie, in stilul grilei Field/Table/Total/Criteria din lectie, o interogare noua, ValoarePeFurnizor: pentru fiecare cod_furnizor din Intrari, aduna cantitate ori pret_achizitie pe toate livrarile lui. Ce coloane pui, ce pui pe Group By, ce pui pe Sum si cum redenumesti coloana calculata?

De gandit: StocPeProdus aduna toate cantitatile din Intrari - deci presupune ca tot ce a intrat inca sta pe raft. Daca farmacia incepe sa vanda produse si sa scada din stoc, o interogare care doar aduna intrarile nu mai arata stocul real. Ce lipseste din baza de date, un tabel nou sau un camp nou, ca sa poti calcula stocul real, dupa vanzari?

Deschidere: Interogarile de tip StocPeProdus si ValoareStocPeForma stau la baza oricarui raport de gestiune dintr-o farmacie reala: decizia zilnica ce se comanda azi si controlul periodic de stoc pornesc exact din astfel de totalizari, nu din rasfoirea manuala a tabelelor.

Ai finalizat modulul C3

Aceasta a fost ultima lectie din C3. Administrarea unei Baze de Date. Ai parcurs structura tabelelor, incarcarea si validarea datelor, iar acum si exploatarea lor prin interogari si rapoarte de gestiune. Revino la pagina modulului pentru recapitulare sau pentru a continua cu urmatoarea competenta.

Inapoi la modul →