Acces

Creare unei baze de date de la 0

O sa incepem sa cream o baza de date noua. Deschidem aplicatia Microsoft Access 2007.

Cine a mai lucrat cu o versiune mai veche o sa fie putin surprins de noua interfata. Este destul de mult schimbata fata de vechile versiuni. O sa alegem Blank Database. Putem de asemenea sa incepem de la un anumit template de baza de date, deja disponibil.

O sa pornim cu o baza de date de la zero. O sa dam un nume acestei baze de date, de exemplu FIRMA.accdb. Observati ca si extensia acestor baze de date s-a schimbat.
1

Apasam Create, si in acest moment putem sa cream componentele unei baze de date.

2

Daca ar fi sa dau o definitie unei baze de date, as spune cat mai simplu, in felul urmator: o baza de date nu este altceva decat o suma de tabele, tabele care contin date din viata reala, iar aceste tabele, in interiorul bazei de date, sunt relationate. Ce anume se poate stoca intr-un tabel, si ce anume constituie relatie intre tabele o sa discutam putin mai incolo. Observati ca interfata Access-ului porneste deja cu un tabel nou. Tabelele din interiorul bazei de date seaman foarte mult cu tabele din alte programe cu care poate ati mai lucrat (Excel, Word), numai ca aceste tabele din Access sunt mai ‘inteligente’.

3

m. Access se asteapta sa cream capul de tabel al primului meu tabel din baza de date.a. si Design View.  De exemplu. ce ne permite sa cream structura tabelului si sa introducem datele in acelasi timp. In momentul in care alegem sa cream un tabel in Design View. tabela Clienti sa stocheze doar informatii despre clienti. Intersectia dintre o linie si o coloana se numeste value (valoare). Nu stocam in interiorul unei singure tabele informatii amestecate. tabela Tranzactii doar informatii despre tranzactii. introducerea datelor. s. Observati ca imediat dupa ce am inceput sa cream baza de date. Exista doua moduri de vizualizare ale unui tabel (din ribbon-ul contextual Datasheet > Views): Datasheet View.m. Acesta este primul lucru pe care il cream atunci cand vrem sa facem un tabel. Cu alte cuvinte.a. Crearea unui tabel Este recomandat ca fiecare tabel dintr-o baza de date sa stocheze informatii referitoare la o singura entitate din viata reala. Orice linie dintr-un tabel se numeste record (inregistrare).d. Va recomand sa creati structura tabelului in Design View. Cea mai importanta linie dintr-un tabel este acea linie care defineste tabelul.d. in acest momemt putem sa cream structura de baza a tabelului. Access va cere imediat sa introducem numele acestuia.O sa stabilim cateva repere pentru a fi mai usor de inteles urmatoarele tutoriale: • • • Orice coloana dintr-un tabel se numeste field. s. 4 . tabela Produse doar informatii despre produse. Ea se numeste cap de tabel (sau structura de baza). apoi sa folositi Datasheet View pentu introducerea datelor. ce se refera la entitati diferite. Cei care ati mai lucrat in Excel. Vom crea un prim tabel numit Clienti. Capul de tabel contine definitia coloanelor din tabelul respectiv. o sa observati ca Access este mult mai riguros in ceea ce priveste crearea coloanelor.

5 .

Completam numele CLIENTI si apasam OK. 6 .

acolo unde avem un meniu ce ne permite sa navigam prin elementele din interiorul bazei de date. sub forma de numar current (1. Daca nu avem un cod intern pentru clienti. apoi declaram coloana de tip AutoNumber. CNP sau Marca Client. Fie ca se numeste ID Client (ca in cazul nostru). Este recomandat ca orice tabel sa aiba o coloana cu rolul de indentificator unic de linie. Acum putem sa cream coloanele din tabel.Gasim acum tabela in partea stanga a ecranului. Aceasta inseamnan ca Access va genera in mod automat un numar de cod unic. 7 . 3…). 2. numim coloana simplu ID_CLIENT.

Oras. specificand tipul de date pentru fiecare coloana in parte.   8 . astfel: • • • Nume.Completam si celelalte coloane. coloana de tip Number. observam ca la tipul Number mai exista niste subtipuri de date. alegem LongInteger. Salariu. coloana de tip Text. coloana de tip Text.

9 .In acest moment putem vizualiza tabelul in modul Datasheet View (ribbon-ul contextual Datasheet > Views) pentru a putea introduce inregistrarile. Apasati YES daca Access va cere sa salvati datele.

Crearea constrangerilor Constrangerile sunt niste reguli. pe care le putem impune coloanelor.  Mergem in modul de vizualizare Design View. In acest moment putem sa introducem cateva linii. niste conditii logice. 10 . Navigarea de la o valoare la alta se poate face apasand tasta Tab.Observati cum capul de tabel a ramas cu cele patru coloane. De exemplu coloana Salariu nu are voie sa accepte valori mai mici decate salariul minim pe economie (Salariu > 600). in interiorul unor tabele.

Ne pozitionam pe coloana Salariu. Daca vrem sa stabilim pentu coloana salariu o conditie logica. Format. Observati ca fiecare coloana are o serie de proprietati – in partea de jos a ecranului – Field Size. etc. 11 . mergem in campul Validation Rule si facem click pe butonul din dreapta campului.

Se deschide o refeastra in care putem sa introducem conditia logica. si apasam OK. In primul camp scriem: Salariul>=600. 12 .

13 .In Validation Text vom introduce un mesaj text ce va aparea pe ecran in mod automat atunci cand conditia nu este indeplinita: Salariul trebuie sa fie mai mare decat 600.

Salvam modificarile si mergem in modul Datasheet View. Pentru una dintre inregistrari (de exemplu Radulescu) modificam salariul la 599. apare Validation Text-ul si nu putem parasii campul atata timp cat conditia mentionata nu este indeplinita. In momentul in care vrem sa salvam sau sa plecam de pe linia respectiva. 14 .

care va reveni la valoarea anterioara.Putem apasa tasta Esc pentru a parasi campul. 15 . Atunci cand modificam valoarea la una mai mare de 600. mesajul nu va mai fi afisat.

constrangerea de tip Unique. Crearea relatiilor(I) Intr-o baza de date putem avea mai multe tabele. Deosebirea esentiala dintre o baza de date Access si un alt software (Excel.Trebuie sa retineti ca exista mai multe tipuri de constrangeri: constrangerea de tipul Primary Key. care. Am convenit deja ca un tabel se refera practic la o singura entitate din viata reala. entitatile. tabelele din interiorul bazei de date sunt relationate. Acest concept legat de relationare sta la baza teoriei relationale. Nu putem sa vorbim de toate acum. Din ribbon-ul Create cream un nou tabel (Table). Sa presupunem ca mai avem o tabela unde tinem datele despre copiii angajatilor. constrangerea de tip Not Null. Word) este tocmai aceea ca obiectele.  In cazul in care avem mai multe tabele. daca vreti. dar este de retinut ca orice conditie pusa pe o anumita coloana rezulta intr-o constrangere. asa cum entitatile din viata reala sunt relationate. Este recomandat sa folosim constrangeri pentru a fi siguri ca in baza de date nu ajung decat valori conforme cu realitatea. se impune ca aceste tabele sa fie relationate. este inima notiuni unei baze de date. constrangerea de tip Foreign Key. 16 .

17 .Mergem in modul de vizualizare Design View. Apasam OK. In acest moment introducem numele noului tabel: COPII. pentru a realiza structura tabelului.

de tip Text.Structura tabelului va fi urmatoarea: • • • ID_COPIL. Prenume. DataN.   18 . de tip Date/Time. de tip AutoNumber.

19 . Microsoft Access este dependent de sistemul de operare privind aceste setari de format al datei. Trebuie sa mergem in Control Panel > Regional and Language Options si sa vedem ce Language avem setat.Salvam modificarile si mergem in modul Datasheet View. Introduceti o serie de date ca in screen-shotul de mai jos. Felul in care introducem o data calendaristica este conform cu Regional Settings din sistemul de operare.

In cazul nostru avem de-a face cu o relatie clasica. intre cele doua entitati separate. Crearea relatiilor(II) Avem doua tabele: ANGAJATI (stocheaza informatii despre angajati) si COPII (stocheaza informatii despre copii angajatilor).Acum avem doua tabele: ANGAJATI si COPII. Pentru a rezolva aceasta relatie. unei linii din tabela Parent ii pot corespunde mai multe linii din tabela Child. trebuie sa stabilim si noi aceasta relatie in interiorul bazei de date. Asa cum in viata reala exista o legatura intre angajati si copiii lor. 20 . Trebuie sa avem doua tabele. ce se numeste ‘1 la n’. asa si in Access trebuie sa avem acea relationare intre cele doua tabele. sau ‘one to many’. Ramane in continuare sa stabilim cum relationam tabelele. In tabela COPII mergeti in modul Design View. Intr-o relatie ‘1 la n’.  Observam ca deocamdata cele doua tabele sunt complet independente si nu exista nimic comun acestora. Adaugam o noua coloana imediat dupa coloana ID_COPIL: facem click dreapta pe linia Prenume si alegem Insert rows. unul de tip Parent (ANGAJATI) si unul de tip Child (COPII). in tabela Child (COPII) trebuie sa introducem o noua coloana care sa stocheze ID-ul corespunzator parintelui. adica cum stabilim pentru fiecare angajat ce copil are. Asa cum in viata reala unui angajat ii pot corespunde unul sau mai multi copii.

Introducem numele ID_Parinte si ca tip alegem acelasi ca si Primary Key-ul din ANGAJATI – ID_CLIENT (Number). Salvam si revenim in modul Datasheet View. 21 .

Pentru a stabili exact relatia. 22 . adica pentru a specifica factul ca datele din clooana ID_CLIENT din ANGAJATI este replicata in ID_Parinte din COPII. mergem in Database Tools > Relationships. apoi Close. Selectam ambele tabele si apasam Add.

Atentie! Este nevoie a inchidem tabelele inainte de a face aceasta operatiune de relationare.Cele doua tabele nu sunt inca relationate. Apasam Create. 23 . In fereastra deschisa bifam checkbox-ul Enforce Referential Integrity. Tragem (Drag&Drop) coloana ID_CLIENT din ANGAJATI peste coloana ID_Parinte din COPII.

Observam ca apare relatia ‘1 la n’. stabilim ca parintele lui Gigel este Ionescu. Deschidem tabelea COPII. De exemplu. daca in prima linie scriem 1. 24 . Coloana ID_Parinte stocehaza ID-ul corezpunzator parintelui. care are ID_CLIENT 1 in tabela de ANGAJATI. Salvam relatia.

Tot in coloana ID_Parinte introducem 1 si pentru linia 3 (Mirela). 25 .

Aceasta inseamna ca parintele Ionescu are doi copii: Mirela si Gigel. Anuta). 26 . Introducem 3 in coloana ID_Parinte din randul 2 (Vasilescu are un singur copil.

27 . care sunt liniile corespondente din tabela child. pentru fiecare linie din tabela parent.Mergem in tabela ANGAJATI (Parent). Access ne permite sa vizualizam in mod direct (atata timp cat am stabilit relatia descrisa mai sus).

De exemplu.Avem doua tabele: ANGAJATI si COPII. putem sa interogam ambele tabele in acelasi timp si sa aflam care este fiecare angajat. 28 . Din ribbon-ul Create alegeti Query Design. Cele doua tabele sunt relationate: unei linii din tabela ANGAJATI ii pot corespunde mai multe linii din tabela COPII. si care este copilul fiecarui angajat. Una dintre cela mai puternice operatii in Access este aceea prin care reusim sa interogam diferite obiecte. Se poate observa in tabelul ANGAJATI ca pentru Ionescu avem doua inregistrari in tabela COPII.

In acest moment putem sa vedem orice fel de informatie stocata in aceste tabele. 29 . apoi Close. apasam Add. Observam ca este evidentiata si relatia dintre cele doua tabele.Alegem ambele tabele.

Facem dublu-click pe coloana Nume din tabela ANGAJATI. si ea este introdusa automat in acesta interogare. 30 . Mai adaugam Salariu din tabela ANGAJATI si Prenume din tabela COPII.

Apasam Run. 31 . din ribbon-ul contextual Design > Results.

Se vor afisa inregistrarile gasite. 32 .

Observam ca informatiile despre Ionescu se repeta. pentru ca el are doi copii. 33 .

De exemplu. este ca vom putea sa stabilim orice conditii logice dorim. si aici vedem cu adevarat puterea interogarilor. corezpunzatoare coloanei Salariu din interogare. In linia Criteria. Ce este interesant. la angajati nu vrem sa vedem decat acei angajati care au un salariu mai mare de 2000. vom putea sa filtram tabelele din Access stabilind niste conditii logice. 34 .Ne introarcem in Design View. introducem conditiea: ‘>=2000’.

si are si copii.Apasam din noi Run si observam ca singurul angajat care are salariul mai mare de 2000. 35 . este Vasilescu.

Apasam OK. Din Quick Access Toolbar apasam Save si introducem numele interogarii: ‘1 Angajatii platiti bine cu copii’. 36 .Ne intoarcem in modul Design View. In acest moment putem sa salvam aceasta interogare pentru a o refolosi mai tarziu.

Inchidem designerul de interogare. si putem observa ca in acest momemt. in meniul din partea stanga a ecranului avem doua tabele si o interogare cu numele mentionat mai sus. Oricand interogarea poate fi modificata facand click dreapta pe ea si alegand Design View. 37 .

In baza noastra de date mai facem o interogare: toti copiii nascuti dupa o anumita data (anul 2001). Alegem doar tabela COPII. 38 . si apasam Add apoi Close. iar din ribbon-ul Create alegem sa facem o noua interogare – Query Design. Inchidem tabelele.

si apasam Run interogarea va aduce tabelul in intregime. 39 .Daca selectam steluta care sa gaseste in caseta tabelului deasupra primei coloana. Folosim pentru interogare coloanele Prenume si DataN. Facem click dreapta pe campul respectiv si alegem Build. Putem sa adaugam inca o coloana (coloana calculata). pentru care adaugam (in Fields) aliasul Anul.

40 .In fereastra nou deschisa (Expression builder) putem introduce formula de calcul. Apasam OK. Ca atribut alegem Tables > COPII > DataN. folosim functia Year. Asa cum in Excel exista functii. Daca vrem sa calculam anul de nastere al unui copil. Formula va devenii: Anul: Year([COPII]![DataN]). si in Access exista. dar acestea din urma nu sunt toate identice cu cele din Excel. folosind designer-ul care ne permite sa navigam intre coloanale din tabelele create.

iar coloana Anul este o coloana personalizata. Observam ca datele din coloana DataN este doar copiata din baza de date. In acest moment ne introarcem la Design View pentu a stabili un criteriu de regasire. corespunzator acestei noi coloane si apasam Run.Bifam checkbox-ul Show. Pentru coloana Anul. 41 . care are in spate o formula. astfel ca afisam doar acei copii care au anul de nastere mai mare de 2001. in linia Criteria introducem conditia: ’>=2001’.

Forma in care sunt prezentate datele: antet. Avem deja doua interogari salvate. subsol.  La rapoarte conteaza foarte mult doua aspecte: • • Partea estetica (layout): culori. border-uri. Acea persoana doreste sa vizualizeze repectivele date intr-un mod cat mai placut astfel incat sa poata cat mai usor sa extraga o informatie relevanta. tabele.  Pentru a face un raport. Observam ca numai doi copii sunt nascuti dupa anul 2001. conditional formatting. Crearea unui raport (I) Un raport nu este altceva decat o interogare dintr-o baza de date ce urmeaza a fi interpretata de o anumita persoana.Rulam din nou interogarea apasand Run. 42 . mergem in ribbon-ul Create si alegem Report Wizard.

43 .

Alegem tabela ANGAJATI.Vrajitorul (Wizard) ne intreaba ce sta la baza raportului nostru. Putem alege dintre tabelele si interogarile deja create. 44 .

45 . Alegem Nume.Acum putem sa selectam coloanale de care avem nevoie in raport. Apasam Next. Oras si Salariu.

Putem apoi sa grupam datele intr-un anumit fel. dar nu avem nevoie asa ca apasam Next. 46 .

Putem de asemnenea sa mentionam modul de sortare. crescator. Apasam Next. 47 . Vom alege sa sortam dupa Nume.

Putem sa alegem layout-ul raportului. Vom bifa Tabular (unul dintre cele mai comune) impreuna cu orientarea paginii Portrait. 48 .

Avem in lista o serie de stiluri predefinite care contin anumite atribute de fromatare.Alegem un template pentu raportul nostru. Alegem Northwind si apasam Next. 49 .

50 . Apasam Finish.In final dam un nume raportului: Raport Angajati simplu.

este diferit de cel din baza de date. dar aspectul fizic. Crearea unui raport (II) Formatarea Conditionata Un raport nu reperezinta un simplu query (interogare) cu un cap de tabel. Vom aborda una dintre cele mai spectaculoase astfel de operatiuni: formatarea conditionata. Un raport de regula implementeaza operatii mult mai serioase.Observati ca raportul este tabela ANGAJATI. toti angajatii care au salariul mai mare de 1400 sa fie scrisi cu rosu. cu un titlu. Am putea astfel sa impunem o conditie logica pe o anuita coloana astfel incat acele valori care indeplinesc acea conditie sa fie scoase in evidenta intr-un anumit fel. De exemplu. ce urmeaza a fi scos la imprimanta. estetic. Mergem in modul de vizualizare Design View al raportului ‘Raport Angajati simplu’. mult mai complexe. 51 .

52 .

iar de pe ribbon-ul principal facem click pe Conditional (acelasi lucru il puteam obtine facand click dreapta pe coloana respectiva si alegand Conditional Formatting). 53 . cea pentru care vrem sa aplicam formatarea conditionata.Selectam coloana Salariu.

Apasam OK. Vom alege formatarea: Field Value is. Font Color rosu si Fill/BackColor galben. Din atributele de formatare alegem Bold. grather than. apoi introducem valoarea 1400. 54 .Cei care ati lucrat in Excel puteti recunoaste aceasta fereastra.

55 . Observati ca toate acele valori care respecta conditia logica sunt scoase automat in evidenta.Alegem modul de vizualizare Print Preview.

56

Crearea unui formular Formularele reprezinta obiecte din interiorul unei baze de date care ne ajuta sa modificam datele din tabele intr-un mod mult mai placut si mai usor.  In mod normal, daca vrem sa modificam sau sa adaugam randuri noi in tabela ANGAJATI ar trebui sa o deschidem si sa operam modificarile in Datasheet View. Aceasta e o operatie destul de riscanta pentru ca exista posibilitatea sa alteram liniile din tabela si sa introducem valori neconforme cu realitatea. Formularele exact acest lucru il fac: ne permit sa introducem date sau sa modificam, respectand anumite reguli. Formularele din Access (si formularele in general) sunt relativ complicat de realizat, de aceea pentru realizarea unor formulare profesioniste va trebui sa cunoasteti destul de multe despre Access. Din ribbon-ul Create alegeti More Froms > Form Wizard pentru crearea unui formular.

57

In fereastra de wizard deschida alegem campurile Salariu, Oras si Nume din tabela ANGAJATI, iar din tabela COPII, alegem ID_Parinte, Prenume si DataN. Vom putea sa modificam datele din doua tabele in acelasi timp. Apasam Next.

58

59 . Alegem tabela ANGAJATI si apasam Next.Access si-a dat seama ca am ales date din doua tabele si acum trebuie sa alegem care dintre cele doua este Parent.

Ca layout alegem modul Tabular. Apasam Next. 60 .

Alegem un stil de formatare si apasam Next. In final.  61 . completam numele pentru formular si sub-formular: • • Form de input Angajati-COPII COPII Subform Apasam Finish.

si navigarea din tabela child care ne permite sa navigam intre copii angajatului repsectiv. 62 . in functie de parintele selectat).Observati ca avem o singura fereasta de unde am putea modifica si angajati (partea de sus) si copiii angajatilor (partea de jos. din partea de jos. care ne permite sa navigam intre liniile din parent – ANGAJATI. apasam butonasul Next Record. Daca vrem sa trecem la urmatorul angajat. Exista doua modalitati de navigare: navigarea de jos.

apasam New Record in tabela child. Cu acest instrument putem sa facem orice operatie de modificare fara a mai fi nevoie sa deschidem ambele tabele. Cu angajatul Ionescu afisat. 63 .Observam ca acum este afisat anagajatul Popescu care nu are nici un copil.

64 .Introducem prenumele Ionica si data nasterii.

). decat sa facem cate o interogare pentru gasirea clientilor dintr-un anumit oras (una pentru Ploiesti. La rularea acestei interogari o sa introducem orasul pentru care dorim clientii. De exemplu dorim sa gasim clientii din Bucuresti: 65 . stergerea datelor dintr-o baza de date. sortari. Daca deschidem tabela COPII observati noua inregistrare pentru Ionica. care are deja la Parinte_ID valoarea 1 (care il reprezinta pe angajatul Ionescu).. una pentru Bucuresti. s. In acest formula nu se pot face numai adaugari de linii noi.a. Formularele sunt special create astfel incat sa permita cat ma facil si rapid operatiile de mai sus. Ce sunt interogarile parametrizate? Sunt acele interogari ce depind de o valoare de input. modificarea. . dar si modificari. De exemplu. Formularele reprezinta ferestre ce permit adaugarea. filtrari. dar el a si fost asignat agajatului Ionescu.d. realizam o singura interogare parametrizata dupa Oras.m..In acest moment nu numai ca a fost introdus in tabel copilul Ionica.

sub acest mesaj apare un textbox unde se poate scrie un oras. Daca dorim sa-i vizualizam pe cei din Ploiesti trebuie refacuta interogarea. Practic la rularea interogarii de mai sus apare mai intai o fereastra cu textul "Introduceti Orasul". Putem modifica interogarea de mai sus astfel: -declaram valoarea Bucuresti ca fiind un parametru -de fiecare data cand ruleaza interogarea. utilizatorul va putea introduce alta valoare pt parametru.Problema este ca de fiecare data cand refolosim aceasta interogare ea ne afiseaza numai clientii din Bucuresti. In acest tutorial prezentam 2 exercitii 66 .

Interogari avansate (I) .accdb Pasul 2: Deschideti tabela Clienti (vizualizati datele din tabela) Pasul 3: Dorim sa realizam o interogare parametrizata dupa Orasul Inchideti tabela Clienti Incepem o noua interogare (Query Design).1.accdb Exercitiul 1: Parametrizare simpla dupa o singura valoare Pasul 1: Deschideti baza Lectia 1 .Interogari parametrizate. cu tabela Clienti 67 .zip (dezarhivati-l).accdb -o baza de date: Rezolvari Lectia 1 . Parametrizare complexa dupa mai multe valori Pas preliminar Descarcati fisierul resurse.Interogari parametrizate.Interogari avansate (I).Interogari avansate (I) . Arhiva contine urmatoarele fisiere: -o prezentare PowerPoint: Lectia 1 .Interogari parametrizate.pps (trebuie sa aveti instalat PowerPoint Viewer) -o baza de date: Microsoft Access 2007: Lectia 1 .Interogari avansate (I) . Parametrizare simpla dupa o singura valoare 2.

Pasul 4: Din lista de coloane alegem: Nume. Prenume. Orasul Pasul 5: Sub Orasul in dreptul liniei Criteria scriem: [Scrieti Orasul] Pasul 6: Rulati interogarea (apoi salvati cu numele 1-Parametrizat dupa Oras) 68 .

Interogari avansate (I) . Produse. Intre tabelele Clienti si Produse exista o relatie n la m (relatia este rezolvata de tabela Tranzactii) Pasul 3: Inchideti tabelele Clienti.Interogari parametrizate.DATAT 69 .Exercitiul 2: Parametrizare dupa mai multe valori Pasul 1: Sa fie deschisa baza Lectia 1 . Produse si Tranzactii (vizualizati datele din ele).Produs. CLIENTI. Tranzactii Pasul 5: Din lista de coloane alegem: CLIENTI.Orasul.Nume. Produse. Produse si Tranzactii Pasul 4: Incepem o noua interogare (Query Design). cu tabelele Clienti. CLIENTI. TRANZACTII.accdb Pasul 2: Deschideti tabelele Clienti.Prenume.

Pasul 6: Scriem sub Orasul (in dreptul liniei Criteria) : [Scrieti Orasul] Pasul 7: Scriem sub DATAT (in dreptul liniei Criteria) : Between [Alegeti Data de inceput] And [Alegeti Data de sfarsit] 70 .

01/01/2007 Pasul 9: Putem schimba ordinea de aparitie a parametrilor folosind fereastra Parameters: Apasati butonul Parameters Completati cum doriti ordinea de aparitie a parametrilor: de ex.Pasul 8: Rulam interogarea introducand valorile: Ploiesti . 01/01/2005. ca in poza de mai jos 71 .

Parametrizat Complex 72 .Pasul 10: Rulati interogarea: Observati ca suntem intrebati prima data datele calendaristice Pasul 11: Salvati cu numele 2 .

Interogari incrucisate (CrossTab Queries) ‐ Partea 1 

Conceptual de CrossTab Queries din Access este sinonim cu Pivot Table din Excel. El nu reprezinta altceva decat o imagine de ansamblu asupra datelor din tabele. Pentru a crea CrossTab Queries trebuie sa raspundem la cateva intrebari:
• • • •

Care este coloana din tabelul nostru initial care va genera liniile in CrossTab Query? Observati ca in exemplul nostru, liniile reprezinta niste orase.  Deci vom avea atatea linii distincte, cate orase avem in tabelul original.  Care este coloana din tabelul original ce va genera coloanele in CrossTab Query? In exemplul nostru vom folosi profesia, si vom avea atatea coloane,  cate valori distincte avem in coloana Profesia.  Care este coloana ce urmeaza a fi agregata? In cazul nostru avem veniturile.  Care este functia agregata pe care o aplicam? Noi ne vom ocupa de media veniturilor. 

73

Vom incerca sa cream exact tabelul din imaginea de mai sus. Din ribbon-ul Create > Query, facem click pe Query Design.
74

75

76 . si apasam Add. apoi Close.Din fereastra deschisa alegem tabela clienti.

sectiunea Query Type. si coloana VenitLunar. ci alegem functia agregata AVG (media) iar la Crosstab avem Value.Din ribbon-ul contextual Design.  In acelasi mod alegem coloana Profesia. unde nu mai avem grupare.  Prima coloana pe care o alegem este Orasul. pentru coloana Orasul. Observam ca tabelul afisat are coloanale generate dinamic: avem atatea coloana cate valori dinstincte avem in coloana Profesia. iar in campul Crosstab alegem Row Heading. Randurile se comporta la fel.    77 . Tabelul creat este destul de clar si usor de interpretat. trebuie sa alegem tipul Crosstab (acest pas este foarte important). unde mentionam Group By – Column Heading. Apasam Run.

   78 .

79 .

Interogari incrucisate (CrossTab Queries) .Partea 2 80 .

Din fereastra deschisa alegem toate cele 3 tabele.Mai jos avem un alt exemplu de Crosstab Queries.  Din ribbon-ul Create > Query. apoi Close. 81 . si apasam Add. facem click pe Query Design.

sectiunea Query Type. trebuie sa alegem tipul Crosstab. pentru fiecare oras. care au fost vanzarile pe fiecare an. iar la final sa avem o coloana cu totalul vanzarilor. ca in imaginea de mai jos. Sa vedem. 82 . Vrem sa realizam un Crosstab Query.Din ribbon-ul contextual Design.

care ca generea randurile.Completati campul Orasul. si campul calculat Anii: Year([DATAT]) care va genera coloanele. 83 .

La Crosstab alegem Value.In cea de-a treia coloana. introducem o formula care sa calculeze veniturile.Cantitatea) Atata timp cat la Field am introdus noi formula. la Total o sa alegem Expression. 84 . ca Pret X Cantitate: Valoarea: Sum(Produse.Pret*Trazactii.

Observam ca tabelul afiseaza pentru fiecare oras in parte.Apasam Run. calculate ca produs intre pret si cantitate. 85 . valoarea vanzarilor. pentru fiecare an.

iar la Crosstab alegem Row Heading. 86 . adaugam inca o coloana in designerul interogarii copiind aceeasi formula (cu aliasul Total).Daca dorim sa vedem si suma totala.

Apasam Run. 87 .

88 . sunt traduse intr-un limbaj nativ al Access-ului: SQL (Structured Query Language). dar acum vom arunca o privire asupra interogarilor de tip SQL.Observati ca implicit coloana Total a fost pusa dupa coloana Orasul.  In tabela Clienti avem o coloana numerica denumita VenitLunar. apoi pe acei clienti care au venitul peste acea medie. Subinterogarile sunt acele select-uri ce nu se pot executa ‘din prima’. Toate interogarile pe care noi le facem in designer. Cine are venituri peste medie? Mergem in Query Design. Subinterogari (Subqueries) Subinterogarile reprezinta o tehnica foarte puternica cu care putem sa extragem anumite valori relevante din baza de date. subordonate. alegand doar tabela Clienti. si ne propunem sa gasim toti clientii care au un venit lunar mai mare decat media. dar putem sa o mutam manual la sfarsit (Drag & Drop). In mod normal trebuie sa gasim intai media. Putem acum sa salvam interogarea. ci ele sunt dependente de alte interogari. Alegem modul de vizualizare al interogarii SQL View. Vom avea un astfel de exemplu: Cine are venituri peste medie? (trebuie sa gasim mai intai media) Pana acum am lucrat cu designerul de interogari din Access.

89 .Subinterogarile nu se pot scrie decat in interiorul acestui SQL view.

Scriem: SELECT AVG(VenitLunar) FROM CLIENTI Daca revenim in modul Datasheet View.   90 . vom vedea rezultatul interogarii: media tuturor veniturilor lunare.

si observam ca acum rezultatul are si un alias.   91 .Modificam codul SQL la:  SELECT AVG (VenitLunar) as Media FROM CLIENTI.

Caracterul * inlocuieste toate coloanele din tabela. folosim codul:  Select * from Clienti where VenitLunar >=(SELECT AVG (VenitLunar) as Media FROM CLIENTI).   92 .Pentru a face subinterogarea sa afiseze doar acei clienti cu venitul peste medie.

Apoi este procesata interogarea initala. ea este in realitate destul de simpla.   93 . extragand valorile VenitLunar peste 2500. Access detecteaza parantezele folosite.  Observati ca Access-ul a tradus deja codul introdus de noi.Desi pare o comanda complicat. si proceseaza mai intai interogarea dintre paranteze – rezultatul era 2500.

 in care reusim sa copiem rezultatele intoarse de un  query si sa le pastram in baza de date. Ele reprezinta doar o legatura catre date. facem click pe Query Design. Putem face oricate interogari si baza de date  nu se va marii. Operatia aceasta.  Mai intai facem interogarea. tintesc catre date.  94 .  In anumite situatii.  Vrem sa stocam in tabela TRANZACTII_VALOROASE toate tranzactiile ce depasesc valoarea 1000. la rularea careia.  Din fereastra deschisa alegem toate cele 3 tebele. apoi Close.  Din ribbon‐ul Create > Query. si apasam Add. se impune sa pastram rezultatul intros de un anumit query. produsul si valoarea tranzactiei (pret*cantitate).  Interogari Make Table Stim foarte bine ca interogarile nu stocheaza date. liniile intoarse sunt persistate intr‐un tabel fizic.  Cream o interogare care sa intoarca numele clientului. sa migrati din designerele graifce catre acest SQL pentur ca acest mod prezinta o serie de avantaje. insa. se numeste Bulk Copy.  O interogare de tipul Make Table nu reprezinta decat o interogare normala.Recomandarea este sa folositi SQL pentru interogari.

  Daca rulam interogrea.  95 . vom vedea rezultatul.

    96 .

Filtram interogarea astfel incat sa returneze numia acele valori peste 1000.    97 .

 Observam ca au ramas numai acele linii care indeplinesc conditia logica.    98 .Rulam interogarea.

    99 . din ribbon‐ul cotextual facem click pe Make Tabel. In modul de vizualizare Design View.Din acest query putem sa face o interogare de tipul Make Table.

Introducem numele de tabela Tranzactii_Valoroase si apasam OK. 

  100

Apasam Run. Access ne intreaba daca suntem de acord sa creeze un tabel cu un anumit numar de linii. Apasam Yes. 

  101

Tabela s‐a creat in mod automat si poate fi vizualizata ca orice alta tabela.  Salvam interogarea cu numele: Interogare ce populeaza un tabel fizic. 

  102

 tabela Tranzactii_Valoroase va fi stearsa si va fi populata din nou cu rezultatul intors de  interogare.  Interogari de tip modificare (Update Query) Comenzile de tip Update Query. si pretul aferent. Avem 2 modalitati: Facem un query care sa ne gaseasca liniile cu Caise.De fiecar data cand rulam interogarea de tipul Make Tabel. De regula noi suntem obisnuiti doar sa interogam bazele de date. A doua varianta este sa folosim o comanda de tip Update Query.  In tabela produse vrem sa adaugam 3 Ron pentru fiecare pret al caiselor. Facem query-ul care sa ne returneze toate produsele caise. apoi facem modificarile manual direct in interogare. dar in anumite scenarii trebuie sa si modificam cat mai rapid datele din interiorul unei baze de date. 103 . ne permit sa automatizam modificarile in interiorul bazei de date.

104 .

se returneaza cele 2 tipuri de caise. 105 .Daca rulam interogarea.

Dar ar fi foarte greu de urmat acest pas daca avem un numar foartre mare de linii. 106 . si alegem tipul Update.Putem face modificarile direct. manual. Reluam designer-ul interogarii.

Si aici putem sa folosim modul de lucru cu limbajul SQL. 107 . dar o sa continuam in Design View. Completam campurile astfel incat interogarea sa returneze produsele Caise si sa creasca pretul cu 3 unitati.

108 . Apasam Yes. Access ne intreba daca vrem sa acceptam modificarile celor 2 randuri.Rulam interogarea.

Ce sunt interogarile de tip stergere (Delete Query) ? Sunt comenzi de tip Delete ce ne permit stergerea din baza de date a uneia sau a mai multor inregistrari. Legatura dintre tabele se face pe baza unui Relationship. pentru a ne familiariza cu acesta: UPDATE Produse SET Produse. Pasul 1: Pentru a sterge o informatie dintr-o tabela Access putem folosi o comanda numita Delete Query care sa ne permita stergerea in mod automat pe baza unei conditii logice.[Produs] Like '*Caise*')).Daca deschidem tabela Produse observam ca pretul a crescut pentru acele linii.Pret = [Produse]. in functie de o anumita conditie logica.[Pret]+3 WHERE (([Produse]. Putem studia si codul SQL transcris de Access. 109 .

110 .

111 .

Pasul 2: In relatia dintre tabelele de Produse si Tranzactii vrem sa adaugam o optiune de stergere. Pentru a realiza acest lucru vom bifa optiunea Cascade Delete Related Records. 112 . sa se stearga si din tabela de tranzactii acele linii care tin de produsul nostru. Asta inseamna ca in clipa in care sterg liniile din tabela de produse ce contin un anumit termen.

113 .

Daca rulam acest query va gasi toate liniile ce contin acel cuvant iar noi le vom sterge manual. 114 . Acesta va fi un Query de tip Select. Citeriul de cautare are comanda de cautare a termenului dorit de noi.Pasul 3: Din Ribbon-ul Create vom alege optiunea Query Design pentru a face o stergere.

115 .

116 .

Pasul 4: O alta metoda de stergere mai rezonabila este sa cream un Query de tip Delete. In clipa in care rulam acest query suntem avertizati ca vor fi sterse acele linii ce contin cuvantul nostru. Aceasta metoda modifica Designer-ul si comanda SQL. 117 .

118 .

119 .

Pasul 5: 120 .

121 .In functie de setarile puse in comanda SQL designer-ul se va completa automat. In clipa in care rulam query-ul tabelei noastre ii vor lipsi liniile ce contineau cuvantul specificat de noi.

Pasul 1: 122 .

123 .Se va crea o tabela cu coloanele pe care le dorim.

Pasul 2: Vom crea un Query care va adauga in tabela nou facuta. Din meniul derulant vom alege tabela in care dorim sa fie inserate datele. o linie ce va contine data curenta si suma ce a fost tranzactionata pana la momentul curent. Acesta va fi un Query de tip Append. 124 . Pasul 3: Din Ribbon-ul Create vom alege optiunea Query Design. In caseta de dialog deschisa ne va intreba unde sa scrie valoarea obtinuta.

Acest Query va intoarce doua coloane.

125

Pasul 4:
In Designer vom introduce functiile si criteriile pentru Query.

126

127

In aceasta clipa el va detecta ca are de inserat un rand si ne va da ca vrem sau nu sa il inseram. 128 .Pasul 5: Din Ribbon-ul Desiggn vom alege optiunea Run pentru a rula Query-ul scris.

129 . Aici alegem tabelele pe care vrem sa le concatenam.Ce sunt interogarile de tip Append Query ? Ce sunt interogarile Union ? In cazul in care avem mai multe tabele diferite dar identice din punct de vedere al structurii se vor creea Select-uri ce concateneza datele din acele tabele. Pasul 1: Vom creea tabelele ce vor contine informatiile dorite Din Ribbon-ul Create vom alege optiunea Query Design.

130 .

131 .

132 . Operatorul Union face si sortare automata in pr ima coloana. Pentru a functiona Union trebuie sa avem acelasi numar de coloane si tipurile de coloane sa fie identice. Operatorul Union numai are suport grafic. asa ca se vor scrie manual interogarile.Pasul 2: In Ribbon-ul Design vom selecta optiunile Union.

133 .

etc. Comenzile DDL ne permit automatizarea modificarilor de structura dintr-o baza de date CREATE TABLE Angajati ( Nume TEXT(50). . ColorID LONG ) CREATE TABLE Colors ( ColorID LONG CONSTRAINT PK_Colors PRIMARY KEY. Salariul INTEGER ) ALTER TABLE Angajati DROP COLUMN Salariul ---------------------------------------------------------CREATE TABLE Cars ( CarID LONG. . ColorName TEXT(50) ) ALTER TABLE Cars ADD CONSTRAINT MyColorIDRelationship FOREIGN KEY (ColorID) REFERENCES Colors (ColorID) Pasul 1: 134 .delete. Ex: .append. . CarName TEXT(50).Ce sunt interogarile Data Definition ? Sunt comenzi ce permit automatizarea modificarilor dintr-o baza de date.update.

135 . Se va selecta optiunea Data Definition.Din Ribbon-ul Create vom alege optiunea Query Design.

Pasul 2: In clipa in care vom introduce scriptul si dam comanda Run. 136 . Aceasta tabela va avea caracteristicile specificate de script. Access va crea o noua tabela. conform script-ului nostru.

137 .

138 .Pasul 3: Comenzile Alter si Drop inserate intr-un script vor sterge dintr-o tabela un anumit camp sau o coloana. conform datelor introduse in script.

139 .

aceasta va sterge tabela respectiva. 140 .Pasul 4: Folosind comanda Drop pe o tabela.

141 .

ce va avea caracteristicile specificate de script.Pasul 5: Comanda Create va crea o tabela noua. 142 .

143 .

144 .

145 .Pasul 6 Folosind un script putem sa realizam relatii intre doua sau mai multe tabele.

146 .

147 .

Access va primi doar rezultatul. Apoi vom apasa butonul Pass-Through si Property Sheet. Nu vom alege nici un tabel.Ce sunt interogarile la distanta (Pass-Throuh) ? Aceste interogari sunt folosite pentru a interoga o baza de date SQL situata in alta parte. Se pot folosi orice fel de baze de date externe. 148 . Pasul 1: Din Ribbon-ul Create vom alege optiunea Query Design.

149 .

Pasul 2: In meniul din partea dreapta la rubrica OBDC Connect Str vom face legatura dintre Access si baza de date externa. 150 .

151 .Pasul 3: Din fereastra de dialog deschisa vom alege sa facem un noua conexiune. Vom urma pasii impusi de Wizard-ul Data Source.

152 .

153 .

Pasul 4: In clipa in care incheiem pasii de mai sus. 154 . intr-un Query va aparea sintaxa care face legatura dintre Access si baza de date externa.

el va interoga baza de date externa si va extrage mereu doar primele din persoane din tabela specificata in Wizard-ul de la Pasul 3. 155 .Pasul 5: De fiecare data cand vom rula acest Query.

Sign up to vote on this title
UsefulNot useful