or Visual Fox Pro 8.0

85
Radu Lixăndroiu Dana Lupşa LIMBAJE DE PROGRAMARE ŞI BAZE DE DATE SUPORT PENTRU LABORATOR BRAŞOV - 2006

Transcript of or Visual Fox Pro 8.0

Page 1: or Visual Fox Pro 8.0

Radu Lixăndroiu Dana Lupşa

LIMBAJE DE PROGRAMARE ŞI BAZE DE DATE

SUPORT PENTRU LABORATOR

BRAŞOV - 2006

Page 2: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 1

SISTEMUL DE GESTIUNE A BAZELOR DE DATE

Principalele obiective ale capitolului sunt:

Concepte principale din teoria relaţională Cheia primară Cheia externă

Sisteme de gestiune a bazelor de date

Sistemul de gestiune a bazelor de date (SGBD) este componenta unui sistem de bază de date care are rolul de a permite descrierea şi manipularea conform unui model de date. În momentul actual, cea mai mare parte a SGBD-urilor care se utilizează sunt bazate pe modelul relaţional. VFP este un SGBD relaţional cu limbaj propriu, care suportă un nucleu extins din limbajul relaţional SQL (Structured Query Language).

Page 3: or Visual Fox Pro 8.0

Suport pentru laborator

2

PRINCIPALELE CONCEPTE DIN TEORIA RELAŢIONALĂ

Domeniul - reprezintă un ansamblu de valori, caracterizat

printr-un nume. Domeniul se poate defini explicit, prin enumerarea tuturor valorilor care aparţin acestuia (exemplu D1:{roşu, galben, albastru}), sau implicit prin precizarea proprietăţilor pe care le au valorile domeniului respectiv (exemplu: D2:{e/e N∈ }

Relaţia - (tabela) reprezintă un subansamblu al produsului cartezian dintre mai multe domenii (D1xD2x…) caracterizat printr-un nume. Reprezentarea folosită pentru o relaţie (R) este tabloul bidimensional (tabela de date) de forma:

Atributul este coloana unei relaţii caracterizate printr-un nume. Fiecare atribut îşi ia valorile dintr-un domeniu. Mai multe atribute pot lua valori din acelaşi domeniu.

Tuplul este linia dintr-o relaţie şi nu are nume. Valorile dintr-un tuplu aparţin produsului cartezian dintre domeniile relaţiei (exemplu tuplul v1, v2, ...,vn, unde v1∈D1, v2∈D2,...,vn∈Dm, cu n≥ m numere întregi).

Schema relaţiei este un ansamblu format din numele relaţiei (R) urmat între parantaze rotunde de lista atributelor (Ai), pentru fiecare atribut precizându-se domeniul asociat (Dj): R(A1:D1, A2:D2,...,An:Dm):

unde n≥ m numere întregi. Cheia este un atribut sau un ansamblu de atribute cu ajutorul

căruia se poate identifica un tuplu dintr-o relaţie. Cheia este primară dacă identificarea este unică, adică există

un singur tuplu cu o anumită valoare pentru cheie.

Page 4: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 3

Cheia este simplă, dacă este formată dintr-un singur atribut. Cheia este compusă dacă este formată dintr-un ansamblu de

atribute. Cheia este externă într-o relaţie R1, dacă ansamblul de

atribute care o defineşte ia valori din aceleaşi domenii ca şi cheia primară a unei relaţii R2 si dacă are rolul de a stabili o legătura (asociere) între cele două relaţii.

Prezentare comparativă a noţiunilor privind organizarea

datelor în memoria externă în fişiere, baze de date relaţionale (BDR) şi cele utilizate în VFP.

Intrebări: 1. Pentru tabelele FURNIZORI şi FACTURI (ANEXA 1) care sunt cheile? 2. Daţi exemplu de un atribut şi de un tuplu pentru relaţia FACTURI (ANEXA 1)

Mem externă

FISIER CÂMP - CHEIE - -

BDR RELAŢIE ATRIBUT ASOCIERE CHEIE PRIMARĂ

CHEIE EXTERNĂ

DOMENIU

VFP TABELĂ CÂMP ASOCIERE (LEGATURA)

CHEIE PRIMARĂ

CHEIE -

Page 5: or Visual Fox Pro 8.0

Suport pentru laborator

4

GENERALITĂŢI DESPRE APLICAŢIA VISUAL FOX PRO

Principalele obiective ale capitolului sunt:

Prezentarea şi utilizare aplicaţia Visual Fox Pro

Baze de date Crearea, consultarea şi actualizarea tabelelor

Visual Fox Pro (VFP) este un limbaj specializat în prelucrarea datelor, grupate în baze de date, permiţând întregistrarea, păstrarea, regăsirea şi analiza cu uşurinţă a acestora. O bază de date reprezintă o colecţie de informaţii - de exemplu nume, adrese, produse, facturi – care pot fi gestionate cu ajutorul unor aplicaţii specifice, printre care şi Visual Fox Pro. Pentru o mai bună organizare a bazelor de date sau a celorlalte obiecte, acestea sunt grupate într-un proiect, care reprezintă de asemenea şi baza realizării formatului distribuibil (executabil).

Page 6: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 5

UTILIZAREA APLICAŢIEI VISUAL FOX PRO

1. Clic pe Start 2. Activaţi opţiunea Programs 3. Clic pe pictograma aplicaţiei Visual Fox Pro

VFP dispune de o fereastră principală care cuprinde:

Elementele ferestrei VFP

Proiectele sunt formate din mai multe obiecte: Obiect Descriere

Tabelele sunt formate din câmpuri (coloane) – care formează structura tabelei şi înregistrări (rânduri) – reprezentând conţinutul tabelei. În cadrul fiecărui câmp există mai multe valori.

O bază de date trebuie să conţină cel puţin o tabelă.

Interogări ale tabelelor sau bazelor de date, respectiv decuparea şi prezentarea datelor în funcţie de anumite condiţii.

Formularele reprezintă ferestre personalizate care oferă un acces şi o vizualizare facilă a datelor dintr-o tabelă sau o interogare.

Rapoartele prezintă datele dintr-o tabelă sau o interogare într-un format imprimabil.

bară de instrumente

bară de meniu

fereastră de comenzi

Page 7: or Visual Fox Pro 8.0

Suport pentru laborator

6

CREAREA UNUI PROIECT Pentru realizarea unui proiect, se procedează astfel: 1. Clic pe meniul File 2. Se activează opţiunea New 3. Se bifează opţiunea Project 4. Clic pe butonul New File 5. Se atribuie un nume proiectului şi se salvează în locaţia dorită.

Crearea unui nou proiect

VFP pune la dispoziţia utilizatorilor un coordonator al întregii activităţi denumit “Project Manager”, care dispune de o fereastră cu 6 pagini ce grupează pe categorii elementele componente ale unui proiect şi o bară cu opţiuni dependentă de context.

Page 8: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 7

Fereastra Project Manager – fără tabele sau baze de date

În cazul în care fereastra Project Manager se închide,

redeschiderea acesteia se realizează prin alegerea din meniul File a opţiunii Open şi apoi prin căutarea proiectului dorit în locaţia în care a fost salvat.

CREAREA ŞI CONSULTAREA UNEI TABELE

Crearea tabelelor se realizează în două etape: I. Crearea structurii tabelelor (creare câmpuri); II. Crearea conţinutului tabelei (încărcarea informţiilor).

Pentru crearea structurii unei tabele se procedează astfel: 1. Se deschide/crează un proiect. 2. Din fereastra Project Manager se execută clic pe pagina Data. 3. Se execută clic pe opţiunea Free Tables, apoi pe butonul New şi

New Table. 4. Se atribuie o denumire tabelei şi se allege locaţi în care va fi

salvată. În urma acestei acţiuni rezultă o fereastră denumită Table Designer.

În fereastra Table Designer există 3 pagini:

Page 9: or Visual Fox Pro 8.0

Suport pentru laborator

8

Fereastra Table Designer

• Fields

(pagina de câmpuri);

• Indexes (pagina de indecşi);

• Table (tabele), cu informaţii despre tabelă.

Pagina Fields cuprinde:

• denumire câmp (name); • tip date (valori) aferente

câmpului (type); • mărimea maximă a

valorilor (width);

• opţiunea specifică tipului de date numeric (decimal);

• indecşi (index); • indicatorul Null (dacă nu

există momentan date). Datele sunt de mai multe tipuri: numeric (numeric, real, integer, currency, double); şiruri de caractere; logic; dată calendaristică; moment de timp; memo şi general. La acţionarea butonului OK utilizatorul este interogaţ dacă doreşte să introducă date în tabelă, iar la alegerea opţiunii YES se pot introduce informaţii.

Fereastra de confirmare

Page 10: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 9

La revenirea în Project Manager (PM) se observă la rubrica

Free tables semnul + care arată faptul că au fost create tabele libere (neaparţinând unei bază de date).

Feareastra Project Manager – cu o tabelă

În partea din dreapta a ferestrei PM, în pagina Data se

observă, există mai multe butoane pentru diverse opţiuni, astfel:

• new – creare tabelă nouă; • add – adăugare tabelă

creată anterior; • modify – modificare

structură tabelă;

• browse – vizualizare înregistrări tabelă;

• remove – eliminare/ştergere tabelă din proiectul curent;

• build.

Consultarea conţinutului unei tabele se realizează astfel: 1. În Project Manager, în pagina Data se selectează tabela

dorită. 2. Se execută clic pe butonul Browse.

ACTUALIZAREA STRUCTURII UNEI TABELE

Actualizarea structurii unei tabele, similar cu actualizarea conţinutului, este marcată de trei operaţii: adăugare, modificare şi ştergere a înregistrărilor, toate implicând vizualizarea iniţială a structurii tabelei cu ajutorul butonului/comenzii Modify/Modify structure.

Buton pentru acces la structura tabelei/bazei de date

Buton pentru acces la conţinutul tabelei

Page 11: or Visual Fox Pro 8.0

Suport pentru laborator

10

A. Adăugarea şi modificarea câmpurilor se realizează astfel: 1. Din fereastra Project Manager se execută clic pe pagina Data şi se alege denumirea tabelei care trebuie actualizată.

2. Se execută clic pe butonul Modify. 3. Se realizează direct acţiunea dorită. B. Ştergerea câmpurilor se realizează astfel: 1. Din fereastra Project Manager se execută clic pe pagina Data şi se alege denumirea tabelei care trebuie actualizată.

2. Se execută clic pe butonul Modify. 3. Se execută clic pe denumirea câmpului care se doreşte a fi şters şi apoi pe butonul Delete.

ACTUALIZAREA CONŢINUTULUI UNEI TABELE Actualizarea conţinutului unei tabele este marcată de trei operaţii: adăugare, modificare şi ştergere a înregistrărilor, toate implicând vizualizarea iniţială a conţinutului tabelei cu ajutorul butonului/comenzii Browse.

A. Adăugarea înregistrărilor se realizează astfel: Pentru a adăuga o singură înregistrare: 1. Din fereastra Project Manager se execută clic pe pagina Data şi se alege tabele care trebuie actualizată.

2. Se execută clic pe butonul Browse. 3. Din meniul Table se activează opţiunea Append New Record şi se adaugă o înregistrare.

Pentru a adăuga mai multe înregistrări: 1. Din fereastra Project Manager se execută clic pe pagina Data şi se alege tabele care trebuie actualizată.

2. Se execută clic pe butonul Browse. 3. Din meniul View se activează opţiunea Append Mode şi se adugă, rând pe rând mai multe înregistrări.

B. Modificarea înregistrărilor se realizează după cum urmează: Pentru a modifica independent înregistrările:

Page 12: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 11

1. Din fereastra Project Manager se execută clic pe pagina Data şi apoi pe butonul Browse efectuându-se apoi modificasrea pentru înregistrarea dorită.

Pentru a modifica înregistrările în funcţie de anumite criterii

1. Din fereastra Project Manager se execută clic pe pagina Data şi apoi pe butonul Browse. 2. Din meniul Table se activează opţiunea Replace Field. 3. Rezultă o fereastră în care la opţiunea Field... With... (se alege câmpul în care va fi modificată cu informaţia) completând Replacement Criteria (domeniul înregistrărilor = totalitatea înregistrărilor afectate de execuţia unei comenzi).

Vizualizarea conţinutului tabelei şi modificarea înregistrărilor

Stabilirea domeniului înregistrărilor se face : b. static (independent de informaţiile conţinute în înregistrări),

utilizând clauzele: • All – se referă la toate înregistrările; • Next – de exemplu următoarele 4 înregistrări începând

cu înregistrarea curentă; • Rest – se referă la înregistrarea curenta şi la toate

celelalte înregistrări până la sfârşitul tabelei; • Record – înregistrarea a patra, de exemplu.

c. dinamic (în funcţie de informaţiile conţinute în înregistrări) utilizând:

Page 13: or Visual Fox Pro 8.0

Suport pentru laborator

12

• for <condiţie> se referă la toate înregistrările din tabelă pentru care condiţia este adevarată;

• while <condiţie> se referă la înregistrările cuprinse între înregistrarea curentă şi prima înregistrare pentru care condiţia este falsă.

C. Ştergerea înregistrărilor se realizează în două moduri a) Ştergere logică, acest tip de ştergere permiţând recuperarea

înregistrărilor. 1. Se vizulizează conţinutul tabelei. 2. Se acţionează cu mouse-ul spaţiul de ştergere aflat în stânga

înregistrării care se doreşte a fi ştearsă logic, moment în care înregistrarea va fi marcată. Înregistrarea poate fi recuperată executând un clic pe celaşi spaţiu.

Ştergerea logică a înregistrărilor

Pentru ştergerea unor înregistrări care îndeplinesc o anumită condiţie se utilizează din meniul Table opţiunea Delete Records. În fereastra rezultată se stabileşte domeniul înregistrărilor. b) Ştergere fizică, acest tip de ştergere nepermiţând recuperarea

înregistrărilor. 1. Se vizualizează conţinutul tabelei. 2. Se şterg logic înregistrările dorite. 3. Din meniul Table se alege opţiunea Remove Deleted Records

apoi se execută clic pe butonul Yes.

Page 14: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 13

Confirmarea ştergerii fizice a unei înregistrări

Intrebări: Care sunt componentele unei tabele? Cum se construieşte o tabelă în Visual Fox Pro? Ce înseamnă actualizarea conţinutului unei tabele? Cum se actualizează conţinutul unei tabele? Prezentatţi modul de vizualizare a conţinututlui unei tabele. Prezentaţi modul de actualizare a structurii unei tabele.

Studiu individual Aplicaţia 1: Creare şi actualizare tabelă.

APLICAŢIA 1 Creaţi o tabelă următoarea structură:

Nume C 30 Prenume C 30 Cod N 3 Oras C 20 Medie N 6 ; 2 Admis L

Page 15: or Visual Fox Pro 8.0

Suport pentru laborator

14

şi cu următorul conţinut : Nume Prenume Cod Oras Medie Admis Ionescu Maria 1 Iasi 9.27 Vlad Mirela 8 Deva 9.50 Georgecu Ana 5 Cluj 8.85 Popescu Denisa 4 Arad 9.33 Rauta Andreea 6 Deva 9.50 Stanciu Roxana 2 Deva 9.10 Radulescu Ruxandra 3 Cluj 9.29 Matei Iuliana 7 Ploiesti 9.60 a) Să se adauge un nou câmp, denumit Admis. b) Se presupune că doar candidatele cu medii peste 9.25 au fost

admise. Să se completeze valorile corespunzătoare pentru câmpul Admis.

c) Candidatele din Deva sunt de fapt din Bucureşti. Să se modifice

valorile corespunzătoare din câmpul oraş, stabilind domeniul înregistrărilor cu for.

d) Să se adauge înregistrarea: Cretulescu Alexandra 9 Orastie 8.00 F e) Să se şteargă logic înregistrările aferente candidatelor care au

obţinut medie mai mică decât 9.10, utilizând opţiunea Delete Record şi stabilind domeniul înregistrărilor cu for.

f) Să se şteargă fizic înregistrările şterse logic la punctul anterior.

Page 16: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 15

Baze de date. Sortare. Indexare

Principalele obiective ale capitolului sunt:

Crearea unei baze de date

Înţelegerea conceptelor de sortare şi indexare Înţelegerea noţiunii de index. Tipuri de indecşi

Validare la nivel de câmp şi înregistrare

CREAREA UNEI BAZE DE DATE O bază de date este formată din una sau mai multe tabele cu legături între ele şi eventual secvenţe de cod. Pentru crearea unei baze de date se parcurge următoarea succesiune de paşi: 1. Se crează un nou proiect, rezultând pagina Project Manager. 2. Din pagina Data se selectează opţiunea Databases, se execută clic pe butonul New şi se crează o baza de date, rezultând o fereastră denumită Database Designer. 3. În fereastra Project Manager se execută click pe semnul ‘+’ apărut în faţa denumirii bazei de date. Se selectează opţiunea Tables şi se execută clic pe butonul New.

Page 17: or Visual Fox Pro 8.0

Suport pentru laborator

16

Fereastra Database Designer

Fereastra Project Manager cu o

tabelă şi o bază de date

SORTAREA ŞI INDEXAREA UNEI TABELE Sortarea reprezintă ordonarea fizică a înregistrărilor unei tabele. În urma sortării rezultă o noua tabelă în care înregistrările sunt aranjate într-o anumita ordine. Ordonarea fizică a înregistrărilor tabelei se realizează utilizând instrucţiunea: sort on <denumire câmp> to <denumire fisier nou> Aceasta va fi aşadar scrisă în fereastra de comenzi, urmată de apăsarea butonului Enter de la tastatură. Pentru a vizualiza conţinutul noii tabele, mai întâi aceasta se deschide, utilizând comanda use <denumire fişier nou>. Se execută comanda browse. Indexarea reprezintă ordonarea logică a înregistrărilor unei tabele. În urma indexării înregistrările tabelei sunt vizualizate într-o anumită ordine, dată de index. Se pot stabili mai mulţi indecşi dar numai unul este activ la un moment dat. Indexul poate fi :

• Regular (normal) • Unique (unic), adică într-un câmp pot fi introduse valori egale,

dar prin alegerea acestui tip de index doar prima în ordinea apariţiei va fi accesibilă

Page 18: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 17

• Primary (primar), adică cel care asigură identificarea unică a înregistrărilor unei tabele. Acest tip de index poate fi stabilit doar dacă tabela face parte dintr-o bază de date. Pentru o tabelă se poate stabili un singur index primar. Indexul primar obligă ca toate valorile din câmpul ales să fie distincte.

• Candidate (candidat), utilizat în cazul în care într-o tabela este nevoie de mai multe câmpuri cu valori distincte. Deoarece se poate stabili doar un singur index primar, pentru celelalte câmpuri în care sunt necesare valori distincte, se aleg indecşi de tip candidat.

MODUL DE STABILIRE A INDECŞILOR a) Din fereastra Project Manager se selectează denumirea tabelei care face parte din baza de date. b) Se execută un clic pe butonul Modify. c) În fereastra care rezultă, denumită Table designer, în pagina Fields se execută un clic pe câmpul care va fi stabilit ca index. d) Din opţiunea Index se alege Ascending (crescător) sau Descending (descrescător), adcă valorile din câmpul respectiv vor fi ordonate crescător/descrescător.

Fereastra Table Designer – opţiunile Ascending/Descending

g) Din fereastra Table designer , pagina Indexes , optiunea Type se alege tipul de index dorit.

Page 19: or Visual Fox Pro 8.0

Suport pentru laborator

18

Fereastra Table Designer – tipuri de indecşi

MODUL DE ACTIVARE A INDECŞILOR a) Se vizualizeaza conţinutul tabelei. b) Din meniul Table se selectează optiunea Properties. Din pagina Index order se alege denumirea câmpului care se doreşte a fi activat. c) Se execută clic pe butonul OK.

Fereastra de activare unui index

Page 20: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 19

Alte opţiuni aferente unei tabele dintr-o bază de date

1. Se selecteaza denumirea tabelei din fereastra Project Manager, se executa Modify. 2. În pafina Fields , în josul paginii există anumite opţiuni care vor fi utlizate după cum urmează:

• Format: stabileşte un format de editare pentru valorile unui câmp, de exemplu formatul “a” permite introducerea numai a literelor şi a cifrelor.

Cum se procedează ? Se executa clic pe câmpul dorit şi în opţiunea Format se scrie litera a.

• Input mask : permite stabilirea unei “măşti de intrare”, de

exemplu, stabilirea faptului că prima litera va fi majusculă Cum se procedeaza ? Se executa clic pe campul dorit şi în opţiunea Input mask se scrie : !aaaaaaaaaa.

• Caption : permite stabilirea unei denumiri mai lungi pentru câmpuri

Cum se procedează ? Se execută clic pe câmpul căruia se doreşte a se modifica denumirea şi în opţiunea Caption se scrie denumirea dorită, având un număr mai mare de caractere decât cel permis în mod uzual.

• Field Validation : permite validarea la nivel de câmp, adică interzice ieşirea din acel câmp dacă informaţia introdusă nu a corespuns unei cerinţe.

Page 21: or Visual Fox Pro 8.0

Suport pentru laborator

20

Cum se procedează ? Se executa clic pe câmpul ales şi în opţiunea Rule se scrie condiţia, în opţiune Message existând posibilitatea scrierii unui measaj. Observaţie : mesajul va fi afişat când condiţia de validare la nivelul câmpului nu este respectată. În pagina Table există următoarele opţiuni :

• Record Validation : se poate realiza validarea la nivel de înregistrare

Cum se procedează ? În opţiunea Rule se scrie condiţia, în opţiune Message se va scrie un mesaj corespunzător, aferent încălcării condiţiei. Obs : mesajul va fi afişat când condiţia de validare la nivelul înregistrărilor nu este respectată.

• Insert trigger : limitează introducerea de noi înregistrări Cum se procedează ? În opţiunea Insert trigger se scrie condiţia utilizând, de exemplu, RECNO()< sau > o valoare.

• Update trigger : restricţionează modificarea denumirii oricărui câmp din tabelă.

Page 22: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 21

Cum se procedează ? În opţiunea Update trigger se scrie .F.

• Delete trigger : interzice ştergerea oricărei înregistrări din tabelă, de exemplu se interzice ştergerea unei înregistrări.

Cum se procedează ? În opţiunea Delete trigger se scrie RECNO()#<număr înregistrare>

• Table comment: permite adăugarea unui comentariu referitor

la înregistrările, structura sau utilitatea tabelei. Tot în cadrul acestei pagini se regăsesc şi informaţii despre locaţia pe hard disk unde se află tabela, precum şi numărul de înregistrări şi de câmpuri. Observaţie:

• pentru a vizualiza data în ordine azi/luna/an, în fereastra de comenzi se execută comanda set date to dmy

• pentru a vizualiza anul de forma ‘1998’ in loc de ‘98’ se execută comanda set century on

Intrebări: Care este diferenţa dintre o tabelă şi o bază de date? Ce înseamnă sortarea? Dar indexarea? Care sunt diferenţele dintre cele două concepte? Ce semnifică noţiunile de validare la nivel de câmp şi validare la nivel de înregistrare?

Studiu individual APLICAŢIA 2: Creare bază de date, creare tabelă, stabilire şi activare indecşi, utilizarea opţiunilor suplimentare privind tabelele (validare la nivel de câmp şi la nivel de înregistrare).

Page 23: or Visual Fox Pro 8.0

Suport pentru laborator

22

APLICAŢIA 2

Să se creeze baza de date denumită STUDENT în care se află o tabelă cu următoarea structură:

Marca N 4 Nume C 30 Prenume C 30 Oras C 20 Data_ang D 8 Salariu N 10

şi cu următorul conţinut :

Marca Nume Prenume Oras Data_ang Salariu 1 Ionescu Maria Iasi 11.01.00 500 13 Vlad Mirela Deva 04.04.99 600 134 Radu Andrei Cluj 12.07.03 350 140 Stan Denisa Arad 03.11.01 380 7 Rauta Andreea Deva 07.30.00 650 18 Stanciu Alex Brasov 08.15.98 400 39 Radulescu Ruxandra Cluj 09.16.00 260 57 Matei Iuliana Ploiesti 10.10.02 390 241 Cretulescu Alexandra Orastie 02.11.03 100 114 Filip Carmen Oradea 03.01.02 850

1. Să se sorteze tabela. Să se vizualizeze conţinutul tebelei

rezultate. 2. Să se stabilească următorii indecşi: marca – index de tip primar

şi oraş – index de tip normal. 3. Să se activeze pe rând indecşii stabiliţi la puncul anterior. 4. Să se stabilească pentru câmpul oraş formatul a. 5. să se stabilească faptul că pentru câmpul oraş prima literă va fi

majusculă. 6. Să se stabilească pentru câmpul oraş o denimre mai lungă,

respectiv: Locul nasterii angajatului 7. Regula de validare la nivelul câmpului marca nu permite valori

mai mici decât 250. Să se stabilească acestă regulă şi, în cazul în care aceasta este încălcată să se afişeze mesajul: Marca trebuie sa fie mai mica decat 250.

8. Introduceţi o nouă înregistrare în care valoarea din câmpul marca să încalce regula. Ce se întâmplă?

Page 24: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 23

9. Regula de validare la nivelul înregistrărilor stabileşte ca salariul să nu fie mai mic decât 300. Să se stabilească acestă regulă şi, în cazul în care aceasta este încălcată să se afişeze mesajul: Salariul trebuie sa fie mai mare decat 300.

10. Introduceţi o nouă înregistrare în care valoarea din câmpul salariu să încalce regula. Ce se întâmplă?

11. Limitaţi introducerea de noi înregistrări la 14 şi apoi introduceţi o nouă înregistrare. Ce se întâmplă?

12. Restricţionaţi modificarea denumirii oricărui câmp din tabelă. Verificaţi.

13. Interziceţi ştergerea primei înregistrări. Verificaţi. 14. Adăugaţi următorul comentariu referitor la tabelă: Aceasta tabela

este utilizata pentru evidenta salaratilor firmei ALFA SRL, de la infiintare pana in prezent.

Page 25: or Visual Fox Pro 8.0

Suport pentru laborator

24

BAZE DE DATE. LEGĂTURI ÎNTRE TABELE

Principalele obiective ale capitolului sunt:

Prezentarea tipurilor de legături între tabelele

aparţinând unei baze de date

Între doua sau mai multe tabele aparţinând unei baze de date se pot stabili două tipuri de legături (relaţii): 1. legături temporare : valabile în cadrul sesiunii de lucru curente 2. legături permanente : valabile ori de câte ori se deschide baza

de date, se construiesc o singură dată şi fac parte integrantă din baza de date

La stabilirea unei relaţii între două tabele una dintre tabele are rol conducător, fiind denumită tabela-părinte şi cealaltă tabelă este condusă, fiind denumită tabela-fiu. Legăturile se stabilesc pe baza unui câmp comun celor două tabele, pentru valori egale aflate în acele câmpuri. Pentru tabela-părinte acest câmp se numeşte cheie primară, iar pentru tabela-fiu câmpul se numeşte cheie externă.

Page 26: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 25

De asemenea se impune o precizare: cheia primară reprezintă un câmp ale cărui valori au rol unic de identificare a fiecărei înregistrări. De exemplu, CNP este cheie primară într-o tabelă cu informaţii despre populaţia unui oraş, deoarece fiecare cetăţean are un singur CNP, deci fiecere înregistrare va fi unică, nu pot exista două înregistrări cu aceeaşi valoare CNP. Stabilirea legăturilor temporare şi a legăturilor permanente presupune realizarea simultană a trei condiţii:

a) existenţa unei baze de date cu cel puţin două tabele ; b) în tabela-părinte câmpul comun este index primar c) în tabela-fiu câmpul comun este stabilit ca fiind index – de

obicei normal.

LEGĂTURI TEMPORARE

1. Se crează un nou proiect sau se deschide un proiect existent, conţinând o bază de date.

2. Se verifică existenţa indecşilor sau se stabilesc indecşii în cazul în care nu sunt stabiliţi.

3. Din meniul Window se alege opţiunea Data Session. Se execută clic pe butonul Open, pentru a deschide tabelele.

4. Din fereastra obţinută astfel, denumită Open, se execută clic pe tabela care se doreşte a fi deschisă, bifând de semenea opţiunea Exclusive, apoi se execută clic pe butonul OK.

Fereastra Data Session

5. Se procedează similar pentru toate tabelele pentru care se

doreşte stabilirea unor legături temporare.

Page 27: or Visual Fox Pro 8.0

Suport pentru laborator

26

6. Se execută clic pe denumirea tabelei-părinte. Se execută clic pe butonul Relations.

7. În fereastra rezultantă, denumită denumită Set Index Order se execută OK, apoi în fereastra Expression Builder, în dreptul opţiunii SET RELATION se scrie denumirea câmpului comun, în cazul în care această denumire nu există deja.

8. Se execută clic pe butonul OK. În acest moment între cele două tabele a fost realizată o legătură temporară de tip one-to-one.

Fereastra Expression Builder

9. În cazul în care se doreşte realizarea unei legături de tip one-to-

many, se execută clic pe butonul 1 to many. Din fereastra rezultată, denumită Create One-To-Many Relationship se alege denumirea tabelei/tabelelor cu care se doreşte a se realiza legătura, se execută clic pe butonul Move şi apoi pe butonul OK.

Page 28: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 27

Fereastra pentru crearea legăturilor de tip one-to-many

10. Se vizualizează în paralel conţinutul tabelelor şi se execută un

clic pe căte o înregistrare din tabela-părinte, în tabela-fiu fiind afişate doar înregistrările care conţin în index valoarea înregistrării curente din tabela-părinte.

Corespondenţa în modul Browse a valorilor comune ale unui index

Se constată că principalul avantaj al legăturii temporare este acela că în momentul în care în tabela-părinte cursorul este mutat pe o înregistrare, în tabela-fiu sunt afişate doar înregistrările care conţin valoarea din câmpul comun aferent înregistrării din tabela-părinte.

LEGĂTURI PERMANENTE

1. Se deschide fereastra Database Designer, executând un clic în fereastra Project Manager pe denumirea bazei de date şi apoi pe butonul Modify. În acest moment structura şi indexul fiecărei tabele pot fi vizualizate.

Page 29: or Visual Fox Pro 8.0

Suport pentru laborator

28

2. Se execută un clic pe denumirea indexului primar corespunzător din tabela-părinte şi, prin metoda drag-and-drop se plasează cursorul pe denumirea corespunzătoare a indexului din tabela-fiu, eliberând cursorul. Se constată realizarea unei legături permamante.

Realizarea unei legături permanente

Stabilirea unei legături permanente permite stabilirea integrităţii referenţiale. O restricţie de integritate referenţială se referă la faptul că în tabela-fiu nu pot exista înregistrări în care în cheia externă să fie înregistrate valori care nu se află în mulţimea valorilor cheii primare din tabela-părinte. De exemplu, dacă se dau două tabele FACTURI [numar_factura, data_factura, cod_client] şi CLIENŢI [cod_client, nume_client, localitate], nu poate exista o înregistrare (numar_factura: 12, data_factura: 12/06/2005, cod_client: 111) dacă în tabela CLIENŢI nu există un client cu cod 111, altfel spus, nu poate exista o factură emisă de un client care nu există. Integritatea referenţială se stabileşte astfel. 1. Se execută un clic dreapta pe legătura creată şi se alege

opţiunea Edit Referential Integrity. 2. În fereastra rezultată, se pot stabili trei tipuri de reguli referitoare

la înregistrările din ambele tabele: • Rules for Updating – reguli pentru actualizare; • Rules for Deleting – reguli pentru ştergere; • Rules for Inserting – reguli pentru inserare.

Page 30: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 29

Fereastra Referential Integrity Builder

Pentru primele două opţiuni, există trei posibilităţi: cascade,

restrict şi ignore. Cascade se referă la faptul că atunci când o înregistrare

conţinând o valoare ale indexului primar din tabela-părinte este modificată/ştearsă, se realizează actualizarea/ştergerea automată a înregistrărilor din tabela-fiu care conţin acea valoare.

Restrict se referă la faptul că nu este permisă modificarea/ştergerea unei înregistrări, şi implicit a unei valor a indexului primar, atunci când în tabela-fiu se regăsesc înregistrări care conţin acea valoarea.

Ignore se referă la posibilitatea actualizării/ştergerii independente a înregistrărilor din cele două tabele în momentul modificării/ştergerii unei valori a indexului primar.

Pentru opţiunea Rulea for Inserting există dor două posibilităţi: restrict şi ignore, referindu-se la faptul că nu este permisă/este permisă adăugarea unei noi înregistrări în tabela-fiu dacă valoarea înregistrată în index nu există în mulţimea valorilor indexului primar corespunzător tabelei-părinte.

Studiu individual Aplicaţia 3: Creare legături temporare şi permamante între tabele aprţinând unei baze de date.

Page 31: or Visual Fox Pro 8.0

Suport pentru laborator

30

APLICAŢIA 3 Să se realizeze un nou proiect. Să se realizeze o bază de

date. Să se creeze următoarele tabele, aparţinând bazei de date: Structură Cod_client C 4 Nume C 20 Oras C 10

Index primar, ascendent :

cod_client

Conţinut Cod_client Nume Oras AMP Amep Brasov COR CorrImpex Galati DAV Daval Brasov ERG Energo Bucuresti HTR Hatrom Brasov

Structură Nr_fact N 10 Cod_client C 4 Data D 8

Index primar, ascendent : nr_fact

Index normal, ascendent: cod_client

Conţinut Nr_fact Cod_client Data 23 AMP 05/11/05 116 HTR 04/12/05 315 COR 06/04/05 117 DAV 12/03/04 18 ERG 12/05/04 56 ERG 11/07/05 12 AMP 02/10/04

Structură Cod_produs N 10 Den_produs C 30 PU N 10 Cant N 10 Nr_fact N 10

Index primar, ascendent : cod_produs

Index normal, ascendent: nr_fact

Conţinut Cod_ produs

Den_produs PU Cant Nr_fact

1 Apa minerala

2 500 56

2 Biscuiti 1 55 116 3 Cereale 4 15 315 4 Portocale 5 10 116 5 Servetele 1 150 117 6 Ciocolata 3 40 116 7 Compot 2 14 18 8 Iaurt 3 12 23 9 Paine 1 100 12

Page 32: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 31

3. Să se stabilească legături temporare între cele trei tabele. 4. Să se stabilească legături permamante între cele trei tabele. 5. Să se stabilească următoarele restricţii de integritate

referenţială: cascade pentru ştergere şi restrict pentru inserarea unei noi înregistrări.

6. Să se verifice integritatea referenţială prin ştergerea unei înregistrări existente şi prin adăugarea unei noi înregistrări.

Page 33: or Visual Fox Pro 8.0

Suport pentru laborator

32

INSERAREA, MODIFICAREA ŞI ŞTERGEREA LINIILOR

Principalele obiective ale capitolului sunt:

Adăugarea unei linii într-o tabelă Editarea unor date dintr-o tabelă Ştergerea unor date dintr-o tabelă

ADĂUGAREA UNEI LINII Comanda SQL de adăugare de noi linii este INSERT, care are, în modul de lucru cel mai puţin pretenţios următorul format: INSERT INTO TABELĂ [(ATRIBUT1, ATRIBUT2,... .)] VALUES (VALOARE_ATRIBUT1, VALOARE_ATRIBUT2,... .) În cazul tabelei ANGAJATI se poate introduce o nouă line astfel: Se dă tabela Angajaţi cu urmatoarele date:

Page 34: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 33

INSERT INTO ANGAJATI VALUES (11, 'RADU', 'Info', 250) iar tabela va arăta astfel:

STERGEREA LINIILOR Comanda SQL pentru ştergerea uneia sau mai multor linii dintr-o tabelă este DELETE DELETE FROM TABELA WHERE CONDITIE Dacă dorim să ştergem ultima înregistrare introdusă vom avea: DELETE FROM ANGAJATI WHERE NUME='RADU'

Page 35: or Visual Fox Pro 8.0

Suport pentru laborator

34

În cazul Visual FOXPRO este nevoie de comanda PACK ca ştergerea să fie efectivă, astfel: PACK Iar tabela va arăta astfel:

MODIFICAREA VALORILOR UNOR ATRIBUTE Pentru a modifica valoarea unuia sau mai multor atribute sau mai multe linii dintr-o tabelă se foloseşte comanda UPDATE cu formatul general: UPDATE TABELA SET ATRIBUT1=EXPRESIE [, ATRIBUT2=EXPRESIE2.... .] WHERE PREDICAT

Page 36: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 35

Modificarea se va produce pe toate liniile tabelei care îndeplinesc condiţia formulată prin predicat. În cazul tabelei ANGAJATI dacă dorim schimbarea salariului în 1000 pentru angajata GABRIELA vom avea: UPDATE ANGAJATI SET SAL_BRUT=1000 WHERE NUME='Gabriela'

Studiu individual Aplicaţia 4: Introducere, ştergere şi modificarea unor date dintr-o tabelă

APLICAŢIA 4 1. Creaţi tabela FACTURI (ca în ANEXA 1) 2. În tabela FACTURI (ANEXA 1) adăugaţi următoarele date:

Page 37: or Visual Fox Pro 8.0

Suport pentru laborator

36

3. În tabela FACTURI modificaţi VALOAREA la 75000 pentru toate facturile care au valoare mai mare de 10.000. 4. Ştergeţi toate facturile pentru care cod_furn este c1. 5. Modificati cod_furn în n99 pentru facturile a căror valoare este de cel puţin 8000. 6. Ştergeti toate înregistrările pentru care nr_factură este mai mic de 4000. 7. Stergeti toate datele din tabela FACTURI. 8. Introduceţi cinci facturi noi utilizând INSERT şi cinci facturi utilizând BROWSE.

Page 38: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 37

NUCLEUL SQL ÎN VISUAL FOX PRO

Principalele obiective ale capitolului sunt:

Introducere în conceptul de interogare

a bazelor de date Sintaxa şi utilizarea comenzii SELECT

CONCEPTUL DE INTEROGARE ŞI COMANDA SELECT

Extragerea informaţiilor din una sau mai multe tabele libere sau aparţinând unei baze de date, pe baza unor criterii definite de utilizator poartă denumirea de interogare.

Visual Fox Pro include un set de comenzi ale limbajului SQL (Structured Query Language) care permite interogarea tabelelor şi furnizarea rezultatelor sub forma unor interogări, care pot fi depozitate la o destinaţie precizată. Prin intermediul unei interigări se construieşte o instrucţiune SELECT a acestui limbaj, care cuprinde întregul mecanism de interogare al VFP.

Rezultatele interogărilor se pot obţine cu ajutorul unui generator denumit Query Designer, cu posibilitate de utilizare pe baza rubricii Queries din fereastra Project Manager, existând posibilitatea de a utiliza de asemenea şi ajutorul oferit de VFP prin intermediul Query Wizard.

Page 39: or Visual Fox Pro 8.0

Suport pentru laborator

38

O altă posibilitate de obţinere a rezultatelor interogărilor este utilizarea comenzii Select, reprezentată de o sintaxă specifică, comandă care va fi executată în fereastra de comenzi. Exemplificarea utilizării comenzii Select se va realiza utilizând o bază de date cu informaţii necesare organizării sesiunii studenţeşti.

PRINCIPALELE CLAUZE ALE FRAZEI SELECT

Orice frază de tip SELECT are trei clauze principale: SELECT FROM WHERE Dintre aceste trei clauze doar SELECT şi FROM sunt obligatorii în orice frază.

SELECŢIA ŞI PROIECŢIA Clauza SELECT corespunde operatorului proiecţie din algebra relaţională, fiind utilizată pentru desemnarea listei de atribute (coloane) din rezultat. Clauza FROM este cea în care sunt enumerate relaţiile din care vor fi extrase informaţiile aferente consultării. Clauza WHERE desemnează predicatul selectiv al algebrei relaţionale (condiţia), relativ la atribute ale relaţiilor care apar în clauza FROM. La modul general, o consultare SQL poate fi prezentată sub forma: select c1,c2,...,cn from r1,r2,...,rm where p unde: cj - reprezintă coloanele rezultat; rj - reprezintă relaţiile ce trebuie parcurse; p - reprezintă predicatul, condiţia ce trebuie îndeplinită de tupluri (linii) pentru a fi incluse în rezultat. Predicatul poate fi simplu sau compus (din mai multe condiţii). Când clauza WHERE este omisă se consideră implicit că predicatul p are valoare logică ''adevărat'', astfel încât în rezultat vor

Page 40: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 39

fi incluse toate liniile din tabelă sau produsul cartezian al tabelelor, enumerate în clauza FROM. Dacă în locul coloanelor c1,c2,...,cn apare simbolul *, rezultatul va fi alcătuit din toate coloanele relaţiilor specificate în clauza FROM. Atributele rezultatului preiau numele din tabela (tabelele) specificate în clauza FROM. Schimbarea numelui se realizează prin caluza AS. exemplu: select c1,c2 as NUME_NOU from r1 unde numele coloanei c2 devine NUME_NOU; SQL nu elimină automat liniile identice din rezultat, deci pentru ca fiecare linie să apară o singură dată este necesara utilizarea opţiunii DISTINCT. exemplu: select distinct c1,c2 from r1 În concluzie, o frază SELECT, corespunde:

• unei selecţii algebrice (clauza WHERE p) • unei proiecţii (SELECT ci) • unui produs cartezian (FROM - r1⊗ r2⊗ ...⊗ rm)

şi conduce la obţinerea unui rezultat cu n coloane, fiecare coloană fiind: un atribut din r1,r2,...,rm sau expresie calculată pe baza unor atribute din r1,r2,...,rm. Execuţia unei fraze SELECT realizează un rezultat sub formă tabelară.

Rezultatul poate fi: 1. o listă (text) 2. o tabelă propriu-zisă 3. o tabelă temporară 4. o tabelă derivată (imagine) 5. o variabilă masiv (tablou)

Exemplu: Utilizăm tabela ANGAJATI în care introducem următoarele date:

Page 41: or Visual Fox Pro 8.0

Suport pentru laborator

40

Datele tabelei angajati.dbf

1. Care sunt datele conţinute în tabela angajati? select nr, nume, prenume, data_nasterii, sal_brut, cod_dep from angajati sau: select * from angajati

Rezultatele exemplului 1.1

2. Care sunt numele salariaţilor şi salariul brut? select nume, sal_brut from angajati

Page 42: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 41

Rezultatele exemplului 1.2 3. Care sunt numele salariaţilor şi salariul brut, dar pentru coloana sal_brut denumim coloana salariu_brut? select nume, sal_brut as salariu_brut from angajati

Rezultatele exemplului 1.3

4. Afişaţi numele angajatilor şi salariul brut, pentru salariaţii care au salariul brut mai mare de 700 lei select nume from angajati where sal_brut>700

Rezultatele exemplului 1.4

5. Care sunt datele salariaţilor care lucrează în departamentul informatic (cod_dep="info")? select * from angajati WHERE cod_dep="info"

Rezultatele exemplului 1.5

Page 43: or Visual Fox Pro 8.0

Suport pentru laborator

42

6. Care sunt datele salariaţilor care lucrează în departamentul informatic (cod_dep="info") şi care au salariul brut mai mare de 700 de lei? select * from angajati where cod_dep="info" and sal_brut>700

Rezultatele exemplului 1.6

7. Afişaţi numele salariaţilor şi codul departamentului pentru angajatii care sunt fie în departamentul informatic (cod_dep="info") fie în departamentul contabilitate (cod_dep="cont") select nume, cod_dep from angajati where cod_dep="info" or cod_dep="cont"

Rezultatele exemplului 1.7

8. Afişaţi numele angajaţilor şi data naşterii pentru angajaţii născuţi după 15-03-1980 (formatul pentru data este {^yyyy/mm/dd}) select nume, data_nasterii from angajati where data_nasterii > {^1980/03/15}

Rezultatele exemplului 1.8

9. Afişaţi numele angajaţilor şi data naşterii pentru angajaţii născuţi între 15-03-1980 şi 20-05-1983

Page 44: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 43

select nume, data_nasterii from angajati where data_nasterii > {^1980/03/15} and data_nasterii < {^1983/05/20}

Rezultatele exemplului 1.9

10. Care sunt codurile de departament din tabela angajati? select cod_dep from angajati

Rezultatele exemplului 1.10

11. Care sunt codurile de departament din tabela angajati, afişate o singură dată? select distinct cod_dep from angajati

Rezultatele exemplului 1.11

Page 45: or Visual Fox Pro 8.0

Suport pentru laborator

44

Intrebări: 1. Care sunt clauzele principale ale unei selecţii? 2. Care sunt clauzele obligatorii ale unei selecţii? 3. Câte tabele putem trece la clauza FROM?

Studiu individual Aplicaţia 5: Introducere de date, selecţii simple şi utilizând condiţii simple şi compuse.

APLICAŢIA 5 1. Realizaţi o tabelă FURNIZORI cu structura tabelei FURNIZORI din ANEXA 1. 2. Introduceti următoarele date:

3. Care sunt furnizorii din Brasov? 4. Care sunt furnizorii din Braşov sau Bucuresti?

Page 46: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 45

5. Care sunt furnizorii care nu stau în Constanţa? 6. Ştergeţi furnizorii care sunt din Bucureşti. 7. Introduceţi trei furnizori noi utilizând INSERT. 8. Modificaţi localitatea în Cluj pentru furnizorii din Constanta.

Page 47: or Visual Fox Pro 8.0

Suport pentru laborator

46

Coloane, expresii

Principalele obiective ale capitolului sunt:

Definirea unor coloane noi

Realizarea de calcule pe baza unor date din baza de date.

O facilitate importantă în multe interogări SQL ţine de definirea, pe lângă atributele tabelelor, a unor coloane noi, pe baza unor expresii. Clauza AS ermite denumirea coloanelor calculate sau redenumirea unor coloane ale tabelelor. De exemplu dacă dorim să aflăm care este TVA-ul aferent unei facturi, vom avea:

In tabelă FACTURI avem introduse următoarele date:

Page 48: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 47

Datele tabelei FACTURI

Pentru a afişa valoarea tva-ului, precum şi valoarea cu TVA

pentru fiecare factură vom avea selectul:

select nr_factura, cod_furn, data_fact, valoare, valoare*19/100 as TVA, valoare*119/100 as val_totala from facturi

şi vom obţine Query-ul:

Rezultatele selecţiei

Dacă stabilim că pentru fiecare factură pe care o facem termenul scadent pentru plată este de 2 luni vom calcula data scadentă astfel: select nr_factura, gomonth(data_fact,2) as data_scadenta from facturi

Page 49: or Visual Fox Pro 8.0

Suport pentru laborator

48

Obţinerea datei scadente pentru fiecare factură

Funcţia GOMONTH (data, nr_luni) returnează o nouă dată

plecând de la data introdusă la care adună un nr. de luni. Dacă stabilim că pentru fiecare factură pe care o facem

termenul scadent pentru plată este de 60 de zile vom calcula data scadentă astfel:

select nr_factura, gomonth(data_fact,0)+60 as data_scadenta

from facturi

Obţinerea datei scadente pentru fiecare factură

Intrebări: 1. Cum putem să denumim coloana din rezultat? 2. Cum putem obţine o coloană nouă utilizând în selecţie o condiţie?

Page 50: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 49

Studiu individual Aplicaţia 6: Calcularea amortizării lunare prin metoda liniară.

APLICAŢIA 6 1. Realizaţi tabela MF după structura tabelei MF din ANEXA 1. 2. Introduceti următoarele date:

3. Care sunt mijloacele fixe cu valoare mai mare de 30000? 4. Dacă PER_AMORT reprezintă perioada de amortizare în ani, calculati care este valoarea amortizării lunare liniare. 5. Denumiţi coloana cu amortizarea lunară liniară AM_LUN. 6. Care sunt mijloacele fixe care au amortizarea lunară mai mare de 1000? 7. Modificati perioada de amortizare în 5 pentru mijloacele fixe cu codul 10004. 8. Calculaţi care este amortizarea lunară pentru "masina 2" 9. Calculaţi amortizarea lunară liniară pentru mijloacele fixe cumpărate de la furnizorul c1 sau c2.

Page 51: or Visual Fox Pro 8.0

Suport pentru laborator

50

Funcţiile agregat: COUNT, SUM, AVG, MIN, MAX

Principalele obiective ale capitolului sunt:

Utilizarea funcţiilor Count, sum, avg. min, max

Realizarea unor noi coloane care să conţină date obţinute prin utilizarea funcţiilor de mai sus.

Funcţia COUNT contorizează valorile neutre ale unei coloane sau numărul de linii dintr-un rezultat al unei interogări, altfel spus, în rezultatul unei consultări, COUNT numără câte vaşlori diferite de NULL are o coloană specificată sau câte linii sunt: De exemplu dacă dorim să aflăm căte facturi amvem în tabela FACTURI (câte linii sunt) avem: select count (*) from facturi

Page 52: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 51

Numărul de facturi din tabela FACTURI

Sau de exemplu dacă dorim să vedem câte facturi au valoarea peste 3000 vom avea: select count(*) from facturi WHERE valoare>3000

Numărul de facturi din tabela FACTURI

cu valoare mai mare de 3000

Funcţia SUM este una dintre cele mai utilizate funcţii în aplicaţiile economice, deoarece datele financiar-contabile şi cele ale evidenţei tehnico-operative sunt preponderent cantitative. De exemplu dacă dorim să aflăm care este valoarea totală a facturilor din tabela FACTURI avem: select sum(valoare) from facturi

Valoarea totală a facturilor din tabela FACTURI

Sau de exemplu dacă dorim să aflăm care este valoarea totală

a facturilor din tabela FACTURI a furnizorului cu cod_furm "c2" avem: select sum(valoare) from facturi where cod_furn="c2"

Valoarea totală a facturilor din tabela FACTURI

a furnizorului cu cod_furm "c2"

Page 53: or Visual Fox Pro 8.0

Suport pentru laborator

52

Funcţia AVG (AVERAGE) calculează media aritmetică a unei coloane prin divizarea sumei valorilor coloanei respective la numărul de valori nenule ale acesteia.

De exemplu dacă dorim să aflăm care este valoarea medie a facturilor din tabela FACTURI avem: select avg(valoare) from facturi

Valoarea medie a facturilor din tabela FACTURI

Sau de exemplu dacă dorim să aflăm care este valoarea

medie a facturilor din tabela FACTURI a furnizorului cu cod_furm "c1" avem: select avg(valoare) from facturi where cod_furn="c1"

Valoarea medie a facturilor din tabela FACTURI

a furnizorului cu cod_furm "c1" Deosebit de utile în diverse tipuri de analiză cele două funcţii MIN şi MAX determină valoarea minimă şi maximă pentru o coloană. Se pot folosi şi pentru atribute de tip şir de caractere, caz în care elementul de comparaţie este codul ASCII al caracterelor. De exemplu dacă dorim care este valoare minimă din tabela facturi vom avea: select min(valoare) from facturi

Valoarea minimă din FACTURI

Page 54: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 53

Sau de exemplu dacă dorim care este valoare maximă din

tabela facturi vom avea: select max(valoare) from facturi

Valoarea maximă din FACTURI

Dacă dorim să aflăm care este din punct de vedere alfabetic cod_furn cu cea mai mare valoare vom avea: select max(cod_furn) from facturi

Valoarea maximă a cod_furn din FACTURI

Studiu individual APLICAŢIA 7: Utilizarea funcţiilor: AVG; MIN; MAX; SUM; COUNT

APLICAŢIA 7 1. Realizaţi tabela FACTURI cu structura tabelei FACTURI din ANEXA 1. 2. Introduceţi în tabela FACTURI următoarele date:

Page 55: or Visual Fox Pro 8.0

Suport pentru laborator

54

3. Care este media valorii facturilor? 4. Care este valoarea cea mai mare a unei facturi? 5. Care este valoarea cea mai mică a unei facturi? 6. Calculaţi valoarea medie a valorii facturilor dar nu cu AVG. 7. Câte facturi avem în tabelă? 8. Cate facturi avem în tabelă cu o valoare mai mare de 5000? 9. Câte facturi avem în tabelă cu o valoare între 4000 şi 30000? (prin două metode) 10. Care este valoare medie a facturilor cu nr. 3525 şi 3522?

Page 56: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 55

Opţiunea ORDER BY

Principalele obiective ale capitolului sunt:

Ordonarea datelor unei tabele după unul sau mai

multe atribute

Una dintre caracteristicile modelului relaţional este că nici ordinea atributelor, nici ordinea liniilor în relaţii nu reprezintă importanţă din punctul de vedere al conţinutului informaţional. Însă în practică forma de prezentare a rezultatelor interogării est importantă. Spre exemplu o listă a localităţilor dintr-o tabelă este mai uşor citită în ordine alfabetică. De exemplu dacă dorim pentru tabela facturi să afişăm toate datele ordonate după câmpul cod_furn vom avea select * from facturi order by cod_furn

Page 57: or Visual Fox Pro 8.0

Suport pentru laborator

56

Datele obţinute în urma ordonării după câmpul cod_furn

Aranjarea se poate face atât crescător (ASC) cât şi descrescător (DESC). În plus se pot specifica mai multe coloane care să servească drept criterii suplimentare de ordonare. Astfel, la valori egale ale primului atribut, intră în acţiune criteriul de "balotaj", care este al doilea atribut, etc. De exemplu dacă dorim să ordonăm datele din facturi întâi după cod_furn şi apoi după valoare (după acest criteriu descrescător) vom avea:

select * from facturi order by cod_furn, valoare desc

Obţinerea datelor ordonate după cod_furn şi apoi

descrescător după valoare

Intrebări: 1. Care este diferenţa între ORDER şi SORT? 2. După câte câmpuri putem ordona şi cum?

Page 58: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 57

Studiu individual APLICAŢIA 8: Ordonarea rezultatelor unei interogări.

APLICAŢIA 8 1. Realizaţi tabela MF după structura tabelei MF din ANEXA 1. 2. Introduceti următoarele date:

3. Care sunt datele din tabela MF, ordonate alfabetic după denumire? 4. Care sunt datele din tabela MF, ordonate alfabetic după denumire şi apoi după valoare? 5. Care este amortizarea lunară liniară pentru fiecare mijloc fix, datele fiind ordonate după denumirea mijlocului fix? 6. Afişaţi denimirea mijloacelor fixe, ordonată alfabetic pentru mijloacele fixe cu o valoare mai mare de 32000 inclusiv. 7. Afişaţi alfabetic codurile furnizor - o singură dată. 8. Care este valoarea cea mai mare unui mijloc fix? 9. Care este valoare medie a amortizării lunare a mijloacelor fixe? 10. Câte mijloace fixe avem?

Page 59: or Visual Fox Pro 8.0

Suport pentru laborator

58

OPERATORII BETWEEN, LIKE ŞI IN

Principalele obiective ale capitolului sunt:

Utilizarea operatorilor

BETWEEN LIKE

IN

Pentru formularea predicatului de selecţie, SQL permite utilizarea, pe lângă >,<, >=,<=,= şi a altor operatori, dintre care ve vom opri la BETWEEN (cuprins între), LIKE (ca şi), IN (în), la care se adaugă IS NULL. Operatorul BETWEEN este util pentru definirea intervalelor de valori. De exemplu dacă dorim să afişăm doar facturile care au valori între 4000 şi 8000 vom avea: select * from facturi where valoare between 4000 and 8000

Page 60: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 59

Date afişate utilizând condiţia BETWEEN

Acelaşi rezultat il puteam obţine şi cu o condiţie dublă: select * from facturi where valoare >= 4000 and valoare <=8000

Date afişate utilizând condiţia dublă

Operatorul LIKE permite compararea unui atribut (expresii) cu un literal utilizând o "mască" construită cu ajutorul specificatorilor multiplii % şi _ . Simbolurile procent şi underscore sunt denumite jokeri. Procentul substituie un şir de lungime variabilă, 0-n caractere, în timp ce underscore substituie un singur caracter. Pentru exemplificare mai introducem două facturi cu următoarele date:

Introducerea suplimentară a 2 facturi

De exemplu dacă dorim să afişăm care sunt toţi furnizorii a căror cod_client începe cu litera "c" vom avea: select * from facturi where cod_furn like "c%"

Page 61: or Visual Fox Pro 8.0

Suport pentru laborator

60

Furnizorii a căror cod_furn începe cu litera "c"

De exemplu dacă dorim să afişăm care sunt toţi furnizorii a

căror cod_client începe cu litera "m" vom avea: select * from facturi where cod_furn like "m%"

Furnizorii a căror cod_furn începe cu litera "m"

De exemplu dacă dorim să afişăm care sunt toţi furnizorii a

căror cod_client are două caractere şi al doilea caracter este 5 vom avea: select * from facturi where cod_furn like "_5"

Furnizorii a căror cod_furn are două caractere

şi al doilea caracter este 5 Atunci când se testează dacă valoarea unui atribut este încadrabilă într-o listă de valori dată, în locul folosirii abundente a operatorului OR este mai elegant să se apeleze la operatorul IN. De exemplu dacă dorim să afişăm facturile furnizorilor care au cod_furn c1, c3 şi c4 avem: select * from facturi where cod_furn in ("c1","c3","c4")

Page 62: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 61

Facturile furnizorilor care au cod_furn c1, c3 şi c4

Sau de exemplu dacă dorim să selectăm facturile care au valoare de 500, 600, 5000 vom avea: select * from facturi where valoare in (500, 600, 5000)

Facturile care au valoare de 500, 600, 5000

Intrebări: 1. Care este diferenţa între operatorii BETWEEN şi IN? 2. Cu ce poate fi substituit operatorul BETWEEN?

Studiu individual APLCAŢIA 9: Utilizarea operatorilor BETWEEN; LIKE şi IN în calcularea unor date pe baza tabelei ANGAJATI.

APLICAŢIA 9 1. Realizaţi tabela SALARIATI pe baza structurii tabelei ANGAJATI din ANEXA 1.

Page 63: or Visual Fox Pro 8.0

Suport pentru laborator

62

2. În tabelă introduceţi următoarele date:

3. Care sunt salariaţii care au salariu cuprins între 550 şi 1000? 4. Care sunt angajaţii care au salariu 600, 1000, 750, sau 300? 5. Câţi angajaţi avem? 6. Care este salariul mediu? 7. Care este numele salariatului cu salariul cel mai mare? 8. Care sunt angajaţii a căror nume începe cu litera M sau I? 9. Câţi angajaţi au prenumele din trei litere? 10. Care sunt salariaţii care nu au prenumele ION sau IOANA?

Page 64: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 63

REUNIUNE, PRODUS CARTEZIAN

Principalele obiective ale capitolului sunt:

Prezentarea operatorului UNION Realizarea produsului cartezian

Primii trei operatori asamblişti prezintă operatori SQL dedicaţi: UNION, INTERSECT, MINUS (EXTRACT), în timp ce produsul cartezian se calculează automat prin simpla enumerare a celor fouă tabele din clauza FROM. La reuniunea a două tabele, SQL elimină automat liniile identice din rezultat. Dacă se doreşte prelucrarea tuturor liniilor celor două relaţii şi implicit apariţia de linii duplicate, se foloseşte caluza ALL (UNION ALL). De exemplu, după aceeaşi strctură a tabelei FURNIZORI creăm tabela FURNIZORI2. Tabela FURNIZORI2 conţine următoarele date:

Page 65: or Visual Fox Pro 8.0

Suport pentru laborator

64

Datele tabelei FURNIZORI2

Datele tabelei FURNIZORI

Dacă dorim să afişăm toate datele (utilizând reuniunea) din tabelele FURNIZORI şi FURNIZORI2 avem: select * from furnizori union select * from furnizori2

Page 66: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 65

Toate datele (utilizând reuniunea) din tabelele FURNIZORI şi

FURNIZORI2

SQL nu pune la dispoziţie vreun operator special dedicat produsului cartezian. Produsul cartezian se realizează prein simpla enumerare a tabebelor în clauza FROM. De exemplu dacă dorim să realizăm produsul cartezian între tabelele FACTURI şi FURNIZORI avem: select * from facturi, furnizori

Page 67: or Visual Fox Pro 8.0

Suport pentru laborator

66

Produsul cartezian al tabelelor FACTURI şi FURNIZORI

Intrebări: 1. Ce reprezintă operatorul UNION? 2. Cum se realizează produsul cartezian?

Studiu individual APLICAŢIA 10: Evidenţa mijloacelor fixe ale unei întreprinderi

APLICAŢIA 10 1. Realizaţi tabela MF1 şi MF2 după structura tabelei MF din ANEXA 1.

Page 68: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 67

2. Introduceti următoarele date:

Datele tabelei MF1

Datele tabelei MF2

3. Care sunt datele din tabela MF1, ordonate alfabetic după denumire? 4. Care sunt datele din tabela MF2, ordonate alfabetic după denumire şi apoi după valoare? 5. Afişaţi datele celor două tabele într-un query 6. Care sunt mijloacele fixe ce se găsesc în MF1 şi nu se găsesc în MF2? 7. Care sunt mijloacele fixe ce se găsesc şi în MF1 şi în MF2? 8. Care este valoarea medie a mijloacelor fixe din MF1? 9. Care este valoarea medie a mijloacelor fixe din MF2 a căror nume începe cu litera C?

Page 69: or Visual Fox Pro 8.0

Suport pentru laborator

68

10. Care sunt mijloacele fixe din tabela MF2 furnizate de furnizorii cu codurile: c1, c2, c4, c5,c8?

Page 70: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 69

THETA ŞI ECHI-JONCŢIUNEA

Principalele obiective ale capitolului sunt:

Realizarea unei legături între două sau mai multe

tabele Utilizarea condiţiilor în echi-joncţiune

SQL nu prezintă clauze sau operatori speciali pentru joncţiune, joncţiunea fiind o combinaţie între produs cartezian şi selecţie. Deci pentru theta-joncţiunea dintre două relaţii R1 şi R2 avem: select * from R1, R2 where R1.A>=R2.E unde: R1

A B C 20 XYZ 30 30 XXZ 20 40 YYX 25

R2 C D E

25 XYZ 30 40 YYX 25 30 XXZ 40

iar pentru echi-joncţiune avem:

Page 71: or Visual Fox Pro 8.0

Suport pentru laborator

70

select * from R1, R2 where R1.A=R2.E Varianta cu INNER JOIN (joncţiune internă) este: select * from R1 inner join R2 on R1.A>=R2.E respectiv select * from R1 inner join R2 on R1.A=R2.E Pentru următorul exemplu utilizăm următoarele tabele: FURNIZORI, FACTURI cu următoarele date:

Se cere să de afişeze pentru fiecare factură numele furnizorului.

Page 72: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 71

select facturi.*, furnizori.nume_furn from facturi, furnizori where facturi.cod_furn=furnizori.cod_furn

Numele furnizorului pentru fiecare factură

Acelaşi rezultat se poate obţine utilizând INNER JOIN: select facturi.*, furnizori.nume_furn from facturi inner join furnizori ON facturi.cod_furn=furnizori.cod_furn

Numele furnizorului pentru fiecare factură

Dacă dorim să afişăm numele furnizorului pentru fiecare factură numai pentru furnizorul cu cod_furn "c1" vom avea: select facturi.*, furnizori.nume_furn from facturi, furnizori where facturi.cod_furn=furnizori.cod_furn and facturi.cod_furn="c1"

Page 73: or Visual Fox Pro 8.0

Suport pentru laborator

72

Numele furnizorului pentru fiecare factură numai pentru furnizorul cu cod_furn "c1"

Intrebări: 1. De ce două tabele sunt legate logic prin valori? 2. Care este condiţia necesară pentru echi-joncţiune?

Studiu individual APLICAŢIA 11: Evidenţa salariaţilor dintr-o firmă

APLICAŢIA 11 1. Să se realizeze tabelele ANGAJATI şi DEPARTAMENTE după structura tabelelor ANGAJATI şi DEPARTAMENTE din ANEXA 1 2. Introduceţi în tabele următoarele date:

Page 74: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 73

3. Afişaţi şeful pentru fiecare angajat. 4. Care sunt angajaţii care lucrează în Braşov? 5. Câţi angajaţi lucrează în Bucureşti? 6. Care este numele angajatului cu salariul maxim? 7. Care este fondul de salarii pentru fiecare cod_dep? 8. Care sunt angajatii angajaţi dupa 01/01/1980? 9. Care sunt angajaţii care lucrează la departamentul marketing? 10. Câţi subalterni are Vlad? 11. Care este salariul mediu pentru departamentul management? 12. Care sunt angajaţii a căror şef începe cu litera "A"? 13. Care sunt angajaţii care lucrează în Braşov sau Bucureşti?

Page 75: or Visual Fox Pro 8.0

Suport pentru laborator

74

GRUPAREA TUPLURILOR: GROUP BY ŞI HAVING

Principalele obiective ale capitolului sunt:

Utilizarea grupurilor Utilizarea condiţiilor pentru grupuri

Clauza GROUP BY formează grupe (grupuri) de tupluri ale unei relaţii, pe baza valorilor comune ale unui atribut. În frazele SELECT formulate până în acest paragraf, prin intermediul WHERE au fost selectate tupluri ale tabelei. Prin asocierea unei clauze HAVING la GROUP BY este posibilă selectare anumitor grupuri de tupluri ce îndeplinesc un criteriu, valabil numai la nivel de grup (nu şi la nivel de linie). Clauza unei fraze SELECT ce conţine această clauză se obţine prin regruparea tuturor liniilor din tabelele eumerate în FROM, extrăgându-se câte o apariţie pentru fiecare valoare distinctă a coloanei/grupului de coloane. Formatul general este:

Page 76: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 75

select coloană1, coloană2,...,coloană m from tabelă group by coloană_de_regrupare De exemplu dacă dorim să vedem care este valoarea totală a facturilor pentru fiecare cod_furn vom avea: select cod_furn, sum(valoare) from facturi group by cod_furn

Valoarea totală a facturilor pentru fiecare cod_furn

Cea mai simplă definiţie a clauzei HAVING este: clauza HAVING este WHERE-ul ce operează la nivel de grupuri. Dacă WHERE acţionează la nivel de tuplu, selectând acele linii care îndeplinesc o condiţie specificată, HAVING permite specificarea unor condiţii de selecţie care se aplică rupurilor de linii create prin GROUP BY. Din rezultat sunt eliminate toate grupurile care nu satisfac condiţia specificată.

De exemplu dacă dorim să vedem care este valoarea totală a facturilor pentru cod_furn egal cu "c1" vom avea: select cod_furn, sum(valoare) from facturi group by cod_furn having cod_furn="c1"

Valoarea totală a facturilor pentru

cod_furn egal cu "c1"

Page 77: or Visual Fox Pro 8.0

Suport pentru laborator

76

Intrebări: Când se utilizează GROUP BY? Care este definiţia condiţiei HAVING?

Studiu individual APLICAŢIA 12: Situaţii de grup la nivelul salariaţilor

APLICAŢIA 12 1. Să se realizeze tabelele ANGAJATI şi DEPARTAMENTE după structura tabelelor ANGAJATI şi DEPARTAMENTE din ANEXA 1 2. Introduceţi în tabele următoarele date:

Page 78: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 77

3. Afişaţi şeful pentru fiecare angajat. 4. Care este salariul total pentru fiecare departament? 5. Care este salariul total pentru departamentul MANAGEMENT? 6. Care este suma totală a salariilor din departamentele management şi contabilitate? 7. Care este numărul de salariaţi din fiecare departament? 8. Care este departamentul cu angajaţii cei mai mulţi? 9. Care este şeful departamentului cu cei mai mulţi angajaţi? 10. Câţi angajaţi are Vlad?

Page 79: or Visual Fox Pro 8.0

Suport pentru laborator

78

FUNCŢII DE CALCUL ÎN VISUAL FOX PRO

Principalele obiective ale capitolului sunt:

Utilizarea funcţiilor de calcul în Visual Fox Pro

Visual Fox Pro permite utilizarea unor instrucţiuni specifice, executate în fereastra de comenzi, pentru calcule statistice, dar şi funcţii statistice şi financiare. Instrucţiunile cel mai des utilizate pentru calcule statistice sunt: average <denumire câmp> <domeniul înregistrărilor> to <denumire variabila> Instrucţiunea furnizează media aritmetică a valorilor numerice din câmpul specificat. count <domeniul înregistrărilor> to <denumire variabila> Instrucţiunea furnizează numărul de înregistrări din tabelă care respectă condiţiile impuse în domeniul înregistrărilor.

Page 80: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 79

sum <denumire câmp> <domeniul înregistrărilor> to <denumire variabilă> Instrucţiunea furnizează suma (pe coloană) valorilor din câmpul specificat. Unde: denumire câmp reprezintă câmpul pe baza valorilor căruia se

va realiza suma; domeniul înregistrărilor reprezintă de obicei o condiţie de

filtrare a valorilor care intră în sumă; denumire variabilă reprezintă o variabilă nouă în care va fi

depozitat rezultatul însumării valorilor. Pentru afişarea rezultatelor acestor operaţii se srie în fereastra de comenzi: ?[mesaj], <denumire variabilă>

Exemple de instrucţiuni pentru calcule statistice

Principalele funcţii statistice: AVG( ), COUNT( ), SUM( ) având

efecte similare cu instrucţiunile menţionate mai sus, se utilizează în cadrul unor instrucţiuni cum ar fi CALCULATE sau SELECT.

Funcţiile financiare cel mai des utilizate sunt: • PAYMENT (valoare împrumut, rata dobânzii, perioada) –

determină rata periodică – de regulă lunară – care trebuie

Page 81: or Visual Fox Pro 8.0

Suport pentru laborator

80

achitată pentru a stinge o datorie, un împrumut într-o perioadă de timp dată, la o anumită rată a dobânzii.

• FV (rata lunară, rata dobânzii, număr de perioade) –

determină valoarea actualizată a unei investiţii cu plăţi periodice egale, pentru un număr cunoscut de perioade egale de timp, la o anumită valoare a ratei dobânzii.

• PV (rata lunară, rata dobânzii, număr de perioade) –

determină valoarea prezentă a unei investiţii realizate în viitor, în condiţiile achitării unor plăţi periodice constante, pe o anumită perioadă, la o rată a dobânzii constantă.

Observaţie: rata dobânzii se raportează la 12 în toate cele trei

cazuri, caz în care numărul de perioade reprezintă numărul de luni. Aceste funcţii se utilizează în cadrul unor comenzi de tip

browse. În fereastra de comenzi se va scrie: browse fields <denumire câmp1>, <denumire câmp2>,...,

<denumire variabilă>=<denumire funcţie financiară>(parametri corespunzători)

Denumirile câmpurilor afişate prin comanda browse, strâns legate de parametrii funcţiei, se utilizează pentru a oferi o imagine completă asupra situaţiei analizate, alternativ existând posibilitatea afişării doar a rezultatului obnţinut prin utilizarea funcţiei financiare.

Studiu individual Aplicaţie 13: Utilizare funcţii statistice şi financiare.

APLICAŢIA 13 Să se construiască un nou proiect. Să se construiască o tabelă având următoarea structură:

Cod_firma C 4 Credit N 20 Rata N 20 Rata_dob_c N 6 ;2

Page 82: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 81

Rata_dob_d N 6 ;2 Perioada N 3

şi cu următorul conţinut : Cod_firma Credit Rata Rata_dob_c Rata_dob_d Perioada AMP 10000 100 0.2 0.1 15 COR 15000 145 0.21 0.11 20 DAV 12000 250 0.23 0.12 36 ERG 45000 500 0.22 0.1 48 HTR 21500 350 0.21 0.14 18 COM 50000 220 0.23 0.11 15 SEP 35000 750 0.23 0.13 24 MAN 15500 600 0.21 0.1 12 RAR 75000 840 0.2 0.12 72 a) Să se determine rata periodică, lunară, care trebuie plătită pentru creditul contractat, de către fiecare societate comercială, utilizând funcţia PAYMENT. b) Valorile înscrise în câmpul rata, reprezintă sume lunare egale care vor fi depuse de fiecare firmă, la începutul fiecărei luni, în conturi de depozit. Care este valoarea viitoare a sumei obţinute in cursul ultimei luni în care firmele vor depune bani în cont? (Utilizaţi funcţia FV) c) Câte firme au contactat credite cu o valoare peste 25000 lei? d) Care este suma totală a creditelor acordate de bănci tuturor firmelor? e) Care este media sumelor depuse lunar de firmele al căror cod începe cu litera “C”?

Page 83: or Visual Fox Pro 8.0

Suport pentru laborator

82

Bibliografie:

1. Marin Fotache, SQL - Dialecte DB2, Oracle, Visual FoxPro, Editura Polirom, 2001, Bucureşti 2. Mihaela Muntean, Dezvoltarea aplicaţiilor cu baze de date în Visual FoxPro, Editura All, 2001, Bucureşti 3. Manualul de utilizare - Visual FoxPro 8.0 4. Grupul BDASEIG, Baze de date. Fundamente teoretice şi practice, Infomega, 2002 5. Manole Velicanu, Constanţa Bodea, Ion Lungu, Cristina Ioniţă, Georgeta Bădescu - Sisteme de Gestiune a Bazelor de Date, Petrion

Page 84: or Visual Fox Pro 8.0

Limbaje de programare şi baze de date 83

Anexa 1

Tabele utilizate

unde: nr - număr; sal_brut - salariu brut; cod_dep - cod departament

unde: cod_dep - cod departament; den-denumire

unde: nr_factură-număr factură; data_fact - data facturii

Page 85: or Visual Fox Pro 8.0

Suport pentru laborator

84

unde: cod_furn - cod furnizor; nume_furn - nume furnizor

unde: cod_mf - codul mijlocului fix, per_amort - perioada de amortizare, cod_furn - codul furnizorului