Invatare Atomica

Exploatarea bazei de date

Interogari, sortare, filtrare si raport tiparibil pentru sefa de sectie

Progres lectie:
0%
🎯

Obiectivul lectiei

O baza de date cu sute de pacienti si materiale sanitare nu-i este de folos sefei de sectie daca trebuie rasfoita rand cu rand. Ea are nevoie de raspunsuri rapide: cati pacienti sunt intr-un anumit interval de varsta, ce materiale se apropie de termenul de valabilitate, o lista sortata pentru vizita de dimineata. In aceasta lectie inveti sa pui bazei de date exact aceste intrebari — prin interogari cu criterii, prin sortare si filtrare — si sa transformi rezultatul intr-un raport de sectie gata de tiparit. Este ultima lectie din modulul C3: leaga structura tabelelor si incarcarea datelor de scopul lor real, informatia de care are nevoie sectia in fiecare zi.

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 pacientii dintr-un interval de varsta, folosind Between si functia DateAdd pe coloana Data_Nasterii
  • Sa construiesti o interogare care gaseste materialele sanitare deja expirate sau aproape de expirare, folosind functia Date()
  • Sa combini doua criterii in aceeasi interogare, cu SI (aceeasi linie) sau cu SAU (linii diferite)
  • Sa sortezi si sa filtrezi datele dintr-un tabel sau interogare, fara sa construiesti o interogare noua de fiecare data
  • Sa transformi o interogare intr-un raport (Report) formatat, gata de tiparit pentru sefa de sectie
  • Sa recunosti si sa corectezi cea mai frecventa greseala la scrierea unui criteriu de interval
  • Sa aplici o regula simpla de protectie a datelor pacientului atunci cand construiesti un raport

Incearca singur!

Provocare — inainte sa citesti:

E dimineata devreme. Sefa de sectie iti cere trei lucruri, pana la vizita de la ora 9: lista pacientilor cu varsta intre 18 si 30 de ani internati acum in Salonul 4, lista materialelor sanitare al caror termen de valabilitate expira in urmatoarele 15 zile (trebuie comandate din timp), si o lista a tuturor pacientilor din Salonul 4, sortata alfabetic, pentru foaia de vizita. Ai un tabel Pacienti cu 60 de randuri si un tabel Stoc_Materiale cu 200 de randuri, in Access. 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 un dulap cu 60 de fise de pacienti: cautarea manuala, fisa cu fisa, dureaza si e usor sa scapi ceva din vedere. O interogare este ca o colega care rasfoieste ea toate fisele in cateva secunde, dupa o regula pe care i-o dai tu (o data, un salon), si iti aduce doar fisele care se potrivesc — fara sa mute sau sa modifice nimic in dulap. Iar sortarea nu cauta nimic, doar reaseaza fisele in alta ordine, pe toate deodata.

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 pacient internat sau fiecare material sanitar primit are un rand. O interogare (Query) este o intrebare pusa tabelului — de exemplu "care pacienti sunt internati in Salonul 4?" — care returneaza doar randurile si coloanele care raspund la intrebare, fara sa modifice, sa stearga sau sa mute vreo data din tabelul original. Poti rula aceeasi interogare oricand, si rezultatul se actualizeaza automat cu datele curente din tabel.
Reamintim structura tabelelor (din lectiile anterioare):

Tabelul Pacienti — ID_Pacient (cheia primara, AutoNumber), Nume, Prenume, Data_Nasterii, Data_Internare, Salon (ex. "Salon 1", "Salon 2", "Salon 4").

Tabelul Stoc_Materiale — ID_Inregistrare (cheia primara, AutoNumber), Denumire_Material (ex. Manusi latex M, Comprese sterile, Seringi 5ml), Cantitate, UM, Data_Receptie, Data_Expirare. Fiecare inregistrare este un lot primit la o data anume, de aceea acelasi material poate aparea pe mai multe randuri.

Cum deschizi o interogare noua in Access:

Din ribbon, fila Create (Creare) → grupul Queries → Query Design (Proiectare interogare). In fereastra "Show Table" alegi tabelul (Pacienti sau Stoc_Materiale, dupa caz) si dai Add, apoi Close. In grila de jos, dubla-clic pe fiecare camp pe care vrei sa-l vezi in rezultat, ca sa apara pe o coloana. Rulezi interogarea cu butonul Run (semnul "!" rosu) din ribbon — rezultatul apare in Datasheet View, ca un tabel obisnuit, dar filtrat.

Protectia datelor pacientului — de la aceasta lectie inainte:

Orice interogare sau raport care va circula in afara dosarului medical (de exemplu la sefa de sectie, la administratie sau la un audit) trebuie sa contina doar campurile necesare scopului respectiv. Daca sefa de sectie are nevoie doar de numarul de pacienti pe interval de varsta, foloseste ID_Pacient in loc de Nume si Prenume ori de cate ori identificarea individuala nu e ceruta explicit.

2

Pacientii dintr-un interval de varsta — Between si DateAdd

Tabelul Pacienti nu are un camp Varsta — Access retine doar Data_Nasterii (camp Date/Time). Ca sa gasesti pacientii dintr-un interval de varsta, compari Data_Nasterii cu doua date calculate fata de ziua curenta, folosind functia DateAdd, in interiorul operatorului Between valoare1 And valoare2, scris in randul Criteria din grila de proiectare a interogarii. Intervalul este inchis: include si valoarea1, si valoarea2, nu doar ce e strict intre ele.
Functia DateAdd — o data cu N ani in urma:

DateAdd("yyyy", -N, Date()) intoarce data de azi, deplasata cu N ani in urma. Daca azi este 1 iunie 2026, DateAdd("yyyy",-18,Date()) = 1 iunie 2008 — exact data la care s-ar fi nascut cineva care implineste azi 18 ani. La fel, DateAdd("yyyy",-30,Date()) = 1 iunie 1996 — data la care s-ar fi nascut cineva care implineste azi 30 de ani.

Criteriul complet:

Sub coloana Data_Nasterii, in randul Criteria, scrii: Between DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()) — Access citeste asta ca "arata randul doar daca data nasterii cade intre acum-30-de-ani si acum-18-ani", adica varsta actuala e intre 18 si 30 de ani. Data cea mai veche (acum-30-ani) se scrie prima, dupa Between, iar data mai recenta (acum-18-ani) a doua, dupa And — la fel ca la orice alt interval, valoarea mica se scrie prima.

Exemplu numeric complet, dus pana la rezultat:

Presupunem ca astazi este 1 iunie 2026, deci DateAdd("yyyy",-30,Date()) = 01.06.1996 si DateAdd("yyyy",-18,Date()) = 01.06.2008. Cinci pacienti din tabel, cu criteriul Between 01.06.1996 And 01.06.2008 pe coloana Data_Nasterii:

Pacient A, Data_Nasterii 20.03.2010 → dupa 01.06.2008, mai tanar de 18 ani → nu apare
Pacient B, Data_Nasterii 01.06.2008 → exact capatul de jos al intervalului, implineste exact 18 ani azi → apare
Pacient C, Data_Nasterii 14.09.2000 → in interior → apare
Pacient D, Data_Nasterii 01.06.1996 → exact capatul de sus al intervalului, implineste exact 30 de ani azi → apare
Pacient E, Data_Nasterii 05.01.1990 → inainte de 01.06.1996, peste 30 de ani → nu apare

Rezultatul interogarii va afisa exact trei pacienti: B, C si D.

Pasii in Access:

Create → Query Design → adaugi tabelul Pacienti → adaugi coloanele ID_Pacient, Nume, Prenume, Data_Nasterii, Salon → sub Data_Nasterii, in Criteria, scrii Between DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()) → in randul Sort de sub Nume, alegi Ascending → Run. Salvezi interogarea cu Ctrl+S si un nume clar, de exemplu InterogarePacientiVarsta18_30, ca sa o rulezi din nou oricand fara sa o construiesti de la zero — inclusiv la atomul 5, cand o transformi intr-un raport.

3

Materiale cu termen apropiat — functia Date()

Access are o functie predefinita, Date(), care returneaza data curenta a calculatorului la momentul rularii interogarii. O poti folosi direct in criteriul unei coloane de tip data, in randul Criteria, comparata cu coloana Data_Expirare. Aici nu mai e nevoie de DateAdd ca la atomul anterior — lucram direct cu o data calendaristica reala (termenul de expirare), nu calculam o varsta pornind de la o data de nastere.
Doua criterii, doua interogari separate:

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

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

Exemplu numeric complet — presupunem ca astazi este 5 septembrie 2026:

Atunci Date() = 05.09.2026, iar Date()+15 = 20.09.2026. Patru materiale din tabelul Stoc_Materiale:

Material A, Data_Expirare 01.09.2026 → mai veche decat 05.09.2026 → apare la "deja expirate" (<Date()).
Material B, Data_Expirare 12.09.2026 → cade intre 05.09.2026 si 20.09.2026 → apare la "aproape expirate".
Material C, Data_Expirare 20.09.2026 → exact capatul de sus al ferestrei → apare la "aproape expirate" (intervalul include si capatul).
Material D, Data_Expirare 25.09.2026 → depaseste 20.09.2026 → nu apare in niciuna dintre cele doua interogari, e inca prea departe.

Pasii in Access:

Create → Query Design → adaugi tabelul Stoc_Materiale → adaugi coloanele ID_Inregistrare, Denumire_Material, Data_Receptie, Data_Expirare, Cantitate → sub Data_Expirare, in Criteria, scrii criteriul dorit → Run. Aceasta lista se trimite mai departe pentru comanda de aprovizionare, inainte ca stocul sa se termine efectiv.

Combinarea a doua criterii in aceeasi interogare:

Poti pune mai mult de un criteriu intr-o interogare. Regula grilei QBE (Query By Example) este simpla: doua criterii scrise pe aceeasi linie Criteria trebuie indeplinite amandoua deodata (SI); doua criterii scrise pe linii diferite (Criteria si "or") sunt suficiente daca e indeplinit macar unul (SAU). De exemplu, ca sa obtii doar pacientii din Salonul 4 CU varsta de cel putin 18 ani: sub coloana Salon scrii, pe randul Criteria, "Salon 4"; sub coloana Data_Nasterii, pe acelasi rand, scrii <=DateAdd("yyyy",-18,Date()). Fiindca ambele criterii sunt pe acelasi rand, Access le combina cu SI: arata doar randurile care indeplinesc ambele conditii deodata. Scrise pe randuri diferite, ai fi obtinut toti pacientii din Salonul 4 SAU toti cei cu cel putin 18 ani — mult mai multi pacienti decat cei doriti, inclusiv copii din alte saloane.

4

Sortare si filtrare — raspunsuri rapide, fara o interogare noua

Nu orice intrebare merita o interogare noua. Pentru cerinte rapide si temporare, Access ofera direct in Datasheet View (fereastra cu rezultatul, sub forma de tabel) doua unelte: sortarea, care reordoneaza toate randurile dupa o coloana, fara sa ascunda vreunul, si filtrarea, care ascunde temporar randurile ce nu se potrivesc unui criteriu, fara sa le stearga si fara sa modifice tabelul.
Sortare — pentru foaia de vizita, alfabetic dupa nume:

Clic-dreapta pe capul coloanei NumeSort A to Z (crescator) sau Sort Z to A (descrescator). Fiindca Nume si Prenume sunt campuri separate, sortarea dupa Nume ordoneaza corect dupa numele de familie — nu dupa prenume, cum s-ar intampla daca ai avea un singur camp cu numele intreg. Toti pacientii raman in lista, doar ordinea randurilor se schimba; nimeni nu dispare din rezultat.

Filtrare rapida — doar Salonul 4:

Metoda 1 — sageata din capul coloanei: clic pe sageata mica din dreapta capului coloanei Salon → debifezi "(Select All)" → bifezi doar Salon 4 → OK. Ramane vizibil doar ce ai bifat.

Metoda 2 — Filter by Selection: dai clic intr-o celula care contine deja "Salon 4" → fila Home → grupul Sort & Filter → butonul SelectionEquals "Salon 4". Ambele metode filtreaza fara sa construiesti o interogare noua.

Cum revii la lista completa:

Butonul Toggle Filter din fila Home, grupul Sort & Filter, comuta intre "filtrat" si "tot tabelul". Randurile ascunse nu sunt sterse — Toggle Filter le aduce inapoi instant.

Diferenta esentiala fata de interogare:

Sortarea si filtrarea din Datasheet View sunt temporare, legate de fereastra deschisa acum — utile pentru o privire rapida. O interogare salvata (ca la atomii 2 si 3) este permanenta si o poti rula oricand, de la orice calculator care are baza de date deschisa, fara sa refaci pasii de sortare sau filtrare.

5

De la interogare la raport tiparibil pentru sefa de sectie

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, grupare vizuala clara, data generarii, numar de pagina.
Pasii pentru a construi raportul de sectie:

1. In ribbon, fila Create → grupul Reports → Report Wizard.
2. La "Tables/Queries" alegi interogarea InterogarePacientiVarsta18_30, construita si salvata deja la atomul 2.
3. Muti in coloana "Selected Fields" campurile ID_Pacient, Nume, Prenume, Data_Nasterii, Salon, apoi Next.
4. Wizard-ul intreaba daca vrei sa adaugi niveluri de grupare (Grouping) — pentru o lista simpla de pacienti nu ai nevoie de nicio grupare, asa ca treci mai departe cu Next fara sa adaugi vreuna.
5. La pasul de sortare, alegi sortare crescatoare dupa Nume (interogarea era deja sortata asa, dar poti confirma din nou aici) → Next.
6. La pasul de layout, cu zero niveluri de grupare, optiunile disponibile sunt Columnar / Tabular / Justified — alegi Tabular (cel mai potrivit pentru o lista de pacienti) → Next.
7. Dai raportului un titlu clar, de exemplu "Pacienti 18-30 ani", apoi Finish.
8. Raportul se deschide in Print Preview. Pentru export PDF, din fila Print Preview, grupul Data, apesi butonul "PDF or XPS"; pentru tiparire directa, butonul Print din aceeasi fila.

De ce nu tiparesti direct interogarea:

O interogare tiparita direct din Datasheet View arata ca un tabel brut, fara titlu clar si fara grupare vizuala 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.

Protectia datelor la tiparire:

Include in raport doar campurile necesare scopului lui — o lista pentru foaia de vizita nu are nevoie de date suplimentare fata de identificare, salon si data nasterii. Odata tiparit, raportul devine hartie: ramai raspunzator sa il pastrezi in dosarul de sectie si sa nu il lasi la indemana persoanelor neautorizate.

6

Greseala tipica — ordinea inversata la Between

Cea mai frecventa greseala la criteriile de tip interval din atomii 2 si 3 este scrierea celor doua valori in ordine inversa: valoarea mare prima, cea mica a doua.
Cum se recunoaste:

Daca scrii din greseala Between DateAdd("yyyy",-18,Date()) And DateAdd("yyyy",-30,Date()) in loc de Between DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()), Access nu semnaleaza nicio eroare — nici la salvare, nici la rulare. Interogarea ruleaza normal, dar rezultatul este mereu gol (0 randuri), chiar daca stii sigur ca exista pacienti cu varsta in acel interval. Absenta oricarui mesaj de eroare, combinata cu un rezultat gol pe care nu-l astepti, este semnul sigur al acestei greseli.

Cum se repara:

Te intorci in Design View, verifici ordinea celor doua capete din criteriul Between si le pui in ordine crescatoare a datelor calendaristice — data cea mai veche (acum-30-de-ani) imediat dupa Between, data mai recenta (acum-18-ani) imediat dupa And. Rulezi din nou; daca datele exista, rezultatul apare.

Aceeasi capcana la datele calendaristice:

Exact aceeasi problema apare la Between Date() And Date()+15 daca scrii gresit Between Date()+15 And Date() — data mai indepartata inaintea celei apropiate. Rezultatul: din nou zero randuri, desi materiale aproape expirate exista in tabel. Verificarea e identica: valoarea (sau data) mica intotdeauna prima.

7

Recapitulare — de la date brute la raport de sectie

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 sectie, in fiecare zi.
Cele sase unelte invatate azi:

Interogare cu interval de varstaBetween DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()) pe coloana Data_Nasterii, pentru pacientii dintr-un interval de varsta.
Interogare cu criteriu pe data<Date() pentru materiale deja expirate, Between Date() And Date()+15 pentru materiale aproape expirate, ambele pe Data_Expirare.
Combinarea criteriilor — SI pe aceeasi linie din grila QBE, SAU pe linii diferite.
Sortare rapida — clic-dreapta pe capul coloanei → Sort A to Z / Z to A.
Filtrare rapida — sageata din capul coloanei sau Selection → Equals, plus Toggle Filter pentru a reveni la lista completa.
Raport tiparibil — Report Wizard pornind de la o interogare salvata, cu sortare, layout si titlu gata pentru foaia de vizita.

De retinut pentru activitatile practice:

Interogarea NU modifica niciodata tabelul original — poti rula si re-rula in siguranta.
Access nu retine varsta ca numar, doar Data_Nasterii — varsta se calculeaza mereu prin DateAdd, comparat cu Date().
Between valoare1 And valoare2 include ambele capete, dar valoarea mica trebuie scrisa prima.
Sortarea reordoneaza toate randurile; filtrarea ascunde temporar randurile nepotrivite, fara sa le stearga.
Query = date pe ecran, pentru lucru; Report = document formatat, pentru tiparit si atasat la dosarul de sectie.
Un raport care circula in afara dosarului medical contine doar campurile necesare scopului lui.

Ai finalizat modulul C3:

Ai parcurs structura tabelelor, incarcarea si validarea datelor, iar acum si exploatarea lor prin interogari, sortare, filtrare si rapoarte. Aceste unelte se aplica identic in orice sectie si pe orice tabel — pacienti, materiale sanitare, programari sau orice alta evidenta pe care o vei gestiona pe calculator.

Exercitii practice

Exercitiul 1 (Nivel minim) — Interval de varsta si termen de expirare

Presupune ca astazi este 1 iunie 2026, deci DateAdd("yyyy",-30,Date()) = 01.06.1996 si DateAdd("yyyy",-18,Date()) = 01.06.2008. Ai patru pacienti in tabelul Pacienti, cu urmatoarele valori pentru Data_Nasterii: Pacient A — 15.08.2009; Pacient B — 01.06.2008; Pacient C — 01.06.1996; Pacient D — 10.03.1994. Pentru fiecare pacient, precizeaza daca ar aparea in rezultatul unei interogari cu criteriul Between DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()) pe coloana Data_Nasterii (adica daca varsta lui, la 1 iunie 2026, este intre 18 si 30 de ani). Separat, presupune ca astazi este 1 iunie 2026 si ai trei materiale in tabelul Stoc_Materiale, cu Data_Expirare: Material X — 5 iunie 2026; Material Y — 25 iunie 2026; Material Z — 20 mai 2026. Pentru fiecare material, precizeaza daca apare in interogarea "deja expirate" (<Date()) sau in interogarea "aproape expirate" (Between Date() And Date()+15).

Vezi rezolvarea

Pacienti (criteriul Between DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()), adica 01.06.1996-01.06.2008, capete incluse):

  1. Pacient A (15.08.2009) - NU apare: data e dupa 01.06.2008, deci are sub 18 ani.
  2. Pacient B (01.06.2008) - DA, apare: e exact capatul de sus, iar Between include capetele.
  3. Pacient C (01.06.1996) - DA, apare: e exact capatul de jos, inclus.
  4. Pacient D (10.03.1994) - NU apare: data e inainte de 01.06.1996, deci are peste 30 de ani.

Materiale (fata de Date() = 01.06.2026):

  1. Material X (05.06.2026) - apare la "aproape expirate" (Between Date() And Date()+15): e la 4 zile, in fereastra de 15.
  2. Material Y (25.06.2026) - NU apare in nicio interogare: e la 24 de zile, peste fereastra de 15 si nu e trecut de azi.
  3. Material Z (20.05.2026) - apare la "deja expirate" (<Date()): e inainte de azi.

Exercitiul 2 (Nivel standard) — Sortare, filtrare si campuri pentru raport

Presupune tot ca astazi este 1 iunie 2026. Ai urmatorii sase pacienti in tabelul Pacienti:

1. Nume "Mocanu", Prenume "Andrei" — Salon "Salon 4", Data_Nasterii 14.03.2002
2. Nume "Lupu", Prenume "Bianca" — Salon "Salon 2", Data_Nasterii 05.07.2018
3. Nume "Sandu", Prenume "Cristian" — Salon "Salon 4", Data_Nasterii 20.11.1970
4. Nume "Marin", Prenume "Diana" — Salon "Salon 1", Data_Nasterii 02.02.1985
5. Nume "Tudor", Prenume "Elena" — Salon "Salon 4", Data_Nasterii 18.09.2007
6. Nume "Barbu", Prenume "Florin" — Salon "Salon 2", Data_Nasterii 12.12.2013

Cerinte: (a) Scrie, in ordine alfabetica dupa Nume (asa cum ar aparea dupa Sort A to Z), lista celor sase pacienti. (b) Care pacienti ar ramane vizibili daca aplici Filter by Selection cu Salon = "Salon 4"? Numeste-i. (c) Dintre pacientii ramasi dupa filtrul de la punctul (b), care se incadreaza si in interogarea cu criteriul Between DateAdd("yyyy",-30,Date()) And DateAdd("yyyy",-18,Date()) pe Data_Nasterii (adica au intre 18 si 30 de ani)? (d) Ce campuri ai include intr-un raport pentru sefa de sectie care arata doar CATI pacienti sunt in Salonul 4, fara sa identifice fiecare pacient in parte, tinand cont de regula protectiei datelor din lectie?

Vezi rezolvarea

(a) Sort A to Z dupa Nume:

  1. Barbu Florin
  2. Lupu Bianca
  3. Marin Diana
  4. Mocanu Andrei
  5. Sandu Cristian
  6. Tudor Elena

(b) Filter by Selection Salon = "Salon 4": raman Mocanu Andrei, Sandu Cristian si Tudor Elena.

(c) Dintre acestia, in intervalul 18-30 ani (Data_Nasterii intre 01.06.1996 si 01.06.2008): Mocanu Andrei (14.03.2002) si Tudor Elena (18.09.2007) se incadreaza. Sandu Cristian (20.11.1970) NU, are peste 30 de ani.

(d) Campuri pentru raport: doar campul Salon, fara Nume, Prenume sau Data_Nasterii - regula din lectie spune sa incluzi in raport doar campurile necesare scopului, iar aici scopul e un numar, nu identificarea pacientilor. Precizare: lectia nu preda o functie de numarare (Count/agregare) in Access, deci exact cum se afiseaza acel numar fara liniile individuale depaseste ce s-a predat aici.

Exercitiul 3 (Nivel performanta) — Raport combinat pentru vizita de dimineata

Sefa de sectie vrea un singur raport, pentru vizita de dimineata, care sa arate DOAR pacientii din Salonul 4 CU varsta de cel putin 18 ani, sortati alfabetic dupa Nume. Foloseste regula despre combinarea criteriilor pe care ai invatat-o la atomul 3 (aceeasi linie Criteria din grila QBE = SI, linii diferite = SAU).

Cerinte: (a) Ce criteriu scrii, pe ce coloana, ca sa obtii doar pacientii din Salonul 4? (b) Ce criteriu scrii, pe ce coloana, ca sa obtii doar pacientii cu varsta de cel putin 18 ani (foloseste un operator de comparatie pe Data_Nasterii, nu Between)? (c) Explica de ce cele doua criterii trebuie scrise pe ACEEASI linie Criteria din grila, si nu pe linii diferite, ca sa se respecte cerinta sefei de sectie. (d) Descrie pe scurt pasii din Report Wizard pentru a transforma aceasta interogare intr-un raport tiparibil, sortat corect si exportat ca PDF pentru vizita.

Vezi rezolvarea

Schita de rezolvare (nu solutia gata construita - tu completezi grila si raportul):

  1. (a) Sub coloana Salon, randul Criteria: "Salon 4".
  2. (b) Sub coloana Data_Nasterii, randul Criteria: <=DateAdd("yyyy",-18,Date()) - inseamna "nascut acum 18 ani sau mai devreme", deci varsta minima 18.
  3. (c) Cele doua criterii merg pe ACEEASI linie Criteria pentru ca cerinta e un SI: pacientul trebuie sa fie si din Salon 4, si sa aiba minim 18 ani, simultan. Pe linii diferite ar deveni SAU si ar intra gresit pacienti din alte saloane sau minori din Salon 4.
  4. (d) Report Wizard: Create - Reports - Report Wizard; alegi noua interogare; muti campurile de identificare necesare (Nume, Prenume, Salon); fara grupare; sortare crescatoare dupa Nume; layout Tabular; titlu clar; Finish; apoi din Print Preview, grupul Data - PDF or XPS pentru export.

Te evaluezi dupa: criteriul de varsta foloseste comparatie simpla, nu Between (cum cere enuntul); ambele criterii sunt pe aceeasi linie; raportul e sortat corect si exportat ca PDF, nu doar tiparit direct din interogare.

Ce ai invatat astazi

  • Interogarea (Query) filtreaza sau calculeaza date fara sa modifice tabelul original
  • Access nu retine varsta ca numar, doar Data_Nasterii; DateAdd("yyyy", -N, Date()) calculeaza o data cu N ani in urma, folosita apoi intr-un Between pentru intervale de varsta
  • Between valoare1 And valoare2 include ambele capete ale intervalului; valoarea mica se scrie mereu prima
  • Functia Date() da data curenta; <Date() = deja expirate, Between Date() And Date()+15 = aproape expirate
  • Sortarea (Sort A to Z / Z to A) reordoneaza toate randurile, fara sa ascunda niciunul
  • Filtrarea (sageata din capul coloanei, sau Selection → Equals) ascunde temporar randurile nepotrivite; Toggle Filter revine la lista completa
  • Raportul (Report), construit cu Report Wizard dintr-o interogare, e obiectul potrivit pentru un document tiparibil
  • Pe aceeasi linie din grila QBE, conditiile se combina cu SI; pe linii diferite, cu SAU
  • Un raport care circula in afara dosarului medical contine doar campurile necesare scopului lui

Vrei mai mult?

Construieste o interogare noua pe tabelul Stoc_Materiale, care gaseste materialele ce vor expira in exact 6 luni de acum. Nu folosi Date()+numarul de zile ca la atomul 3 - foloseste in schimb DateAdd("m", 6, Date()) pe coloana Data_Expirare, la fel cum ai folosit DateAdd cu ani la varsta pacientilor.

O interogare scrisa cu Between invers nu da nicio eroare, doar zero randuri. Ce spune asta despre diferenta dintre o greseala pe care Access o poate verifica singur (o virgula lipsa, un nume de camp gresit) si o greseala pe care nu o poate verifica niciodata automat, oricat de bine ar fi scrisa interogarea?

Between si Date() nu sunt inventii Access - sunt parte din limbajul SQL, folosit de orice baza de date reala dintr-un spital sau dintr-un cabinet, dincolo de Access. Vezi sintaxa generala aici: w3schools.com/sql/sql_between.

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, sortare, filtrare si rapoarte de sectie. Revino la pagina modulului pentru recapitulare sau pentru a continua cu urmatoarea competenta.

Inapoi la modul →