UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA...

88
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică Nicolae Morariu BAZE DE DATE Îndrumar de laborator 2005 1

Transcript of UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA...

Page 1: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAFacultatea de Ştiinţe Economice şi Administraţie Publică

Nicolae Morariu

BAZE DE DATE

Îndrumar de laborator

2005

1

Page 2: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Referenţi ştiinţifici:

Prof.univ.dr.ing. Alexandru Valachi – Universitatea Tehnică “Gh. Asachi” IaşiProf.univ.dr.ing. Ştefan-Gheorghe Pentiuc – Universitatea “Ştefan cel Mare” Suceava

Copyright © 2005. Toate drepturile asupra acestei ediţii sunt rezervate autorului

2

Descrierea CIP a Bibliotecii Naţionale a RomânieiMORARIU, NICOLAEBaze de date; Îndrumar de laborator/ Nicolae Morariu . – Suceava: Editura Universităţii din Suceava, 2005

Bibliogr.ISBN 973-666-159-8

004.65(075.8)

Page 3: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

CUPRINS

Introducere.........................................................................................................................4

Lucrare de laborator nr. 1..................................................................................................5Baze de date ACCESS. Crearea unei baze de date.................................................5

Lucrare de laborator nr. 2..................................................................................................9Baze de date ACCESS. Crearea şi utilizarea tabelelor...........................................9

Lucrare de laborator nr. 3................................................................................................14Baze de date ACCESS. Crearea câmpurilor de tip Lookup Wizard....................14

Lucrare de laborator nr. 4................................................................................................21Baze de date ACCESS. Crearea tabelelor bazei de date FurnizoriClienti...........21

Lucrare de laborator nr. 5................................................................................................24Baze de date ACCESS. Interogări........................................................................24

Lucrare de laborator nr. 6................................................................................................30Baze de date ACCESS. Formulare.......................................................................30

Lucrare de laborator nr. 7................................................................................................34Baze de date ACCESS. Rapoarte..........................................................................34

Lucrare de laborator nr. 8................................................................................................43Baze de date FoxPro. Creare tabele, introducere şi editare date în tabele...........43

Lucrare de laborator nr. 9................................................................................................49

Baze de date FoxPro. Elementele limbajului FoxPro...........................................49

Lucrare de laborator nr. 10..............................................................................................59Baze de date FoxPro. Clase de instrucţiuni ale limbajului FoxPro......................59

Lucrare de laborator nr. 11..............................................................................................67Baze de date FoxPro. Programarea în Visual FoxPro..........................................67

Lucrare de laborator nr. 12..............................................................................................75Limbajul SQL. Crearea bazei de date...................................................................75

Lucrare de laborator nr. 13..............................................................................................82

Limbajul SQL. Interogarea bazelor de date..........................................................82

Bibliografie......................................................................................................................88

3

Page 4: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

IntroducereAplicaţiile practice prezentate în îndrumarul de laborator au la bază lucrarea Baze de date

elaborată de autor şi publicată de Editura Universităţii “Ştefan cel Mare” Suceava, ISBN 973-8293-83-9, 2003.

Informatica de gestiune a impus dezvoltarea şi diversificarea rapidă a Sistemelor de Gestiune a Bazelor de Date (S.G.B.D.) şi a condus la realizarea unui număr impresionant de aplicaţii informatice cu baze de date. Sistemele şi aplicaţiile informatice cu baze de date sunt utilizate azi în aproape toate domeniile de activitate din care un loc aparte îl ocupă utilizarea lor în cadrul agenţilor economici.

Scopul lucrării este de a familiariza studenţii economişti cu utilizarea unor produse pentru crearea şi gestionarea bazelor de date. Lucrările practice de laborator sunt realizate în cadrul produselor FoxPro, Access şi a limbajului SQL utilizat în cadrul sistemului Oracle.

Pentru a asigura parcurgerea şi însuşirea problematicii propuse, lucrarea de faţă cuprinde trei părţi şi anume: I – Baze de date Access, II – Baze de date FoxPro, III – Limbajul SQL.

Partea I-a prezintă un mediu de lucru performant cu baze de date. Sunt definite componentele unei baze de date Access, fazele şi procedurile de urmat pentru crearea şi exploatarea bazei de date. Această problematică este tratată pe parcursul a şapte lucrări de laborator, în fiecare lucrare fiind prezentate sumar facilităţi ale produsului Access, modalităţi de soluţionare a unor probleme practice şi formulate probleme propuse spre rezolvare.

În partea a II-a sunt prezentate căi practice de organizare şi exploatare a bazelor de date relaţionale cu ajutorul sistemului FoxPro. Sunt prezentate elementele limbajului FoxPro şi evidenţiate facilităţile oferite de mediul de programare Visual FoxPro. Problemele avute în vedere privind crearea şi utizarea unei baze de date FoxPro sunt enunţate şi soluţionate în cadrul a patru lucrări de laborator având în vedere problema enunţată şi rezolvată folosind produsul Access.

În partea a III-a este prezentat limbajul SQL pentru crearea, administrarea şi interogarea bazelor de date relaţionale. Implementat în majoritatea produselor software moderne de baze de date, limbajul SQL este larg utilizat în arhitecturi cu baze de date client / server, sisteme de baze de date distribuite, pentru accesarea bazelor de date în reţele de calculatoare, cât şi pentru interogarea bazelor de date pe un singur calculator personal. Sunt illustrate exemple de utilizare a limbajului SQL în cadrul produsului Oracle pentru crearea, actualizarea şi interogarea bazei de date, definirea utilizatorilor şi acordarea drepturilor de acces, asigurarea securităţii bazei de date la nivel de sistem şi la nivel de relaţie. Exemplele prezentate pecum şi problemele formulate spre rezolvare pleacă de la problema enunţată şi soluţionată în primele două părţi ale lucrării.

Prezentarea modalităţilor de soluţionare a aceleiaşi probleme în cadrul a trei produse pentru crearea şi interogarea bazelor de date relaţionale oferă posibilitatea efectuării unei analize comparative privind facilităţile oferite de fiecare din cele trei produse utilizate.

4

Page 5: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 1

Tema: Baze de date ACCESS. Crearea unei baze de date.

Microsoft Access este un sistem pentru crearea şi utilizarea bazelor de date de complexitate medie pentru calculatoare personale, putând lucra performant cu sute de mii de înregistrări pe un calculator personal sau în cadrul unei reţele de până la 20 utilizatori care lucrează simultan cu baza de date.

Programul Access stochează toate componentele unei baze de date într-un singur fişier pe disc cu extensia .mdb.

Componentele unei baze de date ACCESSO bază de date Access poate conţine următoarele componente:

- Tabele – stochează datele bazei de date. Fiecare coloană a tabelei este numită câmp şi fiecare rând al tabelei este numit înregistrare.

- Interogări – realizează extragerea unor date din una sau mai multe tabele conform unor criterii precizate de utilizator în vederea vizualizării şi actualizării datelor din baza de date sau pentru a crea alte tabele în vederea păstrării unui instantaneu al informaţiilor. O interogare nu are date proprii şi operează cu date din tabelele bazei de date.

- Formulare – un formular este o fereastră pentru introducerea sau afişarea şi editarea datelor. Un formular poate conţine subformulare pentru a afişa date asociate unor date din formular şi butoane sau alte obiecte grafice pentru realizarea anumitor acţiuni.

- Rapoarte – sunt utilizate pentru operaţii de ieşire în vederea obţinerii unor situaţii rezultate din prelucrarea unor date din baza de date. Pentru includerea selectivă a unor date într-un raport sau pentru realizarea unui raport care foloseşte date din mai multe tabele va trebui creată mai întâi o interogare şi apoi raportul să fie fundamentat pe rezultatele interogării.

- Comenzi macro – permit realizarea unei secvenţe de acţiuni care poate fi ataşată unui buton. - Module – stochează proceduri şi funcţii scrise în limbajul Visual Basic pentru tratarea

evenimentelor.

Crearea unei baze de dateMicrosoft Access furnizează două metode de creare a unei baze de date. 1. se poate crea o bază de date goală şi apoi se adaugă tabelele, interogările,

formularele, rapoartele şi alte obiecte necesare. 2. se poate crea o bază de date folosind Database Wizard.

Indiferent de metoda prin care se creează baza de date, ea poate fi oricând modificată.

Crearea unei baze de date goalePentru a crea o bază de date goală se vor executa următoarele operaţii:

1. Atunci când se deschide o sesiune Microsoft Access, pe ecran se afişează caseta de dialog Microsoft Access ce conţine opţiuni care permit crearea unei baze de date noi sau deschiderea uneia existente (vezi figura 1). Pentru a crea o bază de date goală (fără a folosi un Wizard), se execută clic pe opţiunea Blank Database şi apoi se execută clic pe butonul OK. Dacă baza de date este deschisă deja sau caseta de dialog Microsoft Access este închisă, atunci se va executa clic pe butonul New Database din bara instrumentelor Database. Pe ecran se afişează caseta de dialog New (vezi figura 2). Se execută dublu-clic pe pictograma Blank Database din eticheta General

5

Page 6: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Blank Database – permite crearea unei baze de date goaleDatabase Wizard – permite crearea unei noi baze de date folosind un wizardOpen an Existing Database – permite deschiderea unei baze de date existente.

6

Figura 2 Caseta de dialog New

Figura1 Caseta de dialog Microsoft Access

Page 7: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

2. În caseta de dialog File New Database care apare pe ecran (figura 2.1), se va specifica numele bazei de date în controlul File name şi se alege un dosar pentru baza de date în controlul Save in, apoi execută clic pe butonul Create. Pe ecran se va deschide fereastra Database (vezi figura 4).

După crearea unei baze de date goale se vor defini obiectele (tabelele, formularele, interogările, rapoartele etc.) care vor forma baza de date.

Crearea bazei de date folosind Database WizardPentru a crea o nouă bază de date folosind un Wizard se vor executa următoarele operaţii:

Atunci când se deschide o sesiune de lucru Access, pe ecran se afişează caseta de dialog Microsoft Access ce conţine opţiuni care permit crearea unei baze de date noi sau deschiderea uneia deja existente (vezi figura 1). Pentru a crea o bază de date folosind un Wizard, se va executa clic pe opţiunea Database Wizard şi apoi se execută clic pe butonul OK. Dacă este deja deschisă o bază de date sau caseta de dialog Microsoft Access este închisă, atunci se execută clic pe butonul New Database din bara instrumentelor Standard. Pe ecran se afişează caseta de dialog New (vezi figura 2). Se execută apoi clic pe eticheta Databases.

În eticheta Databases, se execută dublu-clic pe pictograma tipului de bază de date care se va crea (vezi figura 3). În caseta de dialog File New Database se selectează dosarul în care se va salva baza de date şi se va tasta numele acesteia. Se execută clic pe butonul Create pentru a începe definirea noii baze de date. Se vor urma indicaţiile din casetele de dialog ce apar pe ecran. La terminarea operaţiei de creare a bazei de date pe ecran se afişează fereastra Database conţinând obiectele definite de Wizard (vezi figura 4), pe baza indicaţiilor care au fost date în casetele de dialog.

7

Figura 2.1 Caseta de dialog File New Database

Page 8: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Problemă propusăSă se creeze baza de date FurnizoriClienţi prin fiecare din cele două metode prezentate mai

sus.

8

Figura 3 Caseta de dialog New având selectatã eticheta Databases

Figura 4 Obiectele bazei de date de tip Contact Management

Page 9: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 2

Tema: Baze de date ACCESS. Crearea şi utilizarea tabelelor

Tabela este o colecţie organizată de date despre un anumit subiect, cum ar fi produse, furnizori etc. Folosind o tabelă separată pentru fiecare subiect se elimină duplicarea datelor, asigurându-se astfel utilizarea mai eficientă a spaţiului de stocare şi reducerea erorilor la introducerea datelor. Tabelele sunt organizate în coloane (numite câmpuri) şi linii (numite înregistrări sau articole).

Tipuri de dateLa alegerea tipului de date pentru un câmp se vor avea în vedere următoarele observaţii:

• Tipul de date admise în camp. Spre exemplu, nu se va putea memora text într-un câmp cu tipul de date Number. • Spaţiul alocat pentru memorarea valorilor din câmp • Tipurile de operaţii ce se vor execute cu valorile din camp. Spre exemplu, Microsoft Access poate aduna valorile din câmpurile Number sau Currency, dar nu şi valorile din câmpurile Text sau OLE Object.• Câmpurile de tip Memo sau OLE Object nu pot fi sortate sau indexate. • Câmpurile Memo sau OLE Object nu se pot folosi pentru a grupa articolele în cereri sau rapoarte. • Într-un câmp Text, numerele sunt sortate ca şiruri de caractere (1, 10, 100, 2, 20, 200 s.a.m.d.), nu ca valori numerice. Pentru a sorta numerele ca valori numerice se folosesc câmpurile Number sau Currency. De asemenea, multe formate de date calendaristice nu se vor sorta corect dacă se introduc într-un câmp Text. Pentru a fi sortate corect se introduc numai într-un câmp de tip Date/Time.

Tipurile de date admise în Microsoft Access, modul lor de folosire şi dimensiunea de memorare sunt prezentate în tabelul T1.

T1. Tipuri de date admise într-o bază de date AccessTipul datei Utilizare Spaţiul de memorie necesarText Text sau combinaţie de text şi numere, cum

ar fi adresele. De asemenea, numere ce nu

necesită calcule, cum ar fi numerele de

telefon, numerele de partidă sau codurile

poştale.

Până la 255 caractere.

Microsoft Access memorează

numai caracterele introduse în

câmp; nu se memorează

caractere „spaţiu” pentru

poziţiile nefolosite. Pentru a

controla numărul maxim de

caractere ce pot fi introduse se

setează proprietatea FieldSize.Memo Texte şi numere foarte lungi, cum ar fi notiţe Până la 64,000 caractere.

9

Page 10: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

sau descrieri. Number Date numerice folosite pentru calcule

matematice, cu excepţia calculelor ce impun

valori monetare. Pentru a defini un anumit tip

Number setaţi proprietatea FieldSize.

1, 2, 4 sau 8 bytes (16 bytes

numai pentru Replication ID).

Date/Time Date calendaristice şi timpi. 8 bytes.Currency Valori monetare. Se va folosi tipul de date

Currency pentru a preveni rotunjirea pe

timpul calculelor. Precizia tipului este de 15

cifre la partea întreagă şi 4 cifre la partea

zecimală.

8 bytes.

AutoNumber Numere în secvenţă unică (din 1 în 1) sau

aleatoare care sunt automat inserate atunci

când se adaugă un articol.

4 bytes (16 bytes numai pentru

Replication ID).

Yes/No Câmpuri care vor conţine numai una din două

valori, cum ar fi Yes/No, True/False, On/Off.

1 bit.

OLE Object Obiecte (cum ar fi documente Microsoft

Word, foi de calcul Microsoft Excel, imagini,

sunete sau alte date binare) create în alte

programe folosind protocolul OLE, ce pot fi

înlănţuite sau încapsulate într-o tabelă

Microsoft Access. Trebuie să se folosească

un cadru de obiect legat într-o machetă sau

raport pentru a afişa obiectul OLE.

Pâna la 1 GB (limitat de spaţiul

disc).

Lookup

Wizard

Crearea unui câmp care permite alegerea unei

valori dintr-o altă tabelă sau dintr-o listă de

valori folosind o casetă combo. Alegând

această opţiune, se lansează un Wizard care

dirijează crearea listei.

Acelaşi spaţiu ca şi câmpul

cheii primare folosit pentru a

executa examinarea, în mod

obişnuit 4 bytes.

În tabelul T2 sunt prezentate tipurile şi mărimea valorilor numerice ce pot fi memorate în câmpurile de tip Number.

T2. Date de tip NumberValoarea proprietăţii FieldSize

Domeniu Precizie Memorie necesară

Byte 0 la 255 1 byte

10

Page 11: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Integer -32,768 la 32,767 2 bytesLong Integer -2,147,483,648 la 2,147,483,647 4 bytesSingle -3.402823E38 la 3.402823E38 7 4 bytesDouble -1.79769313486232E308 la

1.79769313486232E308

15 8 bytes

Crearea unei tabeleÎn Microsoft Access există două metode de a creare a unei tabele şi anume:

- se poate crea o tabelă goală (empty) pentru a introduce datele;- se poate crea o tabelă folosind datele existente într-o altă sursă de date.

Crearea unei tabele goaleÎn Microsoft Access există patru procedee pentru crearea unei tabele goale, astfel:

Î Database Wizard pentru a crea într-o singură operaţie toate tabelele, formularele şi rapoartele necesare întregii baze de date. Database Wizard creează o nouă bază de date. Acest procedeu nu poate fi folosit pentru a adăuga noi tabele, formulare sau rapoarte într-o bază de date existentă.

p Table Wizard pentru a alege câmpurile tabelei dintr-o varietate de tabele predefinite, cum ar fi contacte de afaceri, inventare de casă sau articole medicale.

c DataSheet pentru introducerea datelor direct într-o foaie de date (datasheet). La salvarea foii de date Microsoft Access va analiza datele şi automat va atribui tipul de date şi formatul pentru fiecare câmp.

f Design pentru a defini toate detaliile tabelei.

Indiferent de metoda care se foloseşte pentru crearea unei tabele, se poate utiliza vederea Design pentru a modifica descrierea tabelei, prin adăugarea de noi câmpuri, stabilirea valorilor implicite sau crearea măştilor de introducere. În figura 5 este reprezentată fereastra Design view pentru crearea unei tabele.

11

Page 12: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Crearea unei tabele folosind vederea Design.Pentru a crea o tabelă folosind vederea Design se execută următoarele operaţii:

1. Se deschide în fereastra Database baza de date în care se creează o nouă tabelă, dacă ea nu este deja deschisă. Se poate folosi tasta funcţională F11 pentru a comuta în fereastra Database din orice altă fereastră.

2. Se activează eticheta Tables şi apoi, fie se selectează opţiunea Create table in Design view (vezi figura 5), fie se execută clic pe butonul New (vezi figura 6) şi în caseta de dialog New Table, ce apare pe ecran (vezi figura 6), se va selecta opţiunea Design View şi apoi se execută clic pe butonul OK.

3. În fereastra Design View care apare pe ecran (vezi figura 5) se va defini fiecare câmp al tabelei.4. Înainte de a salva tabela, se va defini o cheie primară prin click dreapta pe numele câmpului

corespunzător şi selectare opţiune Primary key. Cheia primară poate fi stabilită şi ulterior.5. După definirea structurii tabelei, se execută clic pe butonul Save din bara butoanelor Standard

sau se selectează opţiunea Save din meniul File şi apoi se va tasta un nume pentru tabelă.

12

Figura 5 Fereastra Design View a unei tabele

Page 13: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Definirea câmpurilorPentru a defini câmpuri în Design View se vor executa, în general următoarele operaţii:

1. Pentru adăugarea unui câmp în interiorul unei structuri deja definite, se selectează linia sub care se va adăuga noul câmp şi apoi se execută clic pe butonul Insert Rows din bara instrumentelor Standard sau se selectează comanda Rows din meniul Insert. Pentru a adăuga câmpul la sfârşitul structurii se execută clic în coloana Field Name a primei linii goale.

2. În coloana Field Name se tastează numele câmpului, respectând regulile Microsoft Access pentru denumirea obiectelor.

3. În coloana Data Type, se execută clic pe săgeată şi se selectează tipul de dată dorit.4. În coloana Description se poate introduce o descriere a câmpului.5. În foaia de configurare Field Properties se stabilesc caracteristicile câmpului (dimensiune,

mesaj de introducere, valoarea implicită, formate de afişare etc.).Algoritmul prezentat este valabil pentru următoarele tipuri de câmpuri: Text, Memo,

Number, Curency, Yes/No, Date/Time, AutoNumber.Reguli de denumirea obiectelor

Numele unui obiect poate avea maximum 64 caractere şi poate include orice combinaţie de litere, cifre, spatii şi caractere speciale, exceptând punctul (.), semnul exclamării (!), apostroful (`)

13

Figura 6 Caseta de dialog New Table având selectată opţiunea Design View

Page 14: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

şi parantezele drepte ([,]). Este indicat să se evite folosirea spatiilor în numele obiectelor şi nume foarte lungi pentru obiecte dacă acestea vor fi referite frecvent în expresii sau cod Visual Basic.

Proprietăţile câmpurilorFiecare câmp are un set de proprietăţi care se pot folosi pentru a personaliza modul în care

datele unui câmp sunt stocate, manipulate sau afişate. Spre exemplu, se poate controla numărul maxim de caractere ce se pot introduce într-un câmp Text stabilind proprietatea FieldSize a acestuia. Proprietăţile care există pentru fiecare câmp depind de tipul de date care a fost selectat pentru câmpul respectiv.

Pentru a modifica proprietăţile unui câmp se execută următoarele operaţii:1. Se deschide tabela în vederea Design.2. În partea superioară a ferestrei Design se selectează câmpul ale cărei proprietăţi urmează a fi modificate.3. Se selectează proprietatea a cărei valoare vrem s-o modificăm executând clic în linia din dreapta numelui proprietăţii (în fila General de sub descrierea tabelei).4. Se repetă operaţiile 2 şi 3 pentru toate proprietăţile ale căror valori vrem să le modificăm.5. După efectuarea tuturor modificărilor se închide fereastra Design.

În cazul în care pentru un câmp s-a ales tipul Lookup Wizard, atunci se lansează un Wizard prin intermediul căruia putem realiza o listă de examinare care afişează datele dintr-o tabelă (sau interogare) existentă care conţine deja date, sau dintr-o listă de valori prestabilită după cum este ilustrat în imagiea de ecran din figura 7. Acest tip de câmp permite selectarea valorilor dintr-o tabelă sau listă afişată, în loc ca ele să fie tastate.

14

Figura 7. Casetă de dialog Lookup Wizard pentru crearea unei liste din valorile unei tabele, (interogări), sau liste de valori

Page 15: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 3

Tema: Baze de date ACCESS. Crearea câmpurilor de tip Lookup Wizard

Un câmp de tipul Lookup Wizard, permite realizarea şi utilizarea unei liste de examinare care afişează datele dintr-o tabelă (sau interogare) existentă care conţine deja date, sau dintr-o listă de valori prestabilită după cum este ilustrat în imagiea de ecran din figura 7. Acest tip de câmp permite selectarea valorilor dintr-o tabelă sau listă afişată, în loc ca ele să fie tastate. În cele ce urmează se vor prezenta paşii de parcurs pentru definirea unui astfel de câmp pentru fiecare din cele două situaţii.

Crearea unui câmp pentru examinarea şi afişarea valorilor dintr-o tabelă sau interogarePentru a crea un câmp care să afişeze valorile dintr-o tabelă sau interogare se execută

următoarele operaţii:

1. În coloana Data Type a câmpului, se execută clic pe săgeată şi selectează Lookup Wizard din lista afişată.

2. În prima casetă de dialog Lookup Wizard (vezi fihgura 7) se selectează opţiunea I will the lookup column to look up the values în a table or query (“doresc o coloană de examinare pentru a vizualiza valorile dintr-o tabelă sau interogare”) şi apoi se execută clic pe butonul Next pentru a trece la următoarea casetă de dialog.

3. În a doua casetă de dialog Lookup Wizard (vezi figura 8) se selectează tabela (interogarea) care va sta la baza listei de examinare şi care va trebui să existe şi să conţină date în câmpul respectiv. Se execută clic pe butonul Next pentru a trece la următoarea casetă de dialog.

4. În a treia casetă de dialog Lookup Wizard (vezi figura 9) se vor selecta câmpurile din tabela examinată a căror valori se vor afişa în lista de examinare. Lista de examinare va conţine câmpurile ce se găsesc în lista Selected Fields. Pentru a muta un câmp din lista Available Fields în lista Selected Field se va selecta câmpul în lista Available Fields şi apoi se va executa clic pe butonul >. După selectarea câmpurilor pentru lista de examinare se va executa clic pe butonul Next pentru a trece la următoarea casetă de dialog.

5. În a patra casetă de dialog Lookup Wizard (vezi figura 10) se stabileşte aspectul listei de examinare. Se recomandă activarea casetei de validare Hide key column pentru ca lista de examinare să nu afişeze şi coloana care conţine cheia de legătură. Pentru a trece la următoarea casetă de dialog se execută clic pe butonul Next.

6. În a cincea casetă de dialog (vezi figura 11) se selectează coloana pentru preluare.

7. În a şasea casetă de dialog Lookup Wizard (vezi figura 12) se modifică, dacă este necesar, numele câmpului de examinare şi caseta de validare Display Help on customizing the lookup column (“afişarea Help-ului la personalizarea coloanei de examinare”). Se execută clic pe butonul Finish pentru a termina crearea câmpului de examinare.

15

Page 16: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

16

Figura 8. A doua casetă de dialog Lookup Wizard (pentru selectare tabelă sau interogare)

Figura 9. A treia casetă de dialog Lookup Wizard (pentru selectare câmpuri pentru listă)

Figura 10. A patra casetă de dialog Lookup Wizard (pentru aspectul listei de examinare)

Page 17: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

17

Figura 11. A cincea casetă de dialog Lookup Wizard (pentru selectare coloană pentru preluare)

Page 18: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Crearea unui câmp pentru examinarea şi afişarea unei liste de valori

Pentru a crea o listă de valori se execută următoarele operaţii:

1. În coloana Data Type a câmpului de examinare, se execută clic pe săgeată şi selectează Lookup Wizard din lista afişată (vezi figura 13).

2. În prima casetă de dialog Lookup Wizard (vezi figura 14) se selectează opţiunea I will type în the values that I want (“voi tasta valorile pe care le doresc”) şi apoi se execută clic pe butonul Next pentru a trece la următoarea casetă de dialog.

3. În a doua casetă de dialog Lookup Wizard (vezi figura 15) se va stabili numărul de coloane al listei şi se vor introduce valorile listei. Se execută clic pe butonul Next pentru a trece la următoarea casetă de dialog.

4. În a treia casetă de dialog Lookup Wizard (vezi figura 16) se modifică, dacă este necesar, numele câmpului de examinare şi caseta de validare Display Help on customizing the lookup column (“afişarea Help-ului la personalizarea coloanei de examinare”). Se execută clic pe butonul Finish pentru a termina crearea câmpului de examinare.

18

Figura 12. A şasea casetă de dialog Lookup Wizard

Page 19: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

19

Figura 14. Casetă de dialog Lookup Wizard pentru crearea unui câmp pentru afişarea unei liste de valori

Figura 13. Selectare tip de câmp Lookup Wizard

Page 20: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

20

Figura 15. A doua casetă de dialog Lookup Wizard pentru crearea unei liste de valori

Figura 16. A treia casetă de dialog Lookup Wizard pentru crearea unei liste de valori

Page 21: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 4

Tema: Baze de date ACCESS. Crearea tabelelor bazei de date FurnizoriClienti. În baza de date FurnizoriClienţi se crează următoarele tabele:

PRODUSE (catalog de produse)

Câmp Semnificaţie Tip dată Dimensiune Observaţii

Codp Cod produs Number, Integer 4 Cheie primară

Denp Denumire produs Text 20

Desp Descriere produs Hyperlink Referă documentcorespunzător

STOCURI (stocurile de produse pe depozite)

Câmp Semnificaţie Tip dată Dimensiune Observaţii

Codp Cod produs Number, IntegerLookup Wizard

4 Lookup Wizard cu tabela PRODUSE

CodDep Cod depozit Text 2

Ump Unitate de măsură produs

Lookup Wizard 8 Creare şi utilizare listă de valori

Cant Cantitate Number, Integer 4

Pret Preţ unitar Number, LongInteger

8

FURNIZORI (catalog de furnizori)

Câmp Semnificaţie Tip dată Dimensiune Observaţii

Codf Cod furnizor Number, Integer 4 Cheie primară

Denf Denumire furnizor Text 30

Adresaf Adresa furnizor Text 25

CLIENTI (catalog de clienţi)

Câmp Semnificaţie Tip dată Dimensiune Observaţii

Codc Cod client Number, Integer 4 Cheie primară

Denc Denumire client Text 30

Adresac Adresa client Text 25

21

Page 22: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

OFERTE (oferte de produse de la furnizori)

Câmp Semnificaţie Tip dată Dimensiune Observaţii

Codf Cod furnizor Number, IntegerLookup Wizard

4 Lookup Wizard cu tabela FURNIZORI

Codp Cod produs Number, Integer

Lookup Wizard4 Lookup Wizard cu

tabela PRODUSE

Ump Unitate de măsură produs

Lookup Wizard 8 Creare şi utilizare listă de valori

Pret Preţ unitar Number, LongInteger

8

Datao Data ofertei Date 8

Oferta Oferta furnizor Hyperlink Referă documentcorespunzător

VANZARI (vânzările de produse pe clienţi)

Câmp Semnificaţie Tip dată Dimensiune Observaţii

Codc Cod furnizor Number, IntegerLookup Wizard

4 Lookup Wizard cu tabela CLIENTI

Codp Cod produs Number, Integer

Lookup Wizard4 Lookup Wizard cu

tabela PRODUSE

Ump Unitate de măsură produs

Lookup Wizard 8 Creare şi utilizare listă de valori

Cant Cantitate Number, Integer 4

Pret Preţ unitar Number, LongInteger

8

Datav Data vânzării Date 8

În imaginea de ecran din figura 17 sunt evidenţiate tabelele bazei de date FurnizoriClienti şi este reprezentată descrierea tabelei Produse.

În mod asemănător şi conform precizărilor din tabelele de mai sus, se vor defini şi celelalte tabele în baza de date şi se vor încărca date pentru diverse produse, preţuri, furnizori, clienţi.

Pentru modificarea structurii unei tabele se va deschide tabela în modul Design.

Pentru preleare sau actualizare date într-o tabelă se va deschide tabela în modul Open.

22

Page 23: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

23

Page 24: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 5

Tema: Baze de date ACCESS. Interogări.

Crearea şi utilizarea interogărilorInterogările se folosesc pentru a vizualiza, modifica şi analiza datele în diverse moduri. De

asemenea, ele pot fi utilizate ca sursă de articole pentru formulare şi rapoarte. Pentru a crea un raport în care sunt utilizate anumite date dintr-o tabelă sau date din mai multe tabele se va crea mai întâi interogarea corespunzătoare şi apoi se va defini raportul utilizând acea interogare.

Există mai multe tipuri de interogări, dar cel mai utilizat tip este interogarea de selecţie.Interogarea poate fi creată folosind un Wizard sau prin proiectare în vederea Design a

interogării. În vederea Design, se specifică datele cu care se va lucra prin adăugarea tabelelor sau interogărilor ce conţin acele date şi se completează celulele din reţeaua de proiectare.

În Microsoft Access există următoarele tipuri de interogări:- Interogare de selecţie – regăseşte datele din una sau mai multe tabele şi afişează rezultatele într-o foaie de date, unde se pot modifica articolele (cu anumite restricţii). De asemenea, se poate folosi o interogare de selecţie pentru a grupa articolele şi a efectua însumări, contorizări, medii aritmetice şi alte tipuri de totalizări. - Interogare cu parametru – Este o interogare care la execuţie afişează propria sa casetă de dialog prin care se solicită introducerea unor informaţii suplimentare, cum ar fi criteriul pentru regăsirea articolelor sau valoarea care se inserează într-un câmp. Se poate proiecta interogarea pentru a solicita mai mult de o singură componentă a informaţiei; spre exemplu, se poate proiecta interogarea pentru a solicita două date. Apoi, Microsoft Access poate regăsi toate datele cuprinse între cele două valori.

De asemenea, interogările cu parametru sunt utile şi atunci când sunt folosite ca bază pentru formulare şi rapoarte. Spre exemplu, se poate crea un raport de vânzări lunare bazat pe o interogare cu parametru (luna). Atunci când se va tipări raportul, Microsoft Access va afişa, mai întâi, o casetă de dialog în care se solicită luna pentru care se doreşte raportul.

De asemenea, se poate crea un formular personalizat sau o casetă de dialog pentru parametrii interogării în loc să se folosească casetele de dialog ale interogării cu parametru. - Interogare de tip crosstab – Interogarea de tip crosstab afişează valori rezumative (totaluri, contorizări şi medii aritmetice) din unul din câmpurile tabelei şi le grupează după un set de factori listaţi în jos pe latura din stânga foii de calcul şi după un alt set de factori listaţi de-a lungul părţii superioare a foii de date. - Interogare de acţiune – Este o interogare care permite modificarea mai multor articole într-o singură operaţie. Există patru tipuri de interogări de acţiune:1. Interogare de ştergere – Permite ştergerea unui grup de articole din una sau mai multe tabele.

Spre exemplu, se poate folosi o astfel de interogare pentru a elimina toate produsele cu stoc 0 sau acelea care nu sunt comandate. Utilizarea acestui tip de interogări, elimină întotdeauna articolele întregi, nu doar câmpurile selectate din articole.

2. Interogare de actualizare – Asigură modificarea globală a unui grup de articole din una sau mai multe tabele. Spre exemplu, se pot mări preţurile de vânzare cu 10% pentru toate produsele dintr-o anumită categorie.

3. Interogare de adăugare – Adaugă un grup de articole din una sau mai multe tabele la sfârşitul uneia sau a mai multor tabele. Spre exemplu, să presupunem s-au identificat câţiva noi clienţi şi baza de date cu informaţii despre aceşti clienţi. Pentru a evita tastarea tuturor informaţiilor,

24

Page 25: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

acestea se pot adăuga la sfârşitul tabelei Clienţi. De asemenea, interogările de adăugare sunt utile pentru:- Adăugarea câmpurilor pe baza unui criteriu. Spre exemplu, este posibil ca la comenzile

nerezolvate să se adauge numai numele şi adresa clienţilor.- Adăugarea articolelor atunci când unele câmpuri dintr-o tabelă nu există într-o altă

tabelă. O interogare de actualizare va adăuga date numai în câmpurile identice şi le va ignora pe celelalte.

4. Interogare pentru creare tabele – Creează o nouă tabelă din toate datele sau numai dintr-o parte a datelor, din una sau mai multe tabele. Interogările pentru crearea tabelelor se pot utiliza pentru:

- Crearea unei tabele pentru a o exporta într-o altă bază de date Microsoft Access. Spre exemplu, este posibil să fie creată o tabelă ce conţine mai multe câmpuri din tabela Angajaţi şi apoi aceasta să fie exportată într-o bază de date folosită de departamentul personal.

- Crearea de rapoarte care să afişeze datele începând cu o dată specificată. Spre exemplu, sa presupunem că se doreşte tipărirea unui raport pe 15 Mai 2002 care să afişeze totalul vânzărilor din primul trimestru, bazat pe datele care au fost în tabele de bază până la 01.04.2002, 9.00 A.M. Un raport bazat pe o interogare sau instrucţiune SQL extrage cele mai recente date din tabele (până la 15 Mai 2002), în loc să extragă toate articolele având data şi timpul specificat. Pentru ca datele să fie exact cum au fost ele la 1 Aprilie 2002, 9.00 A.M., este necesar să se creeze o interogare care să regăsească articolele respective şi să le stocheze într-o nouă tabelă. Apoi această tabelă se foloseşte, în locul unei interogări, ca bază a rapoartelor.

- Crearea copiei de siguranţă a unei tabele.Se poate crea o tabelă “istoric” care să conţină toate articolele. Spre exemplu, se poate crea o tabelă care să conţină toate vânzările efectuate, înainte de a le şterge din tabela curentă.

- Creşterea performanţei formularelor şi rapoartelor bazate pe interogări cu tabele multiple sau instrucţiuni SQL. Spre exemplu, să presupunem că dorim tipărirea mai multor rapoarte ce sunt bazate pe interogări cu cinci tabele ce includ totaluri. Se poate mări viteza de execuţie dacă mai întâi se realizează o interogare care să regăsească articolele necesare şi să le memoreze într-o tabelă. Apoi, se vor baza rapoartele pe această tabelă sau se va specifica tabela într-o instrucţiune SQL ca sursă de articole pentru un formular sau raport, astfel încât să nu se reia interogarea pentru fiecare raport. Datele din tabelă vor fi blocate în timp ce se rulează interogarea de creare a tabelei.Interogare SQL – este o interogare ce se creează pe baza unei instrucţiuni SQL. Există următoarele tipuri specifice de interogări SQL:

1. Interogare reuniune (union query) – Acest tip de interogare combină câmpurile (coloanele) din una sau mai multe tabele sau interogări într-un singur câmp sau coloană din rezultatele interogării. Spre exemplu, dacă există şase vânzători care transmit listele de vânzarere pe luni, se pot combina aceste câmpuri într-un singur set folosind o interogare reuniune şi apoi se poate crea o interogare de creare tabelă bazată pe interogarea reuniune pentru a obţine o nouă tabelă. Interogarea de acest tip constă din instrucţiuni SQL SELECT.

2. Interogare intersecţie (pass-through query) – Acest tip de interogări transmite comenzile direct la bazele de date ODBC, cum ar fi Microsoft SQL Server, folosind comenzile care sunt acceptate de către server. Spre exemplu, se poate folosi o interogare intersecţie pentru a regăsi articole şi a modifica datele.

3. Interogare de definire date (data-definition query) – Acest tip de interogare creează sau alterează obiectele bazei de date, cum ar fi tabelele Microsoft Access sau Microsoft SQL Server.

25

Page 26: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

4. Subinterogare (subquery) – Acest tip de interogări constau dintr-o instrucţiune SQL SELECT în interiorul unei interogări de selecţie sau de acţiune. Se pot introduce aceste instrucţiuni în linia Field a reţelei de proiectare a interogării pentru a defini un nou câmp sau în linia Criteria pentru a defini criteriul pentru un câmp. Subinterogările se pot utiliza pentru:

- A testa existenţa unui anumit rezultat din subinterogare (folosind cuvintele rezervate EXISTS sau NOT EXISTS). - Găsirea tuturor valorilor care sunt egale cu, mai mari ca sau mai mici decât valorile returnate de către subinterogare (folosind cuvintele rezervate ANY, ÎN sau ALL).- Crearea de subinterogări în subinterogări (subinterogări imbricate).

În cele ce urmează este ilustrat modul de definire a unei interogări de selecţie pentru situaţia stocurilor de produse utilizând tabelele Produse, Stocuri.

Se selectează Qeries şi apoi New, iar din caseta New Query se selectează modul Design View (vezi figura 18) şi se apasă butonul OK. Va apare ecranul din figura 19.

Din caseta Show Table se selectează tabela Produse şi se apasă butonul Add, apoi se selectează tabela Stocuri şi se apasă butonul Add şi apoi se apasă butonul Close. Va apare ecranul din figura 20 pentru definirea câmpurilor interogării ilustrate în imaginea de ecran din figura 21. Pentru salvare interogare se închide fereastra Query şi se tastează numele interogării Situatia Stocurilor. Pentru vizualizarea datelor corespunzătoare interogării, se selectează interogarea şi se deschide în modul Open (rezultatul este ilustrat în figura 22.

26

Figura 18. Creare interogare în modul Design View.

Page 27: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

27

Figura 19. Selectare tabele pentru creare interogare.

Figura 20. Caseta Query pentru definirea câmpurilor interogării.

Page 28: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

28

Figura 21. Definirea interogării Situatia Stocurilor.

Figura 22. Vizualizarea datelor corespunzătoare interogării Situatia Stocurilor

Page 29: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Probleme propuseSă se creeze interogările corespunzătoare situaţiei ofertelor de produse şi situaţiei vânzărilor

de produse conform specificaţiilor de mai jos.

Situaţia ofertelor

Situaţia vânzărilor

Se vor crea şi interogări cu parametru în care parametrul va fi, pe rând:- furnizorul;- produsul

pentru situaţia ofertelor şi:- clientul;- produsul;- perioada

pentru situaţia vânzărilor.

Câmp Codf Denf Adresaf Codp Denp Ump Pret DataoTabela Furnizori Furnizori Furnizori Produse Produse Oferte Oferte Oferte

Câmp Codc Denc Adresac Codp Denp Ump Cant Pret Valoare DatavTabela

Clienti Clienti Clienti Produse Produse Vanzari Vanzari Vanzari Cant*Pret

Vanzari

29

Page 30: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 6.

Tema: Baze de date ACCESS. Formulare.

Crearea şi utilizarea formularelor.În Microsoft Access formularele se pot folosi pentru a crea:

- un ecran pentru introducerea datelor în una sau mai multe tabele;- un ecran tip “panou de comutatoare” pentru a deschide alte formulare sau rapoarte;- o casetă de dialog care să solicite de la utilizator informaţii suplimentare necesare

executării unei acţiuni.Majoritatea informaţiilor dintr-un formular provin dintr-o sursă de informaţii, dar există şi

informaţii care se introduc la proiectarea machetei. Legătura dintre formular şi sursa de date se realizează prin intermediul unor obiecte grafice, numite controale. Cele mai utilizate controale sunt casetele de text, cu ajutorul cărora se pot afişa fie informaţiile dintr-o sursă de date, fie rezultatele evaluării unei expresii.

Un formular poate fi creat în două moduri şi anume:- în modul Design view;- utilizând un wizard.

Un wizard poate fi utilizat în modurile (figura 23, caseta New Form care apare la apăsarea butonului New din fereastra Database):Form Wizard, AutoForm: Columnar, AutoForm: Tabular, Chart Wizard, Pivot Table Wizard.

Odată creat, un formular poate fi modificat şi în acest sens se deschide formularul în modul Design pentru a-l modifica aşa cum se doreşte.

Pentru crearea unui singur formular simplu, pe o singură coloană, se poate utiliza opţiunea AutoForm.

Pentru ca formularul să poată afişa câmpurile tabelei (interogării) selectate, trebuie adăugate controale (casete de text, casete combinate, liste etc.) în macheta acestuia. Pentru a putea adăuga controale este necesar ca pe ecran să existe caseta cu instrumente Toolbox şi fereastra List Field. Dacă aceste obiecte nu sunt afişate pe ecran, atunci va trebui ca din meniul View să se selecteze opţiunile Toolbox, pentru a afişa caseta instrumentelor Toolbox, respectiv Field List pentru a afişa lista câmpurilor. După adăugarea controalelor şi stabilirea proprietăţilor formularului, se închide formularul şi i se dă un nume.

SubformulareSubformularul este un formular în interiorul altui formular. Formularul primar este denumit

formular principal (main form), iar formularul din interiorul formularului este numit subformular. Combinaţia formular/subformular este referită adeseori ca formular ierarhic, formular principal/detaliu sau formular părinte/copil.

Subformularele sunt eficiente în special pentru prezentarea datelor din tabele sau interogări cu relaţii 1→m (one-to-many). Spre exemplu, se poate crea un formular cu un subformular pentru a prezenta datele din tabelele Produse şi Stocuri. Datele din tabela Produse reprezintă partea “1” din relaţie, iar datele din tabela Stocuri reprezintă partea “m” din relaţie – fiecare produs putând avea mai multe înregistrări în tabela Stocuri.

Formularul principal şi subformularul din acest tip de formulare sunt înlănţuite, astfel încât subformularul afişează numai înregistrările care sunt corelate cu înregistrarea curentă din

30

Page 31: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

formularul principal. Spre exemplu, atunci când formularul principal afişează produsul Tastatură, subformularul afişează numai stocurile pentru acest produs.

Atunci când se foloseşte un formular cu un subformular pentru a introduce noi înregistrări, Microsoft Access salvează înregistrarea curentă din formularul principal când se intră în subformular. Aceasta asigură ca înregistrările din tabela “m” (mai mulţi) să aibă o înregistrare în tabela “1” (unul) cu care să se coreleze. De asemenea, acesta salvează automat fiecare înregistrare adăugată în subformular.

Subformularul poate fi afişat ca o foaie de date, sau ca un formular singular sau continuu. Formularul principal poate fi afişat numai ca un formular singular. Formularul principal poate avea oricâte subformulare, dacă se plasează fiecare subformular pe formularul principal. De asemenea, se pot realiza cel mult două nivele de subformulare. Aceasta înseamnă că poate exista un subformular într-un formular principal şi un alt subformular în interiorul subformularului, de nivel 1. Spre exemplu, poate exista un formular principal care afişează clienţii, un subformular care prezintă produsele şi un alt subformular care afişează vânzările pentru acele produse şi clienţi.

Una din metodele utilizate pentru crearea unui subformular în cadrul unui formular constă în efectuarea următoarelor operaţii:- se crează un formular principal şi un subformular şi se salvează fiecare separat;- se deschide formularul principal în modul Design;- se trage cu mouse-ul subformularul din fereastra Database peste formularul principal.

În figurile 24,…,29 sunt ilustraţi paşii parcurşi pentru crearea formularului principal Produse utilizând modul Form Wizard. Analog se procedează pentru crearea subformularului Stocuri. În figura 30 este ilustrat rezultatul tragerii subformularului Stocuri peste formularul Produse. Deschiderea formularului Produse în modul Open permite vizualizarea şi actualizarea atât a datelor din tabela Produse cât şi a datelor corespunzătoare din tabela Stocuri aşa cum este ilustrat în imaginea de ecran din figura 31.

31

Figura 23. Fereastra Database. Modalităţi de creare a unui formular (Caseta New Form).

Page 32: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

32

Figura 24. Creare formular Produse (pasul 1)

Figura 25. Creare formular Produse (pasul 2)

Page 33: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

33

Figura 26. Creare formular Produse (pasul 3)

Figura 27. Creare formular Produse (pasul 4)

Page 34: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

34

Figura 28. Creare formular Produse (pasul 5)

Figura 29. Vizualizare formular Produse.

Page 35: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Probleme propuseUtilizând metoda prezentată mai sus, să se creeze următoarele formulare:

- formularul Furnizori cu subformularul Oferte;- formularul Clienţi cu subformularul Vânzări;- formularul ProduseSOV cu subformularele Stocuri, Oferte, Vânzări.

35

Figura 30. Depunere subformular Stocuri în formular Produse.

Figura 31. Utilizare formular Produse pentru vizualizare şi actualizare date în tabelele Produse şi Stocuri.

Page 36: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 7

Tema: Baze de date ACCESS. Rapoarte.

Crearea şi vizualizarea rapoartelorRapoartele au în vedere prelucrarea unor date din baza de date pentru obţinerea unor situaţii

ce urmează a fi tipărite sau afişate pe ecran la cererea utilizatorului. Spre deosebire de formulare care pe lângă vizualizarea datelor permite şi actualizarea acestora, rapoartele realizează interogarea şi prelucrarea datelor din baza de date nefiind posibilă modificarea datelor.

Există două modalităţi de creare a rapoartelor şi anume (figura 32):- creare raport în modul Design view;- creare raport utilizând un wizard.

Un wizard poate fi utilizat în modurile (figura 32, caseta New Report care apare la apăsarea butonului New din fereastra Database):

- Report Wizard;- AutoReport: Columnar:- AutoReport: Tabular;- Chart Wizard;- Label Wizard.

În cele ce urmează se vor prezenta paşii de parcurs pentru realizarea unui raport în modul Report Wizard.

36

Figura 32. Fereastra Database. Modalităţi de creare a unui raport (Caseta New Report).

Page 37: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

1. În caseta de dialog Choose the table or query… se selectează tabela sau interogarea pe care se va fundamenta raportul şi se apasă butonul OK (figura 33, Situaţia Stocurilor).

2. Selectare câmpuri pentru raport din lista Available Fields în lista Selected Fields folosind butoanele > sau >> , după care se apasă butonul Next (figura 34).

3. Selectare mod (tabelă) pentru vizualizare date, după care se apasă butonul Next (figura 35).4. Selectare nivele de grupare date în raport, după care se apasă butonul Grouping Options pentru

a preciza modul de grupare, apoi se apasă butonul Next (figura 36).5. Precizare criterii de ordonare date în raport, după care se apasă butonul Sumary Options pentru

precizarea operaţiilor de efectuat asupra grupurilor de înregistrări (figura 37).6. Precizare operaţii de efectuat asupra grupurilor de înregistrări, după care se apasă butonul OK

(figura 38) şi apoi butonul Next.7. În casetele Layout, Orientation, se selectează forma de realizare a raportului (figura 39) şi apoi

se apasă butonul Next.8. Se selectează stilul de realizare a raportului, apoi se apasă butonul Next (figura 40).9. Precizare titlu raport, după care se apasă butonul Finish (figura 41).În figura 42 este vizualizat raportul obţinut. Pentru modificarea raportului, acesta trebuie deschis în modul Design şi apoi se execută modificările dorite.

Probleme propuse

După exemplul prezentat, să se creeze următoarele rapoarte utilizând modul Report Wizard:

Situaţia ofertelor de produse pe produs

Cod produs Denumire produsCod furnizor Denumire furnizor Adresa furnizor Ump Pret Data ofertei………………………………………………………………………….

……………………………..

Situaţia ofertelor de produse pe furnizor

Cod furnizor Denumire furnizor Adresa furnizorCod produs Denumire produs Ump Pret Data ofertei………………………………………………………

………………………………………………….

Situaţia vânzărilor de produse pe produs

Cod produs Denumire produsCod client Denumire client Adresa client Ump Cantitate Pret Valoare Data vânzării……………………………………………………………………………………….

Total produs xxxxxxx xxxxxx……………………………………Total general xxxxxx

Situaţia vânzărilor de produse pe client

Cod client Denumire client Adresa clientCod produs Denumire produs Ump Cantitate Pret Valoare Data vânzării……………………………………………………………………………

Total client xxxxxx…………………………………………………..Total general xxxxxx

37

Page 38: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

38

Figura 33. Modul Report Wizard Selectare tabelă sau interogare pentru raport .

Figura 34. Modul Report Wizard Selectare câmpuri pentru raport .

Page 39: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

39

Figura 35. Modul Report Wizard. Selectare mod (tabelă) după care vor fi vizualizate datele.

Figura 36. Modul Report Wizard. Selectare nivele de grupare date în raport.

Page 40: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

40

Figura 37. Modul Report Wizard. Precizare criterii de ordonare date în raport.

Figura 38. Modul Report Wizard. Precizare operaţii de efectuat asupra grupurilor de înregistrări.

Page 41: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

41

Figura 39. Modul Report Wizard. Precizare format de realizare raport.

Figura 40. Modul Report Wizard. Selectare stil de realizare raport.

Page 42: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

42

Figura 41. Modul Report Wizard. Precizare titlu raport.

Figura 42. Modul Report Wizard. Vizualizare raport Situaţia stocurilor de produse.

Page 43: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 8

Tema: Baze de date FoxPro. Creare tabele, introducere şi editare date în tabele.

FoxPro este un produs pentru crearea şi gestionarea bazelor de date relaţionale de complexitate medie, elaborat iniţial de firma Fox Software şi preluat ulterior şi dezvoltat de către compania Microsoft începând cu versiunea 2.6 sub Windows (1989 – 1994) şi cotinuând cu versiuni Visual FoxPro: 3.0, 5.0, 6.0, 7.0, 8.0, 9.0, versiunea 9.0 fiind disponibilă începând din anul 2004.

Programul Visual FoxPro este un instrument puternic, interactiv, de gestionare a datelor, mediul Visual FoxPro permiţând crearea aplicaţiilor, utilizarea tehnicilor de programare orientată spre obiecte şi condusă de evenimente, facilităţi ce sporesc la maximum productivitatea în programare. Deşi Visual FoxPro este compatibil cu programarea procedurală standard, noile extensii ale limbajului oferă puterea şi flexibilitatea programării orientate spre obiect. Spre deosebire de programarea procedurală în care un program constă dintr-o secvenţă de instrucţiuni, proiectarea şi programarea orientate spre obiect reprezintă o abordare nouă în care efortul de programare constă în proiectarea obiectelor componente de sine stătătoare ale unei aplicaţii. Obiectele în mediul Visual FoxPro sunt formularele şi controalele care pot fi gestionate prin intermediul proprietăţilor, evenimentelor şi metodelor şi care vor fi incluse în aplicaţii. Extensiile orientate spre obiect ale limbajului Visual FoxPro permit crearea şi întreţinerea cu uşurinţă a bibliotecilor de cod reutilizabil. Programarea orientată spre obiect este o modalitate de a împacheta codul astfel încât să poată fi refolosit şi întreţinut mai uşor. Primul nivel de împachetare se numeşte clasă. O aplicaţie este construită din clase şi obiecte. Clasele descriu proprietăţile şi comportamentul obiectelor care se mai numesc şi instanţe ale clasei. Un obiect are anumite proprietăţi, sau atribute. De exemplu, un automobil are o anumită denumire şi o anumită culoare. Aceste proprietăţi pot fi stabilite în faza de proiectare sau de execuţie.

O tabelă Visual FoxPro poate exista în una din următoarele două situaţii: ca tabelă liberă (externă), adică sub formă de fişier .dbf neasociat vreunei baze de date, sau ca tabelă dintr-o bază de date, adică sub formă de fişier .dbf asociat unei baze de date. Tabelele asociate unei baze de date au unele proprietăţi specifice, care nu există în cadrul tabelelor externe, cum ar fi regulile la nivel de câmp şi de înregistrare, declanşatoarele şi relaţiile persistente. La crearea bazei de date, se reunesc tabelele într-o singură colecţie (fişier cu extensia .dbc) şi se creează dicţionarul de date.

Produsul FoxPro dispune de un limbaj de programare propriu denumit FoxPro care conţine peste 200 comenzi care pot fi executate individual din fereastra de comenzi sau din programe, pentru crearea, întreţinerea şi interogarea bazelor de date, precum şi o multitudine de funcţii matematice, de conversie, de prelucrări statistice, etc. , care pot fi apelate în cadrul instrucţiunilor limbajului.

În modelarea unei părţi a lumii reale se identifică tipurile de entităţi (mulţimile de obiecte similare – având aceleaşi proprietăţi) şi legăturile (relaţiile) între entităţi. Fiecărui tip de entitate îi corespunde un tabel în care fiecare coloană corespunde unei proprietăţi ce defineşte tipul de entitate şi fiecare rând reprezintă o entitate aparţinând tipului respectiv de entitate. Capul de tabel conţine denumirea proprietăţilor ce definesc tipul de entitate. Corespunzător acestui tip de entitate, în FoxPro se va crea o tabelă care va conţine:- o înregistrare antet corespunzătoare capului de tabel (structura tabelei);- câte o înregistrare pentru fiecare rând al tabelului (în FoxPro pentru WINDOWS lungimea maximă a unei înregistrări poate fi de 65500 caractere).

43

Page 44: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Coloanele tabelei create se vor numi câmpuri, iar rândurile se vor numi înregistrări. Corespunzător tabelei se va crea un fişier care va avea un nume precizat de utilizator (Ex: Produse) şi extensia .dbf. Înregistrarea antet corespunzătoare capului de tabel va conţine denumirea fiecărei coloane (câmp), tipul datelor din coloană, lăţimea în număr de caractere şi eventual numărul de zecimale pentru câmpurile numerice.

O bază de date FoxPro este un ansamblu de astfel de tabele prin care se descriu entităţile şi legăturile dintre entităţi ce se definesc pentru rezolvarea unei probleme date.

Având în vedere faptul că la deschiderea unei sesiuni de lucru FoxPro directorul curent este directorul în care este instalat produsul FoxPro, prima operaţiune care trebuie efectuată este poziţionarea în directorul de lucru (directorul în care se va crea baza de date), operaţiune care se realizează cu comanda: SET DEFAULT TO <cale>

Tipuri de date recunoscute în FoxProÎn FoxPro sunt recunoscute următoarele tipuri de date:

- tipul caracter (C) = şir format din 0 până la 254 caractere ASCII cu excepţia caracterelor 0 binar (NULL), Ctrl/z (cod 26);

- tipul numeric (N) = succesiune de cifre zecimale, eventual precedată de semnul + sau – şi putând conţine marca zecimală (caracterul “.”);

- tipul flotant (F) = date numerice reprezentate în virgulă flotantă, utilizate pentru calcule matematice de precizie;

- tipul data calendaristică (D) = date calendaristice reprezentate în memorie ca numere, iar formatul extern implicit este ll/zz/aa (ll=nr.lună, zz=nr.zi din lună, aa=ultimele două cifre ale anului);

- tipul logic (L) = date logice reprezentate pe un octet ce pot avea una din valorile: T adevărat (True) sau Y (Yes) sau t sau y, F fals (False) sau N (No) sau f sau n;

- tipul memo (M) = poate conţine un şir de octeţi de lungime maximă două miliarde de caractere. Numai câmpurile tabelelor pot fi de tip memo (nu şi variabilele sau constantele) şi astfel de câmpuri conţin doar adresa pe 10 octeţi către un fişier cu extensia .fpt care conţine informaţia propriuzisă pentru fiecare înregistrare din fişierul .dbf pe lungime variabilă (până la max. două miliarde de caractere)

- tipul general (G) = utilizat pentru susţinerea tehnologiei OLE (Object Linking and Empeding) – legarea şi înglobarea obiectelor (texte, desene, imagini, sunete, foi de calcul tabelar etc.). Stocarea datelor se face tot în fişierul .fpt la fel ca în cazul câmpurilor memo. Pentru a prelua un obiect OLE dintr-o aplicaţie externă în baza de date se foloseşte opţiunea Copy din meniul Edit al programului Windows Explorer pentru a copia obiectul în memoria temporară Clipboard, apoi cu opţiunea Paste sau Paste Special din meniul Edit al programului FoxPro se inserează sau se face referinţa la obiectul din Clipboard în câmpul General din baza de date.

44

Page 45: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Crearea unei tabelePentru crearea unei tabele se va utiliza comanda CREATE <nume tabelă> sau din meniul

File se alege opţiunea New şi apoi Table. În ambele situaţii sistemul FoxPro va afişa un ecran pentru definirea structurii tabelei (fereastra Table Designer pentru definirea tabelei ca în figura 43) în care utilizatorul va introduce pentru fiecare câmp numele, tipul, dimensiunea (lăţimea) eventual numărul de zecimale pentru câmpurile numerice. În figura 44 este redată definirea tabelei Produse.

45

Figura 43. Fereastra Table Designer pentru definirea structurii unei tabele.

Figura 44. Definirea structurii tabelei Produse.

Page 46: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

După definirea tuturor câmpurilor tabelei se apasă butonul OK, iar la mesajul Input data records now se va apăsa butonul Yes dacă se continuă cu operaţia de inserare date în tabelă, sau butonol No în caz contrar. La apăsarea butonului Yes se va afişa un formular de preluare date în mod coloană (Change, figura 45.1), care poate fi transformat în mod tabel (Browse, figura 45.2) selectând opţiunea Browse din meniul Browse.

Problemă propusăSă se creeze tabelele bazei de date FurnizoriClienţi şi să se preia date în fiecare tabelă

conform specificaţiilor prezentate în lucrările de laborator pentru baze de date Access.

Inserare, modificare şi ştergere date într-o tabelă Pentru introducerea datelor în tabelă se poate utiliza una din comenzile:APPEND, EDIT,

BROWSE.Fiecare înregistrare de date din tabelă, pe lângă datele propriu-zise mai conţine încă un octet

numit de invalidare logică care permite marcarea înregistrărilor pentru ştergere (conţine valoarea * pentru înregistrările marcate pentru ştergere). De asemenea fiecare înregistrare primeşte un număr curent numit indicator de înregistrare începând de la 1 în ordinea introducerii înregistrărilor. Fiecare nouă înregistrare este adăugată la sfârşitul fişierului. Ordinea introducerii înregistrărilor în tabelă este numită ordine naturală şi este ordinea implicită în care vor fi parcurse înregistrările tabelei.Pentru modificarea datelor introduse în tabelă pot fi folosite comenzile EDIT, BROWSE.Ştergerea de înregistrări dintr-o tabelă se realizează în două etape:

- ştergerea logică = marcarea pentru ştergere (completarea octetului de invalidare logică pentru ştergere)

- ştergerea fizică = eliminarea înregistrării şi eliberarea spaţiului ocupat.

46

Figura 44. Definirea structurii tabelei Produse.

Figura 45.1. Formular de preluare date în modul Change în tabela Produse.

Figura 45.2. Formular de preluare date în modul Browse în tabela Produse.

Page 47: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Ştergerea logică se realizează cu comanda DELETE. Dacă SET DELETED este ON atunci înregistrările marcate pentru ştergere nu vor fi văzute de alte comenzi FoxPro (Ex: LIST, DISPLAY, BROWSE etc.). Anularea ştergerii logice se realizează cu comanda RECALL.Ştergerea fizică se realizează cu comanda PACK. Ştergerea fizică realizează rescrierea fişierelor corepunzătoare tabelei mai puţin înregistrările marcate pentru ştergere.Ştergerea fizică a tuturor înregistrărilor se poate realiza fie cu comanda ZAP, fie cu comenzile DELETE ALL, PACK.

Structura unei tabele poate fi modificată (modificare câmpuri existente, adăugare de noi câmpuri, ştergere câmpuri existente) utilizând comanda MODIFY STRUCTURE.

Structura unei tabele poate fi vizualizată utilizând comanda LIST STRUCTURE sau DISPLAY STRUCTURE.

Afişarea înregistrărilor unei tabele poate fi realizată cu una din comenzile LIST, DISPLAY ALL.

Oricare din operaţiile de mai sus asupra unei tabele poate fi efectuată numai dacă în prealabil tabela respectivă a fost deschisă.

Deschiderea (activarea) unei tabele se realizează cu comanda: USE < nume tabelă >Deschiderea unei tabele presupune utilizarea unei zone de memorie în care sunt memorate

informaţii privind tabela respectivă, zonă numită zona de lucru.FoxPro 2.6 sub WINDOWS alocă 225 astfel de zone de lucru numerotate de la 1 la 225

ceea ce înseamnă că pot fi deschise la un moment dat maximum 225 tabele.Precizarea zonei de lucru în care este deschisă o tabelă se poate face :

- fie cu comanda USE astfel: USE <nume tabelă> IN <nr.zonă> - fie cu comanda SELECT astfel :

SELECT <ne.zonă>|<alias>USE <nume tabelă>

Zona de lucru implicită este zona 1.Zona de lucru curentă este ultima zonă selectată cu comanda SELECT sau zona 1 în lipsa

unei comenzi SELECT <nr.zonă>.Fiecare zonă de lucru utilizată poate primi un alias specificat în comanda USE, iar în lipsa

specificării, aliasul zonei este numele tabelei deschise în zona de lucru respectivă.Astfel se pot referi câmpurile unei tabele folosind aliasul zonei de lucru în care a fost

deschisă tabela respectivă.Exemplu:

m.codp = 0STORE SPACE(20) TO m.denpUSE Produse IN 3m.codp = Produse.codpm.denp = Produse.denp

În secvenţa de instrucţiuni de mai sus Produse.codp, Produse.denp referă câmpurile codp, denp din tabela Produse deschisă în zona de lucru 3 care nu este zona de lucru curentă.

După terminarea lucrului cu baza de date aceasta trebuie închisă utilizând una din comenzile USE, CLOSE.

Utilizare meniu HelpPentru documentare privind produsul FoxPro se poate utiliza meniul Help ca în exemplul

ilustrat în imaginile de ecran din figura 46 pentru versiunea 2.6 sub Windows.

47

Page 48: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

48

Figura 46. Utilizare meniu Help.

Page 49: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 9

Tema: Baze de date FoxPro. Elementele limbajului FoxPro.

Produsul FoxPro dispune de un limbaj de programare denumit FoxPro care conţine aproximativ 200 comenzi care pot fi executate individual din fereastra de comenzi sau din programe, pentru crearea, întreţinerea şi interogarea bazelor de date.

Elementele limbajului :identificatori, constante, variabile scalare (câmpuri, variabile de memorie), masive, operatori, funcţii, expresii, instrucţiuni, ferestre, meniuri, proceduri, programe.Identificatori - succesiune de caractere (doar primele 10 au semnificaţie) alfabetice, cifre şi liniuţa de subliniere “_” , care poate începe cu o literă sau “_”. Identificatorii pot reprezenta:

- cuvinte cheie ale limbajului (ex. CREATE, FOR, IF, etc.);- cuvinte definite de utilizator (ex. Produse, Codp, Denp, etc.).

Este indicat a se evita utilizarea de cuvinte cheie pentru cuvinte definite de utilizator (pentru a nu crea confuzii şi pentru înţelegerea semnificaţiei cuvintelor utilizate).

Cuvintele cheie ale limbajului pot fi trunchiate la minim primele 4 caractere ca de exemplu: CREATE, CREA, CREAT au aceeaşi semnificaţie. Pot fi utilizate litere majuscule, minuscule sau orice combinaţie de majuscule şi minuscule.

Constante:

- Constanta caracter – succesiune de caractere încadrată între ‘ sau “ sau [ ]Exemplu: ‘Limbajul “FoxPro” la dispoziţia dvs.’(caracterul ‘ s-a utilizat pentru a indica începutul şi sfârşitul constantei iar caracterele “ fac parte din constantă).

- Constante dată calendaristică – o dată calendaristică încadrată între acoladeExemplu: {03/08/02}

- Constante logice – reprezintă valorile logice ‘adevărat’ , ‘fals’ după cum urmează: .T. sau .t. sau .Y. sau .y. pentru ‘adevărat’ (True, true, Yes, yes) .F. sau .f. sau .N. sau .n. pentru ‘fals’ (False, false, No, no)- Constante numerice - succesiuni de cifre zecimale precedate eventual de semnul + sau – şi putând conţine marca zecimală ‘.’. (exemple: 125 , -12.5)

Poate fi utilizată şi notaţia ştiinţifică (exemple: 5.878E+12 reprezintă 5,878 înmulţit cu 10 la puterea 12 , 1.6E-12 reprezintă 1.6 înmulţit cu 10 la puterea –12). - Variabile - sunt identificatori pentru variabile de memorie sau câmpuri într-o

tabelă .DBF.Pentru a preciza că variabila este o variabilă de memorie sau un câmp într-o

tabelă se poate folosi operatorul . sau -> şi aliasul astfel: M.Nume sau M->Nume specifică variabila de memorie Nume Persoane.Nume sau Persoane->Nume specifică câmpul Nume din tabela Persoane .

Dacă nu se face precizarea ca mai sus şi tabela Persoane este deschisă înzona de lucru curentă atunci Nume referă câmpul Nume şi nu variabila de memorie Nume.

O variabilă de memorie poate fi creată prin operaţia de atribuire astfel: m.Nume = ‘Ionescu’ sau folosind comanda STORE astfel STORE ‘Ionescu’ TO m.Nume.

Tipul unei variabile de memorie este dat de valoarea memorată în acea variabilă.

49

Page 50: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

La momente diferite de timp aceeaşi variabilă de memorie poate avea tipuri diferitefuncţie de valoarea memorată în variabilă la fiecare moment.

O clasă specială de variabile o reprezintă variabilele de sistem care sunt utilizate pentru a păstra anumite informaţii ca de exemplu variabila sistem _PCOPIES păstrează numărul de copii de tipărit pentru următorul raport. Identificatorii acestor variabile încep cu caracterul liniuţa de subliniere ‘_’.Masive – sunt structuri de date care permit memorarea mai multor valori într-o zonă de memorie căreia i se atribuie un nume, valorile respective putând fi tratate atât ca un tot cât şi ca elemente distincte. Masivele sunt organizate sub forma unui tablou de valori unidimensional sau bidimensional, deci sub formă de vectori sau de matrice. Declararea unui masiv se realizează cu una din comenzile DIMENSION sau DECLARE ca în exemplele de mai jos:DIMENSION Vec(10) declară un vector numit Vec de 10 elemente Vec(1),Vec(2),…,Vec(10).DIMENSION alfa(2,4) declară matricea alfa cu 2 linii şi 4 coloane având elementele alfa(1,1) alfa(1,2) alfa(1,3) alfa(1,4) alfa(2,1) alfa(2,2) alfa(2,3) alfa(2,4).DECLARE vector(8),matrice(4,3) declară vectorul vector de 8 elemente şi matricea matrice cu 4 linii şi 3 coloane.

Elementele unui masiv pot fi de acelaşi tip sau de tipuri diferite. După declararea unui masiv toate elementele sale vor fi de tip logic având valoarea .F. Ulterior fiecare element al masivului poate primi orice valoare prin instrucţiunea de atribuire =, sau STORE.Operatori –precizează acţiunile ce trebuie efectuate asupra datelor (operanzilor). - Operatori aritmetici: - (unar) specifică un număr negativ + (unar) specifică un număr pozitiv , este implicit + adunare - scădere

* înmulţire/ împărţire** ridicare la putere% modulo - restul împărţirii a două expresii (ex. 42%10 rezultă 2)( ) grupare operaţii

- Operatori de comparare: = egal== egalitate exactă (numai pentru tipul caracter)> mai mare< mai mic>= mai mare sau egal<= mai mic sau egal<> diferit# diferit!= diferit$ este cuprins (numai pentru tipurile caracter şi memo (ex. Dacă A=’Cimp caracter şi memo’ atunci comanda ? ‘caracter’ $ A dă rezultatul .T. deoarece ‘caracter’ este conţinut în A).

- Operatori logici:OR sauAND şi

50

Page 51: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

NOT negaţie ( ) grupare operaţii pt. schimbare prioritate - Operatori asupra şirurilor de caractere:

+ concatenare şiruri (ex. ‘ABC’ + ’DE’ rezultă ‘ABCDE’)- concatenare şiruri cu mutarea spaţiilor libere de la sfârşitul primului

şir la sfârşitul şirului rezultat (ex. ‘ABC ‘ - ‘DE’ rezultă ‘ABCDE ‘Pentru toate tipurile de operatori ordinea de prioritate (precedenţa) este cea convenţională

şi poate fi schimbată folosind parantezele ( ).Funcţii.

Sistemul FoxPro dispune de o gamă variată de funcţii (peste 200) reprezentând:- Funcţii matematice (SIN, COS, TAN, ASIN, ACOS, ATAN, SQRT, etc.)- Funcţii de conversie date (conversia unui tip de dată în alt tip de dată

(DTOC, DTOS, CTOD, VAL, STR, etc.)- Funcţii pentru şirurile de caractere

(LTRIM, RTRIM, ALLTRIM, LOWWER, UPPER, SUBSTR, etc.)- Funcţii pentru date calendaristice (CTOD, DATE, YEAR, etc.)- Funcţii pentru fişiere .DBF (DBF, DELETED, EOF, BOF, RECCOUNT, RECNO, etc.)- Funcţii pentru câmpuri memo (MEMLINES, MLINE, etc.)- Funcţii pentru meniuri (PAD, BAR, PROMPT, etc.)- Funcţii pentru operaţii de intrare/ieşire (LASTKEY, COL, ROW, PRINTSTATUS)- Funcţii de intrare/ieşire de nivel inferior

(FCREATE, FOPEN, FCLOSE, FREAD, FWRITE, FGETS, FPUTS, etc.)- Alte funcţii (FILE, SYS, etc.)Expresii – sunt construcţii realizate folosind elementele limbajului (constante, identificatori, operatori, variabile, masive, funcţii) şi utilizate în cadrul instrucţiunilor limbajului.

O caracteristică importantă a expresiilor este tipul, care este dat de tipul elementelor utilizate în cadrul expresiilor. Astfel tipul unei expresii poate fi:

Numeric <expN>; Caracter <expC>; Logic <expL>; Dată calendaristică <expD>.În cadrul unei expresii toate elementele trebuie să fie de acelaşi tip. Pentru realizarea acestei cerinţe se pot folosi funcţiile de conversie de tip. Dacă într-o expresie tipurile operanzilor nu sunt compatibile între ele sau cu operatorii utilizaţi, atunci va apare eroarea:

“Data type mismatch”Instrucţiuni

O instrucţiune (comandă) FoxPro este o construcţie care începe cu un verb (cuvânt cheie care precizează o anumită acţiune) şi care mai poate conţine o serie de clauze care specifică condiţiile în care se va executa comanda respectivă. O instrucţiune poate fi scrisă pe una sau mai multe linii, continuarea instrucţiunii pe linia următoare fiind precizată prin caracterul ‘;’. Fac excepţie instrucţiunile pentru controlul execuţiei programului (instrucţiunile de programare structurată) şi anume:

IF…ELSE…ENDIFDO CASE…ENDCASEDO WHILE…ENDDOFOR…ENDFOR

care conţin câte un singur cuvânt cheie pe o linie şi nu pot fi executate din fereastra de comenzi FoxPro ci numai din programe.

Pe aceeaşi linie nu poate fi scrisă decât o singură comandă FoxPro.

51

Page 52: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Liniile care încep cu caracterul ‘*’ sunt considerate linii de comentarii şi deci nu sunt interpretate de compilator. O linie instrucţiune poate conţine în continuare un comentariu precedat de caracterele &&.Exemple de instrucţiuni:

BROWSE FIELDS Codp,Denp (Permite editarea în mod Browse doar a câmpurilor Codp,Denp ale tabelei Produse descrise anterior.)

DEFINE WINDOW f1 FROM 1,1 TO 10,50;TITLE ‘Fereastra f1’;COLOR SCHEME 3

(Defineşte fereastra f1 din linia 1 coloana 1 până în linia 10 coloana 50, având titlul ‘Fereastra f1’ şi utilizând schema de culori 3)

IF sw = 1SELECT 1

ELSESELECT 2

ENDIF(dacă variabila de memorie sw are valoarea 1 selectează zona de lucru 1, altfel selectează zona de lucru 2)Observaţii:

- orice cuvânt cheie FoxPro poate fi trunchiat la minim primele 4 caractere ale cuvântului.(Ex. DEFINE este acelaşi lucru cu DEFI, DEFIN, DEFINE, WINDOW este acelaşi lucru cu WIND, WINDO, WINDOW);

- orice instrucţiune FoxPro poate fi executată fie din fereastra de comenzi FoxPro, fie dintr-un program, cu excepţia instrucţiunilor de control al execuţiei programelor (IF, DO CASE, DO WHILE, FOR) care nu pot fi executate din fereastra de comenzi, ci doar din programe sau proceduri.

Proceduri, programe în FoxProProceduri

O procedură FoxPro este o secvenţă de instrucţiuni care începe cu instrucţiunea PROCEDURE <nume procedură> şi se termină cu instrucţiunea RETURN. Dacă instrucţiunea RETURN lipseşte atunci următorul cuvânt PROCEDURE determină sfârşitul procedurii anterioare. O procedură este lansată în execuţie cu comanda DO <nume procedură>. O procedură poate face parte din fişierul .PRG din care este apelată, poate fi ea însăşi un fişier .PRG distinct, sau poate face parte dintr-o bibliotecă de proceduri (un fişier .PRG care conţine una sau mai multe proceduri) caz în care înainte de apelarea procedurii, biblioteca care o conţine trebuie deschisă cu comanda SET PROCEDURE TO <nume bibliotecă> , unde <nume bibliotecă> este numele fişierului .PRG ce reprezintă biblioteca de proceduri.

Pot fi utilizate şi proceduri cu parametri, caz în care prima instrucţiune a procedurii este instrucţiunea PARAMETERS <lista parametri formali> , iar apelarea procedurii se realizează cu comanda DO <nume procedură> WITH <lista parametri actuali>.

ProgrameUN program FoxPro este o secvenţă de instrucţiuni conţinută într-un acelaşi fişier cu

extensia .PRG. Pentru editarea unui program se poate folosi fie un editor extern (care trebuie

52

Page 53: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

specificat în fişierul CONFIG.FPW), fie editorul produsului FoxPro care se lansează cu comanda MODIFY COMMAND <nume program>.

Un program FoxPro poate fi construit ca o ierarhie de proceduri astfel:

………………………………………………………………………………….Programul FoxPro corespunzător va fi de forma:

PROCEDURE < main> &&(opţional). . .DO P1. . .DO P2. . .DO Pn. . . RETURNPROCEDURE P1. . .RETURNPROCEDURE P2. . . DO P21. . . DO P22. . . DO P2k. . . RETURN. . . PROCEDURE Pn. . . RETURNPROCEDURE P21

53

main

P1 P2…

Pn

P21 P22 … P2k

P2k1 P2k2 … P2kr

Page 54: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

. . . RETURNPROCEDURE P22. . . RETURN. . . PROCEDURE P2k. . . DO P2k1. . .DO P2k2 . . . DO P2kr. . .RETURNPROCEDURE P2k1. . . RETURNPROCEDURE P2k2. . . RETURN. . . PROCEDURE P2kr. . . RETURN. . . . . . . . . . . . . . . . .

Pentru a putea fi executat, un program FoxPro va trebui mai întâi compilat rezultând astfel un fişier cu extensia .FXP. Lansarea în execuţie a unui program se realizează cu comanda

DO <nume program>La lansarea în execuţie, dacă în programul sursă au fost efectuate modificări cu editorul MODIFY COMMAND sau cu un editor specificat în fişierul CONFIG.FPW, obţinerea fişierului obiect .FXP se realizează automat şi apoi se execută programul.

Ferestre şi meniuri utilizatorFerestre

Produsul FoxPro permite lucrul cu ferestre definite de utilizator.O fereastră este o zonă dreptunghiulară de ecran definită fie prin două puncte (colţul din

stânga sus şi colţul din dreapta jos), fie printr-un punct (colţul din stânga sus) şi înălţimea (nr. de rânduri) şi lăţimea ferestrei (nr. de coloane) . Un punct este definit de coordonatele sale reprezentând numărul de rând şi numărul de coloană. Pentru a putea fi folosită, o fereastră utilizator trebuie mai întâi definită, operaţie care se realizează cu comanda DEFINE WINDOW. O fereastră utilizator poate fi definită în interiorul unei ferestre părinte, care poate fi: fie fereastra principală FoxPro , fie o altă fereastră utilizator. Coordonatele punctelor ce definesc fereastra în cazul definirii prin două puncte (colţul din stânga sus şi colţul din dreapta jos) sunt funcţie de dimensiunea fontului ferestrei părinte. Se pot defini ferestre utilizator care sunt mai mari decât ecranul.Exemple.

DEFINE WINDOW f1 FROM 4,4 TO 15,45

54

Page 55: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

DEFINE WINDOW f1 AT 4,4 SIZE 10,40Cele două instrucţiuni sunt echivalente şi definesc fereastra f1 începând din colţul din stânga sus precizat de punctul dat de rândul 4 coloana 4 şi având 10 rânduri şi 40 coloane.Dacă presupunem că fontul ferestrei principale FoxPro nu este stilul ‘Roman” de 24 puncte atunci comenzile de mai jos definesc ferestre de dimensiuni diferite:

DEFINE WINDOW f1 FROM 4,4 TO 15,45 FONT “Roman”,24DEFINE WINDOW f1 AT 4,4 SIZE 10,40 FONT “Roman”,24

Pentru prima comandă coordonatele punctelor ce definesc fereastra se bazează pe fontul ferestrei principale FoxPro, iar în a doua comandă, dimensiunile ferestrei se bazează pe fontul precizat în comandă (‘Roman” de 24 de puncte).

Pentru ferestrele definite pot fi realizate următoarele operaţii:- Activare ferestre cu comanda ACTIVATE WINDOW

(după activarea unei ferestre, aceasta rămâne pe ecran până la dezactivarea ei şi toate informaţiile de ieşire pe ecran vor fi dirijate către această fereastră).

- Dezactivare ferestre cu comanda DEACTIVATE WINDOW(o fereastră dezactivată este ştearsă de pe ecran, însă rămâne în continuare în memorie).

- Ascunde ferestre cu comanda HIDE WINDOW(o fereastră ascunsă este ştearsă de pe ecran, rămânând ân continuare în memorie, însă informaţiile trimise spre ecran sunt afişate în continuare în acea fereastră).

- Afişare ferestre cu comanda SHOW WINDOW(fereastra ascunsă cu comanda HIDE va fi afişată pe ecran).

- Ştergere ferestre cu comanda RELEASE WINDOW sau CLEAR WINDOW(dezactivează ferestrele precizate şi le elimină din memorie).

- Salvare ferestre cu comanda SAVE WINDOW(salvează ferestrele specificate într-un fişier pe disc sau într-un câmp memo)

- Recuperare ferestre cu comanda RESTORE WINDOW (ferestrele menţionate sunt aduse în memorie de pe disc sau din câmpul memo).

MeniuriMeniurile sunt o categorie importantă de obiecte pentru realizarea interfeţei utilizator în

cadrul aplicaţiilor FoxPro. Produsul FoxPro, alături de meniurile sistem, oferă posibilitatea definirii şi folosirii meniurilor utilizator şi anume: meniuri orizontale şi meniuri verticale.

Meniuri orizontale (bara de meniuri) – conţine un număr de opţiuni numite pad-uri aşezate de regulă pe acelaşi rând.

Crearea şi utilizarea unui meniu presupune parcurgerea următoarelor operaţii: - definire meniu – cu comanda DEFINE MENU <nume meniu>; - definire opţiuni – cu comanda DEFINE PAD; - precizare acţiune de executat la selecţia unei opţiuni –cu una din comenzile:

ON SELECTION PAD <pad> OF <nume meniu> DO <nume procedură>;ON PAD <pad> OF <nume meniu> ACTIVATE POPUP <p>|MENU<m>;

- activare meniu – cu comanda ACTIVATE MENU; - ascundere meniu – cu comanda HIDE MENU; - afişare meniu – cu comanda SHOW MENU; - dezactivare meniu – cu comanda DEACTIVATE MENU.

La dezactivarea unui meniu, controlul programului este dat instrucţiunii care urmează celeia care a activat meniul respectiv.

55

Page 56: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Exemplu.Să se definească şi să se utilizeze un meniu orizontal pentru efectuarea operaţiilor de

adăugare, ştergere, editare (actualizare) date în tabela Produse astfel:

CLEARCLOSE ALLDEFINE MENU Mo1DEFINE PAD P1 OF Mo1 PROMPT ‘\<Adaugare’DEFINE PAD P2 OF Mo1 PROMPT ‘\<Stergere’DEFINE PAD P3 OF Mo1 PROMPT ‘Actuali\<Zare’DEFINE PAD P4 OF Mo1 PROMPT ‘S\<Firsit’ON SELECTION PAD P1 OF Mo1 DO PAON SELECTION PAD P2 OF Mo1 DO PSON SELECTION PAD P3 OF Mo1 DO PZON SELECTION PAD P4 OF Mo1 DO PFUSE ProduseACTIVATE MENU Mo1PROCEDURE PA APPEND RETURNPROCEDURE PS DELETE ALL FOR <conditie> RETURNPROCEDURE PZ BROWSE NOAPPEND NODELETERETURNPROCEDURE PF PACK USE DEACTIVATE MENURETURN

Meniuri verticale (obiecte popup)Un meniu vertical sau popup este o casetă dreptunghiulară care conţine un număr de opţiuni

(bare de selecţie) care pot fi definite fiecare separat, sau pot reprezenta fişiere din directorul curent, sau valorile unei expresii definite folosind câmpuri ale unei tabele, sau denumirile câmpurilor unei tabele.

Crearea şi utilizarea unui meniu popup necesită parcurgerea următoarelor operaţii: - definire meniu – cu comanda DEFINE POPUP; - definire opţiuni – cu comanda DEFINE BAR în cazul în care opţiunile sunt definite fiecare separate; - precizare acţiune de executat la selecţia unei opţiuni –cu una din comenzile:ON SELECTION POPUP <nume popup> DO <nume procedură>;

56

Adaugare Stergere Actualizare Sfirsit

Page 57: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

ON SELECTION BAR OF <nume popup> DO <nume procedură>;ON BAR <expN> OF <nume popup> ACTIVATE MENU <m>|POPUP <P>; - activare meniu – cu comanda ACTIVATE POPUP <nume popup>; - ascundere meniu – cu comanda HIDE POPUP; - afişare meniu – cu comanda SHOW POPUP; - dezactivare meniu – cu comanda DEACTIVATE POPUP.

La dezactivarea unui meniu, controlul programului este dat instrucţiunii care urmează celeia care a activat meniul respectiv.

Exemplul 1Se defineşte şi utilizează un meniu vertical pentru adăugare, ştergere, actualizare, înregistrări în tabela Produse cu opţiunile: Adaugare, Stergere, Actualizare, Sfirsit:CLEARCLOSE ALLUSE ProduseDEFINE POPUP Mv1 FROM 5,3 TITLE ‘Tabela Produse’DEFINE BAR 1 OF Mv1 PROMPT ‘\<Adaugare inregistrari’DEFINE BAR 2 OF Mv1 PROMPT ‘\<Stergere inregistrari’DEFINE BAR 3 OF Mv1 PROMPT ‘Actuali\<Zare inregistrari’DEFINE BAR 4 OF Mv1 PROMPT ‘S\<Firsit program’ON SELECTION POPUP Mv1 DO PpACTIVATE POPUP Mv1PROCEDURE PpDO CASE CASE BAR() = 1 DO PACASE BAR() = 2 DO PSCASE BAR() = 3 DO PZCASE BAR() = 4 DO PFENDCASEPROCEDURE PAAPPENDRETURNPROCEDURE PSDELETE ALL FOR <conditie>RETURNPROCEDURE PZBROWSE NOAPPEND NODELETERETURNPROCEDURE PFPACKUSEDEACTIVATE POPUPRETURN

57

Page 58: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Exemplul 2Se defineşte şi utilizează un meniu vertical în care opţiunile sunt valorile câmpurilor Codp,

Denp din tabela Produse, iar la selecţia unei opţiuni se afişează înregistrările corespunzătoare din tabela Stocuri. Dezactivarea meniului se va realiza la apăsarea tastei Escape.CLEARCLOSE ALLDEFINE POPUP Mv2 FROM 5,10 PROMPT FIELD Codp + ‘ ‘ + Denp;TITLE ‘Lista inregistrarilor din tabela Produse’ COLOR SCHEME 5ON SELECTION POPUP Mv2 DO afis_stocUSE Produse In 3Use Stocuri IN 4SELECT 3ACTIVATE POPUP Mv2CLOSE ALLPROCEDURE afis_stocSELECT 4BROWSE FOR Produse.Codp = Stocuri.CodpSELECT 3RETURN

Exemplul 3Se defineşte şi utilizează un meniu vertical în care opţiunile sunt toate fişierele .dbf din directorul curent. La selecţia unei opţiuni se afişează toate înregistrările din tabela respectivă.CLEARCLOSE ALLDEFINE POPUP Mv2 FROM 5,10 PROMPT FILES LIKE *.dbf;TITLE ‘Lista Tabele’ COLOR rb+/bg,GR+/r,gr+/g,W+/nON selection POPUP Mv2 DO afis_dateACTIVATE POPUP Mv2USEPROCEDURE afis_datem.fis=’ ‘m.fis=prompt()USE (m.fis)LISTWait ‘Apasati o tasta’CLEARDEACTIVATE POPUPRETURN

Problemă propusăExportaţi tabelele bazei de date FurnizoriClienţi din Access în FoxPro.Testaţi programele prezentate în cadrul lucrării de laborator.Similar exemplelor de programe prezentate pentru tabelele Produse, Stocuri, scrieţi şi testaţi programele pentru tabelele Furnizor, Oferte şi Clienţi, Vanzari.

58

Page 59: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 10

Tema: Baze de date FoxPro. Clase de instrucţiuni ale limbajului FoxPro.

Instrucţiuni de programare structuratăPentru rezolvarea unor probleme de complexitate mare sunt necesare instrucţiuni care să

schimbe ordinea de execuţie secvenţială a comenzilor în cadrul unui program.Limbajul FoxPro dispune de instrucţiuni pentru realizarea de ramificaţii (execuţia

condiţionată a unor secvenţe de instrucţiuni) şi bucle (iteraţii, cicluri – execuţia repetată a unei secvenţe de instrucţiuni) care permit realizarea de programe structurate, fiind din acest motiv numite şi instrucţiuni de programare structurată.

Ramificaţiile sunt realizate cu ajutorul instrucţiunilor IF…ELSE…ENDIF şiDO CASE…ENDCASE.

Instrucţiunea IF – realizează selecţia execuţiei unui grup de instrucţiuni din două posibile astfel:

IF <condiţie><instrucţiuni 1>

ELSE<instrucţiuni 2>

ENDIFExecuţia acestei instrucţiuni se realizează astfel:Se evaluează expresia logică <condiţie >.Dacă valoarea rezultată în urma evaluării este .T. (adevărat), atunci se execută secvenţa de

instrucţiuni <instrucţiuni 1>, altfel se execută secvenţa de instrucţiuni <instrucţiuni 2> şi în ambele cazuri programul continuă cu execuţia instrucţiunii care urmează după clauza ENDIF.

Poate fi utilizată şi forma simplificată a instrucţiunii în care lipseşte clauza ELSE :IF <condiţie>

<instrucţiuni>ENDIF

Secvenţele <instrucţiuni 1>, <instrucţiuni 2> pot conţine la rândul lor instrucţiuni IF, obţinându-se astfel imbricarea instrucţiunilor IF pe un număr oarecare de nivele.Exemplu

IF FILE(‘Produse.dbf’)USE ProduseLIST

ELSE? ‘Fisier Produse.dbf lipsa in ‘,sys(2003)

ENDIF(dacă fişierul Produse.dbf există în directorul curent, deschide fişierul şi afişează înregistrările sale, altfel afişează mesajul ‘Fisier Produse.dbf lipsa in <cale>’).

Instrucţiunea DO CASE – realizează execuţia unui grup de instrucţiuni din mai multe grupuri posibile astfel:

DO CASECASE <condiţie 1>

<instrucţiuni 1>CASE <condiţie 2>

<instrucţiuni 2>

59

Page 60: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

…CASE <condiţie n>

<instrucţiuni n>[OTHERWISE

<instrucţiuni>]ENDCASE

Se execută primul grup de instrucţiuni <instrucţiuni k> pentru care rezultatul evaluării expresiei logice <condiţie k> este .T. (adevărat) şi programul continuă cu instrucţiunea care urmează după clauza ENDCASE.

Dacă nici una din expresiile logice <condiţie k> nu are valoarea .T. (adevărat) şi dacă clauza OTHERWISE este prezentă, atunci se execută grupul de instrucţiuni <instrucţiuni> precizat în clauza OTHERWISE şi apoi programul continuă cu instrucţiunea care urmează după clauza ENDCASE.

Buclele (iteraţiile, ciclurile) sunt realizate cu ajutorul instrucţiunilor DO WHILE … ENDDO, FOR … ENDFOR, SCAN … ENDSCAN.

Instrucţiunea DO WHILE … ENDDO realizează execuţia repetată a unui grup de instrucţiuni atâta timp cât o condiţie este adevărată astfel:

DO WHILE <condiţie><instrucţiuni 1>

[LOOP<instrucţiuni 2>]

[EXIT[<instrucţiuni 3>]]

ENDDOSe execută repetat grupul de instrucţiuni <instrucţiuni 1> atâta timp cât rezultatul evaluării

expresiei logice <condiţie> este .T. (adevărat) şi apoi programul continuă cu instrucţiunea care urmează după clauza ENDDO.

Dacă clauza LOOP este prezentă, atunci se reia ciclul cu grupul de instrucţiuni <instrucţiuni 1> fără a se executa grupul de instrucţiuni <instrucţiuni 2>.

Dacă clauza EXIT este prezentă, atunci se părăseşte forţat bucla fără a se mai executa grupul de instrucţiuni <instrucţiuni 3> şi programul continuă cu instrucţiunea care urmează după clauza ENDDO.

Grupurile de instrucţiuni <instrucţiuni 1>,<instrucţiuni 2>,<instrucţiuni 3> pot conţine ele însele instrucţiuni DO WHILE … ENDDO, obţinându-se astfel instrucţiuni DO WHILE imbricate pe un număr oarecare de nivele.Exemplu – Calculul sumei primelor n numere naturale

m.S=0m.i=1INPUT ‘Introduceti numarul <n>:’ TO m.nDO WHILE m.i <= m.n

m.S = m.S + m.iM.i = m.i + 1

ENDDO? ‘Suma primelor ‘,m.n, ‘ numere naturale este S = ‘,m.S

Instrucţiunea FOR … ENDFOR – realizează execuţia repetată a unui grup de instrucţiuni plecând de la o valoare iniţială a unei variabile, până la o valoare finală a variabilei, cu un anumit pas astfel:

60

Page 61: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

FOR <variabila> = <val.iniţială> TO <val.finală> [STEP <pas>]<instrucţiuni 1>

[LOOP<instrucţiuni 2>]

[EXIT[<instrucţiuni 3>]]

ENDFORSe execută grupul de instrucţiuni <instrucţiuni 1> de un număr de ori determinat plecând de

la valoarea iniţială a variabilei <variabila> până la valoarea sa finală cu pasul <pas> (<val.iniţială>, <val.finală>, <pas> sunt expresii numerice întregi), după care programul continuă cu instrucţiunea care urmează după clauza ENDFOR.

Grupurile de instrucţiuni <instrucţiuni 1>,<instrucţiuni 2>,<instrucţiuni 3> pot conţine ele însele instrucţiuni FOR … ENDFOR, obţinându-se astfel instrucţiuni FOR imbricate pe un număr oarecare de nivele.

Clauzele LOOP, EXIT au acelaşi efect ca în cazul instrucţiunii DO WHILE.Exemplu – Calculul sumei primelor n numere naturale

m.S=0INPUT ‘Introduceti numarul <n>:’ TO m.nFOR i = 1 TO m.n STEP 1

m.S = m.S + iENDFOR? ‘Suma primelor ‘,m.n, ‘ numere naturale este S = ‘,m.S

Instrucţiunea SCAN … ENDSCAN – realizează parcurgerea secvenţială (şi eventual selectivă precizată printr-o condiţie) a înregistrărilor tabelei deschise în zona de lucru curentă şi execuţia unui grup de instrucţiuni pentru fiecare înregistrare parcursă, începând cu înregistrarea curentă până la sfârşitul fişierului .DBF, sau până când bucla este întreruptă prin clauza EXIT.

Sintaxa instrucţiunii este:SCAN [<domeniu>][FOR <condiţie 1>][WHILE <condiţie 2>]

<instrucţiuni 1>[LOOP

<instrucţiuni 2>][EXIT

[<instrucţiuni 3>]]ENDSCAN

Prin <domeniu> poate fi precizat numărul de înregistrări de parcurs cu ajutorul clauzelor ALL sau NEXT <nr.înregistrări>.

Clauzele FOR şi WHILE precizează condiţia pe care trebuie să o îndeplinească înregistrările ce vor fi luate în considerare respectiv condiţia ce precizează până când va fi parcursă tabela.

Grupurile de instrucţiuni <instrucţiuni 1>,<instrucţiuni 2>,<instrucţiuni 3> pot conţine ele însele instrucţiuni SCAN … ENDSCAN, obţinându-se astfel instrucţiuni SCAN imbricate pe un număr oarecare de nivele.

Clauzele LOOP, EXIT au acelaşi efect ca în cazul instrucţiunii DO WHILE.Exemplu – Afisarea câmpurilor Codp, Denp separate printr-un spaţiu pentru toate înregistrările tabelei Produse

USE ProduseSCAN

61

Page 62: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

? Codp,’ ‘,DenpENDSCANUSE

Instrucţiuni de intrare/ieşireDin această categorie fac parte instrucţiunile utilizate pentru introducerea datelor de la

tastatură şi afişarea rezultatelor pe ecran sau listarea la imprimantă.Instrucţiunile de intrare/ieşire se împart în două grupe şi anume :

- Instrucţiuni pentru realizarea operaţiilor de intrare/ieşire în mod linie- Instrucţiuni pentru realizarea operaţiilor de intrare/ieşire în mod ecran

Instrucţiuni pentru realizarea operaţiilor de intrare/ieşire în mod linie.Din această grupă fac parte instrucţiunile:

? <lista expresii> - realizează afişarea sau listarea rezultatelor evaluării expresiilor din <lista expresii> începând din prima coloană a liniei următoare liniei curente (deci înainte de afişare se generează codurile <CR>, <LF>).?? <lista expresii> - realizează afişarea sau listarea începând din coloana curentă a ecranului sau imprimantei.ACCEPT <expC> TO <variabila de memorie> - afişează mesajul <expC> şi aşteaptă introducerea de la tastatură a unui şir de caractere care va fi memorat în variabila de memorie specificată.INPUT <expC> TO <variabila de memorie> - afişează mesajul <expC> şi aşteaptă introducerea de la tastatură a unei date de tip şir, sau număr, sau dată calendaristică, sau dată de tip logic care va fi memorată în variabila de memorie specificată.

Spre deosebire de instrucţiunea ACCEPT data de tip şir de caractere va trebui încadrată între “ sau ‘ sau [].WAIT <expC> - afişează mesajul <expC> şi aşteaptă apăsarea unei taste.Dacă <expC> este omis se va afişa mesajul ‘Press any key to continue…’.LIST – realizează afişarea sau listarea la imprimantă a înregistrărilor din tabela deschisă în zona de lucru curentă.DISPLAY ALL –este similară comenzii LIST cu deosebirea că după fiecare ecran plin se afişează mesajul ‘Press any key to continue…’ şi se aşteaptă apăsarea unei taste. Dacă clauza ALL este omisă , se va afişa doar înregistrarea curentă.Instrucţiuni pentru realizarea operaţiilor de intrare/iesire în mod ecran .

– Instrucţiunile @say…get, read.Pentru crearea unui formular (machete) de preluare date în mod ecran pot fi folosite

instrucţiunile @ say…get, read în următoarea sintaxă simplificată:@ <lin>,<col> SAY <expC> GET <variabilă> PICTURE <şablon> COLOR<culori>READUnde:<lin> = linia din care începe afişarea<col> = coloana din care începe afişarea<expC> = un şir de caractere încadrat între ‘,”,[] sau expresie de tip şir ce va fi afişată<variabilă> = variabilă de memorie, nume câmp, element de masiv, în care vor fi preluate datele introduse de la tastatură<şablon> = formatul de afişare a datelor preluate, succesiune de caractere X pt.şiruri de caractere, sau succesiune de caractere 9 pentru datele numerice, sau succesiune de caractere A pentru şiruri care conţin doar litere, etc. încadrate între apostroafe, sau ghilimele. De asemenea în cadrul

62

Page 63: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

formatului de afişare mai pot fi folosite o serie de funcţii ca de exemplu: ! pt.conversie litere mici în litere mari, @Z pt.suprimare zerouri nesemnificative etc.<culori> = o listă de doua perechi de culori, prima pereche pentru SAY şi a doua pereche pentru GET, reprezentând culoare scris şi culoare fond.

În cadrul instrucţiunii pot fi utilizate şi alte clauze ca de exemplu: SIZE, FONT, STYLE, VALID, ERROR, VERB, BITMAP etc.

Instrucţiunea @ say…get poate fi utilizată şi ca două instrucţiuni distincte@ <lin>,<col> SAY <expC> PICTURE <şablon> COLOR <cs>/<cf>@ <lin>,<col> GET <variabilă> PICTURE <şablon> COLOR ,<cs>/<cf>

Instrucţiunea READ clasică citeşte un set de comenzi @GET începând cu primul GET din listă şi continuând până la deplasarea dincolo de ultimul câmp sau înaintea primului câmp după care se iese din instrucţiunea READ.

Îmbunătăţirile aduse formei clasice a instrucţiunii permit realizarea de interfeţe mai puternice şi mai flexibile utilizând un număr redus de instrucţiuni FoxPro.

În cele ce urmează vom da un exemplu de utilizare a instrucţiunilor @say…get, readpentru crearea unui ecran de preluare date în tabela Persoane:

m.nrcrt=0STORE SPACE(15) TO m.nume,m.prenumem.datan={ / / }@3,5 SAY ‘Nr.crt.:’@5,5 SAY ‘Nume:’@7,5 SAY ‘Prenume:’@9,5 SAY ‘Data nasterii:’@3,25 GET m.nrcrt PICT ‘99’ COLOR ,GR+/B@5,25 GET m.nume PICT ‘XXXXXXXXXXXXXXX’ COLOR ,GR+/B@7,25 GET m.prenume PICT ‘XXXXXXXXXXXXXXX’ COLOR ,GR+/B@9,25 GET m.datan PICT ‘XX/XX/XX’ COLOR ,GR+/BREAD

Ordonarea înregistrărilor unei tabeleOrdinea implicită de parcurgere a înregistrărilor într-o tabelă este ordinea în care au fost

introduse, aceasta fiind numită ordine naturală. Pentru a putea parcurge înregistrările tabelei şi în altă ordine se pot utiliza două metode şi anume :1 - Ordonarea înregistrărilor prin operaţia de sortare a tabelei;2 - Ordonarea înregistrărilor prin operaţia de indexare a tabelei.

Ordonarea prin sortare se realizează cu comanda SORT TO <nume fişier> ON <câmp1> [/A|/D|/C] …

care are drept rezultat crearea unei noi tabele în care înregistrările sunt scrise în ordinea precizată (ordonate după unul sau mai multe câmpuri /A-ascendent (implicit), /D –descendent, /C fără a lua în considerare deosebirea dintre litere mici sau mari (/C poate fi combinat cu /A sau /D astfel: /AC sau /DC).

Ordonarea prin indexare se realizează cu comanda INDEX care într-o formă simplificată are sintaxa:INDEX ON <expresie index>TAG <nume crit.ord.>[ASCENDING|DESCENDING](care are drept rezultat crearea unui criteriu de ordonare a înregistrărilor într-un fişier având acelaşi nume cu numele tabelei şi extensia .CDX).

63

Page 64: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Precizarea ordinii în care se vor parcurge înregistrările într-o tabelă se face cu comanda SET ORDER TO <nume criteriu de ordonare>.

Revenirea la ordinea naturală (ordinea în care au fost încărcate înregistrările în tabelă) se face cu comanda SET ORDER TO.Exemplu – Crearea unui criteriu de ordonare în tabela Produse, alfabetic după primele 3 litere din câmpul Denp:

INDEX ON LEFT(Denp,3) TAG nume3Comenzile:

USE ProduseSET ORDER TO TAG nume3LISTSET ORDER TO

realizează: deschide tabela Produse, precizează ordinea de parcurgere nume3 (alfabetic după primele 3 litere din denumirea produsului), afişează înregistrările tabelei în această ordine şi precizează că în continuare înregistrările tabelei vor fi văzute în ordinea naturală (ordinea în care au fost încărcate).

Funcţia TAG(<nr criteriu>)_returnează numele criteriului de ordonare <nr criteriu>Funcţia KEY(<nr criteriu>) returnează expresia index pentru criteriul de ordonare

<nr_criteriu>.

Instrucţiuni de poziţionare pe înregistrări într-o tabelăFiecărei tabele deschise într-o zonă de lucru îi este asociat un indicator de înregistrări care

conţine numărul înregistrării curente. Aflarea înregistrării curente (conţinutului indicatorului de înregistrări) într-o tabelă se realizează cu funcţia RECNO().

La deschiderea unei tabele cu comanda USE indicatorul de înregistrări este poziţionat pe prima înregistrare (conţine valoarea 1). Pentru schimbarea indicatorului de înregistrări (poziţionarea pe o altă înregistrare) se pot folosi instrucţiunile:

GO <expN> - realizează poziţionarea pe înregistrarea având indicatorul de înregistrări rezultatul evaluării expresiei <expN>

GO TOP – realizează poziţionarea pe prima înregistrare a tabeleiGO BOTTOM – realizează poziţionarea pe ultima înregistrare a tabeleiSKIP <expN> - realizează mutarea indicatorului de înregistrări peste un număr de

înregistrări dat de rezultatul evaluării expresiei <expN>, înainte sau înapoi faţă de înregistrarea curentă, după cum rezultatul evaluării expresiei <expN> este un număr pozitiv sau negativ.

Funcţiile BOF(), EOF() testează dacă indicatorul de înregistrări este poziţionat pe începutul tabelei, respectiv pe sfârşitul tabelei.

Numărul de înregistrări dintr-o tabelă este returnat de funcţia RECCOUNT().Dimensiunea unei înregistrări (în nr. octeţi) este returnată de funcţia RECSIZE().Pentru specificarea domeniului înregistrărilor în anumite instrucţiuni se pot utiliza

următoarele clauze :ALL – specifică toate înregistrărileRECORD <nr> - specifică înregistrarea <nr>NEXT <nr> - specifică următoarele <nr> înregistrări începând cu înregistrarea curentă.REST – specifică restul înregistrărilor până la sfârşitul tabelei începând cu înregistrarea

curentă.Exemplu.

LIST NEXT 3 – afişează următoarele 3 înregistrări începând cu înregistrarea curentă.

64

Page 65: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

În tabelele indexate (şi numai în acestea) se poate realiza poziţionarea direct pe o înregistrare pentru o valoare a expresiei de indexare precizată, folosind fie instrucţiunile SEEK <valoare cheie index>, IF FOUND()…, fie funcţia SEEK() în instrucţiunea IF astfel IF SEEK(<valoare cheie index.>)…

Comenzi SET – permit stabilirea unor condiţii de lucru valabile în sesiunea FoxPro de lucru curentă.

SET BELL – activează sau dezactivează suneteleSET BELL TO – stabileşte frecvenţa şi durata unui sunetSET CONFIRM – determină dacă tasta <Enter> trebuie acţionată la ieşirea dintr-un câmpSET DATE – specifică formatul datelor calendaristiceSET DECIMALS – stabileşte numărul zecimalelor de afişat pentru datele numericeSET DELETED – stabileşte accesul la înregistrările marcate pentru ştergereSET DEFAULT – specifică directorul şi unitatea de disc implicită (poziţionarea intr-un

anumit director)SET DEVICE – stabileşte perifericul de afişareSET EXACT – specifică dacă este necesară o potrivire exactă în operaţiile de comparare

pentru şiruri de caractereSET FILTER – specifică condiţiile pe care trebuie să le îndeplinească înregistrările unei

tabele pentru a fi accesibileSET ORDER – stabileşte ordinea de parcurgere a înregistrărilor unei tabeleSET PRINTER – activează sau dezactivează ieşirea la imprimantăSET PROCEDURE – deschide un fişier de proceduri specificatSET RELATION TO – stabileşte o relaţie între două sau mai multe tabeleSET RELATION OFF - şterge o relaţie între două tabeleSET SKIP TO – crează o relaţie 1-n (on to many) între o înregistrare a unei tabele părinte şi

mai multe înregistrări a unei tabele copilSET SAFETY – activează sau dezactivează facilitatea de protecţie a fişierelorSET TALK – controlează afişarea rezultatelor unor comenzi.

Instrumente de lucru pentru creşterea productivităţii (ex. de utilizare în FoxPro 2.6 sub Windows).- Generatorul de meniuri – se lansează cu comanda Create menu <nume meniu>, sau se selectează File -> New -> Menu -> New, în caseta “Prompt” se tastează numele meniului, din meniul “Menu” se selecteată General Optionns , în caseta Location se precizează locul unde va apare meniul creat în bara de meniuri Fox (ex. After, Help pentru ca meniul nou creat să apară după meniul Help) apoi se selectează OK. Din lista Result se selectează Submenu apoi Create iar în caseta “Prompt” se tastează opţiunile de meniu vertical corespunzătoare meniului orizontal nou creat şi pentru fiecare opţiune se alege din coloana Result cuvântul Command iar în caseta Options se tastează DO <nume procedura> coresp.(dacă în caseta Prompt în loc de opţiune se tastează \- atunci se va trasa un rând de linii între opţiuni). Din meniul Program se selectează Generate, se apasă butonul Yes şi în caseta Save Menu As se tastează numele fişierului în care se va salva meniul şi extensia .mnx, apoi se apasă butonul Save iar din caseta Generate Menu se alege Generate. Pentru execuţia meniului se dă comanda DO <nume fişier salvat>.mpr, iar pt.modificare MODI COMM <nume fişier salvat>.mpr Pentru revenire la meniul Fox se dă comanda SET SYSMENU TO DEFAULT.- Creare, salvare,tipărire rapoarte sumare – se selectează Database->Report->Quick Report

65

Page 66: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Apoi selecţie buton stânga pt. raport în mod Browse, sau buton dreapta pt. raport în mod Change, după care se salvează cu <nume fişier>.frx, care poate fi editat cu MODI REPORT <nume fişier> şi executat din meniul Run cu opţiunea Report.- Crearea unei aplicaţii – din bara de meniuri FoxPro se selectează Run->Application->New, apoi din caseta care apare se selectează Step1 pt. creare sau modificare tabelă sau/şi Step2 pt. creare sau modificare ecran şi în final se apasă butonul Generate. Pentru execuţia aplicaţiei se selectează Run->Application, apoi se selectează fişierul cu extensia .app de executat şi se apasă butonul Run.- Generatorul de ecrane (Screen Builder)- Generatorul de rapoarte (Report Writer)

Problemă propusăUtilizând generatorul de meniuri se adaugă meniului principal FoxPro opţiunea Aplicatii

care activează un meniu popup ce conţine opţiunile:- Stocuri – apelează procedura Pstoc care realizează Situaţia stocurilor de produse;- Oferte/Produs – apelează procedura Oferte_p care realizează Situaţia ofertelor de produse pe

produs;- Oferte/Furnizor - apelează procedura Oferte_f care realizează Situaţia ofertelor de produse pe

furnizor;- Vanzari/Produs - apelează procedura Vanzari_p care realizează Situaţia vânzărilor de produse

pe produs;- Vanzari/Client - apelează procedura Vanzari_c care realizează Situaţia vânzărilor de produse pe

client.

66

Page 67: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 11

Tema: Programarea în Visual FoxPro

Spre deosebire de programarea procedurală în care un program constă dintr-o secvenţă de instrucţiuni, proiectarea şi programarea orientate spre obiect reprezintă o abordare nouă în care efortul de programare constă în proiectarea obiectelor componente de sine stătătoare ale unei aplicaţii.

Obiecte în Visual FoxPro.Obiectele în mediul Visual FoxPro sunt formularele şi controalele care pot fi gestionate prin

intermediul proprietăţilor, evenimentelor şi metodelor şi care vor fi incluse în aplicaţii. Extensiile orientate spre obiect ale limbajului Visual FoxPro permit crearea şi întreţinerea cu uşurinţă a bibliotecilor de cod reutilizabil. Programarea orientată spre obiect este o modalitate de a împacheta codul astfel încât să poată fi refolosit şi întreţinut mai uşor. Primul nivel de împachetare se numeşte clasă. O aplicaţie este construită din clase şi obiecte. Clasele descriu proprietăţile şi comportamentul obiectelor care se mai numesc şi instanţe ale clasei. Un obiect are anumite proprietăţi, sau atribute. De exemplu, un automobil are o anumită denumire şi o anumită culoare. Aceste proprietăţi pot fi stabilite în faza de proiectare sau de execuţie.Metode şi evenimente asociate obiectelor

Fiecare obiect recunoaşte şi poate reacţiona la anumite acţiuni numite evenimente iniţiate fie de utilizator, fie de sistem. De cele mai multe ori, evenimentele sunt generate de interacţiunea cu utilizatorul. Acţiunile utilizatorilor care pot declanşa evenimente sunt clicurile de mouse, mişcările mouse-ului şi apăsările de taste. Evenimente declanşate de sistem sunt iniţializarea unui obiect şi întâlnirea unei linii de cod care generează o eroare. Evenimentele pot avea metode asociate. Metodele sunt proceduri asociate unui obiect, diferă de procedurile Visual FoxPro obişnuite, sunt legate indisolubil de obiect si sunt apelate altfel decât celelalte proceduri Visual FoxPro. Astfel, dacă scriem cod pentru metoda asociată evenimentului Click, codul respectiv este executat atunci când survine evenimentul Click. Metodele pot exista şi independent de evenimente, caz în care, trebuie apelate explicit în cadrul codului. Setul de evenimente este determinat (nu pot fi create noi evenimente), în schimb, setul de metode este nelimitat

Pentru o descrierea fiecărei proprietăţi, a fiecărui eveniment sau control, pot fi consultate fişierele Help ale programului Visual FoxPro.

Clase în Visual FoxProToate proprietăţile, metodele şi evenimentele asociate unui obiect sunt specificate în

definiţia clasei. Clasele au o serie de caracteristici care permit crearea de cod reutilizabil, uşor de întreţinut şi anume: încapsularea, subclasele, moştenirea. Spre exemplu, proprietăţile care determină elementele unei casete cu listă şi codul care se execută atunci când se selectează un element din listă pot fi încapsulate într-un singur control pe care-l adăugăm la un formular.

O subclasă poate avea toate funcţionalităţile unei clase existente, precum şi controale sau funcţionalităţi suplimentare. Crearea subclaselor este una dintre căile de reducere a dimensiunilor codului Astfel pentru realizarea unei aplicaţii se începe cu definirea unei clase cât mai apropiate de scopul urmărit şi apoi se realizează personalizarea acesteia. Prin moştenire, o modificare efectuată asupra unei clase se reflectă în toate subclasele derivate din aceasta.

67

Page 68: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Containere şi non-containereCele două tipuri primare de clase Visual FoxPro, şi, prin extensie, de obiecte Visual

FoxPro, sunt clasele container şi clasele control. Containerele pot conţine alte obiecte şi permit accesul la acestea. Astfel, dacă se creează o clasă container care cuprinde două casete cu listă şi două butoane de comandă, care apoi se vor adăuga la un formular un obiect bazat pe această clasă, fiecare obiect poate fi manipulat individual, atât în momentul proiectării cât şi în momentul execuţiei. Se poate crea câte o clasă pentru fiecare control şi fiecare formular, însă în acest mod în final vor exista mai multe clase care fac cam acelaşi lucru, dar care trebuie întreţinute separat. Se poate crea o clasă control pentru o funcţionalitate generică. Astfel spre exemplu, butoanele de comandă care permit utilizatorului să mute indicatorul de înregistrări în cadrul unei tabele, un buton care să închidă formularul şi un buton de asistenţă pot fi salvate sub formă de clase şi pot fi adăugate la formulare când se doreşte această funcţionalitate. Se pot crea clase pentru seturi de formulare, formulare şi controale cu o anumită înfăţişare, astfel încât toate componentele aplicaţiei să aibă acelaşi aspect.

Visual FoxPro permite crearea mai multor tipuri de clase, fiecare cu propriile sale caracteristici, tipul clasei putând fi precizat în caseta de dialog New Class sau în clauza AS a comenzii CREATE CLASS. Se pot crea subclase ale majorităţii claselor de bază din Visual FoxPro cu ajutorul proiectantului de Clase (Class Designer).

Evenimentele din Visual FoxProCodul pentru evenimente este declanşat automat de către sistem ca răspuns la o anumită

acţiune a utilizatorului. Spre exemplu, codul scris pentru evenimentul Click este prelucrat automat de sistem atunci când utilizatorul execută clic pe un control.

Codul pentru evenimente poate fi declanşat şi de evenimente din sistem, ca în cazul evenimentului Timer al controlului timer (ceas).

Principalele evenimente din Visual FoxPro, valabile pentru majoritatea controalelor sunt prezentate în tabelul de mai jos:Evenimentul Momentul declanşării evenimentuluiInit La crearea unui obiectDestroy La descărcarea unui obiect din memorieClick Când utilizatorul execută clic pe obiect cu butonul stânga al mouse-uluiDblClick Când utilizatorul execută dublu-clic pe obiect cu butonul stânga al mouse-uluiRightClick Când utilizatorul execută clic pe obiect cu butonul dreapta al mouse-uluiGetFocus Când obiectul devine ţinta intrărilor (primeşte focusul), fie datorită acţiunii utilizatorului (de exemplu, la apăsarea tastei Tab sau la executarea unui clic), fie ca urmare a metodei SetFocus din programLostFocus Când obiectul nu mai este ţinta intrărilor (pierde focusul), fie datorită acţiunii utilizatorului (de exemplu, la apăsarea tastei Tab sau la executarea unui clic), fie ca urmare a metodei SetFocus din programKeyPress La apăsarea şi eliberarea unei taste de către utilizatorMouseDow La apăsarea butonului mouse-ului de către utilizator atunci când indicatorul mouse-ului se află deasupra obiectuluiMouseMove Când utilizatorul deplasează indicatorul mouse-ului deasupra obiectului

68

Page 69: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

MouseUp Când utilizatorul eliberează butonul mouse-ului în timp ce indicatorul mouse-ului se află deasupra obiectului

Crearea unei baze de date

Crearea unei baze de date se poate realiza cu ajutorul interfeţei sau al limbajului. La crearea bazei de date, se reunesc tabelele într-o singură colecţie (fişier cu extensia .dbc) şi se creează dicţionarul de date în care se memorează o serie de informaţii printre care: cheile primare şi candidate, relaţiile persistente dintre tabelele bazei de date, numele lungi pentru tabele şi câmpuri, titlurile de câmpuri afişate în fereastra Browse şi în anteturile coloanelor unei grile, valorile implicite ale câmpurilor, clasele implicite ale controalelor folosite în formulare, măştile de intrare şi formatele de afişare a câmpurilor, regulile la nivel de câmp şi de înregistrare, declanşatoarele, procedurile stocate, conexiunile la surse de date externe, vederile locale şi externe, comentariile pentru fiecare câmp, tabelă şi bază de date

Unele facilităţi ale dicţionarului de date, cum ar fi numele lungi pentru câmpuri, cheile primare şi candidate, valorile implicite, regulile la nivel de câmp şi de înregistrare şi declanşatoarele, sunt stocate în fişierul .dbc, dar sunt create în cadrul procesului de construire a unei tabele sau vederi.

Crearea unei noi baze de date se realizează astfel:1. cu Gestionarul de Proiecte, se selectează fişa cu eticheta Data, iar din lista afişată se selectează

Databases şi apoi New. sau

2. cu comanda CREATE DATABASELa crearea unei baze de date se crează un container de bază de date vid, căruia i se vor

adăuga ulterior obiectetele ce se vor crea pentru aceasta.

Adăugarea tabelelor la o bază de dateO tabelă Visual FoxPro poate exista în una din următoarele două situaţii: ca tabelă liberă

(externă), adică sub formă de fişier .dbf neasociat vreunei baze de date, sau ca tabelă dintr-o bază de date, adică sub formă de fişier .dbf asociat unei baze de date. Tabelele asociate unei baze de date au unele proprietăţi specifice, care nu există în cadrul tabelelor externe, cum ar fi regulile la nivel de câmp şi de înregistrare, declanşatoarele şi relaţiile persistente. Tabelele pot fi asociate cu o bază de date prin crearea lor în cadrul unei baze de date deschise în fundal sau prin adăugarea tabelelor existente la o bază de date.Pentru adăugarea unei tabele libere la o bază de date se poate proceda astfel:- în cadrul Gestionarului de Proiecte, se selectează Tables din cadrul fişelor All sau Data, apoi se selectează Add.

sau - cu comanda ADD TABLE.

Exemplu. Secvenţa de instrucţiuni de mai jos deschide baza de date BazaTest şi îi adaugă tabela liberă TabTest:

OPEN DATABASE BazaTestADD TABLE TabTest

O tabelă existentă poate fi asociată la o singură bază de date.O tabelă (un fişier .DBF) poate fi folosită şi fără a fi încorporată într-o bază de date.Pentru a face o referinţă la o tabelă dintr-o altă bază de date decât cea curentă se foloseşte

simbolul “!”, ca de exemplu:

69

Page 70: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

USE BazaTest!TabTestBROWSE

Pentru eliminarea unei tabele dintr-o bază de date se poate utiliza una din căile:- în cadrul Gestionarului de Proiecte (Project Manager), se selectează numele tabelei, apoi se

selectează Remove.sau- în cadrul Proiectantului de Baze de Date (Database Designer), se selectează tabela şi se alege comanda Remove din meniul Database.sau- cu comanda REMOVE TABLE.Exemplu, codul de mai jos deschide baza de date BazaTest şi elimină tabela TabTest

OPEN DATEBASE BazaTestREMOVE TABLE TabTest

La eliminarea unei tabele dintr-o bază de date nu se realizează şi ştergerea automată a fişierului asociat tabelei.

Pentru eliminarea tabelei din baza de date şi ştergerea fişierului .dbf al tabelei de pe hard-disc, se va folosi clauza DELETE a comenzii REMOVE TABLE sau comanda DROP TABLE astfel:

OPEN DATABASE BazaTestREMOVE TABLE TabTest DELETE

Creare relaţii persistente între tabelele bazei de dateAceste relaţii sunt create utilizând indecşii (sunt create între indecşi şi nu între câmpuri) şi

sunt folosite automat drept condiţii implicite de legare în ferestrele Proiectantului de interogări şi de Vederi (Query Designer şi View Designer) şi pentru a stoca informaţii despre integritatea referenţială.

Pentru Crearea unei relaţii persistente între tabele se poate proceda astfel:- în fereastra Proiectantului de Baze de Date (Database Designer), se alege numele indexului ce

urmează a fi legat şi apoi se trage cu mouse-ul spre numele indexului din tabela ce urmează a fi legată

sau- se utilizează clauza FOREIGN KEY în comenzile CREATE TABLE sau ALTER TABLE.

În fereastra Proiectantului de Baze de Date (Database Designer), se va vedea o linie care leagă tabelele respective, reprezentând noua relaţie persistentă.Pentru ştergerea unei relaţii persistente între două tabele se poate proceda astfel:1. în cadrul Proiectantului de Baze de Date (Database Designer), se execută clic pe linia care reprezintă relaţia dintre cele două tabele. (Lăţimea liniei de relaţie creşte pentru a indica faptul că s-a selectat relaţia respectivă), după care se apasă tasta DELETE. s a u2. se utilizează clauza DROP FOREIGN KEY cu comanda ALTER TABLE.

Crearea integrităţii referenţialeCrearea integrităţii referenţiale presupune crearea unui set de reguli care să păstreze

relaţiile definite între tabele când se inserează sau se şterg înregistrări.Menţinerea integrităţii referenţiale împiedică efectuarea următoarelor operaţii:

- Adăugarea de înregistrări la o tabelă legată atunci când nu există nici o înregistrare asociată în tabela primară.

70

Page 71: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

- Modificarea de valori în tabela primară care ar duce la apariţia de înregistrări orfane în tabela asociată.

- Ştergerea de înregistrări din tabela primară atunci când există înregistrări asociate.Se pot scrie declanşatoare şi proceduri stocate care să întărească integritatea referenţială,

însă Visual FoxPro dispune de Generatorul de Integritate Referenţială (RI) (Referenţial Integrity Builder) care permite să se determine tipurile de reguli de întărit, tabelele pentru care se doreşte ca regulile să fie întărite şi evenimentele de sistem care vor impune mediului Visual FoxPro să verifice respectarea regulilor de integritate referenţială.

Crearea vederilorVederile reprezintă un concept utilizat în cadrul bazelor de date relaţionale care permite

personalizarea unui set de date din baza de date utilizat în cadrul unei aplicaţii, combinând calităţile tabelelor şi ale interogărilor. Astfel la fel ca în cazul unei interogări, se poate folosi o vedere pentru a extrage un set de date din una sau mai multe tabele asociate şi la fel ca o tabelă, o vedere poate fi folosită pentru actualizarea informaţiilor din baza de date.

La crearea unei vederi, Visual FoxPro stochează definiţia acesteia în baza de date curentă, definiţie ce conţine numele tabelelor utilizate în cadrul vederii, precum şi câmpurile selectate şi valorile proprietăţilor lor. La utilizarea vederii, definiţia acesteia este folosită de Visual FoxPro pentru a genera o instrucţiune SQL care defineşte setul de date al vederii.

Se pot crea două tipuri de vederi şi anume: locale şi externe. Vederile externe folosesc sintaxa SQL externă pentru a selecta informaţii din tabelele unei

surse de date ODBC externe. Vederile locale folosesc sintaxa SQL Visual FoxPro pentru a selecta informaţii din tabele sau vederi. La o vedere locală se poate adăuga una sau mai multe vederi externe, obţinând astfel acces la informaţii Visual FoxPro şi la informaţii ODBC externe din aceeaşi vedere. O vedere locală poate fi creată fie prin intermediul Proiectantului de Vederi (View Designer), fie cu comanda CREATE SQL VIEW astfel:.- în cadrul Gestionarului de Proiecte (Project Manager), se selectează o bază de date, se alege

Local Views, apoi New pentru a deschide fereastra proiectantului de Vederi (View Designer).sau - având deschisă o bază de date, se dă comanda CREATE SQL VIEW pentru a afişa fereastra

Proiectantului de Vederi. sau- se dă comanda CREATE SQL VIEW cu clauza AS.Exemplu:CREATE SQL VIEW ViewTest AS SELECT * FROM BazaTest!TabTest

Definiţia unei vederi poate fi ştearsă din baza de date cu ajutorul Gestionarului de Proiecte (Project Manager) sau cu comanda DELETE VIEW (înainte de a şterge vederea, baza de date din care face parte trebuie să fie deschisă şi să fie baza de date curentă).

Pentru accesarea datelor stocate pe un server la distanţă este necesar să se creeze o vedere externă ceea ce necesită conectarea la sursa de date prin driver-ul ODBC corespunzător. Sursa de date şi conexiunile pot fi definite din Visual FoxPro. Definiţia conexiunii va fi stocată în baza de date şi va putea fi referită atunci când se crează vederea externă.Pentru crearea unei conexiuni se poate proceda astfel:- în fereastra Gestionarului de Proiecte (Project Manager), se selectează Connections, apoi New

pentru a deschide fereastra Proiectantului de Conexiuni (Connection Designer).sau

71

Page 72: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

- se deschide baza de date şi se foloseşte comanda CREATE CONNECTION pentru a deschide fereastra Proiectantului de Conexiuni.

s a u- se foloseşte comanda CREATE CONNECTION, urmată de numele conexiunii.Exemplu, pentru a crea o conexiune în baza de date BazaTest în vederea conectării la sursa de date ODBC ServerRemote, se poate utiliza următoarea secvenţă de instrucţiuni:OPEN DATABASE BazaTestCREATE CONNECTION conexiune_01;DATASOURCE ServerRemote utilizator parola

Visual FoxPro va activa conexiunea atunci când se va folosi vederea (până la activarea conexiunii, aceasta există doar ca definiţie stocată pe un rând al fişierului .dbc al bazei de date). La utilizarea vederii externe, Visual FoxPro va crea, prin intermediul conexiunii indicate în cadrul vederii, o conexiune activă cu sursa de date externă, după care trimite către aceasta o cerere de date folosind conexiunea activă drept canal de legătură.

Se poate crea o vedere care indică doar numele sursei de date, nu şi denumirea conexiunii, iar la utilizarea acestei vederi, Visual FoxPro va folosi informaţia ODBC pentru a crea şi a activa o conexiune cu sursa de date.

La închiderea vederii, se închide şi conexiunea.Pentru afişarea conexiunilor existente se poate utiliza comanda DISPLAY

CONNECTIONS.

Formularele în Visual FoxProFormularele oferă utilizatorului facilităţi pentru vizualizarea şi introducerea datelor într-o

bază de date, putând încorpora o colecţie de obiecte care pot răspunde la evenimentele generate de utilizator sau de sistem şi având propriile lor proprietăţi şi metode.

Pentru proiectarea formularelor, Visual FoxPro dispune de un Proiectant de Formulare (Form Designer) puternic, cu ajutorul căruia utilizatorul poate crea:- Diverse tipuri de obiecte în cadrul formularelor;- Date asociate obiectelor dintr-un formular;- Formulare părinte şi formulare fiu (ierarhii de formulare);- Formulare multiple care pot fi manipulate împreună;- Formulare bazate pe şabloane definite de utilizator.

Crearea unui formular poate fi realizată astfel:- cu Gestionarul de Proiecte (Project Manager), se selectează Forms şi New.s a u- din meniul File, se selectează New, apoi Form şi, apoi, New File s a u- c u comanda CREATE FORM

Odată creat formularul, urmează să i se adauge controalele, să se configureze proprietăţile controalelor şi ale formularului şi să se scrie codul pentru evenimente. Tipurile de obiecte care pot fi adăugate unui formular sunt: Controale, Containere, Clase definite de utilizator, Obiecte OLE. Adăugarea controalelor standard Visual FoxPro la un formular se poate face cu ajutorul barei de instrumente Controls.

Controalele standard Visual FoxPro sunt:Casetă de validare Hyperlegături Casetă cu listă Casetă de incrementCasetă combinată Imagine Control OLE asociat Casetă de text

72

Page 73: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Buton de comandă Etichetă Control container OLE Control timerCasetă de editare Linie Formă geometrică

Una dintre cele mai puternice facilităţi din Visual FoxPro este posibilitatea creării de clase care pot fi folosite în diferite puncte ale aplicaţiei. După ce au fost create, clasele pot fi adăugate la formulare astfel: din fereastra Gestionarului de Proiecte (Project Manager),se trage clasa în cadrul containerului.

Există două tipuri de controale în formulare şi anume: controale care sunt asociate datelor şi controale care nu sunt asociate datelor. Dacă utilizatorul interacţionează cu controalele asociate datelor, valorile introduse de el sunt stocate în sursa de date, care poate fi un câmp de tabelă, de cursor sau o variabilă. Un control poate fi legat de date atribuind valoarea corespunzătoare proprietăţii ControlSource sau, în cazul grilelor, proprietăţii RecordSource.

Dacă utilizatorul nu configurează proprietatea ControlSource a unui control, valoarea pe care o introduce sau pe care o alege din cadrul controlului este păstrată ca valoare a proprietăţii nefiind salvată pe hard-disc şi nici păstrată în memorie la expirarea duratei de viaţă a controlului.

Crearea meniurilor şi a barelor de instrumenteMeniurile pot fi create cu ajutorul Proiectantului de Meniuri (Menu Designer) din Visual

FoxPro.Pentru generarea meniului, din cadrul meniului Menu, se selectează Generate.Sistemul de meniuri va fi salvat într-un fişier cu extensia .mnx, iar programul meniului

generat va fi salvat într-un fişier cu extensia .mpr.De asemenea , pot fi create meniuri contextuale (meniuri care apar la apăsarea

butonului drept al mouse-ului pe un control sau obiect)Pentru crearea unui meniu contextual se procedează astfel:

1. în fereastra Gestionarului de Proiecte (Project Manager), se selectează fişa Other, din care se selectează Menus, apoi New.

2. se selectează Shortcut.Pe ecran va apărea Proiectantul de Meniuri Contextuale (Shortcut Designer) din care procesul

de adăugare a articolelor de meniu este identic cu cel de creare a meniurilor.Pentru fiecare articol de meniu se poate crea un submeniu care să cuprindă articole de

meniu suplimentare.La crearea unui meniu, acesta poate fi salvat într-un fişier HTML (Hypertext Markup

Language) folosind opţiunea Save As HTML din cadrul meniului File.De asemenea, un formular poate fi salvat ca fişier HTML astfel:

1. Se deschide meniul FILE 2.. Se selectează Save As HTML din cadrul meniului File. (Dacă meniul a fost modificat, sistemul va cere confirmarea salvării modificărilor).3. Se introduce numele fişierului HTML şi apoi se alege Save.

Pentru a crea o bară de instrumente cu butoane care nu apar în barele de instrumente existente, se poate defini o clasă Toolbar personalizată.

Visual FoxPro oferă o clasă de bază Toolbar din care se poate deriva clasa dorită la care pot fi adăugate obiecte, apoi se pot defini proprietăţile, evenimentele şi metodele şi în final, bara de instrumente poate fi adăugată unui set de formulare.

O bară de instrumente poate fi adăugată la un set de formulare, astfel încât bara de instrumente să se deschidă odată cu formularele respective.

73

Page 74: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Crearea unei aplicaţiiDupă crearea tuturor componentelor funcţionale ale unei aplicaţii, acestea pot fi compilate

într-o singură aplicaţie care reuneşte componentele executabile ale proiectului - formulare, rapoarte, meniuri, programe ş.a.m.d. - într-un fişier unic, ce poate fi distribuit utilizatorilor împreună cu datele. Pentru a crea un proiect complet cu ajutorul componentei Application Framework, se poate folosi Vrăjitorul Aplicaţiei (Application Wizard). După crearea proiectului, se va deschide noul Generator de Aplicaţii (Aplication Builder), pentru a adăuga o bază de date, tabele, rapoarte şi formulare. Pentru a putea distribui aplicaţia, se va crea fie un fişier aplicaţie, cu extensia .app, fie un fişier executabil cu extensia .exe.Proiectarea unei aplicaţii OLE.

Obiecte cum sunt documentele Word şi foile de calcul Excel, pot fi legate sau înglobate prin intermediul controlului OLE Container în cadrul formularelor, şi pot fi stocate în câmpurile de tip General ale unei tabele, urmând să fie afişate în formulare cu ajutorul controlului OLE Bound. Diferenţa dintre legare şi înglobare constă în locul de stocare a datelor astfel: înglobarea păstrează datele în tabelă sau în formular, iar legarea referă obiectele din locul unde sunt stocate.

Soluţii client-serverAplicaţiile client/server combină funcţionalitatea mediului Visual FoxPro de pe calculatorul

local cu avantajele de stocare şi de securitate oferite de un server extern. Pentru aceasta, se poate crea mai întâi un prototip local al aplicaţiei, după care, aplicaţia poate fi transformată pentru un mediu client/server prin intermediul Vrăjitorului de Transformare (Upsizing Wizard). Se poate utiliza tehnologia SQL de transfer pentru a îmbunătăţi aplicaţia transformată. În timp ce vederile externe oferă acces la datele de pe server, tehnologia SQL de transfer permite transmiterea de comenzi direct către server folosind funcţia SQLEXEC().

Cele mai performante soluţii de creare a unei aplicaţii Visual FoxPro client/server se obţin combinând vederile şi tehnologia SQL de transfer.

Problemă propusăExportaţi tabelele bazei de date FurnizoriClienti din ACCESS în Visual FoxPro. Creaţi baza

de date FurnizoriClienti în Visual FoxPro şi adăugaţi tabelele exportate. Creaţi în Visual FoxPro vederile corespunzătoare interogărilor create în ACCESS.

74

Page 75: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 12

Tema: Limbajul SQL. Crearea bazei de date.

Comenzi pentru crearea/actualizarea schemei bazei de date Adăugarea relaţiilor într-o bază de date –comanda CREATE TABLE are sintaxa:

CREATE TABLE <nume relaţie>[(<nume atribut> <tip dată>,…)]Exemplu -crearea tabelei Persoane în SQL Oracle se realizează cu comanda:CREATE TABLE Persoane (Nrcrt NUMBER UNIQUE NOT NULL,Nume CHAR(15),Prenume CHAR(15),Datan DATE,Sexul CHAR,Adresa VARCHAR2(50));O nouă relaţie poate fi creată şi ca rezultat al unei operaţii de interogare astfel:CREATE TABLE <nume relaţie> (<nume atribut> <tip dată>,…) AS <subinterogare>

Adăugarea/modificarea de atribute pentru o relaţie existentă se realizează cu comanda:ALTER TABLE <nume relaţie> ADD|MODIFY (< nume atribut> <tip dată>,…)

Ştergerea unei relaţii se realizează cu comanda:DROP TABLE <nume relaţie>

Comenzi pentru optimizarea interogărilorUna din principalele căi de optimizare a timpilor de interogare a unei baze de date este

indexarea. Un index poate fi privit ca o relaţie cu două atribute şi anume:- primul atribut conţine valorile atributelor relaţiei după care se crează indexul;- al doilea atribut conţine un pointer (adresa) la locaţia tuplelor corespunzătoare.

Crearea unui index se realizează cu comanda: CREATE [UNIQUE] INDEX <nume index> ON <nume relaţie>(<nume atribut>[ASC|DESC],…)

Dacă pentru atributele utilizate în clauza WHERE a unor instrucţiuni SQL au fost creaţi indecşi, atunci aceştia vor fi utilizaţi în vederea optimizării timpului de prelucrare. Decizia de utilizare sau nu a unui index este luată de limbajul SQL şi nu de utilizator. Pentru aceasta fiecare model de limbaj SQL dispune de o componentă numită optimizator, care examinează interogarea şi decide care este modul optim de obţinere a rezultatului.

O altă tehnică de optimizare a interogărilor este tehnica “clustering” disponibilă în ORACLE şi care constă în gruparea tuplelor din mai multe relaţii şi stocarea lor în aceeaşi zonă pe disc.

Controlul datelor (comenzi DCL)Vederi

O vedere este o relaţie virtuală, definită plecând de la alte relaţii din baza de date şi care nu conţine date şi deci nu ocupă spaţiu fizic pe disc. Vederile se definesc în două scopuri şi anume:- pentru a simplifica accesul utilizatorilor la date;- pentru a asigura protecţia şi securitatea datelor –fiecărui utilizator fiindu-i permis acces la o

porţiune a bazei de date şi putând efectua doar anumite operaţii (conform drepturilor de acces specificate cu comenzile GRANT/REVOKE).

Asupra unei vederi se pot efectua aceleaşi operaţii ca şi asupra unei relaţii cu deosebirea că vederile nu conţin date şi că orice modificări efectuate asupra datelor sunt reflectate şi în vederi. Astfel, asupra unei vederi se pot realiza operaţiile:

- creare vedere (CREATE VIEW);

75

Page 76: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

- creare sinonim pentru vedere (CREATE SYNONIM);- ştergere vedere (DROP VIEW);- interogare vedere (SELECT);- actualizare date din vedere (UPDATE);- ştergere date din vedere (DELETE);- adăugare date (INSERT).

Crearea unei vederi – se realizează cu comanda CREATE VIEW care are sintaxa:CREATE VIEW <nume vedere> [<lista atribute>] AS <fraza SELECT> [WITH CHECK OPTION]

Exemplu:CREATE VIEW StocuriD1(Codp,Denp,Ump,Cant,Pret,Valoare)

AS SELECT Stocuri.Codp, Denp,Ump,Cant,Pret,Cant*Pret FROM Produse,Stocuri WHERE Produse.codp=Stocuri.Codp AND CodDep = ”D1”

Interogarea vederii se va realiza cu comandaSELECT * FROM StocuriD1

Utilizarea opţiunii WITH CHECK OPTION asigură faptul că nici o tuplă nu va fi adaugată sau actualizată cu instrucţiunile INSERT, UPDATE, dacă nu sunt respectate condiţiile specificate în clauza WHERE a instrucţiunii SELECT din definiţia vederii.

Pentru acordarea sau retragerea drepturilor de acces la baza de date prin intermediul vizualizărilor se vor folosi comenzi de forma:

GRANT [ALL|SELECT|INSERT|UPDATE|DELETE] ON <nume vedere> TO <nume utilizator>

sau REVOKE [ALL|SELECT|INSERT|UPDATE|DELETE] ON <nume vedere>

FROM <nume utilizator>Asigurarea securităţii datelor presupune definirea drepturilor de acces ale utilizatorilor şi

protecţia sistemului la accesul neautorizat. În acest sens asigurarea securităţii se realizează pe două niveluri şi anume:

- nivelul 1 – acordarea dreptului de acces la sistem;- nivelul 2 – acordarea dreptului de acces la nivel de relaţii.Pentru conectarea utilizatorilor la sistem în majoritatea versiunilor de SQL se utilizează un

nume de utilizator şi o parolă.Referitor la drepturile de acces la nivel de relaţie în sistemele multi-user trebuie precizat

utilizatorul care a creat relaţia (proprietarul relaţiei). Fiecare utilizator are drepturi doar asupra propriilor relaţii, iar drepturi asupra unor relaţii create de alţi utilizatori pot fi acordate prin comanda GRANT şi pot fi retrase prin comanda REVOKE.

Datele privind definirea bazei de date, utilizatorii şi drepturile de acces sunt stocate în dicţionarul de date şi sunt gestionate de către sistemul de gestiune a bazei de date (SGBDR).

În cele ce urmează se va prezenta modul de realizare a celor două nivele de securitate în cadrul sistemului ORACLE.

Nivelul 1 de securitate a datelor se realizează cu comanda: GRANT <autorizare,…> TO <nume utilizator> [IDENTIFIED BY <parola>]

unde <autorizare> poate fi:- DBA – conferă utilizatorului dreptul de efectuare a oricărei operaţii asupra oricărei

relaţii din baza de date;

76

Page 77: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

- CONNECT – conferă utilizatorului dreptul de a a face interogări (SELECT) şi actualizări (INSERT, UPDATE, DELETE) asupra relaţiilor create de alţi utilizatori, însă nu permite utilizatorului să creeze relaţii (CREATE) sau să şteargă relaţii create de alţi utilizatori (DROP);

- RESOURCE – conferă utilizatorului drepturile ce rezultă din autorizarea CONNECT şi în plus dreptul de a crea relaţii (CREATE) şi de a şterge relaţii ce îi aparţin (DROP).

Unui utilizator îi pot fi acordate mai multe tipuri de autorizări în cadrul unei singure comenzi GRANT.

Parola stabilită pentru un utilizator poate fi modificată printr-o comandă GRANT ulterioară spre exemplu astfel:

GRANT RESOURCE TO <nume utilizator> IDENTIFIED BY <noua parolă>Unui utilizator căruia i s-a acordat un tip de autorizare îi pot fi acordate şi alte tipuri de autorizare prin comenzi GRANT ulterioare.

Retragerea autorizărilor acordate unui utilizator se realizează cu comanda:REVOKE <autorizare,…> FROM <nume utilizator>

Nivelul 2 de securitate a datelorPentru acordarea respectiv retragerea drepturilor de acces la relaţii se utilizează comenzile

GRANT respectiv REVOKE cu următoarea sintaxă:GRANT ALL|<drept de acces>,… ON <nume relaţie> TO <nume utilizator>|PUBLIC [WITH GRANT OPTION]

respectiv REVOKE ALL|<drept de acces>,… ON <nume relaţie> FROM <nume utilizator>|PUBLICPrivilegiile (drepturile de acces) pot fi acordate sau retrase de următoarele categorii de utilizatori:

- utilizatorii cu nivel de autorizare DBA;- proprietarii relaţiilor;- utilizatorii autorizaţi cu opţiunea WITH GRANT OPTION.Prin specificarea PUBLIC acordarea respectiv retragerea drepturilor de acces se aplică

tuturor utilizatorilor.Prin specificarea WITH GRANT OPTION, utilizatorul respectiv poate la rândul său să

acorde aceleaşi drepturi sau mai puţine altor utilizatori.În ORACLE pot fi acordate următoarele drepturi de access asupra relaţiilor:

SELECT, INSERT, DELETE, ALTER, UPDATE, CREATE,DROP pentru tabele şi indecşi.Drepturile de acces pot fi acordate asupra întregii relaţii, sau doar asupra anumitor atribute

ale relaţiei.Exemple:

Acordarea tuturor drepturilor de acces utilizatorilor Ionescu, Popescu, asupra relaţiei Persoane care aparţine utilizatorului Vasilescu se realizează prin comanda:

GRANT ALL ON Vasilescu.Persoane TO Ionescu,PopescuAcordarea tuturor utilizatorilor, drepturile SLECT,INSERT,UPDATE asupra relaţiei

Produse aparţinând utilizatorului Ionescu se realizează cu comanda:GRANT SELECT,INSERT,UPDATE ON Ionescu.Produse TO PUBLIC

Acordarea privilegiilor SELECT,UPDATE numai asupra atributelor CodP, Denp din relaţia Produse aparţinând utilizatorului Ionescu, utilizatorului Popescu cu condiţia ca acesta la rândul său să poată acorda oricărui alt utilizator aceleaşi drepturi sau mai puţine, se realizează cu comanda:

GRANT SELECT,UPDATE ON Ionescu.Produse(CodProdus,Denumire)

77

Page 78: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

TO Popescu WITH GRANT OPTIONRetragerea drepturilor de acces INSERT,DELETE asupra relaţiei Persoane aparţinând

utilizatorului Vasilescu, utilizatorului Ionescu se realizează cu comanda:REVOKE INSERT,DELETE ON Vasilescu.Persoane FROM Ionescu

Instrucţiuni pentru inserarea şi actualizarea datelor în tabeleInserarea datelor – comanda INSERT are următoarea sintaxă:

INSERT INTO <nume relatie>|<nume vedere> [(<nume atribut>…)][VALUES] <lista valori>|<subinterogare>

Exemple:Fie tabela Persoane(Nrcrt,Nume,Prenume, Datan, Sexul, Adresa)

INSERT INTO Persoane VALUES (1,’Ionescu’,’Ion’,05/23/82,’M’,’Suceava’)(adaugă o înregistrare în tabela Persoane completând toate atributele)

INSERT INTO Persoane(Nrcrt,Nume,Prenume) VALUES (2,’Ionescu’,’Ana’)(adaugă o înregistrare în Persoane completând numai atributele Nrcrt,Nume, Prenume)Pentru a insera în tabela PersF(Nrcrt,Nume,Prenume) toate înregistrările din tabela Persoane pentru care Sexul=’F’ se scrie comanda:

INSERT INTO PersF(Nrcrt,Nume,Prenume) SELECT Nrcrt,Nume,PrenumeFROM Persoane WHERE Sexul = ‘F’

Actualizarea datelor – comanda UPDATE are sintaxa:UPDATE <nume relaţie>|<nume vedere> SET <nume atribut> = <expresie>,…[WHERE <condiţie>]

Condiţia din clauza WHERE defineşte tuplele care vor face obiectul actualizării. Clauza WHERE poate conţine şi o subinterogare.Exemple:

UPDATE Persoane SET Nume = ‘Popescu’, Prenume = ‘Ana Maria’WHERE Nume = ‘Ionescu’ AND Prenume = ‘Ana’

(actualizează numele şi prenumele persoanei Ionescu Ana cu valorile Popescu respectiv Ana Maria).

UPDATE Vanzari SET Pret = Pret*1.2 WHERE CodP IN (SELECT CodP FROM Facturi WHERE Numar = 120 AND Vanzari.Codc=Facturi.Codc )(realizează majorarea preţului cu 20% pentru produsele vândute cu factura 120).Dacă în comanda UPDATE clauza WHERE este omisă, actualizarea se va efectua asupra tuturor tuplelor relaţiei.

Ştergerea datelor – comanda DELETE are sintaxa: DELETE FROM <nume relaţie>|<nume vedere> [WHERE <condiţie>]

unde <condiţie> poate fi o condiţie simplă, o expresie sau o subinterogare.Exemple:

DELETE FROM Stocuri WHERE Cant = 0(şterge toate înregistrările din tabela Stocuri pentru care câmpul Cant are valoarea 0).

DELETE Oferte(şterge toate înregistrările din tabela Oferte).

Comenzi pentru gestiunea tranzacţiilorTranzacţia este o succesiune de instrucţiuni SQL grupate într-un bloc de instrucţiuni

utilizate pentru actualizarea şi/sau interogarea datelor din baza de date. O tranzacţie se consideră

78

Page 79: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

încheiată după realizarea tuturor operaţiilor pe care le conţine. Operaţiile conţinute într-o tranzacţie pot fi realizate efectiv în baza de date sau nu, fie automat de către sistem după fiecare operaţie, fie printr-o comandă explicită dată după o succesiune de operaţii. Astfel salvarea automată de către sistem a modificărilor este realizată prin comanda

SET AUTOCOMMIT ONDacă iniţial a fost specificată comanda SET AUTOCOMMIT OFF, salvarea modificărilor efectuate asupra datelor se realizează prin comanda COMMIT, iar abandonarea modificărilor se realizează prin comanda ROLLBACK.

Blocul de operaţii ce definesc o tranzacţie poate fi delimitat de instrucţiunile :BEGIN TRANSACTIONEND TRANSACTION

(pentru unele sisteme SGBDR cum ar fi dBASE IV SQL aceste delimitări sunt obligatorii). Problemă rezolvată

Se lansează în execuţie SQL Plus Oracle sub utilizatorul system (figura 47).

În baza de date ORCL sub S.G.B.D. Oracle se crează utilizatorul U1 identificat prin parola PW1 şi i se acordă privilegiile CONNECT, RESOURCE (figura 48).

Se închide sesiunea de lucru SQL Plus a utilizatorului system (cu instrucţiunea EXIT) şi se deschide o nouă sesiune de lucru SQL Plus pentru utilizatorul U1 (figura 49).

Se crează tabela Produse şi se inserează două înregistrări (figura 50).

Problemă propusă

Se crează utilizatorul U2 identificat prin parola PW2.

Sub utilizatorul U1 se crează tabelele bazei de date FurnizoriClienti şi se inserează date în fiecare tabelă.

Sub utilizatorul U1 se acordă diverse privilegii asupra tabelelor, utilizatorului U2.

Utilizatorul U1 retrage o serie de privilegii utilizatorului U2.

79

Page 80: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

80

Figura 48. Creare utilizator U1 şi acordare privilegii CONNECT, RESOURCE

Figura 47. Lansare SQL Plus ORACLE pentru utilizatorul system

ORCL

Page 81: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

81

Figura 50. Creare tabelă Produse şi inserare două înregistrări

Figura 49. Lansare SQL Plus ORACLE pentru utilizatorul U1

ORCL

Page 82: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Lucrare de laborator nr. 13

Tema: Limbajul SQL. Interogarea bazelor de date.

Limbajul SQL (Structured Query Language)– a fost realizat în cadrul firmei IBM ca limbaj de interogare al SGBD System R şi ulterior a devenit unul din cele mai răspândite limbaje pentru SGBD-urile relaţionale. Limbajul SQL, ca limbaj de interogare a bazelor de date relaţionale, este construit pe baza a două formalisme abstracte enunţate în cele ce urmează.

1. Algebra relaţională – prin care interogările sunt exprimate prin aplicarea unor operatori unari sau binari care constituie primitive ce acţionează asupra relaţiilor, rezultatul interogărilor fiind tot relaţii, ceea ce permite asocierea şi imbricarea acestor operatori pentru a forma interogări complexe. Operatorii algebrei relaţionale se împart în două grupe şi anume:

- operaţii pe mulţimi (Reuniunea, Intersecţia, Diferenţa, Produsul cartezian);- operatori relaţionali speciali (Selecţia, Proiecţia, Cuplarea (JOIN), Diviziunea).

2. Calculul relaţional – prin care interogările descriu mulţimea tuplelor rezultat prin specificarea unui predicat (condiţie) care trebuie satisfăcut de aceste tuple.

Începând din 1986 limbajul SQL a devenit standard ANSI pentru limbajele de interogare ale bazelor de date relaţionale fiind utilizat atât în cadrul unor SGBD-uri complexe cum ar fi SGBD ORACLE (liderul mondial în domeniul bazelor de date), cât şi în cadrul unor SGBD-uri de complexitate redusă cum ar fi cele din familia xBase (Dbase IV, FoxPro).

Standardul SQL utilizat pînă la începutul anului 2000 este cel realizat în 1992 şi cunoscut sub numele de SQL’92 sau SQL2.

Noul standard SQL3 lansat în 1999 are în vedere o serie de extensii faţă de SQL2 după cum urmează:

- facilităţi orientate obiect – posibilitatea de definire de către utilizator a tipurilor abstracte de date care să permită descrierea de metode, identitatea obiectelor, subtipuri şi moştenire, polimorfism etc.;

- structuri de control – pentru a conferi limbajului completitudine de calcul (IF, FOR, WHILE, etc.) pentru a deveni un limbaj de sine stătător a cărui putere de expresie să nu mai fie limitată la nivelul limbajelor relaţionale;

- facilităţi pentru exprimarea prelucrărilor recursive;- facilităţi de comunicare în reţea;- facilităţi de prelucrare distribuită (mecanisme pentru crearea, memorarea şi execuţia

procedurilor la nivelul serverelor de date –stored procedures);- facilităţi multimedia;- facilităţi pentru tratarea timpului în bazele de date.

Modelul relaţional al datelor propus de Codd, relativ la manipularea datelor, a fost iniţial orientat exclusiv pe problema regăsirii datelor prin operaţia de interogare a bazelor de date, ulterior (SQL2, 1990) fiind avute în vedere şi problemele introducerii actualizării şi eliminării datelor.

Interogarea bazelor de date - Fraza SELECT

82

Page 83: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Interogarea bazelor de date în limbajul SQL se realizează cu ajutorul unei singure instrucţiuni şi anume instrucţiunea SELECT având următoarea sintaxă:

SELECT [DISTINCT] <lista atribute>|*FROM <lista relaţii> [WHERE <condiţie>][GROUP BY <lista atribute de grupare>][HAVING <condiţie>][ORDER BY <atribut1 de ordonare> [ASC]|DESC,…][UNION <frază SELECT>]

<lista atribute> este o listă ce conţine nume de atribute (câmpuri) sau expresii construite utilizând atribute, separate prin caracterul “,” şi care fac parte din relaţiile (tabele, vederi) enumerate în <lista relaţii> din clauza FROM. Numele fiecărui atribut sau expresii din <lista atribute> va fi afişat în capul de tabel ce reprezintă rezultatul interogării, fiecare atribut sau expresie putând primi un alias folosind specificarea AS <alias>.

Caracterul ‘*’ specifică faptul că se extrag toate atributele tabelei precizate în clauza FROM.

Clauza DISTINCT precizează faptul că în relaţia rezultat nu pot apărea duplicate (tuple identice).

Clauza WHERE precizează condiţiile de interogare (condiţii care trebuie să fie satisfăcute de tuplele interogate, condiţii de cuplare relaţii (JOIN, relaţii între tabele). În clauza WHERE pot fi utilizaţi operatori logici (AND, NOT, OR), predicate (IN, LIKE, BETWEEN, EXISTS, ALL, ANY), operatori aritmetici (+, -, **, /, *), operatori de comparare (=, #,<, >, <=, >=, <>), parantezele ( ) pentru schimbarea ordinii de prioritate a operaţiilor, operatorilor, funcţii şi alte subinterogări SELECT, pentru construirea de expresii pe care trebuie să le îndeplinească tuplele ce constituie rezultatul interogării. Predicatul IN permite specificarea unei liste pentru domeniul de căutare pentru un atribut, iar predicatul BETWEEN permite specificarea unui interval pentru domeniul de căutare a valorilor unui atribut, fiind echivalent cu o condiţie de forma: <atribut> >= <limita inf. interval> AND <atribut> <= <limita sup. interval>Exemple:Fie tabela Persoane(Nrcrt,Nume,Prenume, Datan, Sexul, Adresa)Selectarea tuturor înregistrărilor din tabela Persoane pentru care primele 7 caractere din câmpul Adresa sunt ‘Suceava’ sau ‘Rădăuţi’ se realizează cu comanda:

SELECT * FROM Persoane WHERE SUBSTR(Adresa,1,7) IN (‘Suceava’,‘Rădăuţi’)

Interogarea de mai sus este echivalentă cu interogarea:SELECT * FROM Persoane WHERE SUBSTR(Adresa,1,7) = ‘Suceava’ OR SUBSTR(Adresa,1,7) = ‘Rădăuţi’

Selectarea tuturor înregistrărilor din tabela Persoane pentru care data naşterii este cuprinsă între 01/01/72 şi 01/01/82 se realizează astfel: SELECT * FROM Persoane WHERE Datan BETWEEN {01/01/72} AND {01/01/82}Interogarea de mai sus este echivalentă cu interogarea: SELECT * FROM Persoane WHERE Datan >= {01/01/72} AND Datan <= {01/01/82}Predicatul LIKE permite selecţia şirurilor de caractere care conţin anumite caractere specificate prin intermediul unei măşti definite cu ajutorul unor caractere speciale (%, _ în dBASE IV, FoxPro, ORACLE, sau *, ? în INFORMIX)

83

Page 84: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Exemple:SELECT * FROM Persoane WHERE Nume LIKE ‘%a’

(selectează toate înregistrările din tabela Persoane pentru care valorile atributului Nume se termină cu litera ‘a’).

SELECT Nume,Prenume,Datan FROM Persoane WHERE Nume LIKE ‘A%u’(selectează valorile atributelor Nume, Prenume, Datan pentru toate înregistrările din tabela Persoane pentru care prima literă din Nume este ‘A’ iar ultima literă este ‘u’).

SELECT Nume FROM Persoane WHERE Nume LIKE ‘_o%’(selectează valorile atributului Nume pentru toate înregistrările din tabela Persoane pentru care prima literă din Nume este orice literă, a doua literă din Nume este litera ‘o’ şi începând din poziţia a treia numele poate conţine orice litere.)Predicatele ALL, ANY, EXISTS se utilizează pentru interogări ce conţin subinterogări, în vederea verificării anumitor condiţii ce trebuie îndeplinite între rezultatele interogării şi rezultatele subinterogării.

Clauza GROUP BY – realizează gruparea tuplelor unei relaţii pe baza valorilor unui atribut sau grup de atribute şi generează o singură tuplă pentru fiecare grup de tuple având aceeaşi valoare pentru atributele care definesc grupul. Atributele care definesc grupul trebuie obligatoriu să se regăsească în lista atributelor interogate <lista atribute>.De asemenea asupra unor atribute pot fi aplicate funcţii agregat:

- AVG(<atribut>) – media valorilor atributului specificat ca parametru, pe grup;- SUM(<atribut>) – suma valorilor atributului specificat ca parametru, pe grup;- MAX(<atribut>) – maximum valorilor atributului specificat ca parametru, pe grup;- MIN(<atribut>) – minimum valorilor atributului specificat ca parametru, pe grup;- COUNT(<atribut>) – numărul înregistrărilor pe grupare după <atribut>.

Observaţie. <atribut> poate fi fie un atribut, fie o expresie definită utilizând atribute ale tabelei.Clauza HAVING, opţiune a clauzei GROUP BY, este o formă specială a clauzei WHERE

întrucât se aplică unor grupuri de tuple (şi nu unor tuple) definite de clauza GROUP BY.Exemple:Fie tabela Stocuri(CodDep,CodP,UmP,Cant,Pret) SELECT CodDep,SUM(Cant*Pret) AS Valoare,COUNT(CodDep) AS Contor

FROM Stocuri GROUP BY CodDep(Calculează suma produselor Cant*Pret pentru toate tuplele având aceeaşi valoare în câmpul CodDep şi numărul înregistrărilor din fiecare grup definit de câmpul CodDep şi afisează rezultatele sub formă de tabel având coloanele CodDep, Valoare, Contor)

SELECT CodDep,CodP,MAX(Pret) FROM Stocuri

GROUP BY CodP HAVING MAX(Pret) < 150000

(selectează pentru fiecare grupă de înregistrări având aceeaşi valoare în câmpul CodP, înregistrarea cu preţul maxim mai mic decât 150000)

Clauza ORDER BY – permite precizarea ordinii de afişare a datelor astfel: ORDER BY <nume atribut 1> [ASC]|DESC,<nume atribut 2>[ASC]|DESC,…

Exemplu:SELECT * FROM Persoane ORDER BY Datan DESC,Nume

(afişează toate înregistrările din tabela Persoane în ordine descrescătoare după data naşterii şi în cadrul aceleiaşi date a naşterii crescător după Nume)

84

Page 85: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Clauza UNION – permite obţinerea rezultatului a două sau mai multe interogări printr-o singură instrucţiune SELECT.Exemplu:SELECT CodDep,CodP,Cant FROM Stoc_Prod WHERE CodDep = ‘Dep01’UNIONSELECT CodDep,CodP,Cant FROM Stoc_Prod WHERE Cant >= 100(selectează tuplele (CodDep,CodProd,Cant) din tabela Stoc_Prod pentru toate înregistrările pentru care CodDep = ‘Dep01’, la care adaugă tuplele (CodDep,CodProd,Cant) din tabela Stoc_Prod pentru toate înregistrările pentru care Cant >= 100).Pentru a nu se elimina tuplele duplicat trebuie specificat UNION ALL.Pentru a schimba ordinea de afişare a tuplelor extrase se poate utiliza clauza ORDER BY aplicată doar relaţiei finale şi nu asupra fiecărei fraze SELECT.

Regăsirea datelor din două sau mai multe relaţiiInterogarea datelor din două sau mai multe tabele (relaţii) presupune existenţa unor câmpuri

comune pentru realizarea operaţiei de cuplare (operatorul JOIN). În fraza SELECT operaţia de cuplare este definită în clauza WHERE sub forma:

<nume tabela1>.<cheie1> = <nume tabela2>.<cheie2>(unde <cheie1>, <cheie2> reprezintă câmpurile ce identifică înregistrările corespondente în cele două tabele).Pentru exemplificare pe lângă tabela Stocuri mai considerăm tabela Produse(CodP, DenP, DesP).

SELECT Produse.CodP,DenP,UmP,Cant,Pret FROM Produse,Stocuri WHERE Produse.CodP = Stocuri.CodP

(extrage toate tuplele (CodP,DenP,UmP,Cant,Pret) pentru care valoarea atributului CodP din tabela Produse este egală cu valoarea atributului CodP din tabela Stocuri ). În lipsa clauzei WHERE se vor extrage toate combinaţiile posibile între tuplele celor două tabele (produsul cartezian).Fiecărei tabele i se poate atribui un alias astfel încât fraza de mai sus este echivalentă cu fraza: SELECT A.CodP,DenP,UmP,Cant,Pret FROM Produse A,Stocuri B WHERE A.CodP = B.CodP

În anumite situaţii poate fi necesară corelarea (cuplarea) unei relaţii (tabele) cu ea însăşi. Spre exemplu dacă presupunem că în tabela Stocuri unele produse pot apare de mai multe ori cu preţuri diferite şi ne interesează poziţiile cu preţul minim, formulăm următoarea interogare:

SELECT A.CodP,A.Cant,A.Pret FROM Stocuri A WHERE A.Pret = (SELECT MIN(B.Pret) FROM Stocuri B WHERE A.CodP = B.CodP)Pentru rezolvarea unor astfel de probleme s-au utilizat instrucţiuni SELECT imbricate care vor fi tratate în detaliu în lucrarea de laborator nr.13.

Instrucţiuni SELECT imbricateLimbajul SQL oferă posibilitatea construirii unor interogări complexe prin includerea în

clauza WHERE a unei instrucţiuni SELECT, a altei instrucţiuni SELECT (numită sub-interogare sau ‘inner’) astfel:

SELECT <lista atribute> FROM <lista relaţii> WHERE <condiţie> (<sub-interogare>)

La rândul ei sub-interogarea poate conţine în clauza WHERE o altă instrucţiune SELECT obţinând astfel o interogare complexă constituită din instrucţiuni SELECT imbricate pe un număr oarecare de nivele. Instrucţiunea SELECT interioară generează valori pentru condiţia de căutare a

85

Page 86: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

instrucţiunii SELECT exterioare care o conţine (numită şi ‘outer’). O sub-interogare poate returna o singură valoare, sau poate returna mai multe valori.

În ce priveşte ordinea de evaluare a interogărilor pot exista :- sub-interogări simple - în care interogarea interioară este evaluată prima, independent de

interogarea exterioară, iar rezultatul interogării interioare este utilizat de interogarea exterioară;- sub-interogări corelate - în care interogarea exterioară transmite repetat câte o valoare pentru

interogarea interioară, care în baza valorii primite, parcurge tuplele relaţiei şi transmite interogării exterioare rezultatul obţinut. Astfel de interogări realizează corelarea unei relaţii cu ea însăşi şi sunt cele mai performante.

Spre exemplu dacă presupunem că în tabela Stocuri unele produse pot apare de mai multe ori cu preţuri diferite şi ne interesează poziţiile cu preţul minim, formulăm următoarea interogare:

SELECT A.CodP,A.Cant,A.Pret FROM Stocuri A WHERE A.Pret = (SELECT MIN(B.Pret) FROM Stocuri B WHERE A.CodP = B.CodP)

Sub-interogări simple care returnează o singură valoare - pot fi utilizate în interogări imbricate având sintaxa:

SELECT <lista atribute> FROM <lista relaţii>WHERE <atribut> = <

> <= >= !=

(<sub-interogare>)[ORDER BY <atribut[ASC]|DESC,…]

Exemplu:SELECT CodDep,CodP,Cant FROM Stocuri

WHERE Cant > (SELECT AVG(Cant) FROM Stocuri ) ORDER BY CodDep(afişează produsele pentru care există stocuri peste medie, ordonate pe depozite).

Sub-interogari simple care returneaza mai multe valori pot fi utilizate în interogări imbricată care utilizează în clauza WHERE codiţii care generează o mulţime de valori folosind unul din predicatele: (NOT)IN, (NOT)ANY, (NOT)ALL, (NOT)EXISTS.Exemplu:SELECT * FROM Produse WHERE CodP IN (SELECT CodP FROM Facturi WHERE Numar IN (SELECT Numar FROM Beneficiari,ComenziWHERE Beneficiari.Nume=’Ionescu’ AND Beneficiari.Cod_Beneficiar=Comenzi.Cod_Beneficiar))

Predicatul ANY poate fi utilizat în combinaţie cu oricare din operatorii <, >, =, <=, >=, != şi permite verificarea dacă valoarea unui atribut satisface condiţia precizată pentru orice valoare din lista rezultată din subinterogare.

SELECT CodP FROM Stocuri WHERE Cant > ANY (SELECT Cant FROM Stocuri WHERE CodDep = “D1”)

Predicatul ALL returnează toate tuplele pentru care valorile atributului din clauza WHERE sunt <, >, <=, >= decât toate valorile generate de interogarea interioară (acest predicat nu poate fi utilizat cu operatorul = ce ar corespunde cazului banal în care toate interogările din listă sunt egale).Exemplu:

86

Page 87: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

SELECT * FROM Stocuri WHERE Cant < ALL (SELECT Cant FROM Stocuri WHERE CodDep = “D1”)

Predicatul EXISTS verifică dacă pentru fiecare tuplă a relaţiei există tuple care satisfac condiţia din interogarea interioară (deci EXISTS permite specificarea mai multor atribute în interogarea interioară).Astfel spre exemplu instrucţiunea:

SELECT * FROM Produse A WHERE NOT EXISTS (SELECT * FROM Stocuri B WHERE B.CodP=A.CodCodP)va returna o listă de produse care nu au nici o înregistrare în Stocuri.

Probleme propuseSă se scrie comenzile SQL pentru realizarea interogărilor de mai jos.

Situaţia stocurilor

Situaţia ofertelor

Situaţia vânzărilor

Lista produselor pentru care nu există oferte

Lista produselor pentru care nu s-au făcut vânzări în perioada [data1,data2]

Câmp CodDep Codp Denp Ump Cant Pret ValoareTabela Stocuri Stocuri Produse Stocuri Stocuri Stocuri Cant*Pret

Câmp Codf Denf Adresaf Codp Denp Ump Pret DataoTabela Furnizori Furnizori Furnizori Produse Produse Oferte Oferte Oferte

Câmp Codc Denc Adresac Codp Denp Ump Cant Pret Valoare DatavTabela

Clienti Clienti Clienti Produse Produse Vanzari Vanzari Vanzari Cant*Pret

Vanzari

Câmp Codp DenpTabela Produse Produse

Câmp Codp DenpTabela Produse Produse

87

Page 88: UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVAsorinv/IndrumarLaboratorBD.pdf · UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA Facultatea de Ştiinţe Economice şi Administraţie Publică

Bibliografie:

1. Thomas Connolly, Carolyn Begg, Anne Strachan – Database Systems – A Practical Approach to Design, Implementation and Management Second Edition (trad. Ed. Teora: Baze de date Proiectare . Implementare . Gestionare, Buc. 2001)

2. Conf.univ.dr. VirgilChichernea, Sistemul ACCESS, Ed.SYLVI, vol.I, Buc.20003. Conf.univ.dr. Virgil Chichernea, lector univ.dr. Cezar Botezatu, Sistemul

FoxPro,Ed.SYLVI, vol.II, Buc.20004. Mirela Danubianu, Baze de date - Fundamente teoretice si dezvoltarea aplicatiilor în

Visual FoxPro / - Suceava, 2003. - 209 p., ISBN 973-0-03257-25. C. J. Date, An Introduction to Database Systems, 8th Edition, published by Pearson

Education, Inc. Adison Wesley Higher Education, 2004.6. Robert Dollinger-Baze de date şi gestiunea tranzacţiilor,ClujNapoca,19987. FoxPro 2.6 pentru Windows. Ghidul programatorului, Traducere Ed. Teora, 19988. Doina Fusaru, Arhitectura bazelor de date – Mediul SQL, Univ.Spiru Haret, Ed.Fundatiei

România de mâine, Buc.20029. Utilizare Microsoft Access 2000, Susan Sales Harkins, Ken Hansen şi Tom Gerhart, trad.

Marian Daniel Merezeanu, Aurelia Nicoleta Merezeanu, Bucureşti, Ed. Teora,2000. - 527 p.10. Jones John “Data Bases in theory and practice” Ed. Thompson Computer

Press, UK 199711. Nicolae Morariu, Valeriu Lupu si Ovidiu Hurjui, Baze de date, Editura Universitatii

Suceava, 2003. - 117 p., ISBN 973-8293-83-912. Introduction to ORACLE SQL, SQL* Plus and PL/SQL Course Notes, Glenn Maslen,

Published by Oracle Corporation UK Ltd. 199213. Totul despre SQL Interogarea bazelor de date, Corina Pascu, Adrian Pascu,

Ed. Tehnică Buc. 199414. Stefan-Gheorghe Pentiuc, Jean-Michel Duthilleul, Elemente de teoria si proiectarea

bazelor de date : note de curs, Suceava, Universitatea "Stefan cel Mare" Suceava, 1995,132 p. 15. Khoshafian Setrag “Object Oriented Databasses”, pub. John Whiley, 994, UK16. Access - pentru programatori / Leon Tâmbulea. - Cluj-Napoca : Promedia Plus, cop.

1996. - 297 p.17. Aplicaţii de gestiune : Access şi Visual Basic / Mioara Udrică. - Bucureşti : Naţional,

1998. - 197 p.18. Microsoft Visual FoxPro 6.0, Ghidul programatorului, Ed.Teora, 2000.

88