EXERCIŢII CAPITOLUL 4 4.1. Scrieti câte un program Transact-SQL si PL/SQL pentru calculul factorialului unui număr dat. 4.2. Scrieţi şi executaţi cele două programe care folosesc cursoarele prezentate în secţiunea 4.1.1 (cursor Transact-SQL) şi secţiunea 4.1.2 (cursor PL/SQL) din îndrumar şi urmăriţi rezultatele obţinute. În tabelul ANGAJATI ştergeţi câteva tupluri şi introduceţi altele noi. La o nouă execuţie a oricăruia din programele de mai sus, veţi observa că numărul liniilor afişate scade. Cum explicaţi acest lucru? 4.3. Scrieţi un program (Transact-SQL sau PL/SQL) care parcurge liniile tabelului ANGAJATI, testează valoarea salariului angajatului şi acordaţi mărire de salariu acelor angajaţi care au salariul mai mic decât un salariu minim dat, astfel încât salariul acestora sa fie egal cu salariul minim impus. Să se afişeze lista angajaţilor care au primit mărire de salariu (numele, prenumele, vechiul salariu, noul salariu). Să se calculeze şi să se afişeze numărul total de angajaţi cărora li s-a mărit salariul şi suma totală cu care s-au marit salariile în întreprinderea respectivă. 4.4. În propria bază de date SQL Server, Oracle sau MySQL, adaugaţi tabelele STUDENTI, DISCIPLINE, EXAMENE executând un fişier script. Pentru SQL Server fişierul script este deja creat (Program_4_1.sql din îndrumar); pentru celelalte sisteme se obţine uşor scriptul necesar prin adaptarea celui existent. Introduceţi mai multe linii în aceste tabele. 170
Testaţi cursorul Transact-SQL din Program_4_3.sql, scrieţi şi testaţi un program similar în PL/SQL. 171
4.5. Creaţi sursele ODBC pentru propria bază de date SQL Server, Oracle sau MySQL (în care aţi introdus tabelul STUDENTI). În Programul 4.12 modificaţi numele sursei de date cu numele propriei surse ODBC pentru fiecare sistem de gesţiune, numele utilizatorului şi parola acestuia şi executaţi programul. Urmăriţi ce informaţii sunt necesare pentru conectarea la surse ODBC pentru baze de date din diferite sisteme de gestiune. 172
4.6. Definiţi o sursă de date ODBC cu numele INTREPRINDERE pentru baza de date MS ACCESS Intreprindere.mdb din directorul de aplicaţii. Compilaţi şi executaţi programul Angajati (care se găseşte în directorul Aplicatii\Capitol4\MFC\Angajati\Step1 din 173
îndrumar). Identificaţi elementele de bază ale interfeţei MFC- ODBC: clasa conexiunii la baza de date, (CDatabase), clasa setului de înregistrări (CAngajatiSet), clasa vedere (CAngajatiView), asocierile dintre controalele interfeţei şi variabilele membre ale clasei setului de instrucţiuni. 4.7. Executaţi pasul următor de dezvoltare a aplicaţiei MFC-ODBC Angajati pentru baza de date INTREPRINDERE (Step 2). La execuţia aplicaţiei trebuie să obtineţi o fereastră de afişare asemănătoare celei din Fig. 4. 2. Realizaţi pasul următor al aplicaţiei (Step 3), aşa cum este descris în îndrumar. Verificaţi comenzile de introducere, ştergere, actualizare a liniilor tabelului ANGAJATI din program. 4.8. Compilaţi şi executaţi aplicaţia SA din directorul MFC al acestui capitol, în cele două variante Step 1 şi Step 2. Urmăriţi în fişierele proiectului modul de definire a mai multor formulare în proiectul SDI (Step 1) şi în proiectul MDI (Step 2). 4.9.* Folosind aceeaşi bază de date ca mai sus (INTREPRINDERE), dezvoltaţi o aplicaţie MFC-ODBC de tip SDI pentru interogarea: Care sunt numele, prenumele şi adresa furnizorilor care au livrat o componentă a cărei denumire este dată ca parametru? Pentru această interogare se folosesc tabelele FURNIZORI,ACHIZITII,COMPONENTE, parametrul este atributul Denumire din tabelul COMPONENTE, iar instrucţiunea SQL care realizează această interogare este: SELECT Nume,Prenume,Adresa FROM FURNIZORI,ACHIZITII,COMPONENTE WHERE FURNIZORI.IdFurnizor = ACHIZITII.IdFurnizor 174
AND COMPONENTE.IdComponenta = ACHIZITII.IdComponenta AND Denumire=parametru Pentru afişare folosiţi clasa vedere (formularul CRecordView) care se creează implicit la crearea proiectului. Adaugaţi încă două formulare, pentru listarea tuturor furnizorilor şi a tuturor componentelor şi asiguraţi selecţia între formulare prin comenzi de meniu (aşa cum este explicat în secţiunea 4.2.2.5). 4.10.* Folosind aceeaşi bază de date ca mai sus (INTREPRINDERE), dezvoltaţi o aplicaţie MFC-ODBC pentru interogarea: Care sunt numele, prenumele şi adresa clienţilor care au cumpărat un produs a cărui denumire este dată ca parametru? Pentru această interogare se folosesc tabelele CLIENTI,VANZARI,PRODUSE, parametrul este atributul Denumire din tabelul PRODUSE, iar instrucţiunea SQL care realizează această interogare este: SELECT Nume,Prenume,Adresa FROM CLIENTI,VANZARI,PRODUSE WHERE CLIENTI.IdClient = VANZARI.IdClient AND PRODUSE.IdProdus = VANZARI.IdProdus AND Denumire=parametru Pentru afişare folosiţi clasa vedere (formularul CRecordView) care se creează implicit la crearea proiectului. Adaugaţi încă două formulare, pentru listarea tuturor clienţilor şi a tuturor produselor şi asiguraţi selecţia între formulare prin comenzi de meniu (aşa cum este explicat în secţiunea 4.2.2.5). 4.11.* Folosind aceeaşi bază de date ca mai sus (INTREPRINDERE), dezvoltaţi o aplicaţie MFC-ODBC de tip SDI pentru interogarea: Care sunt numele, prenumele şi data naşterii angajaţilor care participă la un proiect a cărui denumire 175
este dată ca parametru? Pentru această interogare se folosesc tabelele ANGAJATI,ACTIVITATI,PROIECTE, parametrul este atributul Denumire din tabelul PROIECTE, iar instrucţiunea SQL care realizează această interogare este: SELECT Nume,Prenume,DataNasterii FROM ANGAJATI,ACTIVITATI,PROIECTE WHERE ANGAJATI.IdAngajat = ACTIVITATI.IdAngajat AND PROIECTE.IdProiect = ACTIVITATI.IdProiect AND Denumire=parametru; Pentru afişare folosiţi clasa vedere (formularul CRecordView) care se creează implicit la crearea proiectului. Adaugaţi încă un formular, pentru listarea tuturor proiectelor şi asiguraţi selecţia între formulare prin comenzi de meniu (aşa cum este explicat în secţiunea 4.2.2.5). 4.12.* Proiectaţi baza de date PUBLICATII (descrisă în Exercitiul 2.9) şi sursa de date ODBC corespunzătoare. Se consideră următoarele definiţii ale tabelelor: DOMENII(IdDomeniu, Denumire) CARTI(IdCarte,Titlul,DataAparitiei,Editura,Localita tea,tara,iddomeniu) AUTORI(IdAutor,Nume,Prenume,AnulNasterii) PUBLICATII(IdPublicatie,IdCarte,IdAutor,Ordinea) 4.13.* Dezvoltaţi o aplicaţie MFC-ODBC de tip SDI pentru interogarea Care sunt titlul, data apariţiei şi editura cărţilor dintr-un domeniu dat ca parametru? asupra bazei de date PUBLICATII. Pentru această interogare se folosesc tabelele DOMENII şi CARTI, parametrul este atributul Denumire din tabelul DOMENII, iar intrucţiunea SQL care realizează această interogare este: SELECT Titlul,DataAparitiei,Editura FROM CARTI, DOMENII WHERE DOMENII.IdDomeniu = CARTI.IdDomeniu AND Denumire = parametru; 176