De la tabel la raspuns — ce e o interogare
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.
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.
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.
Pacientii dintr-un interval de varsta — Between si DateAdd
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.
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.
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.
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.
Materiale cu termen apropiat — functia Date()
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.
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.
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.
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.
Sortare si filtrare — raspunsuri rapide, fara o interogare noua
Clic-dreapta pe capul coloanei Nume → Sort 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.
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 Selection → Equals "Salon 4". Ambele metode filtreaza fara sa construiesti o interogare noua.
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.
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.
De la interogare la raport tiparibil pentru sefa 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.
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.
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.
Greseala tipica — ordinea inversata la Between
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.
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.
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.
Recapitulare — de la date brute la raport de sectie
Interogare cu interval de varsta — Between 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.
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 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.