You are on page 1of 175

UNIVERSITATEA ROMANO-AMERICANA FACULTATEA DE INFORMATICA MANAGERIALA

Prof. univ. dr. Virgil Chichernea Lect. univ. drd. Gabriel Eugen Garais Maria Titrade Asist. univ. drd. Cristina

BAZE DE DATE I SUPORT DE CURS Baze de date si programarea aplicatiilor economice ANUL II Semestrul 1

Bucuresti 2010
1

INFORMATII GENERALE
1.1. Date de identificare a titularilor de curs si seminar Nume titular curs: Prof. Univ. Dr. Virgil Chichernea E-mail: chichernea.virgil@profesor.rau.ro Consultatii: saptamanal vineri ora 12 -14 (sala 501) sau prin e-mail Nume titulari Lect. Univ Drd. Gabriel-Eugen Garais laborator: garais.gabriel@profesor.rau.ro Asist. Univ. Drd. Cristina Maria Titrade 1.2. Conditionari si prerechizite obligatorii Acest curs presupune parcurgerea cursurilor Arhitectura calculatoarelor si sisteme de operare si Algoritmi de calcul si bazele programarii din anul I. Pentru cele doua materii se recomanda revederea bibliografiei obligatorii propuse in anul I. 1.3. Descrierea cursului In orice domeniu de activitate, din economia mondiala globalizata, se cer informatii exacte obtinute in timp util. Aceste informatii se obtin din datele primare, culese si organizate sub forma unor Baze de Date (BD), in urma unor procese ample de prelucare si transmitere de date, efectuate cu ajutorul produselor software complexe numite Sisteme de Gestiune a Bazelor de Date (SGBD). In acest Suport de curs insusirea si utilizarea notiunilor si conceptelor referitoare la BDR/SGBDR este organizata pe urmatoarele nivele : 1. Utilizatori baze de date i SGBD (Modulul 1 si 2); 2. Programatori n limbaje de programare 4 GL (Modulul 3 si 4); 3. Insusirea MTI disponibile pentru proiectarea BDR (Modulul 5 si 6); Pentru partea practica, in cadrul suportului de curs sunt date exemple dupa care trebuie intocmite proiectele de semestru, iar in partea finala se afla Pliantul cu sintaxa comenzilor SGBDR. 1.4. Materiale bibliografice obligatorii - V. Chichernea, G. Garais: Baze de Date - Sistemul FoxPro/Visual FoxPro; Univ. Romno-American. Editura PROUNIVERSALIS, Bucureti 2009 - David M. Kroenke: Database Processing: Fundamentals Design and Implementation.; 6th Edition, Pretice Hall, 1997 - I.Lungu, N. Muat, M. Velicanu: FoxPro, Prezentare i aplicaii; Editura ALL, Bucureti 1997
- David M. Kroenke: Textbook: Database Processing: Fundamentals, Design, and Implementation, , 6th Edition, Prentice Hall, 1997

CUPRINS: MODULUL I ARHITECTURA BAZELOR DE DATE RELAIONALE ....................... 6 1.1. Noiuni si concepte utilizate n organizarea datelor ................................ 6 1.2. Modele conceptuale pentru Sisteme de Gestiune a Bazelor de Date ...... 12 1.3 Relaii (tabele) .......................................................................................... 13 1.4 Tipuri de chei i identificarea nregistrrilor prin chei ............................ 13 1.5. Diagrama (modelul) entitate - legtur (asociere) (DEA) ...................... 15 Tema nr. 2 ......................................................................................................... 18 Tema nr. 3 ...................................................................................................... 19 1.6. Tipuri de restricii i integritatea restriciilor .......................................... 19 1.7. Dependene i determinri n mulimea atributelor (cmpurilor) .......... 21 1.8 Anomalii intalnite in proiectarea Tabelelor ............................................. 23 1.9 NORMALIZAREA - Ameliorarea succesiva a schemei conceptuale a BD ........................................................................................................................ 24 1.10 Etape in realizarea aplicatiilor informatice cu baze de date ................... 26 MODULUL II PREZENTAREA SGBD-ULUI FOXPRO ................................................... 28 2.1. Componentele funcionale ale sistemului............................................ 28 2.2. Lansarea i modul de lucru sub SGBD Foxpro ................................... 30 2.3. Tipuri de fiiere n FOXPRO ................................................................. 33 2.4. Consideraii generale privind comenzile Foxpro .................................... 34 Semnificaie....................................................................................................... 35 ALL ................................................................................................................ 35 Comanda acioneaz asupra tuturor nregistrrilor din tabela activ ............. 35 2.5. Elemente ale limbajului de descriere i interogare a bazei de date ..... 36 2.5.1. Constante ...................................................................................... 36 2.5.2. Variabile ........................................................................................... 36 2.5.3. Operatori .......................................................................................... 37 2.5.4. Expresii ............................................................................................ 39 2.5.5. Funcii .............................................................................................. 39 2.5.5.1. Funcii destinate lucrului cu baze de date i fiiere asociate: .. 39 2.5.5.2. Funcii destinate prelucrrii datelor numerice: ........................ 40 2.5.5.3. Funcii destinate prelucrrii irurilor de caractere .................... 41 2.5.5.4. Funcii de tip dat calendaristic ............................................... 42 2.5.5.5. Funcii financiare ...................................................................... 43 2.5.5.6. Funcii cu caracter general ........................................................ 43 2.5.5.7. Funcii utilizator ........................................................................ 43 MODULUL III 3

COMENZI FOXPRO PENTRU CREAREA SI GESTIONAREA BAZEI DE DATE .......................................................................................................... 44 3.1. Comenzi pentru crearea bazei de date..................................................... 44 3.1.1 Crearea tabelelor ............................................................................... 44 3.2. Comenzi pentru actualizarea coninutului i structurii bazei de date ..... 45 3.2.1. Comenzi pentru actualizarea structurii ........................................ 45 3.2.2. Comenzi pentru actualizarea coninutului bazei de date .................. 47 3.2.2.1. Comenzi pentru adugare de noi nregistrri ........................ 47 Adugarea se poate face n orice moment pentru o tabel care a fost creat, deci care conine cel puin structura definit. Adugarea de noi date se poate face: .. 47 3.2.2.2. Comenzi pentru modificarea datelor dintr-o tabel ............. 48 3.2.2.3. Comenzi pentru tergerea datelor dintr-o tabel ................... 51 Alte comenzi de tergere ............................................................................ 52 3.3. Comenzi pentru interogarea bazei de date ............................................. 52 3.4. Comenzi pentru afiarea bazei de date (vizualizarea nregistrrilor) 54 3.5. Comenzi pentru ordonarea nregistrrilor bazei de date ..................... 58 3.5.1. Comenzi pentru sortarea nregistrrilor ........................................... 58 3.5.2.Comenzi pentru indexarea unei baze de date .................................... 59 3.6. Comenzi pentru deschiderea i nchiderea tabelelor. Zone de lucru ... 62 3.7. Comenzi pentru stabilirea legturilor dintre tabelele bazei de date .... 63 3.8. Comenzi pentru lucru cu variabile de memorie .................................. 65 MODULUL IV LIMBAJUL DE PROGRAMARE FOXPRO................................................ 74 4.1. Realizarea i gestionarea programelor sub Foxpro ................................. 74 4.2. Comenzi pentru elaborarea programelor sub FOXPRO ......................... 74 4.3. Structura secvenial ............................................................................... 76 4.4. Structura alternativ ................................................................................ 76 4.5. Structura repetitiv .................................................................................. 79 4.6. Programarea pe evenimente .................................................................... 84 4.7. Comenzi pentru afiarea formatat a datelor .......................................... 84 4.7.1. Format de afiare .............................................................................. 84 4.7.2. Format de afiare i citire ................................................................ 88 4.7.3. Afiare formatat i lucrul cu butoane de control ........................... 92 4.8. Proceduri i funcii definite de utilizator................................................. 99 4.9. Comenzi pentru lucru cu ferestre ............................................................ 99 4.10. Comenzi pentru definirea i gestionarea meniurilor ........................... 102 4.11. Comenzi pentru setarea parametrilor de lucru sub SGBD Foxpro ..... 107 MODULUL V GENERATOARE AUTOMATE .................................................................. 123 5.1. Generatorul de rapoarte ......................................................................... 123 4

5.2. Crearea Formularelor (alctuirea formularelor) .................................... 133 5.3. Generatorul de etichete ......................................................................... 138 5.4. Generatorul de filtre (QUERY)............................................................. 140 5.5. Generatorul de meniuri ......................................................................... 144 5.6. Generatorul de aplicaii ......................................................................... 148 MODULUL VI PROGRAMARE ORIENTATA PE OBIECTE IN VISUAL FOXPRO .. 150 6.1 Faciliti oferite de Visual FoxPro ........................................................ 150 6.1.1 O cale rapid de a mbunti vechile aplicaii FoxPro : ................ 150 6.1.2 Creterea productivitii i flexibilizarea produselor software ...... 151 6.1.3 Transfer uor pe 32-bii .................................................................. 152 6.2 Programarea orientat obiect in Visual FoxPro .................................... 153 6.2.1 Proprietile ..................................................................................... 153 6.2.2 Metodele.......................................................................................... 154 6.2.3 Evenimentele ................................................................................... 154 6.2.4 Clasele ............................................................................................. 154 6.2.5 Instanierea obiectelor ..................................................................... 156 6.2.6 Referirea unei Metode sau a unei Proprieti ntr-o clas ............... 156 6.2.7 Subclasarea unei clase unei altei clase ............................................ 156 6.2.8 Protejarea metodelor i a proprietilor ........................................... 159 6.2.9 Polimorfismul.................................................................................. 160 6.3 Sistem de mentenanta n POO ............................................................... 161 6.4 Realizarea claselor in Visual FoxPro ..................................................... 161 6.4.1 Diferenele designului de suprafa................................................. 163 6.4.2 Diferenele de meniu ....................................................................... 163 6.4.3 Adugarea proprietilor i a metodelor.......................................... 163 6.4.4 Accesarea Informaiilor clasei ........................................................ 163 ANEXA NR. 1 ................................................................................................. 167 ANEXA NR. 2 ................................................................................................. 171

MODULUL I ARHITECTURA BAZELOR DE DATE RELAIONALE


n informatica de gestiune sunt preferate bazele de date relaionale, datorit performanelor oferite de acest tip de organizare. Prin utilizarea pe scar larg a calculatoarelor personale (PC) utilizatorii au posibilitatea de a realiza rapid operaiile de ntreinere i regsire a datelor coninute n acest tip de baze de date. Pentru a putea utiliza i mai ales pentru a putea proiecta astfel de baze de date relaionale este necesar s ne nsuim mai nti o serie de termeni i concepte.

1.1. Noiuni si concepte utilizate n organizarea datelor


D1: Datele se obin prin efectuarea unor observaii/masuratori asupra obiectelor, fenomenelor, imaginilor, sunetelor, textelor. Asupra datelor, reprezentate ntr-un cod convenional, se pot face operaii de stocare, prelucrare, transmitere fie prin mijloace manuale, fie prin mijloacele informatice. Prin conceptul de dat se nelege cuplul atribut-valoare (A,V). Orice dat se identific prin atributul ei. Valoarea concret pe care o ia acest atribut constituie o reprezentare a sa. D2: Informatiile se obtin prin prelucrarea datelor. Informaiile rezult din semnificaiile i legturile ce se pot deduce din ansamblul de date. D3: Un fiier este un ansamblu de date ce poate fi manipulat de un mare numr de utilizatori ntr-o viziune unic asupra datelor. Datele memorate ntr-un fiier sunt structurate n nregistrri, o nregistrare se compune din mai multe cmpuri, un cmp are o lungime de unul sau mai multe caractere (octei), un caracter (byte sau octet) se memoreaz n opt bii. Un fiier se identific, de regul, de ctre sistemul de operare, printr-un nume i o extensie. D4: Baza de date este o colecie de date i informaii necesar i suficient pentru a satisface cerinele informaionale ale conducerii unei uniti economico-sociale (agent economic, instituii publice etc.). BD este formata dintr-un ansamblu de fisiere corelate. 6

Din punct de vedere tehnic o baz de date este format din unul sau mai multe fiiere n care datele sunt memorate ntr-o structur de date specific software-ului utilizat la crearea bazei de date.. O baz de date grupeaz un ansamblu de fiiere corelate. O baz de date este un ansamblu de date ce poate fi manipulat de mai muli utilizatori n viziuni diferite asupra datelor Structura acestui ansamblu de date se realizeaz prin schema bazei de date. Schema bazei de date, n sens CODASYL, descrie toate datele i structurile luate n eviden n cadrul unei baze de date. D5: Schema BD reprezint structura global a bazei de date (unii autori o numesc structur global, alii structur virtual). Subschema BD reprezinta viziunea particulara a fiecrui utilizator. n exploatarea bazei de date fiecare utilizator are propria viziune asupra structurrii datelor relevante pentru el. De fapt fiecare utilizator va avea acces la o baz de date particular, n realitate fictiv, iar descrierea acestei baze de date particulare se numete subschema bazei de date. Constituirea SCHEMEI BD se realizeaz n patru etape dup cum urmeaz: Etapa 1: Identificarea mulimilor de entiti din cadrul sistemului Etapa 2: Identificarea asocierilor (legturilor) care exist ntre mulimile de entiti Etapa 3: Determinarea condiiilor care se impun asocierilor identificate Etapa 4: Determinarea caracteristicilor (atributelor) entitilor i asocierilor care au rezultat n urma etapelor precedente. D6: Sistemul de Gestiune a Bazelor de date (SGBD) este format dintr-un Sistem de programe care permite construirea unor baze de date, ncrcarea datelor i dezvoltarea de aplicaii privind valorificarea datelor memorate n bazele de date. SGBD-ul este n fond o interfa ntre utilizatori i sistemul de oparare. - Orice SGBD conine un limbaj de descriere a datelor (LDD), care permite descrierea structurii unei baze de date i un limbaj de cereri (LC) sau limbaj de prelucrare a datelor (LPD)ce permite efectuarea de operaii asupra datelor aflate n baza de date cum ar fi: crearea; actualizarea; interogarea;listarea si intretinerea bazei de date. S.G.B.D. este un sistem de programe care asigur independena programelor aplicative fa de modul de structurare a datelor. 7

Conform metodologii ANSI fiecrei baze de date i se asociaz trei nivele funcionale i anume: - nivelul conceptual care este depozitarul semantic al bazei de date. Acest nivel reprezint o abstracie a sistemului modelat i servete ca referire global pentru viziunile particulare ale utilizatorilor (schema bazei de date); - nivelul extern (logic) cuprinde viziunile specifice definite pentru manipularea (prelucrarea) datelor. Necesitile de date ale utilizatorilor sunt exprimate la acest nivel. O viziune extern a bazei de date reprezint, ntr-o manier ct mai aproape de realitate, un tip de utilizator al bazei de date (subschemele bazei de date); - nivelul intern (fizic), corespunde reprezentrii datelor pe suporturile de date. Acest nivel contribuie la eficacitatea transpunerii i implementrii sistemului conceptual. D7: Banca de date reprezint un sistem de organizare, prelucrare i teletransmisie de date i informaii care este format dintr-o baza de date, un sistem de programe pentru gestiunea fiierelor bazei de date, echipamentele de calcul implicate i procedurile de lucru utilizate. D8: Sistemul informaional este sistemul de culegere, prelucrare, transmitere i stocare a datelor i informaiilor care circul n cadrul unei uniti economico-sociale. Sistemul informaional face legtura ntre sistemul condus i sistemul de conducere fiind subordonat acestora. D9: Sistemul informatic este un ansamblu structurat de elemente intercorelate funcional pentru automatizarea procesului de obinere a informaiilor i fundamentarea deciziilor. Sistemul informatic este inclus n sistemul informaional i conine procesul de culegere, verificare, transmitere, stocare i prelucrare automat a datelor. Sistemul informatic se compune din baza de date, echipamente de calcul i transmisie de date, software-ul i utilizatorii.

SISTEM INFORMAIONAL SISTEM INFORMATIC Subsistem BANCA DE DATE Baza de date 8 Echip. SGBD de calcul

Proceduri

Schema nr. 1 Relaiile dintre sistemul informaional, sistemul informatic i banca de date Categorii de personal implicate in realizarea si exploatarea sistemelor informatice cu BD: Administratorul bazei de date, Programatorii de aplicaii, Utilizatorii finali. - Administratorul bazei de date care este gestionarul responsabil cu buna funcionare a SGBD i cu meninerea n permanen n stare de funcionare a bazei de date. Administratorul bazei de date ( o persoan sau un grup) are urmtoarele responsabiliti: - proiectarea bazei de date (definirea schemei i a subschemelor); - asigurarea securitii datelor; - ameliorarea performanelor bazei de date; - asigurarea integritii i extinderii bazei de date. - Programatorii de aplicaii - specialitii care realizeaz programe in LC, acestea fiind apoi compilate i memorate n fisiere ce pot fi lansate n execuie de ctre utilizatori prin apelarea numelui asociat de utilizator i efectueaz unele prelucrri specifice de date; - Utilizatorii finali persoane care exploateaz baza de date si ruleaza inclusiv programele elaborate de programatorii de aplicaii. Acesti utilizatori pot s obin informaiile memorate n baza de date fr s aib cunotine de programare. Ei obin informaiile dorite prin comenzi cunoscute i eventual rspunznd la diferite opiuni pe care le indic sistemul la un moment dat. Deoarece datele dintr-o unitate economico-social sunt ntr-o permanent schimbare, atunci i asupra datelor memorate n baza de date asociat sistemului informatic al unitii economico-sociale se efectueaz operaii de creare, modificare, adugare. tergere, prelucrare (interogare, listare, transfer) etc. OPERATII ASUPRA BD: -CREARE -ACTUALIZARE (Modificare valori; adugare nregistrri; tergere nregistrri) - INTEROGARE - LISTARE - INTRETINERE D10: Prin entitate nelegem un obiect, un fenomen, un proces din lumea real despre care ne intereseaz s avem informaii n cadrul sistemului. 9

O entitate poate fi o persoan, un loc, un obiect, eveniment sau idee pentru care dorim s memorm i prelucrm datele. De exemplu pentru activitatea de aprovizionare a unui agent economic putem identifica urmtoarele entiti: FURNIZORI, CONTRACTE, ARTICOLE, etc. Entitile pot forma relaii ntre ele. D11: O relaie este o asociere ntre dou sau mai multe entiti. D12: Obiectul (cmpul, atributul) este o component a unei entiti. El nu are o existen proprie, ci exist ca o caracteristic a entitii. De exemplu entitatea CONTRACT, cu care se lucreaz n sistemul de aprovizionare din cadrul unui agent economic (vezi figura 4), este caracterizat prin obiectele urmtoare: cod_furnizor, cod_articol contractat, cantitate, termen de livrare, clauze, etc.

Figura nr. 2 Structura datelor din subsistemul aprovizionare Pentru exemplificarea conceptelor de entitate, obiect i dat precum i a legaturilor dintre ele, s mai analizm i activitatea de gestiune date din cadrul secretariatului unei faculti. n cadrul acestei aplicaii putem identifica urmtoarele entiti: PROFESORI, MATERII, STUDENTI, SALI_CLASA etc. Reprezentarea grafic a acestor concepte i a legturilor dintre acestea este reprezentat n figura 5. ns numai aceste noiuni nu sunt suficiente pentru modelarea organizrii datelor n baza de date, deoarece lipsesc legturile semantice ntre entiti i n interiorul acestora. D13 10

Pentru descrierea unei activiti pentru care s-au cules deja datele se folosete aa numitul MODEL ENTITATE-LEGTUR (MEL). n cadrul modelului entitate-legtur sunt puse n eviden componentele importante ale sistemului (entitile), proprietile acestor componente (atributele) i legturile dintre entiti (asocierile).

Figura nr. 3 Exemplificri ale conceptelor: entiti, obiecte, date. Principalele tipuri de asocieri ntre entiti sunt reprezentate n fig. 4. Asociere 1:1 A B

Asociere 1:m

Asociere m:n Asocieri exclusive

A A

B B C 11

A Asocieri recursive

Figura nr. 4 - Tipuri de asocieri ntre entiti

1.2. Modele conceptuale pentru Sisteme de Gestiune a Bazelor de Date


Modelul conceptual pentru un Sistem de Gestiune al Bazei de Date este modelul utilizat pentru descrierea structurii conceptuale (schemei) i structurii logice (subschemei) a datelor, precum i a legturilor dintre acestea, existente ntr-o baz de date. El se particularizeaz prin modul de definire al entitilor, cmpurilor, tipurilor de nregistrri, legturilor dintre coleciile de date i prin terminologia utilizat. Modelul conceptual nu trebuie confundat cu structura de reprezentare a datelor, deoarece pentru aceeai structur de reprezentare pot exista mai multe modele conceptuale i desigur c pentru diferite structuri de reprezentare, se poate elabora un singur model conceptual. n practica prelucrrii automate a datelor, s-au consacrat urmtoarele modele conceptuale: modelul conceptual ierarhic, modelul conceptual reea, modelul conceptual relaional. D14: Modelul conceptual "ierarhic" se bazeaz pe structuri de reprezentare "arborescente" i tipuri de legturi 1:1, 1:n. Cu ajutorul modelului conceptual "ierarhic", schema bazei de date poate fi reprezentat sub forma unui graf arborescent (cu un nod rdcin) n care nodurile exprim coleciile de date, iar arcele reflect legturile de asociere ntre nregistrrile coleciilor de date superioare i inferioare. D15: Modelul conceptual "reea" se bazeaz pe structura de reprezentare "reea" i pe tipurile de legturi 1:1, 1:n i m:n. Prin acest model schema bazei de date poate fi reprezentat sub forma unui graf general, fr limite, n care nodurile exprim colecii de date, iar arcele reflect relaiile de asociere. Acest model conceptual st la baza SGBDurilor TOTAL(UNIVAC), DBMS(DEC) i SOCRATE. D16: Modelul relaional permite o descriere simpl a bazei de date sub forma unor tabele n care actualizarea datelor n tabele se face fr anomalii de stocare. n modelul relaional o colecie de atribute (cmpuri) formeaz o relaie (numit i tabel). Modelul conceptual relaional a fost elaborat de matematicianul C.F.Codd de la firma I.B.M. n acest model conceperea schemei depinde exclusiv de legturile dintre obiecte. O relaie poate fi reprezentat printr-o tabel, n care fiecare rnd reprezint un tuplu (nregistrare) distinct, iar fiecare coloan reprezint un cmp al nregistrrii, cmp ce ia valori ntr-un anumit 12

domeniu. Cu ajutorul modelului relaional structura conceptual a bazei de date poate fi reprezentat sub forma unei mulimi de tabele, care se asociaz ntre ele prin intermediul unor chei. Modelul conceptual relaional prezint o serie de avantaje: - este uor accesibil pentru utilizatorii mai puin iniiai n informatic, prin faptul c baza de date este reprezentat ca o colecie de tabele; - este un model omogen de reprezentare a legturilor dintre coleciile de date (prin relaii); - asigur independena programelor fa de structura datelor; - permite proiectarea unei structuri conceptuale optime a datelor, cu ajutorul operaiei de normalizare; - admite satisfacerea cerinelor ntmpltoare ale utilizatorilor, prin intermediul unor limbaje bazate pe algebra relaiilor sau a unor limbaje neprocedurale bazate pe teoria predicatelor. -

1.3 Relaii (tabele)


O baz de date relaional este memorat n tabele. O tabel are o structur bidimensional format din rnduri i coloane. Termenii tabel, rnduri i coloane sunt mai frecvent ntlnii dect termenii echivaleni: relaie pentru tabel, tuplu pentru rnd i atribut pentru coloan. O relaie conine tuple (rnduri) i atribute (cmpuri). Scrierea prescurtata (forma canonica) a unei relatii (tabele): CLIENTI (Cod_Client, Nume_Client, Telefon) n figura 5 se prezint un fragment din tabela CLIENI: CLIENI: Cod_clent Nume_client 2121 Ion Popescu 3456 Gergeta Pana 4612 Ana Grigore 7562 Victor Avram Fig. 5 Fragment din tabela CLIENI Telefon 6305643 6267892 3128867 3245276

1.4 Tipuri de chei i identificarea nregistrrilor prin chei


Cheia primar asigur unicitatea fiecrui rnd dintr-o relaie. 13

O cheie primar este un atribut, sau o colecie de atribute, a crui valoare identific unic fiecare rnd al unei relaii. Pe lng unicitate, cheia primar trebuie s fie i minimal (adic s nu conin atribute n plus) i s nui schimbe valorile n timpul prelucrrii. Fie tabela: JUDETE (CodJudet, NumeJudet,NrJudet, Populatie,ResedintaJudet) Un atribut sau o colecie de atribute care poate servi ca i cheie primar se numete cheie candidat. De exemplu atributele Cod_jude i Nr_jude sunt chei candidate. n proiectarea bazei de date relaionale se poate alege una din cheile candidate ca i cheie primar iar celelalte candidate ca i cheie alternante. S analizm tabela LOCALITI LOCALITATI(CodJudet, NumeLocalitate, Populatie) n aceast tabel ce atribut poate fi cheie primar? Atributul Populaie nu poate fi deoarece valoarea cmpului se schimb i nu poate s asigure unicitatea. Nume_judet nu poate fi cheie primar deoarece pot fi localiti cu acelai nume n dou judee. Numai colecia Cod_jude + Nume_localitate asigur identificarea unic i minimal pentru fiecare rnd din relaia LOCALITI. Un atribut multiplu folosit ca i cheie primar se mai numete i cheie compus (concatenat sau compozit). Atributul Cod_jude n relaia LOCALITI este o cheie externa (sau cheie strin). O cheie extern este un atribut sau o colecie de atribute a unei relaii a crui valoare trebuie s fie valoare pereche a cheii primare din cadrul unei relaii. Spre exemplu dac avem dou tabele: LOCALITI i JUDEE, n care un atribut apare n ambele tabele. Atributul Cod_judet n tabela JUDEE este cheie primar iar n tabela LOCALITI este cheie externa. (Atenie!!! Cheia ntr-o relaie poate fi cheie primar, cheie candidat, cheie alternant, cheie extern i de aceea n exprimare trebuie s se specifice ntotdeauna tipul cheii din relaia analizat. Dac n exprimare apare numai cuvntul cheie atunci se refer la cheie primar). Observatii 1: Atentie!!!! Exista Nomenclatoare unice pe economie: La I.N.S se gestioneaza Nomenclatoarele: - SIRUTA (Nomenclatorul cu localitatile din Romania) - SIRUES (Nomeclatorul unitatilor economico-sociale din Romania) La M.E.C se gestioneaza Nomenclatoarele: - SPEC (Nomenclatorul specializarilor obtinute prin studii) La M.M.P.S. (Nomenclatorul de meserii) Observatii 2: 14

Pentru Modelul Relational se utilizeaza frecvent urmatorii termeni echivalenti: TABELA = RELATIE ATRIBUT = Coloana a tabelei; TUPLU = Inregistrare (linie a tabelei) DOMENIU = Multimea de valori admisibile pentru un atribut; STRUCTURA RELATIEI = Multimea de atribute care compun structura relatiei; SCHEMA RELATIEI = Structura relatiei + restrictii privind valorile admise; CHEIE PRIMARA= Atribut sau grup de atribute care pot identifica un tuplu in mod unic; CHEIE SIMPLA (FORMATA DINTR-UN SINGUR ATRIBUT) CHEIE COMPUSA (formata din mai multe atribute) CHEIE CANDIDATA = Atribut sau grup de atribute care pot identifica un tuplu in mod unic; Din multimea cheilor candidate se alege cheia primara CHEIE EXTERNA = Cheia care asigura legatura intre tabele (putem avea legaturi de tip 1: 1; 1: m; n:m). Se realizaeaza de regual prin campuri comune intre doua tabele. Exemplu: CLIENT (CodClient, Denumire, Adresa,...) FACTURI (NrFact, DataFact, Emitent, CodClient, Cantitate, PU, Valoare, DataScadenta,...) PRODUS(CodProdus, DenProd, Um, Pret,...) FACTURISCADENTE(NrFact, CodClient, Data, CodProdus,Cant, Pu, Valoare,....) Chei externe: -CodClient pentru legatura dintre tabelele CLIENT si FACTURI; -CoProdus pentru legatura dintre tabele PRODUS FACTURISCADENTE

si

1.5. Diagrama (modelul) entitate - legtur (asociere) (DEA)


O metod practic pentru identificarea relaiilor ce constituie o baz de date const n a scrie numele relaiei (cu litere mari) urmat n parantez de 15

numele atributelor (prima liter din numele atributului este liter mare). Atributele subliniate din parantez reprezint chei primare, iar cheile externe din relaie, se scriu imediat dup paranteza care definete relaia. Folosind aceasta metod relaiile folosite mai sus se pot scrie astfel:

RI (Cod_ar, Nume_ar, Populaie) CAPITALE (Nume_capital, Cod_ar, Anul, Populaie) Cheie extern: Cod_tara , pentru legtura cu tabela RI. ORAE(Cod_ar, Cod_ora, Cod_jude, Nume_ora, Populaie) Cheie extern: Cod_ar, pentru legtura cu tabela RI. CULTURI ( Nume_cultur, Export, Import) PRODUCIE ( Cod_ar, Nume_cultur, Producie) Cheie extern: Cod_ar, pentru legtura cu tabela RI Cheie extern: Nume_cultur, pentru legtura cu tabela CULTURI TRANSPORT (Cod_ar, Litoral, Export, Import) Cheie extern: Cod_ar, pentru legtura cu tabela RI
O alt form uzual folosit pentru descrierea entitilor i a legturilor este Diagrama Entitate Legtur (DEL). O diagram entitate - legtur exprim grafic legturile dintre entiti. n diagrama entitate legtur o entitate i o relaie (tabela) sunt echivalente. Spre exemplificare s urmrim diagrama entitate - relaie din figura 6. Diagramele entitate-relaie au urmtoarele caracteristici: - Entitile, sau relaiile, sunt reprezentate prin dreptunghiuri iar legturile prin romburi, adic numele entitii apare n interiorul dreptunghiului i verbul care descrie legturile apare n interiorul rombului. De exemplu dreptunghiul Ora este legat de dreptunghiul ar prin rombul Se afl i se citete un Ora se afl n ar; - Cifra 1 scris la intrarea legturii n dreptunghiul ar i litera M scris la ieirea legturii din dreptunghiul Ora semnific o legtur de tip 1: M ntre cele dou entiti. Similar se reprezint relaia de tip M:N dintre entitile ri i Culturi i relaii de tip 1:M relaiile existente ntre entitile (tabelele) ri i Capitale i ntre relaiile ri i Transport; 16

Un romb nscris n interiorul unui dreptunghi definete o entitate compus. O entitate compus este o legtur care are caracteristicile unei entiti. Spre exemplu entitatea Producie leag entitile ri i Culturi prin legturi de tip M:N i figureaz n acelai timp ca i entitate deoarece conine atributul cantitate pentru cheia compozit format din Cod_ar i Nume_cultur; O entitate subtip apare scris ntr-un dreptunghi dublu (nscris unul n altul) i nu este conectat prin intermediul nici unui romb la entitatea ri.

Capitala 1 1 Ora Localizat M

1 ara Aflat n M

Transportmaritim

Producia

N Culturi

Fig. 6 - Diagrama entitate - legtur Se pot marca de asemenea atribute n diagrama entitate-relaie prin plasarea fiecrui atribut individual n cadrul unei buline conectate la o entitate 17

sau relaie. Totui o diagrama entitate-relaie tipic are de regul un numr mare de entiti i relaii aa c includerea i a atributelor n aceast diagram poate provoca mai degrab confuzii dect aduce anumite clariti. Teme de laborator: Tema nr. 1 I. Pentru evidenta consumului de materii prime aferent comenzilor de produse lansate in fabricatie se cunosc urmatoarele: 1. In comanda se precizeaza sectia de productie si cantitatea de fabricat din produsul respectiv; 2. Eliberarea materiilor prime pentru consum se face pe baza bonului de consum in care se precizeaza: Nr-bon; Dta; Gestiunea; Nr-Cda; Cod-mat; Cant-mat; pret-mat; 3. Orice produs din nomenclatorul de fabricatie se defineste prin: Codp; Den-P; Pret-livrare; 4. Materiile prime se definesc prin: Cod_mat; Den_mat; UM; Gestiunea in care se depoziteaza; 5. Intrarile de materii prime in gestiune se face pe baza de NIR in care se consemneaza: Nr-NIR; Data; Furnizor; Gestiune-primitoare; Matprima-receptionata; Cantitatea; Pret-aprov. Restrictii: Se cere: -

O comanda se refera la un singur produs; O materie prima poate fi stocata in mai multe depozite; Pretul fiecarei materii prime difera de la un furnizor la altul; Un depozit are un singur gestionar.

Identificati multimea atributelor din problema; Realizati diagrama dependentelor functionale; Realizati diagrama entitate asociere (DEA) pe baza dependentelor functionale identificate.

Tema nr. 2 O firma are ca obiect de activitate comercializarea de produse ( achizitionare produse de la furnizorori, depozitarea lor si vanzarea lor catre clienti). Stiind ca: -Marfurile sunt stocate in mai multe depozite si fiecare depozit are un singur gestionar; 18

-Marfurile sunt achizitionate de la diversi furnizori in cantitati si preturi diferite de la furnizor la furnizor; -Pretul de vanzare al unui produs este unic si difera de pretul de achizitionare; -Pentru fiecare produs se cunoaste stocul initial la inceputul perioadei, Se cere: 1. Identificati multimea atributelor apartinand acestei aplicatii informatice; 2. Elaborati matricea simplificata a dependentelor functionale; 3. Realizati modelul entitate asociere (MEA) pe baza dependentelor functionale identificate. Tema nr. 3 III. Baza de date a unei firme contine tabelele: STOCURI (CodA(N6), DenA(C20), UM(C3), Stoc(N8.2)), Stocmin, Stocmax) FURNIZORI (CodF(N4), NumeF(C25), Strada(C25), Oras(C20), Judet(C2), TelefonF(N9), ContF(C12)) CLIENTI(CodCl(N4), NumeCl(C25), Strada(C25), Oras(C20), Judet(C2), Telefon(N9), Cont(C12)); COMENZI(Nr-Cda(N10), CodF/CodCl(N4), CodA(N6), Achitat(C2), Cantitate(N4), PretU(N6), Valoare (N(10), Data_Scadenta(D8)) Cheie externa: CodA pentru legatura cu tabela STOCURI Cheia externa: CodF/CodCl pentru legatura cu tabela FURNIZORI/CLIENTI Se cere: - Trasati diagrama entitate asociere pentru aceasta BD; - Analizati posibilitatea aparitiei unor anomalii - Eliminati aceste anomalii

1.6. Tipuri de restricii i integritatea restriciilor


O baz de date are proprietatea de integritate dac datele coninute n ea respect reguli certe numite restricii de integritate. Ideal ar fi s avem un SGBD care s aplice toate restriciile de integritate. Dac un SGBD poate s aplice numai anumite restricii de integritate atunci celelalte restricii de integritate trebuie s fie aplicate prin alte programe sau prin procedurile manuale efectuate de utilizatorii SGBD-ului. Restriciile de integritate se pot mpri n trei grupe: a) restricii asupra chei primare, 19

b) restricii asupra integritii criteriului de adresare (restricii de integritate referenial) c) restricii de integritate a domeniului. a) O restricie asupra cheii primare provine din definiia unei chei primare care spune c cheia primar trebuie s fie unic. Restricia de integritate a entitii spune c cheia primar nu poate fi nul. Pentru o cheie compozit nici unul din atributele individuale nu poate fi nul. Proprietile de unicitate i nenul a unei chei primare asigur c se poate referi (adresa) orice valoare dintr-o baz de date prin specificarea numelui tabelei, numelui atributului i valoarea cheii primare. b) Cheile externe stau la baza mecanismului de formare a legturilor dintre dou tabele iar restriciile de integritate referenial asigur c numai legturile valide exist. O restricie de integritate referenial este o restricie care specific c fiecare cheie extern nenul dintr-o relaie trebuie s aib un corespondent (o pereche) cu valoarea unei chei primare din relaia cu care este legat. c) Un domeniu este un set de valori din care una sau mai multe coloane iau valorile lor actuale. Restriciile de integritate ale domeniului sunt reguli specifice pentru un atribut. Prin alegerea unui tip de dat pentru un atribut se impune o restricie asupra unui set de valori acceptate pentru acel atribut. Se pot crea reguli specifice de validare pentru un atribut prin delimitarea unui nou domeniu inclus n primul. Pentru a defini un domeniu unui atribut mai precis se pot exclude din ce n ce mai multe valori neacceptate pentru acel atribut. Spre exemplu n tabela RI se poate defini un domeniu pentru atributul denumirea tarii astfel nct acesta s conin cel mult 25 de caractere. I: Tipuri de restrictii: 1. a. Restrictii asupra cheii primare (cheia primara nu poate fi nula) b. Restrictii de integritate a entitatii 2. a. Restrictii asupra cheilor externe (Fiecare cheie externa nenula dintr-o relatie trebuie sa aiba un corespondent (o pereche) cu valoarea unei chei primare din relatia cu care este legata) b. Restrictie de integritate referentiala 20

3. a. Restrictii asupra domeniului de valori ale atributelor (Reguli de validare pentru un atribut

1.7. Dependene i determinri n mulimea atributelor (cmpurilor)


Relaiile (tabelele) sunt conectate prin legturi. Atributele sunt de asemenea conectate cu alte atribute. Fie tabela AR_CULTURI descris prin: AR_CULTURI (Cod_tara, Populatia, PU-Export, Cantitate) Nume_cultura, Cod_judet, Nume_judet,

Tabela AR_CULTURI combin diverse atribute din tabelele RI, CULTURI i POPULAIE. De exemplu atributele Cod_tara, Cod_judet, Populatia sunt luate din tabela TARI, atributele Nume_cultura i Export sunt luate din tabela CULTURI iar atributele Cod_tara, Nume_cultura i Cantitate se regsesc n tabela PRODUCIE. De remarcat c n tabela TARA_CULTURI apare un nou atribut Nume_judet iar cheia primar a acestei tabele este o combinaie a atributelor Cod_tara+Nume_cultur. Se observ valoarea nul atribuit atributului Cantitate pentru ara Andora (Cod_tara=AD). Dac cutam n cele trei tabele putem vedea c nu avem nici o nregistrare n tabela PRODUCII pentru ara Andora. Totui n tabela CULTURI_RI se cere s existe o nregistrare cu numele culturii deoarece ea face parte din cheia compozit a relaiei. Dac dorim ca statul Andora s fie n tabela CUTURI_RI trebuie s atribuim o cultur fictiv pentru cmpul Nume_culturi pentru aceasta ar (n acest caz cultura porumb). n tabela TARA_CULTURI fiecare atribut este legat de alte atribute. Spre exemplu valoarea cmpului Cod_ar determin valoarea cmpului Populaie_ar i o valoare a cmpului Populaie_ar depinde de valoarea cmpului Cod_ar. n limbajul utilizat n literatura de specialiate se spune Cod_ar determin funcional Populaie_ar i Populaie_ar este funcional dependent de Cod_ar. n acest caz Cod_ar este numit un determinat. Un determinat este un atribut, sau o colecie de atribute, a crui valori determin valorile altor atribute. Se mai spune c atributul A este funcional dependent de atributul B dac atributul B este un determinant pentru atributul A. Aceste tipuri de relaii de dependen i relaii de determinani se pot reprezenta grafic printr-o diagram cu buline. Diagramele cu buline se mai 21

numesc diagramele modelului de date sau diagramele de dependen funcional. n figura 10 se prezint diagrama cu buline pentru tabela TARA_CULTURI. Populaie Cod_tara Cod_judet 3 Cantitate 2 Nume jude

1 Nume cultura

PU-export

Fig. 7 - O diagram cu buline pentru relaia ARA_CULTURI n aceast diagram avem: - Cmpul Cod_tara este un determinant pentru cmpurile Populaia_rii, moneda, paritate; - Cmpul Nume_cultur este un determinant pentru Export; - Cmpul Cod_ar este un determinat pentru cmpul Paritate. Numai cmpul Cantitate este funcional dependent de ntreaga cheie primar a relaiei care este Cod_ar+Nume_cultur. Cmpurile Populaie_ar, Moneda, Paritate au o dependen parial deoarece ele sunt funcional dependente de cmpul Cod_ar care este numai o parte din cheia primar. O dependen parial este o dependen funcional fa de o parte a cheii primare n loc de ntreaga cheie primar. Exist oare i o alt dependen parial n tabela CULTURI_STATE? Da. Cmpul Export este dependent parial de Nume_cultur. Deoarece Cod_ar este un determinat att pentru cmpul Moneda ct i pentru cmpul Paritate iar cmpul Moneda este la rndul sau un determinant pentru cmpul Paritate, cmpurile Moneda i Paritate au o dependen tranzitiv. 22

O dependen tranzitiv este o dependen funcional ntre dou atribute non-cheie care sunt ambele dependente de al treilea atribut. Cum tim ce dependene funcionale exist ntr-o colecie de atribute i cum recunoatem dependenele pariale i tranzitive? Rspunsul depinde de cererile pe care le formulm pentru baza de date a aplicaiei informatice. Pentru fiecare atribut i relaie trebuie s definim precis att semnificaia ct i legturile existente n cadrul aplicaiei. Studiul dedicat nelegerii semnificaiei datelor dintr-o baz de date i a legturilor stabilite ntre ele, poart numele Modelarea semantic a obiectelor. Datele dintr-o aplicatie informatica cu baze de date intra intr-un proces de modelare in care se parcurg etapele: - Modelul conceptual al datelor; - Modelul logic al datelor - Modelul fizic al datelor Tema nr. 1: In baza de date UZINA se memoreaza atributele: Cod_Mat, Den_Mat, UM -Mat, Nr_Contract, Cod_Cl, Nume_Client, Localitate-Cl, Cont_Cl, Nr-Contract, Data-Contract, Cantitate-Contract, Cant-Livrata, PU-Contract, Nr-Livrare , Data-Livrare. Se cere: 1. Creati si scrieti relatiile bazei de date utilizand metoda prescurtata; 2. Trasati diagrama entitate-asociere; Tema 2: Analizati sistemul obiect dintr-o universitate si stabiliti modelul datelor acestui sistem informatic. Observati dependentele partiale si dependentele tranzitive din DB: 1. Dependenta; 2. Dependenta partiala 3. Dependenta tranzitiva

1.8 Anomalii intalnite in proiectarea Tabelelor


Problemele de inconsistenta a BD se numesc anomalii: Anomaliile sunt date de: - datele redundante - dependentele partiale - dependentele tranzitive EXEMPLE DE ANOMALII IN B.D. Fie Tabela: 23

CLIENTI (CodCl, NumeCl, NumeCopil, CodFr,NumeFr, CodPet, NumePet, Animal) Tipuri de anomalii: 1. Anomalii de inserare: Nu se pot adauga inregistrari in tabela deoarece nu stim Valoarea intregii chei primare Ex: Cheie primara: CodCl,NumeCopil, NumePet Nu putem insera o noua inreg. daca nu cunoastem valoarea intregii chei primare 2. Anomalii de stergere: Se sterg date dintr-o Tabela si neintentionat se pierd date din aceea tabela. Ex: Daca sterg CodCl= 812 deoarece Ionescu nu mai este Client se sterge CodFirma si riscam sa nu mai stim NumeFirma. 3. Anomalii de actualizare: Nu putem schimba valoarea unui atribut din cheia copozita (daca schimbam valoarea unui atribut atunci BD devine inconsistenta) Ex: Daca schimbam CodCl=812 cu CodCl= 445 numai in unele inregistrari atunci riscam ca sa avem un Client cu doua coduri

1.9 NORMALIZAREA - Ameliorarea succesiva a schemei conceptuale a BD


Procesul de identificare si eliminare a anomaliilor se numeste normalizarea BD. Pentru proiectarea corecta a unei BD trebuie: - sa intelegem dependentele functionale ale tuturor atributelor - sa recunoastem anomaliile cauzate de datele redundante, dependentele partiale si dependentele tranzitive; - sa cunoastem modul in care se elimina aceste anomalii(normalizarea BD). FORMA NORMALA 1 (FN1) Fie tabela: CLIENTI(CodCl, NumeCl, NumeCopil, CodFirma,NumeFirma, CodPet, NumePet, Animal) Deoarece fiecare inregistrare (intrare) trebuie trebuie sa contina o singura valoare a cheii primare (CodCl), aceasta structura nu indeplineste aceasta conditie. Aceasta relatie se numeste nenormalizata. Observam ca fiecare familie poate avea mai multi copii si mai multe animale de casa. Rezulta ca aceasta structura contine doua grupuri repetitive (NumeCopil respectiv NumePet) care induc date redundante in tabel (anomalii). 24

O tabela (relatie/entitate) este in FN1 daca nu contine grupuri repetitive. Aducerea unei relatii in FN1 Pentru a aduce o relatie in FN1 trebuie sa inlaturam grupurile repetitive din relatie. Acest lucru se face prin expandarea cheii primare astfel incat ea sa includa grupul repetitiv. Observam ca grupul repetitiv NumeCopli este independent de grupul NumeAnimal. Executarea conversiei pentru fiecare grup repetitiv conduce la obtinerea a doua tabele: COPII(CodCl, NumeCopil, NumeCl, CodFirma, NumeFirma) CLIENTI (CodCl, CodPet, CodFirma, NumeFirma, NumePet, Animal) Cele doua relatii nu mai contin grupuri repetitive, insa ambele relatii au anomalii de stergere si de actualizare FORMA NORMALA 2 (FN2) O relatie este in FN2 daca este in FN1 si nu contine nici o dependenta partiala. Eliminarea dependentelor partiale se face in doi pasi: - se identifica dependentele functionale pentru fiecare atribut - se creaza noi tabele si se plaseaza fiecare atribut intr-o tabela astfel ca fiecare atribut sa fie functional dependent de intreaga cheie primara. Obs: O tabela in FN1 cu un singur atribut in cheia primara este automat in FN2. Aducerea unei tabele in FN2 Pas 1: Se observa ca cele doua relatii din FN1 contine cheia compozita CodCl-NumeCopil respectiv CodCl, CodAnimal Pas 2: Construirea de noi relatii astfel ca fiecare atribut sa fie functional dependent de intreaga cheie primara. Rezulta tabelele: CLIENTI (CodCl, NumeCl, CodFirma, NumeFirma) COPII(CodCl,NumeCopil) Cheie externa: CodCl pentru legatura cu tabela CLINETI ANIMALE (CodCl, CodPat, NumePat, Animal) Cheie externa: CodCl pentru legatura cu tabela CLIENTI Cele trei tabele nu mai contin acum dependente partiale, dar contin dependente tranzitive:CodClCodFirma.NumeFirma FORMA NORMALA 3 (FN3) 25

O relatie este in FN3 daca este in FN2 daca orice camp determinant este un camp candidat la cheie primara. Pentru a aduce o relatie in FN3 trebuie sa inlaturam atributele care depind de determinantii care nu candideaza la cheie si sa plasam aceste atribute intr-o noua relatie care are atributul determinant ca si cheie primara. In tabela CLIENTI atributele CodClCodFirmaNumeFirmasunt tranzitivesi atunci transformam tabela CLIENTI in doua tabele care sa nu mai contina atribute tranzitive: Celelalte tabele nu contin atribute transitive Rezulta: CLIENTI (CodCl, NumeCl, CodFirma) FIRME( CodFirma, NumeFirma) Cheie externa: CodFirma pentru legatura cu CLIENTI COPII (CodCl, NumeCopil) Cheie externa: CodCl pentru legatura cu tabela CLIENTI ANIMALE(CodCl,CodPet, NumepPet, Animal) Cheie externa : CodCl pentru legatura cu CLIENTI Cele 4 tabele nu mai au anomalii

1.10 Etape in realizarea aplicatiilor informatice cu baze de date


1. Analiza cerintelor aplicatiei 2. Proiectarea aplicatiei si normalizarea bazei de date 3. Realizarea aplicatiei 4. Implementarea si exploatarea aplicatiei n procesul de elaborare a unei aplicaii informatice cu baze de date se parcurg urmtoarele etape: a) Analiza cerinelor aplicaiei Orice aplicaie informatic se proiecteaz pentru a rspunde cerinelor unui beneficiar. Procesul de analiz a cerinelor ncepe cu nelegerea corect i complet a solicitrilor beneficiarului i continu cu analiza detaliat a funciunilor sistemului analizat i a modului de structurare a datelor. n urma acestui proces rezult punctele critice (problemele i deficienele) ale sistemului existent, generate de regul de redundana datelor, duplicarea proceselor de prelucrare i de timpul mare de rspuns datorat prelucrrilor manuale. Aceste puncte critice ale sistemului existent trebuie s fie nlturate prin realizarea de aplicaii informatice cu baze de date. n urma acestei etape rezult 26

specificarea n detaliu a cerinelor funcionale i a restriciilor de realizare a aplicaiei informatice cu baza de date. b) Proiectarea aplicaiei n aceast etap se specific componentele aplicaiei: ieiri, intrri, baza de date, fluxul de informaii, modulele aplicaiei, proceduri de ncrcare, actualizare i exploatare a bazei de date. n cadrul acestei etape accentul cade pe proiectarea structurii bazei de date n scopul asigurrii eficienei aplicaiei, eficien raportat la criteriul cost-performane. c) Elaborarea aplicaiei Modulele aplicaiei informatice cu baza de date, definit n etapa de proiectare, urmeaz s fie testate i integrate n ansamblul aplicaiei. Dezvoltarea acestor module se face de regul folosind fie limbajul de programare oferit de SGBD-ul ales fie utiliznd generatoarele de aplicaii puse la dispoziie de acest SGBD. d) Implementarea i exploatarea aplicaiei informatice n cadrul etapei de implementare a aplicaiei informatice cu baze de date se disting urmtoarele faze: - punerea n funciune a aplicaiei, faz n care trebuie s se asigure resursele hardware i software necesare rulrii aplicaiei; - ncrcarea bazei de date i testarea aplicaiei n ansamblul ei; - asigurarea condiiilor de exploatare curent a aplicaiei la parametrii prevzui; - adaptarea structurii bazei de date i a aplicaiei la dinamica cerinelor utilizatorilor, la schimbrile tehnice i organizatorice care pot interveni.

27

MODULUL 2: PREZENTAREA SGBD-ULUI FOXPRO


FOXPRO este un Sistem de Gestiune a Bazelor de Date (SGBD) de tip relaional. El este un instrument performant pentru toate aplicaiile de gestiune cu baze de date. Pentru a marca cateva date semnificative din evolutia sistemului FOXPRO amintim ca la sfarsitul anilor 70 firma Asthon-Tate a realizat produsl dBASE II care a constituit punctul de plecare al SGBD-urilor din gama xBASE. In anii 80 se dezvolta produsul FOX , produs pseudorelational dar deosebit de rapid, dezvoltat de catre firma Fox Software. In anul 1991 apare FoxPro 2.0 care devine lider autoritar al produselor de acest gen. In anul 1992, firma Fox Software este preluata de catre Microsoft, care a dezvoltat versiunile 2.5 si 2.6 ale produsului FoxPro sub MS-DOS, Windows, Mac si UNIX, utilizate pe microcalculatoare ca statii de lucru individuale sau in retea locala LAN. In anul 1995, Microsoft lanseaza versiunea Visual Foxpro 3, care a fost urmata in 1997 de versiunea 5 si in anul 1998 apare versiunea Visual FoxPro 6 ca parte componenta a pachetului Visual Studio 6.0, alaturi de alte produse de tip Visual ca: Basic, C++, Java++, InterDev. Toate aceste produse ofera compilari rapide, depanare eficienta si interactiva, HTML ca interfata pentru aplicatii tip multimedia si compatibilitate cu toate produsele din pachetele VISUAL STUDIO si OFFICE precum si dezvoltarea aplicatiilor in retea structurata pe trei nivele (date, procese, interfata utilizator). Evolutia Sistemelor de Gestiune a Bazelor de date este prezentata schematic in fig. nr. 1.

2.1.

Componentele funcionale ale sistemului

Principalele componente funcionale ale sistemului Foxpro sunt urmtoarele: Nucleul Foxpro, care conine cele dou limbaje ; - de descriere a datelor (DDL); - de manipulare a datelor (DML). Pentru manipularea datelor FOXPRO pune la dispoziia utilizatorilor: - Comenzi pentru crearea, actualizarea, interogarea, listarea i ntreinerea bazelor de date ; - Meniuri pentru gestionarea bazelor de date ; 28

Limbajul de programare FoxPro, un limbaj procedural care permite crearea, actualizarea, interogarea, listarea i exploatarea bazelor de date; Limbajul SQL, un limbaj neprocedural, care este standardul pentru clasa limbajelor relaionale i care permite , de asemenea, crearea, actualizarea i interogarea bazelor de date. Generatoarele sistemului, care permit, printr-un dialog interactiv cu utilizatorul i un efort minim de programare, realizarea unor module sau aplicaii complexe, cum sunt: Data Collection and Database creation (60s and earlier)

Database Management System (70s and early 80s)


Hierarchical DBMS Relational Database Systems Query Language: SQL, etc

Advanced Database Systems (middle 80s - present)

Web-based Database Systems (90s present) Web - Mining

Data Warehousing and Data Mining (late 80s - present)

New generation of integrated information Systems (2000) Figura nr 1 The evolution. Database Technologies

Generatorul de Rapoarte (REPORT WRITER) ; Generatorul de Ecrane ( SCREEN BUILDER); 29

Generatorul de meniuri (MENU BUILDER); Generatorul de Aplicaii (Foxpro APPLICATION) Generatorul de etichete (LABEL DESIGNER) Generatorul de Proiecte (PROJECT MANAGER) Generatorul de Interogri (RQBE/SQL)

FOXPRO dispune de un set de Instrumente pentru instruirea i asistarea utilizatorului (programul Tutorial al lui Foxpro, sistemul Help, facilitile de lucru cu programele tip Wizard, etc.); Utilitarele sistemului Foxpro, care sunt specializate pentru realizarea unor anumite funcii, cum sunt : Utilitarul pentru gestionarea fiierelor; Utilitarul pentru formatarea programelor surs; Utilitarul pentru generarea documentaiei. FOXPRO are urmatoarele tipuri de Kituri: Distribution Kit , care permite realizarea aplicaiilor Foxpro i livrarea lor n format executabil (fiiere de tip .EXE), n variantele Runtime i Standalone. Connectivity Kit, care permite realizarea de aplicaii Client-Server prin conectarea la un server Oracle, SQL. Library Construction Kit, care permite utilizarea sau crearea bibliotecilor de funii C. Trace /Debug, care permite programatorului s urmreasc i s depaneze relativ uor codul programului surs, afind ntr-o fereastr Debug valorile expresiilor i variabilelor de lucru utilizate, pe parcursul execuiei programului.

2.2.

Lansarea i modul de lucru sub SGBD Foxpro

Lansarea n execuie a SGBD-ului Foxpro se poate face ntr-unul din urmtoarele moduri: sub Windows, se poziioneaz indicatorul mouse pe iconul Foxpro i dublu click. sub Windows 95...98 , 2000 se mai poate lansa n modul de lucru obinuit cu orice program, adic: Start, de aici se selecteaz Programs i apoi din lista afiat , click mouse pe numele programului dorit Foxpro.

30

Dac totul decurge normal, Foxpro este ncrcat n memorie i se prezint utilizatorului afind un ecran de forma:

Fig. 2. Ecranul principal FoxPro Moduri de lucru in FoxPRO Dupa lansarea produsului FoxPro utilizatorul poate lucra in urmatoarele moduri: prin comenzi, prin meniuri ale sistemului, prin limbajul de programare FOXPRO, prin generatoare automate, prin limbajul SQL, sau o combinatie a tuturor acestor moduri de lucru. Ecranul principal FoxPro contine o fereastra tip Microsoft (vezi fig. 2) cu urmatoarele elemente: bara de titlu (cu numele produsului ) si butoanele de minimizare,maximizarea ferestrei , iesirea de sub FoxPro; bara meniului sistem care contine un meniu orizontal cu optiunile de lucru : File, Edit, View, Format, Tools, program, Windows, Help. La selectarea unei optiuni apare un submeniu vertical, de unde se se selecteaza optiunea dorita (in modul de lucru prin meniu sistem); bara de unelte care contine butoane dispuse orizontal , care sunt sau nu active functie de starea curenta de lucru. Prin aceste butoane se poate apela (pe o alta cale, prin modul de lucru prin meniu sistem) o anumita optiune din sistem; fereastra de comanda care contine cursorul si care permite tastarea unei comenzi sau apelul unui program (in modul de lucru prin comenzi)

31

bara de stare situata in partea de jos a ferestrei principale, unde se afiseaza starea executiei curente. Bara lipseste daca a fost executata comanda SET STATUS OFF; - aria de iesire (formata din restul spatiului neocupata) este destinata afisarii rezultatelor obtinute in urma executiei unei comenzi sau a unui program. Corespunztor imaginii de pe ecran, Foxpro permite utilizatorului mai multe modaliti de lucru, i anume: Modul de lucru prin Comenzi se desfasoara in fereastra de comanda din ecranul principal. Aici se afla cursorul si utilizatorul poate lucra in stil intrpreter sau in stil compilator. Stilul interpreter, inseamna ca se tasteaza o comanda FoxPro si apoi se apasa tasta Enter. Sistemul preia comanda , o interpreteaza si daca nu sunt erori o lanseaza in executie. Rezultatul este afisat in aria de iesire din ecranul principal. Daca se detecteaza o eroare la interpretarea comenzii, atunci se afiseaza un mesaj explicativ si comanda trebuie corectata corespunzator. Stilul compilator permite dezvoltarea programelor scrise in codul sursa al limbajului FoxPro. Se apeleaza editorul de texte (MODI COMM) care ne plaseaza intr-o fereastra specifica, unde se tasteaza codul sursa al aplicatioei, iar la iesire (prin apasarea tastei CTRL/W) rezulat un fisier cu extensia .PRG. In continuare se apleaza programul sursa ( DO nume) care este compilat, linkeditat si rulat. Pentru a obtine un fisier executabil (de tip .EXE) este nevoie de componenta RUN TIME . Progamul executabil poate fi rulat pe orice tip de calculator, sub sistemul de operare Windows, fara a mai fi nevoie de sistemul FoxPro. Acest mod de lucru este dedicat ndeosebi specialitilor, programatorilor de aplicaii Foxpro, care cunosc facilitile i performanele limbajului de programare Foxpro. Modul de lucru meniu sistem permite utilizatorului sa apeleze toate instrumentele si intrfetele sistemului FoxPro. Acest mod de lucru se recomanda utilizatorilor care prefera dezvoltarea aplicatiilor cu ajutorul generatoarelor. Efortul depus pe aceasta cale este redus si nu se programeaza in cod sursa. Optiunile de lucru sunt dispuse intr-un meniu principal orizontal si fiecare genereaza un submeniu vertical, rezultand astfel un sistem de meniuri. Observaii: 1. Trecerea de la modul de lucru comanda la cel tip meniu este echivalent cu trecerea controlului de la fereastra de comenzi la meniul principal i invers. Acest lucru se realizeaz uor prin intermediul tastei F10 sau efectund un click mouse pe meniu sau n fereastra de comenzi. 32

Saltul de pe bara de meniu n fereastra de comenzi se poate face astfel: apsnd tasta F10 sau click mouse n fereastra de comenzi sau apsnd tasta Esc sau Alt Saltul din ferestra de comenzi pe bara meniului principal se poate face astfel: apsnd tasta F10 sau click mouse pe opiunea dorit din meniu (sau pe oricare dintre ele) sau apsnd tasta Alt sau apsnd tasta Alt i litera fierbinte din opiunea dorit 2. Ferestrele Foxpro pot fi deschise, nchise, ascunse, mrite sau micorate (redimensionate), mutate, activate sau inhibate, dotate cu posibilitatea de defilare a imaginii n interiorul lor, colorate sau desenate dup imaginaia i personalitatea programatorilor de aplicaii sub Foxpro. Pentru toate aceste operaii, Foxpro pune la dispoziia utilizatorilor o serie de comenzi de lucru cu ferestre. -

2.3. Tipuri de fiiere n FOXPRO


FOXPRO lucreaz cu un mare numr de tipuri de fiiere dintre care trebuie s reinem pe cele mai importante: Baze de date (DBF); Fiier index multiplu (.MDX); Fiier index simplu (.NDX); Fiier catalog (.CAT); Fiier cu viziuni (.VUE); Fiier ecran (.SCR); Program sau fiier de comenzi (.PRG); Fiier de tip memo (.DBT); Fiier format de raport (.FRM); Fiier format de etichet (.LBL); Fiier de extracie (.QBE); Fiier de salvare (.BAK). Pentru baza de date propriu zis, cu extensia .DBF se va utiliza noiunea de baz de date , celelalte vor fi denumite fiiere.

33

2.4. Consideraii generale privind comenzile Foxpro


O comand Foxpro este o aciune ce se cere a fi executat de SGBD-ul Foxpro, prin intermediul limbajului pus de acesta la dispoziia utilizatorului. Sintaxa general a unei comenzi Foxpro este: <comand> [<list de expresii>] [<domeniu>] [FOR <condiie>] [WHILE <condiie>] unde: <comand> reprezint un nume de comand Foxpro; parantezele drepte indic aspectul de facultativ al elementului nominalizat.n interiorul lor; parantezele unghiulare arat c trebuie s se precizeze valoarea specific elementului respectiv; bara oblic indic posibilitatea unei alegeri; <lista> reprezint un grup de elemente separate de regul prin virgul; <domeniu> definete nregistrrile asupra crora se aplic comanda. Asupra comenzilor Foxpro se fac urmtoarele precizri:

Linia de comand conine o singur comand Foxpro i se ncheie prin acionarea tastei Enter; - Lungimea unei linii de comand lansat n fereastra de comenzi sau n program poate fi de maximum 254 caractere; - Linia de comand poate fi scris cu majuscule sau cu litere mici sau cu orice combinaie a acestora; - Cuvintele cheie ale comenzilor Foxpro pot fi abreviate (prescurtate) la cel puin primele 4 caractere. Dac se scriu mai multe caractere, acestea trebuie s fie corecte. - Cuvintele sunt separate prin unul sau mai multe spaii. - Foxpro dispune de o memorie tampon (numit i istoricul comenzilor), unde se pstreaz ultimele comenzi transmise. Vizualizarea comenzilor memorate n istoric se realizeaz prin comenzile DISPLAY HISTORY i LIST HISTORY. Prin utilizarea tastelor direcionale (cu sgei) se pot apela comenzile anterioare. Astfel, fr a mai tasta din nou o linie de comand anterioar, o cutm n fereastra de comenzi i ne poziionm pe ea cu ajutorul tastelor cu sgei, apoi apsm Enter. - Fiecare comand Foxpro prelucreaz n mod implicit un anumit tip de fisier (Ex. Use , Copy - fiiere tip .DBF, Report form ... fiier tip .FRM, Modify command fiier .PRG, etc). De aceea, n mod normal, utilizatorul va 34

specifica, atunci cnd se cere, doar numele fiierului, tipul acestuia fiind automat gestionat de sistem. Dac ns utilizatorul va specifica nume.tip pentru fiierul cerut, atunci acesta va fi luat n considerare i va trebui precizat de fiecare dat cnd se face referire la fiierul respectiv. Domeniul de aciune al comenzilor Foxpro

Comenzile Foxpro de prelucrare a datelor au cte un domeniu de aciune implicit, care poate fi: fie nregistrarea curent, fie toate nregistrrile tabelei active. Acest domeniu poate fi modificat, astfel nct comanda s acioneze asupra domeniului dorit de utilizator, prin 2 metode: a) Prin specificarea expres a domeniului dorit, cu ajutorul urmtoarelor cuvinte cheie: Cuvinte cheie ALL NEXT n RECORD n REST Semnificaie Comanda acioneaz asupra tuturor nregistrrilor din tabela activ Comanda acioneaz asupra urmtoarelor n nregistrri, ncepnd cu cea curent, din tabela activ Comanda acioneaz asupra nregistrrii cu numrul n (specificat) din tabela activ Comanda acioneaz asupra tuturor nregistrrilor rmase, de la cea curent i pn la sfrit, din tabela activ

Se impun urmtoarele precizri: - Pentru a avea acces la datele dintr-o tabel, ea trebuie s fie mai nti deschis. O tabele deschis se numete activ. - Se numete nregistrare curent nregistrarea supus prelucrrii la un moment dat i pe care se afl pointerul tabelei . b) Prin introducerea, n cadrul comenzii Foxpro, a unei expresii condiionale, cu ajutorul cuvintelor cheie FOR sau WHILE. Comanda va putea avea astfel formatul: - <comand> FOR <condiie> n acest caz, comanda va aciona asupra acelor nregistrri din tabela activ (sau numai din domeniul specificat) pentru care condiia specificat este adevrat (are valoarea logic TRUE-adevrat). 35

- <comand> WHILE <condiie> n acest caz, comanda va aciona asupra nregistrrilor , atta timp ct condiia specificat rmne adevrat. Se observ c o astfel de cerin poate fi util doar dac nregistrrile tabelei active sunt grupate, ordonate dup criteriul specificat n condiie.

2.5. Elemente ale limbajului de descriere i interogare a bazei de date


Limbajul Foxpro utilizeaz urmtoarele elemente: constante, variabile i operatori funcii comenzi

2.5.1. Constante
Constantele sunt entiti cu valoare invariabil, autodefinit. Foxpro utilizeaz urmtoarele tipuri de constante: - constante numerice ( ex. numere 7 5.4 -452.85); - constante de tip ir de caractere, cuprise ntre ghilimele, apostroafe sau paranteze drepte, ca delimitatori (exemplu: 'PROGRAM DE GESTIUNE A STOCURILOR') - constante logice cu valorile logice: .T. (True), .Y. (Yes) - pentru Adevrat .F. (False), .N. (No) - pentru Fals. - constante de tip dat calendaristic, cuprinse ntre paranteze de tip acolad ca delimitatori ( ex 10/30/99)

2.5.2. Variabile
Sub SGBD-ul Foxpro, variabilele de memorie sunt de 2 tipuri: - variabile de memorie create de utilizator - variabile de memorie sistem Variabilele create de utilizator pot fi: cmpuri de date din nregistrrile tabelelor active (create odat cu tabelele i descrise n structura acestora) variabile de memorie (independente) Variabilele de memorie sunt entiti a cror valoare poate fi modificat, servind pentru memorarea temporar a datelor. Spre deosebire de 36

cmpurile de date, care sunt descrise de utilizator la crearea tabelei, variabilele de memorie se aloc i se elibereaz n mod dinamic, funcie de natura i lungimea datelor memorate n ele. Asemenea cmpurilor de date, variabilele se caracterizeaz prin cele 3 elemente de descriere: - nume - tip - lungime Numele variabilei servete pentru identificarea sa i respect regula numelui de cmp de date, adic este un cuvnt alfanumeric, format din cel mult 10 caractere i avnd primul caracter o liter. De regul el sugereaz coninutul informaional al variabilei. Tipul variabilei definete tipul datei memorate temporar. Ca i constantele i cmpurile de date, ele pot fi de tip: - numeric memoreaz o dat numeric; - ir de caractere memoreaz orice combinaie de caractere; - logic memoreaz o valoare logic de Adevrat sau Fals; - dat calendaristic memoreaz o dat calendaristic, sub formatul standard american de LL/ZZ/AA; - masiv memoreaz date structurate sub forma unui tablou (definite sub forma unui vector sau matrice). Lungimea variabilei este dat de mrimea locaiei de memorie alocat, exprimat n numr de caractere. Spre deosebire de cmpurile de date din tabele, a cror lungime este definit de proiectant, lungimea variabilelor de memorie de tip numeric sau caracter este alocat automat, funcie de lungimea datei nscrise n ea. O variabil de tip logic are automat lungimea =1, iar cea de tip dat calendaristic lungimea =8. Aceste variabile pot fi create cu comenzile ACCEPT, INPUT, WAIT, STORE, COUNT, SUM, AVERAGE, CALCULATE, DECLARE, PRIVATE, PUBLIC etc.i pot fi salvate n fiiere de tip .MEM cu comanda SAVE . Readucerea lor n memorie se face cu comanda RESTORE. Pentru crearea structurilor de date de tip masiv pot fi folosite comenzile DECLARE, DIMENSION, SCATTER. tergerea sau eliberarea variabilelor de memorie se poate face atunci cnd datele respective nu mai sunt necesare, cu comenzile CLEAR MEMORY , RELEASE.

2.5.3. Operatori
Principalele tipuri de operaii efectuate sub Foxpro sunt: 37

- matematice - de comparare - logice - pe iruri de caractere fiecrui tip corespunzndu-i operatori specifici. Astfel, operatorii matematici sunt: + adunare scdere * nmulire / mprire ** ridicare la putere () gruparea operaiilor, dac este cazul. Ordinea de prioritate a acestor operatori n expresii este: ridicarea la putere, nmulirea i mprirea, adunarea i scderea. Operatorii de comparare sunt utilizai pentru compararea expresiilor de tip logic, caracter, numeric sau dat calendaristic. Cele dou expresii trebuie s fie de acelai tip, iar rezultatul va fi de tip logic, adevrat (.T) sau fals (.F). Operatorii de comparare sunt: < mai mic > mai mare = egal <> sau # diferit de <= mai mic sau egal >= mai mare sau egal $ operator de subir, cu urmtoarea definire: Dac A i B sunt de tip caracter, A$B este adevrat, dac A este identic cu B sau A este inclus n B. Operatorii logici sunt: .AND. i logic .OR. Sau logic .NOT. Negare () pentru gruparea operaiilor n cadrul expresiilor Ordinea de prioritate la evaluarea expresiilor este: .NOT., .AND., .OR., iar rezultatul este de tip logic. Operatori pentru iruri de caractere se utilizeaz pentru concatenarea mai multor iruri de caractere ntr- unul singur, astfel: + pentru concatenare cu meninerea spaiilor de la sfritul fiecrui ir 38

pentru concatenare cu eliminarea spaiilor de la sfritul primului ir,dac exist i plasarea lor la sfritul irului rezultat.

2.5.4. Expresii
O expresie se constituie din combinaii de elemente din urmtoarea list: nume de cmpuri din structura nregistrrilor de date din tabela activ, variabile de memorie, elemente de tablou, constante, funcii, operatori, variabile de sistem. O expresie poate fi simpl sau complex (compus). Expresia complex este format din mai multe expresii simple, legate ntre ele prin operatorii logici AND, OR sau NOT.

2.5.5. Funcii
Funciile sunt prelucrri predefinite, care pot fi utilizate n expresii, asemntor operatorilor. O funcie returneaz ntotdeauna o valoare, care reprezint rezultatul ei. Dup natura acestui rezultat, funciile pot fi de tip: - numeric - ir de caractere - logic - dat calendaristic. Funciile cele mai utilizate sub Foxpro se pot grupa dup cum urmeaz: 2.5.5.1. Funcii destinate lucrului cu baze de date i fiiere asociate: ALLIAS() sau ALLIAS(expN) Are ca rezultat alias-ul bazei de date deschise n zona de lucru specificat sau, dac expN lipsete , alias-ul zonei de lucru curente. DBF() sau DBF( <alias> ) Returneaz numele tabelei de date deschis n zona de lucru specificat. Dac nu exist nici o tabel de date deschis, funcia ntoarce fiierul nul. EOF() sau EOF ( <alias> ) Returneaz valoarea logic True dac este ntlnit sfritul de fiier i False n caz contrar. Ea este poziionat pe valoarea logic de True dac n urma unei comenzi de cutare a unei anumite nregistrri (Locate, Find, Continue sau Seek) nregistrarea cutat nu a fost gsit i False n caz contrar. De aceea, aceast funcie se folosete n programe pentru a asigura utilizatorul dac 39

nregistrarea cutat a fost gsit sau nu i de asemenea pentru a controla ciclul de parcurgere a unei ntregi tabele de date. FOUND() sau FOUND( <alias> ) Returneaz valoarea logic True dac ultima comand CONTINUE, FIND, LOCATE sau SEEK s-a ncheiat cu succes, adic nregistrarea cutat a fost gsit , iar n caz contrar ntoarce valoarea False. ORDER() sau ORDER( <alias> ) Returneaz numele fiierului index activ din zona de lucru curent. Pentru a se obine numele fiierului index master dintr-o zon de lucru se folosete opiunea <alias>. RECNO() sau RECNO( <alias> ) Returneaz numrul nregistrrii curente din tabela activ. Pentru a obine numrul nregistrrii curente din tabela deschis n alt zon de lucru se utilizeaz opiunea <alias>. SEEK() sau SEEK( exp,alias ) Returneaz valoarea logic True dac expresia cutat este gsit n indexul activ. Dac expresia cutat este gsit, pointerul nregistrrii este poziionat pe nregistrarea gsit, iar n caz contrar funcia ntoarce valoarea logic False i pointerul este plasat la sfritul fiierului. Opiunea <alias> permite cutarea expresiei ntr-o tabel deschis n zona de lucru specificat. DELETED() sau DELETED( <alias> ) Returneaz valoarea logic True dac nregistrarea curent din zona selectat sau din cea precizat cu <alias> este marcat pentru tergere i False n caz contrar. 2.5.5.2. Funcii destinate prelucrrii datelor numerice: CHR() sau CHR( <expN> ) Returneaz caracterul al crui cod zecimal este echivalent cu expN. INT() sau INT(expN) Returneaz partea ntreag a exp N prin ignorarea prii zecimale (trunchiere). ROUND() sau ROUND(exp1, exp2) 40

Rotunjete numrul specificat sau rezultat din evaluarea expresiei exp1 la un numr de zecimale specificat n exp2. Dac exp2 este negativ, numrul rotunjit va fi un numr ntreg. STR() sau STR(expN1, expN2, expN3 ) Convertete o expresie numeric, specificat prin expN1 ntr-un ir de caractere. Valoarea lui expN2 specific lungimea irului rezultat, iar expN3 specific numrul poziiilor zecimale (dac este cazul). Aceast funcie se folosete ori de cte ori avem nevoie ca un cmp de date sau variabil de memorie de tip numeric s fie folosit n expresii de tip ir de caractere (cum ar fi la formarea unei chei multiple de indexare sau la concatenarea mai multor cmpuri pentru afiare, etc.) 2.5.5.3. Funcii destinate prelucrrii irurilor de caractere CTOD() sau CTOD(expC) Returneaz valoarea datei care corespunde argumentului de tip caracter, n formatul dat calendaristic MM/DD/YY (Luna/Zi/An). LOWER() sau LOWER(expC) Convertete toate literele mari din expC n litere mici corespunztoare (dac exist). Caracterele nealfabetice nu sunt afectate. UPPER() sau UPPER(expC) Convertete toate caracterele alfabetice mici din expC n majuscule (dac exist). Caracterele nealfabetice nu sunt afectate. VAL() sau VAL(expC) Convertete o expresie de tip caracter care conine cifre ntr-o valoare numeric corespunztoare. Practic, ea extrage primele caractere numerice din expC , pn la primul caracter nenumeric sau punct zecimal i le transform n valoare numeric corespunztoare. Dac primul caracter al expC nu este cifr, Val returneaz valoarea 0. SUBSTR( expC, Poz, Lungime) Extrage din irul specificat sau rezultat din evaluarea expC un subir, ncepnd cu poziia indicat prin Poz i de lungime egal cu cea specificat prin Lungime. LTRIM (expC) 41

Returneaz irul de caractere specificat sau rezultat din evaluarea expresiei date cu toate spaiile din stnga terse.( elimin spaiile din stnga irului). RTRIM (expC) Returneaz irul de caractere specificat sau rezultat din evaluarea expresiei date cu toate spaiile din dreapta terse.( elimin spaiile din dreapta irului). SPACE(expN) Returneaz un ir de attea spaii cte au fost specificate prin expN. 2.5.5.4. Funcii de tip dat calendaristic CDOW(<expD>) Returneaz numele zilei sptmnii pentru expresia dat. DATE() Returneaz data sistemului. DTOC(<expD>[,1]) Returneaz un ir coninnd data care corespunde argumentului, sub formatul standard american LL/ZZ/AA (dac nu au fost selectate alte opiuni prin comenzile Set Date i Set Century). Transform deci o dat calendaristic ntr-un ir de caractere corespunztor. Clauza opional 1 cere returnarea datei n formatul AAAA/LL/ZZ, pentru a putea ordona nregistrrile funcie de dat. DTOS(<expD>) Returneaz un ir coninnd data care corespunde argumentului, sub forma aaaa/ll/zz..Aceast funcie este util pentru indexarea tabelelor dup un cmp de tip dat calendaristic i este echivalent cu funcia DTOC cu argumentul opional 1. DMY (<expD>) Returneaz data calendaristic n formatul european zz/ll/aa. MDY (<expD>) Returneaz data calendaristic n formatul standard american ll/zz/aa. YEAR (<expD>) Returneaz anul din data specificat ca un numr de 4 cifre. 42

TIME() Returneaz ora curent din sistem n formatul hh:mm:ss. 2.5.5.5. Funcii financiare FV(<depunere>,<dobnd>,<perioad>) Calculeaz valoarea viitoare a unei investiii. PAYMENT(expN1,expN2,expN3) Calculeaz plata regulat cerut pentru amortizarea unui credit, unde expN1 este valoarea iniial a creditului, expN2 este dobnda iar expN3 este numrul perioadelor. PV(<expN1,expN2,expN3) Returneaz valoarea prezent a unei investiii sau suma care trebuie investit pentru a atinge o anumit valoare viitoare. ExpN1 este plata facut n fiecare perioad, expN2 este dobnda, iar expN3 este numrul de perioade. 2.5.5.6. Funcii cu caracter general & Macrosubstituia Funcia de macrosubstituie este utilizat pentru specificarea unei variabile de memorie n locul unei valori concrete ateptate . Se utilizeaz n comenzile FIND, USE, GO i n alte comenzi care cer precizat o valoare. Funcia servete pentru a da un grad mai mare de generalizare a problemei rezolvate (parametrizarea unor informaii). TRANSFORM(expr, expC) Formeaz iruri de caractere sau numere cu opiuni PICTURE fr folosirea comenzii @...SAY. Variabila sau cmpul care va fi formatat se declar prin expr, iar expresia care conine clauza PICTURE prin exprC. TYPE (<exp>) Returneaz unul din caracterele N,C,L,D corespunztor tipului rezultatului evalurii expresiei specificate. USER() Afiaz numele utilizatorului conectat la sistemul protejat. 2.5.5.7. Funcii utilizator SGBD Foxpro permite utilizatorului s-i defineasc funcii proprii. O funcie const dintr-o procedur care ncepe cu comanda FUNCTION i care returneaz o valoare. 43

MODULUL 3 COMENZI FOXPRO PENTRU CREAREA SI GESTIONAREA BAZEI DE DATE


3.1. Comenzi pentru crearea bazei de date
SGBDR-ul FoxPro permite crearea tabelelor unei baze de date relationale in care se stocheaza structura si datele acestor tabele. Se prezinta in continuare implementarea LDD in FoxPro. CREATE DATABASE [ <nume_ baza_ de_ date>] | ? unde: - nume_ baza_ de_ date specifica numele bazei de date care va fi creata. Fisierul bazei de date are extensia .DBC; - ? afiseaza o fereastra de dialog in care se specifica numele bazei de date care va fi creata.

3.1.1 Crearea tabelelor


Crearea unei tabele a bazei de date presupune definirea structurii sale i memorarea (salvarea) ei pe disc, urmat eventual i de introducerea unui numr de nregistrri de date. n Foxpro, structura tabelei adic descrierea cmpurilor de date ce compun nregistrrile este memorat chiar n tabel, ca prim nregistrare a acesteia. De aceea, ori de cte ori ne referim la o tabel a bazei de date, va trebui s avem n vedere cele dou elemente componente : Structura i inregistrrile de date. Crearea unei tabele n FoxPro se poate face : cu comanda CREATE sau prin intermediul meniului, opiunea NEW din submeniul FILE. prin intermediul comenzii CREATE TABLE din nucleul SQL Comanda CREATE are dou formate, i anume: a) CREATE [nume_tabel [.DBF]?] Pentru cmpul numeric admite cel mult 20 poziii (incluznd i caracterele pentru punct zecimal). Pentru cmpul de tip caracter, lungimea maxim poate fi de 254 caractere. 44

b) CREATE TABLE nume_tabel[.DBF] (nume_cmp1,tip(lungime, [,nume_cmp2, tip(lungime),...] [FROM ARRAY nume_masiv FROM nume_tabel] Comanda permite crearea structurii tabelei cu numele specificat direct prin program, avnd descrierea cmpurilor de date specificat chiar prin comand. Dac se precizeaz clauza FROM ARRAY , atunci descrierea cmpurilor se preia din masivul cu numele respectiv, iar dac se folosete clauza FROM nume_tabel atunci tabela care se creaz va avea aceeai structur cu cea existent n tabela cu numele specificat dup FROM. Comanda COPY STRUCTURE TO permite crearea unei noi tabele, prin copierea structurii sau a anumitor campuri dintr-o tabela activa in zona de lucru curenta. Sintaxa comenzii este: COPY STRUCTURE TO <nume_tabela> [FIELDS <lista_campuri> [WITH ] CDX [WITH] PRODUCTION ]DATABASES <nume_baza_de_date>[NUME <nume_tabela>] Unde: . <nume-tabela> este numele tabelei nou create <lista_campuri> specifica campurile din noua tabela ; <nume_baza_de_date> este numele bazei de date; <NAME <nume_tabela>] este numele tabelei.

3.2. Comenzi pentru actualizarea coninutului i structurii bazei de date


Actualizarea unei baze de date presupune o serie de aciuni prin care aceasta se ntreine corect i la zi . Avnd n vedere faptul c o tabel a bazei de date conine practic dou componente: - Structura - Datele (nregistrrile de date) actualizarea unei tabele va trebui s permit att actualizarea structurii, ct i pe cea a datelor propriu-zise. De aceea vom trata diferit cele 2 categorii de comenzi: Comenzi pentru actualizarea structurii Comenzi pentru actualizarea datelor

3.2.1. Comenzi pentru actualizarea structurii


Structura unei tabele, odat creat, va putea fi ulterior actualizat, prin operaii care s permit: 45

Adugarea unui nou cmp n structur, atunci cnd se constat o asfel de necesitate; - Modificarea descrierii unui cmp existent, n sensul schimbrii numelui su, a tipului sau chiar a lungimii, dup caz; - tergerea unui cmp din structur, atunci cnd acesta nu mai este necesar. Toate aceste operaii sunt permise sub Foxpro printr-o singur comand, anume: MODIFY STRUCTURE Dac n zona de lucru curent exist o tabel de date deschis, atunci comanda se va referi la aceasta, altfel pe ecran va apare o fereastr de dialog care va permite utilizatorului s-i deschid tabela dorit. Acesta va putea actualiza apoi structura afiat pe ecran n regim interactiv. Ieirea din editare cu salvarea noii structuri pe disc se face fie cu tastele Ctrl/W , fie acionnd butonul Save. Precizm c sistemul va aduce coninutul tabelei la noua sa structur, lsnd poziionate pe valori nule cmpurile nou definite. Structura unei tabele poate fi i copiat simplu, dintr-o alt tabel existent, cu comanda: COPY TO nume_tabel STRUCTURE [FIELDS nume_cmp1, nume_cmp2..] Ca efect, se copiaz din tabela activ ntr-o tabel cu numele specificat ntreaga structur sau numai cmpurile precizate prin clauza Fields. Practic, se poate crea astfel o nou tabel pe baza structurii uneia existente. Dac se dorete afiarea pe ecran a structurii tabelei active, se pot folosi comenzile: DISPLAY STRUCTURE [IN nr_zon] [TO PRINTERTO FILE nume_fis] [NO CONSOLE] LIST STRUCTURE [IN nr_zon] [TO PRINTERTO FILE nume_fis] [NO CONSOLE] unde: - Nr_zon specific numrul zonei de lucru n care se afl tabela dorit - To Printer solicit afiarea la imprimant, iar To File precizeaz numele fiierului de tip text n care s fie memorat structura tabelei, n vederea afirii ei ulterioare sau a prelucrrii ei cu un editor de texte. - No Console inhib afiarea structurii la ecran

46

3.2.2. Comenzi pentru actualizarea coninutului bazei de date


Actualizarea datelor unei tabele presupune operaii de : 1. Adugare de noi nregistrri 2. Modificarea unora dintre datele existente 3. tergerea nregistrrilor care nu mai sunt necesare 3.2.2.1. Comenzi pentru adugare de noi nregistrri Adugarea se poate face n orice moment pentru o tabel care a fost creat, deci care conine cel puin structura definit. Adugarea de noi date se poate face: - fie dup ultima nregistrare existent n tabel - fie prin inserarea lor ntre nregistrrile deja existente Celor dou posibiliti le corespund comenzile APPEND i INSERT. Comanda APPEND are urmtoarele formate: a) APPEND Permite adugarea de noi nregistrri la sfritul tabelei deschis n zona selectat, prin intermediul unei machete afiat pe ecran. Utilizatorul poate aduga una sau mai multe nregistrri, terminnd precesul de adgare fie cu Ctrl/W, fie activnd butonul Save. b) APPEND BLANK Adaug automat, la sfritul tabelei active, o nou nregistrare, vid, care va putea fi ulterior completat cu date prin comenzi de modificare, calcul sau afiare formatat (Change, Browse, @ cu Say i Get, Replace, etc). c) APPEND FROM nume_fiier[.ext] [FIELDS <list cmpuri>]FOR <exp_logic>] [TYPE] [DELIMITED [WITH TABWITH <delimitator>WITH BLANK DIF FW2MODWKSSDFWK1WK3XLS] Comanda adaug, la sfritul tabelei active, nregistrri de date preluate n mod automat din fiierul cu numele specificat. Dac se dorete preluarea datelor doar din anumite cmpuri, atunci acestea vor fi precizate prin clauza FIELDS. Clauza FOR permite selectarea i deci preluarea din fiierul specificat doar a acelor nregistrri care satisfac condiia pus. Clauza TYPE definete tipul fiierului, dac acesta nu este .DBF , ceea ce nseamn c este posibil preluarea datelor ntr-o tabel Foxpro din fiiere create sub alte sisteme de gestiune sau limbaje de programare. Astfel, opiunea 47

Delimited specific delimitatorul dintre cmpurile nregistrrii, tiind c cel implicit este virgula. Tipurile specificate semnific: SDF fiier format ASCII, cu nregistrri de lungime fix i terminate prin CR i LF. WK1, WK3 fiier format Lotus FW2 Frame Work II MOD MicroSoft Multiplan WKS foaie de calcul Lotus 1-2-3 XLS Foaie de calcul MicroSoft Excel d) APPEND FROM ARRAY <nume_tablou> [FOR <exp_logic>] [FIELDS <list cmpuri>] Permite copierea, la sfritul tabelei active, a valorilor nscrise ntr-un tablou cu numele specificat, n totalitate sau numai a acelora care ndeplinesc condiia pus. Dac sursa este un vector, se va aduga o singur nregistrare, iar dac este o matrice, se vor aduga attea nregistrri cte linii are matricea. Dac numrul de elemente ale vectorului sau numrul de coloane ale matricei este mai mare dect numarul de cmpuri din structura tabelei, atunci cele n plus vor fi ignorate, iar dac este mai mic, cmpurile rmase vor fi vide. Comanda INSERT are formatul: INSERT [BEFORE] [BLANK] Ea permite adugarea unei/unor nou nregistrri prin inserarea ei dup nregistrarea curent, dac nu exist Before i naintea acesteia cu opiunea BEFORE. nregistrarea adugat va fi completat de la tastatur, asemenea adugrii cu Append, sau va fi automat completat cu cmpuri vide dac s-a precizat opiunea BLANK. 3.2.2.2. Comenzi pentru modificarea datelor dintr-o tabel Modificarea datelor se poate face n regim interactiv, de la tastatur, afind cte o nregistrare pe ecran, cu ajutorul comenzilor : - EDIT - CHANGE sau afind un grup de mai multe nregistrri, cu comanda: - BROWSE sau, n mod automat, fr intervenia utilizatorului, prin specificarea unei valori sau reguli de calcul cu ajutorul comenzii : 48

- REPLACE. Comenzile EDIT i CHANGE au format i aciune asemntoare, astfel c le vom trata mpreun; ele se prezint astfel: EDIT [FIELDS <list cmpuri>] [ scope] [FOR <exp_logic>] [WHILE <exp_logic>] [FREEZE cmp] [NOAPPEND] [NOMODIFY] [NOCLEAR] [NODELETE] [NOOPTIMIZE] [NOWAIT] [ REST] [SAVE] [TITLE nume_fer] [VALID exp] [ERROR exp_C] [WIDTH exp_N] [ WINDOWS nume_fer IN SCREEN] [COLOR SCHEME exp_C] CHANGE [FIELDS <list cmpuri>] [ scope] [FOR <exp_logic>] [WHILE <exp_logic>] [FREEZE cmp] [NOAPPEND] [NOMODIFY] [NOCLEAR] [NODELETE] [NOOPTIMIZE] [NOWAIT] [ REST] [SAVE] [TITLE nume_fer] [VALID exp] [ERROR exp_C] [WIDTH exp_N] [ WINDOWS nume_fer IN SCREEN] [COLOR SCHEME exp_C] Domeniul implicit de aciune este nregistrarea curent, pe care o afieaz pe ecran, pemind utilizatorului s modifice valorile din cmpurile dorite. Semnificaia clauzelor ce pot apare n formatul comenzii este urmtoarea: - FIELDS specific numele cmpurilor care s fie afiate i deci disponibile pentru a fi modificate, dac se dorete acest lucru; - Scope - precizeaz domeniul de aciune dorit, altul dect nregistrarea curent; - FOR specific condiia de selectare a nregistrrilor la care se dorete accesul pentru modificare, dac este cazul; - WHILE introduce condiia ca aceast comand s acioneze doar atta timp ct ea este ndeplinit; - FREEZE precizeaz cmpul unic care s poat fi modificat; - NOAPPEND nu permite adugarea de noi nregistrri cu ajutorul acestei comenzi; - NOMODIFY nu permite efectuarea de modificri n tabela activ i afiat; - NOCLEAR nu permite marcarea nregistrrilor din tabel pentru tergere; - NOOPTIMIZE inhib tehnologia Rushmore - NOWAIT este folosit doar n programe, pentru a cere continuarea execuiei programului dup ce fereastra de editare a fost deschis; 49

REST nu permite poziionarea cursorului n tabela activ la nceputul acesteia; SAVE cere meninerea ferestrei de editare pe ecran chiar dup ieirea din editare; TITLE nume_fer specific un titlu pentru fereastra de editare, dac se dorete acest lucru; VALID exp [ERROR exp_C] face controlul condiiei specificate prin exp i, dac rezultatul este valoarea logic de True, atunci se poate trece la o alt nregistrare, altfel se afieaz mesajul specificat prin clauza ERROR i se ateapt corectarea valorii introduse; WIDTH exp_N stabilete numrul limit de caractere cu care s fie afiate cmpurile; WINDOWS nume_fer IN SCREEN face ca ferestra de editare s fie deschis ntr-o alt fereastr definit anterior cu numele specificat sau direct pe ecran; Ecranul reprezint valoarea implicit. COLOR SCHEME exp_C definete lista de culori pentru fereastra de editare; Valoarea ei implicit este schema cu numrul 10.

Comanda BROWSE are formatul general: BROWSE [FIELDS <list cmpuri>] [ scope] [FOR <exp_logic>] [WHILE <exp_logic>] [FREEZE cmp] [NOAPPEND] [NOMODIFY] [NOCLEAR] [NODELETE] [NOOPTIMIZE] [NOWAIT] [ REST] [SAVE] [TITLE nume_fer] [VALID exp] [ERROR exp_C] [WIDTH exp_N] [ WINDOWS nume_fer IN SCREEN] [COLOR SCHEME exp_C] Trebuie menionat faptul c, spre deosebire de Edit i Change, comanda BROWSE afieaz pe ecran un grup de mai multe nregistrri, sub form tabelar. De aceea , ea se folosete adeseori i ca o comand de afiare a datelor, avnd facilitile de actualizare inhibate. Comanda REPLACE permite modificarea valorilor din cmpurile specificate n mod automat, prin precizarea valorii concrete sau a formulei de calcul necesar, fr ca utilizatorul s mai introduc valori de la tastatur. Este practic comanda care permite efectuarea de calcule n mod automat, n tabela activ. Formatul general al comenzii este: REPLACE <cmp1> WITH <expr1> [ADDITIVE] [,<cmp2> WITH <expr2> [ADDITIVE]]... [Scope] [FOR <exp_logic1>] [WHILE <exp_logic2>] [NOOPTIMIZE] 50

Domeniul de aciune implicit este nregistrarea curent. Scope precizeaz domeniul dorit pentru comanda Replace. Practic , comanda nlocuiete valoarea din cmp1 cu cea obinut din evaluarea expresiei expr1, valoarea din cmp2 cu cea din evaluarea expresiei exp2, etc. Clauza ADDITIVE acioneaz doar asupra cmpurilor de date de tip Memo, indicnd adugarea valorii expresiei la coninutul curent al cmpului. Clauza FOR introduce condiia de selectare a nregistrrilor ce vor fi modificate, iar WHILE cere execuia comenzii doar atta timp ct condiia este ndeplinit. 3.2.2.3. Comenzi pentru tergerea datelor dintr-o tabel Stergerea nregistrrilor dintr-o tabel se face sub Foxpro n dou etape, i anume: Stergerea logic , care presupune doar marcarea n vederea tergerii a nregistrrilor dorite. Acest lucru nseamn c nregistrrile marcate continu s existe n tabel, atta timp ct nu au fost eliminate fizic i deci mai pot fi recuperate, dac este cazul. tergerea logic se face cu comanda DELETE, iar anularea marcajului de tergere se poate face cu comanda RECALL. tergerea fizic nseamn practic eliminarea din tabel a nregistrrilor care au fost marcate. nregistrrile terse fizic nu mai pot fi recuperate. Stergerea fizic se face cu comanda PACK. Comanda DELETE are formatul general: DELETE [Scope] [FOR <exp_logic1>] [WHILE <exp_logic2>] [NOOPTIMIZE] Domeniul implicit de aciune este nregistrarea curent. Clauza Scope poate preciza domeniul dorit, iar FOR i WHILE introduc condiii de selectare a nregistrrilor ce trabuie terse. Marcarea pentru tergere nseamn practic plasarea unui * n dreptul nregistrrilor de ters. Comanda RECALL are un format asemntor, dar are ca efect anularea marcajului de tergere, dac exist. Ea poate fi folosit pentru nregistrri care nu au fost nc terse fizic. RECALL [Scope] [FOR <exp_logic1>] [WHILE <exp_logic2>] [NOOPTIMIZE] Comanda PACK are formatul: PACK [MEMO] 51

Comanda Pack elimin, din tabela activ, la o singur trecere, toate nregistrrile pe care le gsete marcate pentru tergere. Dac se precizeaz opiunea MEMO, atunci se va terge fiierul memo asociat tabelei (care are acelai nume cu tabela, dar este de tip .FPT), dar nu i nregistrrile din tabela curent marcate pentru tergere.

Alte comenzi de tergere


Comanda ZAP, al crei format este acesta simplu, fr opiuni, realizeaz tergerea fizic a tuturor nregistrrilor din tabela activ. Ea este echivalent succesiunii de comenzi: DELETE ALL PACK dar este mai rapid i, n acelai timp mai riscant. Trebuie s remarcm ns, c, dup tergerea fizic a nregistrrilor (cu Zap sau Pack) tabela continu s existe pe disc, coninnd numai structura sa. Comanda DELETE FILE permite tergerea, de sub sistemul Foxpro, a unui fiier de orice tip existent pe disc. Formatul general al comenzii: DELETE FILE [<nume_fiier[.DBF]>?] Comanda terge fiierul cu numele specificat sau pe cel ales din fereastra de fiiere, dac a fost folosit clauza ?. Tipul implicit de fiiere terse este tipul DBF, celelalte fiind necesar s fie precizate.

3.3. Comenzi pentru interogarea bazei de date


Interogarea bazei de date implic realizarea succesiv a dou operaii i anume: regsirea nregistrrii sau nregistrrilor dorite; afiarea lor pe ecran i/sau imprimant

Regsirea unei/unor nregistrri ntr-o tabel presupune cutarea, n tabel, a unei/unor anumite nregistrri, pentru care se cunoate: a) fie numrul ei de ordine (pointerul) b) fie valoarea unui cmp sau grup de mai multe cmpuri de date a) Regsirea unei nregistrri pentru care se cunoate numrul de ordine n tabel const n simpla poziionare pe nregistrarea dorit, cu comanda GO sau GOTO. Comanda GO (GOTO) are urmtoarele formate: GO [RECORD] <exp_N1> [IN <exp_N2><exp_C>] 52

Ca efect, se realizeaz poziionarea pe nregistrarea cu numrul specificat sau rezultat din evaluarea expresiei exp_N1, din tabela deschis n zona curent sau n cea specificat prin exp_N2 sau exp_C ( exp_N2 indic zona, iar exp_C indic alias-ul tabelei deschis). GO TOP [IN <exp_N2><exp_C>] Comanda realizeaz poziionarea pe prima nregistrare (logic) din tabela deschis n zona curent sau n cea precizat prin exp_N1 sau exp_C. GO BOTTOM [IN <exp_N2><exp_C>] Comanda realizeaz poziionarea pe ultima nregistrare (logic) din tabela deschis n zona curent sau n cea precizat prin exp_N1 sau exp_C. De la nregistrarea astfel localizat , deplasarea relativ spre nainte sau napoi se poate face cu comanda SKIP, al crei format este: SKIP [ <exp_N1>] [IN <exp_N2><exp_C>] unde exp_N1 specific poziia relativ n raport cu cea curent, printr-un numr sau o expresie numeric din evaluarea creia se determin saltul. Valoarea implicit este 1, indicnd salt la nregistrarea urmtoare. b). Regsirea unei nregistrri pentru care se cunoate valoarea unui/unor cmpuri de date se poate face n dou moduri: prin consultare n acces secvenial prin consultare n acces direct, dac tabela este indexat Consultarea n acces secvenial const n parcurgerea secvenial a tabelei active i poziionarea pe prima nregistrare care ndeplinete criteriul cerut. Ea se realizeaz cu comanda LOCATE, al crei format este: LOCATE FOR <exp_L1> [Scope] [WHILE <exp_L2>] [NOOPTIMIZE] Exp_L1 este o expresie de tip logic, simpl sau compus prin care se precizeaz cmpul sau cmpurile cu valorile cerute. Scope specific, opional, dac s se restrng cutarea la un anume domeniu, iar WHILe poate cere s continue cutarea ct timp este ndeplinit condiia pus. Trebuie precizat c, dac nregistrarea cutat nu a fost gsit, funcia EOF() este poziionat pe valoarea logic de True, iar FOUND() pe valoarea False i invers. Aceste funcii ne vor permite n programe s ne asigurm de existena nregistrrilor cutate. Dac se dorete continuarea cutrii unei eventuale urmtoare nregistrri care ndeplinete aceeai condiie, atunci se poate utiliza comanda CONTINUE. Ea funcioneaz ns numai asociat cu LOCATE, pentru a continua cutarea iniiat de aceasta. 53

Consultarea n acces direct se poate face numai pentru tabele indexate dup cmpul sau combinaia de cmpuri dup care se dorete cutarea. Ea se face cu comenzile FIND i SEEK , al cror format este : FIND <expC> SEEK <varC> Comanda FIND caut n indexul tabelei active prima nregistrare cu cheia specificat prin expC, n timp ce Seek ateapt s fie precizat numele variabilei n care se afl memorat valoarea cheii dorite. Cutarea se realizeaz prin intermediul indexului i este foarte rapid. Dac nregistrarea cutat a fost gsit, funcia EOF() este poziionat pe False, iar FOUND() pe True i invers. Saltul la o eventual urmtoare nregistrare care ndeplinete aceeai condiie se poate face de data aceasta cu comanda SKIP (salt la urmtoarea nregistrare). Cele dou comenzi pot fi utilizate numai dac tabela a fost deschis mpreun cu un index.

3.4. Comenzi pentru afiarea bazei de date (vizualizarea nregistrrilor)


Vizualizarea nregistrrilor se poate realiza pe ecran sau imprimant, parial sau n totalitate, n mod secvenial sau ntr-un format controlat de utilizator. Forma cea mai rapid, uor accesibil i permanent la dispoziia utilizatorului este afiarea realizat cu comenzile LIST, DISPLAY, ? i ??. Cele dou comenzi, LIST i DISPLAY au formate i aciuni asemntoare, cu deosebirea c pe ecran List afieaz nregistrrile cu defilarea continu a imaginii, n timp ce Display oprete imaginea dup fiecare ecran plin. DISPLAY [FIELDS <list_cmpuri>] [Scope] [FOR <exp_L1>] [WHILE <exp_L1>] [OFF] [NOCONSOLE] [NOOPTIMIZE][TO PRINTER TO FILE <nume_fis>] LIST [FIELDS <list_cmpuri>] [Scope] [FOR <exp_L1>] [WHILE <exp_L1>] [OFF] [NOCONSOLE] [NOOPTIMIZE][TO PRINTER TO FILE <nume_fis>] unde: - FIELDS precizeaz cmpurile de date din nregistrri care s fie afiate; n lips, sunt afiate toate; - Scope definete domeniul nregistrrilor ce trebuie afiate - FOR introduce condiia de selectare a nregistrrilor ce se vor afia; - WHILE introduce condiia ct timp se va produce afiarea; 54

OFF inhib afiarea pe ecran a numarului de ordine al nregistrrii n tabel; - NOCONSOLE inhib afiarea pe ecran sau n fereastra activ; - NOOPTIMIZE dezactiveaz tehnica Rushmore. - TO PRINTER direcioneaz afiarea la imprimant; n lips afiarea se produce la ecran; - TO FILE direcioneaz afiarea ctre un fiier, unde se memoreaz, pentru a fi listat la imprimant ulterior. Alte formate ale comenzilor LIST i DISPLAY sunt: LIST STATUS [NOCONSOLE] [TO PRINTERTO FILE <nume_fis>] DISPLAY STATUS [NOCONSOLE] [TO PRINTERTO FILE <nume_fis>] Aceste formate servesc pentru a afia pe ecran , la imprimant sau ntrun fiier informaii de stare, cum sunt: numele tabelelor active n momentul respectiv; fiierele index active; cheile de indexare ale fiierelor index; aliasurile folosite; relaiile ntre tabele; fiierele de tip program i de tip memo active; calea curent, discul implicit; valorile parametrilor stabilii prin comanda SET; setrile ecranului,etc. LIST MEMORY [LIKE <specif_fis>][NOCONSOLE] [TO PRINTERTO FILE <nume_fis>] DISPLAY MEMORY [LIKE <specif_fis>][NOCONSOLE] [TO PRINTERTO FILE <nume_fis>] Afieaz pe ecran, la imprimant sau ntr-un fiier, numele , tipul i valoarea tuturor variabilelor de memorie curente, lungimea lor n bytes, numrul de bytes rmai disponibili. LIST STRUCTURE [NOCONSOLE] [TO PRINTERTO FILE <nume_fis>] DISPLAY STRUCTURE [NOCONSOLE] [TO PRINTERTO FILE <nume_fis>] Acest format al comenzilor servete pentru afiarea structurii tabelei active. Comanda ? afieaz, n mod normal la ecran, valoarea obinut din evaluarea expresiei specificate, cu salt la rnd nou. . Formatul general este: ? <expresie> Comanda ?? are format i aciune asemntoare, numai c produce afiarea n continuare, fr salt la rnd nou. Formatul este: 55

?? <expresie> Dac se dorete direcionarea afirii ctre imprimant, atunci aceasta trebuie s fie mai nainte activat, printr-o comand de forma: SET PRINTER ON Cnd se dorete revenirea la ecran pentru comanda ? sau ??, se va specifica o comand de forma: SET PRINTER OFF Exemple: Fiind dat tabela STUDENT, s se scrie secvenele de comenzi prin care se satisfac urmtoarele cerine: 1. S se afieze studenii de la facultatea de Informatic. USE STUDENT LIST FOR FACULT=INF sau, pentru a ne asigura c identificarea se face corect, indiferent de modul n care au fost introduse datele n tabel: USE STUDENT LIST FOR UPPER(FACULT)= INF 2. S se afieze studenii din facultatea de Informatic, anul II, grupa 620. USE STUDENT LIST FOR UPPER(FACULT)= INF AND AN1=1 AND GRUPA1=601 3. S se afieze la imprimant studenii nscui n 30 noiembrie 1979. USE STUDENT LIST FOR DATAN={11/30/79} TO PRINT 4. S se afieze studenii nscui n anul 1980 (condiie compus). USE STUDENT LIST FOR DATAN>={01/01/80} AND DATAN<={12/31/80} sau, utiliznd funciile Foxpro: USE STUDENT LIST FOR SUBSTR(DTOC(DATAN),7,2))=80 sau LIST FOR val(SUBSTR(DTOC(DATAN),7,2)))=80 5. S se identifice, pentru a fi corectat, nregistrarea corespunztoare studentului ZAVOI. USE STUDENT LOCATE FOR UPPER(NUME)=ZAVOI EDIT sau, n programe USE STUDENT LOCATE FOR UPPER(NUME)=ZAVOI 56

IF NOT EOF() EDIT ELSE ? nregistrarea cu studentul dorit nu exist ENDIF 6. S se tearg din tabela STUDENT toi studenii de la Informatic i s se creeze cu ei o tabel separat numit INFORM. USE STUDENT COPY TO INFORM STRUCTURE &Se copiaz structura pentru INFORM USE INFORM &Se deschide noua tabel INFORM APPE FROM STUDENT FOR UPPER(FACULT)= INF &Se preiau datele din STUDENT USE STUDENT &Se deschide tabela STUDENT DELETE FOR UPPER(FACULT)= INF &Se marcheaz pentru tergere nreg.din STUDENT PACK &Se terg fizic nregistrrile din STUDENT CLOSE ALL &Se nchid toate fiierele 7. S se afieze toate nregistrrile marcate pentru tergere din tabela STUDENT. USE STUDENT LIST FOR DELETED() 8. S se afieze, pentru corecii, toi studenii (biei) de la facultatea de TURISM. Ne intereseaz n mod deosebit numele, marca, data naterii i media. USE STUDENT EDIT FOR UPPER(FACULT)= TURISM AND UPPER(SEX)= B sau USE STUDENT EDIT FOR UPPER(FACULT)= TURISM AND UPPER(SEX)= B FIELDS MARCA, NUME, PRENUME, DATAN, MEDIA &Se afieaz doar cmpurile cerute 9. S se recalculeze media de absolvire a studenilor, tiind c media existent se mrete cu 0.50 pentru toi cei care au media peste 5 i devine 10 pentru cei care aveau ntre 9 i 10. USE STUDENT 57

REPLACE MEDIA WITH 10 FOR (MEDIA>=9 AND MEDIA<=10) REPLACE MEDIA WITH MEDIA+0.50 FOR MEDIA>5 AND MEDIA #10 10. tiind c avem o tabel PERS cu cmpul SAL pentru salariul cuvenit, s se calculeze noul salariu cuvenit dup o indexare de 50%. (o mrire cu 50%) USE PERS REPL ALL SAL WITH SAL*1.5 sau REPL ALL SAL WITH SAL+SAL*50/100

3.5.

Comenzi pentru ordonarea nregistrrilor bazei de date

Se tie c ncrcarea datelor ntr-o tabel poate fi fcut aleator, deoarece Foxpro pune la dispoziia utilizatorului comenzi prin care poate realiza ordonarea acestora dup unul sau mai multe criterii, uor i rapid. Ordonarea (sortarea) datelor sub Foxpro poate fi fcut n dou moduri: ordonare fizic (sortare) , care const n crearea unei alte tabele, n care nregistrrile din tabela curent sunt fizic copiate i dispuse n ordinea cerut. ordonare logic (indexare), care const n crearea unei tabele de index prin intermediul creia se stabilete ordinea de parcurgere a nregistrrilor din tabela curent, astfel nct ele s apar ordonate dup criteriul dorit, dei, fizic, au rmas neschimbate. Corespunztor celor dou moduri, Foxpro pune la dispoziie comenzile SORT i respectiv INDEX.

3.5.1. Comenzi pentru sortarea nregistrrilor


Comanda SORT are formatul general: SORT ON <nume_cmp1> [/A/C/D], <nume_cmp2> [/A/C/D],... [A/C/D] TO <nume_tabel_sortat> [FIELDS <list cmpuri>] [FOR <expr_L>] unde: - nume_cmp1, nume_cmp2... reprezint , n ordine, numele cmpurilor dup valorile crora se dorete ordonarea; - /A cere ca ordonarea s fie Ascending (cresctoare); Ea este implicit. - /D cere ca ordonarea s fie Descending (descresctoare); 58

/C cere s nu se fac difereniere la sortare ntre literele mici i cele mari (pentru cmpuri de tip caracter); - nume_tabel_sortat este numele tabelei noi, de tip .DBF care se va crea i va conine nregistrrile ordonate. - FIELDS precizeaz, dac se dorete acest lucru, lista cmpurilor de date care s fie preluate n structura noii tabele; - FOR introduce, opional, condiia de selectare a nregistrrilor ce se vor sorta i prelua n noua tabel. Pentru a avea acces la nregistrrile ordonate, va trebui deschis noua tabel creat. Atunci cnd se cere ordonarea dup mai multe cmpuri (chei de sortare) trebuie s avem grij, deoarece ea se justific numai dac exist mai multe nregistrri cu valori identice dup prima cheie, eventual i dup a doua, etc. -

3.5.2.Comenzi pentru indexarea unei baze de date


Ordonarea logic sau indexarea este procedeul de ordonare a datelor cel mai indicat sub Foxpro, deoarece nltur deficienele sortrii fizice, fiind mai rapid, necesitnd un consum foarte mic de spaiu disc i asigurnd corelaia permanent ntre datele tabelei iniiale i modificrile ulterioare. Prin indexare nu este afectat tabela de date curent i nici nu se creaz o nou tabel de date, ci doar o tabel index. Aceasta va memora doar adresele nregistrrilor din tabela de date activ, astfel nct s permit parcurgerea lor n ordinea cerut de cheia de indexare, dei, fizic, au rmas neschimbate (ordonare logic). Orice tabel poate fi ordonat logic dac are asociat o tabel index. Pentru o tabel de date se pot crea oricte tabele index dorim, fiecare cmp de date, subcmp sau combinaie de cmpuri putnd servi drept cheie de indexare. O cheie multipl de indexare se poate constitui prin concatenarea cmpurilor sau subcmpurilor respective. Tabela index, odat creat, va trebui s fie permanent n concordan cu baza de date creia i este asociat, adic s preia toate coreciile fcute. Dintre tabelele index existente la un moment dat pentru o tabel de date, numai cele active se vor actualiza odat cu aceasta. Celelalte vor trebui puse de acord cu tabela de date prin operaia de reindexare sau refacere. Dintre tabelele index active la un moment dat, doar una i anume prima din comanda de deschidere stabilete ordinea de parcurgere a tabelei de date. Ea se numete Index principal sau criteriu curent de ordonare. Sub SGBD Foxpro , tabela index poate fi, dup modalitatea de creare: fiier individual, cu extensia .IDX 59

tabel n cadrul unui fiier index multiplu, cu extensia .CDX Fiecare tabel se numete TAG i se identific n cadrul fiierului multiplu printr-un nume, dat de utilizator la crearea sa. Exist, sub Foxpro, dou tipuri de fiiere .CDX, i anume: a) Fiierul index multiplu structural, care: are nume identic cu numele tabelei de date se activeaz automat, odat cu activarea tabelei de date este permanent activ, neputnd fi dezactivat (deci poate prelua automat coreciile din tabela de date) este permanent n concordan cu tabela de date, toate tabelele lui fiind automat actualizate odat cu tabela de date (cci sunt active) b) Fiierul index multiplu nestructural, care: are nume diferit de tabela de date trebuie activat explicit, ca i fiierele index individuale se poate dezactiva n orice moment odat activat, menine active doar tabelele (tag-urile) pe care le conine. Crearea unei fiier index individual se face cu comanda: INDEX ON <expr_cheie> TO <nume_fis_index> [FOR <expr_L>] [UNIQUE] Crearea unui index multiplu se face cu comanda: INDEX ON <expr_cheie> TAG <nume_tag> [OF <nume_fis[.CDX]>] [ASCENDINGDESCENDING] [FOR <expr_L>] [UNIQUE] [ADDITIVE] Comanda creaz o tabel index inclus ntr-un fiier index multiplu, care este fie fiierul .CDX structural cu nume_tag, fie fiierul .CDX nestructural specificat prin nume_fis din clauza OF. Tabela de index este un TAG cu numele specificat. n formatul comenzii opiunile au semnificaia: - ON <expr_cheie> specific cheia de indexare, care poate fi un cmp, subcmp sau concatenare de cmpuri - FOR introduce condiia de selectare a nregistrrilor ce se vor indexa - ASCENDINGDESCENDING specific modul de ordonare (cresctor sau descresctor) - UNIQUE cere valori unice pentru fiecare valoare a cheii de ordonare. Dac se ncearc introducerea mai multor valori identice, doar prima dintre ele va fi preluat, celelalte fiind ignorate; 60

- ADDITIVE precizeaz c fiierele index deschise anterior rmn n continuare deschise. O tabel poate avea asociai indeci de orice tip, alegerea acestora innd de complexitatea aplicaiei, de numrul de fiiere index ce trebuie s fie permanent deschise i, n legtur direct cu aceasta, de sistemul de operare utilizat. Activarea unei tabele index existente se poate face, n orice moment, n mod implicit chiar prin comanda de indexare INDEX ON sau, n mod explicit, astfel: a) odat cu deschiderea tabelei de date, cu comanda: USE <nume_tabel> [IN <zon_lucru>] [ALIAS <nume_alias>] [INDEX f1,f2,...] [ORDER <nume_tabel_index>] [ORDER TAG <nume_tag>] [EXCLUSIVE] [NOUPDATE] Ca efect, se deschide tabela cu numele specificat, n zona curent sau n cea specificat prin zon_lucru mpreun cu toi indecii din clauza INDEX i se stabilete drept index principal cel indicat prin clauza ORDER. Precizm c acesta este de fapt formatul general de deschidere a unei tabele de date. b) printr-o comand special de activare, valabil pentru tabela de date curent, cu comanda: SET INDEX TO f1,f2,... [ORDER <nume_tabel_index>] [ORDER TAG <nume_tag>] Ca efect, se deschid indecii precizai prin f1,f2, iar dintre acetia se specific indexul principal, care dicteaz ordinea de parcurgere a nregistrrilor din tabela de date. Stabilirea indexului principal asociat tabelei de date active se poate face i separat, printr-o comand de forma: SET ORDER TO <nume_tabel_index> [IN <zon_lucru>] sau SET ORDER TO TAG <nume_tag> [IN <zon_lucru>] [OF <nume_fis>] Reactualizarea (refacerea) unei tabele index se poate face , atunci cnd este necesar, cu comanda: REINDEX

61

Comanda reconstruiete toate tabelele de index active la momentul respectiv, asociate cu tabela de date; este folosit pentru a actualiza tabelele de index care nu au fost actualizate mpreun cu tabela de date.

3.6. Comenzi pentru deschiderea i nchiderea tabelelor. Zone de lucru


Se tie c, pentru a fi prelucrat, o tabel trebuie s fie activ (deschis). n mod normal, fr alte precizri, Foxpro lucreaz cu o zon de lucru i permite deschiderea unei singure tabele. n acest caz, orice comand de deschidere a unei noi tabele atrage dup sine nchiderea automat a celei anterior deschise. De aceea, atunci cnd mai multe tabele trebuie s se afle n acelai timp active, sistemul Foxpro permite acest lucru, cu condiia ca ele s fie deschise n zone de lucru diferite. Precizm deasemenea, c orice comand Foxpro vom da, ea se va referi la tabela din zona selectat sau specificat n mod expres prin comand. Am vzut deja comanda de deschidere a unei tabele prezentat la INDEX, i anume: USE <nume_tabel> [IN <zon_lucru>] [ALIAS <nume_alias>] [INDEX f1,f2,...] [ORDER <nume_tabel_index>] [ORDER TAG <nume_tag>] [EXCLUSIVE] [NOUPDATE] unde: zon_lucru reprezint un numr cuprins ntre 1 i 25 , numrul maxim de zone i deci de tabele ce pot fi folosite simultan. Idenficarea unei zone se poate face deci prin numrul asociat sau printro liter de la A la J (suficiente numai dac se lucreaz cu cel mult 10 zone de lucru). Comutarea de la o zon la alta i deci practic de la o tabel la alta , se va face n orice moment cu comanda : SELECT <numr_zon><nume_zon> Dup aceast comand, orice comand de prelucrare a tabelei care urmeaz, se va referi la tabela deschis n ultima zon selectat. Deasemenea, o tabel poate fi referit prin numele su, sau printr-un alt nume, de regul mai scurt, numit ALIAS, care rmne valabil numai pe parcursul programului respectiv. nchiderea unei tabele se poate face cu comenzile: USE nchide tabela din zona curent de lucru CLOSE ALL nchide toate fiierele, din toate zonele de lucru 62

CLOSE DATABASES nchide tabelele de date deschise Deschiderea unei tabele poate fi fcut i prin intermediul meniului, activnd opiunea OPEN din submeniul FILE i alegnd ca tip de fiier pe cele de tip baze de date (.DBF). Exemple
USE PERS LIST USE PONTAJ LIST sau: SELECT 1 USE PERS SELE 2 USE PONTAJ LIST SELE 1 LIST USE - afieaz toate nregistrrile din tabela Pers - afieaz toate nregistrrile din tabela Pontaj

- afieaz toate nregistrrile din tabela Pontaj (ultima selectat) - afieaz toate nregistrrile din tabela Pers, cci e activ zona1 - nchide tabela deschis n zona 1, deci PERS

3.7. Comenzi pentru stabilirea legturilor dintre tabelele bazei de date


Se tie c o baz de date este alctuit din mai multe tabele de date, ntre care se stabilesc relaii, legturi. De cele mai multe ori, utilizatorul are nevoie s-i preia date din mai multe tabele simultan, tabele ntre care trebuie s fie definite relaiile, pe baza cmpurilor comune. Realizarea relaiilor ntre 2 tabele se face cu comanda SET RELATION TO, dup un cmp de date comun, parcurgnd urmtorii pai: a) Se deschide tabela principal. Ea poate fi ordonat, indexat dup cmpul comun. b) Se deschide, ntr-o alt zon de lucru, tabela secundar, care trebuie s fie n mod obligatoriu indexat dup cmpul comun. Se nelege c se activeaz indexul corespunztor cmpului comun sau se indexeaz acum dup acest cmp c) Se cere execuia comenzii SET RELATION TO, al crei format este: SET RELATION TO <expr> 63

INTO <numr_zon/nume_tabel> [ADDITIVE] [,<expr2> INTO <numr_zon/nume_tabel> [ADDITIVE] ...] unde: expr este numele cmpului comun, dup care se stabilete legtura. numr_zon este numrul zonei n care a fost deschis tabela secundar nume_tabel este numele tabelei secundare, cu care se face relaia ADDITIVE este o clauz opional, utilizat dac se realizeaz o jonciune pe mai multe tabele. Exemplu Se dau 2 tabele, PERS i PONTAJ. i se tie c fiecare om are un pontaj corespunztor. Cmpul de legtur ntre tabele este NUME. S se afieze numele fiecrei persoane i numrul de ore lucrate (cmpul OREL din PONTAJ). SELE 1 USE PERS SELE 2 USE PONTAJ INDEX ON NUME TAG NUME SET ORDER TO TAG NUME SELE 1 SET RELATION TO NUME INTO PONTAJ DO WHILE NOT EOF() ? PERS.NUME ?? ?? PONTAJ.OREL SKIP ENDDO CLOSE ALL Exemplu: SELE A USE PERS PERS.nume sau A.NUME sau A->NUME Renunarea la o relaie se poate face n orice moment cu comanda : SET RELATION OFF INTO <nume_tabel>

64

3.8.

Comenzi pentru lucru cu variabile de memorie

Variabilele de memorie se aloc i se elibereaz dinamic, n orice moment al sesiunii de lucru, prin comenzi corespunztoare. Alocarea unei variabile se face automat, de tipul i lungimea valorii care se memoreaz n ea. Comenzile de lucru cu variabile de memorie pot fi grupate astfel: a) Atribuirea (scrierea) unei valori ntr-o variabil de memorie se face cu comenzile de forma: STORE <expresie> TO <nume_var> sau <nume_var>=<expresie> Ca efect se aloc variabila cu numele specificat, de tipul i lungimea valorii rezultate din evaluarea expresiei specificate. Variabila va fi deci de tip caracter, numeric, logic sau dat calendaristic, funcie de tipul expresiei specificate. Exemplu: STORE ABC to var1 STORE 1247 to var2 var3=17.5 var4=15*var3 var5=.F. var6={10/29/98}

var1 de tip caracter var2 de tip numeric var3 de tip numeric var4 de tip numeric var5 de tip logic var6 de tip dat calendaristic

b) Introducerea unei valori de la tastatur ntr-o variabil de memorie se face cu comenzile INPUT, ACCEPT sau WAIT, care se aseamn ca format i funciuni, avnd mici deosebiri. Formatul general este: ACCEPT [mesaj] TO <nume_var> INPUT [<expresie>] TO <nume_var> WAIT [mesaj] TO <nume_var> Cele trei comenzi afieaz pe ecran mesajul specificat sau rezultatul obinut din evaluarea expresiei i apoi ateapt ca utilizatorul s introduc de la tastatur o valoare (terminat prin Enter). Valoarea tastat va fi scris n variabila cu numele specificat, care acum se aloc automat (nu trebuie s existe definit anterior). 65

Deosebirile dintre comenzi sunt: - ACCEPT definete variabila n mod automat de tip caracter, indiferent de natura datelor introduse. Se folosete pentru valori introduse de la tastatur de tip caracter, deoarece nu mai necesit demarcarea irului ntre ( e mai rapid). - INPUT analizeaz natura datelor introduse i declar variabila funcie de aceast natur: de tipul Caracter, Numeric, Logic sau Dat calendaristic. Comanda e mai lent cci necesit demarcarea datelor ntre delimitatorii cunoscui, cu excepia celor de tip numeric sau a expresiilor de calcul ce vor fi mai nti evaluate. Se recomand pentru date numerice. - WAIT seamn cu ACCEPT, cu deosebirea c aloc n mod automat variabila de lungime=1 i deci nu mai ateapt apsarea tastei Enter la sfritul introducerii datei. Este deci mult mai rapid, dar poate fi folosit pentru date de tip caracter i lungime suficient de un caracter. c) Extragerea de informaii statistice dintr-o tabel de date, cu memorarea lor sau nu n variabile de memorie Dac o baz de date a fost creat, format din mai multe tabele de date cu legturi ntre ele, atunci ea va putea servi adeseori furnizrii unor informaii detaliate sau sintetizate, sub form de liste, tabele, rapoarte, simple valori rezultate din nsumri, calcule matematice, statistice, etc. Comenzile care ne permit astfel de prelucrri permit memorarea, dac dorim, a rezultatelor obinute, n variabile de memorie al cror nume l specific utilizatorul i care nu trebuie s existe anterior definite. Dintre aceste comenzi enumerm: COUNT [Scope] [FOR <exp_L>] [WHILE <exp_L>] [TO <nume_var>] Comanda numr nregistrrile care ndeplinesc condiia specificat prin FOR sau WHILE, eventual numai din domeniul specificat prin Scope. Rezultatul numrrii este memorat n variabila cu numele precizat, care se aloc acum i va fi de tip numeric. SUM [<list_cmpuri/expresii>] [Scope] [FOR <exp_L>] [WHILE <exp_L>] [TO <list_var>] Comanda nsumeaz valorile din cmpul, cmpurile sau expresiile n care intervin cmpuri din tabela activ pentru toate nregistrrile (dac nu e 66

precizat un domeniu), sau numai pentru nregistrrile din domeniul specificat prin Scope sau numai pentru acelea care ndeplinesc condiia introdus prin FOR sau WHILE. Rezultatul nsumrii este afiat pe ecran, n mod poziional, eventual fiind memorat i n variabilele specificate dup TO. Dac nu se specific cmpurile de date ce trebuie nsumate, comanda va nsuma automat valorile din toate cmpurile numerice i le va afia poziional pe ecran. AVERAGE [<list_cmpuri/expresii>] [Scope] [FOR <exp_L>] [WHILE <exp_L>] [TO <list_var>] Comanda este asemntoare cu SUM, numai c ea calculeaz media aritmetic a valorilor specificate din nregistrrile selectate. Apelat din meniul principal, comanda afieaz o fereastr de forma: CALCULATE [<list_cmpuri/expresii>] [Scope] [FOR <exp_L>] [WHILE <exp_L>] [TO <list_var>] Comanda funcioneaz ca i SUM i AVERAGE, calculnd valoarea expresiilor specificate, permind n plus, i evaluarea unor funcii, cum ar fi: CALCULATE MAX(val) to mval CALCULATE AVG(val) to aval d) Sintetizarea tabelelor de date se face cu comanda TOTAL, al crei format este: TOTAL TO <nume_tabel> ON <expresie_cheie> [FIELDS <list_cmpuri>] [Scope] [FOR <exp_L>] [WHILE <exp_L>] Tabela de date surs trebuie s fie activ i ordonat dup cmpul indicat prin cheie. Comanda permite nsumarea valorilor numerice, sau doar a celor specificate prin clauza FIELDS , pe grupe de nregistrri cu aceeai valoare a cheii. Rezultatele obinute se depun n tabela destinaie al crei nume s-a precizat prin TO nume_tabel. Se creaz deci o tabel destinaie, n care, va exista cte o singur nregistrare cu totalurile calculate la nivelul fiecrei valori a cheii de ordonare Tabela rezultat va fo sortat dup cmpul cheie. Operatorul relaional de proiecie n FoxPro este implementat prin comanda COPY TO care copiaz date n mod selectiv dintr-o tabela curent n alta tabel rezultat. Sintaxa comenzii este: 67

COPY TO <nume_fis> [DATEBASE <nume> [FIELDS <lista_cmpuri>][<domeniu>[FOR <expL1>][WHILE <expL2>][[WITH] CDX][WITH NOOPTIMIZE][TYPE][WITH BLANK ] Unde: <nume_fis> = numele fiierului (tabelei) care va rezulta; FIELDS . Specific atributele (cmpurile) care vor fi copiate n noua tabel; <domeniu> indica nregistrrile care vor fi copiate; FOR/WHILE .copiaz nregistrrile care satisfac conditia data de expL1>/<expL2> Exemplu: S se realizeze o proiecie din tabela CONTRACTE n tabela PRODUSE dup cmpul CODP. (Se cere deci o selectare acodurilor de produse care au fcut obiectul contractelor cu beneficiarii). USE CONTRACTE INDEX ON CODP TO P1 UNIQUE COPY TO PRODUSE FIELDS CODP Comanda JOIN implementeaza operatorul relaional de jonciune, dintre doua tabele care au cel puin un cmp comun, rezultnd o noua tabela. Sintaxa comenzii este: JOIN WITH <tabela secundara> FOR <conditie> [FIELDS <listacampuri> [NOOPTIM] Pentru a se face jonciunea, una din tabele trebuie deschis ntr-o zon de lucru curent, iar tabela secundar ntr-o alta zon. Exemplu: S se realizeze jonciunea ntre tabelele CONTRACTE i PRODUSE astfel nct s rezulte o nou tabel care s continue informaii despre produsele din nomenclator care fac obiectul contractelor din evidena curent. Tabela rezultat se va numi CONTRPROD.DBF SELECT A USE PRODUSE INDEX IP_CODP SELECT B USE CONTRACTE INDEX IC_CODP JOIN WITH PRODUSE TO CONTRACTE FOR CODP=A.CODP; FIELDS CODP, PRODUSE.DENP, PRODUSE.UMP;CODB, CANTL, PLN,CL USE CONTRPROD LIST. 68

Aplicaii rezolvate: APLICATIA 1: Fie baza de date cu evidenta creditelor acordate de filiala unei banci, cu urmatoarea structura: BANCA (SUCURSALA C(10), BENEFICIAR C(15), VAL_CREDIT N(8), VAL_ACHIT N(8), TERMEN N(2), DATA_ACORDARII D) Cerinte: 1. Sa se introduca 8 inregistrari 2. Sa se caute beneficiarii cu numele Popa 3. Sa se afiseze beneficiarii care au de achitat creditul in mai putin de 24 luni 4. Sa se verifice daca la sucursala Militari sunt acordate credite mai mari de 500.000 lei. Sa se afiseze numarul curent al primei inregistrari gasite si continutul acesteia 5. Sa se caute beneficiarii care nu au achitat nici o suma si sa se afiseze 6. Sa se afiseze beneficiarii care au achitat mai mult de jumatate din credit, de la sucursala Titan 7. Sa se stearg logic toi beneficiarii care au achitat creditul 8. Sa se afiseze toti beneficiarii cu Val_credit mai mica de 10.000 lei. 9. Sa se afiseze inregistrarile marcate pentru stergere si apoi sa se renunte la marcaj 10. Sa se afiseze creditele acordate cu vechime mai mare de 3 ani 11. Sa se afiseze creditele acordate in ultima luna 12. Sa se marcheze pentru stergere creditele acordate in lunile august si octombrie si sa se stearga definitive aceste inregistrari.

Rezolvare: 2. LOCATE FOR BENEFICIAR = Popa DISPLAY CONTINUE DISPLAY 3. LIST FOR TERMEN < 24
4. LOCATE FOR SUCURSALA = Militari AND VAL_CREDIT > 500000

?FOUND() ?RECNO() DISPLAY 5. LOCATE FOR VAL_ACHIT=0 69

DISPLAY CONTINUE DISPLAY


6. LIST FOR VAL_ACHIT>VAL_CREDIT/2 AND SUCURSALA = Titan

7. DELETE FOR VAL_ACHIT=VAL_CREDIT 8. LIST FOR VAL_CREDIT<10000 9. LIST FOR DELETED() RECALL ALL 10. LIST FOR YEAR(DATE()) YEAR(DATA_ACORDARII) > =3 11. LIST FOR MONTH(DATE()) MONTH(DATA_ACORDARII) = 1 AND YEAR(DATE())=YEAR(DATA_ACORDARII) 12. DELETE FOR MONTH(DATA_ACORDARII) = 08 OR MONTH(DATA_ACORDARII) = 10 PACK APLICATIA 2: Fie baza de date DEPOZIT cu urmatoarea structura: STOCURI (COD N(3), DENUMIRE C(20), STOC_INITIAL N(4), CANTITATE_INTRATA N(4), CANTITATE_IESITA N(4), STOC_FINAL N(6), PRET N(5)) Cerinte: 1. Introduceti 8 inregistrari in baza de date 2. Sa se indexe baza de date dupa campul COD 3. Sa se calculeze totalul pentru cantitatea intrata si pentru cantitatea iesita 4. Sa se calculeze pretul mediu 5. Determinati cel mai mare stoc intrat si cel mai mic stoc iesit 6. Afisati numarul produselor al caror stoc final este mai mare de 100 7. Determinate numarul de produse al caror pret este cuprins intre 10 si 100 lei 8. Sa se afiseze primele trei produse in ordinea descrescatoare a preturilor 9. Sa se calculeze valoarea produselor din depozit 10. Afisati numele produsului care se afla in cantitatea cea mai mare in depozit

70

2. 3.

4. 5. 6. 7. 8.

9. 10.

Rezolvare: INDEX ON COD TAG COD OF IND_COD SUM CANTITATE_INTRATA TO A ?CANTITATEA INTRATA ESTE,A SUM (CANTITATE_IESITA) AVERAGE (PRET) CALCULATE MAX(STOC_INITIAL) CALCULATE MIN(STOC_FINAL) CALCULATE CNT() FOR STOC_FINAL > 100 CALCULATE CNT() FOR PRET>=10 AND PRET <= 100 SORT TO STOCURI1 ON PRET/D USE STOCURI1 GO TOP LIST NEXT 3 CALCULATE SUM (STOC_FINAL*PRET) TO VAL ?VALOAREA PRODUSELOR DIN DEPOZIT ESTE, VAL CALCULATE MAX (STOC_FINAL)

APLICATIA 3: Fie baza de date cu evidenta salariilor angajatilor unei patiserii, cu structura alaturata: SALARIATI (COD_ANGAJ N(3), NUME C(20), FUNCTIA C(10), SALARIU N(8), INDEXARE N(3), SAL_IND N(8), PRIMA_ANG N(8), NR_ORE N(5)) Cerinte: 1. Sa se realizeze completarea automata a campului Indexare cu valoarea 5, ce reprezinta procentul cu care va fi indexat salariul angajatilor 2. Completarea automata a campului Sal_ind ce reprezinta salariul dupa indexare 3. Completarea campului Prima_ang astfel: pentru cei care au 200 ore lucrate cu valoarea 400, iar pentru cei care au 150 ore cu valoarea 200 4. Sa se marcheze pentru stergere cei cu functia de sofer, sa se afiseze baza de date si apoi sa se renunte la marcaj 5. Sa se sorteze angajatii cu functia de sofer dupa campul Salariu crescator si dupa campul Prima_ang descrescator 6. Sa se caute inregistrarea cu codul 12 si sa se afiseze 71

Rezolvare: 1. REPLACE ALL INDEXARE WITH 5


2. REPLACE ALL SAL_IND WITH SALARIU+(SALARIU*INDEXARE)/100

3. REPLACE PRIMA_ANG WITH 400 FOR NR_ORE=200 REPLACE PRIMA_ANG WITH 200 FOR NR_ORE=150 4. DELETE FOR FUNCTIA = SOFER LIST RECALL ALL 5. SORT TO SALARIATI1 ON SALARIU/A, PRIMA_ANG/D FOR FUNCTIA=SOFER USE SALARIATI1 LIST 6. USE SALARIATI INDEX ON COD_ANGAJ TAG COD OF IND_COD ?SEEK(12) DISPLAY Lucrri practice propuse 1. Fiind dat tabela PERS (marca, nume, funct, sal, adresa, tel,datan, sex, stareciv, locm) s se calculeze noul salariu cuvenit dup indexare, tiind c acesta se mrete pe trane, astfel: - cu 55% pentru cei cu salariu mai mic de 750000lei; - cu 40% pentru cei cu salariu mai mare de 750000lei i mai mic de 1500000lei - cu 25% pentru cei cu salariu mai mare de 1500000lei i mai mic de 3000000lei - cu 15% pentru cei cu salariu mai mare de 3000000 lei 2. S se calculeze impozitul aferent fiecrui salariat, presupunnd c grila de impozitare ar fi urmtoarea: - pentru salariu 450000 lei, impozitul=0 - pentru salariu >450000 lei i 750000 impozitul=50000 plus nc 15% din ce depete 450000 - pentru salariu >750000 lei i 1500000 impozitul=90000 plus nc 20% din ce depete 750000 - pentru salariu >1500000 lei i 2500000 impozitul=240000 plus nc 25% din ce depete 1500000 - pentru salariu >2500000 lei i 4000000 impozitul=500000 plus nc 30% din ce depete 2500000 72

pentru salariu >4000000 lei impozitul=950000 plus nc 40% din ce depete 4000000

Observaie: Pentru c tabela PERS nu conine cmpul IMPOYIT, se va modifica nti structura acesteia, dup care se va proceda la calcul. 3. S se afieze rapid suma fondului de salarii (suma cmpului SAL) dup indexare i suma impozitului cuvenit. 4. S se calculeze i s se afieze salariul mediu pentru un salariat al instituiei. 5. S se afieze toi salariaii, n ordinea alfabetic a numelui lor. 6. S se afieze toi salariaii care au salariu sub salariul mediu pe instituie i apoi cei care au un salariu sub salariul mediu pe economie (presupunem c salariul mediu pe economie este de 1600000 lei). 7. S se afieze fondul de salarii aferent salariailor cu salariu sub salariul mediu pe instituie. 8. S se afieze salariaii (brbai) care sunt ingineri i sunt cstorii. 9. S se afieze toi salariaii, pe locuri de munc i n ordine alfabetic. 10. S se afieze toi salariaii din secia cu codul 4211, n ordinea descresctoare a salariilor lor. 11. S se afieze salariul minim i salariul maxim din cadrul societii. 12. S se afieze, pentru corectarea unor date personale(nume, adresa, telefon) toi salariaii cu numele POPESCU. 13. S se determine numrul salariailor de sex feminin, necstorii. 14. S se calculeze salariul mediu al salariailor de sex masculin (M) i respectiv de sex feminin (F), pentru a se face o analiz a acestor date. 15. S se afieze pentru salariaii cu salariul mai mic dect 700000 lei, doar numele, locul de munc, salariul, data naterii i starea civil la ecran i imprimant.

73

MODULUL 4 LIMBAJUL DE PROGRAMARE FOXPRO


4.1. Realizarea i gestionarea programelor sub Foxpro
Sistemul Foxpro ofer un mediu integrat i deosebit de performant de programare, care asist utilizatorul pe tot parcursul activitii de realizare i dezvoltare a programelor, cuprinznd etapele: - scrierea i corectarea (editarea) programului surs; - compilarea; - execuia; - depanarea i testarea . Un program reprezint o succesiune de comenzi Foxpro, memorat pe disc ca un fiier, prin care se descrie un algoritm de rezolvare a unei probleme date. De aceea, un program Foxpro se mai numete fiier de comenzi i este salvat cu extensia implicit .PRG. Sub Foxpro au fost implementate toate cele trei tipuri de structuri fundamentale ale programrii structurate i modulare, i anume: structura secvenial structura alternativ structura repetitiv

4.2. Comenzi pentru elaborarea programelor sub FOXPRO


Un program Foxpro reprezint o succesiune de comenzi realizat n conformitate cu regulile limbajului Foxpro, memorat pe disc sub un nume i care rezolv o anumit problem, ndeplinete o anumit sarcin, printr-un anumit algoritm. Programele FOXPRO, numite i fiiere de comenzi, se creaz cu orice editor de texte sau, cel mai comod, cu editorul propriu al sistemului Foxpro, care se acceseaz : - fie cu comanda MODIFY COMMAND - fie prin intermediul meniului Comanda are formatul general: MODIFY COMMAND <nume_fiier> [NOEDIT] [NOWAIT] [RANGE <expN1>,<expN2>] [WINDOW <nume_fer1>] [IN [WINDOW] <nume_fer2>SCREEN] [SAVE] 74

unde: nume_fiier este numele fiierului surs care se va crea sau al celui care se va afia pe ecran pentru editare NOEDIT permite vizualizarea fiierului de comenzi fr a permite modificarea lui NOWAIT permite derularea n continuare a execuiei programului, fr a ine seama de afiarea lui n fereastra de editare RANGE <expN1>,<expN2> cere selectarea i deci afiarea n fereastra de editare, numai a poriunii din text cuprins ntre poziia indicat prin expN1 i cea specificat prin expN2. WINDOW <nume_fer1>] determin afiarea ferestrei cu numele specificat, ca fereastr de editare IN [WINDOW] <nume_fer2>SCREEN face ca fereastra de editare s apar n interiorul ferestrei cu numele specificat prin nume_fer2 sau pe ecran (SCREEN). SAVE face ca fereastra de editare s rmn afiat pe ecran chiar i dup ieirea din fereastra de editare. Execuia unui program poate fi cerut n orice moment n dou moduri: - cu comanda DO - prin intermediul meniului Foxpro Comanda Do are formatul general: DO <nume_fiier><nume_procedur> [WITH <list_parametri>] [IN <fiier>] Comanda cere execuia programului sau a procedurii cu numele specificat. Dac fiierul nu are extensia specificat, atunci comanda va cuta pe disc fiierul cu numele respectiv i, n ordine, cu extensia: .EXE; .APP; .FXP; .PRG Opiunea WITH ofer posibilitatea transmiterii parametrilor programului. Opiunea IN permite execuia unei proceduri din fiierul cu numele specificat (practic specific fiierul n carea fost memorat procedura, pentru a grbi execuia). Deschiderea unui program existent n vederea corectrii se poate face fie: - cu comanda MODIFY COMMAND - activnd opiunea OPEN din submeniul FILE, alegnd apoi tipul de fiier PROGRAM i apoi selectnd fiierul cu numele cutat. Efectul acestor aciuni similare va fi deschiderea ferestrei de editare n cadrul creia este afiat coninutul programului dorit, utilizatorul putnd efectua orice corecie crede de cuviin. Compilarea programelor 75

Compilarea (traducerea unui program surs n cod obiect) se face sub Foxpro n mod automat, la execuia unei comenzi DO, atunci cnd programul nu a fost compilat anterior. Compilarea se poate cere i n mod explicit, printr-o comand de forma: COMPILE <nume_fiier><masc> [ENCRYPT] [NODEBUG] unde: nume_fiier este numele fiierului care se compileaz; Dac se compileaz mai multe fiiere, atunci <masc> reprezint specificatorul multiplu , coninnd caracterele * i ?. opiunea ENCRYPT determin blocarea posibilitii de refacere ulterioar a programului surs din codul obiect generat. opiunea NODEBUG cere compilarea programului fr includerea informaiilor de depanare, rezultnd astfel un program mai mic ca dimensiune. Comanda SET LOGERRORS ONOFF determin, la compilare , crearea unui fiier n care se memoreaz toate mesajele de eroare aprute n timpul compilrii (ON), sau inhib acest lucru (OFF). Fiierul creat va avea acelai nume cu cel surs, dar extensia .ERR.

4.3. Structura secvenial


Este reprezentat de o secven liniar de comenzi Foxpro care se execut una dup alta, n ordinea n care urmeaz. Aceste comenzi au fost descrise la modul de lucru direct, prin fereastra de comenzi. O astfel de structur nu conine comenzi pentru structuri alternative sau repetitive. Ea poate conine comenzi: de introducere i actualizare a datelor, de sortare, ordonare a datelor, de afiare la ecran sau imprimant, de calcul, atribuire, de consultare, regsire a nregistrrii dorite, de modificare sau afiare a structurii, de copiere, tergere sau redenumire a tabelelor, de salt n cadrul tabelei, de calcul cu ajutorul funciilor Foxpro , etc.

4.4. Structura alternativ


Se tie c adeseori, rezolvarea unor probleme de complexitate mare nu poate fi fcut numai prin executarea secvenial a instruciunilor, astfel nct sunt necesare comenzi i funcii care s schimbe aceast ordine. Astfel, sub SGBD Foxpro au fost implementate principalele comenzi i structuri ale programrii structurate, care permit: 76

executarea condiionat a unei secvene de comenzi, n funcie de rezultatul evalurii unei expresii logice - structura alternativ; - executarea repetat a unei secvene de comenzi, sub controlul unei condiii stabilit de programator structura repetitiv. Structura alternativ este implementat sub Foxpro n cele dou forme din programarea structurat, i anume: - Structura cu 2 ramuri ( comanda IF ) - Structura cu mai multe ramuri (comanda DO CASE ). Comanda IF Formatul general al comenzii este: IF <expL> <comenzi1> [ELSE <comenzi2>] ENDIF Comanda funcioneaz astfel: Se evalueaz condiia. Dac este adevrat, se execut toate comenzile care urmeaz, pn la ELSE sau pn la ENDIF (dac lipsete ELSE) i apoi se sare la prima comand de dup ENDIF. Dac este fals, se execut toate comenzile care urmeaz dup ELSE, pn la ENDIF i apoi se trece mai departe, la urmtoarea comand. Exemplu: IF OPT=A DO ADAUG ELSE IF OPT =M DO MODIF ELSE IF OPT =S DO STERG ELSE ?OPTIUNE ERONATA ENDIF ENDIF ENDIF Acelai exerciiu se poate scrie i astfel: IF OPT=A DO ADAUG 77

ENDIF IF OPT=M DO MODIF ENDIF IF OPT=S DO STERG ENDIF Comanda DO CASE Are formatul general: DO CASE CASE <expresie1> <comenzi1> CASE <expresie2> <comenzi2> . . [OTHERWISE <comenziN> ENDCASE Comanda funcioneaz astfel: Se evalueaz prima expresie care urmeaz clauzei CASE. Dac aceasta este adevrat, se execut secvena de comenzi care i urmeaz, pn la urmtorul CASE, dup care se trece la prima comand de dup ENDCASE. Dac aceasta nu este adevrat, se trece i se evalueaz expresia2, corespunztoare urmtorului CASE i se procedeaz la fel i aa mai departe. Dac nici una din condiii (expresii) nu este adevrat se execut secvena de comenzi care succede fraza OTHERVISE (dac aceasta exist), sau se transfer controlul dup ENDCASE. Oricum, se va executa doar secvena de comenzi aferent condiiei adevrate, dup care se va trece dup ENDCASE. Se observ deci, c la prima expresie gsit adevrat se execut comenzile corespunztoare dup care se iese din comand i se continu programul cu prima comand de dup ENDCASE. Acest lucru nseamn c expresiile, condiiile trebuie s fie formulate corect, trebuie s se exclud reciproc. Dac mai multe condiii ataate clauzelor CASE sunt adevrate, se execut doar grupul de comenzi aferent primeia dintre 78

ele, n ordinea n care efectiv au fost scrise - ceea ce probabil c nu este foarte corect. Exemplu: DO CASE CASE OPT=A DO ADAUG CASE OPT=M DO MODIF CASE OPT=S DO STERG OTHERWISE ? OPIUNE ERONAT ENDCASE

4.5. Structura repetitiv


Structura repetitiv, denumit i ciclu de program, permite reluarea execuiei unei secvene de comenzi de un numr de ori. n Foxpro au fost implementate numai dou din cele 3 structuri repetitive din programarea structurat, i anume cele condiionate anterior. Structura repetitiv condiionat posterior nu are coresponden n Foxpro, dar poate fi simulat. Astfel, au fost implementate sub SGBD Foxpro urmtoarele tipuri de structuri repetitive: a) structura repetitiv condiionat anterior comanda DO WHILE b) structura repetitiv condiionat anterior cu numrtor comanda FOR c) structura specific sistemului Foxpro, care parcurge automat o tabel de date, n mod condiionat comanda SCAN a) Structura repetitiv condiionat anterior Comanda DO WHILE Are sintaxa: DO WHILE <expL> <comenzi> [LOOP] [EXIT] ENDDO Comanda funcioneaz astfel: 79

Se evalueaz expresia (condiia) specificat. - Dac este adevrat, se execut secvena de comenzi care urmeaz, pn la ENDDO, dup care controlul trece din nou la DO WHILE, pentru a testa condiia. - Dac este fals, ciclul se ncheie i controlul este trecut la prima instruciune de dup ENDDO. Opiunea LOOP cere reluarea ciclului iniiat prin DO WHILE - fr a se mai parcurge deci comenzile care ar mai exista pn la sfritul ciclului. Opiunea EXIT cere ieirea forat din ciclu , cu salt necondiionat la prima comand de dup ENDDO. Exemplu: 1. Se afieaz din tabela PERS numele i salariul tuturor persoanelor existente. CLEAR USE PERS DO WHILE NOT EOF() ? NUME ?? , ?? SAL SKIP ENDDO CLOSE ALL 2. S se indexeze salariile personalului astfel: pentru cei cu salariul mai mic dect 400000 cu 50%, pentru ceilali cu 25%. USE PERS DO WHILE NOT EOF() IF SAL<400000 REPL SAL WITH SAL*1.50 ELSE REPL SAL WITH SAL*1.25 ENDIF SKIP ENDDO 3. S se mreasc salariul persoanelor care au mai puin de 500000 cu 250000. USE PERS DO WHILE NOT EOF() 80

IF SAL < 500000 REPL SAL WITH SAL+250000 ENDIF SKIP ENDDO 4. Fiind dat tabela PERS (nume, functie, sal, adresa, tel, locm) s se calculeze i s se afieze suma fondului de salarii pe locuri de munc. - Problema se poate rezolva elegant i uor cu generatorul de rapoarte, cu opiune de obinere a unor subtotaluri la nivel de loc de munc, cu condiia ca tabela s fie indexat dup valorile cmpului LOCM. - Se poate scrie ns i un program de listare, cu totalizarea valorilor cmpului SAL pentru fiecare loc de munc, astfel: USE PERS INDEX ON LOCM TO IPERS USE PERS INDEX IPERS TOTG=0 DO WHILE NOT EOF() WLOC=LOCM TOTAL=0 DO WHILE NOT EOF() AND LOCM=WLOC TOTAL=TOTAL+SAL SKIP ENDDO ?WLOC ?? ??TOTAL SALARII: ?? TOTAL TOTG=TOTG+TOTAL ENDDO ?TOTAL GENERAL ?? TOTG CLOSE ALL b) Structura repetitiv condiionat anterior cu numrtor Comanda FOR Are sintaxa: FOR <variabil>=<exp1> TO <exp2> [STEP <exp3>] 81

<secven_de_comenzi> [EXIT] [LOOP] ENDFORNEXT unde: Variabil este o variabil de memorie cu rol de contor, care va numra de cte ori se execut ciclul cuprins ntre FOR i ENDFOR. Contorul va fi iniializat automat prin valoarea precizat prin exp1 i va fi mrit, dup fiecare execuie a ciclului, cu o valoare egal cu cea precizat prin exp3 (valoare numit pas). Pasul este opional, deci poate lipsi; atunci el este considerat automat egal cu 1. Exp2 precizeaz valoarea final a contorului i deci stabilete pn cnd are loc reluarea ciclului. Comanda funcioneaz astfel: - Se iniializeaz (variabila cu valoarea iniial, precizat prin exp1. - Se compar valoarea contorului cu cea final, definit prin exp3. - Dac este mai mic sau egal se va executa secvena de comenzi cuprins ntre FOR i ENDFOR sau NEXT. - Dac este mai mare dect valoarea final, atunci execuia comenzii FOR nceteaz i se continu cu urmtoarea comand din program de dup ENDFOR sau NEXT. - Opiunea EXIT cere ieirea forat din ciclu, indiferent de valoarea contorului Opiunea LOOP determin reluarea comenzii FOR , fr a mai executa restul comenzilor cuprinse ntre LOOP i ENDFOR. Exemplu: 1. S se calculeze suma primelor 20 de numere naturale . CLEAR S=0 FOR I=1 TO 20 S=S+I ENDFOR ?SUMA PRIMELOR 20 NUMERE NATURALE ESTE ?? S 2. S se calculeze suma salariilor pentru primele 20 de persoane din tabela PERS. CLEAR 82

USE PERS S=0 FOR I=1 TO 20 S=S+SAL SKIP ENDFOR ?SUMA SALARIILOR PENTRU PRIMELE 20 PERSOANE ESTE ?? S CLOSE ALL c). Structura specific sistemului Foxpro, care parcurge automat o tabel de date, n mod condiionat Comanda SCAN Are sintaxa: SCAN [NOOPTIMIZE] [<Scop>] [FOR <expL1>] [WHILE <expL2>] <secven_de_comenzi> [EXIT] [LOOP] ENDSCAN Ca efect al acestei comenzi, se parcurge tabela activ executndu-se secvena de comenzi cuprins ntre SCAN i ENDSCAN pentru fiecare nregistrare sau numai pentru cele din domeniul specificat prin Scope sau numai pentru cele care ndeplinesc condiia specificat prin FOR sau WHILE. Comanda SCAN incrementeaz automat pointerul de nregistrare cu 1 i asigur astfel automat trecerea la urmtoarea nregistrare. Opiunea LOOP cere reluarea execuiei comenzii SCAN fr a mai parcurge comenzile cuprinse ntre SCAN i ENDSCAN. Opiunea EXIT asigur ieirea forat din ciclul realizat cu SCAN. Exemplu: S se afieze din tabela PERS , pentru persoanele care au salariul mai mare de 3000000, numele i salariul. USE PERS SCAN IF SAL>3000000 ? nume ?? ??sal 83

ENDIF ENDSCAN

4.6. Programarea pe evenimente


Pentru fiecare eveniment care poate s apar n execuia unei aplicaii exist un mecanism care trateaz unitar aceste evenimente i asociaz fiecrui eveniment aciunile care trebuie executate. Exist mecanisme pentru tratarea urmtoarelor categorii de evenimente: a) Evenimente legate de lucru cu meniuri. Aceste mecanisme permit asocierea fiecrei opiuni dintr-un meniu complex cu efectuarea unei aciuni care va fi executat atunci cnd opiunea respectiv a fost selectat. Aceste aciuni se definesc n acest caz prin comenzile ON PAD, ON BAR sau ON SELECTION; b) Evenimente legate de lucru cu ferestre (activarea, dezactivarea, afiarea, redimensionarea sau mutarea unei ferestre). c) Evenimente legate de apsarea unei taste sau a unei combinaii de taste. La apsarea unei taste pentru care a fost definit o aciune, programul se ntrerupe, indiferent de secvena care se deruleaz n momentul respectiv i se execut aciunea asociat tastei. Dup execuia aciunii se va relua execuia programului din punctul n care a fost ntrerupt. Aciunile care se pot executa la apsarea unei taste se declar cu ajutorul comenzilor ON KEY, ON KEY LABEL i ON ESCAPE; d) Evenimente legate de detectarea etichetei de sfrit de fiier EOF. Detectarea acestei etichete se face cu funcia EOF() i n momentul detectrii ei programul execut o aciune definit anterior.

4.7. Comenzi pentru afiarea formatat a datelor


Afiarea formatat const n principal n plasarea informaiilor pe ecran i/sau imprimant n poziiile indicate de utilizator. Ea se realizeaz cu comanda @, care poate avea mai multe formate generale, dintre care le vom descrie pe cele mai uzuale.

4.7.1. Format de afiare


@ L,C SAY <expresie> [PICTURE <exprC1>] [FUNCTION <exprC2>] [COLOR SCHEME <expN>COLOR <list_culori>] unde: 84

L,C reprezint coordonatele punctului de pe ecran sau imprimant de unde dorim s nceap afiarea., exprimate prin: L numr linie C numr coloan Facem urmtoarele precizri: Dac afiarea se face pe ecran: - L poate lua valori cuprinse ntre 1 i 23. - C poate lua valori cuprinse ntre 0 i 79. Dac afiarea se face la imprimant: - L poate lua valori cuprinse ntre 0 i 254. - C poate lua valori cuprinse ntre 0 i 254. Indicarea coordonatelor se poate face : n mrime absolut, sub form de constante numerice sub form relativ, prin variabile de memorie sau expresii din evaluarea crora rezult valorile ateptate. Exemplu: @ 2,7 Say Curs baze de date L=2 @ L,7 Say Curs baze de date @ L+1,7 Say Curs baze de date n mod normal, fr nici o precizare, comanda @ se adreseaz ecranului. Pentru ca afiarea cu comanda @ s se transmit i la imprimant, e necesar ca n prealabil s fie dat comanda: SET DEVICE TO PRINT @ 3,5 Say Afiarea a fost direcionat ctre imprimant @ 4,5 Say Afiarea se produce i la imprimant Revenirea la ecran pentru comanda @ se va face cu comanda: SET DEVICE TO SCREEN @ 3,5 Say Afiarea a fost direcionat ctre ecran @ 4,5 Say Afiarea se produce numai la ecran Clauza SAY permite deci afiarea pe ecran sau imprimant, ncepnd din punctul indicat prin coordonate, a valorii expresiei specificate, dup ce aceasta a fost evaluat. Expresia poate fi : un ir de caractere care se va afia ca atare, o variabil de orice tip al crei coninut va fi afiat, o expresie de tip numeric sau ir de caractere al crei rezultat se va afia. Formatul de afiare poate fi : - formatul implicit - formatul specificat prin clauza PICTURE sau FUNCTION 85

Dac se specific o variabil, aceasta poate fi: - un cmp de date din tabela activ - o variabil de memorie independent Dac a fost specificat un cmp de date, atunci formatul de afiare implicit va fi cel din structur (deci se cunoate i nu mai trebuie precizat prin clauza Picture, dect dac se dorete schimbarea lui). Dac a fost specificat o variabil de memorie sau o expresie de calcul numeric, atunci formatul de afiare nu se cunoate, nu este definit i va fi imprevizibil, funcie de coninutul actual al variabilei sau de rezultatul obinut din calcul. n aceste cazuri este bine s precizm noi formatul de afiare dorit prin clauza PICTURE. Exemple: @ 5,7 Say sal @ 5,7 Say sal/3 formatul de afiare va fi cel din structur formatul de afiare va fi imprevizibil, funcie de rezultat @ 5,7 Say sal/3 PICTURE 999999 formatul de afiare pe 6 cifre, numai parte ntreag Opiunea PICTURE <expr_C> specific formatul de afiare dorit de utilizator. Formatul de afiare precizeaz, prin intermediul codurilor de afiare: - natura datei afiate - lungimea de afiare, exprimat n numr de poziii Coduri de afiare tip PICTURE: Semnificaie Caractere alfabetice Date de tip logic Litere i cifre Orice fel de caractere sau combinaie a acestora Constantele logice Y,y N sau n (convertite n litere mari) Ca date de tip caracter permite numere, iar ca date de tip numeric numai numere i eventual semne algebrice i punct zecimal. Permite cifre, semne algebrice i spaii Convertete literele mici, dac exist, n litere mari corespunztoare Afieaz semnul monetar curent, aa cum a fost definit prin SET CURRENCY) Afieaz caracterul * n locul spaiilor rmase libere n faa

Cod A W N X Y 9 # ! $ * 86

. ,

numerelor precizeaz poziia punctului zecimal Separ, dac se dorete, grupele de cte 3 cifre de la ntregi.

Opiunea FUNCTION <expr_C2> permite specificarea formatului de afiare dorit prin intermediul unor coduri globale , pe care le prezentm n tabelul de mai jos: Coduri de afiare tip FUNCTION: Cod Semnificaie A Permite numai caractere alfabetice B Aliniaz la stnga datele numerice (n cmpul de ieire) C Afieaz CR (CRedit) dup un numr pozitiv. Se utilizeaz doar pentru SAY i date numerice. D Afieaz data calendaristic n formatul curent, cerut prin SET DATE. E Afieaz data calendaristic n format european I Centreaz textul n interiorul cmpului. J Aliniaz la dreapta textul afiat K Selecteaz ntregul cmp pentru editare atunci cnd se mut cursorul n el L Afieaz zerourile de la nceputul datelor numerice M<lis Specific alegerea funciilor multiple (n list funciile fiind separate prin t> virgul) R Permite ca, atunci cnd se folosesc i alte combinaii de caractere dect codurile PICTURE permise, acestea s fie afiate pe ecran, fr a fi memorate n variabila respectiv S<n> Limiteaz afiarea la un numr de caractere egal cu n, unde n este numr natural. T Elimin la afiare spaiile de la nceput i de la sfrit X Afieaz DB (DeBit) dup un numr negativ. Se utilizeaz doar pentru SAY i date numerice. Z Afieaz numai spaii dac valoare cmpului este 0. Se utilizeaz doar pentru date numerice. ( Numerele negative vor fi cuprinse ntre paranteze. Se utilizeaz doar pentru SAY i date numerice. ! Convertete literele mici, dac exist, n majuscule. ^ Afieaz numerele n format tiinific. $ Afieaz simbolul curent al monedei. 87

Codurile de tip FUNCTION pot fi incluse n irul de caractere al clauzei PICTURE, dac se afl la nceputul acestui ir i sunt precedate decaracterul @. Codurile FUNCTION se despart de cele PICTURE printr-un spaiu. Opiunea COLOR <list_culori> permite alegerea culorilor dorite la afiare. Opiunea COLOR SCHEME <expN> permite precizarea unui numr prin care se alege o combinaie (chem) de culori prestabilit. Exemple: a. S se afieze pe ecran un ir de caractere alfabetice , n litere mari. Se poate specifica formatul de afiare n mai multe forme, echivalente ca efect. SIR=Buna ziua ir cu lungimea de 9 caractere @ 5,7 SAY SIR PICTURE aaaaaaaaa FUNCTION ! @ 5,7 SAY SIR PICTURE aaaaaaaaa FUNCTION a! @ 5,7 SAY SIR PICTURE @! aaaaaaaaa @ 5,7 SAY SIR PICTURE @a !!!!!!!!! @ 5,7 SAY SIR PICTURE !!!!!!!!! b. S se afieze pe imprimant nregistrarea numrul 3 din tabela PERS (numai numele,adresa i telefonul): USE PERS GO 3 SET DEVICE TO PRINT Se activeaz imprimanta @ 5,7 SAY nregistrarea dorit este @ 7,7 SAY NUME @ 7,30 SAY ADRESA @ 7,60 SAY TEL SET DEVICE TO SCREEN Se dezactiveaz imprimanta CLOSE ALL

4.7.2. Format de afiare i citire


@ L,C [SAY <opiuni>] GET <variabil> [PICTURE <exprC1>] [FUNCTION <exprC2>] [DEFAULT <exp1>] [ENABLEDISABLE] [MESSAGE <exprC3>] [[OPEN] WINDOW <nume_fereastr>] [RANGE [<exp2>] [,<exp3>]] [SIZE <expN1>,<expN2>] [VALID <expL1><expN3>] ERROR <expC4>]] [WHEN <expL2>] [COLOR SCHEME <expN4>COLOR <list_culori>] 88

Clauza GET are ca efect afiarea n videoinvers a coninutului curent al variabilei specificate, permind i editarea (modificarea) acesteia, dac este urmat de comanda READ. Ea este admis numai pentru ecran, spre deosebire de SAY care permitea i afiarea la imprimant. Afiarea se realizeaz din punctul de coordonate precizat, dac nu exist SAY, sau din punctul de unde a rmas poziionat cursorul dup execuia clauzei SAY. Celelalte opiuni au urmtoarea semnificaie: DEFAULT <exp1> specific valoarea implicit pentru variabila asociat lui GET. Dac ea a fost iniializat nainte de @ ...GET, atunci clauza Default va fi ignorat. ENABLE - permite accesul la cmpul afiat cu GET. DISABLE nu permite accesul la cmpul afiat cu GET. MESSAGE <exprC3> - permite afiarea expresiei (mesajului) specificate. Afiarea se face pe ultima linie a ecranului, iar cnd este specificat comanda: SET MESSAGE TO <expN>, mesajul este afiat pe linia al crui numr a rezultat dup evaluarea expresiei precizate. [OPEN] WINDOW <nume_fereastr> - permite editarea unui cmp de tip memo n fereastra cu numele specificat, care trebuie s fi fost definit anterior. Cu OPEN se cere ca ferestra respectiv s fie n mod implicit deschis. RANGE [<exp2>] [,<exp3>] precizeaz, dac se dorete acest lucru, limitele intervalului de valori n care trebuie s se ncadreze valoarea introdus de la tastatur n variabila asociat cu GET. SIZE <expN1>,<expN2> - precizeaz dimensiunile spaiului de editare, exprimate n numr de linii pentru nlime (expN1) i n numr de coloane pentru lime (expN2). VALID <expL1><expN3> [ ERROR <expC4>] permite validarea valorilor introduse n variabila asociat lui GET conform expresiei specificate (logic sau numeric). Astfel, dac expL1 este adevrat, atunci valoarea introdus se consider corect i invers. Dac valoarea nu este corect i dac a fost precizat cluza ERROR, atunci pe ecran se afieaz mesajul specificat i procesul de introducere/verificare a valorii continu pn cnd condiia este ndeplinit sau se apas tasta Escape. WHEN <expL2> - precizeaz condiia de acces la variabila asociat lui GET. Dac expresia este adevrat, cursorul se poziioneaz pe cmpul respectiv i permite accesul la el, altfel, accesul nu e permis iar cursorul sare la cmpul urmtor. 89

COLOR SCHEME <expN4>COLOR <list_culori> - au aceeai semnificaie ca i la @ ...SAY. Comanda READ are ca efect activarea ieirilor comenzilor GET sau EDIT pentru a realiza citirea propriu-zis a noilor valori n cmpurile specificate. Practic, comanda Read ntrerupe execuia programului i, pe imaginea afiat pe ecran cu ajutorul comenzilor SAY i GET sau EDIT poziioneaz cursorul pe cmpul asociat primului GET, ateptnd introducerea de la tastatur a unei valori ce va fi eventual i validat. Formatul general al comenzii READ este: READ [CICLE] [ACTIVATE <expL1>] DEACTIVATE <expL2>] [MODAL] [WITH <list_nume_ferestre>] [VALID <expL3><expN1>] [WHEN <expL4>] [TIMEOUT <expn2>] [NOCONSOLE] [NOMOUSE] [LOCKNOLOCK] [COLOR SCHEME <expN3>COLOR <list_culori>] unde: CICLE determin continuarea comenzii READ chiar dup ieirea din ultimul cmp asociat cu GET, cu un salt pe primul cmp asociat cu GET (reluarea execuiei). n acest caz, terminarea execuiei comenzii se va face apsnd pe tasta <Esc> sau Ctrl/W sau controlat de clauza VALID sau TIMEOUT. ACTIVATE <expL1> - determin, funcie de valoarea expresiei logice specificate, trecerea sau nu la citirea cmpurilor definite ntr-o alt fereastr. DEACTIVATE <expL2> - stabilete, funcie de valoarea expresiei specificate, dac READ este sau nu terminat. MODAL inhib afiarea altor ferestre , cu excepia celor implicate n READ. WITH <list_nume_ferestre> - permite ca ferestre care nu conin cmpuri asociate cu GET s poat participa la READ. Aa pot fi ferestre Browse, ferestre de editare, etc. Ca efect, vor fi afiate pe ecran ferestrele implicate n READ i cele specificate n lista WITH. VALID <expL3><expN1> - permite controlul asupra relurii, dac este cazul, a execuiei comenzii READ, cu ajutorul unei expresii logice sau numerice, astfel: Pentru expresie logic: - dac valoarea este .T. atunci comanda READ se ncheie iar programul continu cu prima comand de dup Read; - dac valoarea este .F. atunci comanda READ se continu, cursorul rmnnd pe acelai cmp asociat cu GET sau pe primul. 90

Pentru expresie numeric, aceasta se evalueaz i returneaz un numr care va reprezenta numrul cmpului (obiectului) Get pe care se va poziiona cursorul.Dac nu exist un astfel de obiect (cu acest numr), atunci Read se ncheie i se va trece la prima comand de dup Read. WHEN <expL4> - permite execuia comenzii READ numai dac valoarea expresiei logice specificate este .T. (adevrat). Altfel, comanda READ este ignorat (nu se execut deloc) i se trece la comanda imediat urmtoare din program. TIMEOUT <expn2> - servete pentru a limita timpul ct comanda READ ateapt de la utilizator introducerea unor valori de la tastatur n cmpul asociat cu GET curent. Acest timp, exprimat n secunde, este dat de expresia numeric specificat . Dac utilizatorul nu apas nici o tast n ntervalul respectiv de timp, comanda READ este automat terminat. NOMOUSE mpiedic selectarea obiectelor prin intermediul mouseului, permind accesul la ele doar prin intermediul tastaturii. LOCKNOLOCK permite blocarea automat sau nu a accesului la cmpurile citite cu READ pentru lucrul n reea. COLOR SCHEME <expN3>COLOR <list_culori> - permite, aa cum se tie, alegerea culorilor la afiare Exemple: S se afieze pe ecran prima nregistrare din tabela PERS pe o machet de forma: NUME: MARCA: LOC MUNC: DATA NATERII: ADRESA: TELEFON: FUNCTIA: SALARIUL DE NCADRARE: i s permit modificarea oricreia dintre datele afiate. CLEAR USE PERS @ 5,1 SAY NUME: GET NUME @ 5,30 SAY MARCA: GET MARCA @ 5,50 SAY LOC MUNCA: GET LOCM @ 7,1 SAY DATA NATERII: GET DATAN @ 7,24 SAY TELEFON: GET TEL @ 7,47 SAY ADRESA: GET ADRESA @ 9,1 SAY FUNCIA: GET FUNCT @ 5,40 SAY SALARIUL DE NCADRARE: GET SAL READ CLOSE ALL 91

4.7.3. Afiare formatat i lucrul cu butoane de control


Se tie c videoformatele pentru citirea i afiarea dorit a datelor pe ecran pot conine i diverse butoane (obiecte) de control. Un buton reprezint o zon de pe ecran prin care sistemul Foxpro comunic cu utilizatorul ntr-un mod eficient, elegant, plcut. Butoanele se definesc cu ajutorul comenzii @ cu GET i PICTURE i/sau FUNCTION i se activeaz efectiv cu comanda READ. Pentru a defini un buton trebuie precizate urmtoarele elemente: Textul explicativ al butonului care se specific n mod explicit ntr-o clauz de tip PICTURE sau FUNCTION. Acest text poate conine, la nceput sau n interiorul su, caractere speciale cu urmtoarea semnificaie: \<liter> litera respectiv va fi liter luminoas n textul afiat i tast direct de selectare; \\ dezactiveaz butonul respectiv; \! declar butonul implicit ( la cele de tip PUSH) \? declar butonul de ieire Caracteristicile butonului se stabilesc prin codurile de format din clauzele PICTURE sau FUNCTION. Acestea pot fi: 1) tipul butonului, care se specific prin opiunile: * reprezint un buton de aciune (declanator); *R reprezint un buton de tip Radio; C reprezint un comutator (Check Box); & reprezint o list; ^ reprezint un meniu vertical; I reprezint un buton invizibil. 2) modul de citire pe care o controleaz, exprimat prin: T reprezint citire terminal; N reprezint citire neterminal. 3) modalitatea de afiare pe ecran, care poate fi: H afiare pe orizontal; V afiare pe vertical. Tipul de aciune declanat de selectarea butonului n acest sens trebuie fcute urmtoarele precizri: Dac butonul a fost cu citire terminat, atunci aciunea se definete dup comanda READ de citire a butonului. Pentru butonul cu citire neterminat, aciunea se definete n clauza VALID asociat butonului.

92

Dup selectarea butonului, n variabila asociat butonului se va memora fie textul butonului, fie poziia acestuia sau starea lui n cazul n care este comutator. Sub Foxpro au fost implementate urmtoarele tipuri de astfel de butoane: Check box sau buton Check este de fapt un comutator cu dou stri folosit pentru a alege ntre dou valori posibile: adevrat sau fals. El apare pe ecran cu [] avnd un text explicativ n dreapta. Dac este activat apare [x], altfel apare [ ]. Comanda pentru crearea unui comutator are formatul: @ L,C GET <variabil> [PICTURE <exprC1>] [FUNCTION <exprC2>] [DEFAULT <exp1>] [ENABLEDISABLE] [MESSAGE <exprC3>] [SIZE <expN1>,<expN2>] [VALID <expL1><expN3>] [WHEN <expL2>] [COLOR SCHEME <expN4>COLOR <list_culori>] READ unde: L,C reprezint coordonatele punctului de pe ecran unde va apare comutatorul. Efectul alegerii fcute de utilizator se va memora n variabila specificat, care va trebui s fie de tip logic sau numeric, la execuia comenzii READ. Dac este de tip numeric, valoarea nul nseamn buton neselectat, n timp ce o valoare diferit de 0 va nsemna buton activat. Dac este de tip logic, valoarea de adevrat nseamn buton selectat, n timp ce fals nseamn buton neactivat. Precizarea faptului c definim un buton check sau comutator se va face astfel: - FUNCTION *C Activ sau - PICTURE @*C Activ sau - FUNCTION *C PICTURE Activ Opiunea SIZE stabilete dimensiunea butonului pe ecran . nlimea acestuia va fi totdeauna = un caracter, dar a doua expresie va preciza limea butonului. Celelalte opiuni au acelai efect ca la comanda de afiare formatat cu citirea datelor. Exemple: CLEAR 93

ACTIV=.T. @ 2,5 GET ACTIV FUNCTION *C Activ READ Sau @ 2,5 GET ACTIV PICTURE @*C Activ READ Sau @ 2,5 GET ACTIV FUNCTION *C PICTURE Activ READ Butonul list sau pe scurt, lista este un element similar unei liste obinuite, care permite selectarea unui singur element dintr-o list afiat total sau parial pe ecran, n interiorul unui cadran, avnd elementele dispuse n plan vertical. Dac lista e parial, n dreapta apare o bar de defilare, care va permite defilarea listei n cadran. n acest caz, comanda @ se prezint astfel: @ L,C GET <variabil><cmp> FROM <masiv> [POPUP <nume_submeniu>] [PICTURE <exprC1>] [FUNCTION <exprC2>] [DEFAULT <exp1>] [ENABLEDISABLE] [MESSAGE <exprC3>] [SIZE <expN1>,<expN2>] [VALID <expL1><expN3>] [WHEN <expL2>] [COLOR SCHEME <expN4>COLOR <list_culori>] READ unde: L,C reprezint coordonatele punctului din stnga sus al cadranului n care se va afia lista Elementele listei pot fi preluate fie dintr-un masiv, caz n care se folosete opiunea FROM masiv, fie dintr-un submeniu, caz n care se utilizeaz opiunea POPUP nume_submeniu. Variabila sau cmpul de date precizate la GET servesc pentru a memora selecia fcut de utilizator i trebuie s fie de tip numeric sau ir de caractere. Dac este de tip numeric, va memora poziia din list a elementului selectat. Dac este de tip ir de caractere, va memora chiar textul elementului selectat. Opiunile specifice: - FUNCTION &T sau &N pentru list Terminat sau Neterminat; - PICTURE @&T sau @&N pentru list Terminat sau Neterminat; 94

Exemple: Dintr-o list de opiuni posibile, s se scrie secvena de comenzi pentru alegerea unei opiuni. Realizai o list ascuns cu opiunile respective. CLEAR DIMENSION OPTIUNI[4] OPTIUNI[1]= Adaugare OPTIUNI[2]= Modificare OPTIUNI[3]= Stergere OPTIUNI[4]= Terminare OPT=Terminare @ 10,2 SAY Alegei opiunea dorit: GET OPT FUNCTION & FROM OPTIUNI SIZE 20,2 MESSAGE OPTIUNI READ CLEAR @ 15,10 SAY OPTIUNEA ALEASA ESTE @ 15,33 SAY OPT Buton popup sau Lista ascuns este asemntor listei simple, cu deosebirea c pe ecran apare afiat, n orice moment dinaintea activrii, elementul curent selectat, cuprins ntr-un chenar cu marginea inferioar dubl. La activare, lista se prezint sub forma unui meniu vertical, din care elementul dorit se selecteaz cu tastele Enter sau Space. Formatul comenzii se prezint astfel: @ L,C GET <variabil> [PICTURE <exprC1>] [FUNCTION <exprC2>] [DEFAULT <exp1>] [FROM <masiv>] [ENABLEDISABLE] [MESSAGE <exprC3>] [SIZE <expN1>,<expN2>] [VALID <expL1><expN3>] [WHEN <expL2>] [COLOR SCHEME <expN4>COLOR <list_culori>] READ unde: - L,C - reprezint coordonatele colului din stnga sus al listei - variabila poate fi o variabil de memorie, un element al unui masiv sau un cmp de date din tabela activ, n care se va memora fie poziia elementului selectat n list fie chiar textul corespunztor al acestuia, dup cum este de tip numeric sau ir de caractere. Opiuni specifice: - FUNCTION ^ 95

PICTURE @^

Exemple: 1. List ascuns terminal CLEAR terge ecranul n=1 @ 5,5 GET n FUNCTION ^T Luni,Mari,Miercuri,Joi,Vineri READ 2. List ascuns neterminal CLEAR terge ecranul a=Luni @ 5,5 GET a FUNCTION ^N Luni,Mari,Miercuri,Joi,Vineri READ 3. List ascuns neterminal cu taste directe de selectare CLEAR terge ecranul a=Luni @ 5,5 GET a PICTURE @^N \<Luni,\<Mari,Mie\<rcuri,\<Joi,\<Vineri READ 4 List ascuns cu dou elemente dezactivate (Miercuri i Joi) CLEAR terge ecranul a=Luni @ 5,5 GET a PICTURE @^N Luni,Mari,\Miercuri,\Joi,Vineri READ Butonul PUSH sau declanator are ca efect declanarea unei aciuni i apare pe ecran sub forma a dou paranteze unghiulare care ncadreaz un text explicativ. Pot fi definite mai multe declanatoare, pentru care se precizeaz atributele cu ajutorul opiunilor PICTURE i FUNCTION. n plus, un declanator poate fi: - declanator implicit , care este selectat n mod automat la apsarea tastelor Ctrl/Enter i care apare pe ecran marcat ntre paranteze unghiulare duble <<text>>. - declanator Escape, care se prezint ca unul normal, dar care este selectat automat la acionarea tastei Escape.

96

Se definete cu comanda @ avnd urmtorul format general: @ L,C GET <variabil> [PICTURE <exprC1>] [FUNCTION <exprC2>] [DEFAULT <exp1>] [ENABLEDISABLE] [MESSAGE <exprC3>] [SIZE <expN1>,<expN2>] [VALID <expL1><expN3>] [WHEN <expL2>] [COLOR SCHEME <expN4>COLOR <list_culori>] READ unde: - L,C reprezint coordonatele primului buton definit - variabila poate fi o variabil de memorie sau un cmp de date din tabela activ Opiuni specifice: - FUNCTION * - PICTURE @* Exemple: 1. CLEAR a=Start @ 5,5 GET a FUNCTION * Start,Stop READ 2 Declanatoare cu taste directe de selectare CLEAR a=Start @ 5,5 GET a FUNCTION * \<Start,S\<top READ 3 CLEAR a=Start @ 5,5 GET a PICTURE @* Start,Stop READ Butonul invizibil sau declanatorul invizibil este un declanator care nu apare pe ecran, dei exist acolo. De regul deasupra lui se afieaz un text cu ajutorul comenzilor @ cu SAY, fr s i se afecteze caracterul de declanator. Se definete cu comanda @ cu formatul general asemntor cu cel de la declanatorul simplu, dar se specific caracterele de control aferente: - FUNCTION *! - PICTURE @*! 97

Variabila va memora poziia declanatorului invizibil selectat (numrul lui de ordine n cadrul listei). Printr-o comand @ cu GET cu codul FUNCTION *! se poate creea un buton invizibil sau mai multe astfel de butoane. Pentru a crea mai multe butoane, se ataeaz, la distan de un spaiu de codul specific *! cte un caracter ; pentru fiecare declanator suplimentar. Butonul radio permite selectarea unui singur element dintr-o list de elemente afiate pe ecran. Selectarea unui astfel de buton atrage deselectarea automat a vechiului element selectat. Se prezint sub forma a dou paranteze () urmate de un text explicativ. Butonul selectat este marcat cu (.) Se definete cu comanda @ cu GET, cu formatul asemntor celorlalte butoane, numai c se vor preciza caracterele de control specifice i anume: - FUNCTION *R - PICTURE @*R Se pot defini i celelalte atribute ale unui buton: Terminal, Neterminal, (H) orizontal,Vertical, dezactivat sau cu tast direct de selectare. Exemplu: CLEAR @ 5,5 SAY Alegei ziua convenabila zi=Luni @ 8,8 GET zi FUNCTION *RTV \<Luni;\<Marti;mie\<Rcuri;\<Joi;\<Vineri;\\ \<Simbata;\\ \<Duminica READ Precizri: Variabila ZI va conine numele zilei selectate prin poziionare sau prin acionarea tastei luminoase. Se tie c R semnific un buton Radio, T un buton de tip terminal, iar V butoane dispuse vertical. Ele vor apare pe ecran astfel: () Luni () Marti () MieRcuri () Joi () Vineri () Simbata () Duminica

98

4.8. Proceduri i funcii definite de utilizator


Complexitatea din ce n ce mai mare a problemelor ce se impun rezolvate cu calculatorul, dimensiunea tot mai mare a coleciilor de date ce trebuie prelucrate impun un efort de analiz, proiectare, programare i implementare a aplicaiilor tot mai mare i mai costisitor. De aceea, descompunerea problemei, a algoritmului de rezolvare n elemente funcionale de sine stttoare, stabilirea corect a relaiilor dintre aceste elemente i ierarhizarea lor fa de ansamblu constituie o prioritate n activitatea de proiectare. Abordarea modular a problemelor duce la realizarea procedurilor, ca secvene logice de comenzi Foxpro, apelabile prin nume dintr-un program, care pot realiza diverse funcii. O procedur returneaz controlul programului apelant, la comanda imediat urmtoare celei care a apelat-o. Se returneaz simultan i rezultatele de natur local sau global obinute din prelucrare. Procedura se definete cu comanda: PROCEDURE <nume_procedur> i se termin totdeauna cu RETURN Apelul unei proceduri se face cu comanda DO <nume_procedur> [WITH <list_parametri>] [IN <nume_fiier_proceduri>] unde: - nume_procedur este numele cu care a fost denumit procedura n comanda PROCEDURE. - clauza IN este opional i specific, dac este cazul, numele fiierului n care a fost memorat procedura. -

4.9. Comenzi pentru lucru cu ferestre


Fereastra este un element important al sistemului Foxpro, reprezentnd o poriune de ecran tratat ca un un tot unitar, cu anumite caracteristici, care fac posibil realizarea unei interfee plcute, atractive i uor de manipulat pentru utilizatorul de orice tip. Sistemul Foxpro lucreaz cu ferestre proprii, cum sunt cea de comenzi, de editare, de tip Browse, etc... dar permite i definirea unor ferestre de ctre utilizator. Lucrul cu ferestre presupune parcurgerea urmtorilor pai: 99

se definesc ferestrele, cu comanda DEFINE WINDOW, cnd se precizeaz i caracteristicile lor; - se afieaz pe ecran cu comenzile ACTIVATE WINDOW sau SHOW WINDOW - se nltur de pe ecran cu comenzileDEACTIVATE WINDOW sau HIDE WINDOW - se nltur din memorie i de pe ecran cu comenzile CLEAR WINDOWS sau RELEASE WINDOWS Definirea unei ferestre: DEFINE WINDOW <nume_fer> FROM <l1,c1> TO <l2,c2> [IN [WINDOW] <nume_fer2>IN SCREEN] [FOOTER <expC1>] [TITLE<expC2>] [DOUBLEPANELNONE<list_chenare>] [CLOSENOCLOSE] [FLOATNOFLOAT] [MINIMIZE] [SHADOW] [FILL <expC3>] [COLOR <list_culori>COLOR SCHEME <expN>] unde: - nume_fer reprezint numele dat ferestrei care se definete, cu care va fi apelat i care trebuie s fie un cuvnt de maxim 10 caractere. - l1,c1 coordonatele colului din stnga sus al ferestrei, relative la ecran sau la fereastra printe (dac exist). - l2,c2 coordonatele colului din dreapta jos al ferestrei, relative la ecran sau la fereastra printe (dac exist). - TITLE specific titlul pe care s-l afieze fereastra - DOUBLE cere chenar cu linie dubl - PANEL - chenar plin - NONE fr chenar - <list_chenar> - caracterele din care s fie realizat chenarul, sub forma: c1,12,c3,c4,c5,c6,c7,c8, cu semnificaia: c1 Latura superioar c2 Latura inferioar c3 Latura stng c4 Latura dreapt c5 Colul din stnga sus c6 - Colul din dreapta sus c7 - Colul din stnga jos c8 - Colul din dreapta jos - CLOSENOCLOSE -specific de a nchide sau nu fereastra - FLOATNOFLOAT permite sau nu ca fereastra s fie mutat pe ecran sau n interiorul ferestrei printe. 100

MINIMIZE permite reducerea dimensiunilor ferestrei la dimensiunea minim - SHADOW specific prezena umbrei la afiarea unei ferestre - FILL <expC3> - specific un caracter dorit folosit la afiarea fondului ferestrei - COLOR <list_culori>COLOR SCHEME <expN> - specific, aa cum se tie, combinaia de culori pentru fereastr Activarea i deci afiarea pe ecran a ferestrei anterior definite se face cu comanda: ACTIVATE WINDOW <nume_fer1> [,<nume_fer2>...][ALL] [IN WINDOW <nume_fer3>SCREEN] [TOPBOTTOM] [ NOSHOW] unde: nume_fer1 este fereastra care se activeaz; eventual i nume_fer2,etc sau toate dac s-a specificat ALL - IN WINDOW numele ferestrei printe, n care se afieaz fereastra acum activat ( sau pe ecran dac este SCREEN) - TOP sau BOTTOM specific dac fereastra se va afia n faa tuturor ferestrelor existente pe ecran (TOP) sau n spatele acestora. - NOSHOW- fereastra este activat, exist, dar nu apare pe ecran Afiarea unei ferestre, fr a afecta locul de transmitere a comenzilor de ieire Foxpro se va face cu comanda: SHOW WINDOW <nume_fer1> [,<nume_fer2>...] [ALL] [IN WINDOW <nume_fer>IN SCREEN] [TOPBOTTOM] unde: nume_fer1,nume_fer2.. sunt numele ferestrei/ferestrelor care se vor afia, fr a deveni ns ferestre active de lucru. Opus comenzii SHOW deoarece elimin de pe ecran una sau mai multe ferestre, dup cum dorim, fr a le terge ns din memorie, este comanda HIDE WINDOW, cu formatul: HIDE WINDOW <nume_fer1> [,<nume_fer2>...] [ALL] [IN WINDOW <nume_fer>IN SCREEN] [SAVE] unde: ALL ascunde toate ferestrele existente pe ecran n acel moment SAVE pentru a pstra pe ecran imaginea ferestrei i dup ascunderea sa Pentru a modifica fereastra curent, se folosete comanda: DEACTIVATE WINDOW <nume_fer1> [,<nume_fer2>...] [ALL] Ca efect va deveni fereastr curent fereastra activat anterior, dac exist, sau ecranul n caz contrar. 101

nlturarea ferestrelor , din memorie i de pe ecran, se face cu comanda: RELEASE WINDOWS <list_fer> Pentru a elimina de pe ecran i din memorie toate ferestrele, se poate folosi comanda: CLEAR WINDOWS Exemple: define wind sus from 3,0 to 9,79 title " Emitere aviz expeditie " define wind mijloc from 10,0 to 22,79 define wind total from 22,0 to 24,79 color b/b acti wind total @ 0,20 say "Pentru a termina apasati tasta END" color g+/b activate wind sus @ 0,1 say "Numarul Avizului: " @ 0,20 say nrc @ 0,40 say "Nr inregistr fiscala: "

4.10. Comenzi pentru definirea i gestionarea meniurilor


Sistemul FOXPRO pune la dispoziia utilizatorului propriul su meniu, numit meniu sistem, dar permite utilizatorului sau programatorului s-i defineasc propriile meniuri, pe care s le includ apoi n programele de aplicaii. Se tie c un meniu reprezint practic o list de opiuni posibile la un moment dat, afiate pe ecran total sau parial, utilizatorul avnd posibilitatea s selectezs aciunea dorit. n funcie de opiunea selectat, se va declana o aciune corespunztoare. Practic, pentru a lucra cu meniuri, se parcurg urmtorii pai: - Se definete meniul respectiv, prin etapele: a) definirea barei meniului , cruia i se d un nume b) definirea opiunilor bar c) definirea submeniurilor d) definirea opiunilor pentru fiecare submeniu e) definirea aciunilor care se execut la alegerea unei opiuni - Se activeaz meniul, urmnd a se selecta opiunea dorit a acestuia (de ctre utilizator) - n final, se elimin meniul din memorie ( se terge) Meniurile pot fi: - orizontale (tip MENU) - verticale (tip POPUP) 102

Meniuri verticale ( POPUP ) Un meniu POPUP conine o list de opiuni ce vor fi definite prin comanda DEFINE POPUP. Aceste opiuni se apeleaz prin deplasarea unei bare de selecie sau prin tastarea literei evideniate (tast direct) din cadrul opiunii. Selectarea unei opiuni din cadrul meniului Popup este urmat : - fie de execuia unei operaii - fie de afiarea unui submeniu ierarhizat, care implic utilizarea comenzii ON BAR. Definirea opiunilor se face cu comanda DEFINE BAR, iar definirea aciunilor ce vor urma selectrii unei opiuni a meniului cu comenzile ON SELECTION BAR. Activarea meniului se va face cu comanda ACTIVATE POPUP, iar dezactivarea lui cu comanda DEACTIVATE POPUP. Descrierea comenzilor DEFINE POPUP <nume_popup> [FROM <l1,c1>] [TO <l2,c2>] [ IN [WINDOW] <nume_fer>IN SCREEN] [KEY <def_tast>] [MESSAGE <expC>] [PROMPT <specificaie>] [TITLE <expC2>] [MARGIN] [SCROLL] [SHADOW] [COLOR <list_culori>COLOR SCHEME <expN>] unde: - nume_popup este numele submeniului care se definete, de tip vertical - l1,c1 indic poziia colului din stnga sus al submeniului - l2,c2 indic poziia colului din dreapta jos - IN WINDOW definete submeniul n interiorul ferestrei specificate, altfel ea apare pe ecran sau automat n fereastra activ n acel moment - KEY definete o cale direct (o combinaie de taste) de acces direct la submeniu - MESSAGE cere afiarea mesajului specificat pe ultima linie a ecranului sau a ferestrei active, ca text explicativ sau suplimentar ataat meniului - PROMPT stabilete de fapt tipul submeniului vertical. Astfel, dac lipsete, opiunile meniului urmeaz s fie definite cu comenzi DEFINE BAR. Dac exist PROMPT, atunci ea poate fi de forma: a) PROMPT FIELD <expr> caz n care opiunile submeniului vor fi preluate din tabele activ , din cmpul sau combinaia de cmpuri stabilit prin <expr> b) PROMPT FILES [LIKE <masc>] caz n care opiunile sunt numele fiierelor de pe disc sau dintr-un anumit director, eventual care corespund specificatorului multiplu definit prin masc. 103

c). PROMPT STRUCTURE caz n care opiunile din submeniu sunt numele cmpurilor definite n structura tabelei active - TITLE <expC2> specific titlul afiat pentru meniu - MARGIN cere ca opiunile s fie separate de chenar printr-un spaiu - SCROLL are ca efect afiarea unei bare de defilare vertical pe marginea din dreapta a chenarului submeniului. - SHADOW cere afiarea cu efectul de umbr a submeniului Comanda DEFINE BAR Permite definirea i crearea opiunilor din cadrul unui meniu vertical, altele dect cele de tip PROMPT. DEFINE BAR <nr> OF <nume_popup> PROMPT <expC1> [KEY <def_tast>[,<expC2>]] [MESSAGE <expC3>] [COLOR <list_culori> COLOR SCHEME <expN>] unde: - nr este un numr asignat opiunii respective din meniu - OF nume_popup precizeaz numele meniului popup din care face parte opiunea - PROMPT specific textul care se va afia n meniu, ca opiune - KEY definete combinaia de taste prin care se acceseaz opiunea - MESSAGE afieaz mesajul specificat ca urmare a poziionrii cursorului pe opiunea respectiv - COLOR combinaia de culori dorit Selectnd o opiune din meniul descris, se poate cere: a). activarea unui alt submeniu (de regul tot vertical) cu comanda ON BAR b). executarea unei anumite comenzi cu comanda ON SELECTION BAR ON BAR <nr> OF <nume_popup> [ACTIVATE MENU <nume_meniu_oriz>] sau ACTIVATE POPUP <nume_popup>] unde: nr reprezint numrul opiunii din meniul POPUP la care se refer ACTIVATE specific numele i tipul submeniului activat prin selectarea opiunii ON SELECTION BAR <nr> OF <nume_popup> <comand> unde: nr- reprezint numrul de ordine al opiunii

104

comanda comanda ce va fi executat prin selectarea respectivei opiuni. Afiarea i activarea, pe ecran sau ntr-o fereastr, a unui meniu vertical definit anterior se face cu comanda: ACTIVATE POPUP <nume_popup>] Dezactivarea meniurilor verticale i renunarea la afiarea lor pe ecran sau ntr-o fereastr se face cu comanda: DEACTIVATE POPUP <nume_popup1> [,<nume_popup2>...] [ALL] Ca efect se dezactiveaz meniul sau meniurile cu numele specificate, eventual toate cele existente active, dac s-a specificat ALL. Afiarea unui meniu vertical sau a mai multora , pe ecran sau ntr-o fereastr, fr a le activa ns se face cu comanda: SHOW POPUP <nume_popup1> [,<nume_popup2>...] [ALL] [SAVE] unde: SAVE permite pstrarea pe ecran a imaginii meniurilor popup pn la prima comand CLEAR. Ascunderea unui meniu sau a mai multora , afiate pe ecran sau ntr-o fereast, astfel nct s rmn active n memorie se face cu comanda: HIDE POPUP <nume_popup1> [,<nume_popup2>...] [ALL] Meniuri orizontale tip MENU

Un meniu MENU conine o list de opiuni afiate orizontal. Uzual, un meniu orizontal apeleaz meniuri verticale, afiate ca urmare a selectrii opiunilor componente. Pentru aceasta, se definete mai nti meniul orizontal, cu comanda DEFINE MENU, apoi se definesc opiunile sale cu comanda DEFINE PAD. Selectarea unei opiuni din cadrul meniului orizontal este urmat : - fie de execuia unei operaii, precizat cu comanda ON SELECTION PAD - fie de activarea unui submeniu vertical, care implic utilizarea comenzii ON PAD. Urmeaz apoi definirea meniurilor verticale (DEFINE POPUP), a opiunilor componente (DEFINE BAR) i a aciunilor ce vor urma selectrii unei opiuni a meniului cu comenzile ON SELECTION BAR. sau ON BAR. Activarea meniului orizontal se va face cu comanda ACTIVATE MENU, iar dezactivarea lui cu comanda DEACTIVATE MENU. Descrierea comenzilor 105

DEFINE MENU <nume_meniu> [BAR [AT LINE <expN>]] [IN [WINDOW] <nume_fer>IN SCREEN] [KEY <def_tast>] [MESSAGE <expC>] [NO MARGIN] [COLOR <list_culori>COLOR SCHEME <expN>] unde: - nume_meniu este numele meniului care se definete, de tip orizontal - AT LINE indic linia pe care s fie afiat bara orizontal a meniului - IN WINDOW cere ca meniul s apar n interiorul ferestrei specificate, altfel ea apare pe ecran sau automat n fereastra activ n acel moment - KEY definete o cale direct (o combinaie de taste) de acces direct la meniu - MESSAGE cere afiarea mesajului specificat pe ultima linie a ecranului sau a ferestrei active, ca text explicativ sau suplimentar ataat meniului - COLOR precizeaz combinaia de culori dorit Comanda DEFINE PAD Permite definirea i crearea opiunilor din cadrul unui meniu orizontal. DEFINE PAD <nume_opiune> OF <nume_meniu> PROMPT <expC1> [KEY <def_tast>[,<expC2>]] [MESSAGE <expC3>] [COLOR <list_culori> COLOR SCHEME <expN>] unde: - nume_opiune este numele opiunii respective din meniu - OF nume_meniu precizeaz numele meniului orizontal din care face parte opiunea - PROMPT specific textul care se va afia n meniu, ca opiune - KEY definete combinaia de taste prin care se acceseaz opiunea - MESSAGE afieaz mesajul specificat ca urmare a poziionrii cursorului pe opiunea respectiv - COLOR combinaia de culori dorit Selectnd o opiune din meniul descris, se poate cere: a) activarea i afiarea unui alt meniu, de regul vertical, cu comanda ON PAD b) executarea unei anumite comenzi cu comanda ON SELECTION PAD ON PAD <nume_opt> OF <nume_meniu> [ACTIVATE MENU <nume_meniu>] sau ACTIVATE POPUP <nume_popup>] unde: nume_opt reprezint numele opiunii din meniul orizontal la care se refer ACTIVATE specific numele i tipul submeniului activat prin selectarea opiunii 106

ON SELECTION PAD <nume_opt> OF <nume_meniu> <comand> unde: nume_opt - reprezint numele opiunii din meniul orizontal comanda comanda ce va fi executat prin selectarea respectivei opiuni Afiarea i activarea, pe ecran sau ntr-o fereastr, a unui meniu orizontal definit anterior se face cu comanda: ACTIVATE MENU <nume_meniu>] Dezactivarea meniurilor orizontale i renunarea la afiarea lor pe ecran sau ntr-o fereastr se face cu comanda: DEACTIVATE MENU <nume_meniu> [,<nume_meniu2>...] [ALL] Ca efect se dezactiveaz meniul sau meniurile cu numele specificate, eventual toate cele existente active, dac s-a specificat ALL. Afiarea unui meniu orizontal sau a mai multora , pe ecran sau ntr-o fereastr, fr a le activa ns, se face cu comanda: SHOW MENU <nume_meniu1> [,<nume_meniu2>...] [ALL] [SAVE] unde SAVE permite pstrarea pe ecran a imaginii meniurilor orizontale pn la prima comand CLEAR. Ascunderea unui meniu sau a mai multora , afiate pe ecran sau ntr-o fereastr, astfel nct s rmn active n memorie se face cu comanda: HIDE MENU <nume_meniu1> [,<nume_meniu2>...] [ALL]

4.11. Comenzi pentru setarea parametrilor de lucru sub SGBD Foxpro


Comanda SET Aceast comand, fr specificarea unor argumente, determin afiarea meniului principal (vizualizarea ferestrei View). Acelai efect se obine prin intermediul meniului principal FoxPro, activnd meniul Window i apoi selectnd View. Meniul principal are 5 variante posibile de alegere dup cum urmeaz: Meniul OPTIONS prezint parametrii implicati ai majoritatii comenzilor. Acetia pot fi modificai n funcie de cerinele utilizatorului. Meniul DISPLAY permite modificarea parametrilor de afiare a testului, a liniilor de titlu, a liniei de stare i a liniei cmpurilor, precum i a parametrilor privind culoarea i intensitatea. Meniul KEYS permite programarea anumitor taste de funcii i combinaii de taste. 107

Meniul DISK este utilizat pentru a schimba unitatea de disc implicit i calea de acces. Meniul FILES permite s se aleaga fiiere dintre urmatoarele tipuri: ALTERNATE, DEVICE, FORMAT, INDEX. Ieirea din meniuri se realizeaz cu <CTRL>+<END> (cnd se dorete s se menin toate schimbrile efectuate unei comenzi SET pe parcursul unei sesiuni de lucru) sau <ESC> (cnd nu sunt salvate seleciile operate). n Anexa nr. 2 se prezint comenzile SET cele mai frecvent utilizate n FOXPRO. PRODUSE PROGRAM REALIZATE IN LIMBAJUL DE PROGRAMARE FOXPRO ************************************************************* * FOXPRO APLICAIA NR. 1 ************************************************************* * Baza de date TELOFON ( NUME, TELEFON) se afla pe discul C. Realizai o aplicaie i scriei * un program care s afieze numrul de telefon al persoanei cutate. ************************************************************* * Nume Program : ap1.prg; * Fiiere folosite : telefon.dbf ************************************************************* SET TALK OFF SET COLOR TO BG/N USE telefon IN 1 ORDER nume STORE SPACE(15) TO Num @2,2 SAY "Tastai numele cutat:" GET Num READ SEEK Num IF .NOT. FOUND() @5,2 SAY "Numele cutat nu se afl n baza de date telefon.dbf" WAIT " " ELSE @5,2 SAY " Numrul de telefon este: "+Telefon WAIT " " ENDIF CLEAR CLOSE ALL 108

************************************************************* FOXPRO: APLICAIA NR. 2 ap2.prg ************************************************************* Baza de date PERSONAL(NUME, ADRESA, TELEFON, DATA_ANGAJ) se afl pe discul C *n directorul STUDIU. Scriei un program care s listeze: numele, adresa i numrul de telefon al persoanelor angajate n ultimul an. ************************************************************* setari iniiale set talk off set status off set scoreboard off set color to gr+/n set clock off clear all * nr=0 use personal in 1 scan for data_angaj>date() - 365 display nume, adresa, telefon nr=nr+1 endscan ? ? "Exista " +LTRIM(STR(NR))+"muncitori angajai n ultimul an" ? wait clear ************************************************************* FOXPRO: APLICAIA NR. 3 ap3.prg ************************************************************* Proiectai i scriei un program DBASE care s permit listarea nregistrrilor bazei de date PERSONAL.DBF ordonate dup un cmp specificat. * ************************************************************* SET TALK OFF CLEAR CLOSE ALL ACCEPT " Tastai numele bazei de date: " to bd USE &bd IN 1 R="" DO WHILE .T. 109

CLEAR * afisare meniu @1,1 SAY "1). Nume" @2,1 SAY "2). Varsta" @3,1 SAY "3). Vechime" @4,1 SAY "4). Salar" @5,1 SAY "5). Terminare" optiune=1 @7,5 SAY " Tastai numr opiune:" get optiune PICTURE "9" RANGE1,5 READ CLEAR * analiz opiune tastata DO CASE CASE optiune=1 cmp="NUME" CASE opiune=2 cmp="VARSTA" CASE opiune=3 cmp="VECHIME" CASE opiune=4 cmp="SALAR" OTHERWISE CANCEL CLEAR ENDCASE * indexare dup cmpul indexat INDEX ON &camp TAG &camp LIST OFF WAIT CLEAR @3,3 SAY " Dorii o alt listare? (D/N) " GET R PICTURE "A" * VALID UPPER(R) = "D" .OR. UPPER(R) = "N" READ * continuare listri IF UPPER(R) ="D" LOOP * terminare listri ELSE CLEAR 110

RETURN ENDIF ENDDO * ************************************************************* * FOXPRO: APLICAIA NR. 4 : AP4.PRG * ************************************************************* * Baza de date PRODUSE.DBF are structura: SORTIM, FIRMA, PRE, BUCI Scriei un program care mrete preurile la macaroane"Spaghette" cu 20%, la Ulei Msline cu 65% i la *igrile "Marlboro" cu 78%. Preul celorlalte sortimente, indiferent de firm, cu 150 lei. Se cere *valoarea mrfii existente n stoc nainte i dup mrirea preurilor * ************************************************************* SET TALK OFF CLEAR USE PRODUSE * calcularea valorii stocului de marfa nainte de scumpire SUM(PRET * BUCATI) TO valinit all ? "VALOAREA INITIALA A STOCULUI :" ? valinit WAIT " " * majorri REPLACE ALL PRET WITH PRET + 150 REPLACE ALL FOR SORTIM = "Macaroane" .AND. FIRMA ="Spaghette"; PRET WITH (PRET - 150)*1.2 REPLACE ALL FOR SORTIM = "Ulei" .AND. FIRMA = "Masline"; PRET WITH (PRET - 150)*1.65 REPLACE ALL FOR SORTIM = "Tigari" .AND. FIRMA ="Marlboro"; PRET WITH (PRET - 150) * 1.78 LIST WAIT " " * Calculul valorii stocului dup majorri SUM (PRET*BUCATI) TO valfinala ALL ? " VALOAREA FINALA = :" ? valfinal ? ? " MAJORAREA VALORII = :" ?? valfinal - valinit WAIT " " CLOSE ALL 111

* ************************************************************* * FOXPRO: APLICAIA NR. 5 ap5.prg ************************************************************* * Baza de date PERS.DBF are structura: NUME, ADRES, TELEFON Scriei un program care *creaz un nou fiier baza de date numit PERS1.DBF care are aceleai cmpuri cu PERS.DBF dar *cu lungimea egal cu lungimea maxim exitent n cmpurile memorate. Copiai nregistrrile din *fiierul iniial i apoi tergei fiierul PERS.DBF * **************************************** SET TALK OFF CLEAR USE pers COPY STRUCTURE EXTENDED TO pers1.dbf USE pers1 * STERGERE BAZA DE DATE ZAP USE pers DO calc_lun * SE CALCULEAZ LUNGIMEA MAXIM A NREGISTRRILOR I SE INLOCUIETE * LUNGIMEA CMPURILOR USE PERS1 APPEND BLANK REPLACE FIELD_NAME WITH "Nume", FIELD_TYPE WITH "C", FIELD_LEN; WITH MaxN APPEND BLANK REPLACE FIELD_NAME WITH "Adresa", FIELD_TYPE WITH "C", FIELD_LEN; WITH MaxA APPEND BLANK REPLACE FIELD_NAME WITH "Telefon", FIELD_TYPE WITH "N", FIELD_LEN; WITH MaxT CREATE pers1 FROM pers LIST STRUCTURE APPEND FROM pers LIST WAIT DELETE FILE baza.dbf 112

SET CURSOR ON PROCEDURE calc_lun PUBLIC MaxN, MaxA, MaxT STORE 0 TO MaxN, MaxA, MaxT SCAN IF MaxN < LEN(LTRIM(RTRIM(NUME))) MaxN= LEN(LTRIM(RTRIM(NUME))) ENDIF IF MaxA < LEN(LTRIM(RTRIM(ADRESA))) MaxA= LEN(LTRIM(RTRIM(ADRESA))) ENDIF IF MaxT < LEN(LTRIM(RTRIM(TELEFON))) MaxT= LEN(LTRIM(RTRIM(TELEFON))) ENDIF ENDSCAN RETURN ************************************************************* * FOXPRO: APLICAIA NR. 6 ap6.prg ************************************************************* * n directorul STOCURI exist bazele de date STOC.dbf i TRANZACTII.dbf * Listai structura acestor fiiere i scriei un program pentru realizarea tranzaciilor zilnice. Dialogul cu utilizatorul trebuie proiectat corespunztor ( adic codurile de material se selecteaz din STOC.DBF iar restul cmpurilor se introduc prin intermediul unui videoformat) ******************************************************** set talk off public cod1 clear @3,15 say "MISCARE MATERIALE DIN STOC" @4,16 SAY "(CREARE FISIER TRANZACTII)" sele 1 use stoc define popup ferestr1 from 5,5 to 10,65 prompt field stoc->den on sele popup ferestr1 do salv1 sele 2 use tranzact sele 1 activate popup ferestr1 close data 113

procedure salv1 store 0 to mag1, i_e1,cant1,data1,pu1 store space(4) to um1 store space(6) to data1 sele 2 append blank sele 1 loca for den=prompt() cod1=codm pu1=pu repl tranzact->codmt with cod1 repl tranzact->put with pu1 SELE 2 brow @14, 12 SAY "UNITATE DE MASURA(xxxx) =" @14,37 GET um1 @14,44 SAY "COD MAGAZIE(n) =" @14,62 GET MAG1 pict '9' @16,12 SAY "INTRARI/IESIRI(1,2) =" @16,34 GET I_E1 PICT '9' @16, 36 SAY "DATA (ZZLLAA)=" @16,56 GET DATA1 PICT '999999' @18,12 SAY "CANTITATE =" @18,56 GET CANT1 PICT '999999' read repl umt with um1 repl magt with mag1 repl i_e with i_e1 repl data with data1 repl cant with cant1 sele 1 return ************************************************************* * FOXPRO: APLICAIA NR. 7 ap7.prg ************************************************************* * Modul de lucru cu meniuri orizontale i verticale ************************************************************* SET TALK OFF CLEAR 114

DO def ACTI MENU m1 RETURN * MENIURI ORIZONTALE procedure def defi menu m1 defi pad v1 of m1 prom 'FISIERUL STOC.DBF ' AT 5,20 on sele pad v1 of m1 acti popup mv1 * MENIURI VERTICALE @2,5 TO 18,79 DOUBLE defi popup mv1 from 6,20 mess ' ' defi bar 1 of mv1 prom 'HELP ' defi bar 2 of mv1 prom 'CREERE FISIER' defi bar 3 of mv1 prom 'ACTUALIZARE FISIER' defi bar 4 of mv1 prom 'LISTARE' defi bar 5 of mv1 prom 'QUIT' on sele popup mv1 do mv1 * PROCEDURE mv1 if bar()=1 do s1 endif if bar()=2 do s2 endif if bar()=3 do s3 endif if bar()=4 do s2 endif if bar()=5 quit endif * procedure s1 clear ? "procedura nr.1" return procedure s2 115

clear ? "procedura nr.2" return procedure s3 clear ? "procedura nr.3" return procedure s4 clear ? "procedura nr.4" return ************************************************************* *FOXPRO: APLICAIA NR. 8 ap8.prg ************************************************************* ACEST PROGRAM ESTE O VERSIUNE A LUI AP7.PRG SI LUCREAZ CU MENIURI * ORIZONTALE I VERTICALE I DETALIAZ O PARTE DIN PROCEDURI ************************************************************* set talk off clear do def acti menu m1 retu procedure def defi menu m1 defi pad v1 of m1 prom "FISIERUL STOC.DBF " at 5,20 on sele pad v1 of m1 acti popup mv1 * @2,5 to 18,79 double defi popup mv1 from 6,20 mess ' ' defi bar 1 of mv1 prom "HELP " defi bar 2 of mv1 prom "CREARE FISIER" defi bar 3 of mv1 prom "ACTUALIZARE (ADAUGARI INREG." defi bar 4 of mv1 prom "ACTUALIZARE (MODIFICARI INREG.)" defi bar 5 of mv1 prom "LISTARE" defi bar 6 of mv1 prom "QUIT" * on sele popup mv1 do mv1 116

* PROCEDURE mv1 if bar()=1 do s1 endif if bar()=2 do s2 endif if bar()=3 do s3 endif if bar()=4 do s4 endif if bar()=5 do s5 endif if bar()=6 quit endif * procedure s1 ? "procedura nr.1" return * procedure s2 CREATE STOC.DBF ? "procedura nr.2" return * procedure s3 CLEAR STORE 0 TO CODMM,PUM,MAGM,STOCM STORE SPACE(20) TO DENM STORE SPACE(4) TO UMM USE STOC APPEND BLANK @6,6 SAY "ACTUALIZARE FISIER STOC.DBF (ADAUGARE DE INREGISTRARI)" @8,3 SAY "COD MATERIAL" 117

@8,16 GET CODMM PICT '999' @8,22 SAY "DENUMIRE:" @8,30 GET DENM @10,3 SAY "PRET UNITAR:" @10,16 GET PUM PICT '999999' @10,30 SAY "UNITATE DE MASURA:" @10,50 GET UMM @12,3 SAY "COD MAGAZIE:" @12,16 GET MAGM PICT '9' @12,30 SAY "CANTITATE:" @12,50 GET STOCM PICT '9999999999' READ REPLA CODM WITH CODMM REPLA DEN WITH DENM REPLA PU WITH PUM REPLA UM WITH UMM REPLA MAG WITH MAGM REPLA STOC WITH STOCM ? "procedura nr.3" return * procedure s4 CLEAR STORE 0 TO CODMM,PUM,MAGM,STOCM STORE SPACE(20) TO DENM STORE SPACE(4) TO UMM USE STOC go top @4,6 SAY "ACTUALIZARE FISIER STOC.DBF (MODIFICARI DE INREGISTRARI)" @6,3 SAY "COD MATERIAL pentru nregistrarea dorit:" @6,46 get CODMM PICT '999' read loca for codm=codmm @8,3 SAY "COD MATERIAL" @8,16 get CODMM PICT "999" @8,22 SAY "DENUMIRE:" @8,30 SAY DEN @10,3 SAY "PRE UNITAR:" @10,16 SAY PU PICT "999999" 118

@10,30 SAY "UNITATE DE MASUR:" @10,50 SAY UM @12,3 SAY "COD MAGAZIE:" @12,16 SAY MAG PICT "9" @12,30 SAY "CANTITATE:" @12,50 SAY STOC PICT "9999999999" READ @8,3 SAY "COD MATERIAL" @8,16 get CODM PICT "999" @8,22 SAY "DENUMIRE:" @8,30 get DEN @10,3 SAY "PRE UNITAR:" @10,16 GET PU PICT "999999" @10,30 SAY "UNITATE DE MASUR:" @10,50 GET UM @12,3 SAY "COD MAGAZIE:" @12,16 GET MAG PICT "9" @12,30 SAY "CANTITATE:" @12,50 GET STOC PICT "9999999999" READ ? "procedura nr.4" return * procedure s5 ? "procedura nr.5" USE STOC BROW return ************************************************************* * FOXPRO: APLICAIA NR. 9 ap9.prg ************************************************************* * S se proiecteze i s se scrie un program prin care s se realizeze urmtorul dialog cu *utilizatorul: MENIU PRINCIPAL: F - fiiere; R - rapoarte; T terminare; MENIU FIIERE : *B - Bonuri de materiale; C - Comenzi; F Furnizori; N - N.I.R. S - Stoc; R - Retur; MENIU *RAPOARTE: 1. List furnizori; 2. List materiale *din stoc; 3. List bonuri materiale pe *comenzi; 4. List NIR pe furnizori; 5. Return; MENIU OPERAII: A - Adaugare; M *Modificare; S _ tergere; V - Vizualizare; R - Return. ************************************************************* 119

set talk off set color to w/b clear @0,0 to 18,79 double do def acti menu m1 return procedure def defi menu m1 defi pad v1 of m1 prom "GESTIUNE STOCURI" at 5,20 on sele pad v1 of m1 acti popup mv1 @2,5 to 18,79 double defi popup mv1 from 6,20 mess ' ' defi bar 1 of mv1 prom ' F fisiere' defi bar 2 of mv1 prom ' R rapoarte' defi bar 3 of mv1 prom ' T terminare' on sele popup mv1 do mv1 procedure mv1 if bar()=1 do mfisiere endif if bar()=2 do mrapoarte endif if bar()=3 quit endif procedure mfisiere do def1 acti menu m2 return procedure def1 defi menu m2 defi pad v2 of m2 prom 'MENIU FISIERE' at 7,55 on sele pad v2 of m2 acti popup mv2 @5,41 to 17,78 double defi popup mv2 from 7,46 mess " " defi bar 1 of mv2 prom "B - Bonuri de materiale" defi bar 2 of mv2 prom "C - Comenzi de fabricatie" defi bar 3 of mv2 prom "F - furnizori" 120

defi bar 4 of mv2 prom "N - NIR" defi bar 5 of mv2 prom "S - Stoc" defi bar 6 of mv2 prom "R - retur" on sele popup mv2 do mv2 procedure mv2 if bar()=1 do s1 endif if bar()=2 do s2 endif if bar()=3 do s3 endif if bar()=4 do s4 endif if bar()=5 do s5 endif if bar()=6 do s6 endif procedure mrapoarte do def3 acti menu m3 return procedure def3 defi menu m3 defi pad v3 of m3 prom "MENIU RAPOARTE" at 7,55 on sele pad v3 of m3 acti popup mv3 @5,41 to 17,78 double defi popup mv3 from 7,46 mess " " defi bar 1 of mv3 prom "1. Lista furnizori" defi bar 2 of mv3 prom "2. Lista materialelor" defi bar 3 of mv3 prom "3. Lista bonuri materialelor" defi bar 4 of mv3 prom "4. Lista NIR pe furnizori" defi bar 5 of mv3 prom "5. Return" on sele popup mv3 do mv3 defi bar 6 of mv2 prom "R - retur" 121

on sele popup mv2 do mv2 ************************************************************* *Aplicatia nr.10: tergere nregistrri din tabela TARIFE ************************************************************* SET TALK OFF SET STATUS OFF USE tarife DEFINE WINDOW tarife FROM 3,10 TO 18,60 TITLE Actualizare TARIFE; FOOTER Marcai nregistrrile pentru tergere cu CTRL+T; COLOR SCHEME 10 USE tarife mTipTarif= @7,10 SAY Tip tarif:GET mTipTarif FUNCTION! READ ACTIVATE WINDOW tarife BROWSE FOR TipTarif=mTipTarif NOAPEND NOEDIT IN WINDOW tarife DEACTIVATE WINDOW tarife PACK USE SET TALK ON SET STATUS ON

122

MODULUL 5 GENERATOARE AUTOMATE


Sistemul de generatoare automate poate fi apelat atat utilizand facilitati wizzard cat si prin lansarea mediilor de proiectare a spatiului de lucru pentru fiecare din elementele enumerate mai sus. Meniul de acces la facilitatile wizzard pentru generatoare automate se prezinta figura urmatoare.

5.1. Generatorul de rapoarte


Dezvoltatorul de rapoarte este o interfa orientat vizual pentru proiectarea manual a rapoartelor i etichetelor. Se poate creea un raport prin plasarea diferitelor obiecte precum cmpuri, texte, grafice i expresii oriunde n raport. Opiunea Quick Report menu permite grabirea procesului prin realizarea unei machete implicite pentru raport. Iar Report Wizard ajut la realizarea rapid a unui prototip ce poate fi motificat ulterior. 123

Tipuri de rapoarte
Datele pot fi aezate n coloane distincte, ntr-un format tabelar precum foile de calcul sau grilele (fig.10.1), sau datele unei nregistrri pot fi afiate de sus n jos (fig.10.2). Datele se pot afia ca atare sau pot fi grupate, totalizate sau subtotalizate. Se pot include grafice reprezentative pentru valori diferite. La rularea raportului, datele subliniaz valori din tabele, vederi, interogri sau cursori, dar i cmpuri calculate, ca rezultat al unor funcii definite de utilizator.

Raport ce reprezint informaiile succesiv, asemntor foii de cacul

Raport liniar, nregistrrile sunt reprezentate succesiv, pe linii separate Report Designer Un nou raport se poate crea n mai multe moduri: 124

Se alege opiunea New din meniul File, click pe butonul Report, apoi click pe New Report - din Project Manager, click pe extensia Documents, se selecteaz pictograma Report din list i click pe butonul New, apoi se selecteaz New Report. - Din fereastra de comand, se tasteaz Create Report sau Modify Report numenou - Se creaz raportul cu utilitarul Report Wizard, se salveaz i se revine pentru modificare Indiferent de modalitate, Visual FoxPro va lansa Report Designer (fig.10.4) -

Modul de proiectare a unui raport cu Report Designer Elementele componente: Zona de lucru canvas a raportului este reprezentarea vizual a raportului proiectat, zona n care se aduc cmpurile, etichetele sau graficele. Bara de unelte Report Designer permite accesul uor la toate barele pentru raport i la cteva funcii importante. Bara de controale Report Controls permite introducerea n raport a ase tipuri de controale i obiecte: etichete, cmpuri, linii, dreptunghiuri, cercuri i controale imagine ActiveX/OLE de legtur. 125

Paleta de culori Color Palette permite atribuirea de culori pentru fundal sau pentru controalele din prim plan. Paleta machetei , Layout palette, permite alinierea sau dimensionarea unei sau mai multor controale. Butoanele Data Grouping (gruparea datelor) i Data Environment ( mediu de date) permite controlul afirii datelor. Lucrul cu Controale in zona Report canvas Utilitarul Report Designer suport trei tipuri de obiecte: text, cmpuri i grafice, similare celor din formulare, dar cu unele diferene. Controalele din raport nu pot fi derivate din subclase, ele includ un set mult mai limitat de setri de format i proprieti de date. Nu se poate face referire la ele n codul surs, iar prin natura raportului, controalele nu pot fi interactive, adic utilizatorul nu poate introduce text n raport. Obiectele raportului sunt relativ de manevrat, dar destul de flexibile n proiectarea de rapoarte profesioniste i sophisticate. Obiectele cmpuri se utilizeaz n afiarea datelor stocate n cmpuri sau a datelor rezultate n urma unor calcule, expresii sau funcii definite de utilizator. Obiectele grafice constau n poze, linii sau dreptunghiuri. Pe msur ce se adaug obiecte n zona de lucru canvas acestea se pot manipula n diverse moduri: selectarea unui obiect din raport: se selecteaz butonul Select Objects (sgeata n sus) din caseta de unelte, apoi se selecteaz obiectul dorit, acesta fiind subliniat cu dreptunghiuri mici click n zona de lucru canvas n care se dorete afiarea controlului, iar pentru a modifica dimensiunea implicit pe care Visual FoxPro o aloc controlului se elibereaz mouse-ul concomitent cu trasarea dimensiunii dorite pentru control, apoi mouse-ul se elibereaz. Stergerea unui obiect al raportului: se selecteaz obiectul din zona de lucru canvas, apoi se apas tasta Delete sau se alege opiunea Cut din meniul Edit. Comanda se poate realiza i pe o selecie multipl de obiecte. Copierea unui obiect din raport: se selecteaz obiectul din zona de lucru canvas, se alege opiunea Copy(CTRL+C) din meniul Edit, apoi se alege opiunea Paste(CTRL+V) din meniul Edit. Lucrul cu cmpurile: pentru afiarea datelor n raport se utilizeaz obiectul text box pentru adugarea unui cmp, a unei variabile, a unei

126

expresii sau a unei funcii definit de utilizator; acest lucru se face prin selectarea controlului textbox/field din caseta de unelte Report Controls i click n zona de lucru canvas. Apare o caset de dialog ca n fig.10.5 ce poate fi apelat i ulterior, prin click dreapta pe control i selectarea opiunii Properties. -

n caseta de dialog Report Expression se introduce o expresie ce evalueaz datele specificate n raport Tot n caseta de dialog Report Expression se pot stabili urmtoarele proprieti: Schimbarea expresiei cmpului: n caseta expresiei se poate introduce o expresie, numele unui cmp sau o funcie de evaluare a datei respective, fie prin tastare sau prin apelarea elipsei din dreapta pentru apelarea contructorului de expresie Expression Builder, fig.10.6. Acesta include o serie de instrumente pentru aducerea datelor n raport, o list de cmpuri disponibile, funcii Visual FoxPro si variabile de sistem Visual Foxpro

127

Fereastra Expresion Builder Includerea unei variabile sau funcii n expresie necesit corelarea cu tipul de dat asupra creia se face evaluarea, altfel rezult o eroare la rularea raportului. Schimbarea formatului cmpului: n cmpul Format din caseta de dialog Expression Builder se pot introduce specificaii de formatare pentru textul sau data numeric rezultant, prin click pe elips, i setarea proprietilor din caseta de dialog Format.

Caseta de dialog Format Field position indic locul unde s apara cmpul fa de zona de referin. Se poate alege aspectul float, adic poziia cmpului este relativ fa de alte cmpuri din linie, sau se poate alege s rmn relativ fa de

128

partea superioar sau inferioar a zonei de detaliu, astfel va rmne mereu o distan fix fa de chenarul zonei, indiferent de dimensiunea cmpurilor. Cmpul de validare Stretch with Overflow indic dac controlul cmp(field) se va extinde ct s cuprind ntreaga valoare. Altfel, la imprimare se va vedea numai o poriune. Aceasta opiune este util n special pentru printarea cmpurilor de tip memo. Butonul de calcule(Calculation button) permite aplicarea unui subtotal sau a unui calcul. Click pe acest buton, apoi se indic tipul i scopul calculului n caseta de dialog Subtotal or Calculate Field. n figura urmtoare se calculeaz suma unui cmp i se specific afiarea acesteia la finalul fiecrei pagini, iar acest control se plaseaz n zona Page Footer.

Fig.10.8 Caseta de dialog Calculate Field, permite calcule numerice. -Butonul Print din caseta de dialog Report Expression permite limitarea printrii cmpului n raport. Prin click pe acest buton se deschide caseta de dialog Print When. Implicit, un obiect se imprim odat cu coninutului zonei aferente, ins, se poate alege s nu se imprime valorile care se repet, sau ntr-o grupare a unui raport, se poate alege imprimarea cmpului doar cnd se schimb zona de grupare. Caseta text Print Only When Expression Is True (imprim doar cnd expresia este adevarat), permite definirea altei expresii ce determin daca se imprim cmpul. Aceasta opiune poate limita imprimarea unor cmpuri pe anumite nivele de securitate sau se poate imprima rezultzatul unui cmp memo cnd alt cmp din sursa de date este adevrat.

129

Caseta de dialog Print When specific condiiile de afiare Se poate utiliza opiunea Comment din caseta de dialog Report Expression pentru introducerea de comentarii ca indicaii sau notie pentru ali programatori sau dezvoltatori ai aplicaiei. Acestea nu vor aprea n raportul printat. Lucrul cu variabile n raport Se pot defini variabile pentru a fi folosite n raport, prin selectarea Report, Variables, i care s se ruleze calculul n afara zonei de calculare a cmpului.

Caseta de dialog Report Variables pentru utilizarea de variabile raport 130

La selectarea casetei de validare Release After Report, variabilele sunt tratate separat, ceea ce nseamn c pot fi accesate de orice apel a unei funcii definit de utilizator. Dac aceast caset de validare nu este selectat variabilele vor rmne n memorie ca variabile publice . Lucrul cu figuri geometrice i text Pentru adugarea unei figuri sau linii se selecteaz din Report Controls i se elibereaz n zona de lucru ca orice control; n plus se pot stabili atribuiile unei figuri sau text ntr-un raport, la fel ca proprietile unui cmp: dubluclick pe obiectul din raport i apare caseta de dialog Text.

Caseta de dialog Text pentru stabilirea stilului i aciunii unui obiect text

Prin click pe butonul Print When se revine la caseta de dialog Print When descris n figura anterioar. Prin caseta de dialog Text se poate aplica acelai control asupra textului sau figurii la fel cum s-a aplicat i asupra cmpurilor. Acelai lucru este valabil i pentru poziia unui obiect text sau figur prin utilizarea proprietilor din caseta de opiuni Object Position. Controalele linie i dreptunghi au n plus cteva opiuni. Prin dubluclick pe o linie din raport se poate indica extinderea acesteia fa de zona n care se afl. Opiunea No Stretch inhib extinderea vertical a liniilor sau dreptunghiurilor. Opiunea Stretch Relative to Tallest Object in Group permite extinderea pe vertical a unei linii sau a unui dreptunghi pn la dimensiunea cea mai mare dintre obiectele grupului, iar opiunea Stretch Relative to Height of Band permite extinderea pe vertical a liniei sau dreptunghiului, proporional cu nlimea zonei.

131

Caseta de dialog Rectangle/Line dialog box Controlul Round Rectangle are o caset dwe dialog asemntoare, dar conine cinci butoane diferite ce indic diferite stiluri.

Caseta de dialog Round Rectangle dialog box 132

Execuia rapoartelor Se poate imprima ntregului raport prin urmtoarele metode: Din Project Manager, click pe extensia Documents, click pe un raport i click pe butonul Print din bara Standard Din fereastra de comand, sau din codul surs, se tasteaz comanda Report Form care are sintaxa: REPORT FORM numeraport TO PRINT | PREVIEW | TO numefiier | FOR expresia de filtrare Rapoartele sunt formatate pentru a rula pe imprimanta implicit selectat, iar dac acelai raport se ruleaz pe o alt imprimant, aliniamentul i spaierea vor diferi, dac cele dou imprimante nu au acelai standard. Alegerea destinaiei Folosind comanda Report Form, ieirea poate fi direcionat ctre diferite destinaii. Pentru imprimarea raportului se utilizeaz comanda: REPORT FORM MyReport TO PRINT Pentru previzualizarea pe ecran a raportului se utilizeaz comanda: REPORT FORM MyReport TO PRINT PREVIEW Iar pentru salvarea raportului ntr-un fiier text, n format ASCII se utilizeaz comanda: REPORT FORM MyReport TO FILE MyFile.txt ASCII

5.2. Crearea Formularelor (alctuirea formularelor)


Majoritatea utilitilor scrise n Visual FoxPro includ cel puin un formular, acestea fiind predecesoarele ecranelor din versiunile vechi i sunt folosite ca interaciune a utilizatorului att cu datele semnificante ct i cu gndirea economic din majoritatea aplicaiilor. Interfaa cu utilizatorul client s-a schimbat o dat cu cerinele acestuia de a avea grafic condus pe evenimente i controale utilizator. Astfel, s-a renunat la ecranul albastru al versiunii de DOS i a fontului alb Courier de dimensiune 12. Visual FoxPro 6 este un puternic utilitar de proiectare a formularelor, ce-l ajut pe utilizator la crearea unor formulare perfecte, flexibile, n totalitate orientate obiect, indiferent de dimensiunea aplicaiei. Formularul Visual FoxPro este o clas container, ce cuprinde numeroase controale i containere precum casete text, butoane de comand, casete de validare, chenare pagin sau grile. Formularele au peste 100 de proprieti de baz i 60 de metode principale, permind adugarea de metode sau proprieti nelimitate. Formularele pot fi motenite din subclase de formulare specializate sau pot fi utilizate ca superclase pentru alte formulare. Diferena dintre formulare i alte clase container este c pe de o parte i adopt aspectul vizual 133

pe desktop-ul utilizatorului i pe de alt parte i aloc informaiile dintr-o sesiune de date privat. Un exemplu de formular simplu este prezentat n fig.9.1, avnd dou elemente vizuale componente: formularul propriu zis i controalele formularului.

Un formular simplu prezint informaii n mod uor-de-citit Formularul n sine const n fundal, pe care se afl majoritatea funcionalitilor formularului, precum rspunsul la evenimentele: click mouse, activare, redimensionare i mutare. ns majoritatea funcionalitilor sunt apelate de controalele din formular. n versiunile anterioare controalele se plasau in ferestre definite prin comenzile @SAY i GET, cu capacitate limitat de rspuns la evenimentele utilizatorului, dar ncepnd cu versiunea 3, Visual FoxPro permite ncorporarea de elemente ActiveX. Tabelul 9.1 include o list de controale native folosite n formulare i o scurt descriere: Tabelul 9.1 Controalele unui formular Visual FoxPro Nume Control Check box Combo box Descriere Caset de validare ce afieaz starea On/Off. Caset combinat - un control sub form de list . Este afiat numai valoarea curent selectat, restul listei poate fi extins de utilizator . Command button Buton de comand pe care utilizatoul d click pentru a induce o aciune. Command button group Un grup de butoane de comand ce funcioneaz mpreun. Edit box Caset de editare ce permite utilizatorului sa introduc informaii sub form de ir de caractere. Grid Grila este un control ce deschide o tabel ntr-un formular. 134

Image Label Line List box OLE bound control OLE container control Option group Page frame

Shape Spinner Text box

Timer

Imagine - un control ce afieaz o poz n formular. Etichet - afieaz un text. O line desenat n formular. Caset derulant ce afieaz o list de articole. Control OLE de legtur - a crui surs este un cmp general din tabel. Un container de obiecte i controale de tip OLE. Grup de opiuni - o serie de opiuni, din care utilizatorul poate selecta doar una singur. Chenar de pagin- permite utilizatorului s aleag una din extensiile de pagin, fiecare avnd un set diferit de controale. O form geometric ce se poate trasa n formular. Filator - o combinaie de caset text i controale sus-jos, ce permite incrementarea unei date numerice. Caset text permite utilizatorului s introduc informaii, salvate de obicei ntr-un cmp de tip caracter, numeric sau dat. Cronometru un control ce ruleaz o comand sau o serie de comenzi la intervale prestabilite.

Pentru crearea formularelor se utilizeaz urmtoarele metode: - Prin comanda CREATE FORM nume fiier sau CREATE FORM nume fiier AS nume superclas FROM nume librrie principal Din meniul File->New->Form - Se tasteaz comanda MODIFY FORM numeformular, sau MODIFY FORM urmat de selecia numelui formularului n caseta de dialog File, Open -Se selecteaz butonul New din bara de unelte i Form caseta de dialog -Se selecteaz extensia Docs din Project Manager, click pe Forms, i se selecteaz New (apar opiunile de creare automat cu utilitarul Form Wizard sau manual, pas cu pas) -Se utilizeaz Component Gallery sau Class Browser -Se tasteaz comanda MyForm = CREATEOBJECT(<numele subclasei formularului sau "Form" pentru clasa de baz>) urmat de MODIFY FORM "MyForm" -Se folosete un asistent Visual FoxPro Form sau dezvoltator-definit de genul Form Wizard. 135

Utilitarul Visual FoxPro de proiectare

Clasa ablon de formular se seteaz din extensia Forms a casetei de dialog Options Lucrul cu Form Designer Dup crearea unui formular nou se lanseaz utilitarul Form Desginer (Fig.9.3). Cele mai importante elemente: Form Canvas, reprezentarea vizual a containerului formularului, Fereastra de Proprieti, ce afieaz toate proprietile disponibile, evenimentele i setrile metodelor(PEM) pentru formular i controalele sale; i bara de unelte cu controale, care permite apelarea acestora prin drag and drop in zona canvas (aria de lucru).

136

n Form Designer se specific locul informaiei, textul si graficele n formular. Caseta de unelte Color palette permite alegerea culorilor formularului i controalelor sale Caseta de unelte Layout permite alinierea i dimensionarea controalelor, modificnd ordinea de ncrcare i suprapunere a obiectelor Caseta de unelte Form Designer stabilete afiarea altor bare de tip Form Designer, acest lucru mai poate fi realizat i din meniul View sau dublu click pe butonul close. Fereastra Data Environment cuprinde elementele specificate de mediul de date al formularului Fereastra Code afieaz codul atribuit metodelor i controalelor din formular Adugarea de controale ntr-un formular se face prin click pe control apoi click n zona canvas de lucru unde se dorete plasarea acestuia, a crui dimensiune implicit se modific prin click pe col sau pe latura controlului i tragere pn la dimensiunea dorit.

137

Caseta de unelte Form Controls este afiat n fig.9.4 ce const n urmtoarele seciuni: cele dou butoane de sus nu sunt controale, dar n locul lor sunt unelte care controleaz setrile pentru restul barei. Caseta de unelte Form Controls include diferite tipuri de controale Butonul de selecie obiecte (pictograma sgeat, stnga sus) indic dac un control este selectat i pregtit de eliberare(drop). Dac nu este selectat nici un control, butonul sgeat este n poziia jos sau on, indicnd c mouse-ul este folosit ca indice ctre zona de lucru canvas(drag). Dup selecia unui control, n timpul deciderii eliberrii controlului, butonul sgeat este poziia sus sau off(drop). Butonul View Class - (cel sub form de sertar-pictograma biblioteca din caseta de unelte cu controale, dreapta sus) permite comutarea ntre bibliotecile de clase. Sunt disponibile trei opiuni: Standard, include controale aplicabile din clasele de baz ale FoxPro, ActiveX include controale predefinite in Visual Foxpro, precum cel de calendar i bara de progres Microsoft i Add ce permite adugarea de biblioteci de clase n lista existent. Controalele disponibile: seciunea din mijloc a barei de unelte cu controale include toate clasele disponibile din biblioteca curent selectat. Butonul Builder Lock, pictograma baghet, controleaz lansarea automat a asistentului asociat controlului. Butonul Lock Visual FoxPro permite implicit alegerea i eliberarea unei instane pentru un control la un moment dat. Pictograma repreyentativ este lactul; cnd este setat on, se poate face click i aduga n formular orice numr de controale asemntoare, fr a mai fi necesar ntoarcerea la caseta de unelte cu controale i click din nou pe control. Acest lucru este util cnd sunt necesare, de exemplu, zece casete text ntr-un formular, ns nu i atunci cnd se elibereaz accidental mai multe controale de tip chenare de pagin pe acelai formular.

5.3. Generatorul de etichete


n aplicatiile informatice se poate pune, adeseori, problema afirii datelor dintr-o baz de date existent sub forma unor etichete, cri de vizit sau invitaii. Acest lucru se realizeaz utiliznd generatorul de etichete sau, altfel spus componenta LABEL DESIGNER a acestuia. Eticheta denumit aa generic, se consider o zon de pe ecran sau imprimant bine delimitat, n 138

care sunt plasate ntr-un format dorit date extrase din nregistrrile unei baze de date. Fiierul care memoreaz informaiile privind eticheta va avea extensia .LBX. Practic, pentru a realiza o etichet, se parcurg urmtorii pai: 1. Pornirea generatorului de etichete 2. Definirea obiectelor n fereastra de descriere a ecranului i stabilirea proprietilor acestora 3. Obinerea, la ecran sau imprimant, a etichetelor proiectate, pe baza datelor din tabelele active

Pornirea efectiv a generatorului se poate face fie pentru crearea unei etichete noi, fie pentru modificarea uneia existente. Pornirea generatorului pentru crearea unei etichete noi se poate face n dou moduri, astfel: - Cu comanda Foxpro: CREATE LABEL <nume_fiier_etichet > unde nume_fiier_etichet reprezint numele fiierului n care se vor memora opiunile utilizatorului legate de ecranul nou, care se creaz .

139

- Prin intermediul meniului principal, activnd submeniul FILE i apoi opiunea NEW, cu tipul de fiier selectat din lista afiat LABEL i OK. Pornirea generatorului pentru modificarea unei etichete existente, anterior create, se poate face n dou moduri, astfel: - Cu comanda Foxpro: MODIFY LABEL <nume_fiier_etichet> unde nume_fiier_etichet reprezint numele fiierului de tip etichet, care se modific. - Prin intermediul meniului principal, activnd submeniul FILE i apoi opiunea OPEN, cu tipul de fiier selectat din lista afiat LABEL i alegerea fiierului dorit. n ambele cazuri, pe ecran apare fereastra de configurare a ecranului, avnd specificat, n partea de sus a ecranului, numele fiierului indicat sau numele generic UNTITLED.LBX care va putea fi schimbat la salvarea fiierului cu opiunea SAVE AS...Fereastra de configurare de pe ecran conine o etichet generic, ale crei dimensiuni i format vor fi stabilite de utilizator. Pe o pagin apare, n mod implicit, o singur etichet. Precizarea dimensiunilor dorite se face modificnd valorile din csuele de text (Height, Width, Margin, Number Across, Spaces Between, Lines Between, Remarks) apar n fereastra de configurare. Execuia efectiv i deci obinerea etichetelor se va putea realiza fie: - prin intermediul meniului, activnd, din submeniul DATABASE, opiunea LABEL... - prin comanda : LABEL FORM <nume_fiier_etichet> Generarea automat a unei etichete se poate mai rapid folosind facilitile programului WIZARD, prin intermediul submeniului RUN, opiunea WIZARD i apoi opiunea LABEL. Astfel, n mod interactiv i printr-un dialog cu sistemul, utilizatorul i poate descrie i genera eticheta dorit. Opiunea LABEL din submeniul RUN va permite apoi obinerea etichetelor, ori de cte ori dorim acest lucru

5.4. Generatorul de filtre (QUERY)


Etape de realizare: - pornirea generatorului de filtre ( afiarea pe ecran a ferestrei de dialog prin intermediul creia utilizatorul i poate exprima opiunile); 140

precizarea tabelelor din care se vor extrage datele; precizarea eventualelor legturi ntre tabelele utilizate, dac e nacesar; - specificarea cmpurilor din care se vor extrage datele; - sortarea datelor extrase i eventual gruparea lor, dac este necesar; - definirea formatului de afiare a datelor obinute; - precizarea criteriului de selecie a datelor; - execuia propriu-zis a filtrului, cu salvarea lui sub un nume; - eventual, modificarea filtrului respectiv, dac este cazul. Pornirea generatorului de filtre se poate face : - fie printr-o comand corespunztoare: CREATE QUERY <nume_fiier> dac acum se creaz filtrul, sau MODIFY QUERY <nume_fiier> dac filtrul exist i trebuie modificat - fie prin intermediul meniului, selectnd din submeniul FILE, opiunea NEW i apoi activnd butonul radio QUERY urmat de OK Ca efect, pe ecran apare o fereastr de configurare i modificare a filtrelor, iar dac n momentul apelrii exista deschis i o tabel de date, atunci la meniul principal se mai adaug o opiune specific, cu numele Query. Dac nici o tabel nu era activ, atunci utilizatorul va alege, din fereastra de dialog afiat, tabela sau tabelele dorite. Dac se vor mai multe tabele deschise simultan, atunci cu opiunea Add table din submeniul nou aprut Query sau cu declanatorul ADD din fereastra Query Designer se permite acest lucru. Oricum, tabelele deschise vor avea numele afiat n fereastra Databases. Pe ecran apare apoi fereastra de dialog denumit RQBE Join Condition, care va permite specificarea relaiilor, a cmpurilor de legtur ntre tabelele respective. Selectarea cmpurilor din care urmeaz s fie preluate datele n filtrul ce se va crea se face activnd declanatorul SELECT FIELDS din fereastra de configurare a filtrului sau selectnd opiunea FIELDS din submeniul RQBE. 141

Selectarea se face poziionnd cursorul pe cmpul dorit i apoi se apas comutatorul Add > .

n lista care se va obine se pot afia cmpurile respective, dar i funcii sau expresii incluse de utilizator prin activarea listei ascunse Functions/Expressions din fereastra SELECT FIELDS. Comutatorul ORDER BY sau opiunea cu acelai nume din submeniul RQBE permite deschiderea unei ferestre speciale prin intermediul creia utilizatorul poate indica modul de ordonare a informaiilor obinute n urma filtrrii. Pentru aceasta, el trebuie s selecteze din seciunea Select Output numele cmpurilor funcie de valorile crora se face ordonarea i s precizeze, pentru fiecare, modul de ordonare: cresctor sau descresctor (n fereastra Ordering Criteria). Sistemul ofer utilizatorului i posibilitatea de a grupa datele obinute, dac acestea au fost ordonate, funcie de unul sau mai multe cmpuri. Acest lucru se realizeaz fie selectnd declanatorul GROUP BY din fereastra de configurare, fie selectnd opiunea cu acelai nume din submenizul RQBE. Ca efect apare o fereastr de dialog specific, cu numele RQBE GROUP BY. 142

Modul de afiare al datelor obinute n urma execuiei filtrului se stabilete prin intermediul listei ascunse OUTPUT Settings, care va pune la dispoziia utilizatorului urmtoarele opiuni: - Browse - datele se afieaz ntr-o fereastr de tip Browse, pentru care se poate specifica i un titlu Report / Label datele se sfieaz n mod normal pe ecran; activnd ns butonul Options sau opiunea cu acelai nume din submeniul RQBBE, apare o fereastr de dialog denumit RQBE DISPLAY OPTIONS, prin intermediul creia se pot preciza opiuni suplimentare legate de modul de afiare al rezultatelor. Exist aici dou seciuni: Formatting Options si Output Destinations Table / DBf - permite salvarea rezultatelor obinute ntr-o tabel al crei nume se va specifica (tip .DBF). Graph - permite prezentarea rezultatelor obinute sub form grafic, numai dac n prealabil, a fost instalat i deci exist componenta FOXGRAPH a SGBD-ului FOXPRO. Condiia sau condiiile de selectare se specific n partea de jos a ferestrei de configurare a filtrului, putnd fi scrise de la tastatur sau cu ajutorul constructorului de expresii . Mai multe condiii se vor lega ntre ele cu ajutorul operatorilor logici OR, AND sau NOT. Ca efect al creerii filtrului se genereaz automat un program SQL, care va conine o comand SELECT care poate fi vzut fie cu declanatorul See SQl, fie cu opiunea cu acelai nume din submeniul RQBE. Opiunea Comments permite introducerea, n programul generat, a unor eventuale comentarii dorite de utilizator. Pentru a executa filtrul astfel definit, se poate activa declanatorul Do Query sau se poate alege opiunea cu acelai nume din submeniul RQBE. Filtrul poate fi salvat sub un nume, cu opiunea SAVE sau SAVE AS din submeniul FILE, fiierul rezultat avnd automat extensia .QPR. Un astfel de fiier poate fi oricnd executat astfel: - fie cu comanda: DO <nume_fiier> .QPR 143

fie prin intermediul meniului, activnd opiunea DO din submeniul PROGRAM i alegnd fiierul ce se va executa. Generarea automat a unui filtru se poate realiza mai rapid folosind facilitile programului WIZARD, prin intermediul submeniului RUN, opiunea WIZARD i apoi opiunea QUERY. Astfel, n mod interactiv i printr-un dialog cu sistemul, utilizatorul i poate descrie i genera filtrul dorit. Opiunea QUERY din submeniul RUN va permite apoi obinerea filtrelor, ori de cte ori dorim acest lucru. -

5.5. Generatorul de meniuri


Meniul reprezint un element al limbajului Foxpro prin care se ofer utilizatorului o mulime de opiuni posibile de lucru, afiate pe ecran, astfel nct acesta s-i selecteze, n fiecare moment, opiunea dorit. n funcie de alegerea fcut, se declaneaz automat anumite aciuni, asociate cu opiunea aleas. Activitatea de proiectare i realizare a meniurilor este o activitate laborioas, necesitnd scrierea unor secvene mari de cod (programe). Din aceast cauz pe de o parte, dar i pentru a permite nespecialitilor s realizeze mici aplicaii, ntr-o manier de lucru simplificat, Foxpro pune la dispoziia utilizatorilor un generator automat de meniuri. Meniurile pot fi realizate fie prin comenzi Foxpro, fie cu generatorul de meniuri (componenta MENU BUILDER). Dup forma lor de prezentare, meniurile pot fi: meniuri orizontale ( tip MENU ); meniuri verticale ( tip POPUP ). Meniurile definite cu generatorul de meniuri au structura meniului standard, adic pe primul nivel au obligatoriu un meniu de tip orizontal, fiecare opiune a sa putnd s aib asociate meniuri verticale n cascad. Etape de realizare: 1. Definirea meniului principal, orizontal ( MENU PAD) , a meniurilor verticale (MENU POPUP) i a submeniurilor asociate (SUBMENU), memorate ntr-un fiier cu extensia implicit .MNX. 2. Apelarea generatorului automat de cod program surs, necesar apoi apelrii i execuiei sistemului de meniuri definit anterior (programul surs generat este memorat n fiier cu extensia implicit .MPR). 3. Lansarea n execuie a programului realizat. Pornirea generatorului pentru crearea unui meniu sistem nou se poate face n dou moduri, astfel: - Cu comanda Foxpro: 144

CREATE MENU [<nume_fiier_menu >?] [WINDOW <nume_fer >] [IN WINDOW <nume_fer >IN SREEN] unde nume_fiier_menu reprezint numele fiierului n care se vor memora opiunile utilizatorului legate de meniul definit, care se creaz ( cu extensia.MNX). - Prin intermediul meniului principal, activnd submeniul FILE i apoi opiunea NEW, cu tipul de fiier selectat din lista afiat MENU i OK. Pornirea generatorului pentru modificarea unui meniu existent, anterior creat, se poate face n dou moduri, astfel: - Cu comanda Foxpro: MODIFY MENU [<nume_fiier_menu >?] [WINDOW <nume_fer >] [IN WINDOW <nume_fer >IN SREEN] [NOWAIT] unde nume_fiier_menu reprezint numele fiierului de tip menu, care se modific. - Prin intermediul meniului principal, activnd submeniul FILE i apoi opiunea OPEN, cu tipul de fiier selectat din lista afiat MENU i alegerea fiierului dorit. n ambele cazuri, pe ecran apare fereastra de definire a meniului, avnd specificat, n partea de sus a ecranului, numele fiierului indicat sau numele generic UNTITLED. MNX care va putea fi schimbat la salvarea fiierului cu opiunea SAVE AS.

145

Se observ c fereastra de configurare a meniului conine, n dreptunghiul mare, 4 coloane de informaii ce trebuie specificate: Coloana PROMPT se completeaz cu numele opiunilor. Dac n butonul din dreapta este selectat opiunea MENU BAR, atunci opiunile sunt cele de nivel 0 , adic opiunile meniului principal orizontal. Din lista ascuns de Menu Bar se poate schimba nivelul de referin, adic se asigur trecerea la descrierea opiunilor pentru submeniuri. Textul RESULT are 2 coloane corespunztoare, prin care se precizeaz tipul de aciune ce va fi declanat prin alegerea opiunii de pe aceeai linie , atunci cnd se va executa programul. Aceste aciuni pot fi de tip: - Command comand Foxpro ce va trebui executat - Pad Name numele ataat opiunii, pentru a le putea regsi atunci cnd sunt selectate - Submenu submeniu de tip vertical, ce va trebui definit - Proc... procedur Foxpro ce va trebui definit. Coloana OPTIONS servete pentru definirea unor clauze suplimentare elementelor definite. Caracteristicile suplimentare pentru o opiune bar sau de submeniu pot fi precizate cu ajutorul comutatorului din coloana Options, care determin apariia unei ferestre de dialog cu opiuni legate de : COMMENT, SHORTCUT, MARK, SKIP FOR. Opiunea TRY IT permite testarea, ncercarea opiunilor definite n fereastra de configurare, care vor fi afiate n partea de sus a ecranului sau doar a acelora selectate, pentru care se afieaz proprietile. INSERT i DELETE din fereastra de configurare servesc pentru a insera, respectiv a terge o opiune din cadrul meniului definit. Cu alte cuvinte, un meniu care a fost definit ntr-o prim form, va putea fi ulterior completat, corectat, actualizat. Submeniul MENU se adaug automat la bara de meniu, odat cu pornirea generatorului i permite operaii legate de un meniu care a fost creat. Meniul se prezint ca n fereastra de mai jos, cu urmatoarele semnificaii:

146

GENERAL OPTIONS determin apariia unei ferestre de dialog care va permite precizarea urmtoarelor operaii: - definirea unei proceduri globale, care s fie executate atunci cnd pentru o opiune bar nu a fost definit o procedur specific. - scrierea codului de iniializare a meniului (SETUP) - scrierea codului de ncheiere a meniului (CLEANUP) - specificarea unui caracter de marcare specific barei de meniu (MARK) - stabilirea poziiei de pe ecran unde va apare meniul creat de utilizator Location - conine 4 butoane radio, cu urmtoarea semnificaie: - Replace meniul creat l va nlocui pe cel principal al sistemului Foxpro (este butonul implicit) - Append - meniul creat se va aduga la cel al sistemului Foxpro, n dreapta lui - Before meniul creat se va introduce n faa meniului sistem 147

- After meniul creat se va introduce dup bara meniului sistem MENU BAR OPTIONS determin apariia unei ferestre de dialog care va permite specificarea caracteristicilor pentru fiecare submeniu definit, prin intermediul urmtoarelor opiuni: - Name permite schimbarea opiunii, a submeniului activat, pentru care se vor defini caracteristicile - Procedure permite introducerea unei proceduri care s fie executat la selectarea opiunii sau meniului cruia i-a fost asociat. - Color Scheme permite alegerea, din lista ascuns corespunztoare, a combinaiei de culori asociate meniului, submeniului sau opiunii asociate. - Mark permite alegerea unui caracter de marcare pentru tot meniul, submeniul sau opiunea asociat. INSERT/DELETE Item permit inserarea unei opiuni noi i respectiv tergerea uneia existente. Salvarea unui meniu creat se va putea face fie tastnd simultan Ctrl/W, fie cu click mouse pentru a nchide fereastra de configurare, fie prin intermediul meniului, cu opiunea SAVE sau SAVE AS din meniul FILE. Pe disc fiierul astfel salvat va avea extensia .MNX. Pentru a genera automat programul corespunztor meniului definit, se apeleaz opiunea GENERATE din submeniul PROGRAM. Fiierul creat va avea acelai nume i extensia .MPR i va fi tratat ca orice program Foxpro, care va putea fi depanat, verificat i executat.

5.6. Generatorul de aplicaii


Apelarea se poate face direct, n fereastra de comenzi, cu comanda: DO FOXAPP.APP Urmare a acestei comenzi apare fereastra de dialog cu numele FOXPRO APPLICATION GENERATOR, n care utilizatorul va trebui s specifice: numele tabelei care se prelucreaz (scris sau selectat din lista tabelelor afiat) numele videoformatului (ecranului) de introducere i actualizare a datelor . Dac nu a fost creat anterior un astfel de videoformat, generatorul activat permite crearea unui videoformat pentru tabela selectat (butonul CREATE). Tot acum poate fi modificat un videoformat existent, cu butonul MODIFY i apoi salvat cu SAVE sau Ctrl/W. 148

Se activeaz apoi opiunea GENERATE pentru a crea aplicaia pentru tabela selectat i videoformatul specificat sau creat. Cu opiunea SAVE se salveaz aplicaia astfel creat, care va avea numele specificat i extensia .APP. Odat cu generarea aplicaiei, n partea de sus a ecranului apare un meniu cu opiunile: - SYSTEM - asemntor meniului System pentru Foxpro - EDIT asemntor meniului Edit pentru Foxpro - APPLICATION pune la dispoziia utilizatorului comenzi pentru actualizarea tabelei prin adugare, modificare i tergere de nregistrri, indexare, interogare i obinere rapoarte. - UTILITIES Ieirea din aplicaie se face cu Quit din meniul SYSTEM.

149

MODULUL 6 PROGRAMARE ORIENTATA PE OBIECTE IN VISUAL FOXPRO

Microsoft Visual FoxPro Microsoft Visual FoxPro ofer instrumente pentru crearea i gestiunea de aplicaii i componente de baze de date pe 32-bii de nalt performan. Instrumentele sale robuste i limbajul orientat obiect sunt ideale pentru a construi aplicaii moderne, scalabile, pe mai multe nivele ce ncorporeaz elemente de tip client-server i Internet. Visual FoxPro, ca SGBDR complet relaional, ofer utilizatorilor (de toate categoriile) un mediu performant de dezvoltare a aplicaiilor cu baze de date.

6.1 Faciliti oferite de Visual FoxPro 6.1.1 O cale rapid de a mbunti vechile aplicaii FoxPro :
- VFP permite integrarea tehnologiilor client-server i Web prin construirea de aplicaii bazate pe componente i multi-nivel. Visual FoxPro 6.0 suport Component Object Model(COM), prin care obiectele interacioneaz local ntre ele, i Distributed COM (DCOM), prin care obiectele interacionez n reele. De asemenea Visual Foxpro suport ODBC, OLE DB i alte standarde de comunicare cu baze de date de nalt performan - Se construiesc aplicaii client-server de nalt performan prin utilizarea Remote Views i Upsizing Wizard, interogarea facil i modificri de la distan a datelor prin SQL, folosind Remote Views i ODBC. Datele din FoxPro se pot migra uor pentru a rula pe Microsoft SQL Server folosind Upsizing Wizard. 150

- Se construiesc obiecte bazate pe Visual Foxpro pentru datele de afaceri ce pot fi uor reutilizate prin COM i DCOM. O aplicaie Microsoft Excel poate rula o component de tip Visual FoxPro COM pentru a cuta, a compara i returna datele local sau la distan n reea. - Se construiesc aplicaii robuste cu baze de date WEB prin componentele Visual Foxpro COM mpreun cu Microsoft Internet Information Server (IIS), aplicaii WEB ce creeaz pagini WEB dinamice prin contopirea datelor cu HTML. -Aplicaiile Visual FoxPro se transfer automat pe server deoarece suport tranzacii de tip Microsoft Transaction Server, nemai fiind necesar scrierea de cod la gestionarea, desfurarea i transferul componentelor Visual FoxPro COM pentru mai muli utilizatori. - Transferul rapid al datelor pe Internet prin Microsoft Visual InterDev oferind un mediu RAD i instrumente de gestiune a site-urilor integrate, prin care se creeaz, public i gestioneaz aplicaii WEB dinamice. Include instrumente de baze de date puternice compatibile cu Visual FoxPro i alte baze de date ODBC. - Se pot partaja datele din Visual FoxPro pentru alte aplicaii prin driver-ul Visual FoxPro ODBC, pentru acces deplin la datele din Visual FoxPro n aplicaiile de tip Microsoft Office, Microsoft BackOffice i produsele sistem de dezvoltare Microsoft Visual Studio - Facilitatea de integrare cu Microsoft Visual Studio Enterprise Edition simplific analiza, proiectarea i implementarea soluiilor bazate pe componente, prin Visual Modeler.

6.1.2 Creterea productivitii i flexibilizarea produselor software


- Se reduce timpul de dezvoltarea prin programarea orientat obiect, se simplific programarea prin utilizarea tehnologiilor de dezvoltare orientateobiect. Se construiesc biblioteci puternice i flezibile pentru obiecte reutilizate prin crearea unor clase de cod i elemente de interfa. Se folosete motenirea ca modalitate de aplicare a modificrilor dintr-o clas n toate subclasele - Se folosesc instrumente built-in pentru gestionarea claselor i a bibliotecilor, regsirea, vizualizarea i utilizarea claselor n aplicaii prin Class Browser i Component Gallery. Coverage Profiler se utilizeaz n construirea de aplicaii mai stabile i mai performante. Panoul de jos afieaz fiecare linie de cod i indic dac se execut, de cte ori, ct timp a luat prima dat, i ce tip mediu de execuie a fost necesar. Aceste valori ajut la depistarea blocajelor de performan din codul surs i ncadrarea n planificare. 151

-Instrumentele RAD faciliteaz scurtarea timpul de dezvoltare i efortul printrun editor de cod cu culori i depanator intuitiv de genul sistemului de dezvoltare Microsoft Visual C++. - Integrarea Microsoft Visual SourceSafe cu sistemul de control Visual SourceSafe permite o mai bun gestionare a codului surs, indiferent dac proiectul se lucreaz n echip sau independent. Componenta Gallery uureaz regsirea, i utilizarea componentelor precum biblioteci de clase , formulare, rapoarte i cod. Se pot muta rapid clasele din Component Gallery n formulare i rapoarte prin drag&drop. - Sunt extinse controale de tip ActiveX n clasele VisualFoxpro; se pot aduga i schimba proprieti i metode pentru atribuirea caracteristicilor controalelor.

6.1. 3 Transfer uor pe 32-bii


Caracteristicile Windows pe 32 bii sunt compatibile cu viteza i familiaritatea FoxPro ca urmare a implementrii extensiilor de tehnologii de dezvoltare orientat obiect i a instrumentelor robuste, pstrndu-se totodat tradiionalitatea FoxPro. Aplicaiile Visual FoxPro se construiesc rapid pe baza claselor, fr a mai rescrie cod de fiecare dat, versiunea 6.0 livrndu-se cu peste 100 de clase predefinite, testate i reutilizabile, oferind funcionaliti precum manipularea datelor, detectarea conflictelor de actualizare, regsirea datelor i cutri, i dezvoltare WEB. Dezvoltarea de aplicaii orientate obiect este facilitat cu utilitarele Application Wizard i Application Builder, ce ofer un cadru de implementare pentru toate sistemele. Formularele se pot crea rapid prin obiecte, spe deosebire de FoxPro 2.x ce necesit limbaj procedural pentru crarea de formulare i controale. Visual Foxpro permite construirea acestora n mod vizual ca obiecte cu proprieti depline, metode i evenimente. Se selecteaz controalele necesare din caseta de unelte toolbox, se plaseaz n formular, se atribuie proprieti de afiare i comportament, se scrie cod pentru evenimente i se ruleaz formularul. Prin tehnologia Microsoft Rushmore se construiesc aplicaii rapide pe 32 bii, prin tehnologia de obtimizare interogri Se pot aduga funcii unice prin utilizarea controalelor ActiveX, ce reprezint componente software reutilizabile implementate cu puin cod surs, existnd mai mult de 6000 de controale ActiveX disponibile pentru implementare n aplicaii. Asistenii (Wizards) finalizeaz rapid sarcini obinuite i complexe, Visual Foxpro 6.0 include mai mult de 20 de asisteni ce ndeplinesc automat sarcini 152

diverse. De exemplu, Database Wizard ofer abloane i opiuni pentru crearea de baze de date i tabele precum contacte, gestiunea timpului i facturilor, introducere de comenzi, gestiunea cheltuielilor. Ali asisteni ofer ajutor pentru crearea formularelor, rapoartelor, graficelor i etichetelor, import de date, mail merge, publicare pe Web etc Codul Foxpro 2.x, ferestre-ecrane i rapoarte pot fi reutilizate, ceea ce costurile i timpul necesar migrrii datelor i depanarea aplicaiilor. Dup rularea codului FoxPro2.x Visual Foxpro convertete automat rapoartele i formularele n format Visual Foxpro la momentul deschiderii acestora.

6.2 Programarea orientat obiect in Visual FoxPro


Programarea Orientata Obiect (PrgOO) revoluioneaz aproape fiecare aspect al programrii de aplicaii sub Visual FoxPro, de la fazele de analiz i design pn la scrierea codului surs i testarea aplicaiilor i a componentelor. PrgOOO a fost introdusa n Visual FoxPro versiunea 3.0 i a devenit unul din standardele cel mai des folosite. Primul i cel mai important concept cheie n PrgOO este un obiect. Un obiect este un pachet de informaii i aciuni. Spre exemplu, considerm un ascensor ca fiind un obiect coninnd proprieti (maxim de greutate), produce aciuni (ca nchiderea i deschiderea uilor), i are o interfa public (butoanele de control) care faciliteaz interaciunea cu mediul care l nconjoar.

6.2.1 Proprietile
Datele dintr-un obiect se numesc proprieti. O proprietate (n termeni Visual FoxPro) este o variabil de memorie care este ataat unui obiect. Valoarea poate fi interogat i modificat folosind numele obiectului urmat de un punct (.) i de numele proprietii (proprietile mai sunt numite i variabile membru n unele texte). Proprietile pot avea date de orice tip care sunt valide pentru variabilele de memorie Visual FoxPro. O proprietate exist atta timp ct obiectul cruia i este ataat exist. De exemplu, daca avem o proprietate denumit lIsNew care este ataat unui obiect numit oCust, am putea interoga valoarea proprietii scriind urmatoarea linie: ? oCust.lIsNew

153

6.2.2 Metodele
n afar de posibilitatea de a avea date ataate, obiectele trebuiesc s desfaoare aciuni. Aceste aciuni sunt codate sub form de proceduri care sunt ataate obiectului, denumite metode. Exist puine diferene ntre o procedur obinuit i o metoda cu excepia modului prin care sunt chemate. O metod este chemat scriind numele obiectului urmat de un punct i apoi numele metodei. Spre exemplu, urmtoarea linie ilustreaz modul de apelare a metodei denumit Print ataat fiind de obiectul oCust: oCust.Print() Tehnic vorbind, parantezele de la sfritul numelui metodei este necesar dac se ateapt ntoarcerea unei valori sau dac se apeleasa metoda cu parametrii. E de sftuit folosirea ntotdeauna a parantezelor pentru consisten, i se menioneaz i faptul c se apeleaz o metod.

6.2.3 Evenimentele
Evenimente sunt elemente care se ntmpl. Spre exemplu apsarea pe mouse este un eveniment. Evenimentele pot fi cauzate de aciunea unui utilizator (ca i apsarea pe mouse) sau de nsui sistemul (ca atunci cnd apare o eroare). Cnd se creeaz o clas (asemeanea unui buton) n Visual FoxPro, se pot ataa cod (metode) evenimentelor . Cnd evenimentul are loc, metoda asociat (metoda de click) este apelat automat. Se poate ataa cod chiar i evenimentelor care se execut automat cnd obiectul este creat (evenimentul Init) i cnd evenimentul este ters (evenimentul Destroy).

6.2.4 Clasele
n programare orientat obiect, obiectele nu sunt niciodat codate, n locul acestora se folosete o variant mbuntit denumit clas de obiecte. Dup aceea obiectele sunt instaniate (create) din acea clas. Toat programarea se face la nivelul clasei. Odat ce obiectul a fost instaniat dintr-o clas tot ce ramne de fcut este s se interacioneze cu el. Nu se vor aduga metode sau modifica cele existente dintr-un obiect, ci mai degrab se vor aduga sau schimba metode ntr-o clas. Exemplu: DEFINE CLASS myClass AS Custom cName = "" cType = "" 154

lIsNew = .F. PROCEDURE ShowVals ? this.cName ? this.cType IF this.lIsNew ? "I'M NEW" ELSE ? "I'M OLD" ENDIF ENDPROC ENDDEFINE Paragrafele urmtoare vor descrie codul de mai sus. Define Class myClass as Custom Aceast linie de cod transmite programului Visual FoxPro faptul c se definete o clas nou denumit MyClass care se bazeaz pe o alt clas denumit Custom, care va fi descris mai tarziu n acest capitol. cName = "" cType = "" lIsNew = .F. Aceste linii de cod sunt cunoscute sub numele de cod de declaraie. n aceast parte a definirii clasei, se listeaz variabilele membre (proprietile) ale obiectului i ale datelor iniiale. Dac unul dintre variabilele membre este un vector, partea de DECLARE va fi amplasat aici PROCEDURE ShowVals ? this.cName ? this.cType IF this.lIsNew ? "I'M NEW" ELSE ? "I'M OLD" ENDIF ENDPROC Aceasta este definiia unei metode. Apelarea unei metode execut tot codul surs ncepnd cu PROCEDURE i terminnd cu ENDPROC. O metod 155

este similar unei proceduri FoxPro 2.x, cu excepia c metoda este apelat prin intermediul obiectului su.

6.2.5 Instanierea obiectelor


Un obiect este instaniat prin funcia CREATEOBJECT(). Aceasta este sintaxa pentru crearea unei instane MyClass: oMyClass = CREATEOBJECT("MyClass") oMyClass este doar o variabil de memorie de tip Obiect. Pentru a putea accesa membrii oMyClass, se pot folosi urmtoarele comenzi: ? oMyClass.cName && Initially blank oMyClass.cName = "Menachem Bazian" ? oMyClass.cName && Now shows "Menachem Bazian" oMyClass.ShowVals() && Runs the showvals method

6.2.6 Referirea unei Metode sau a unei Proprieti ntr-o clas


Pentru a se putea referi la proprietile unui obiect sau ale unei metode din nsui clasa, se va folosi indentificatorul THIS n locul numelui obiectului (s-a putut observa acest lucru n procedura SHOWVALS). IF this.lIsNew ? "I'M NEW" ELSE ? "I'M OLD" ENDIF Cuvntul cheie THIS semnific faptul c se acceseaz metoda sau variabila membr ale obiectului n sine.

6.2.7 Subclasarea unei clase unei altei clase


a) Crearea unor clase bazate pe cele anterioare S presupunem c avem o clas denumit Light (lumin) care modeleaz lumina dintr-o camer. Clasa ar avea nevoie de o metod care s poat nchide i aprinde lumina i o proprietate pentru statusul curent al luminii. Ar putea arta astfel: DEFINE CLASS light AS custom status = "OFF" 156

PROCEDURE Toggle IF this.status = "OFF" this.status = "ON" ELSE this.status = "OFF" ENDIF ENDPROC ENDDEFINE n exemplul clasei Light, se creaz un obiect care practic are o singur proprietate i o metod. Aceasta funcioneaz perfect pentru ntreruptoare care doar sting i aprind lumina, dar s presupunem c am dori s crem un ntreruptor care s i diminueze lumina. ntreruptorul este nc aplicabil: lumina putnd nc s fie aprins i stins. Ceea ce ne trebuie este o variant modificat a clasei Light care s aiba aceleai capabiliti ca i clasa Light i n plus capacitatea de a diminua lumina. Pentru aceast ilustrare se vor stabili urmtoarele reguli: cnd se va ncerca folosirea diminuatorului, se va trece de la lumin maxim la lumin slab i apoi lumin maxim. Pentru a stinge sau aprinde totui lumina se va folosi metoda ntreruptorului de baz. Astfel se poate realiza acest lucru folosind modelul OOP: DEFINE CLASS dimmer AS light intensity = "FULL" PROCEDURE DimmIt IF this.status = "OFF" RETURN ENDIF this.intensity = IIF(this.intensity = "FULL", ; "HALF", "FULL") WAIT WINDOW "Lights are now "+this.intensity+" power." ENDPROC ENDDEFINE n originalul DEFINE al clasei (clasa Light), s-a folosit Custom ca o clas de baz. Custom este clasa de baz cea mai simpl care este montat n FoxPro; aceasta se folosete cnd se creaz obiecte de la zero. n DEFINE cel 157

folosit aici, clasa de baz este Light. Aceasta semnificnd faptul c se va moteni tot ceea ce are Light de ctre clasa Dimmer. Totui, fr existena unui cod n clasa Dimmer pentru a manevra metoda ntreruptorului i a proprietii statusului, Dimmer capt metoda i proprietile pentru c este o subclas a clasei Light. Acest proces este cunoscut sub denumirea de motenire. Efectul produs este subclasa (Dimmer) ca fiind o varianta specializat a superclasei (Light). b) Ignorarea comportamentului de motenire Una dintre cele mai frumoase lucruri la motenire este faptul c putem accepta ceea ce dorim de la superclas, iar restul s ignorm. Peste o metoda se poate trece sau ignora cnd este recodat n subclas. Iat un exemplu: DEFINE CLASS offdimmer AS dimmer intensity = "FULL" PROCEDURE DimmIt WAIT WINDOW "Dimmer is DIsabled" ENDPROC ENDDEFINE n acest caz, metoda DimmIt a fost redefinit/ignorat. Metoda DimmIt nu v-a mai fi apelat din clasa Dimmer. Sa presupunem c am vrea s rulm metoda din clasa metoda DimmIt a clasei Dimmer i pe urm s adugam cod la acesta. Astfel s-ar putea proceda: DEFINE CLASS AnotherDimmer AS offdimmer intensity = "FULL" PROCEDURE DimmIt Dimmer::Dimmit() OffDimmer::Dimmit() WAIT WINDOW "Isn't this cool?" ENDPROC ENDDEFINE Operatorul (::) este folosit pentru a apela metode din clase aflate superior n ierarhie. A se observa c se pot apela metode doar din clase din care s-a motenit. 158

6.2.8 Protejarea metodelor i a proprietilor


Cnd se creeaz un obiect, trebuie avut n vedere care va fi interfaa public pe care o va avea clasa. O clas n mod obinuit are proprieti i metode care sunt pentru a fi folosite numai n interiorul clasei. Dac alte proprieti i metode, ar fi accesate din exterior, pot avea un efect dezastruos pentru cele din interiorul clasei. S considerm exemplul clasei Light i s presupuem c metoda ntreruptorului are un cad care i permite s aprind lumina i s o nchid bazat pe proprietatea Status. Dac modificm proprietatea Status prin accesarea ei din exteriorul clasei, metoda ntreruptor (Toggle) nu va lucra corespunztor. Soluia la aceast problem este protejarea metodei i a proprietilor care nu ar trebuie s poat fi accesate din exteriorul clasei. Cnd scriem codul clasei putem proteja proprietile adugnd definiii de genul PROTECTED numeproprietate n zona declarativ a clasei. Pentru metode trebuie adugat cuvntul cheie PROTECTED pe linia procedurii. DEFINE CLASS myClass AS Custom PROTECTED cName cName = "" cType = "" lIsNew = .F. PROTECTED PROCEDURE ShowVals ? this.cName ? this.cType IF this.lIsNew ? "I'M NEW" ELSE ? "I'M OLD" ENDIF ENDPROC ENDDEFINE n acest exemplu, proprietatea cName i metoda Showvals sunt protejate. ncercrile de a le accesa din exteriorul clasei ar produce o eroare ca i cum proprietatea i metoda nu ar exista (i n ceea ce privete lumea exterioar, ele nici nu trebuie s existe). 159

Dac o clas trebuie s fie controlat (ca i proprietatea Status, care poate fi modificat doar de metoda Toggle / ntreruptor), atunci ea ar trebui protejat. Dac utilizatorul trebuie s citeasc valoarea acelei proprieti, trebuie s punem la dispoziie o metod care returneaz valoarea proprietii protejate. De exemplu, pentru a accesa proprietatea cName n clasa drept exemplu prezentat anterior, ar trebui s crem o metod denumit ShowName dup cum urmeaz: FUNCTION ShowName RETURN (this.cName) ENDFUNC

6.2.9 Polimorfismul
Polimorfism este capacitatea de a oferi metodelor sau proprietilor din clase diferite chiar dac ele semnific lucruri distincte. De exemplu, s considerm exemplul cu obiectele clasei Light, care toate au o metod numit Toggle (ntreruptor), care aprind i opresc lumina. Acum s presupunem c trebuie s crem un cu totul alt obiect denumit telephone (telefon). Obiectul Telephone ar putea s nu aib legtura deloc cu obiectul Light, dar exist o metod ataat acesteia numit Toggle. S comparm urmtoarele comenzi: oLight = CREATEOBJECT("Light") oPhone = CREATEOBJECT("Telephone") oLight.Toggle() &&Runs the Toggle method from &&the Light object oPhone.Toggle() &&Runs the Toggle method from &&the Phone object S observm ct demult se aseaman oLight i oPhone. Putem apela metoda Toggle din oricare obiect ntr-un mod similar chiar dac ar putea face lucruri distincte. Polimorfismul ne d posibilitatea sa stabilim standarde n loc de metode care fac acelai lucru. De exemplu, putem avea o metod Show pentru diferite obiecte care este desemnat s apeleze poriunea de afiare a obiectului (de ex., oCust.Show() ar putea afia formularul clientului, pe cnd oInv.Show() ar putea afia formularul de factur). Frumuseea acestui lucru deriv din viziunea utilizatorului. nseamn c putem folosi obiectele cu o mult mai mare uurin pentru c putem realiza o interfa consistent pentru lucrul cu clase.

160

6.3 Sistem de mentenanta n POO


Pornind de la exemplul luminii / Light, s presupunem c utilizatorul schimb definiia de baz a ntreruptorului / switch. n acest exemplu un ntreruptor de lumin (light switch) are o singur proprietate (Status) i o metod (Toggle). S presupunem c firma a reconceput ntreruptorul de baz (clasa Light) pentru a aduga o nou facilitate. Acum, cnd utilizatorul manevreaz ntreruptorul, sistemul i spune utilizatorului ce s-a ntmplat. Pentru a realiza acest lucru, tot ce trebuie s se realizeze este modificarea definiiei clasei Light dup cum urmeaz: DEFINE CLASS light AS custom status = "OFF" PROCEDURE LightSwitch IF this.status = "OFF" this.status = "ON" ELSE this.status = "OFF" ENDIF WAIT WINDOW "Light is now " + this.status ENDPROC ENDDEFINE De la acest punct n continuare, toate obiectele instantiate din clasa Light primesc metoda modificat. Ca efect, s-a modificat aciunea fiecrui obiect bazat pe aceast clas adugnd cte un rnd de cod la definiia clasei. Dar aceasta nu este tot. Nu numai c am modificat toate obiectele bazate pe clasa Light, dar am modificat i fiecare obiect bazate pe subclasele ale clasei Light (de exemplu, dimmer). Acesta este un mod ideal de a realiza cod reutilizabil. Partea mai puin plcut a lucrurilor este faptul c dac greim n acea clasa am putea genera erori i n subclasele bazate pe aceasta, indiferent de aplicaia n care este folosit clasa.

6. 4 Realizarea claselor in Visual FoxPro


Pn acum toate exemplele enunate se refer strict la cod de programare. De fapt unele clase nu pot fi programate dect prin cod scris. Totui, pentru marea majoritate, crearea claselor este mult mai eficient 161

folosind instrumentul Visual Class Designer creat pentru a realiza cu uurina clase de obiecte. Visual Class Designer este un supraset al Form Designer. n fapt, Visual Class Designer este mai degrab un Designer folosit de fiierul meta pentru a stoca clasele create ntr-o copie de structur .SCX / .SCT. Singura diferen const n faptul c extensia dat unui fiier de clas este .VCX n locul .SCX, i n faptul c poate memora mai multe clase ntr-un singur fiier spre deosebire de un singur formular n cazul unui fiier .SCX. Cnd se creaz clase n mod vizual, Visual FoxPro permite accesul la bara de controale i la fereastra de proprieti. Figura urmtoare exemplific Visual Class Designer cnd se lucreaz pe o clas a unui buton.

Visual Class Designer Toate opiunile meniului acioneaz aproape identic cu cele ale Designer ului de formulare. Astfel vor fi prezentate doar elementele care difer de cele ale Designer ului de formulare. 162

6.4.1 Diferenele designului de suprafa


Prima diferen este aparent, dar tehnic vorbind nu este nici o diferen. Obiectul supus modificrii n Form Designer este un formular. Un formular este un container de obiecte i de aceea poate conine mai multe obiecte. n figura XXX se nfieaz doar un obiect CommandButton. Aceasta, se datoreaz clasei care este construit fiind o subclas a CommandButton, care nu suport adugarea de noi obiecte. Astfel tot ce putem vedea este un singur obiect pe care lucrm. Dac lucrm pe o clas de tip formular n Visual Class Designer, spaiul de lucru arat identic cu cel al Form Designer.

6.4.2 Diferenele de meniu


Opiunile care sunt specifice formularelor, ca i Create Form Set i Remove Form Set , nu se regsesc n meniu Visual Class Designer. Adugarea unei opiuni de meniu, Class Info, i operaiunile noilor metode i proprieti , de ctre Visual Class Designer, sunt realizate puin schimbate. Aceste schimbri vor fi primele discutate.

6.4.3 Adugarea proprietilor i a metodelor


Opiunile din meniu i anume, New Property i New Method, funcioneaza ca i n Form Designer cu o modificare important: apare un nou control de tip check box n fereastra de dialog care ne permite s protejm noile metode i proprieti. Bifarea acestui control semnific protejarea n sine a proprietii sau metodei. Pentru a nu mai proteja motoda sau proprietatea, opiunea Edit Property sau Edit Method. De reinut c o proprietate sau o metod, odat protejate, nu pot fi neprotejate ntr-o subclas. Va trebui sa fie deprotejat la nivelul la care a fost adugat n ierarhia clasei.

6.4.4 Accesarea Informaiilor clasei


Opiunea de meniu, Class Info, d developer ului acces la informaii privind clasa care este modificat cu fereastra de dialog prezentat n imaginea de mai jos:

163

Fereastra de dialog Class Info Tabul Class n acest frame al ferestrei arat cteva informaii despre clas. Urmtorul tabel descrie opiunile din fereastr: Toolbar Icon Aceast opiune stabilete ce pictogram va fi afiat n bara de instrumente al controalelor formularelor n momentul cnd fiierul de tip .vcx este ncrcat. Apsnd pe butonul de comand de la dreapta spaiului editabil, va afia fereastra de dialog GETPICT care permite selectarea unui fiier grafic. Acesta este conceput n ideea facilitii anterioare cu excepia c se refer la pictograma afiat pentru aceast clas n fereastra Class Browser. Dac aceast opiune este setat, n momentul cnd un program, coninnd aceast clas, este construit folosind Project Manager, se va genera o automatizare personalizat de server i GUID (Identificator Global Unic) Determin unitatea de msur a gridului. Aici se pot introduce descrieri sugestive ale clasei. Numele clasei care este modificat. Superclasa acesteia. Numele fiierului .vcx n care este salvat clasa.

Container Icon

OLE Public

Scale Units Description Class Name Parent Class Class Library

164

Urmtorul tab este Members, care afieaza membrii clasei curente. Membrii clasei pot fi proprieti, metode, evenimente, sau obiecte. Obiectele membre apar dac clasa este una compozit (de tip container). Acest tab, care este exemplificat n figura XGY, conine o list a tuturor membrilor clasei i facilitez programatorului s i protejeze prin selectarea coloanei protejate. Coloana No Init este aplicabil numai obiectelor membre i transmite Visual FoxPro dac s ruleze evenimentul Init al acestui obiect cnd este adugat la momentul de rulrii. Prin bifare se specific ignorarea evenimentului.

Tabul de membrii pentru fereastra de dialog Class Info. n continuare va fi preyentat modul de programare in Visual Designer i anume cele dou modele: CREATE i MODIFY Crearea unei clase O clas nou poate fi creat cu comanda CREATE CLASS. Folosirea acestei comenzi fr specificarea altor informaii prezint imaginea de mai jos:

Fereastra de dialog a unei noi clase

165

Clasele pot fi bazate pe cele coninute deja n Visual FoxPro sau pe cele create ulterior de programator. Pentru a baza clasa nou creat pe una de baz creat tot de ctre programator se d click pe butonul (...). O fereastr de dialog va permite indicarea unei clase care este necesar.

Fereastra de dialog n care se selecteaz o clas. Modificarea Clasei ntr-un fiier .VCX Clasele pot fi modificate n Visual Class Designer prin comanda MODIFY CLASS. Sintaxa comenzii: MODIFY CLASS <NumeClas> OF <NumeLibrrieClas> NumeLibrarieClas este numele fiierului .vcx coninnd clasa ce va fi modificat.

166

ANEXA NR. 1
PROIECT la disciplina
BAZE DE DATE I SISTEME DE GESTIUNE A BAZELOR DE DATE I. CUPRINS CADRU ORIENTATIV AL PROIECTULUI: 1. Tema proiectului 2. Obiective (Prezentarea principalelor funciuni ale aplicaiei); 3. Definirea i proiectarea logic i fizic a ieirilor (machete ale rapoartelor de ieire: ex. L1: Listare tabela 1; L2: listare tabela 2; L3: Listare din ambele tabele.etc.); 4. Definirea i proiectarea logic i fizic a intrrilor (macheta ecranelor de preluare date de intrare); 5. Definirea i proiectarea logic i fizic a bazei de date . Proiectarea conceptual a bazei de date (DEA) . Structura tabelelor bazei de date 6. Definirea i proiectarea meniurilor aplicaiei 7. Schema bloc a aplicaiei 8. Anexe: - Listarea programului surs - Situaii de ieire cu date de test semnificative. 9. Bibliografie II. ETAPE DE REALIZARE A PROIECTULUI (Model orientativ) Etapa I-a: Analiza i prezentarea cerinelor aplicaiei: - Denumirea aplicaiei; - Prezentarea principalelor funciuni ale aplicaiei; - Identificarea coleciilor de date i modelarea conceptual i logic a bazei de date; - Specificarea cerinelor funcionale i a restriciilor de realizare a aplicaiei informatice cu baze de date. Etapa a II-a: Proiectarea aplicaiei: - Identificarea componentelor aplicaiei: ieiri, intrri, baze de date, fluxul de prelucrri: 167

- Proiectarea machetelor pentru rapoartele de ieiri informaionale ale aplicaiei; - Stabilirea listei cu documentele primare ale aplicaiei informatice; - Proiectarea machetelor videoformat pentru preluarea datelor de intrare; - Proiectarea bazei de date i alegerea SGBD-ului (stabilirea tabelelor bazei de date); Proiectarea schemei fizice a bazei de date (structura tabelelor bazei de date); Diagrama entitate legturi dup normalizarea bazei de date; Proiectarea meniului principal al aplicaiei informatice (meniuri cu funciuni, butoane, taste funcionale etc.); - Proiectarea schemei de sistem a aplicaiei; - Estimarea eficienei economice a aplicaiei informatice cu baze de date. Etapa a III-a: Realizarea aplicaiei informatice: - Elaborarea, testarea i integrarea modulelor aplicaiei informatice cu baze de date ntr-un produs program reutilizabil. Observaii: 1. Dezvoltarea modulelor aplicaiei informatice se poate face fie n limbajul de programare specific SGBD-ului ales, fie apelnd la generatoarele de aplicaii disponibile n SGBD-ul ales. 2.Pentru nivelul de utilizatori se cere realizarea unei aplicaii informatice care are cel puin dou tabele corelate i cel puin patru rapoarte. n anexa proiectului se va ataa rezultatul rulrii cu datele de test; 3.Pentru nivelul analiti- programatori se cere crearea unei aplicaii cu cel puin patru tabele (dou cte dou legate prin cmpuri comune), ncrcarea lor cu date corelate, realizarea de machete videoformat (formulare) destinate activitii de actualizare i vizualizare simultan a tabelelor corelate, realizarea a cel puin patru interogri din baza de date i realizarea a cel puin trei rapoarte. In anexa proiectului se va ataa listingul programului surs i rezultatul rulrii cu datele de test. Etapa a IV-a: Implementarea aplicaiei i meninerea n funciune: - Precizarea platformei hardware i software minimala pentru rularea aplicaiei i a graficului de implementare a aplicaiei; - Crearea i popularea cu date a tabelelor bazei de date i mersul n paralel cu sistemul actual; 168

Adaptarea structurii tabelelor bazei de date i a aplicaiei la dinamica cerinelor utilizatorilor i la schimbrile tehnice i organizatorice care pot surveni. III. LISTA TEMELOR PENTRU PROIECTUL INDIVIDUAL: 1. Aprovizionarea cu materii prime i materiale - Evidena stocurilor de materii prime i materiale (fie de gestiune: intrri;consumuri; stoc final) - Calculul necesarului de aprovizionat n funcie de planul de producie i de stocul existent - Recepia materialelor de la furnizori; - Elaborarea NIR pentru marf intrat i evidena abaterilor; - ncheierea contractelor de aprovizionare cu furnizorii de materiale pentru acoperirea necesarului; - Urmrirea realizrii contractelor:(evidena facturi pe furnizori-contractemateriale- cantiti- diferene de penalizat) - Elaborarea unui grafic de aprovizionare (intrri materiale furnizori- date calendaristice) - Evidena intrrilor pe categorii de materiale i furnizori 2. Activitatea de Producie: - Elaborarea planului anual de producie n funcie de capaciti (produse cantiti estimarea potenialului pietei); - Defalcarea planului anual pe uniti de producie i perioade de timp; - Repartizarea sarcinilor de plan pe posturi de lucru (produs-reper-operaiecantiti) - Calculul ncrcrii utilajelor - nregistrarea produciei realizate (post de lucru- produs/reper realizat- cantitate evidena rebuturi) - Urmarirea realizrii planului de fabricaie pe secii i sectoare de activitate. 3. Activitatea comercial (Desfacerea produciei): - Gestiunea stocurilor de produse finite pe gestiuni (intrri-ieiri produse) - Repartiia produselor pentru vnzare la diferite magazine; - Acoperirea planului de productie cu contracte de desfacere; - Evidena contractrilor pe beneficiari; - Elaborarea graficului de desfacere a produselor n funcie de termenele de livrare contractate; - Urmrirea contractelor de desfacere pe beneficiari (sesizare intrzieri) 4.Evidena mijloacelor fixe 169

- Crearea i actualizarea fiei mijlocului fix - Planificarea i executarea reviziilor i reparaiilor - Calculul amortizrilor lunare i transferul lor ctre aplicaia de contabilitate; - Inventarierea mijloacelor fixe pe locuri de munc. 5.Transport - Evidena parcului auto i a foilor de parcurs; - Graficul de transport i ntocmirea foilor de parcurs pentru activitatea de aprovizionare i desfacere (evidena orelor lucrate) 6. Activiti financiar contabile - Preluarea notelor contabile din aplicaiile de salarii, gestiune materiale, mijloace fixe, transport,etc. - Evidena contabil n lei i valuta (din documetele primare) - ntocmirea situaiilor centralizatoare: cartea mare, balana, bilan - Calculul impozitului pe profit - Elaborarea unor documente primare (dispoziii de plat, chitane) - Elaborarea fielor de cont i a registrului general - Situaia obligaiilor neachitate i a createlor nencasate - Situaia veniturilor i a cheltuielilor 7. Personal i salarizare - Evidena personalului (pe locuri de munc- funcii-situaia militar) - Calculul salariilor: indexare, compensare - Situaia reinerilor pe tipuri de reineri (rate la casa, mobil, obiecte de uz comun,etc.) - Determinarea fondurilor pentru concedii medicale i de odihna - Listare documente: tat de salarii, lista de avans chenzinal; pontaj; declaraie lunar ctre bugetul asigurrilor de stat; - ntocmirea notelor contabile i trimiterea lor ctre aplicaia de contabilitate; - ntocmirea dispoziiilor de plat ORICE ALTE TIPURI DE APLICAII: Evidena cheltuielilor de ntreinere la o asociaie de locatari; Evidena pacienilor la medicul de familie Evidena produciei i comercializare produselor la . Aplicaia ADMITERE la o unitate de nvmnt Aplicaia desfacere la un supermarket - Etc.

170

ANEXA NR 2
Comenzi PLIANT 1. Comenzi pentru crearea, modificarea si afisarea structurii bazei de date:
CREATE nume_fisier MODIFY STRUCTURE DISPLAY STRUCTURE LIST STRUCTURE [TO PRINT][TO FILE fis][IN ALIAS nume] COPY STRUCTURE TO fisier [FIELDS lista_cmpuri]

2. Comenzi pentru crearea, [ncarcarea si gestionarea bazei de date


APPEND [BLANK] CREATE FROM USE [fis/?][IN zona_lucru][INDEX lista_MDX_NDX][ORDER [TAG] fis.MDX/fis.NDX [OF .MDX]][ALIAS alias][EXCLUSIVE][NOUPDATE] LIST/DISPLAY FILES [LIKE] struct [ TO PRINTER/TO FILE fis] COPY TO nume_fis [[TYPE] tip_fis][FIELD lista_cmpuri][scop][FOR cond] [WHILE cond ][ WITH PRODUCTION] COPY FILE sursa TO dest COPY INDEXES lista_fis NDX [TO fis MDX] SELECT n si SELECT alias JOIN WITH alias TO fis[ FOR cond ][ FIELDS lista_cmpuri] SET RELATION TO [expr/expN][INTO alias] CREATE VIEW nume_fis FROM ENVIRONMENT CREATE/MODIFY QUERY/VIEW nume_fis SET VIEW TO fis/? CREATE/MODIFY APPLICATION nume_fisier CREATE/MODIFY LABEL nume_fisier LABEL FORM nume/? [domeniu][ SAMPLE ][ FOR/WHILE cond][TO PRINT] [TO FILE fisier] ERASE nume.ext/?

171

DELETE [domeniu][FOR cond][WHILE cond] RENAME fis.ext TO nfis.ext

3. Comenzi pentru sortare ]i indexare


SORT TO fisier ON cmp1 [/A][/C][/D][,cmp2[/A][/B][/D]...] DESCENDING] [domeniu][FOR cond][WHILE cond] INDEX ON lista_cmpuri TAG/TO nume_fis [UNIQUE][DESCENDING] SET INDEX fisier/? [ORDER fis.NDX/ [TAG] tag_MDX [OF fis.MDX]] SET ORDER TO [TAG] fisier/MDX tag [OF MDX_fis] [ASCENDING/

4. Comenzi pentru localizarea [nregistrarilor


SKIP [expr][IN alias] GO/GOTO BOTTOM/TOP/ [RECORD] nr [IN ALIAS] LOCATE [FOR cond][domeniu][WHILE cond] CONTINUE FIND "sir" SEEK expresie

5. Comenzi pentru actualizarea fi]ierelor


APPEND FROM fisier [[TYPE] tip_fisier][FOR/WHILE cond] INSERT [BEFORE][BLANK] EDIT [RECORD n] [NOINIT] [NOFOLLOW] [NOAPPEND] [NOMENU] [NOEDIT] [NODELETE] [NOCLEAR] [FIELDS lista_cmpuri] [FOR cond] [WHILE cond] CHANGE [NOINIT] [NOFOLLOW] [NOAPPEND] [NOMENU] [NOEDIT] [NODELETE] [NOCLEAR] [nr-inreg] [FIELDS lista_cmpuri] [domeniu] [FOR cond] [WHILE cond] BROWSE [NOINIT] [NOFOLLOW] [NOAPPEND] [NOMENU] [NOEDIT] [NODELETE] [NOCLEAR] [COMPRESS] [FORMAT] [LOCK nr] [WIDTH nr] [FREEZE nr_cmp][WINDOW nr_fereastra][FIELDS nume_cmp1/R lat.coloana/ nume cmp calculat1 = expr1[,nume_cmp2 [/R] [/lat.coloana] /nume_cmp_calculat2 =expr2]...] REPLACE [scop] [cmp WITH expresie cmp2 WITH expr2] [FOR cond] [WHILE cond] [ADDITIVE]

172

UPDATE cmp cheie FROM alias REPLACE cmp1 WITH expresie [cmp2 expresie2 ] [RANDOM] DELETE [domeniu] [FOR cond] [WHILE cond] PACK RECALL [domeniu] [FOR cond] [WHILE cond] ZAP

WITH

6. Comenzi pentru crearea rapoartelor ]i machetelor ecran (videoformate)


CREATE/MODIFY REPORT fisier/? CREATE/MOFIDY SCREEN nume_fisier SET FORMAT TO [fisier/?] REPORT FORM fis/? [PLAIN] [HEADING sir][NOEJECT] [SUMMARY] [domeniu] [FOR cond] [WHILE cond] [TO PRINTER/TO FILE fis]

7. Comenzi pentru introducerea si afisarea datelor de la terminal


ACCEPT [mesaj] TO variabila de memorie INPUT [mesaj] TO var @ linie1, coloana1 [SAY expresie] [PICTURE expC] [FUNCTION fct] [GET var] [[OPEN] WINDOW nume_fer] [PICTURE expr] [FUNCTION lista] [RANGE val1,val2] [VALID cond [[ERROR expC] [WHEN cond] [DEFAULT expr] [MESSAGE expr] [COLOR std./enhanced] [CLEAR] [TO rnd2, coloana2] [DOUBLE/PANEL border_def]

Functiile de formatare care pot fi folosite cu optiunea PICTURE sunt: @A accepta numai caractere alfabetice; @B aliniaza la stanga datele numerice; @C afiseaza CR (credit) dupa un numar pozitiv; @D afiseaza data in format american; @E afiseaza data in format european; @X afiseaza DB (debit) dupa numere negative; @Z afiseaza zerourile ca blankuri @! Afiseaza toate caracterele cu majuscule; @( incadreaza numerele negative cu paranteze; @Sn limiteaza lungimea campului la n pozitii. Clauzele de formatare care pot fi folosite cu optiunea PICTURE sunt: 173

9 accepta doar cifre pentru datele caracter sau cifre si semn pentru datele numerice # accepta numai cifre, blank-uri si semne; A accepta numai litere; L accepta numai date logice; N accepta numai litere si cifre; X accepta folosirea oricarui caracter; Y accepta numai caracterele Y,y,N,n; ! converteste literele in majuscule corespunzatoare; $ afiseaza caracterul $ in locul zerourilor initiale; . specifica o pozitie zecimala , afiseaza virgula in pozitia specificata.
READ SAVE ?/?? [expresie [PICTURE "clauza"] [FUNCTION "lista_functii] [AT expN] [STYLE font] ??? expC LIST [[FIELDS] exp_list] [OFF] [domeniu] [FOR cond] [WHILE cond] [TO PRINT FILE fis] DISPLAY [[FIELDS expr_list] [domeniu] [lista_cmp] [FOR cond] [WHILE cond] [OFF] [TO PRINT/TO FILE fis] 8. Comenzi de calcul AVERAGE [lista_cmpuri] [domeniu] [FOR cond] [WHILE cond] [TO lista_var/TO ARRAY nume-sir] CALCULATE [domeniu] optiuni [FOR cond] [WHILE cond] [TO lista_var/ TO ARRAY nume_sir]

Calculeaza cantitati folosind functii financiare sau statistice. Functiile sunt:


AVG(expN) calculeaza media aritmetica a valorii expN; CNT() numara [nregistrarile fi]ierului baza de date;

MAX(exp) gase]te valoarea maxima [n cmp, exp reprezinta un nume de cmp;


MIN(exp) gase]te valoarea minima [n cmp; STD(exp) determina deviatia standard a valorii stocate [ntr-un cmp al bazei de date, exp fiind nume de cmp. SUM(exp) calculeaza suma valorilor unui cmp al bazei de date.

VAR(exp) determina variati avalorilor [ntr-un cmp al bazei de date.


TOTAL ON cheie TO fis [FIELDS lista_cmpuri] [domeniu] [FOR cond] [WHILE cond]

174

9. Comenzi de lucru cu variabile de memorie ]i tablouri


STORE expr TO lista variabile de memorie/lista de elemnte tablou SAVE TO fisier [ALL LIKE/EXCEPT masca]

Salveaza [ntr-un fi]ier pe disc variabilele de memorie ]i elementele de tablou active. Fi]ierul creat are extensia .MEM.
RELEASE [lista_var] / [ALL [LIKE/EXCEPT masca]] [RELEASE MODULE nume_modul] [RELEASE MENUS lista_meniuri] [RELEASE POPUP lista_popup] [RELEASE SCREEN nume_ecran] [RELEASE WINDOW lista_fereastre] RESTORE FROM fisier [ADDITIVE] DECLARE tablou1 [numar linii, numar coloane] COPY TO ARRAY tablou [FIELDS lista cmpuri] [domeniu] [FOR conditie] [WHILE conditie] APPEND FROM ARRAY tablou [FOR cond] COUNT [TO variabile memorie] [domeniu] [FOR/WHILE conditie] SUM [scop] [lista expresii numerice] [TO lista variabile /TO ARRAY tablou] [FOR conditie] [WHILE conditie] LIST MEMORY [TO PRINT] [TO FILE nume fisier] DISPLAY MEMORY

Se deosebe]te de LIST MEMORY doar prin faptul ca [ntrerupe afi]area dupa fiecare ecran plin. Continuarea se realizeaza prin apasarea oricarei taste.
PRIVATE ALL [LIKE/EXCEPT masca] / [lista variabile] / [ARRAY lista] PUBLIC [lista variabile] / [ARRAY lista] Seteaza variabilele definite ca fiind publice.

10. Comenzi pentru informarea utilizatorului


ASSIST DIR/DIRECTORY [[ON] drive] [[LIKE] [cale] masca] LIST/DISPLAY STATUS [TO PRINT] / [TO FILE fisier] HELP nume comanda

175

You might also like