Baze de date
Aplicatii practice rezolvate baze de dateAplicatii practice rezolvate BAZE DE DATE1. RezumatAcest capitol propune un indrumator pentru orele de laborator, in vederea insusirii deprinderilor practice de utilizare a programului Microsoft Access 2003. Acesta va cuprinde atat aplicatii rezolvate cat si aplicatii propuse studentilor pentru munca individuala. Suntem constienti ca notiunile prezentate prin exemple in acest capitol nu acopera toate facilitatile de prelucrare oferite de Microsoft Access. Propunerea noastra este prezentarea unora dintre cele mai utile instrumente de utilizare a SGBD-ului studiat in partea teoretica. 2. Aplicatia 1
Obiective: Crearea unei baze de date. Crearea tabelelor in Design View. Analiza informatiilor si stabilirea structurii tabelelor. Stabilirea cheilor primare si a indecsilor. Crearea relatiilor dintre tabele. Afisarea unei liste ordonate si aplicarea filtrelor pentru afisarea datelor dupa anumite criterii. Rezolvare 1. Propunem urmatoarea schema de structurare a datelor:
In tabela LiniiFact se observa faptul ca pentru campul nr_f nu poate fi definita o cheie primara, de aceea vom adauga campul ID. Se stie ca un furnizor va apare pe mai multe facturi. Deci relatia dintre tabelele Furnizori si Facturi este de tipul one-to-many. Pentru a crea aceasta relatie, este necesara adaugarea campului cod_f in tabela Facturi. Intr-o magazie se gasesc mai multe produse, deci relatia dintre tabela Magazii si tabela Produse este de tipul one-to-many. Pentru aceasta este necesara adaugarea campului cod_m in tabela Produse. In acelasi timp un produs se regaseste de mai multe ori (posibil) pe liniile unei facturi, sau pe liniile mai multor facturi. Deci relatia dintre tabela Produse si tabela Liniifact este one-to-many. Pentru a o crea este necesara adaugarea campului cod_p in tabela Liniifact. In final, o factura are mai multe linii, deci relatia dintre tabelele Facturi si Liniifact este de tipul one-to-many. Pentru a realiza aceste leagaturi, unele tabele trebuie completate cu anumite campuri suplimentare, care sa permita crearea ulterioara a relatiilor. Pentru aceasta, in tabela copil, se adauga campul pe care a fost creata cheia primara din tabela parinte. Campurile de tip cheie primara alese vor fi: Furnizori (cod furnizor), Produse (cod produs), Magazii (cod magazin), Facturi (nr fact) si Liniifact (ID). Deci tabelele parinte sunt: Furnizori, Magazii si Facturi, iar Produse si Liniifact sunt tabele Copil. Adaugand si rearanjand tabelele, acestea vor arata ca in figura urmatoare:
Primul pas este crearea bazei de date. Aceasta va purta numele Firme. Pentru a crea baza de date, din meniul File se alege optiunea New, iar din Task Pane-ul New File se alege optiunea Blank Database. Primul pas este alegerea locatiei in care va fi salvat fisierul, apoi denumirea propriu-zisa a acestuia. Dupa crearea bazei de date se trece la analiza fiecarui tabel in parte si alegerea tipului de camp cel mai potrivit datelor care vor fi salvate in acesta. Propunem urmatoarele: in tabela Furnizori: cod_f (codul furnizorului) cheie primara, de tip Number, Field Size: Integer, Decimal Places:0, Caption: cod furnizor, Validation Rule: <=200, Validation Text: Maxim 200 de furnizori, Required: Yes; den_f (denumirea furnizorului) de tip Text, Field Size: 30, Format: >, Caption: denumire furnizor, Required: Yes, Allow Zero Length: No, Indexed: Yes (Duplicates OK); loc_f (localitate) de tip Text, Field Size: 30, Caption: localitate, Default Value: Timisoara; adresa de tip Memo; email de tip Hyperlink; banca de tip Text, Field Size: 30, Format: >, Required: Yes, Allow Zero Length: No; cont (contul din banca, IBAN) de tip Text, Fields Size: 24, Input Mask: 'RO'99>AAAA0000099999999999.
Dupa ce toate campurile au fost create, se salveaza tabela alegand butonul Save, apoi se apasa sageata de pe butonul View, de unde se alege Datasheet View, pentru a introduce datele a trei furnizori in tabela.
in tabela Magazii: cod_m (cod magazin) Primary key, de tip Number, Field Size: Byte, Caption: Cod magazin, Required: Yes; den_m de tip Text, Field Size: 15, Caption: Denumire magazie, Indexed: Yes (Duplicates OK), gest de tip Text, Field Size: 30, Caption: Gestionar. Vom introduce in continuare 3 magazii, cu codurile magazilor 111, 112 si 113;
in tabela Produse: cod_p Primary key, de tip Number, Field Size: Long Integer, Caption: Codul produsului, Required: Yes; den_p (denumirea produsului) tipul campului Text, Field Size:15, Caption: denumirea produsului; um (unitate de masura) de tipul Lookup Wizard, apoi selectam I will type in the values that I want, la optiunea Number of Columns lasam 1, iar in lista col1 vom tasta pe rand, una sub alta, valorile dorite: kg, l, cm, buc, selectand butonul Next, apoi Finish; stoc (stocul disponibil in magazie) de tip Number, Field Size: Long Integer, Caption: unitate de masura, Required: Yes; pret_u, de tip Currency, Caption: Pret unitary; cod_m (cod magazie) un camp de tip Lookup Wizard vom selecta optiunea I want the lookup column to lookup the values in a table or query, apoi se allege tabela Magazii; selectam campul cod_m (cod magazie):
Ordonarea va fi facuta dupa acelasi camp cod_m, putandu-se observa valorile introduse anterior in tabela Magazii:
In continuare se selecteaza butonul Next, apoi Finish. Intre cele doua tabele (Magazii (tabela parinte) si Produse (tabela copil) va fi creata automat o relatie). Pentru ca aceasta relatie sa fie de tipul one-to-many, vom introduce minim 4 produse, 2 dintre ele gasindu-se in aceeasi magazine, de exemplu cea cu codul 113;
tabela Facturi: nr_f (numarul facturii) Primary key, de tip Number, Field Size: Long integer, Caption: Numarul facturii, Required: Yes; data_f de tip Date/Time, Caption: Data Facturii, Required: Yes, Format: Short date, cod_f (cod furnizor) tipul de date Lookup Wizard, ne legam de tabela Furnizori, campul cod_f, Caption: Cod furnizor. Tabela Facturi este copilul tabelei Furnizori. Avand 3 furnizori in tabela parinte, vom introduce minim 4 facturi, codul furnizorului 125 repetandu-se de 2 ori:
tabela Liniifact: ID Primary Key, un camp de tip Autonumber, Caption: Numar curent; nr_f (numarul facturii) un camp de tip Lookup Wizard, ne legam de tabela Facturi, campul nr_f, Caption: Numarul facturii; cod_p (codul produsului) un camp de tip Lookup Wizard, ne legam de tabela Produse, campul cod_p si cant un camp de tip Number, Field Size: Integer, Caption: Cantitate. Acest tabel fiind copilul tabelelor Produse si Facturi, vom introduce minim 5 inregistrari:
Pentru a verifica relatiile si a seta regulile de integritate referentiala, se selecteaza butonul Relationships de pe bara de unelte: :
Pentru fiecare relatie in parte, se apeleaza meniul contextual, se alege optiunea Edit Relationship Pentru a seta regulile de integritate referentiala se selecteaza optiunea Enforce Referential Integrity, bifand optiunea Cascade Update Related Field. Daca se doreste modificarea tipului de relatie dintre cele doua tabele, se selecteaza butonul Join Type, alegand una dintre cele trei tipuri de relatii.
Selectand pentru fiecare relatie in parte optiunile respective, se obtine urmatoarea situatie:
2. Pentru a vizualiza datele intr-o anumita ordine se pot folosi butoanele de pe bara de unelte , sau:
Pentru aceasta trebuie sa fim pozitionati pe o anumita coloana din tabel, in modul de vizualizare Datasheet View. 3. Pentru a filtra datele dintr-o anumita tabela putem selecta fie unul dintre butoanele: Filter by selection, respectiv Filter by form, si Apply/Remove filter, fie una dintre optiunile din urmatoarea figura. Optiunea Filter by Form ascunde inregistrarile, permitand fie selectarea valorii dorite utilizand combo-box-ul corespunzator coloanei dorite, fie introducerea unei sau mai multor valori, operatorul dintre conditiile multiple fiind AND. Pentru a vedea rezultatul, se selecteaza butonul Apply Filer de pe bara de unelte Table Datasheet. Optiunea Filter by selection permite selectarea cu mouse-ul a valorii cautate (efectuandu-se un click in celula respectiva), rezultatul fiind vizibil atunci cand se apasa butonul Apply Filter. Daca se doreste anularea filtrului, se selecteaza butonul Remove Filter (acest buton este un buton de tip On/Off). Filter excluding selection functioneaza exact ca si optiunea Filter by selection, diferenta fiind operatorul NON pus in fata conditiei.
Ultima optiune Advanced Filer/Sort permite deschiderea unei ferestre cu ajutorul careia putem sorta si compune conditii compuse, putandu-se utiliza operatorul OR intre conditii:
2.1. Aplicatie propusaSe cere informatizarea activitatii unei societati de asigurari. Clientii pot fi persoane fizice sau juridice caracterizate printr-un numar unic, nume si prenume/denumire, adresa si telefon. Acestia pot sa incheie diferite tipuri de asigurari (de bunuri, de viata etc). Asigurarile sunt incheiate de agentii ce sunt identificati printr-un cod unic, nume si prenume. Contractul de asigurare este caracterizat printr-un numar, data incheierii, obiectul asigurarii, perioada (in luni), valoarea asigurata si prima ce va trebui sa fie platita in fiecare luna de client. Clientii efectueaza plata primelor prin ordin de plata (persoane juridice) sau direct la casierie (persoane fizice), eliberandu-se chitante. Documentul de plata contine: numarul documentului, data la care a fost intocmit si suma platita. In momentul producerii riscului pentru care a fost intocmita asigurarea, societatea plateste clientului despagubiri. La plata despagubirilor se intocmeste un proces verbal care este caracterizat prin nume, data incheierii, descrierea cauzei ce a generat despagubirea si procentul in care este despagubit clientul. 2.2. Aplicatie propusaSe cere informatizarea activitatii la o filiala CEC. Clientii filialei sunt identificati prin seria si numarul de buletin, data eliberarii buletinului, nume, prenume si adresa. Fiecare client poate sa detina unul sau mai multe cecuri. Pentru fiecare cec se cunoaste: seria, numarul, data la care a fost eliberat, suma depusa in momentul eliberarii si tipul cecului (poate fi la termen si la vedere). De asemenea, fiecare cec poate sa aiba unul sau mai multi titulari. Fiecare client poate efectua depuneri si restituiri. Depunerile se efectueaza prin intermediul unei foi de depunere (FD) caracterizata prin: numar, data si suma depusa. Restituirile se efectueaza prin intermediul foilor de restituire (FR) caracterizate prin: numar, data si suma restituita. Fiecare cec se poate lichida de catre unul din titulari prin intermediul unei foi de lichidare (FL) caracterizata prin: numar, data si suma din momentul lichidarii. Dobanda acordata pentru cecuri se modifica de la o zi la alta si este diferita pentru cecurile la termen fata de cele la vedere. 3. Aplicatia 2Sa se paroleze baza de date. Pentru a vizualiza cat mai sugestiv relatiile dintre tabele, se vor crea formulare cu subformulare. Formularele create vor fi modificate pentru a adauga titluri, butoane de comanda si controale de tip Textbox pentru afisarea si calcularea valorilor TVA si VALOARE. Se cere crearea unei forme de meniu. Aceasta va apela cu ajutorul butoanelor de comanda alte forme, cate una pentru fiecare table, pentru vizualizarea datelor. Se doreste crearea unui panou de comanda (Switchboard) pentru crearea unui meniu care sa contina toate formele. Obiective: Protejarea bazei de date. Vizualizarea datelor cu posibilitatea efectuarii unor operatii elementare asupra acestora. Afisarea unor valori calculate dupa anumite formule. Crearea unei interfete vizuale cu utilizatorul. Rezolvare 1. Pentru a proteja baza de date cu o parola, aceasta trebuie deschisa in mod Exclusive. Pentru aceasta, vom inchide baza de date, alegem optiunea Open, dupa selectarea bazei de date se apasa sageata din dreptul butonului Open, pentru a alege optiunea Open Exclusive.
Apoi, pentru a seta o parola, Tools/Security/Set Database Password:
2. Pentru a crea un formular pentru fiecare tabel in parte, se selecteaza tabelul, apoi din meniul Insert se alege optiunea Autoform. De exemplu, pentru tabela Facturi, fiind tabela parinte tabelei Liniifact, automat se va crea un formular cu un subformular.
3. Pentru a adauga un titlu in antet si butoane de comanda acestei forme, vom utiliza butonul View pentru a trece in Design View:
Pentru a adauga un antet/subsol, din meniul Insert vom alege optiunea Form Header/Footer. Pentru a adauga controale pe forma este necesara afisarea barei de unelte Toolbox, prin apasarea butonului Toolbox de pe bara de unelte.
Pentru a adauga un titlu in partea de antet (Header), se utilizeaza controlul Label de pe bara de unelte, , se tasteaza textul dorit, apoi se formateaza folosind butoanele de pe bara de unelte. Pentru a adauga un control de tip buton de comanda, trebuie ca butonul Control Wizards sa fie selectat. Apoi, se alege butonul Command Button , dand un click in zona de subsol. Aceasta va porni asistentul care permite construirea butonului. Actiunile pe care le putem atasa butonului de comanda sunt grupate in mai multe categorii. De exemplu, pentru a inchide o forma, se selecteaza categoria Form Operations, selectand apoi actiunea Close Form. La apasarea butonului Next asistentul va ghideaza pentru a alege fie o imagine grafica asociata butonului, fie un text. Ultimul pas este dat de denumirea butonului. Dupa conventiile cunoscute, orice buton de comanda are un antet de 3 litere, cmd, deci numele acestuia va fi cmdIesire. Analog se construiesc restul butoanelor dorite. Forma se va salva cu numele Facturi-Liniifact. Analog se construiesc restul formelor.
Vom construi o forma care sa contina datele din tabelele Produse si Liniifact. Pentru aceasta, vom selecta optiunea Create Form in Design View. Vom deschide fereastra Properties pentru a selecta tabelele de unde vor fi preluate datele. Pentru aceasta, fiind pozitionati pe forma, apelam meniul contextual (click-dreapta) si alege Properties:
Daca se alege obiectul Form, prima optiune pe pagina All este Record Source. Daca dorim sa extragem datele dintr-o singura tabela, alegem una dintre cele afisate atunci cand este selectat combo-box-ul. Daca se doreste extragerea datelor din mai multe tabele, se apasa butonul cu trei puncte. Din fereastra Show Table vom alege cele doua tabele, Liniifact si Produse.
Vom alege din cele doua tabele campurile nr_f, den_p, um, pret_u si cant. La inchiderea ferestrei se salveaza interogarea. Pentru a putea utiliza campurile, daca acestea nu apar implicit, se apasa butonul . Prin drag-and-drop, aceste cimpuri vor fi asezate pe forma.
Pentru a calcula un camp, acesta trebuie creat cu ajutorul controlului Text-box de pe bara de unelte Toolbox. Selectand controlul si dand un click pe forma, vom observa o eticheta cu numele Text urmat de un numar, si un text-box in care apare completat Unbound. In locul textului se completeaza: TVA, iar in locul lui Unbound se tasteaza =0,19*[cant]*[pret_u]. Pentru a formata aceasta caseta de text, din fereastra Properties, optiunea Format, se alege Currency.
Analog se calculeaza campul Valoare. 4. Pentru a crea o forma de meniu, se creaza o forma cu ajutorul optiunii Create a Form in Design View, apoi se creeaza butoanele de comanda (cu ajutorul asistentului Control Wizards), selectindu-se de la categoria Form Operation, actiuneaOpen a form, urmand a selecta numele formei care se doreste a fi deschisa atunci cand se executa click pe buton.
Daca apare acest mesaj de eroare, se alege optiunea Yes:
Din fereastra Switchboad Manager se alege optiunea Edit, pentru a edita panoul de comanda principal (Main).
Pentru a crea o noua optiune (un nou buton pe panoul de comanda) se alege butonul New:
Analog se creaza pentru fiecare forma o noua optiune. Pentru a crea un buton care permite parasirea aplicatiei:
Putem alege oricare actiune dintre urmatoarele:
Forma poate fi regasita oricand in cadrul formularelor:
3.1. Aplicatie propusa:Sa se creeze o interfata grafica cu utilizatorul cu ajutorul optiunii Switchboard, fiind create formulare cu subformulare, imbogatite cu butoane de comanda si campuri calculate, pentru baza de date de la Aplicatia 2.1. si 2.2. 4. Aplicatia 3Sa se creeze o interogare care sa permita afisarea informatiilor de pe toate facturile (nr_f, data_f, den_p, cant si pret unitar) pentru data curenta. Sa se creeze o interogare pentru tabela Produse, afisandu-se pentru fiecare inregistrare TVA-ul si Valoarea (cant*pret). Sa se creeze o interogare care sa permita citirea interactiva in momentul executiei a unui numar de factura si afisarea informatiilor legate de aceasta. Sa se creeze o interogare care sa permita afisarea tuturor facturilor eliberate intre 2 date calendaristice (operatorii Between cu And). Sa se creeze prin intermediul unei interogari un nou camp cu numele Observatii care va contine textul Produs eficient daca valoarea este mai mare decat o anumita valoare sau Produs ineficient daca valoarea este mai mica decat acea valoare. Sa se afiseze toate facturile eliberate luna aceasta. Operatorul Like: a. Sa se afiseze toate produsele care incep cu litera p. b. Sa se afiseze doar produsele care sunt din 5 litere si incep cu litera p. Sa se afiseze toate produsele care au preturile 3 si 5 lei. Sa se afiseze toate produsele care nu au completat campul denprodus. Sa se determine pentru fiecare factura valoarea totala. Sa se creeze un nou tabel pe baza tabelelor Facturi, Produse si LiniiFact, rezultatul unei interogari, care sa contina toate datele din toate tabele, suprimand aparitia dublata a campurilor de legatura, tabelul fiind ordonat alfabetic dupa denumirea produselor. Sa se numere cate produse au pretul mai mic decat 100 lei. Sa se salveze interogarea cu numele Minim. Sa se calculeze valoarea totala a facturii cu numarul citit de la tastatura. Sa se salveze interogarea cu numele ValoareTot. Sa se calculeze valoarea medie a valorii tuturor facturilor. Sa se salveze interogarea cu numele Medie. Obiective: Crearea interogarilor de selectie. Functii pentru date calendaristice. Crearea unor campuri calculate. Interogari cu parametru. Operatorii Between, Like, In, Is Null. Functia IIF. Interogari de tip Totals. Interogari de tip Make Table. Rezolvare: 1. Pentru a crea o interogare, se alege obiectul Query, selectand apoi optiunea Create Query In Design View. In fereastra Show table vom selecta pe rand tabelele Facturi, Liniifact si Produse, apasand apoi butonul Add, apoi se inchide fereastra. Pentru a alege campurile dorite, acestea se selecteaza prin dublu-click. Pentru a selecta conditia ne pozitionam sub coloana data_f, pe linia Criteria, unde tastam =Date(). Se salveaza interogarea apasand pe butonul Save. Pentru a vizualiza rezultatul interogarii, de pe butonul View se alege Datasheet View.
Observatie: Daca interogarea nu returneaza nici un rezultatul, inseamna ca nici o inregistrare nu a verificat conditia ca data facturii sa fie data curenta. 2. Pentru a crea a doua interogare, se alege tabela Produse din fereastra Show Tables, apoi se calculeaza campurile TVA si valoare, pe rand, pe linia Field, prima coloana libera: TVA: [pret_u]*[cant]*0,19, respectiv Valoare: [pret_u]*[cant]*1,19. Se salveaza si vizualizeza rezultatul interogarii. Pentru a formata o anumita coloana din interogare (TVA si Valoare), in Design View se selecteaza coloana, se apeleaza meniul contextual optiunea Properties, iar la optiunea Format se alege Currency. Analog se procedeaza si cu coloana Valoare.
Se salveaza interogarea si se vizualizeaza rezultatele. 3. Se selecteaza tabelele Facturi, Produse si Liniifact, campurile: nr_f, data_f, den_p, pret_u si cant. Pentru a crea o interogare cu parametru, care sa permita citirea interactiva a numarului facturii de pe tastatura, pe coloana nr_f, linia Criteria se tasteaza [Introduceti numarul facturii] 4. Se selecteaza tabela Facturi, Liniifact si Produse, campurile: nr_f, data_f, den_p, pret_u si cant:
5. Se deschide interogarea de la punctul 2, in Design View, se salveaza cu alt nume (Save as). Se apeleaza meniul contextual asociat unui nou camp, se alege optiunea Build Event:
Se selecteaza functia IIF, modificand-o astfel: Observatii: IIf([valoare]>50;'Produs eficient';'Produs ineficient'). 6. Vom folosi 2 functii care pot fi aplicate unor date calendaristice: Datepart (o parte dintr-o data calendaristica) si functia Month (extrage luna dintr-o data calendaristica).
a). Se alege tabela Produse, campurile: den_p, pret_u, stoc, um si cod_m. Pe coloana den_p, linia Criteria se tasteaua conditia: LIKE 'p*'. b) Se deschide interogarea de la punctul a), se salveaza cu alt nume, se trece in modul de vizualizare Design View si se modifica conditia: Like 'p????'. 8. Se alege tabela Produse, coloana pret_u, utilizandu-se operatorul IN.
9. Tabela aleasa va fi Produse, campurile: den_p, cant, cod_m. Pe coloana den_p, linia Criteria se tasteaza IS NULL. 10. Deschidem interogarea de la punctul 2, unde avem calculata valoarea. Salvam interogarea cu un alt nume, trecem in Design View si stergem sau modificam restul campurilor, lasand doar urmatoarele: nr_f si valoare.
Se selecteaza butonul Totals de pe bara de unelte, iar sub valoare, pe linia Total, se alege functia SUM. 11. Pentru a crea o noua tabela cu toate inregistrarile din tabelele Facturi, Produse si Liniifact, se adauga toate campurile din aceste tabele, fara a duplica respectivele campuri, iar din meniul Query se alege optiunea Make Table Query, se da un nume tabelei noi create, apoi se salveaza interogarea, si apasa butonul Run pentru a executa actiunea:
Mesajul urmator este doar unul de avertizare, si anume datele salvate in tabele vor fi adaugate in tabelul nou creat. Deci vom apasa butonul Yes.
12. Din fereastra Show Table se alege tabela Produse, utilizandu-se functia COUNT:
13. Pentru a calcula valoarea totala pe fiecare factura in parte, se grupeaza datele dupa numarul facturii (interogari de tip Totals) si se alege functia SUM:
14. Pentru a calcula media se aplica functia AVG:
4.1. Aplicatie propusaSa se incerce toate tipurile de interogari din exemplul anterior pe problemele propuse 2.1 si 2.2. 5. Aplicatia 4Sa se creeze un raport pentru tabelul Furnizori, datele fiind grupate dupa localitate. Sa se creeze un raport pentru afisarea datelor de pe fiecare factura in parte, calculandu-se valoarea facturii si valoarea totala a tuturor facturilor. Sa se creeze rapoarte pentru fiecare tabel si interogare create anterior. Obiective: Crearea rapoartelor cu ajutorul Wizard-ului. Crearea rapoartelor cu datele provenind din mai multe tabele. Adaugarea unor campuri calculate. Rezolvare: 1. Pentru a crea un raport cu ajutorul asistentului, se alege optiunea Create Report by Using Wizard. La primul pas se alege tabela sau interogarea pe baza careia se va crea raportul (Tables/Forms). Din caseta Available Fields se selecteaza campurile dorite, apoi se apasa butonul Next.
La pasul 2 se selecteaza criteriul de grupare, in cazul de fata vom grupa furnizorii dupa localitate. Daca se apasa butonul Grouping Options se pot alege mai multe variante de grupare: dupa prima initiala, a doua, etc
La pasul urmator se selecteaza ordinea in care vor fi afisate inregistrarile in raport:
In continuare se selecteaza orientarea paginii (verticala, orizontala), precum si modul de afisare al informatiilor pe pagina:
La pasul urmator se alege un stil din lista afisata. Ultimul pas permite modificarea titlului raportului (nu este vorba de numele cu care va fi salvat raportul, ci doar textul care va apare in antentul raportului), apoi putem alege intre a vizualiza raportul si a modifica raportul. Pentru a incheia crearea raportului se alege optiunea Finish.
Raportul in modul Design va apare ca in figura urmatoare:
Daca datele care dorim sa apara provin din mai multe tabele, sau avem nevoie de unele campuri calculate, putem crea o interogare in care sa selectam tabelele, calculand campurile dorite, apoi cream raportul pe baza interogarii. Daca se doreste adaugarea unui camp care va fi calculat, se alege de pe bara de unelte Toolbox controlul TextBox. In caseta in care apare Unboand, se incepe cu simbolul =, apoi se tasteaza functia sau formula dorita. Numele campurile vor fi trecute intre paranteze drepte. De exemplu, un camp valoare ar putea fi calculat astfel =[cant]*[pret_u]*0,19 2. Pentru a crea raportul, vom alege ca sursa a datelor interogarea cu numele Valoare. Daca in aceasta interogare avem campuri de tip Numeric, la pasul 3 se selecteaza butonul Summary Option, bifand check-box-urile de sub functia SUM pentru campurile TVA si Valoare.
Pentru a vizualiza raportul, de pe butonul View se alege optiunea Print Preview. 5.1. Aplicatie propusaSa se creeze rapoarte cu ajutorul Wizard-ului si cu ajutorul optiunii Create Report in Design View pentru problemele propuse 2.1 si 2.2. 6. Aplicatia 5
Obiective: Crearea butoanelor de comanda fara ajutorul asistentului. Utilizarea ferestrei Properties pentru a customiza butonul. Prezentarea mediului de programare VBA. Utilizarea comenzii DoCmd cu metodele OpenTable, RunSQL si Quit. Instructiuni VBA citirea de la tastatura a datelor prin InputBox. Instructiuni SQL inserarea unei noi inregistrari, modificarea valorii unui camp, selectia datelor. Rezolvare: In acest caz se va folosi facilitatea Create form in Design View. De pe bara de unelte Toolbox se verifica daca butonul Control Wizard este selectat. Acesta trebuie sa fie deselectat pentru a permite crearea manuala a controalelor, fara ajutorul asistentului. In continuare se alege butonul de comanda Command Button , acesta fiind depozitat pe forma. Apeland meniul contextual asociat butonului de comanda creat pe forma, se selecteaza optiunea Properties si se modifica proprietatile Name: cmdDesPr si Caption: Produse Design. Analog se procedeaza pentru restul butoanelor. Pentru a introduce instructiuni atasate butoanelor trebuie sa apelam editorul Visual Basic. Pentru aceasta, se apeleaza meniul contextual al fiecarui buton in parte, se alege Build event, Code builder, OK. Mediul de programare Visual Basic Application arata ca in figura urmatoare:
In zona de declarare a variabilelor se tasteaza:
Butonul 1 Private Sub cmdDesPr_Click() ' se deschide tabela Produse pt. vizualizare in Design DoCmd.OpenTable 'Produse', acViewDesign End Sub Toate liniile care incep cu caracterul apostrof sunt comentarii, ele vor fi ignorate de compilatorul Visual Basic. Butonul 2 Private Sub cmdDescPr2_Click() ' se deschide tabela Produse pt. vizualizare in Datasheet View DoCmd.OpenTable 'Produse' End Sub Butonul 3 Private Sub cmdInsPr_Click() 'adaugarea unei noi inregistrari DoCmd.RunSQL 'insert into produse values (cod_produs, den_produs, um_produs, stoc_produs, pret_produs, cod_mag)' End Sub Butonul 4 Private Sub cmdModDen_Click() 'modificarea denumirii unui produs la care este cunoscut codul v_cod = InputBox('Introduceti codul produsului la care doriti sa ii modificati denumirea:') DoCmd.RunSQL 'update produse set den_p=denumire where cod_p=' & v_cod End Sub Butonul 5 Private Sub cmdCrTNou_Click() 'selectarea produselor cu stoc 0 si crearea unei tabele cu aceste produse DoCmd.RunSQL 'Select cod_p, den_p, um, stoc, pret_u, cod_m into StocNul from produse where stoc=0' DoCmd.OpenTable 'StocNul' End Sub Butonul 6 Private Sub cmdViz_Click() 'vizualizarea produselor cu codul >= o valoare introdusa de la tastatura v_cod = InputBox('Introduceti un cod pentru a fi afisate produsele cu codul mai mare decat aceasta valoare') DoCmd.RunSQL 'Select cod_p,den_p,um,stoc, pret_u, cod_m into Temp1 from produse where cod_p>=' & v_cod DoCmd.OpenTable 'Temp1' End Sub Butonul 7 Private Sub cmdValoare_Click() DoCmd.RunSQL 'select cod_p, den_p, um, categorie, pret, cant, cant*pret as valoare into Valoare from produse' DoCmd.OpenTable 'Valoare' End Sub Butonul 8 Private Sub cmdIesire_Click() DoCmd.Quit End Sub 6.1 Aplicatie propusaSa se creeze un formular cu optiuni corespunzatoare tabelelor existente create pentru problemele propuse 2.1 si 2.2. GLOSAR DE TERMENI
BibliografieT.Connolly, C.Beg, A.Strachan, Baze de date proiectare, implementare, gesionare, Ed. Teora, Bucuresti, 2001; S.Biriescu, Baze de date in mediul Acces, Ed. Mirton, Timisoara, 2006; D.Danaiata, C.Margea, D.Mogosanu, A.Popovici, Baze de date in mediul Acces, Editura Mirton, Timisoara, 2001; I.Despi, G.Petrov, R.Reisz, A.Stepan, Teoria generala a bazelor de date, Ed. Mirton, Timisoara, 2000; C.Fehily, SQL visual quickstart guide, Ed. All, Bucuresti, 2004; V. Florescu, P.Nastase, F.Berbec, Baze de date fundamente teoretice si practice, Ed. Infomega, Bucuresti, 2002; C.Giulvezan, G.Mircea, Baze de date. Teorie si practica. Acces si VBA, Ed.Universitatii de Vest, Timisoara, 2006; M.J.Hernandez, Proiectarea bazelor de date, Ed. Tora, Bucuresti, 2003; L.Hurbean, Baze de date. Concepte teoretice si abordare practica in Microsoft Access, Ed. Mirton, Timisoara, 2006; F. Ionescu, Baze de date relationale si aplicatii, Ed. Tehnica, Bucuresti, 2004; M.Lupulescu, M.Muntean, C.Giulvezan, FoxPro de la initiere la performanta, Ed. de Vest, Timisoara, 1994; M.Milosescu, Baze de date in Visual FoxPro, Ed. Teora, Bucuresti, 2003; G.Mircea, Access 2002. Tehnici de programare in VBA , Ed. Mirton, Timisoara, 2003 M.Muntean, Note de curs Baze de date, 2007-2008; M.Muntean, Baze de date in sisteme informatice economice, Ed. Mirton, Timisoara, 2002; P.Nastase s.a. Baze de date Microsoft Access 2000, Ed. Teora, Bucuresti, 1999; J.V.Petersen, Baze de date pentru incepatori, Ed. All, Bucuresti, 2002; I.Popescu, Modelarea bazelor de date, ed. Tehnica, Bucuresti, 2001; R.Smith, D.Sussman, Programare in ACCESS 97 VBA, pentru incepatori, Ed. Tora, Bucuresti, 1999; M.Velicanu, I.Lungu, M.Muntean, Dezvoltarea aplicatiilor cu Visual FoxPro, Ed. All, Bucuresti, 2001; ***, Microsoft Visual Basic 6.0 ghidul programatorului, Ed. Teora, Bucuresti, 1999.
|