Sunteți pe pagina 1din 231

1

Baze de date

UNIVERSITATEA TEHNIC DE CONSTRUCII BUCURETI

BAZELE INFORMATICII SI LIMBAJE DE PROGRAMARE 2 BAZE DE DATE RELAIONALE

Romic TRANDAFIR Mihai NISTORESCU Ion MIERLU-MAZILU

Bucureti 2007

2007 Cuprins

Cuprins
Cuprins................................................................................................................................................1 1. Bnci i baze de date ......................................................................................................................5 1.1. Noiuni generale ....................................................................................................................5 1.2. Sisteme de baze de date.........................................................................................................6 1.3. Organizarea datelor ntr-o baz de date.................................................................................7 1.4. Modelarea la nivel logic a datelor ntr-o baz de date...........................................................8 1.5. Sistem de gestiune a bazelor de date ...................................................................................10 1.5.1. Interfee SGBD ..........................................................................................................11 1.5.2. Funcii i servicii oferite de un SGBD.......................................................................12 1.5.3. Activitile asigurate de SGBD..................................................................................14 1.5.4. Obiectivele unui SGBD .............................................................................................15 2. Etapele de realizare a unei bnci de date...................................................................................17 2.1. Etapa de analiz...................................................................................................................17 2.2. Etapa de programare............................................................................................................17 2.3. Punerea n funciune i exploatarea bazei de date ...............................................................18 2.4. Documentaia aplicaiei .......................................................................................................19 3. Sisteme de gestiune a bazelor de date relaionale .....................................................................20 3.1. Modelul relaional al datelor ...............................................................................................20 3.1.1. Structura relaional a datelor ....................................................................................20 3.1.2. Operaii n algebra relaional....................................................................................21 3.1.3. Optimizarea cererilor de date.....................................................................................28 3.1.4. Baze de date relaionale .............................................................................................30 3.1.5. Tipuri de relaii ..........................................................................................................31 3.1.6. Restricia de cardinalitate...........................................................................................33 3.2. Regulile lui Codd.................................................................................................................34 3.3. Normalizarea datelor ...........................................................................................................37 3.4. Cerinele minimale de definire a SGBDR ...........................................................................37 4. Componentele funcionale ale sistemului Visual FoxPro .........................................................39 4.1. Programarea orientat pe obiecte ........................................................................................39 4.2. Ierarhia claselor n Visual FoxPro.......................................................................................44 4.2. Arhitectura VFP 6.0.............................................................................................................45 4.3. Moduri de lucru n VFP.......................................................................................................46 4.3.1. Modul de lucru meniu sistem.....................................................................................47 4.3.2. Modul de lucru prin comenzi.....................................................................................52 5. Organizarea datelor nVisual FoxPro ........................................................................................53 5.1. Manipularea bazei de date i a tabelelor n VFP .................................................................53 5.1.1. Crearea bazei de date .................................................................................................53 5.1.2. Crearea tabelelor ........................................................................................................54 5.1.3. Validarea cmpurilor unei nregistrri la introducere................................................55 5.2. Deschiderea bazei de date/tabelei........................................................................................61 5.3. Consultarea i modificarea bazei de date/tabelei.................................................................62 5.3.1. Modificarea structurii de date a tabelelor n modul asistat........................................62 5.3.2. Deplasri n tabel. Cutri secveniale.....................................................................64 5.4. nchiderea bazei de date/tabelei...........................................................................................65 6. Utilizarea asistentului Wizard n VFP .......................................................................................67 6.1. Table Wizard .......................................................................................................................67 6.2. Form Wizard........................................................................................................................68 6.3. Report Wizard .....................................................................................................................69

Baze de date

6.4. Label Wizard .......................................................................................................................70 6.5. Query Wizard ......................................................................................................................70 6.6. Mail Merge Wizard .............................................................................................................72 6.7. Editorul de texte n VFP 6.0 ................................................................................................73 6.7.1. Lansarea editorului ....................................................................................................73 6.7.2. Lucrul cu blocul de linii din fiier .............................................................................73 7. Elemente ale limbajului propriu Visual FoxPro 6.0 .................................................................74 7.1. Simboluri .............................................................................................................................74 7.2. Variabile de sistem ..............................................................................................................74 7.3. Comentariul .........................................................................................................................74 7.4. Tipuri de date, operaii i funcii .........................................................................................74 7.4.1. Date de tip numeric. Funcii aritmetice i financiare.................................................77 7.4.2. Aplicaii ale funciilor financiare...............................................................................78 7.4.3. Date i funcii de tip caracter .....................................................................................81 7.4.4. Date i funcii de tip calendaristic..............................................................................83 7.4.5. Date de tip memo.......................................................................................................84 7.5. Variabile i masive ..............................................................................................................84 7.5.1. Variabile.....................................................................................................................84 7.5.2. Macrosubstituia.........................................................................................................85 7.5.3. Masive de date ...........................................................................................................86 7.6. Funcii de prelucrare a masivelor ........................................................................................87 8. Accesul i actualizarea datelor....................................................................................................92 8.1. Manipularea structurii unei tabele .......................................................................................92 8.2. Ordonarea datelor ................................................................................................................93 8.3. Accesul la date.....................................................................................................................98 8.4. Actualizarea datelor...........................................................................................................103 8.4.1. Adgarea de noi nregistrri.....................................................................................103 8.4.2. Modificarea nregistrrilor.......................................................................................106 8.4.3. tergerea nregistrrilor ...........................................................................................110 8.4.5. Relaii ntre tabele....................................................................................................113 9. Programarea procedural.........................................................................................................120 9.1. Programarea structurat.....................................................................................................120 9.1.1. Structura liniar........................................................................................................121 9.1.2. Structura alternativ.................................................................................................124 9.1.3. Structura repetitiv...................................................................................................126 9.2. Modularizarea programelor ...............................................................................................129 9.2.1. Proceduri..................................................................................................................130 9.2.2. Funcii ......................................................................................................................131 10. Comenzi ale nucleului SQL.....................................................................................................135 11. Proiectarea meniurilor i a barelor de instrumente .............................................................146 12. Aplicaii .....................................................................................................................................147 12.1. Evidena rezultatelor activitii studenilor ntr-o facultate.............................................147 12.1.1. Formularea i analiza problemei............................................................................147 12.1.2. Crearea, actualizarea, modificarea i interogarea tabelelor ...................................149 12.1.3. Crearea structurii unui fiier ..................................................................................150 12.1.4. Adresarea prin macrosubstituie ............................................................................151 12.1.5. Crearea unui meniu................................................................................................151 12.2. Gestionarea unei magazii ................................................................................................153 12.2.1. Proiectarea i realizarea aplicaiei..........................................................................153 12.2.2. Realizarea documentaiei i a aplicaiei n format executabil................................220

2007 Cuprins 12.2.3. Utilizarea Setup Wizard.........................................................................................225 A. Anexa..........................................................................................................................................227 Index de termeni.............................................................................................................................229 Bibliografie .....................................................................................................................................231

Baze de date

1. Bnci i baze de date


1.1. Noiuni generale
O baz de date reprezint un ansamblu de date integrat, anume structurat i dotat cu o descriere a acestei structuri. Descrierea structurii poart numele de dicionar de date sau metadate i creaz o interdependen ntre datele propriu-zise i programe. Baza de date poate fi privit ca o colecie de fiiere interconectate care conin nucleul de date necesare unui sistem informatic. Astfel, poate fi considerat drept un model al unor aspecte ale realitii unei uniti economice, modelat prin intermediul datelor. Diferitele obiecte din cadrul realitii, ce prezint interes, sunt denumite clase sau entiti. Pentru aceste obiecte sunt achiziionate i memorate date referitoare la diferite caracteristici (atribute). Baza de date se constituie ca un ansamblu intercorelat de colecii de date, prin care se realizeaz reprezentarea unei realiti. Datele constituie orice mesaj primit de un receptor, sub o anumit form. Informaiile reprezint cantitatea de noutate adus de un mesaj din exterior (realitate). Un fiier este un ansamblu de nregistrri fizice, omogene din punct de vedere al coninutului i al prelucrrii. O nregistrare fizic este o unitate de transfer ntre memoria intern i cea extern a calculatorului. O nregistrare logic este unitatea de prelucrare din punct de vedere al programului utilizator. O nregistrare se compune din cmpuri (atribute) care descriu anumite aspecte ale realitii. Cmpurile sunt nregistrri logice. O baz de date trebuie s asigure: abstractizarea datelor (baza de date fiind un model al realitii),

1. Bnci i baze de date integrarea datelor (baza de date este un ansamblu de colecii de date intercorelate, cu redundan controlat), integritatea datelor (se refer la corectitudinea datelor ncrcate i manipulate astfel nct s se respecte restriciile de integritate), securitatea datelor (limitarea accesului la baza de date), partajarea datelor (datele pot fi accesate de mai muli utilizatori, eventual n acelai timp), independena datelor (organizarea datelor s fie transparent pentru utilizatori, modificrile n baza de date s nu afecteze programele de aplicaii).

1.2. Sisteme de baze de date


Sistemele de baze de date, sau bncile de date, reprezint un sistem de organizare i prelucrare, respectiv teleprelucrare (prelucrare la distan) a informaiei, constituit din urmtoarele trei elemente: colecie de date aflate n interdependen descrierea datelor i a relaiilor dintre ele creare baza de date

un sistem de programe care asigur exploatarea bazei de date (actualizare, interogare). Arhitectura sistemului de baze de date este format din urmtoarele componente (Figura 1): baza/bazele de date reprezint componenta de tip date a sistemului (coleciile de date propriu-zise, indecii); sistemul de gestiune a bazei/bazelor de date ansamblul de programe prin care se asigur gestionarea i prelucrarea complex a datelor i care reprezint componenta software a sistemului de baze de date (Sistem de Gestiune a Bazelor de Date SGBD); alte componente proceduri manuale sau automate, inclusiv reglementri administrative, destinate bunei funcionri a sistemului, dicionarul bazei de date (metabaza de date) care conine informaii despre date, structura acestora, elemente de descriere a semanticii, statistici, documentaii, mijloacele hardware utilizate, personalul implicat. APLICAII UTILIZATORI ALTE ELEMENTE Fig. 1

SGBD

BAZA DE DATE

Baze de date

1.3. Organizarea datelor ntr-o baz de date


Arhitectura intern a unui sistem de baze de date conform standardului ANSI/X3/SPARC (1975) conine trei niveluri funcionale. O caracteristic fundamental a bazelor de date este aceea c produce cteva niveluri de abstractizare a datelor prin ascunderea (transparena) detaliilor legate de stocarea datelor, utilizatorilor. Se definete modelul datelor, ca un set de concepte utilizat n descrierea structurii datelor. Prin structura bazei de date se nelege tipul datelor, legtura dintre ele, restriciile aplicate datelor. O structur de date asociat unei baze de date poate fi reprezentat pe trei niveluri, Figura 2, astfel: Nivelul intern constituit din schema intern ce descrie structura de stocare fizic a datelor n baza de date, utiliznd un model al datelor fizice. La acest nivel se descriu detaliile complete ale stocrii i modul de acces la date. Nivelul conceptual sau schema conceptual, descrie structura ntregii baze de date pentru o cumunitate de utilizatori. La nivel conceptual se face o descriere complet a bazei de date ascunzndu-se detaliile legate de stocarea fizic i detaliind descrierea entitilor, tipurilor de date, relaiile dintre ele i restriciile asociate.

Nivel extern

Vizualizare grup utilizatori 1

Vizualizare grup utilizatori n

Nivel conceptual

Schema conceptual

Nivel intern

Schema intern

Date memorate

Fig. 2

1. Bnci i baze de date Nivelul extern sau nivelul vizual (utilizator), include o colecie de scheme externe ce descriu baze de date prin prisma diferiilor utilizatori. n multe SGBD nu se poate face o distincie clar ntre cele trei niveluri, de multe ori nivelul conceptual este puternic dezvoltat i suplinete aparent celelalte niveluri. De asemenea, la dezvoltarea aplicaiilor se remarc o contopire a nivelului extern cu cel conceptual. De la modelul conceptual, cererile sunt adresate modelului intern pentru a fi procesate i aplicate datelor stocate. Procesul de transfer a cererilor i rezultatelor ntre nivele se numete cartografiere (mapping). n funcie de categoria de personal implicat n folosirea bazei de date, datele dintr-o baz de date pot fi structurate pe trei niveluri: nivelul conceptual (global) exprim viziunea administratorului bazei de date asupra datelor. Acestui nivel i corespunde structura conceptual (schema) a bazei de date, prin care se realizeaz o descriere a tuturor datelor, ntr-un mod independent de aplicaii, ce face posibil administrarea datelor. nivelul logic exprim viziunea programatorului de aplicaie asupra datelor. La acest nivel se realizeaz o descriere a datelor corespunztoare unui anumit program de aplicaie. nivelul fizic care exprim viziunea inginerului de sistem asupra datelor. Corespunde schemei interne a bazei de date prin care se realizeaz o descriere a datelor pe suport fizic de memorie.

1.4. Modelarea la nivel logic a datelor ntr-o baz de date


Modelul de date reprezint ansamblul de concepte i instrumente necesare pentru a construi o schem a bazei de date. Modelarea datelor poate viza totalitatea datelor din cadrul bazei de date (schema/arhitectura datelor) sau o parte a acestora (subscheme ale bazei de date). Schema i subschema bazei de date sunt modelele logice ale bazei de date, care au asociate principii generale pentru gestionarea/definirea (structurarea) datelor, manipularea i asigurarea integritii datelor, fr a reflecta modul de reprezentare i stocare a acestor date pe suportul de memorie (care sunt ele modelului fizic). Se cunosc mai multe tipuri de baze de date dup modul de organizare, modul de dispunere pe suport magnetic a informaiei i a elementelor componente:

Baze de date

modele primitive datele sunt organizate la nivel logic n fiiere, structura de baz este nregistrarea, mai multe nregistrri fiind grupate n structuri de tip fiier; baze de date ierarhice legturile dintre date sunt ordonate unic, accesul se face numai prin vrful ierarhiei, un subordonat nu poate avea dect un singur superior direct i nu se poate ajunge la el dect pe o singur cale; baze de date n reea datele sunt reprezentate ca ntr-o mulime de ierarhii, n care un membru al ei poate avea orici superiori, iar la un subordonat se poate ajunge pe mai multe ci; baze de date relaionale structura de baz a datelor este aceea de relaie tabel, limbajul SQL (Structured Query Language) este specializat n comenzi de manipulare la nivel de tabel. Termenul relaional a fost introdus de un cercettor al firmei IBM, dr. E. F. Codd, n 1969, cel care a enunat cele 13 reguli de baz necesare pentru definerea unei baze de date relaionale. Baza de date relaional reprezint o mulime structurat de date, accesibile prin calculator, care pot satisface n timp minim i ntr-o manier selectiv mai muli utilizatori. Aceast mulime de date modeleaz un sistem sau un proces din lumea real i servete ca suport unei aplicaii informatice; baze de date distribuite sunt rezultatul integrrii tehnologiei bazelor de date cu cea a reelelor de calculatoare. Sunt baze de date logic integrate, dar fizic distribuite pe mai multe sisteme de calcul. Integrarea bazei de date distribuite se face cu ajutorul celor trei tipuri de de scheme care sunt implementate: 1. schema global definete i descrie toate informaiile din baza de date distribuit n reea; 2. schema de fragmentare descrie legturile dintre o colecie global i fragmentele sale. Ea este de tipul unu la mai muli i are forma unei ierarhii; 3. schema de alocare descrie modul de distribuire a segmentelor pe calculatoarele (nodurile) din reea. Fiecare segment va avea o alocare fizic pe unul sau mai multe calculatoare. Schema de alocare introduce o redundan minim i controlat: un anumit segment se poate regsi fizic pe mai multe calculatoare. Utilizatorul unei asemenea baze de date o vede ca pe o baz de date unic, compact (nivel logic), cu toate c n realitate ea este distribuit pe mai multe calculatoare legate n reea (nivel fizic). Aceast organizare a dus la o cretere substanial a vitezei de acces la o baz de date ntr-o reea de calculatoare. Anumite date stocate pe un server local sunt mult mai rapid accesate dect

1. Bnci i baze de date dac ele s-ar afla pe un server la distan, unde baza de date ar fi fost stocat n ntregime (nedistribuit); modele semantice orientate spre obiecte. Aceste modele sunt orientate pe reprezentarea semnificaiei datelor. Structura de baz folosit pentru reprezentarea datelor este cea de clas de obiecte definit prin abstractizare din entitatea fizic pe care o regsim n lumea real. Aici exist entiti simple i clase de entiti care se reprezint prin obiecte simple sau clase de obiecte, ordonate n ierarhii de clase i subclase. Acest tip de baz de date a aprut din necesitatea gestionrii obiectelor complexe: texte, grafice, hri, imagini, sunete (aplicaii multimedia) i a gestionrii obiectelor dinamice: programe, simulri.

10

1.5. Sistem de gestiune a bazelor de date


Sistemele de gestiune a bazalor de date (DBMS DataBase Management System) sunt sisteme informatice specializate n stocarea i prelucrarea unui volum mare de date, numrul prelucrrilor fiind relativ mic. Termenul de baz de date se va referi la datele de prelucrat, la modul de organizare a acestora pe suportul fizic de memorare, iar termenul de gestiune va semnifica totalitatea operaiilor ce se aplic asupra datelor din baza de date. n arhitectura unui sistem de baze de date SGBD ocup locul central. Un SGBD este ansamblul software interpus ntre utilizatori i baza de date i este un interpretor de cereri de acces sau regsire de date n baza de date, execut cererea i returneaz rezultatul. SGBD este un sistem de programe care faciliteaz procesul definirii, construcei, organizrii i manipulrii datelor pentru diverse aplicaii. Utilizatorul are acces la SGBD prin intermediul unei interfee (aplicaie) cu ajutorul creia stabilesc parametrii interogrii i se primete rspuns; ntreg ansamblul este descris n Figura 3.
Aplicaie SGBD

Utilizator

Baza de date

Fig. 3 Organizarea pe trei niveluri a sistemelor de baze de date este strns legat de conceptul de independen a datelor, n sensul c sistemul bazei de date poate fi modificat la orice nivel fr a

11

Baze de date

afecta nivelurile superioare. Independena datelor poate fi privit n dou moduri, corespunztoare nivelurilor conceptual (logic) i intern (fizic). Independena logic a datelor reprezint capacitatea modificrii schemei conceptuale fr a provoca modificri n schema extern sau n programele de aplicae. Schema conceptual se poate modifica prin mrirea bazei de date datorit adugrii de noi tipuri de nregistrri (o nou coloan ntr-o tabel) sau date (nregistrri) sau micorarea bazei de date n cazul tergerii unor nregistrri. Independenafizic a datelor este dat de capacitatea de schimbare a schemei interne fr modificarea schemei conceptuale sau externe. Funcionarea unui SGBD se realizeaz prin comenzi specifice limbajului SQL. Nivelele conceptual i intern nefiind distinct delimitate sunt adresate printr-un limbaj comun numit DDL Data Definition Language, utilizat pentru administrarea i proiectarea bazei de date n definirea ambelor scheme. Dac SGBD are o delimitare clar ntre nivelul conceptual i cel intern, atunci DDL se folosete pentru comenzile la nivel conceptual, iar pentru specificarea schemei interne se folosete limbajul SDL Storage Definition Language. Pentru cel de al treilea nivel, extern, se folosete limbajul VDL View Definition Language, destinat utilizatorilor i pentru interfaa acestora cu nivelul conceptual. Pentru operaiile tipice legate de cutare, inserare, tergere i modificarea datelor, SGBD dispune de un limbaj de manipulare numit DML - Data Manipulation Language. 1.5.1. Interfee SGBD Un SGBD este un ansamblu complex de programe care asigur interfaa ntre o baz de date i utilizatorii acesteia. SGBD este componenta software a unui sistem de baze de date care interacioneaz cu toate celelalte componente ale acestuia asigurnd legtura i interdependena ntre ele. Un SGBD ofer interfeele corespunztoare tuturor categoriilor de utilizatori pentru a facilita legtura acestora cu baza de date. Principalele tipuri de interfee: Interfee pe baz de meniuri care ofer utilizatorilor o list de opiuni (meniuri) pentru formularea interogrilor.

1. Bnci i baze de date Interfee grafice afieaz utilizatorului un set de diagrame, cererile sunt formulate prin manipularea acestor diagrame. De cele mai multe ori interfeele grafice sunt asociate cu meniurile. Interfee bazate pe videoformate se utilizeaz pentru introducerea de noi date, actualizarea bazei de date i cutare. Interfee n limbaj natural accept comenzi scrise n limba englez sau alte limbi de circulaie internaional. Interpretarea cererilor se face pe baza unui set de standard de cuvinte cheie ce sunt interpretate pe baza schemei interne. Interfee specializate pentru cereri repetate (limbaj de comand) sunt destinate unei anumite categorii de utilizatori, de exemplu pentru angajaii unei bnci se implementeaz un mic set de comenzi prescurtate pentru a micora timpul necesar introducerii comenzii. Interfee pentru administrarea bazei de date se utilizeaz pentru comenzile privilegiate utilizate de administratorii bazei de date i se refer la crearea de conturi, parole, setarea parametrilor sistemului, autorizarea intrrii pe un anumit cont, reorganizarea structurii de stocare a datelor din baza de date, accsul la e, nregistrri. Exemple de SGBD: MySQL, Microsoft SQL, Microsoft Access, Visual FoxPro, Oracle. 1.5.2. Funcii i servicii oferite de un SGBD Un SGBD trebuie s asigure funciile (Figura 4): funcia de descriere a datelor se face cu ajutorul LDD, realizndu-se descrierea atributelor din cadrul structurii bazei de date, legturile dintre entitile bazei de date, se definesc eventualele criterii de validare a datelor (5.1.3.), metode de acces la date, integritatea datelor. Concretizarea acestei funcii este schema bazei de date. funcia de manipulare este cea mai complex i realizeaz actualizarea i regsirea datelor. funcia de utilizare asigur mulimea interfeelor necesare pentru comunicare a tuturor utilizatorilor cu baza de date. Categorii de utilizatori: neinformaticieni beneficiarii informaiei, nu trebuie s cunoasc structura bazei de date, nu trebuie s programeze aplicaii, ci doar s le foloseasc prin intermediul unei interfee suficient de prietenoase.

12

13

Baze de date

informaticieni creaz structura bazei de date i realizeaz procedurile complexe de exploatare a bazei de date; administratorul bazei de date utilizator special, cu rol hotrtor n funcionarea optim a ntregului sistem. funcia de administrare administratorul este cel care realizeaz schema conceptual a bazei de date, iar n perioada de exploatare a bazei de date autorizeaz accesul la date, reface baza n caz de incident. funcia de protecie a bazei de date ansamblul de msuri necesare pentru asigurarea integritii (semantic, acces concurent, salvare/restaurare) i securitii datelor (autorizare acces, utilizare viziuni, criptare). UTILIZATORI

FUNCIILE SGBD

UTILIZARE

MANIPULARE

DESCRIERE

ADMINISTRARE

BAZA DE DATE

Fig. 4 Prin acestea, un SGBD trebuie s asigure: definirea crearea bazei de date; introducerea (adugarea) datelor n baza de date; modificarea structurii sau a unor date deja existente n baza de date; tergerea datelor din baza de date; consultarea bazei de date interogare/extragerea datelor.

1. Bnci i baze de date n plus un SGBD mai asigur i alte servicii: suport pentru limbaj de programare; interfa ct mai atractiv pentru comunicarea cu utilizatorul; tehnici avansate de memorare, organizare, accesare a datelor din baza de date; utilitare ncorporate: sistem de gestiune a fiierelor, listelor, tabelelor etc.; help pentru ajutarea utilizatorului n lucrul cu baza de date. Apariia i rspndirea reelelor de calculatoare a dus la dezvoltarea SGBD-urilor n direcia multiuser: mai muli utilizatori folosesc simultan aceeai baz de date. Principalul avantaj al reelelor a fost eficiena mult sporit de utilizare a resurselor sistemelor de calcul: la o baz de date aflat pe un server central au acces simultan mai muli utilizatori, situai la distan de server, de unde rezult o bun utilizare a resurselor server-ului i o economie de memorie datorat memorrii unice a bazei de date. Un SGBD este dotat cu un limbaj neprocedural de interogare a bazei de date SQL care permite accesul rapid i comod la datele stocate n baza de date. 1.5.3. Activitile asigurate de SGBD Un SGBD trebuie s asigure urmtoarele activiti: definirea i descrierea structurii bazei de date se realizeaz printr-un limbaj propriu, limbaj de definire a datelor (LDD), conform unui anumit model de date; ncrcarea datelor n baza de date se realizeaz prin comenzi n limbaj propriu, limbaj de manipulare a datelor (LMD); accesul la date se realizeaz prin comenzi specifice din limbajul de manipulare a datelor. Accesul la date se refer la operaiile de interogare i actualizare. Interogarea este complex i presupune vizualizarea, consultarea, editarea de situaii de ieire (rapoarte, liste, regsiri punctuale). Actualizarea presupune trei operaiuni: adugare, modificare (efectuate prin respectarea restriciilor de integritate ale bazei de date) i tergere; ntreinerea bazei de date se realizeaz prin utilitare proprii ale SGBD; reorganizarea bazei de date se face prin faciliti privind actualizarea structurii bazei de date i modificarea strategiei de acces. Se execut de ctre administratorul bazei de date;

14

15

Baze de date

securitatea datelor se refer la asigurarea confidenialitii datelor prin autorizarea i controlul accesului la date, criptarea datelor, realiarea de copii ale programelor i fiierelor de baz. 1.5.4. Obiectivele unui SGBD Un SGBD are rolul de a furniza suportul software complet pentru dezvoltarea de aplicaii informatice cu baze de date. El trebuie s asigure: minimizarea costului de prelucrare a datelor, reducerea timpului de rspuns, flexibilitatea aplicaiilor i protecia datelor. Pentru satisfacerea performanelor enumerate, SGBD trebuie s asigure un minim de obiective. 1. Asigurarea independenei datelor trebuie privit din dou puncte de vedere: independena logic se refer la posibilitatea adgrii de noi tipuri de nregistrri de date sau extinderea structurii conceptuale, fr a determina rescrierea programelor aplicaie; independena fizic modificarea tehnicilor fizice de memorare fr a determina rescrierea programelor de aplicaie. 2. Asigurarea redundanei minime i controlate a datelor stocarea informaiilor n bazele de date se face astfel nct datele s nu fie multiplicate. Totui, pentru a mbunti performanele legate de timpul de rspuns, se accept o anumit redundan a datelor, controlat, pentru a asigura coerena bazei de date i eficiena utilizrii resurselor hardware. 3. Asigurarea facilitilor de utilizare a datelor presupune ca SGBD-ul s aib anumite componente specializate pentru: folosirea datelor de ctre mai muli utilizatori n diferite aplicaii datele de la o aplicaie trebuie s poat fi utilizate i n alte aplicaii. accesul ct mai simplu al utilizatorilor la date fr ca ei s fie nevoii s cunoasc structura ntregii baze de date; aceast sarcin cade n seama administratorului bazei de date. existena unor limbaje performante de regsire a datelor care permit exprimarea interactiv a unor cereri de regsire a datelor. de

1. Bnci i baze de date sistemul de gestiune trebuie s ofere posibilitatea unui acces multicriterial la informaiile din baza de date spre deosebire de sistemul clasic de prelucrare pe fiiere unde exist un singur criteriu de adresare, cel care a stat la baza organizrii fiierului. 4. Asigurarea securitii datelor mpotriva accesului neautorizat. 5. Asigurarea coerenei i integritii datelor mpotriva unor tergeri intenionate sau neintenionate se realizeaz prin intermediul unor proceduri de validare, a unor protocoale de control concurent i a unor proceduri de refacere a bazei de date. 6. Asigurarea partajabilitii datelor se refer pe de o parte la asigurarea accesului mai multor utilizatori la aceleai date i de asemenea la posibilitatea dezvoltrii unor aplicaii fr a se modifica structura bazei de date. 7. Asigurarea legturilor ntre date corespund asocierilor care se pot realiza ntre obiectele unei aplicaii informatice. Orice SGBD trebuie s permit definirea i descrierea structurii de date, precum i a legturilor dintre acestea, conform unui model de date (de exemplu, modelul relaional). 8. Administrarea i controlul datelor sunt asigurate de SGBD, n sensul c datele pot fi folosite de mai muli utilizatori n acelai timp, iar utilizatorii pot avea cerine diferite i care pot fi incompatibile. SGBD trebuie s rezolve probleme legate de concuren la date, problem care apare mai ales n lucrul n mediu de reea de calculatoare.

16

17

Baze de date

2. Etapele de realizare a unei bnci de date


2.1. Etapa de analiz
Proiectarea unei baze de date const din proiectare logic i fizic a acesteia astfel nct s rspund cerinelor utilizatorilor pentru un anumit set de aplicaii specifice. n general, proiectarea corect a unei baze de date parcurge etapele de analiz i programare. Pentru etapa de analiz se recomand parcurgerea pailor: 1. Studierea problemei de rezolvat const din studiul i descrierea activitilor pentru care se va organiza baza de date (cerine i resurse); 2. Proiectarea structurii bazei de date are ca principale activiti alegerea modelului de SGBD, proiectarea funciilor bazei de date, stabilirea intrrilor i ieirilor aplicaiilor; 3. Stabilirea modului de memorare a datelor n memorie (temporare) sau pe disc n baza de date, pentru care trebuie stabilit i structura; 4. Stabilirea algoritmului general de rezolvare a problemei la nivel de schem bloc; 5. Stabilirea structurii meniului principal al aplicaiei acesta trebuie s conin opiuni pentru toate funciunile sistemului informatic care sunt accesibile utilizatorului. 6. mprirea aplicaiei pe programe fiecare program urmrete rezolvarea unei pri a problemei generale.

2.2. Etapa de programare


n etapa de programare se recomand urmrirea pailor: 1. Elaborarea programelor: realizarea componentelor logice programe/aplicaii ncepnd cu programul monitor (principal), continund cu cele de introducere/actualizare a datelor, cu cele de prelucrare i terminnd cu programele de interogare baza de date i extragere de informaii. 2. Testarea funcionrii corecte a programelor individuale i a sistemului n ansamblu pentru ct mai multe situaii posibile (ideal ar fi testarea n toate situaiile posibile, dar numrul acestora este foarte mare) incluznd n mod obligatoriu i situaiile limit. 3. nlturarea erorilor depistate i reluarea pasului 2. Dac nu mai sunt erori, se continu cu urmtoarea etap.

2. Etapele de realizare a unei bnci de date

18

2.3. Punerea n funciune i exploatarea bazei de date


1. ncrcarea i manipularea datelor operaii de actualizare i consultare, ntreinere (dezvoltare) a bazei de date. 2. Elaborarea documentaiei de utilizare care se pred beneficiarului, ct i documentaia tehnic a sistemului (de preferat ca fiecare program s aib cte o fi tehnic, pentru o mai uoar depanare, ntreinere).

Introducere date

Aplicaie

Extragere de date

Meniuri utilizator Baze de date Ferestre utilizator Ecrane utilizator Programe

Rapoarte statistice Consultri curente ------

Schema bloc a unei aplicaii din punct de vedere utilizator Fig. 5

Date de la utilizator

Programul Meniul principal

Rezultate utilizator

Programe de Programe pentru introducere date Ecrane de introducere Import Baza de date

Rapoart Filtre Export Programe de extragere date

Schema bloc a unei aplicaii din punct de vedere al proiectantului Fig. 6 Not: Programele de extragere date pot fi elaborate de programator sau pot fi obinute cu generatoarele incluse n SGBD.

19

Baze de date

ntreaga activitate din sistem este controlat de programul monitor care conine un meniu principal definit de utilizator. Programele aplicaiei pentru introducerea datelor, prelucrare, actualizare i extragere de date sub form de rapoarte se afl sub controlul programului monitor.

2.4. Documentaia aplicaiei


Deoarece etapa de analiz este proprie fiecrei aplicaii n parte, nu se recomand detalierea etapelor 1 6. De aceea n cele ce urmeaz este detaliat documentarea programelor prin fia tehnic, fi care trebuie s conin rubricile: Program nume; Scop; Parametri; Variabile de intrare, de ieire; Ce programe apeleaz; Care sunt programele care l apeleaz; Ce fiiere utilizeaz; Explicaii - sub form de comentarii n programele surs; Programul surs. n 12.2.2 se arat cum se obine n mod automat, cu ajutorul VFP, documentarea unei aplicaii realizat cu acest sistem.

3. Sisteme de gestiune a bazelor de date relaionale

20

3. Sisteme de gestiune a bazelor de date relaionale


3.1. Modelul relaional al datelor
Un sistem de gestiune a bazelor de date relaionale se definete ca fiind un sistem de gestiune care utilizeaz organizarea datelor conform modelului relaional. Conceptul de baz al modelului relaional este acela de relaie/tabel (limbajul SQL specializat n comenzi de manipulare la nivel de tabel). 3.1.1. Structura relaional a datelor Structura relaional a datelor cuprinde urmtoarele componente. Domeniul este ansamblul de valori caracterizat printr-un nume (domeniu de valori). El poate fi precizat explicit prin enumerarea tuturor valorilor care aparin domeniului sau implicit prin precizarea proprietilor pe care le au valorile din domeniu. Pentru un ansamblu de valori D1 ,..., Dn produsul cartezian al acestora reprezint ansamblul tuplurilor (v1 ,..., vn ) , unde v1 este o valoare din D1, v2 este o valoare din D2, etc., iar tuplura corespunde unei linii din tabel. Relaia (tabela) este un subansamblu al produsului cartezian al mai multor domenii, caracterizat prin nume i care conine tupluri cu semnificaie (tabel). ntr-o relaie, tuplurile trebuie s fie distincte nu se admit duplicate. O reprezentare a relaiei este tabelul bidimensional (tabela de date) n care liniile reprezint tuplurile, iar coloanele corespund domeniilor. Numrul tuplurilor dintr-o tabel este cardinalul tabelei, numrul valorilor dintr-un tuplu este gradul tabelei. Pentru a diferenia coloanele care conin valori ale aceluiai domeniu, eliminnd dependena de poziie, se asociaz fiecrei coloane un nume distinct atribut. n timp ce tuplurile sunt unice, un domeniu poate aprea de mai multe ori n produsul cartezian pe baza cruia este definit tabela. Tabelul 1 prezint comparativ conceptele utilizate n organizarea datelor n fiiere, n baze de date, conceptele din teoria relaional i din SGBDR.

21 Tabelul 1 Fiiere Fiier Teoria BD Colecie de date Teoria relaional Relaie SGBDR Tabel Linie

Baze de date

nregistrare Familie de caracteristici Tuplu Cmp Valoare Caracteristic Domeniu de Valori Atribut Domenii

Nume coloan Domeniu coloan

3.1.2. Operaii n algebra relaional Reuniunea operaie n algebra relaional, definit pe dou relaii R1 i R2, ambele cu aceeai schem (structur), ce const din construirea unei noi relaii R3, cu schema identic cu R1 i R2, avnd drept extensie (nregistrrile) tuplurile din R1 i R2 luate mpreun, o singur dat. Diferena definit pe dou relaii R1 i R2, cu aceeai schem, avnd drept extensie tupluri ale relaiei R1 care nu se regsesc n relaia R2. Produs cartezian definit pe dou relaii R1 i R2, operaie care const din construirea unei noi relaii R3, a crei schem se obine din concatenarea schemelor relaiilor R1 i R2, i a crei extensie cuprinde toate combinaiile tuplurilor din R1 cu cele din R2. Proiecia operaie din algebra relaional definit asupra unei relaii R, ce const din construirea unei noi relaii P, n care se regsesc numai acele atribute din R specificate explicit n cadrul operaiei. Suprimarea unor atribute din R nsemn efectuarea unor tieturi verticale asupra lui R i pot avea ca efect apariia unor tupluri duplicate, care se cer a fi eliminate. n practic, operaia de proiecie se face considernd i un cmp care conine o cheie unic, astfel nct fiecare nregistrare devine unic. Selecia operaie n algebra relaional definit asupra unei relaii R, care const din construirea unei relaii S, a crei schem este identic cu cea a relaiei R i a crei extensie este constituit din acele tupluri din R care satisfac o condiie explicit n cadrul relaiei. Deoarece nu toate tuplurile din R satisfac condiia, selecia nseamn efectuarea de tieturi pe orizontal asupra relaiei R, adic eliminarea de tupluri. Condiia precizat n cadrul operaiei de selecie este de forma: <Atribut> <operator de compataie> <Valoare>

3. Sisteme de gestiune a bazelor de date relaionale

22

Jonciunea (join-ul) operaie n algebra relaional definit pe dou relaii R1 i R2, care const din construirea unei noi relaii R3, prin concatenarea unor tupluri din R1 cu tupluri din R2. Se concateneaz acele tupluri din R1 i R2 care satisfac o anumit condiie, specificat explicit n cadrul operaiei. Extensia relaiei R3 va conine combinaiile acelor tupluri care satisfac condiia de concatenare. Cel mai important tip de join din punct de vedere al utilizrii este equijoin-ul, care este o jonciune dirijat de o condiie de forma: <Atribut din R1> = <Atribut din R2> Jonciunea natural se refer la equijoin-ul aplicat tuturor cmpurilor comune. Operatorul pentru jonciunea natural este * . Jonciunea exterioar (outer join) include trei tipuri de jonciune: Jonciunea exterioar stnga Jonciunea exterioar dreapta Jonciunea exterioar complet relaiei. Intersecia operaie din algebra relaional definit pe dou relaii R1 i R2, ambele cu aceeai schem, care const din construirea unei noi relaii R3, cu schema identic cu a operanzilor i cu extensia format din tuplurile din R1 i R2. Diviziunea operaie din algebra relaional definit asupra unei relaii R, care const din construirea cu ajutorul unei relaii r a relaiei Q. Tuplurile relaiei Q concatenate cu tuplurile relaiei r permit obinerea tuplurilor relaiei R. Exemple Pentru a nelege mai bine aceste operaii s presupunem c avem urmtoarele trei structuri de date: care include toate tuplurile din partea stng a relaiei, care include toate tuplurile din partea dreapt a care include toate tuplurile din stnga i din dreapta iar n partea dreapt a relaiei include numai acele tupluri care au corespondent. relaiei, iar n partea stng a relaiei include numai acele tupluri care au corespondent.

23 1. Y1 fiier nchirieri maini Sofer_id 22 58 2. S2 fiier clieni Sofer_id 22 31 58 3. S3 fiier clieni Sofer_id 28 31 44 58 Sofer _nume Doncea Horia Leahu Mihai Coman Stefan Arsene Ion Permis_ani 5 8 12 10 Sofer _nume Ionescu Paul Leahu Mihai Arsene Ion Permis_ani 7 8 10 Auto_id 101 103 Ziua 10/10/2004 11/12/2004

Baze de date

Semnificaia structurilor de date este urmtoarea: n relaia Y1 se stocheaz informaii referitoare la mainile rezervate cu atributele: Sofer_id codul oferului, Auto_id codul mainii nchiriate, Ziua data la care a fost nchiriat; n relaiile S2 i S3 se stocheaz informaii referitoare la oferi (fragmentat), cu urmtoarele atribute: Sofer_id codul oferului (pentru a stabili o legtur ntre structura de date Y1 i S2, S3), Sofer_nume numele oferului, Permis_ani vechimea permisului de conducere. Principalele operaii: Reuniunea R3 = S2 S3

Sofer_id 22 31 58 44 28

Sofer _nume Ionescu Paul Leahu Mihai Arsene Ion Coman Stefan Doncea Horia

Permis_ani 7 8 10 12 5

3. Sisteme de gestiune a bazelor de date relaionale Intersecia R3 = S2 S3

24

Sofer_id 31 58 Diferena S2 - S3 Sofer_id 22 -

Sofer _nume Leahu Mihai Arsene Ion

Permis_ani 8 10

Sofer _nume Ionescu Paul

Permis_ani 7

Produs cartezian, Y 1 S 2 . Fiecare linie din relaia Y1 se combin cu fiecare linie din relaia S2; ca rezultat al produsului cartezian, apare un conflict deoarece ambele relaii Y1 i S2 au cte un cmp cu numele sofer_id, care poate fi rezolvat prin operaia de redenumire.

Comanda SQL pentru pentru produs cartezian Y 1 S 2 este dat n Figura 1. Operatorul redenumire se utilizeaz sub forma:

(C(1Sofer_id1,5Sofer_id2), Y1 S2)
cu urmtoare interpretare: se redenumete coloana 1 n Sofer_id1 i coloana 5 n Sofer_id2, n relaia dat de produsul cartezian obinut din relaiile Y1 i S2. Proiecia. Deoarece valorile dintr-un domeniu se pot repeta este necesar eliminarea repetrilor:

25 Sofer_nume,Permis_ani(S3) Sofer _nume Doncea Horia Leahu Mihai Coman Stefan Arsene Ion Permis_ani > 8(S3) Sofer_id 44 58 Sofer _nume Coman Stefan Arsene Ion Permis_ani 12 10 Permis_ani 5 8 12 10

Baze de date

Selecia

Din relaia S3 au fost selectate numai acele nregistrri care satifac condiia de vechime a permisului (mai mult de 8 ani). Operaia de proiecie se poate combina cu cea de selecie pentru optimizarea cererilor de date; de exemplu dac dorim extragerea datelor din relaia S3 numai pentru cmpurile Sofer_nume i Permis_ani mai mare de 8 ani: Sofer_nume,Permis_ani(Permis_ani > 8(S3)) Sofer _nume Coman Stefan Arsene Ion Permis_ani 12 10

Jonciunea (join-ul). Operaia de jonciune condiionat a dou relaii este echivalent cu selecia condiionat a produsului cartezian al celor dou relaii. S2 (Sofer_id) 22 31 Sofer _nume Ionescu Paul Leahu Mihai
S2.Sofer_id < Y1. Sofer_id

Y1 Ziua 11/12/2004 11/12/2004

Permis_ani (Sofer_id) Auto_id 7 8 58 58 103 103

3. Sisteme de gestiune a bazelor de date relaionale Operaia de jonciune condiionat mai poart uneori i numele de theta-join. Pentru acest exemplu, equijoin-ul, caz special al jonciunii condiionate n care condiia c conine doar egalitai, devine S2 Sofer_id 22 58 Sofer _nume Ionescu Paul Arsene Ion
Sofer_id

26

Y1 Ziua 10/10/2004 11/12/2004

Permis_ani Auto_id 7 10 101 103

Noua relaie rezultat din equijoin este similar cu produsul cartezian dintre S2 i Y1, dar numai o copie a cmpului pentru care este specificat egalitatea, va fi specificat n noua relaie (nu mai apare duplicarea cmpului). Exemple de jonciuni exterioare jonciune exterioar stnga Y1
Y1.Sofer_id=S2.Sofer_id

S2

jonciune exterioar dreapta Y1


Y1.Sofer_id=S2.Sofer_id

S2

jonciune exterioar compet Y1


Y1.Sofer_id=S2.Sofer_id

S2

27

Baze de date

De remarcat prezena cmpurilor cu valoarea NULL utilizat n jonciuni pentru a specifica lipsa de date. Presupunnd c tabele au fost create, programul surs pentru testarea celor trei tipuri de jonciuni exterioare este prezentat n Figura 1.

Fig. 1 Diviziunea Se utilizeaz la exprimarea interogrilor de tipul: Gsete automobilistul care a rezervat toate automobilele.

A / B = x x, y A, y B

3. Sisteme de gestiune a bazelor de date relaionale relaia obinut prin diviziune va conine toate tuplurile x care pentru fiecare tuplur y din B nu are asociat un tuplu xy n A. Pentru a nelege mai bine operaia de diviziune vom considera urmtorul exemplu, n care considerm tabelul A1 (cmpuri xx_no, yy_no) i tablele B1, B2, B3 (un singur cmp yy_no, corespondent cu cel din tabelul A) i realizm operaiile de diviziune A1/B1, A1/B2, A1/B3:

28

Secvena de program care realizeaz cele trei operaii de diviziue se gsete n figura 1, ultima seciune *Diviziune. Rezultatul celor trei comenzi SQL este:

A1/B1

A1/B2

A1/B3

3.1.3. Optimizarea cererilor de date

Se realizeaz n dou etape: 1. exprimarea cererilor de date sub forma unor expresii algebrice relaionale care au la baz echivalena dintre calculul relaional i algebra relaional,

29

Baze de date

2. aplicarea unor transformri algebrice asupra expresiilor obinute n etapa precedent, n scopul obinerii unor expresii echivalente cu cele iniiale, dar care s fie executate mai eficient.
Proprieti

Comutativitatea operaiilor de join i produs cartezian: E1 >< E 2 = E 2 >< E1 E1 E 2 = E 2 E1 Asociativitatea operaiilor de join i produs cartezian: ( E1 >< E 2 ) >< E3 = E1 >< ( E 2 >< E3 ) ( E1 E 2 ) E3 = E1 ( E 2 E3 ) Compunerea proieciilor Compunerea seleciilor F1 ( F2 ( E )) = F1 F2 ( E ) , deoarece F1 I F2 = F 2 I F1 , seleciile se pot

comuta:

F 1 ( F 2 ( E ) ) = F 2 ( F 1 ( E ) )
Comutarea seleciei cu proiecia Comutarea seleciei cu produsul cartezian Comutarea seleciei cu reuniunea Comutarea seleciei cu diferena Comutarea proieciei cu produsul cartezian Comutarea proieciei cu reuniunea Prin deplasarea operaiilor de selecie ct mai la stnga expresiilor algebrice se reduce numrul de tupluri care trebuie manipulate n procesul de executare a cererii. Se pot meniona urmtoarele strategii de optimizare a cererilor de date: Deplasarea operaiei de selecie naintea operaiei de jonciune jonciunea i produsul cartezian acioneaz ca generatori de tupluri. Prin selecie se reduce dimensiunea relaiilor la care se aplic aceti generatori de tupluri. Se ine seama c operaia de jonciune poate fi exprimat sub forma unui produs cartezian urmat de o selecie, iar n cazul jonciunii naturale printr-un produs cartezian urmat de de o selecie i de o proiecie. Deplasarea operaiilor de proiecie naintea operaiilor de jonciune se realizeaz prin folosirea proprietii de comutare a seleciei cu produsul cartezian Combinarea seleciilor multiple se realizeaz cu ajutorul relaiei de compunere a seleciilor.

3. Sisteme de gestiune a bazelor de date relaionale Deplasarea operaiilor de selecie naintea operaiilor de proiecie- realizat pe baza proprietii de comutare a seleciei cu proiecia. Eliminarea tuplurilor duplicate obinute prin proiecie se face prin ordonarea tuplurilor. Selecia reduce numrul tuplurilor ce trebuiesc ordonate facilitnd operaia de proiecie.
3.1.4. Baze de date relaionale

30

Conceptul bazelor de date relaionale este axat pe metodologia entitate-tabel (E-T). Entitile modeleaz obiectele care sunt implicate ntr-o organizaie, de exemplu studenii, profesorii i cursurile dintr-o universitate. Tabelele modeleaz legturile dintre entiti, de exemplu profesorii predau cursuri. n plus, restriciile de integritate aplicate entitilor i relaiilor formeaz o parte important a specificaiilor E-T, de exemplu, un profesor poate preda un singur curs la o anumit or dintr-o anumit zi. Entitile similare pot fi agregate n tipuri de entiti. De exemplu, Ionescu, Popescu, Albu, pot fi agregai n tipul de entitate PERSOAN, pe baza faptului c aceste entiti sunt oameni. Ionescu i Albu pot aparine tipului de entitate STUDENT, deoarece aceste obiecte sunt studeni. La fel ca tabelele, entitile sunt descrise utiliznd atribute. Fiecare atribut specific o particularitate semnificativ a entitii. De exemplu, atributul Nume al unei entiti de tip PERSOAN specific irul de caractere care alctuiete numele persoanei din lumea real. De asemenea, Vrsta este atribuitul care specific de cte ori Pmntul a nconjurat Soarele fa de momentul n care o anumit persoan s-a nscut. Pentru fiecare atribut, se asociaz un domeniu care specific setul de valori pe care le poate lua atributul. n principiu, este posibil ca dou entiti diferite ale aceluiai tip s posede valori identice pentru toate atributele. Atributelor li se asociaz valori care au drept scop identificarea entitii, realizndu-se o nregistrare n tabela respectiv. Atribute pot fi: - complexe - cele care pot fi divizate n mai multe pri cu semnificaie independent. De exemplu, atributul Adresa poate fi divizat n mai multe atribute: Ora, Cod potal, Strad, Numr, Bloc, Etaj, Nr_Apartament. Una din cerinele importante referitoare la valorile din domeniu se refer la atomicitatea datelor. Atomicitatea datelor nu nseamn c aceste valori nu se pot descompune, datele pot fi iruri de caractere, ceea ce nseamn c pot fi descompuse. Cerina de atomicitate se refer la faptul c modelul relaional nu specific nici un mijloc pentru a privi n interiorul structurii valorilor, astfel c valorile sunt invizibile pentru operatorii relaionali;

31

Baze de date

- cu o singur valoare din setul de valori ale atributului pentru fiecare entitate exist numai o singur valoare, nerepetabil la o alt entitate. De exemplu, CNP (Codul Numeric Personal) pentru o persoan este unic i nici o alt persoan nu mai are atribuit aceeai valoare a CNP; - cu set de valori atributul poate lua orice valoare din set i care se poate repeta pentru o alt entitate. Este cazul culorilor (dou mrci de main diferite pot avea aceai culoare) sau gradul cadrelor didactice; - derivate sunt cele ce se pot determin din alte atribute, de exemplu vrsta unei persoane se poate determina scznd din data curent data naterii persoanei respective, sau determinarea valorii unei entiti prin produsul dintre preul unitar i cantitate. Prezena atributelor derivate mpreun cu cele primare cresc gradul de redundan al datelor din baza de date i trebuie evitat; - fr valoare (NULL) bazele de date accept i posibilitatea lipsei datelor pentru cmpurile anumitor nregistrri, de exemplu, din atributul Adres, poate lipsi Numele_blocului sau Nr_Scara. Cheile de restricie introduse n modelul relaional sunt asociate cu tipurile de entiti, de exemplu, dou persoane diferite nu pot avea aceleai valori pentru atributele Nume i Adresa. Schema n modelul relaional se definete ca fiind un tip de entitate compus din numele tipului de entitate, colecia de atribute (cu domeniile asociate i indicaii n cazul n care un atribut este complex sau cu valori unice) i cheile de restricie. Reprezentarea diagramelor E-T tipurile de entiti reprezentate n diagramele E-T sunt sub form de dreptunghiuri i atributele sub form de elipse. Atributele tip set de de valori (modelul relaional permite atributelor s posede un set de valori din domeniu) sunt reprezentate n elipse duble. Sublinierea unui atribut n diagram l desemneaz ca fiind cheie primar, adic un atribut cu valoare unic. Figura 2 descrie o diagram E-R pentru entitatea PERSOANA:

PERSOANA

Nume

Adresa

CNP

Copii

Fig. 2
3.1.5. Tipuri de relaii

3. Sisteme de gestiune a bazelor de date relaionale Relaia unu-la-unu (1-1) este tipul cel mai simplu de relaie, prin care unui element din tabela R1 i corespunde un singur element din tabela R2 i reciproc. Relaia 1-1 este mai rar folosit, n general pentru a reduce numrul de atribute dintr-o tabel, de exemplu dac vrem s desprim elementele fixe care se modific mai rar (datele personale) fa de cele care se modific mai des (situaia colar anual). Relaia unu-la-mai muli (1-N) este tipul de relaie prin care unui element din tabela R1 i corespund unul sau mai multe elemente din tabela R2, iar unui element din tabela R2 i corespunde un singur element din tabela R1. De exemplu, presupunem c avem: - tabela FACULTATE cu atributele CodFac, Denumire, Adresa, NumeDecan; - tabela STUDENTI cu atributele CodStud, CodFac, An, Grupa, Medie, Bursa; ntre cele dou tabele exist o relaie 1-N prin intermediul cmpului CodFac. Relaia mai muli-la-mai muli (M-N) prin care unui element din tabela R1 i corespunde unul sau mai multe elemente din tabela R2 i reciproc. De exemplu, un student frecventeaz mai multe cursuri i o disciplin este frecventat de mai muli studeni. Acest tip de relaie este frecvent ntlnit, dar nu se poate implementa direct n bazele de date relaionale. Pentru modelare se folosete o relaie suplimentar, de tip 1-N pentru fiecare din tabelele iniiale. Presupunnd c avem dou tabele MATERII i STUDENTI se introduce suplimentar tabela NOTE care face legtura ntre tabelele MATERII i STUDENTI: - tabela MATERII are atributele CodMaterie, Denumire, An, NumeProfesor; - tabela STUDENTI cu atributele: CodStud, CodFac, An, Grupa, Medie, Bursa; - tabela NOTE cu atributele: CodStud, CodMaterie, Nota, Data. Relaia unar este acea relaie care folosete o singur tabel care este asociat cu ea nsi. Exemplul clasic este cel al managerului unei companii, care la rndul su este tot un angajat al acestei companii. Pentru fiecare tip de entitate participant n cadrul relaiei se definete un rol care primete un nume pentru tipul relaiei. n diagramele E-T, tipul relaiei se reprezint sub forma unui romb. De exemplu, tipul de relaie LUCREAZ cu atributul Data, definit n Figura 3, are dou roluri Profesor i Departament:

32

Data

PROFESOR

LUCREAZA

DEPARTAMENT

33

Baze de date

Fig. 3 Rolul Profesor identific entitatea PROFESOR implicat n relaia LUCREAZ, iar rolul Departament identific entitatea DEPARTAMENT n cadrul relaiei. n Figura 4 este prezentat o relaie ntre trei entiti: PROIECT (cu rolul Client), PARTENER (cu rolul Produs), FURNIZOR (cu rolul Furnizor), cu tipul de relaie SOLD i atributele Data i Pret.

Data

PRET

PROIECT SOLD Client Produs

PARTENER

Chei: Client, Produs, Data FURNIZOR

Fig. 4
3.1.6. Restricia de cardinalitate

Fie C un tip de entitate i A tipul de relaie conectat la C prin intermediul rolului R. Restricia de cardinalitate a rolului R este o declaraie de forma min..max ataat la R, care restricioneaz numrul de instane a relaiilor de tip A n care o singur entitate de tip C poate participa n rolul R i este un numr n intervalul min..max, Figura 5.
C 1..2 R c

a1 E d1 e1 d2

a2 e2 d13

a3 e3

Fig. 5

3. Sisteme de gestiune a bazelor de date relaionale

34

Figura 5 prezint i o diagram cu restricia de cardinalitate pentru rolul R. n partea dreapt se prezint o instan valid a diagramei, unde entitatea C particip n dou relaii de tip A. Relaia a3 este tiat deoarece violeaz limitele de cardinalitate 1..2 ale rolului R. n general, modelul E-T suport restricia de cardinalitate de forma min..max, unde min este un numr mai mare sau egal cu zero, max este un numr mai mare dect zero cu condiia

min max . n plus, max poate fi simbolizat i prin caracterul *, care reprezint infinitul. Astfel, o
restricie de forma 3..* asupra rolului R care conecteaz un tip de entitate C, cu un tip de relaie A, nseamn c fiecare entitate de tip C trebuie s participe n rolul R, cu cel puin trei relaii de tip A (fr limit superioar). Pentru restriciile de cardinalitate de forma N..N (unde min=max) este adesea abreviat cu N, iar caracterul * se folosete pentru sintagma mai muli.
C 0..1

D 0..1

* E

Fig. 6 n Figura 6 sunt prezentate tipuri de relaii de grad superior (4). Tipul relaiei este determinat de restricia de cardinalitate a rolurilor unei relaii. De exemplu, relaia de tip B implic o coresponden unu-la-unu ntre entitatea C i D. Aceasta nsemn c o entitate de tip C poate fi asociat cu cel puin o entitate de tip D i vice versa. n acelai timp, relaia B implic o corespunden unu-la-mai muli pentru entitile E la C i D (ca i pentru F la C i D). Aceasta nseamn c o entitate de tip E poate fi asociat cu orice numr (inclusiv zero) de eniti de tip C i

D, dar o entitate de tip C (sau D) poate fi asociat cu cel mult o entitate de tip E. Relaia de
coresponden unu-la-mai muli nu este simetric; inversa acestei corespondene (C la E) este numit mai muli-la-unul. Corespondena ntre E i F este numit mai muli-la-mai muli, adic o entitate de tipul E poate fi asociat cu orice numr de entiti F i vice versa.

3.2. Regulile lui Codd

35

Baze de date

Detalierea caracteristicilor, pe care trebuie s le prezinte un SGBD pentru a fi considerat relaional, s-a facut de E. F. Codd n 1985, sub forma a 13 reguli.
R0 Gestionarea datelor la nivel de relaie.

Toate informaiile din baza de date sunt gestionate numai prin mecanisme relaionale. Rezult c SGBD-ul trebuie s-i ndeplineasc toate funciile utiliznd ca unitate de informaie mulimea, adic s utilizeze limbaje (SQL) care s opereze la un moment dat pe o ntreag relaie.
R1 Reprezentarea logic a datelor

Informaiile din baza de date relaional trebuie s fie reprezentate explicit la nivel logic ntr-un singur mod i anume ca valori n tabelele de date. Rezult c toate datele trebuie s fie memorate i prelucrate n acelai mod. Informaiile privind numele de tabele, coloane, domenii, definiiile tabelelor virtuale, restriciile de integritate trebuie s fie memorate tot n tabele de date (catalog).
R2 Garantarea accesului la date

Accesarea informaiilor din baza de date relaional se va face prin specificarea numelui tabelei, a valorii cheii primare i numelui de coloan.
R3 - Valorile NULL

SGBD trebuie s permit declararea i manipularea valorilor null, cu semnificaia unor date lips sau inaplicabile. Valorile NULL, care difer de irurile de caractere spaiu sau de irurile vide de caractere sunt importante n implementarea restriciilor de integritate (integritatea entitii i integritatea referenial) din modelul relaional.
R4 - Metadatele

Informaiile despre descrierea bazei de date, metadatele, trebuie s se prezinte la nivel logic n acelai mod cu descrierea datelor propriu-zise, utilizatorul aplicnd asupra descrierii bazei de date aceleai operaii ca i la datele obinuite. Sistemul nu trebuie s fac diferene ntre descrierea datelor i a metadatelor utiliznd o singur structur, cea relaional.
R5 Facilitile limbajelor utilizate

Un sistem relaional trebuie s fac posibil utilizarea mai multor limbaje, n mai multe moduri. Trebuie s existe cel puin un limbaj de nivel nalt ale crui instruciuni s poat exprima oricare din

3. Sisteme de gestiune a bazelor de date relaionale urmtoarele operaii: definirea tabelelor de baz, definirea tabelelor virtuale, manipularea datelor, definirea restriciilor de integritate, autorizarea accesului, precizarea limitelor tranzaciilor.
R6 Actualizarea tabelelor virtuale

36

Nu toate atributele din cadrul unei tabele virtuale, deci nu toate tabelele virtuale, sunt teoretic actualizabile.
R7 Actualizrile n baza de date

SGBD trebuie s ofere posibilitatea manipulrii unei tabele (de baz sau virtuale) nu numai n cadrul operaiilor de regsire, ci i n cazul celor de adugare, modificare i tergere a datelor. n cursul operaiilor prin care se schimb coninutul bazei de date s se lucreze la un moment dat pe o ntreag relaie.
R8 Independena fizic a datelor

Programele de aplicaie nu trebuie s fie afectate de schimbrile efectuate n modul de reprezentare a datelor sau n metodele de acces. O schimbare a structurii fizice a datelor nu trebuie s blocheze funcionarea programelor de aplicaie.
R9 Independena logic a datelor

Programele de aplicaie nu trebuie s fie afectate de schimbrile efectuate asupra relaiilor bazei de date.
R10 Restriciile de integritate

Restriciile de integritate trebuie s poat fi definite n limbajul utilizat de SGBD pentru definirea datelor i s fie memorate
R11 Distribuirea geografic a datelor

n situaia n care datele sunt distribuite, programele de aplicaie s fie logic aceleai cu cele utilizate n cazul n care datele sunt fizic centralizate. Utilizatorul trebuie s perceap datele ca fiind centralizate. Localizarea i recompunerea datelor distribuite cade n seama sistemului.
R12 Prelucrarea datelor la nivel de baz

37

Baze de date

Dac SGBD posed un limbaj de baz de nivel sczut orientat pe prelucrarea de nregistrri (tupluri) i nu pe prelucrarea mulimilor (relaiilor) acest limbaj nu trebuie folosit, pentru a se evita restriciile de integritate sau restriciile introduse prin utilizarea limbajelor relaionale de nivel nalt

3.3. Normalizarea datelor


Este procesul prin care se elimin redundana datelor n proiectul bazei de date i se construiete un model de baz de date care susine diverse cerine funcionale i structuri alternative ale bazei de date. Sunt aplicate n normalizarea unei baze de date urmtoarele trei reguli.
N1. Toate atributele trebuie specificate o singur dat. Aceasta este forma inti normal. N2. Un atribut trebuie s depind n ntregime de identificatorul unic al entitii pe care o descrie.

Aceasta este forma a doua normal. Se pun atributele ntr-o tabel n care depind exclusiv de o cheie principal. Nu se utilizeaz tabele n care atributele s nu depind exclusiv de o singur cheie!
N3. Pentru a fi n forma normal a treia, fiecare tabel trebuie s posede o singur cheie primar, iar

datele din tabel trebuie s depind exclusiv de cheia primar a tabelei.

3.4. Cerinele minimale de definire a SGBDR


Dintre primele versiuni aprute, practic nici un sistem de gestiune a bazelor de date nu reuea s acopere n ntregime regulile lui Codd. De aceea s-au formulat o serie de criterii minimale pe care trebuie s le satisfac un sistem de gestiune a bazelor de date pentru a putea fi considerat relaional. Pentru ca un SGBD s fie minimal relaional: 1. toate datele din cadrul bazei de date sunt reprezentate prin valori n tabele; 2. ntre tabele nu exist pointeri observabili de ctre utilizatori operaiile cu relaii nu fac apel la pointeri, indeci, fiiere inverse etc.; 3. sistemul suport operatori relaionali de proiecie, selecie i jonciune natural, fr limitri impuse. Unitatea de informaie n cadrul acestor operaii trebuie s fie relaia. SGBD este complet relaional dac este minimal relaional i satisface n plus urmtoarele condiii:

sistemul suport toate operaiile de baz ale algebrei relaionale;

3. Sisteme de gestiune a bazelor de date relaionale

38

sistemul suport dou dintre restriciile de integritate de baz ale modelului relaional i anume SGBD este pseudorelaional dac satisface condiiile 1 i 3 de mai sus; SGBD este cu interfa relaional dac satisface condiiile 1 i 3 de mai sus i condiia 3 este

unicitatea cheii unei relaii i restricia referenial;

ndeplinit numai n raport cu operaia de interogare.

39

Baze de date

4. Componentele funcionale ale sistemului Visual FoxPro


Sistemul de gestiune a bazelor de date este componenta unui sistem de baze de date, care are rolul de a permite descrierea i manipularea datelor conform unui model de date. La acest moment, n lume, cea mai mare parte a SGBD-urilor utilizate sunt bazate pe modelul relaional. Visual FoxPro este un SGBD complet relaional, cu limbaj propriu, care suport un nucleu extins din limbajul relaional SQL. Varianta Visual de FoxPro (VFP) a ajuns la versiunea 6.0 lansat n 1998 n cadrul pachetului de programe Visual Studio 6.0, care mai conine urmtoarele programe: Visual C++, Visual Basic 6.0 i Visual Java 6.0. VFP este un sistem rapid, modularizat, flexibil, care nu necesit resurse de calcul foarte mari, mbin programarea procedural (prin limbaj propriu) cu cea descriptiv, pe obiecte (programare vizual). Utilizatorii neinformaticieni au la dispoziie o gam larg de generatoare pentru ecrane, meniuri, rapoarte etc. Utilizatorii de specialitate (informaticieni) pot dezvolta programe n limbaj propriu i n SQL, aplicaii (prin componentele Designer i Application). Administratorul bazei de date are la dispoziie instrumente oferite de VFP pentru asigurarea securitii i integritii datelor, pentru refacerea bazei de date etc.

4.1. Programarea orientat pe obiecte


n programarea orientat pe obiecte, implementat n Visul FoxPro, se utilizeaz conceptele descrise n continuare.

Clasa de obiecte reprezint un tip abstract de date care definete structura obiectelor din acea
O clas este un model sau o schi care definete caracteristicile unui obiect i n care este

clas (proprietile) i mulimea de metode (operaii) pentru obiectele respective. descris modul n care trebuie s arate i s se comporte obiectul. Se poate crea o clas nou utiliznd comanda CREATE CLASS sau modulul de proiectare a clasei (Class Designer). Rezult un fiier cu extensia .vcx (Visual Class Library) care va conine clasele definite de utilizator.

Subclass este folosit pentru definirea unei noi clase, pentru un obiect care are ca punct de
plecare definirea din alt clas (clas printe). Noua definire va moteni orice modificare din clasa printe. O subclas poate avea toate funcionalitile unei clase existente i n plus orice control sau funcionalitate care se dorete a fi inclus. Dac, de exemplu, clasa de baz este telefonul, se poate

4. Componentele funcionale ale sistemului Visual construi o subclas care are toate funcionalitile telefonului original i n plus se pot aduga caracteristici speciale. Astfel, subclasele permit reutilizarea secvenei de instruciuni surs (reutilizarea codului). Utilizarea subclaselor este una din cile de reducere a mrimii codului care trebuie scris. Se ncepe cu definirea unui obiect care este apropiat de cel dorit i se gestioneaz.

40

Obiectele reprezint o colecie de proprieti care se refer la aceeai entitate. Aceste

proprieti descriu structura de date a obiectului. Un obiect are un nume, prin care este referit, un identificator unic, metode, o implementare (privat utilizatorul nu are acces) i o interfa (care este public). Cererile adresate unui obiect pentru a returna o valoare sau pentru a schimba o stare se numesc mesaje. Obiectul este o instan a unei clase, care combin att date, ct i proceduri. De exemplu, un control ntr-un videoformat (Form) este un obiect. Clasele i obiectele sunt entiti apropiate i nrudite, dar nu se identific n totatlitate. O clas conine informaii despre modul n care un obiect trebuie s arate i s se comporte, dar nu este obiectul ca atare. O clas este o schi, o schem a unui obiect. Operatorii modelului orientat pe obiecte se refer la actualizarea metodelor, a proprietilor, a claselor, a instanelor. La baza operaiilor dintr-un astfel de model stau mesajele, care ajut obiectele s comunice ntre ele.

Restriciile de integritate a datelor:


orice obiect respect restriciile impuse clasei din care face parte; identificatorul obiectului asigur integritatea referirii la acesta; accesul la obiect este limitat la folosirea protocolului de mesaje definit pentru clasa din care face parte.

Metoda definete operaiile permise (operatorii) asupra obiectului, adic definete

comportamentul acestuia. Metoda este o aciune pe care un obiect este capabil s o realizeze. De exemplu, obiectele de tip List Boxes au atate ca metode: AddItem, RemoveItem, Clear pentru a gestiona coninutul listelor.

Proprietatea este un atribut al unui control, cmp sau obiect dintr-o baz de date, pe care

programatorul l stabilete pentru a defini una din caracteristicile obiectului sau un aspect al comportrii acestuia. De exemplu, proprietatea Visible dac este fixat pe True, face ca obiectul respectiv s fie vizibil la momentul rulrii videoformatului. Proprietile obiectului pot fi schimbate

41

Baze de date

n fereastra de proprieti, n general, n timpul proiectrii videoformatului; exist situaii cnd anumite proprieti pot fi schimbate i n momentul execuiei videoformatului, ca urmare a apariiei unor evenimente.

Evenimentul reprezint o aciune, recunoscut de un obiect pentru care se poate scrie o

secven de cod pentru rspuns. Evenimentele pot fi generate de o aciune a utilizatorului, cum este apsarea butonului stng al mouse-ului (Click event) sau apsarea unei taste (Keypress event), prin secvenele de program sau de ctre sistem (timers). Un obiect are anumite proprieti, de exemplu, un telefon are o anumit culoare i mrime. Cnd instalm un telefon pe birou, el are o anumit poziie. Receptorul poate fi pus sau nu n furca. Obiectele create au de asemenea proprieti care sunt determinate de clasa din care face parte obiectul. Aceste proprieti pot fi stabilite n momentul proiectrii sau la momentul execuiei aplicaiei. De exemplu, anumite proprieti pe care le poate avea un obiect de tip Check Box sunt enumerate mai jos:
Proprietate Descriere

Caption Enabled ForeColor Left Top Visible

Textul descriptiv de pe lng Check Box Specific dac un obiect Check Box poate fi adresat de utilizator. Culoarea textului stabilit prin Caption. Poziia fa de marginea din stnga a obiectului Check Box. Poziia fa de marginea de sus a obiectului Check Box. Specific cnd un obiect Check Box este vizibil.

MousePointer Forma pointer-ului cnd trecem pe deasupra obiectului cu mouse-ul.

Fiecare obiect recunoate i rspunde la anumite aciuni numite evenimente. Un eveniment este o activitate specific i predeterminat iniiat de utilizator sau de sistem. Evenimentele, n majoritatea cazurilor, sunt generate de interaciunea cu utilizatorul. De exemplu, la telefon, un eveniment este declanat n momentul n care un utilizator ridic receptorul din furc. Evenimentele sunt declanate i atunci cnd utilizatotul apas pe butoane pentru a forma un numr de apel. n Visula FoxPro aciunile utilizatorului care declaneaz evenimente includ: apsarea butonului stng de la mouse (Click), micarea mouse-ului (MouseMove) i apsarea unei taste

4. Componentele funcionale ale sistemului Visual (Keypress). Sistemul poate iniia evenimente n cazul n care ntlnete o linie de cod care cauzeaz eroare, cum ar fi mesaje specifice i chiar ntreruperea execuiei aplicaiei.

42

Metodele sunt proceduri care sunt asociate cu un obiect. Metodele sunt diferite de procedurile
normale din Visual FoxPro: metodele sunt legate intrinsec de evenimente. Evenimentele pot avea asociate metode. De exemplu, dac se scrie un cod pentru o metod pentru evenimentul Click, acel cod este executat atunci cnd are loc evenimentul Click. De asemenea, metodele pot exista independent de orice eveniment. Metodele trebuie s fie apelate explicit n cod. Setul de evenimente este fix, nu se pot crea evenimente noi! S considerm cteva evenimente asociate cu un obiect de tip check box:
Eveniment Descriere

Click GotFocus LostFocus

Utilizatorul face click pe check box. Utilizatorul selecteaz check box cu mouse-ul sau apsnd tasta [TAB]. Utilizatorul selecteaz un alt obiect.

n tabelul de mai jos sunt date cteva metode asociate cu obiectul de tip check box:
Metod Descriere

Refresh SetFocus

Valoarea din check box este actualizat pentru a reflecta orice modificare aprut n datele surs. Controlul este dat ctre check box ca i cum utilizatorul ar apsa tasta TAB pentru a selecta check box.

Toate proprietile, evenimentele i metode asociate unui obiect sunt specificate n definirea clasei. Programarea orientat spre obiecte este un sistem de programare care permite abstractizarea i organizarea modular de tip ierarhie i are caracteristici polimorfice, de motenire i ncapsulare.

Polimorfismul este abilitatea de a avea metode cu acelai nume, dar cu un coninut diferit pentru
clasele nrudite. Procedura de utilizare este determinat n momentul execuiei de ctre clasa unui obiect. De exemplu, obiectele nrudite pot avea amndou metode Draw. O procedur transmite un astfel de obiect ca parametru poate apela metoda Draw fr a mai fi nevoie s tie ce tip de obiect

43

Baze de date

este parametrul transmis. Polimorfismul reprezint posibilitatea ca diferitele obiecte s poat rspunde diferit la aceleai mesaje.

Motenirea este un termen din programarea orientat spre obiecte i reprezint abilitatea unei
subclase de a prelua caracteristicile clasei printe (clasa de baz). Cnd caracteristicile clasei printe se modific, subclasa derivat motenete noile modificri. De exemplu, dac se adaug o nou proprietate IsBold la un control de editare, orice subclas care are la baz clasa acestui control va avea de asemenea proprietatea IsBold. Asadar, motenirea reprezint capacitatea unui obiect de a-i deriva datele i funcionalitatea din alte obiecte. Prin intermediul motenirii dac se face o modificare ntr-o clas, modificarea se reflect n toate subclasele care aparin clasei respective. Aceast actualizare automat facut prin motenire aduce beneficii n privina timpului i a efortului de proiectare. De exemplu, dac un productor de telefoane dorete s schimbe modul de formare a numrului prin trecerea de la sistemul bazat pe disc la sistemul de telefon cu butoane, va economisi mult munc dac va fi capabil s fac modificrile n schema principal i dac toate telefoanele realizate anterior pe baza acestei scheme principale vor moteni automat modificrile aduse comparativ cu situaia n care ar trebui s fac modificrile individual la toate telefoanele existente. Dac se descoper o greeal n clasa de baz, n loc s fie modificat codul pentru fiecare subclas se remediaz eroarea n clasa de baz i noua modificare se propag n toate subclasele aferente.

ncapsularea n programarea orientat spre obiecte este legat de abilitatea de a conine i


ascunde informaiile despre un obiect, cum sunt cele referitoare la structura intern a datelor i codul surs. ncapsularea izoleaz complexitatea intern a modului de operare a obiectului de restul aplicaiei. De exemplu, cnd se fixeaz proprietatea Caption la un buton de comand nu este necesar cunoaterea modului de stocare a irului de caractere. Se spune c obiectul din acest punct de vedere este transparent. ncapsularea permite ca descrierea obiectelor s se fac astfel nct s nu existe acces din afara obiectului la datele sale (black box).

Abstractizare este procesul de identificare a caracteristicilor distinctive a unei clase sau obiect fr
a fi nevoie de a procesa toate informaiile referitoare la clas sau obiect. Cnd se creaz o clas, de exemplu, un set de butoane pentru navigare ntr-o tabel, setul se poate utiliza ca o singur entitate n loc de a ine evidena componentelor individuale (butoane) i modul n care acestea interacioneaz.

4. Componentele funcionale ale sistemului Visual

44

Proiectarea i programarea orientat spre obiecte reprezint o schimbare a focalizarii activitii fa de programarea procedural standard. n loc de a gndi schema logic i algoritmul de la prima linie la ultima linie de cod surs, trebuie s ne concentrm asupra crerii de obiecte autoconinute ntr-o aplicaie care s posede att o funcionalitate privat ct i o funcionalitate expus utilizatorului. ntre cele dou tipuri de funcionalitate exist o interfa prin care utilizatorul poate schimba anumite proprieti, dar nu are acces la codul surs intrinsec al obiectului. n Visula FoxPro videoformatele (Form) i controalele (Control) sunt obiecte care sunt incluse n aplicaii. Aceste obiecte pot fi manipulate prin intermediul proprietilor, evenimentelor i metodelor.

4.2. Ierarhia claselor n Visual FoxPro


La crearea unei noi clase este de mare ajutor cunoaterea ierarhiei obiectelor din Visual FoxPro, preluat din [8]:

45

Baze de date

4.2. Arhitectura VFP 6.0


Arhitectura SGBD VFP 6.0 (Figura 1) corespunde unui model complet relaional, componentele sale fiind structurate pe trei niveluri: nucleul (kernel), interfeele (interfaces) i instrumentele (toolkit). 1. Nucleul este componenta central a sistemului. Din nucleu fac parte:

Limbajul FoxPro care este propriu sistemului, este de tip procedural. El coine comenzi

att pentru descrierea datelor (LDD) ct i pentru manipularea datelor (LMD). Tot aici sunt incluse comenzile pentru programarea vizual din tehnologia orientat spre obiecte.

2.

Nucleul extins SQL este un subset din standardul SQL. Acesta este un limbaj relaional Interfeele sunt produse VFP pentru dezvoltarea aplicaiilor cu baze de date relaionale.

descriptiv, care conine att comenzi pentru descrierea datelor ct i pentru manipularea datelor. Ele au urmtoarele componente:

Designer permite crearea de diferite obiecte VFP: tabele (Table), cereri de regsire
(Query), videoformate (Form), rapoarte (Report), etichete (Label), meniuri (Menu).

2
DESIGNER

INTERFEE

BUILDER

WIZARD

EXPORT/IMPORT

Generatoar e

API

1
Limbajul FoxPro

NUCLEU

Nucleul extins SQL

BD

INSTRUMENTE
EDITOR TEXTE UTILITARE de ntreinere DEBUG

HELP/DEMO

INTERNET

Fig. 1

4. Componentele funcionale ale sistemului Visual

46

Un produs Designer se apeleaz printr-o comand CRETE/MODIFY aferent obiectului


respectiv. Comanda poate fi generat de sistem sau scris de utilizator.

Builder permite adgarea rapid a unor noi elemente la obiectele tip VFP create deja cu
produsul Designer.

Wizard permite realizarea complet i rapid a obiectelor de tip VFP. Utilizarea modulului
Wizard presupune asistarea utilizatorului de ctre sistem n proiectarea obiectelor. Generarea lor

se face automat, pe baza opiunilor exprimate de utilizator, sub form de rspuns la diferite ntrebri. Acest modul face parte din categoria instrumentelor de proiectare asistat de calculator.

Export/Import permite schimbul de date ntre VFP i alte sisteme. Generatoare specializate pentru realizarea proiectelor (PROJECT), a aplicaiilor (APP), a
documentaiei (DOC).

API (Application Programmers Interface) permite apelarea din aplicaia VFP a unor rutine
scrise n limbajul C sau limbaj de asamblare. 3. Instrumentele sunt produse VFP pentru ntreinerea i exploatarea bazei de date. Instrumentele includ:
Editor de texte permite ncrcarea i editarea programelor surs (fiiere cu extensia .PRG),

precum i a fiierelor ASCII. Apelarea editorului se poate face prin comanda dat n fereatra

Command:
MODIFY COMMAND <nume_fiier>

UTILITARE de ntreinere permit gestiunea fiierelor, setarea unor parametri de lucru,


debug permite depanarea interactiv a programelor scrise n FoxPro. Help/Demo permite instruirea interactiv a utilizatorilor. Internet permite utilizarea unor sevicii de Internet (mail, transfer de fiiere etc.).

activiti desfurate de administratorul bazei de date.

4.3. Moduri de lucru n VFP


Dup intrarea n VFP utilizatorul poate lucra n dou moduri: cu meniul sistem i prin comenzi. Ecranul principal VFP conine o fereastr de tip Microsoft cu urmtoarele elemente (Figura 2):

47

Baze de date

Fig. 2

bara de titlu pe care este scris Microsoft Visual FoxPro (n stnga) i butoanele pentru bara meniului sistem care conine un meniu orizontal cu opiunile de lucru (modul de lucru

minimizare/maximizare i nchidere fereastr (dreapta). meniu sistem): File, Edit, View, Format, Tools, Program, Window, Help. La selectarea unei opiuni apare un submeniu vertical, de unde se alege mai departe subopiunea dorit.

bara cu instrumente care conine butoane (icon-uri) dispuse orizontal. Acestea pot fi active sau

nu, n funcie de starea curent de lucru. Prin aceste butoane se poate apela, sub o alt form, o suboperaiune din meniul sistem.

fereastra de comand care conine un cursor i permite introducerea unei comenzi VFP sau aria de ieire este format din restul spaiului neocupat din fereastra principal unde vor fi

apelul unui program (modul de lucru prin comenzi). afiate rezultatele execuiei unei comenzi sau a unui program VFP.
4.3.1. Modul de lucru meniu sistem

Este modul de lucru care permite apelarea tuturor instrumentelor i interfeelor sistemului VFP. Soluia este adoptat de utilizatorii care prefer dezvoltarea aplicaiilor cu ajutorul generatoarelor. Efortul depus este redus i nu se programeaz n cod surs. Opiunile din meniul principal ca i cele din submeniuri pot fi apelate prin mouse, sau cu o combinaie de taste. De exemplu, apelarea meniului File (Figura 3) se face tastnd secvena [ALT] + [F] (litera subliniat din componena numelui meniului).

4. Componentele funcionale ale sistemului Visual

48

Fig. 3 Funciile opiunilor din meniul principal al sistemului sunt:

Fig. 4

File apeleaz instrumente pentru ntreinerea fiierelor aferente unei baze de date VFP (Figura
3):
New creaz un obiect nou. Apare o list din care putem selecta: Project (crearea unui proiect), Database (crearea de baz de date), Table (crearea unei tabele), Query (crearea unei cereri), Connection (realizeaz oconexiune), View (crearea unei viziune local), Remote View (crearea

unei viziune la distan), Form (crearea unui videoformat), Report (crearea unui raport), Label (crearea etichetelor), Program (pentru crearea unui program surs), Class (crearea unei clase de obiecte), Text file (crearea de fiier de tip text - ASCII), Menu (crearea unui meniu utilizator). n partea dreapt exist dou butoane, pentru crearea unui fiier nou (New) i pentru utilizarea asistentului (Wizard) (Figura 4).
Open (deschide) apare o fereastr din care se alege tipul fiierului, directorul i numele, cu

opiunile New, Open, Cancel.


Close nchide fiierul deschis. Save/Save As salvare, respectiv salvare cu redenumire. Import/Export permite importul respectiv exportul de date cu alte sisteme de gestiune a bazelor

de date.
Print Preview vizualizare nainte de ieire la imprimant. Print ieire la imprimant. Send trimite prin e-mail.

49
Exit ieire din program. Edit ofer faciliti de lucru obinuite ntr-o fereastr de editare de

Baze de date

texte (Figura 5):


Undo/Redo renu la ultima modificare n text / repet ultima aciune n

text.
Cut/Copy/Paste tiere, memorare n memoria tampon, copiere la o nou

locaie n fiier a unui text.


Clear tergere text. Select all selecteaz ntreg textul. Find/Find again/Replace caut/caut n continuare un ir de caractere

sau nlocuiete irul gsit cu un altul. Cutarea se poate face cu activarea/dezactivarea opiunii de difereniere ntre litere mari/litere mici. Fig. 5

View permite setarea unor parametri privind bara curent de instrumente de lucru. Format permite setarea unor parametri privind literele (Font), Tools permite apelul interfeelor i instrumentelor VFP. Program permite lansarea sau oprirea unuia din paii ce se parcurg la

spaierea etc.

execuia unui program VFP (Figura 6). Fig. 6


Do lanseaz n execuie un program. Cancel anuleaz execuia programului. Resume reia execuia programului. Suspend suspend execuia programului. Compile compileaz programul. Window permite setarea parametrilor ferestrei curente de lucru (inclusiv fereastra de comand). Help apeleaz instrumentele pentru autodocumentare.

Datele pot fi introduse n dou moduri, utiliznd fie tabele independente (File/New/Table) care nu aparin unei baze de date, fie crend o baz de date (File/New/Database), n care se pot introduce tabele existente sau se pot crea noi tabele.

4. Componentele funcionale ale sistemului Visual Relaiile ntre tabele se pot stabili n ambele cazuri. Exist trei tipuri de relaii ntre datele unor tabele: 1 1 , 1 n , m n . Deschiderea unei tabele individuale, cu secvena File/Open/Table/nume_tabel nu duce automat la afiarea coninutului acesteia n spaiul de lucru. Pentru aceasta trebuie activat icon-ul care corespunde opiunii Data Session, care va afia ntr-o fereastr o serie de opiuni legate de tabel (Figura 7):
Properties pentru modificarea/consultarea structurii tabelei (nume, tip, poziie cmp). Browse pentru afiare date/nume cmpuri. Open pentru deschidere altor tabele. Close nchidere fiier selectat. Relation stabilirea relaiilor ntre tabele independente, deschise n sesiunea curent.

50

Fig. 7

Fig. 8

La alegerea opiunii Browse (rsfoire), fie din meniul View fie din fereastra Data Session, va apare meniul Table n bara de meniuri cu urmtoarele subopiuni (Figura 8):
Go to Record regsirea unei nregistrri dup diferii parametri: numr nregistrare, deplasare la

nceputul/sfritul tabelei, localizare nregistrare dup valoarea unui cmp etc.


Append New Record adgarea unei noi nregistrri. Append Records adugarea de noi nregistrri dintr-un alt fiier Delete Records marcare pentru tergere (la nivel logic). Recall Records anularea marcrii pentru tergere. Remove Deleted Records tergerea definitiv din tabel a nregistrrilor marcate (la nivel fizic). Replace Field actualizarea cmpului unei nregistrri (schimbarea valorii cmpului).

51
Size Field modificarea limii de afiare a cmpului n browser. Move Field schimbarea poziiei de afiare a cmpului n browser.

Baze de date

n cazul n care se construiete o aplicaie n care va fi folosit o gam larg de obiecte din VFP, (baze de date, tabele independente, cereri, videoformate, rapoarte, etichete, programe surs, clase de obiecte, meniuri utilizator, iconu-uri etc.) se va construi un proiect (Project), n seciunile cruia se pot declara aceste obiecte (Figura 9). ntreg proiectul se va finaliza ntr-un program executabil care va conine toate obiectele declarate ca fiind utilizate n aplicaie. Pentru a realiza proiectul n form executabil, n prealabil se folosete opiunea Build, pentru a realiza compilarea i link-editarea (12.2.2.).

Fig. 9

4. Componentele funcionale ale sistemului Visual


4.3.2. Modul de lucru prin comenzi

52

Activitatea n acest mod de lucru se desfoar n fereastra de comand din ecranul principal al VFP (Command). Aici se gsete poziionat cursorul i utilizatorul poate lucra n stil interpretor sau compilator.

53

Baze de date

5. Organizarea datelor nVisual FoxPro


5.1. Manipularea bazei de date i a tabelelor n VFP
Manipularea presupune urmtoarele operaii care pot fi executate fie n modul asistat, fie n modul comand, fie n modul procedural:

Crearea bazei de date/tabelei Deschiderea bazei de date/tabelei. Deschiderea unei tabele presupune rezervarea n memoria

intern a calculatorului a unei zone, numit zon de lucru, n care VFP va memora toate informaiile necesare utilizrii acestei tabele (structur, numr de nregistrri etc). ntr-o zon de lucru, la un moment dat, este deschis o singur tabel, iar simultan pot fi deschise 32767 tabele. Identificarea zonelor de lucru de face printr-un numr natural cuprins ntre 1 i 32767, iar primele 10 zone i prin litere, A-J. La lansarea sistemului VFP, automat este selectat zona de lucru A (sau 1). Cu comanda SELECT litera|cifra se poate selecta o alt zon de lucru.

Efectuarea operaiilor de consultare, actualizare (adgare, modificare, tergere) asupra bazei de nchiderea bazei de date/tabelei
5.1.1. Crearea bazei de date

date/tabelei

Sistemul VFP permite crearea unei baze de date i introducerea tabelelor care vor face parte din baza de date:

definirea structurii acestora; crearea fiierului (fiierelor) n care se pot stoca datele; stabilirea relaiilor ntre tabelele bazei de date,
Crearea se face o singur dat, nainte de utilizare. Secvenele din linia de comand care apar ntre paranteze drepte au semnificaia de element opional. Crearea unei baze de date se face cu comanda:

Not

CREATE DATABASE [<nume_baz_de_date>]?

5. Organizarea datelor nVisual FoxPro

54

nume_baz_de_date specific numele bazei de date care va fi creat.


? afieaz o fereastr de dialog pentru specificarea numelui bazei de date. Fiierul corespunztor bazei de date are extensia .DBC. La crearea bazei de date se face automat i deschiderea ei. Adugarea unei tabele n baza de date se face cu comanda ADD TABLE sau folosind bara de instrumente DATABASE DESIGNER.
5.1.2. Crearea tabelelor

Crearea tabelelor se realizaz n funcie de modul de lucru, astfel: 1.

modul asistat se utilizeaz secvena de adresare a meniului sistem: File/New se alege

opiunea Table din fereastra de dialog i se apas butonul New. Aceast secven are ca efect apariia unei ferestre de dialog Create, n care se specific discul logic, directorul i numele tabelei care va fi creat. Deplasarea pn la poziia dorit n fereastr, se face utiliznd tasta [TAB] sau mouse-ul. Dup introducerea numelui tabelei se apas butonul Save (fiierul va fi salvat cu extensia .DBF) i se afieaz o nou fereastr Table Designer. n acest fereastr, se selecteaz opiunea Fields afiat sus, utilizatorul trebuie s introduc structura tabelei. Fereastra conine urmtoarele cmpuri de preluare a informaiilor structurale: Name, Type,
Width, Dec, Index, NULL i patru butoane pentru opiunile: OK, Cancel, Insert, Delete. Sub Name se tasteaz numele cmpului, format din maxim 10 caractere, ncepnd cu o liter, iar sub Type se declar tipul cmpului nou creat sau se alege o opiune din meniul pop-up afiat.

Cmpul poate fi de tip:

caracter admite un ir de maxim 254 caractere (caractere alfanumerice i spaii goale); numeric admite maxim 20 de caractere, numere, caracterele +/-, punctul zecimal; logic admite maxim un caracter (T sau Y, F sau N); dat admite maxim 8 caractere i are formatul implicit ll/zz/aa. Formatul poate fi schimbat

cu comanda SET DATE TO ( de exemplu BRITISH i are ca efect schimbarea n formatul

zz/ll/aa); memo admite implicit 10 caractere, ns sistemul poate stoca blocuri mari de text pentru
fiecare nregistrare. Dimensiunea blocurilor de text este limitat de spaiul pe hard disk. Tabelele care au declarate n structur cmpuri de tip memo sunt stocate sub forma a dou fiiere, unul cu extensia .DBF i cellalt cu extensia .FTP n care se salveaz cmpurile memo ale tabelei.

general se folosete pentru memorarea elementelor de tip OLE (Object Linking and

Embededing), texte, foi de calcul tabelar (Excel), imagini, sunete etc.

55

Baze de date

Not: Introducerea datelor n cmpurile memo i general este diferit de introducerea datelor n

alte cmpuri. Se poziioneaz cursorul pe cmpul memo, se apas simultan tastele [Ctrl]+[PgDown] i apare o fereastr cu acelai nume ca al cmpului memo n care poate fi introdus textul. Textele introduse se salveaz apsnd tastele [Ctrl]+[W], fereastra memo se nchide i cursorul revine n fereastra de adugare a datelor. Cu [Ctrl]+[Esc] se iese din fereastra memo fr salvarea datelor introduse n fiierul memo.
Width opiune care specific numrul maxim de poziii ale cmpului. Dec specific mrimea prii zecimale, n cazul cmpurilor numerice. Index specific dac atributul (cmpul) respectiv este index (ascendent/descendent) sau nu

(8.2.).
NULL specific dac atributul respectiv admite sau nu valori de tip NULL (cu semnificaia unor

date lips sau inaplicabile). Dac se dorete schimbarea poziiei unui cmp n structur, se apas tasta [Tab] pn cnd cursorul se pozioneaz pe cmpul respectiv i se apas simultan tastele [Ctrl] + [PgDown], [Ctrl] + [PageUp]. Aceasta va avea ca efect deplasarea cmpului selectat cu o poziie n jos, sau n sus. Operaia se poate efectua i cu mouse-ul: se selecteaz rndul care conine cmpul a crei poziie se modific, cursorul de poziie se mut pe acest rnd; innd apsat butonul stng de la mouse pe cursor i deplasnd mouse-ul sus/jos se va muta cmpul selectat, n cadrul structurii generale. Butonul cu opiunea Insert se folosete pentru adugarea unui nou cmp. Butonul cu opiunea Delete se folosete pentru tergerea unui cmp (cel marcat de cursor). Butonul Cancel anuleaz modificrile fcute, iar butonul OK valideaz modificrile (sau folosind combinaia de taste [Ctrl] +[Enter]). Dup ce structura este salvat, fiierul fiind nou creat, apare un mesaj: Input data records now? (Y/N)_ Dac se rspunde cu Y este afiat un ecran n care se introduc datele n ordinea stabilit n structur.
5.1.3. Validarea cmpurilor unei nregistrri la introducere

5. Organizarea datelor nVisual FoxPro n exemplul care urmeaz se creaz o baz nou de date GESTIUNE.DBC (dbc - data base container), Figura 10, care va conine tabelele: FURNIZOR.DBF i MATERIALE.DBF cu urmtoarele cmpuri:

56

FURNIZOR.DBF

MATERIALE.DBF

Cod_furn Denumire Adresa Cod_mat Cant Data_livr

N(5) C(20) Memo N(5) N(7) D

Cod_mat Denumire Data_exp UM PU

N(5) C(20) D C(5) N(5)

Dup definirea structurii nregistrrilor n tabela FURNIZOR.DBF se selectraz cmpul

cod_furn i se completeaz cele trei cmpuri Rule, Message, Default value (Figura 11), astfel:
la opiunea Rule se introduce condiia logic de filtrare pentru acceptarea valorii nscrise n cmp. n acest caz se consider c pentru cmpul cod_furn valorile acceptate sunt ntre 1 i 5000. Condiia este:

cod_furn<=5000 and cod_furn>=1


la opiunea Message se introduce ntre apostrof mesajul: Cod furnizor eronat ! la opiune Default Value se introduce valoarea 1. Dac se omite declararea unei valori implicite, la introducerea datelor pentru cmpul cod_furn, se va afia mesajul de eroare la orice ncercare de introducere a datelor.

57

Baze de date

Fig. 10

Fig. 11

Dup definirea structurii nregistrrilor n tabela MATERIALE.DBF se selectraz cmpul um i se completeaz cele trei cmpuri Rule, Message, Default Value (Figura 12), astfel: la opiunea Rule se introduce condiia logic de filtrare pentru acceptarea valorii nscrise n cmp. n acest caz se consider c pentru cmpul um valorile acceptate sunt doar trei: kg, ml,

buc. Condiia este: um=kg or um=ml or um=buc


la opiunea Message se introduce ntre apostrof mesajul: Eroare unitate de masura !! la opiune Default Value se introduce ntre apostrof valoarea buc. Dac nu se declar nimic, practic, nu se pot introduce datele la fel ca mai sus.

5. Organizarea datelor nVisual FoxPro

58

Fig. 12 2. modul comand: implic utilizarea comenzii CREATE TABLE din nucleul SQL: CREATE TABLE nume_tabel [FREE] (nume_cmp1 tip_cmp1 [ (lungime_cmp [,precizie] )] [,nume_cmp2] .............. ) unde: - nume_tabel numele tabelei create; - FREE specific c tabela nu va fi adugat la baza de date deschis; - nume_cmp1 tip_cmp1 (lungime_cmp ,precizie) specific numele cmpului 1, tipul cmpului 1, - lungimea maxim i numrul de zecimale pentru cmpurile numerice. O tabel poate conine pn la 255 de cmpuri. Dac unul sau mai multe cmpuri accept i valoarea NULL atunci numrul de cmpuri se reduce cu 1 (254). Tipul cmpului se declar cu una din urmtoarele litere:

Tip_cmp Lungime_cmp Precizie Descriere

cmp tip caracter de lungime n

59

Baze de date

D T N F I B Y L M G

cmp de tip dat calendaristic cmp de tip timp (hh/mm/ss) cmp numeric de lungime n cu d zecimale cmp numeric n virgul mobil de lungime n cu d zecimale cmp numeric ntreg cmp numeric dubl precizie moneda cmp de tip logic cmp de tip memo cmp de tip general

n n

d d
d

Exemplu. Folosind modul comand se creaz o tabel cu evidena studenilor, cu numele ESTUD,

cu urmtoarele cmpuri: - numr matricol: MATR de tip numeric, lungime maxim 5 - nume i prenume: NUME de tip caracter, lungime maxim 40 - adres: ADRESA de tip caracter, lungime maxim 30 - anul de studii: ANS de tip numeric, lungime maxim 1 - anul intrrii n facultate: ANIF de tip numeric, lungime maxim 4 - data naterii: DATAN de tip dat. Comanda: CREATE TABLE ESTUD (MATR N(5), NUME C(40), ADRESA C(30), ANS N(1), ANIF N(4), DATAN D) Alte comenzi utilizate n crearea tabelelor Pentru crearea unei tabele se pot utiliza i comenzile COPY STRUCTURE EXTENDED TO sau CREATE ... FROM ...cu sintaxa COPY STRUCTURE EXTENDED TO <nume_tabel> [FIELDS<list_cmpuri>] [DATABASES <nume_baz_de_date> [NAME] <b_nume_tabel>]

5. Organizarea datelor nVisual FoxPro unde: - nume_tabel numele tabelei nou create; - FIELDS <list_cmpuri> specific cmpurile care urmeaz s apar n noua tabel. Dac nu se specific nimic, implicit sunt luate toate cmpurile din tabel surs; - DATABASE <nume_baz_de_date> numele unei bazei de date existente la care va fi adgat noua tabel; - NAME <b_nume_tabel> specific numele tabelei aa cum apare n baza de date. Fiierul de structur creat are urmtoarele cmpuri: FIELD_NAME cmpul nume (10 caractere) FIELD_TYPE FIELD_LEN FIELD_DEC cmpul tip (maxim 1 caracter): C, N, F, D, L, M, G lungimea cmpului (maxim 3 caractere) numr de zecimale admis (maxim 3 caractere)

60

Comanda CREATE... FROM...creaz o tabel dintr-un fiier de structur (realizat cu comanda anterioar COPY STRUCTURE EXTENDED TO...). Sintaxa comenzii: CREATE [<nume_tabela_1>] FROM <nume_tabela_2>

nume_tabela_1 numele tabelei care va fi creat; nume_tabela_2 numele fiierului care conine structura care va fi utilizat la creare.
Exemplu. Folosind tabela creat anterior (ESTUD), s se realizeze o nou tabel (ESTUD1), care

s conin suplimentar un cmp numeric (lungimea maxim 5 caractere, din care 2 la partea zecimal) cu media de la bacalaureat (MBAC). Secvena de comenzi: SELECT 2 USE ESTUD COPY STRUCTURE EXTENDED TO TEMP USE TEMP APPEND BLANK REPLACE FIELD_NAME WITH MBAC REPLACE FIELD_TYPE WITH N && tip numeric && se deschide tabela TEMP && se adaug o nregistrare goal && se adaug un nou cmp MBAC && selecteaz zona de lucru 2 && se deschide tabela ESTUD n zona de lucru 2 && copiaz structura tabelei ESTUD n fiierul TEMP

61 REPLACE FIELD_LEN WITH 5 REPLACE FIELD_DEC WITH 2 && de lungime maxim 5 poziii && 2 poziii pentru partea zecimal

Baze de date

&& la fiecare REPLACE se afieaz mesajul 1 replacements CREATE ESTUD1 FROM TEMP USE ESTUD1 APPEND FROM ESTUD BROWSE CLOSE DATABASES DELETE FILE TEMP.DBF && se creaz tabela ESTUD1 cu structura dat de fiierul TEMP && se deschide tabela ESTUD1 && se adaug nregistrrile din tabela iniial ESTUD && afiarea coninutului tabelei ESTUD1 n browser && se nchid toate tabelele && terge fiierul TEMP.DBF

5.2. Deschiderea bazei de date/tabelei


Deschiderea bazei de date se face cu comanda: OPEN DATABASE [<nume_bd>] [EXCLUSIVE | SHARED] [NOUPDATE] unde:

nume_bd numele bazei de date care trebuie deschis;


EXCLUSIVE ali utilizatori nu pot s acceseze aceast baz de date; SHARED deschide baza de date n modul partajat, ceilali utilizatori au acces; NOUPDATE specific faptul c nu se pot face schimbri n baza de date (deschis doar pentru citire). Comanda pentru deschiderea unei tabele ntr-o zon de lucru: USE <nume_fiier> IN <nr_zon_de_lucru> INDEX <list_fiiere_index> ALIAS <alias_tabel> [EXCLUSIVE | SHARED] [NOUPDATE] unde:

nume_fiier numele tabelei pe care vrem s o deschidem. nr_zon_de_lucru numrul zonei de lucru asociate la deschiderea tabelei (numere 0, 1, 2.. sau
litere A, B...). INDEX <list_fiiere_index> - specific un set de indeci care se deschid odat cu tabela. Dac tabela are un fiier de index structural compus, fiierul de index este deschis automat odat cu

5. Organizarea datelor nVisual FoxPro fiierul. Lista de fiiere index conine orice fel de nume de fiier de index, simplu (.IDX) sau nestructural compus (.CDX), separate prin virgul, fr specificarea extensiei. Primul fiier de index din list este cel care controleaz accesarea i afiarea datelor din tabel (8.2.). ALIAS <alias_tabel> - creaz un nou nume pentru tabel, diferit de numele extern. Referirea la fiier se poate face prin intermediul alias-ului, n funcii sau comenzi care cer sau suport alias-ul. Specificarea zonei de lucru poate fi fcut i separat asociind comanda SELECT la comanda USE. SELECT <nr_zon_de_lucru> | <nume_alias> USE <nume_fiier>
Not

62

Semnul | n sintaxa unei comenzi marcheaz alternana unor clauze care se exclud.

n modul asistat, deschiderea se face utiliznd meniul File/Open, se selecteaz Database sau
Table din meniul pop-up afiat i se specific discul logic, subdirectorul i numele bazei de date sau

tabelei, precum i modul de deschidere (se bifeaz sau nu, opiunea Exclusive). Cnd toate aceste informaii sunt specificate se apas butonul OK. Dup operaia de deschidere n meniul View avem subopiunile Browse (vizualizare coninut),
Database Designer (proiectantul pentru baza de date), Table Designer (proiectantul pentru tabele).

Se pot face consultri cu Browse, modificri ale structurii cu Database Designer (adugare, eliminare de tabele din baz, stabilirea/anularea relaiilor ntre tabele) sau Table Designer (actualizare cmpuri).

5.3. Consultarea i modificarea bazei de date/tabelei


5.3.1. Modificarea structurii de date a tabelelor n modul asistat

Modificarea structurii logice a unei tabele se poate face fie cu ajutorul comenzii MODIFY STRUCTURE, din fereastra de comand, fie activnd butonul Data Session din bara de instrumente

63

Baze de date

n primul caz, dup lansarea comenzii MODIFY STRUCTURE, se va afia fereastra de dialog
Open. Cu ajutorul sgeilor direcionale se poziioneaz cursorul pe tabela dorit a fi modificat. Se

apas tasta [Enter] i va aprea fereastra de dialog Structure, utilizat i la definirea structurii tabelelor. n cel de al doilea caz, din fereastra Data Session se alege opiunea Open, care deschide fereastra de selectare a discului logic, a subdirectorului i a numelui de fiier. Se selecteaz fiierul i se apas butonul OK. n fereastra Data Session va fi afiat numele tabelei deschise. Pot fi deschise mai multe tabele simultan, numele lor fiind afiat n fereastra Data Session. Se alege opiunea Properties care va activa fereastra de dialog Structure. n ambele cazuri operaia Open se va face cu opiunea Exclusive pentru a putea face modificri. n fereastra Structure, poziionarea cursorului se face apsnd tasta [Tab] pentru deplasare nainte sau [Shift] + [Tab] pentru deplasare napoi, n zona ce cuprinde descrierea structurii, unde vrem s inserm un nou cmp. n partea dreapt a ferestrei vor fi active opiunile Insert, Delete (adgare/tergere). Se apas tasta [Insert] sau butonul cu opiunea Insert i va fi afiat urmtoarea linie:
New field character 10

Cmpurile ce urmeaz vor fi mpinse cu un rnd n jos. Se introduce numele cmpului n prima csu, se alege tipul i lungimea maxim din meniurile pop-up. Pentru tergere se poziioneaz cursorul pe cmpul respectiv i se apas tasta [Delete] sau se folosete butonul cu opiunea Delete]. Salvarea modificrilor se face selectnd opiunea OK (buton), sistemul afind urmtorul mesaj: Make structure changes permanent ?
YES NO

Opiunea YES salveaz noua structur a tabelei, fereastra de dialog Structure se nchide i controlul (cursorul) trece n fereastra de comand.
Not

Modificarea structurii tabelelor se poate face i cu comanda ALTER TABLE din nucleul SQL.

La alegerea opiunii Browse (rsfoire), fie din meniul View fie din fereastra Data Session, va apare opiunea Table n bara de meniuri cu urmtoarele subopiuni:

5. Organizarea datelor nVisual FoxPro


Go to Record regsirea unei nregistrri dup diferii parametri: numr articol, deplasare la

64

nceputul/sfritul tabelei, localizare nregistrare dup valoarea unui cmp etc.


Append New Record adgarea unei noi nregistrri. Append Records adugarea de noi nregistrri dintr-un alt fiier Delete Records marcare pentru tergere (la nivel logic). Recall Records anularea marcrii pentru tergere. Remove Deleted Records tergerea definitiv din tabel a nregistrrilor marcate (la nivel fizic). Replace Field actualizare cmp nregistrare (schimbarea valorii cmpului). Size Field modificarea limii de afiare a cmpului n browser. Move Field schimbarea poziiei de afiare a cmpului n browser.

Vizualizarea datelor cu opiunea Browse, se face ntr-o fereastr de tip Windows care cuprinde o tabel, coloanele reprezentnd cmpurile, iar liniile reprezentnd nregistrrile. Trecerea de la un cmp la altul se face apsnd tasta [Tab] (nainte), [Shift] + [Tab] (napoi); pe vertical deplasarea se face cu sgeile [Sageata sus], [Sageata jos]. nchiderea ferestrei Browse se face apsnd simultan tastele [Ctrl] + [End].
5.3.2. Deplasri n tabel. Cutri secveniale

Odat cu deschiderea tabelei, acesteia i se asociaz o locaie de memorie n care este stocat numrul nregistrrii curente (pointer-ul de nregistrare). Exist 2 tipuri de deplasri:

criteriul utilizat este numrul nregistrrii, care se realizeaz utiliznd din submeniul Go to
Record subopiunile: Top, Bottom, Next, Previous, Record n (prima nregistrare, ultima

nregistrare, urmtoarea nregistrare, nregistrarea anterioar, la nregistrarea n).

criteriul utilizat se obine pe baza specificrii unei condiii de tip For sau While aplicat unui cmp. Se utilizez opiunea Locate din submeniul Go to Record.

Pentru a modifica o nregistrare din tabel se alege opiunea Browse i apoi din meniul Table, subopiunea Replace Field din meniul sistem. Apare o fereastr de dialog (Replace Field) cu urmtoarele specificaii:
Field - numele cmpului ale crui valori vrem s le modificm; With noua valoare.

65

Baze de date

Scope domeniul (Next n, All, Record n, Rest): toate nregistrrile, urmtoarele n nregistrri,

numai pentru nregistrarea n, restul nregistrrilor inclusiv cea curent pe care este poziionat cursorul.
For / While vor fi modificate doar nregistrrile care satisfac condiia. For este o condiie

construit cu Expression Builder (constructorul de expresii) i vor fi modificate acele nregistrri care au valoarea True pentru expresia dat. Clauza While este de asemenea o expresie logic i nregistrrile selectate trebuie s verifice condiia pentru a se realiza modificarea.

Constructorul de expresii are o regiune de editare n care vor fi introduse condiiile, manual sau asistat de calculator. Prin apsarea butonului Replace are loc operaia de modificare.

5.4. nchiderea bazei de date/tabelei


Cu comanda CLOSE se nchid diferite tipuri de fiiere: CLOSE DATABASES [ALL] nchide baza de date curent i tabelele sale. Dac nu este deschis nici o baz de date, vor fi nchise toate tabelele libere, fiierele de index, din toate zonele de lucru i se va selecta zona de lucru 1. Clauza ALL specific c vor fi nchise toate bazele de date i tabelele lor, toate tabelele libere i toate fiierele de index. CLOSE INDEX nchide toate fiierele de index pentru zona de lucru curent (fiiere .IDX i nestructurale .CDX). Un fiier de index structural (.CDX, compus care se deschide automat cu tabela) nu va fi nchis. CLOSE ALL nchide toate bazele de date i tabelele lor, toate tabelele libere, toate fiierele de index din toate zonele de lucru i se selecteaz zona de lucru 1. Comanda nu va nchide fereastra de comenzi, fereastra Help, fereastra Debug.

5. Organizarea datelor nVisual FoxPro CLOSE TABLES [ALL] nchide toate tabelele din baza de date curent, sau toate tabelele libere din toate zonele de lucru dac nu exist o baz de date deschis. Includerea clauzei ALL nchide toate tabelele din toate bazele de date i tabelele libere, dar bazele de date rmn deschise.

66

67

Baze de date

6. Utilizarea asistentului Wizard n VFP


VFP este nsoit de peste 20 de programe de tip Wizard, care asigur funcia de proiectare asistat de calculator. Acestea sunt programe interactive care ajut la crearea de videoformate, interogri/cereri (Query), importarea i redimensionarea datelor, grafice, rapoarte cu date din diferite tabele, baze de date, tabele, etichete, viziuni, kit-uri de instalare, documentaie, aplicaii, documente pentru pagini de WEB. Programul Wizard are forma unei serii de ecrane, n care utilizatorul rspunde la ntrebri sau alege o serie de opiuni, n urma crora se va realiza o operaie sau se va genera un fiier. Lansarea programului Wizard se poate face: Cnd: se alege opiunea New din meniul sistem File sau selectnd submeniului Wizards din meniul sistem Tools.

6.1. Table Wizard


Creaz tabele bazate pe structura tipic a tabelelor. Asistentul pentru tabele pune la dispoziia utilizatorului modele de tabele, acesta alegnd pe cel care rspunde necesitilor sale. Se poate modifica structura tabelelor i cmpurilor, fie n derularea etapelor din Wizard sau mai trziu dup ce asistentul a salvat fiierul. Dac sunt deschise una sau mai multe baze de date, asistentul adaug automat noua tabel la baza curent. Dac nu este deschis nici o baz de date asistentul creaz tabele libere (free tables). Lansarea asistentului se face din submeniul Wizards din meniul sistem Tools, opiunea Table: n urmtorii pai pasul 1 selectarea cmpurilor: din fereastra Sample tables se pot alege una sau mai multe tabele prin opiunea Add. Pentru fiecare tabel sunt afiate cmpurile disponibile (Available
Fields) care pot fi adugate n selecia cmpurilor utilizatorului (Selected Fields) folosind

butoanele: cmpul selectat

- adaug cmpul selectat,

- adaug toate cmpurile tabelei,

- elimin

- elimin toate cmpurile selectate.

pasul 2 selectarea unei baze de date: tabela creat poate fi de sine stttoare sau poate fi adugat la o baz de date. Dac se creaz tabela ntr-o baz de date asistentul va furniza opiunile de formatare n pasul urmtor. pasul 3 modificarea setrilor cmpurilor: se pot schimba setrile cmpurilor pentru tabela creat. De exemplu, se poate modifica lungimea maxim a unui cmp de tip caracter. pasul 4 indexarea tabelei : se selecteaz cmpul care va fi cheie primar de indexare n noua tabel. Se pot desemna de asemenea alte cmpuri drept chei secundare.

6. Utilizarea asistentului Wizard n VFP pasul 5 setarea relaiilor: dac tabela aparine unei baze de date, se pot stabili relaiile ntre cmpuri, ntre tabela nou creat i tabelele existente n baz. Pentru definirea relaiei se face click cu mouse-ul pe butonul radio care identific tipul relaiei, se selecteaz cmpul care se leag n baza de date (dac se selecteaz New Field, se va tipri numele) i operaia se termin cu click pe butonul
OK.

68

pasul 6 terminare (butonul Finish): noua tabel va fi afiat ntr-o fereastr de tip Browse. Se poate alege opiunea Append New Record din meniul sistem Table, pentru a aduga nregistrri noi n tabel. Dup salvarea fiierului, acesta poate fi deschis mai trziu pentru a modifica structura cu aplicaia Table Designer.

6.2. Form Wizard


Form Wizard creaz un videoformat pentru date extrase dintr-o singur tabel. Lansarea

asistentului se face utiliznd meniul sistem Tools, submeniul Wizard, opiunea Form, n urmtorii pai: pasul 1 selectarea cmpurilor: se face pe baza opiunilor utilizatorului exprimate n trei ferestre: Databases and Tables, Available Fields, Selected Fields, la fel ca n cazul Wizard
Table.

pasul 2 selectarea stilui videoformatului specific stilul controalelor din videoformat. n fereastra Style este afiat o list cu tipurile de videoformate: Standard, Chiseled, Shadowed,
Boxed, Embossed, Fancy etc. Se poate alege din panoul cu butoane radio (Button Type) tipul

butoanelor utilizate: Text Buttons, Picture Buttons, No Buttons, Custom Bbuttons. Tipul de butoane ales va genera n videoformat, butoane pentru navigare n fiier (Top, Previous, Next,
Bottom), Find (afieaz cutia de dialog Search - caut), Print (tiprete un raport), Add (adaug o

nou nregistrare), Delete (terge nregistrarea curent), Exit (nchide videoformatul). pasul 3 sortarea nregistrrilor: se vor selecta acele cmpuri care dorim s fie sortate. Se poate alege de asemenea o etichet (intrare) pentru un index (TAG). pasul 4 terminare (butonul Finish): dac s-a ales un numr mare de cmpuri la pasul 1 i pentru a fi siguri c toate cmpurile vor ncpea n videoformat se poate alege opiunea Add pages
for fields that do not fit. n caz contrar, dac numrul cmpurilor depete dimensiunea

videoformatului, VFP va afia formatul cu bare de deplasare (Scroll Bars). Videoformatul poate fi vizualizat nainte de salvare cu opiunea Preview. Dup salvarea videoformatului, acesta poate fi deschis mai trziu i modificat cu aplicaia Form Designer.

69

Baze de date

6.3. Report Wizard


Creaz rapoarte utiliznd o singur tabel liber sau o viziune ntr-o baz de date. Asistentul pune ntrebri ntr-o succesiune de pai, prin care se specific sursa i cmpurile ce vor fi utilizate pentru a crea controalele raportului. Pentru lansarea asistentului, se alege din meniul sistem Tools, submeniul Wizard, opiunea Report. Din caseta de dialog Wizard Selection se alege Report
Wizard i se urmeaz paii:

pasul 1 selectarea cmpurilor: se introduc opiunile n cele trei ferestre de dialog: Databases
and Tables, Available Fields, Selected Fields. Selecia poate fi fcut dintr-o tabel sau o viziune.

pasul 2 gruparea nregistrrilor: se poate folosi gruparea datelor pentru a mpri pe categorii i a sorta nregistrrile, pentru a fi mai uor de citit (de exemplu situaia ncasrii impozitelor pe familie, pe sectoare i centralizat pe municipiu). Dup alegerea unui cmp n csua Group by, se pot alege opiunile Grouping Options i Summary Option pentru a mbuntii selecia. Alegnd
Grouping Options se va deschide caseta de dialog Grouping Intervals care permite selectarea

nivelurilor de filtrare relevante pentru tipul de date coninute n cmpurile selectate pentru grupare. Alegnd Summary Options se deschide o cutie de dialog n care utilizatorul poate specifica tipul de calcul care se va aplica unui cmp numeric:
Tipuri de calcul Rezultat

SUM AVG COUNT MIN MAX

Suma valorilor din cmpul numeric specificat Media valorilor din cmpul numeric specificat Numrarea nregistrrilor care conin valori non-NULL din cmpul specificat Valoarea minim n cmpul numeric specificat Valoarea maxim n cmpul numeric specificat

Se pot alege de asemenea opiunile Summary only sau No Totals pentru raport. Cmpurile care sunt selectate pentru grupare nu vor fi disponibile la pasul 3. pasul 3 alegerea stilului pentru raport : sunt disponibile urmtoarele stiluri: Executive,
Ledger, Presentation, Banded, Casual, asistentul prezentnd ntr-un grafic, sub o lup, un

exemplu al stilului ales. pasul 4 definirea formatului raportului: cnd se specific un numr de coloane sau se selecteaz una din opiunile pentru format, asistentul prezint ntr-un grafic, sub o lup, un exemplu.

6. Utilizarea asistentului Wizard n VFP Dac s-a fcut opiunea de grupare la pasul 2, opiunile Columns i Field Layout nu mai sunt disponibile. pasul 5 sortarea nregistrrilor: se pot selecta unul sau mai multe cmpuri sau o etichet de index (TAG) n ordinea n care se dorete s se sorteze nregistrrile (ascendent, descendent). pasul 6 terminare (butonul Finish): dac numrul cmpurilor selectate nu ncap pe o singur linie pe limea paginii de raport, acest cmp va fi nglobat pe linia urmtoare. Dac nu vrem s fie nglobat cmpul pe linia urmtoare, se deselecteaz opiunea Wrap fields that do not fit. Cu butonul Preview se poate vizualiza raportul fr a prsi asistentul. Dup salvarea raportului, acesta poate fi deschis ulterior i modificat cu aplicaia Report Designer.

70

6.4. Label Wizard


Acesta este asistentul pentru generarea etichetelor cu date preluate dintr-o tabel. Pentru lansarea asistentului se alege din meniul sistem Tools, submeniul Wizard, opiunea Label i se urmresc paii: pasul 1 selectarea tabelelor: se selecteaz o tabel sau o viziune. pasul 2 alegerea tipului de etichet: asistentul ofer o list cu tipurile de etichete standard care sunt instalate odat cu VFP. Asistentul afieaz de asemenea lista cu tipurile de etichete care au fost create de utilizator, prin folosirea aplicaiei AddLabel. pasul 3 - definirea formei etichetei: se adaug cmpurile n ordinea n care trebuie s apar pe etichet. Se pot folosi semne de punctuaie, spaii, pentru a formata eticheta. Se folosete csua
Text pentru a adga textul. Pe msur ce se adaug elemente n etichet, asistentul va arta

modificrile fcute. Utilizatorul poate verifica imaginea etichetei pentru a vedea dac cmpurile introduse se ncadreaz n dimensiuni. De asemenea, se poate folosi butonul Font pentru a schimba stilul i mrimea literelor folosite n etichet. pasul 4 sortarea nregistrrilor: se selecteaz cmpurile sau etichetele de index (TAG) n ordinea n care dorete s sorteze nregistrrile. pasul 5 terminare (butonul Finish): utilizatorul poate activa opiunea Preview pentru a verifica restriciile impuse, nainte de terminare. Dup salvarea etichetei, aceasta poate fi deschis i modificat cu aplicaia Label Designer.

6.5. Query Wizard

71

Baze de date

Asistentul de interogare, care pe baza tabelelor sau viziunilor selectate pentru a furniza informaii, extrage nregistrrile care ndeplinesc criteriile de filtrare i direcioneaz rezultatele ctre tipul de ieire specificat: fereastr Browse, raport, tabel, etichet etc. Pentru lansarea asistentului se alege din meniul sistem Tools, submeniul Wizard, opiunea Query Wizard i se urmresc paii: pasul 1 selectarea cmpurilor: se pot selecta cmpuri din diferite tabele sau viziuni. Mai nti se selecteaz cmpurile dintr-o tabel sau viziune, se mut n csua Selected fields, utiliznd butoanele de adugare; apoi se selecteaz cmpurile din alt tabel sau viziune etc. pasul 2 stabilirea relaiilor ntre tabele: utilizatorul poate selecta cmpurile comune mai multor fiiere din lista afiat, pentru a stabili relaiile ntre tabele sau viziuni. pasul 3 includerea nregistrrilor: se poate limita interogarea (Query) alegnd din dou tabele, numai liniile care coincid, sau toate liniile dintr-unul din tabele. Implicit numai nregistrrile care coincid sunt incluse. Dac se dorete crearea unei jonciuni interne se selecteaz opiunea Only
matching row (numai nregistrrile care coincid). Dac se dorete crearea unei jonciuni externe, se

selecteaz toate nregistrrile din unul din cele dou tabele. pasul 4 filtrarea nregistrrilor: se poate reduce numrul nregistrrilor selectate n interogare, prin crearea de expresii logice care s filtreze nregistrrile din tabelele sau viziunile alese. Se pot crea dou expresii logice, legate cu operatorul And, care va permite selectarea numai a acelor nregistrri care satisfac ambele criterii. Utilizarea operatorului Or face ca n selecia nregistrrilor, s intre acelea care satisfac doar unul din criterii. Opiunea Preview permite vizualizarea nregistrrilor care vor fi incluse n interogare (Query), pe baza aplicrii criteriilor de filtrare. pasul 5 sortarea nregistrrilor: se pot selecta pn la 3 cmpuri (chei de sortare) sau o etichet de index (TAG) pentru a stabili ordinea n care rezultatele interogrii vor fi sortate (ascendent sau descendent). pasul 6 limitarea nregistrrilor: se poate limita suplimentar numrul de nregistrri n interogare, fie indicnd un procent de vizualizare din numrul de nregistrri cu valorile cele mai mari (sortare descendent) / mai mici (sortare ascendent), fie indicnd numrul de nregistrri cu valorile cele mai mari/mai mici, care vor fi afiate. De exemplu, pentru a vedea doar primele 10 nregistrri cu valoarea cea mai mare din interogare (sortare descendent), se introduce la opiunea
Number of records valoarea 10 n csua Portion value. Cu opiunea Preview se pot vizualiza

rezultatele interogrii pe baza restriciilor impuse. pasul 7 terminare (butonul Finish): dup ce interogarea a fost salvat, ea poate fi deschis ulterior, lansnd aplicaia Query Designer.

6. Utilizarea asistentului Wizard n VFP

72

6.6. Mail Merge Wizard


Acesta este asistentul pentru documente interclasate (fuziune / unire) de tip Word sau fiiere de tip text care sunt compatibile cu orice procesor de text. Pentru a executa aplicaia, trebuie s fie instalat o versiune Microsoft Word curent pecum i protocolul standard pentru servere baze de date, ODBC (Open Database Connectivty). ODBC se instaleaz pentru diferite tipuri de baze de date i va permite programului VFP 6.0 s se conecteze la baza de date i s acceseze datele. Pentru lansarea asistentului se alege din meniul sistem Tools, submeniul Wizard, opiunea Mail Merge i se continu cu paii: pasul 1 selectarea cmpurilor: se pot selecta cmpuri doar dintr-o singur tabel sau viziune. pasul 2 alegerea procesorului de text: trebuie s fie instalat o versiune curent de Microsoft Word n cazul n care se alege opiunea Microsoft Word. Dac se selecteaz opiunea Commadelimited text file, asistentul va sri peste paii 3 i 4 i va merge direct n ecranul de terminare.

pasul 3 selectarea tipului de document: se creaz un nou document sau se adaug date la un document existent. pasul 4 selectarea stiluilui documentului: se selecteaz unul din tipurile de fiiere pe care le recunoate editorul Word. Dac se creaz un document nou, se va specifica tipul documentului
Form Letter, Label, Envelope, Catalog.

pasul 5 terminare (butonul Finish): dac s-a selectat crearea unui document nou n Word, asistentul va deschide documentul n Microsoft Word. Dac s-a selectat opiunea de creare a unui fiier de tip text, asistentul l va salva. Introducerea unui cmp al bazei de date n documentul Word se face astfel:

se poziioneaz cursorul n locul din document unde se dorete inserarea cmpului;

pe bara de instrumente pentru interclasare din opiunea pop-up Insert Merge Field se alege numele cmpului ce trebuie inserat;

activnd opiunea

- View Merged Data (vizualizarea datelor care au fuzionat), se

poate vedea efectiv valoarea cmpului selectat pentru inserare. Butoanele pentru deplasare la nceputul / sfritul fiierului sau secvenial nainte / napoi, vor muta pointerul de fiier pe nregistrarea corespunztoare, afind noua valoare a cmpului, n documentul Word.

73

Baze de date

6.7. Editorul de texte n VFP 6.0


Mediul VFP 6.0 pune la dispoziia utilizatorului un editor de texte, pentru crearea fiierelor de tip text, aplicaie care se deschide ntr-o fereastr de tip Windows.
6.7.1. Lansarea editorului

Lansarea editorului se face fie cu una din comenzile: MODIFY FILE <nume_fiier> && modificare fiier de tip text; MODIFY COMMAND <nume_program> && modificare program surs. introduse n fereastra de comenzi, fie din meniul sistem se alege meniul File, submeniul New, opiunea Program / Text File. n editor se pot folosi pentru deplasare: tastele cu sgei direcionale,
[Page Up] - o pagin ecran n sus, [Page Down] - o pagin ecran n jos, [Home] - la nceputul

rndului, [End] - la sfritul rndului curent.


6.7.2. Lucrul cu blocul de linii din fiier

Asupra unei linii sau unui bloc de linii de text se pot executa urmtoarele operaii:

marcarea blocului se ine tasta [Shift] apsat i cu una din sgeile direcionale, sau tastele
[Home], [End], [Page Up], [Page Down] se marcheaz liniile de text (care vor apare n video-

invers).

copierea blocului de linii marcat n Clipboard se face:


folosind opiunea Cut din meniul Edit sau apsnd simultan tastele [Ctrl] + [X], textul selectat va fi ters din fiier; folosind combinaia de taste [Ctrl]+[C], caz n care textul rmne n fiier.

inserarea la o nou poziie n fiier a textului din Clipboard se face utiliznd opiunea Paste
din fereastra Edit sau combinaia de taste [Ctrl] + [V].

deselectarea unui bloc de linii se face fie apsnd una din sgeile direcionale sau butonul
stng de la mouse. Programele n VFP au ca regul general, scrierea instruciunilor pe o singur linie (255 caractere). Dac totui o instruciune trebuie sa fie scris pe mai multe rnduri, la sfritul fiecrei linii se pune un caracter de continuare ; .

7. Elemente ale limbajului propriu Visual FoxPro 6.0

74

7. Elemente ale limbajului propriu Visual FoxPro 6.0


7.1. Simboluri
Pentru scrierea comenzilor (instruciunilor) se folosesc:

literele alfabetului latin, litere mari / litere mici, compilatorul nefcnd diferen ntre cele cifrele 0..9; caractere speciale: +, -, *, /, (, ), <, >, =, &, @, !, , , #, $, %, ^, \, |, _, spaiu, ;, virgula, ?.

dou tipuri;

7.2. Variabile de sistem


Sunt variabile proprii sistemului, predefinite, la care utilizatorul are acces. Folosirea lor n program nu implic operaii de iniializare, incrementare. De exemplu, variabila _PAGENO=n conine numrul paginii n dintr-un raport, cu ajutorul ei putndu-se controla afiarea paginii n la monitor sau la imprimant.

7.3. Comentariul
Se folosete pentru a da lmuriri asupra a ceea ce face programul surs, explicaii asura aciunilor programului, numelor variabilelor etc, pentru a indicanceputul unei linii neexecutabile n program. Sunt admise pentru comentariere: caracterul * plasat la nceputul liniei va comentaria ntreagul rnd (fr spaiu de demarcare); caracterele && plasate la nceputul / sfritul liniei, cu cel puin un spaiu de demarcare fa de textul propriu-zis; cuvntul rezervat NOTE, pentru a comentaria mai multe rnduri de text, se introduce n continuare prima linie de comentariu (la distan de minim un spaiu), se marcheaz continuarea comentariului pe rndul urmtor cu caracterul punct i virgul (;), nchiderea comentariului se face cu caracterul punct.

7.4. Tipuri de date, operaii i funcii

75

Baze de date

Datele (variabile sau constante) utilizate n programare pot fi simple sau sub form de masiv de date (vectori, matrici, care presupun o ordonare a datelor dup un criteriu de poziie). La rndul lor aceste dou categorii pot fi alctuite din date de tip:

logic, care nu pot lua dect dou valori: .T. | .Y. (adevrat) i .F. | .N.(fals); numeric, numere ntregi sau fracionare; ir de caractere, reprezint o mulime ordonat de caractere, fiecare caracter avnd un
numr de ordine n ir, numerotarea ncepnd cu 1. irurile de caractere (constante) se scriu ntre apostrof sau ghilimele;

calendaristic, de exemplu 01/12/2007.

Se pot construi expresii, combinnd datele (operanzi) cu operaii specifice (operatori). Operatorii la rndul lor sunt de tip:

logic, lucreaz cu toate tipurile de date i returneaz o valoare logic (.T. / .F.)

Operator Aciune

Cod

() NOT, ! AND OR

gruparea expresiilor logice Cvar1 AND (Cvar2 AND Cvar3) negare logic I logic SAU logic IF NOT CvarA = CvarB sau IF ! Nvar1 = Nvar2

LvarX AND LvarY LvarX OR LvarY

unde Cvar variabil de tip caracter, Nvar variabil de tip numeric, Lvar variabil de tip logic.

relaional, lucreaz cu toate tipurile de date, expresia este evaluat i se returneaz o valoare
logic .T. / .F.(adevrat / fals).

Operator Aciune

Cod

< > = <>, #, !=

mai mic dect mai mare dect egal cu diferit de

? 23 < 54 ? 1 > 2 sau ?.t.>.f. ? cVar1 = cVar ? .T. <> .F.

7. Elemente ale limbajului propriu Visual FoxPro 6.0

76

<=

mai mic egal cu

? {^1998/02/16} <= {^1998/02/16}

>=

mai mare egal cu

? 32 >= n_ani

==

comparare iruri ? status == "Open" de caractere

n cazul variabilelor de tip caracter operatorii relaionali funcioneaz prin compararea codurilor ASCII corespunztoare caracterelor din cele dou iruri, comparaia fcndu-se caracter cu caracter, de la stnga la dreapta. Dac irurile care se compar nu au aceeai lungime, implicit se completeaz irul mai scurt cu codul ASCII pentru caracterul 0. Operaia de egalitate a dou iruri de caractere este controlat de comanda: SET EXACT ON|OFF prin clauza OFF, implicit, se consider c cele dou iruri sunt egale, n cazul cnd caracterele coincid pe lungimea celui mai scurt. prin clauza ON, egalitatea se verific pe lungimea irului mai lung, spaiile de la sfritul irurilor sunt ignorate.

numeric, lucreaz cu toate tipurile de date numerice.

Operator Aciune

Cod

() **, ^ *, / % +, -

gruparea subexpresiilor exponent (putere) nmulire, mprire

(4-3) * (12/Nvar2) ? 3 ** 2 sau ? 3 ^ 2 ? 2 * 7 sau ? 14 / 7

restul mpririi (modulo) ? 15 % 4 adunare, scdere ? 4 + 15

Ordinea operatorilor din tabel este cea folosit n matematic.

77

Baze de date

Operaia modulo (%) se mai poate executa apelnd funcia MOD(n1,n2) care va calcula restul mpririi numrului n1 la numrul n2.

caracter, care permite concatenarea, compararea datelor de tip ir de caracatere, utiliznd


urmtorii operatori:

Operator Aciune

Cod

Concatenare. Se unesc dou iruri de caractere, un ir i un


cmp dintr-o nregistrare sau un ir de caractere i o variabil

? 'Bun ' + 'ziua'

Concatenare. Se ndeprteaz spaiile goale de la sfritul


elementului care precede operatorul, apoi se unesc cele dou elemente.

? 'Bun ' + 'seara'

Comparare. Se caut un ir de caractere n interiorul altui ir


de caractere.

? 'punct' $ contrapunct' ? 'principal' $ clienti.adresa

7.4.1. Date de tip numeric. Funcii aritmetice i financiare

Expresiile de tip numeric pot fi:

cmpuri de tip numeric (N), ntreg (I), virgul mobil (F) dintr-o tabel; funcii care returneaz o variabil (constant) numeric; variabile i constante de tip numeric.
Scop / reprezentare matematic Funcie VFP

restul mpririi exacte a lui n1 la n2


x

mod (n1,n2) abs(x) int(x) ceiling(x) floor(x) round(nExpr,nr_zecimale) exp(x) log(x)

partea ntreag a lui x urmtorul ntreg mai mare sau egal cu x (plafon) urmtorul ntreg care este mai mic sau egal cu x (podea) rotunjirea unei expresii numerice la un numr specificat de zecimale

ex
ln(x)

7. Elemente ale limbajului propriu Visual FoxPro 6.0 log10 x log10(x) sqrt(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) dtor(x) rtod(x) set decimals to n PI()

78

x
sin x cos x tg x arcsin x arccos x arctg x trecerea din grade n radiani trecerea din radiani n grade alegerea numrului de zecimale n valoarea constantei
Funcii financiare Scop

Funcie VFP

returneaz valoarea ratei necesare pentru achitarea unui mprumut s, cu dobnda d*, pe perioada nr** (annual sau lunar) returneaz suma ce trebuie depus n cont pentru a plti o rat s, pe o perioad nr (ani sau luni), dac dobnda acordat este d returneaz suma ce se poate strnge n cont, dup o perioad nr (ani sau luni), dac dobnda este d iar rata depunerii este s

PAYMENT(s,d,nr) PV(s,d,nr) (Present Value) FV(s,d,nr) (Future Value)

*Argumentul d (dobnda) este utilizat n form zecimal (d=0.06 | 6%). Dac dobnda se preia sub form procentual se va mprii la 100. Implicit este dobnda anual. **Argumentul nr (perioada) este implicit exprimat n ani. Dac calculul se efectueaz pentru o perioad exprimat n luni, va terbui modificat corespunztor i dobnda (anual | lunar).
7.4.2. Aplicaii ale funciilor financiare A. Funcia PAYMENT returneaz valoarea fiecrei pli, dintr-o serie periodic de pli (rat), a

unui mprumut s, cu dobnda fix d, pe o perioad nr. Sintaxa funciei: PAYMENT(s,d,nr)

79

Baze de date

Exemplul 1. Firma DAEWOO vinde autoturisme marca MATIZ care pot fi achitate n rate lunare,

pe o perioad de trei ani. mprumutnd de la BRD suma de 6000 $ cu dobnda anual de 5.3%, s se stabileasc care este rata lunar pe care trebuie s o achite un client. n fereastra de comenzi introducem comanda pentru crearea fiierul surs IMPR: MODI COMM IMPR se lanseaz editorul de programe VFP i se introduc liniile de comenzi (instruciuni): SET TALK OFF && anuleaz afiarea rezultatelor comenzilor CLEAR && cur spaiul de afiare SET CURRENCY TO '$' && definirea simbolului monedei STORE 0 TO S,NR && iniializarea variabilelor S, NR cu 0 D=0.00 && iniializarea variabilei D @5,20 SAY 'STABILIREA RATEI LUNARE PENTRU UN IMPRUMUT' @7,15 SAY 'SUMA IMPRUMUTATA ?:' GET S NOTE afiarea la coordonate fixate de carcaterul @ (linia 7, coloana 15) a mesajului dintre apostrof i editarea variabilei S. @9,15 SAY 'DOBANDA ANUALA (%) ?:' GET D @11,15 SAY 'IN CATE LUNI TREBUIE ACHITAT IMPRUMUTUL ?:' GET NR READ && citirea ntregului ecran variabilele editate cu @.. GET D=D/12/100 && transformare dobnd anual procentual, n dobnd lunar, exprimat zecimal @15,20 SAY 'RATA LUNARA ESTE DE ' SET CURRENCY RIGHT && setarea afirii simbolului monedei la dreapta @15,45 SAY PAYMENT(S,D,NR) FUNCTION '$9999.99' && afiarea rezultatului funciei i a monedei WAIT WINDOW 'APASATI ENTER' && pstreaz ecranul cu rezultate pn se apas Enter Fereastra de editare se nchide cu [CTRL] + [W] sau din butonul de nchidere i se salveaz fiierul. Lansarea n execuie a programului se face fie din meniul sistem Program/Do, fie din bara de instrumente se activeaz icon-ul cu semnul exclamrii, sau n fereastra de comenzi se introduce comanda DO IMPR Rata lunar este 180.63 $.

7. Elemente ale limbajului propriu Visual FoxPro 6.0

80

B. Funcia PV returneaz valoarea sumei care trebuie s existe n cont, pentru a putea plti o

rat s, pe o perioad nr, pentru o dobnd anual d acordat de banc la depozit. Sintaxa funciei: PV(s,d,nr)
Exemplul 2. O firm trebuie s achite o chirie lunar de 300 $ pentru sediu, pe o perioad de 5 ani.

Ci bani trebuie depui n cont la banca BCR, dac dobnda la acest tip de depozit este de 4% pe an. n fereastra de comenzi se introduce comanda pentru crearea fiierului CONT: MODI COMM CONT se lanseaz editorul de programe VFP i se introduc liniile de comenzi: SET CLOCK ON && afiarea cesul cu ora dat de sistemul de operare CLEAR STORE 0 TO S,NR D=0.00 @5,25 SAY STABILIREA SUMEI NECESARE IN CONT PENTRU PLATA UNEI RATE LUNARE @7,20 SAY RATA LUNARA ?: GET S @9,20 SAY DOBANDA ANUALA (%) ?: GET D @11,20 SAY PERIOADA (LUNI) DE ACHITARE A RATEI ?: GET NR READ D=D/12/100 @13,25 SAY SUMA INITIALA DIN CONT TREBUIE SA FIE DE ; +ALLTRIM(STR(PV(S,D,NR),10,2))+ $ NOTE funcia STR() transform o valoare numeric ntr-un ir de caractere; funcia ALLTRIM() elimin spaiile de la nceputul i sfritul irului. WAIT WINDOW APASATI ENTER Se salveaz programul i se lanseaz n execuie cu comanda: DO CONT Suma necesar este 16289.72$.

81

Baze de date

C. Funcia FV returneaz valoarea sumei ce se strnge ntr-un cont, n cazul n care se depune

o rat s, banca ofer o dobnd anual d, pe o perioad nr. Sintaxa funciei: FV(s,d,nr)
Exemplu. Ce sum va strnge n cont un copil, care primete pensie alimentar timp de 10 ani, cte

50 $ pe lun, la o banc ce ofer o dobnd de 4% pe an ? n fereastra de comenzi se introduce comanda pentru crearea fiierului SUMA: MODI COMM SUMA se lanseaz editorul de programe VFP i se introduc liniile de comenzi: CLEAR STORE 0 TO S,NR D=0.00 @5,25 SAY STABILIREA SUMEI STRANSE IN CONT DUPA O PERIOADA DE TIMP @7,20 SAY RATA LUNARA ?: GET S @9,20 SAY DOBANDA ANUALA ?: GET D @11,20 SAY PERIOADA (LUNI) DE DEPUNERE A RATEI ?: GET NR READ D=D/12/100 @13,25 SAY SUMA STRANSA IN CONT ESTE +ALLTRIM(STR(FV(S,D,NR),10,2))+ $ WAIT WINDOW APASATI ENTER Se salveaz programul i se lanseaz n execuie cu comanda: DO SUMA Suma strns n cont este 7462.49$.
7.4.3. Date i funcii de tip caracter

Operanzii de tip caracter pot fi:

cmpurile de tip CHARACTER ale unei tabele; funciile care returneaz un ir de caractere; variabile i constante de tip ir de caractere.

7. Elemente ale limbajului propriu Visual FoxPro 6.0 Dac irul de caractere conine n componena sa caracterul () atunci pentru definirea irului se folosesc caracterele ().
Scop Funcie VFP

82

Returneaz caracterul corespunztor codului ASCII n (I=1...127) Returneaz codul ASCII pentru un caracter c Extragerea unui subir de de caractere, de lungime n2, din irul s, ncepnd cu poziia n1 Extragerea unui subir de n caractere, ncepnd din stnga irului s Extragerea unui subir de n caractere, ncepnd din dreapta irului s Returnarea unui ir de caractere s, n mod repetat de n ori Obinerea unui ir de n spaii goale Eliminarea spaiilor ntr-un ir de caractere: de la nceputul i sfritul irului s de la nceputul irului s de la sfritul irului s Adugarea de spaii, sau a unui caracter c_pad, ntr-un ir s pentru a ajunge la lungimea n: la ambele capete la stnga la dreapta Returneaz lungimea unui ir de caractere s Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss ntr-un ir de caractere s Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss ntr-un ir de caractere s, fr a se ine seama de litere mari/mici Returneaz poziia numeric, la a n-a apariie, a unui subir de caractere ss ntr-un ir de caractere s, ncepnd cutarea de la dreapta Transformarea caracterelor unui ir s n litere mari Transformarea caracterelor unui ir s n litere mici Transformarea primului caracter al unui ir s, dac este o liter, n majuscul

CHR(n) ASC(c) SUBSTR(s,n1,n2) LEFT(s,n) RIGHT(s,n) REPLICATE(s,n) SPACE(n) ALLTRIM(s) LTRIM(s) RTRIM(s)

PADC(s,n[, c_pad]) PADL(s,n[,c_pad]) PADR(s,n[,c_pad]) LEN(s) AT(s,ss,n) ATC(s,ss,n)

RAT(s,ss,n) UPPER(s) LOWER(s) PROPER(s)

83
7.4.4. Date i funcii de tip calendaristic

Baze de date

Expresiile de tip dat calendaristic pot fi:

cmpuri de tip dat calendaristic (DATE), dintr-o tabel; funcii care returneaz data calendaristic; constante de tip dat calendaristic.

O dat de tip dat calendaristic precizeaz ziua, luna, anul, ordinea acestor 3 elemente poate fi aleas din 11 moduri, cu ajutorul comenzii: SET DATE TO <tip_dat> unde: tip_dat ANSI BRITISH FRENCH GERMAN ITALIAN JAPAN USA MDY DMY YMD Format aa.ll.zz zz/ll/aa zz/ll/aa zz.ll.aa zz-ll-aa aa/ll/zz ll-zz-aa ll/zz/aa zz/ll/aa aa/ll/dd

AMERICAN ll/zz/aa

Cele 3 elemente pot fi separate cu /, -, .. Implicit se consider formatul: ll/zz/aa. Cu comanda: SET CENTURY ON|OFF se poate preciza dac anul este este afiat cu 2 cifre (ON) sau 4 cifre (OFF). Comanda: SET MARK TO <caracter> precizeaz ce caracter se va folosi ca separator ntre cele 3 elemente ale datei. Funcii pentru datele de tip dat calendaristic sunt date n tabelul urmtor:

7. Elemente ale limbajului propriu Visual FoxPro 6.0


Scop Funcie VFP

84

Returneaz data din sistem(calculator) Numele zilei dintr-o expresie de tip dat d A cta zi din sptmn dintr-o expresie de tip dat d Numele lunii dintr-o expresie de tip dat d A cta lun din an dintr-o expresie de tip dat d Izolarea anului dintr-o expresie de tip dat d Returneaz ora din sistem (calculator) a unei expresii de tip dat calendaristic d

DATE() CDOW(d) DOW(d) CMONTH(d) MONTH(d) YEAR(d) TIME()

Returnarea sub form de ir de caractere, n format aaaallzz DTOS(d)

Folosirea ntr-un program a unei constante de tip dat calendaristic, se face ntre acolade ({^31/01/01}).
7.4.5. Date de tip memo

Acest tip de date este asemntor tipului ir de caractere. Este indicat folosirea datelor de tip memo n cazul n care un cmp al unei nregistrri dintr-o tabel, nu are o lungime cunoscut (sau care nu poate fi aproximat). Utilizarea unui cmp memo ntr-o tabel, are ca efect asocierea la tabel a unui fiier suplimentar n care se depun datele cmpului memo. n tabel, n cmpul memo sunt stocate informaii referitoare la tabela suplimentar. Lungimea unui cmp memo este 10 octei.

7.5. Variabile i masive


7.5.1. Variabile

O variabil are asociate urmtoarele elemente:

numele coninutul (valoarea) tipul variabilei zon de memorie

Din punct de vedere al utilizrii lor, variabilele pot fi:

locale, acioneaz ntr-o funcie sau procedur. Declararea utilizrii lor se face cu comanda:
LOCAL <list_variabile>

<list_variabile> - variabilele se declar prin nume i sunt separate n list prin virgul.

85

Baze de date

globale, acioneaz la nivelul ntregului program, inclusiv n funcii i proceduri. Declararea


utilizrii lor se face cu comanda: PUBLIC <list_variabile>

Atribuirea de valori unei variabile se face cu sintaxa:


<nume_var>=<expresie>

Efectul comenzii: se evaluaez expresia din dreapta, se caut dac variabila a fost definit i i se
atribuie valoarea i tipul expresiei. Atribuirea se mai poate face utiliznd comanda: STORE <expresie> TO <list_variabile>

Efectul comenzii: se evaluaz expresia i se atribuie variabilelor din list, valoarea i tipul ei. Eliberarea zonelor de memorie ocupate de variabile care nu mai sunt necesare n program se face
cu una din comenzile: RELEASE [ALL] <list_variabile> CLEAR [ALL] <list_variabile>

Afiarea coninutului variabilelor existente n memorie se face cu comenda:


DISPLAY MEMORY [TO PRINTER[PROMPT] | TO FILE nume_fiier] [NOCONSOLE] unde: TO PRINTER[PROMPT] ieirea la imprimant. Clauza PROMPT se folosete pentru a confirma imprimarea, ntr-o fereastr de dialog; TO FILE nume_fiier ieirea direcionat ctre un fiier; [NOCONSOLE] mpiedic afiarea n fereastra principal VFP, a rezultatelor comenzii.
7.5.2. Macrosubstituia

Macrosubstituia trateaz coninutul unei variabile ca un ir de caractere n sens literal (cmpul unei nregistrri dintr-o tabel, nume de fiier etc.), ca i cum n locul variabilei respective ar fi pus irul de caractere fr apostrofuri.

Sintaxa comenzii:
& nume_variabil
Exemplu. Presupunem c exist 2 fiiere ESTUD1.DBF i ESTUD2.DBF. Se dorete s li se

vizualizeze coninutul ntr-un ciclu FOR. PUBLIC FIS C(20)

7. Elemente ale limbajului propriu Visual FoxPro 6.0 FOR I=1 TO 2 FIS='ESTUD'+ALLTRIM(STR(I))+'.DBF' USE &FIS BROWSE ENDFOR CLOSE DATABASES

86

7.5.3. Masive de date

Masivele de date (vectori i matrice) pot fi privite ca variabile sau constante, care au o structur compus, identificarea n cadrul structurii fcndu-se pe baza unui criteriu de poziie. Pentru vector criteriul de poziie este numrul de ordine al elementului, pentru matrice, criteriul de poziie este fie numrul liniei i al coloanei, fie liniariznd matricea, se poate adresa un element prin poziia care o ocup n masiv (de exemplu, ntr-o matrice A de dimensiune 3x3, elementul A(3,2) este al 8-lea element din matrice i se poate adresa cu A(8)). Prin liniarizare o matrice poate fi adresat ca un vector. Calculul poziiei n matricea liniarizat (vector), pe baza coordonatelor linie/coloan se poate face cu formula:

poziie=(linie-1)*Nr_linii+coloan
Utilizarea masivelor de date comport urmtoarele aspecte:

atribuirea unui nume pentru identificare; declararea tipului de masiv: vector sau matrice (rezervare zon de memorie);

Masivele de date pot fi declarate n dou moduri:

fie la nceputul programului sau al subprogramului, utiliznd comanda PUBLIC (variabi

global) sau LOCAL (variabil local):


PUBLIC [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])... LOCAL [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])... Variabilele create cu PUBLIC / LOCAL sunt iniializate cu valoarea fals (.F.). Variabilele locale sunt legate de funcia sau procedura n care au fost declarate, dar pot fi transmise prin referin;

fie n interiorul programului utiliznd una din comenzile:

87

Baze de date

DIMENSION [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])... DECLARE [ARRAY] nume_masiv1(n_linie[,n_col])[, nume_masiv2(n_linie[,n_col])... Elementele masivului sunt iniializate cu valoarea fals ca i n primul caz. Dup declarare, masivul poate fi iniializat global (toate elementele capt aceeai valoare) i cu aceast operaie se stabilete tipul de date al elementelor masivului: STORE <val_init> TO <nume_masiv>
Exemplu

DIMENSION MAT(5,7) STORE 0 TO MAT Tipul i dimensiunile unui masiv de date pot fi modificate n cadrul aceluiai program, prin noi declaraii DIMENSION, DECLARE.

7.6. Funcii de prelucrare a masivelor


Funcia ALEN (nume_masiv,n)
Returneaz urmtoarele informaii:

numrul de elemente, dac n=0; numrul de linii, dac n=1; numrul de coloane, dac n=2.

Funcia AINS(nume_masiv,n[,2])
Are ca efect:

inserarea unui element nou ntr-un vector, inaintea elementului de pe poziia n,dac argumentul 2 lipsete; inserarea unei linii ntr-o matrice, naintea liniei cu numrul n, dac argumentul 2 lipsete; inserarea unei coloane ntr-o matrice, naintea coloanei cu numrul n, dac argumentul 2 apare.

Funcia returneaz valoarea 1 dac inserarea s-a efectuat cu succes.


Observaie. Inserarea unui element, a unei linii sau coloane ntr-un masiv nu modific dimensiunea

masivului, ci duce la pierderea elementelor de pe poziia n.

7. Elemente ale limbajului propriu Visual FoxPro 6.0

88

Funcia ADEL(nume_masiv,n,[2])
Are ca efect operaia invers comenzii AINS, deci tergerea elementului, liniei, coloanei de pe poziia n. Argumentul 2 trebuie s apar n cazul n care tergem o coloan dintr-o matrice. Prin cele dou funcii, elementele unui masiv sunt translatate cu o poziie la dreapta (AINS) sau la stnga (ADEL). Funcia va returna valoarea 1 dac tergerea liniei/coloanei s-a efectuat cu succes.

Funcia ACOPY(masiv_surs,masiv_destinaie[,nr_ncep_surs[,nr_elem_copiate[, nr_ncep_destin]]])


Este comanda de copiere a elementelor unui masiv (surs) n elementele altui masiv (destinaie), unde:

masiv_surs, masiv_destinaie numele masivelor surs/destinaie; nr_ncep_surs numrul elementului din surs de la care ncepe copierea; nr_elem_copiate numrul de elemente ce vor fi copiate din masivul surs, dac are
valoarea 1 toate elementele ncepnd cu poziia nr_ncep_surs vor fi copiate;

nr_ncep_destin numrul elementului din masivul destinaie de la care ncepe inserarea.

Funcia returneaz numrul elementelor copiate n masivul destinaie.

Funcia ASORT(nume_masiv[,nr_ncep[,nr_elem_sortate[,nr_ordine_sortare]]])
Comanda are ca efect sortarea elementelor unui masiv, putnd preciza primul element de la care ncepe sortarea (nr_ncep), cte elemente vor fi sortate (nr_elem_sortate). Ordinea de sortare (nr_ordine_sortare) va fi ascendent dac argumentul este 0 sau omis, sau descendent dac argumentul este 1 sau orice valoare diferit de 0. Funcia va returna valoarea 1 dac sortare s-a efectuat cu succes, sau 1 n caz contrar.
Exemplul 1. Secvena urmtoare de comenzi va crea o matrice cu 3 linii i 2 coloane, elementele

masivului se identific prin numrul de ordine n matricea liniarizat: DIMENSION LIT(3,2) LIT(1) = 'G' LIT(2) = 'A' LIT(3) = 'C' LIT(4) = 'Z' LIT(5) = 'B'

89 LIT(6) = 'N' Elementele din matrice vor fi distribuite astfel:


Linia Coloana 1 Coloana 2

Baze de date

1 2 3

G C B

A Z N

Se sortez masivul cu comanda ASORT(LIT,1) Sortarea ncepe cu primul element al masivului (1,1). Elementele din prima coloan a masivului sunt plasate n ordine ascendent prin rearanjarea liniilor masivului. Linia Coloana 1 Coloana 2 1 2 3 B C G N Z A

Apoi masivul este sortat ncepnd cu elementul 4 (2,2) din masiv cu comanda ASORT(LIT,4) Elementele din coloana a 2-a sunt plasate n ordine ascendent prin rearanjarea liniilor masivului, ncepnd cu elementul 4 din masiv. Linia Coloana 1 Coloana 2 1 2 3 B G C N A Z

Dac sortarea se efectueaz cu succes funcia returneaz valoarea 1, n caz contrar valoarea 1. Pentru a putea fi sortate, elementele masivului trebuie s fie de acelai tip.
Exemplul 2.

PUBLIC DIMENSION LIT(3,2) CLEAR

7. Elemente ale limbajului propriu Visual FoxPro 6.0 LIT(1) = 'G' LIT(2) = 'A' LIT(3) = 'C' LIT(4) = 'Z' LIT(5) = 'B' LIT(6) = 'N' @1,1 SAY "MATRICEA INITIALA" K=1 FOR I=1 TO 3 @I+K,1 SAY LIT(I,1) @I+K,2 SAY "" @I+K,3 SAY LIT(I,2) ENDFOR @6,1 SAY "MATRICEA SORTATA INCEPAND CU PRIMUL ELEMENT" K=6 ASORT(LIT,1) FOR I=1 TO 3 @I+K,1 SAY LIT(I,1) @I+K,2 SAY "" @I+K,3 SAY LIT(I,2) ENDFOR @11,1 SAY "MATRICEA SORTATA INCEPAND CU ELEMENTUL 4" K=11 ASORT(LIT,4) FOR I=1 TO 3 @I+K,1 SAY LIT(I,1) @I+K,2 SAY "" @I+K,3 SAY LIT(I,2) ENDFOR @16,1 SAY "INSERAREA UNEI LINII INAINTE DE LINIA 3" AINS(LIT,3) LIT(3,1)="2" LIT(3,2)="5" K=16

90

91 FOR I=1 TO 3 @I+K,1 SAY LIT(I,1) @I+K,2 SAY "" @I+K,3 SAY LIT(I,2) ENDFOR @21,1 SAY "STERGEREA LINIEI 3" K=21 ADEL(LIT,3) FOR I=1 TO 3 @I+K,1 SAY LIT(I,1) @I+K,2 SAY "" @I+K,3 SAY LIT(I,2) ENDFOR n urma execuiei programului de mai sus, se obin rezultatele din Figura 1.

Baze de date

Fig. 1

8. Accesul i actualizarea datelor

92

8. Accesul i actualizarea datelor


Lucrul cu baze de date i tabele n cadrul limbajului propriu VFP, presupune trei activiti, care segmenteaz construcia unei aplicaii:

deschiderea/crearea bazei de date, a tabelelor, a fiierelor asociate (index); exploatarea bazei de date i a tabelelor, ceea ce implic operaii de actualizare i consultare, la nivel de structur sau nregistrri; nchiderea/tergerea bazei de date, a tabelelor sau a fiierelor asociate (index).

Comenzile pentru operaiile de deschidere, creare, nchidere a unei baze de date (OPEN DATABASES..., CREATE DATABASES, CLOSE DATABASES), a unei tabele de date (USE..., CREATE TABLE..., CLOSE TABLES, USE), a unor fiiere de index (USE...INDEX..., INDEX ON..., CLOSE INDEX) n modul de lucru comand (interpretor), au aceeai sintax i n cadrul programelor scrise n limbajul propriu VFP.

8.1. Manipularea structurii unei tabele


Modificarea structurii unei tabele se face cu comanda
MODIFY STRUCTURE Dac nu este deschis nici o tabel n zona de lucru curent, se deschide caseta de dialog Open care permite utilizatorului selectarea (deschiderea) unei tabele. Comanda are ca efect lansarea aplicaiei Table Designer (proiectantul de tabele) cu ajutorul cruia se fac modificrile de structur (adugare i tergere de cmpuri, modificare nume cmp, mrime, tip, adugarea / tergerea / modificarea etichetelor de index, specificarea valorilor de tip NULL).

Vizualizarea structurii unei tabele se face cu comanda


DISPLAY STRUCTURE [IN <nr_zon_de_lucru> | <alias_tabel>] [TO PRINTER [PROMPT] [TO FILE <nume_fiier>] [NOCONSOLE] IN <nr_zon_de_lucru> | <alias_tabel> Are ca efect afiarea structurii tabelei dintr-o zon de lucru, alta dect cea curent, sau a unei tabele adresat prin alias. Semnificaia clauzelor este urmtoarea:

TO PRINTER [PROMPT] direcioneaz informaiile la imprimant.

93

Baze de date

Clauza PROMPT determin afiarea unei casete de dialog nainte de ieirea la imprimant (se pot face setri legate de imprimant). TO FILE <nume_fiier> - direcioneaz ieirea informaiilor ntr-un fiier. NOCONSOLE suprim afiarea datelor n ferestra principal a VFP.

Se mai poate folosi i comanda LIST STRUCTURE care are aceleai clauze.

Copierea structurii unei tabele


Crearea unei noi tabele care va conine structura tabelei active se face cu comanda COPY STRUCTURE EXTENDED TO <nume_fiier> [FIELDS <list_cmpuri>] Numai cmpurile din lista de cmpuri vor fi incluse n nregistrarea din noul fiier. Dac clauza FIELDS este omis, vor fi incluse toate cmpurile tabelei surs.

8.2. Ordonarea datelor


Datele dintr-o tabel se pot ordona dup un singur criteriu sau dup mai multe (ordonare multicriterial) . Ordonarea poate fi ascendent, dac fiecare cmp dup care se face ordonarea are o valoare mai mare dect cmpul corespunztor din nregistrarea anterioar, sau descendent. Dac ordonarea se face multicriterial, se definete o cheie primar, care este principalul criteriu de ordonare i chei secundare. n cazul n care dou sau mai multe nregistrri au aceai valoare pentru cheia principal, se utilizeaz cheile secundare pentru departajare, n ordinea n care au fost declarate. n VFP ordonarea unui fiier se poate face n dou moduri:

folosind comanda SORT, prin care se creaz un nou fiier cu nregistrrile sortate dup criteriul ales. folosind metoda indexrii, care const n crearea unui fiier de index, n care se stocheaz ordinea nregistrrilor din tabela surs.

Comanda SORT are sintaxa:


SORT TO <nume_tabela>ON <nume_cmp_1> [/A | /D] [/C] [, <nume_cmp_2> [/A | /D] [/C] ...] [ASCENDING | DESCENDING] [Scope] [FOR <expresie_1>] [WHILE <expresie_2>] [FIELDS <lista_cmpurilor>]

8. Accesul i actualizarea datelor unde:

94

nume_tabela numele fiierului sortat. nume_cmp_1 specific cmpul din tabela nesortat asupra creia se aplic procedura.
Implicit sortarea este ascendent. Nu se pot sorta cmpuri memo sau general. Este cheia primar dup care se face sortarea.

/A, /D, /C specific ordinea: A: ascendent, D: descendent, C: fr a se ine cont de litere mari/mici.

nume_cmp_2 specific un cmp cu rol de cheie secundar.


ASCENDING specific o sortare ascendent pentru cmpurile care nu sunt urmate de opiunea /D. DESCENDING specific o sortare descendent pentru cmpurile care nu sunt urmate de opiunea /A.

Scope specific domeniul de sortare (tot fiierul sau doar o parte din nregistrri) All, Next n, Record n, Rest.
FOR expresie_1 precizeaz care nregistrri particip la sortare, respectiv acelea pentru care expresie_1 are valoarea True WHILE expresie_2 precizeaz condiia pentru care atta vreme ct au valoarea True, nregistrrile vor fi sortate. FIELDS lista_cmpurilor precizeaz cmpurile din tabela original care vor fi incluse n noul fiier sortat. Dac se omite clauza, toate cmpurile din tabela original vor fi incluse n tabela sortat.

Exemplu. S se sorteze fiierul ESTUD1, ntr-un nou fiier SESTUD1, dup cmpul NUME,

ascedent, fr s se in seama de litere mici/mari, lund doar studenii cu media peste 8.00 i cmpurile MATR, NUME, MBAC. USE ESTUD1 SORT TO SESTUD1 ON NUME/A/C FOR MBAC>8.00 FIELDS MATR,NUME,MBAC USE SESTUD1 BROWSE CLOSE DATABASES DELETE FILE SESTUD1.DBF

95

Baze de date

Sortarea este un procedeu care, n cazul tabelelor mari, duce la mrirea timpului de execuie i a spaiului solicitat pe hard disk. Se consider c este mai eficient folosirea metodei indexrii. Prin metoda indexrii se creaz un fiier de index, care va conine cel puin un cmp al tabelei de date, sortat dup un criteriu alfabetic, numeric sau cronologic. Fiierul de index este o sortare virtual a unei tabele, nregistrrile din tabela de date rmnnd nesortate. Fiierul de index conine informaii de localizare a nregistrrilor dintr-o tabel. Fiierele index sunt de 2 tipuri:

simple au extensia IDX, conin o singur cheie de indexare i deci un singur criteriu de
ordonare.

compuse au extensia CDX (Compound Index File), n care se stocheaz mai multe criterii
de ordonare, fiecare avnd asociat un nume ( TAG - eticheta de index), corespunztor mai multor chei de indexare.

Crearea unui fiier de index se face cu comanda: INDEX ON <expr> TO <.IDX file>|TAG<tag_name>[OF<.CDX file>] [FOR <exprL>] [ASCENDENT | DESCENDENT] [UNIQUE] [ADDITIVE] unde:

<expr> - expresia indexului care include cmpuri din tabela ce va fi indexat. Tipurile de expresii admise sunt: C, D, N. TO <.IDX file> - specific numele fiierului de index care va fi creat. TAG<tag_name> OF<.CDX file> - permite crearea unui fiier cu mai multe intrri (etichete de index TAG-uri), numrul lor fiind limitat doar de spaiul pe hard disk.

Fiierele cu extensia .CDX pot fi:

structurale se deschid automat odat cu deschiderea tabelei de date i au acelai


nume.

nestructurale deschiderea se face indicnd un nume la clauza OF<.CDX file>, diferit


de cel al tabelei de date.

FOR <exprL> - permite ca indexul creat s acioneze ca un filtru asupra tabelei. ASCENDENT|DESCENDENT specific ordinea de sortare n fiierul de index. UNIQUE pentru valori repetate ale cheii, specific includerea n fiierul de index numai la prima apariie. ADDITIVE permite crearea unui fiier de index pentru o tabel, chiar dac mai sunt deschise alte fiiere de index.

8. Accesul i actualizarea datelor

96

Indexarea dup mai multe cmpuri este similar sortrii multiple. Nu se pot face indexri multiple pe cmpuri cu tipuri diferite, deci trebuie aduse la o form comun (ir de caractere).

Comanda
INDEX ON <cmp_car> + STR(cmp_numeric,nc) + DTOS(cmp_dat) TO <fiier_index> permite indexarea dup 3 cmpuri diferite. Semnificaia parametrilor i a clauzelor:

STR(cmp_numeric,nc) transform un numr ntr-un ir de caractere,

nc numrul maxim de caractere pe care se reprezint cmpul numeric.


DTOS(cmp_data) transform o variabil de tip dat n ir de caractere.

Pentru deschiderea simultan a tabelei de date i a fiierelor de index asociate se folosete comanda: USE <nume_tabel> INDEX <list_fiiere_index>
Exemplul 1. Presupunem c este creat o tabel (STUD) cu urmtoarea structur: matricola N(5) nume data_n adresa

C(40) D C(40)

S se indexeze dup cmpul matricola. Tabela are urmtoarele nregistrri:


nr_nreg matricola nume data_n adresa

1 2 3 4 5 6

215 110 300 200 210 250

Aldea I. Dan Barbu A. Vasile Dinu A. Adrian Cornea C. Ilie Ene V. Dan

22/03/79 Bucureti 10/05/80 Craiova 25/08/79 Bucureti 16/07/80 Ploeti 24/03/80 Bucureti

Alexandru F. Ion 13/07/80 Iai

97 Secvena de comenzi CLEAR USE STUD BROWSE INDEX ON MATRICOLA TO IMATR.IDX

Baze de date

* Obinerea numelui fiierului IDX deschis pentru baza de date curent sau cea specificat ?? NDX(1) * Afieaz primul fiier index activ BROWSE * nregistrrile din fiierul de date apar sortate dup cmpul matricola. CLOSE DATABASES CLEAR creaz fiierul index IMATR.IDX. Acesta are structura:
matricola nr_nreg

110 200 210 215 250 300

2 4 5 1 6 3

Exemplul 2. S se indexseze tabela STUD dup cmpul NUME i s se creeze un fiier structural

STUD.CDX. USE STUD INDEX ON UPPER(NUME) TAG NUME BROWSE CLOSE DATABASES
Exemplul 3. S se indexeze tabela ESTUD1 dup cmpul NUME, s se creeze un fiier nestructural

INUM.CDX, ordonat ascendent dup valorile cheii:

8. Accesul i actualizarea datelor

98

USE ESTUD1 INDEX ON UPPER(NUME) TAG NUME OF INUM.CDX ASCENDING BROWSE CLOSE DATABASES
Exemplul 4. Utiliznd tabela ESTUD1 s se indexeze tabela dup o cheie compus (NUME,

MBAC), fr a permite existena dublurilor, ntr-un fiier de index INM.IDX. Structura tabelei este: MATR N(5), NUME C(40), ADRESA C(30), ANS N(1), ANIF N(4), DATAN N(4), MBAC N(5,2). USE ESTUD1 INDEX ON UPPER(NUME)+STR(MBAC,5) TO INM.IDX UNIQUE BROWSE CLOSE DATABASES
Exemplul 5. S se indexeze tabela ESTUD1 dup cmpul numeric MATR, ntr-un fiier de index

IMATR.IDX, numai pentru nregistrrile care au cmpul MBAC (medie bacalaureat) >8.00: USE ESTUD1 INDEX ON MATR TO IMATR.IDX FOR MBAC>8.0 BROWSE CLOSE DATABASES

8.3. Accesul la date


n funcie de tipul accesului la date, comenzile sunt:

pentru acces secvenial : GO, SKIP, LOCATE, CONTINUE. pentru acces direct: SEEK, caz n care tabela trebuie indexat.

Comanda GO
GO [RECORD] <nr_nreg> [IN <nr_zon_de_lucru> | IN <alias_tabel>] sau GO TOP | BOTTOM [IN <nr_zon_de_lucru> | IN <alias_tabel>]

99

Baze de date

Comanda are ca efect mutarea pointer-ului de pe nregistrarea curent pe nregistrarea nr_nreg.

IN nr_zon_de_lucru specific zona de lucru n care este mutat pointer-ul. IN alias_tabel specific alias-ul tabelei n care este mutat pointer-ul. TOP poziioneaz pointer-ul pe prima nregistrare din fiier. BOTTOM poziioneaz pointer-ul pe ultima nregistrare.

Funcia RECNO()
Returneaz numrul curent al nregistrrii pe care este poziionat pointer-ul n fiierul curent sau specificat. Apelul funciei RECNO(<nr_zon_de_lucru> | <alias_tabel>) unde: nr_zon_de_lucru reprezint zona de lucru n care este activ tabela. Dac s-a lansat o comand SEEK pentru a cuta o nregistrare i aceasta nu a fost gsit, se poate utiliza comanda GO RECNO(0) pentru a returna numrul nregistrrii cu cea mai apropiat valoare cutat. Funcia RECNO(0) va returna valoarea 0 dac nu s-a gsit nici o valoare apropiat.

Funcia RECCOUNT()
Returneaz numrul de nregistrri din tabela curent sau specificat. Apelul funciei RECCOUNT(<nr_zon_de_lucru> | <alias_tabel>)

Funcia EOF()
Este funcia logic care returneaz valoarea adevrat (.T.), dac pointer-ul de fiier este poziionat pe ultima nregistrare, n fiierul curent. n caz contrar, valoarea returnat este fals (.F.). Apelul funciei EOF ([<nr_zon_de_lucru> | <alias_tabel>])

Funcia BOF()
Este o funcia logic i returneaz valoarea adevrat (.T.), dac pointer-ul de fiier este poziionat pe prima nregistrare, n fiierul curent. n caz contrar, valoarea returnat este fals (.F.). Apelul funciei BOF ([<nr_zon_de_lucru> | <alias_tabel>])

Comanda SKIP

8. Accesul i actualizarea datelor SKIP [<nr_nreg>] [IN <nr_zon_de_lucru> | IN <alias_tabel>]

100

unde: nr_nreg specific numrul de nregistrri peste care se mut pointer-ul n fiier. Dac nu se specific, pointer-ul se va muta la urmtoarea nregistrare. Dac valoarea lui nr_nreg este pozitiv, pointer-ul se mut ctre sfritul fiierului. Dac valoarea este negativ, pointer-ul se mut ctre nceputul fiierului.

Comanda SET FILTER TO


Precizeaz condiia pe care trebuie s o ndeplineasc nregistrrile din tabela curent pentru a putea fi accesate. SET FILTER TO [<expr_L>] unde: expr_L condiia de accesare a nregistrrilor. Numai nregistrrile care satisfac expresia logic expr_L sunt disponibile i toate comenzile care vor accesa tabela, vor respecta condiia declarat n comanda SET FILTER TO. Dac este omis expresia logic, toate nregistrrile sunt accesibile.

Comanda LOCATE
Realizeaz cutarea secvenial ntr-o tabel, a primei nregistrri care ndeplinete condiiile specificate n expresia logic de cutare, expr_L . LOCATE FOR <expr_L_1> [Scope] [WHILE <expr_L_2>] unde:

FOR expr_L _1 este condiia pentru care are loc cutarea secvenial.

Scope specific domeniul nregistrrilor n care are loc cutarea. Numai nregistrrile din
interiorul domeniului vor fi evaluate. Clauza poate lua valorile ALL, NEXT n, RECORD

n, REST. Clauza implicit este ALL (toate nregistrrile).


WHILE expr_L_2 specific condiia pentru cutarea nregistrrilor, atta vreme ct

expr_L_2 este adevrat. Comanda CONTINUE

101

Baze de date

Se utilizeaz dup o comand LOCATE, pentru a continua cutarea, dup gsirea primei nregistrri care ndeplinete condiiile specificate. Comanda CONTINUE mut pointer-ul de fiier la urmtoarea nregistrare pentru care expresia logic din comanda LOCATE este adevrat.
Exemplu. Presupunem c exist o tabel CLIENTI i trebuie s se afle numrul clienilor care sunt

din Frana. USE CLIENTI STORE 0 TO TOTAL LOCATE FOR ALLTRIM(UPPER(TARA))=FRANTA DO WHILE FOUND() TOTAL=TOTAL+1 CONTINUE ENDDO ?TOTAL CLIENTI DIN FRANTA: +LTRIM(STR(TOTAL)) CLOSE DATABASES

Comanda SEEK
Caut ntr-o tabel o nregistrare la prima apariie, a crei cheie de index se potrivete cu expresia general i mut pointer-ul pe nregistrarea gsit. SEEK <expr_gen> [ORDER nr_index | nume_fiier_IDX | [TAG] nume_etichet_index [OF

nume_fiier_CDX] [ASCENDING | DESCENDING]] [IN <nr_zon_de_lucru> | IN


<alias_tabel>] unde:

expr_gen specific cheia de index pentru care se caut cu comanda SEEK;


ORDER nr_index specific numrul fiierului index care conine cheia de indexare. Dac s-au deschis odat cu tabela i fiierele de index, este numrul care indic poziia din lista de fiiere de index;

ORDER nume_fiier_IDX - specific numele fiierului de index; ORDER [TAG] nume_etichet_index [OF nume_fiier_CDX] specific o etichet de index dintr-un fiier .CDX care conine cheia de indexare. Numele etichetei de index (TAG) poate fi dintr-un fiier .CDX structural sau dintr-un fiier .CDX independent (nestructural);

8. Accesul i actualizarea datelor

102

[ASCENDING | DESCENDING] specific dac nregistrrile sunt cutate n ordine ascendent sau descendent.

Exemplu. S se indexeze fiierul ESTUD2 dup cmpul NUME i s se caute nregistrrile care

ncep cu literele BAR. Structura tabelei ESTUD2 este: MATR N(5), NUME C(40), ADRESA C(30), ANS N(1), DATAN D, MBAC N(5,2) USE ESTUD2 INDEX ON UPPER(NUME) TAG NUME STORE 'BAR' TO CAUTL SEEK CAUTL IF FOUND( ) BROWSE FIELDS NUME, ADRESA FOR UPPER(NUME)=CAUTL ELSE WAIT WINDOW 'NU EXISTA ' ENDIF CLOSE DATABASES

Funcia FOUND()
Returneaz valoarea logic adevrat (.T.), dac comenzile CONTINUE, LOCATE sau SEEK s-au executat cu succes. FOUND(<zon_de_lucru> | <alias_tabel>) Dac argumentele zon_de_lucru, alias_tabel sunt omise, funcia va returna rezultatul pentru fiierul deschis n zona de lucru curent.

Vizualizarea coninutului unei tabele


Comanda afieaz informaii (nume cmpuri, date) despre tabela activ n ferestra principal VFP sau ntr-o ferestr definit de utilizator. Sintaxa este DISPLAY[[FIELDS] <list_cmpuri>] [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] [NOCONSOLE] [TO PRINTER [PROMPT] | TO FILE <nume_fiier>] unde:

103

Baze de date

[FIELDS] <list_cmpuri>] specific cmpurile care vor fi afiate. Dac se omite clauza se vor afia toate cmpurile.

Scope domeniul de adresare a nregistrrilor (ALL, NEXT n, RECORD n, REST);


FOR <expr_L_1> - vor fi afiate doar nregistrrile care satisfac condiia logic; WHILE <expr_L_2> - atta vreme ct condiia este ndeplinit, nregistrrile vor fi afiate.

Se mai poate utiliza i comanda LIST care are aceleai clauze.

8.4. Actualizarea datelor


Operaia de actualizare const n adugarea de noi nregistrri, modificarea nregistrrilor existente, tergerea logic i/sau fizic a nregistrrilor. Operaiile fac parte din limbajul de manipulare a datelor (LMD).
8.4.1. Adgarea de noi nregistrri

Adugarea se poate face utiliznd comenzile de tip APPEND, prin preluarea datelor din alte tabele, masive de date i variabile de memorie. APPEND [BLANK] [IN nr_zon_de_lucru | alias_tabel] Comanda are ca efect adugarea unei nregistrri vide la sfritul unei tabele. APPEND FROM <nume_fiier> [FIELDS <list_cmpuri>] [FOR <expr_L>] [TYPE] [DELIMITED [WITH <delimitator> | WITH BLANK | WITH TAB]] Comanda are ca efect adugarea unei nregistrri preluat din alt tabel, sau dintr-un fiier de tip text, n tabela curent, unde:

nume_fiier specific numele fiierului din care se face adugarea;


FIELDS <list_cmpuri> - specific lista cmpurilor n care vor fi adugate datele; FOR <expr_L> - se va aduga cte o nou nregistrare, din nregistrrile tabelei selectate pentru adugare, cele care ndeplinesc condiia dat de expresia logic expr_L; TYPE specific tipul fiierului surs din care se adaug. Se folosete n cazul n care nu este o tabel VFP;

8. Accesul i actualizarea datelor

104

DELIMITED fiierul surs din care se adaug datele n tabela VFP este un fiier de tip ASCII n care fiecare nregistrare se termin cu <CR> i <LF> (Enter i Line Feed - salt la linie nou). Cmpurile coninute sunt implicit separate prin virgul, iar cele de tip caracter sunt declarate ntre apostrof;

DELIMITED WITH <delimitator> - cmpurile de tip carcater, sunt separate cu un caracter diferit de apostrof; DELIMITED WITH BLANK - cmpurile sunt separate cu spaii n loc de virgul; DELIMITED WITH TAB - cmpurile sunt separate cu cu TAB-uri n loc de virgul.

APPEND FROM ARRAY <nume_masiv> [FOR <expr_logic>] [FIELDS <list_cmpuri> | FIELDS LIKE <ablon> | FIELDS EXCEPT <ablon>] Comanda are ca efect adugarea unei nregistrri n tabela curent, pentru fiecare linie de masiv, datele scrise n fiecare cmp corespund coloanelor din masiv. Semnificaia parametrilor i a clauzelor este urmtoarea:

nume_masiv specific numele masivului care conine datele ce vor fi copiate ca


nregistrri noi; FOR <expr_logic> - specific condiia pentru adugarea nregistrrilor n tabel. Expresia logic trebuie s conin i o condiie pentru un cmp al nregistrrii. nainte de a fi adugat o linie din masiv n tabel sub form de nregistrare, n expresia logic se verific dac elementele liniei de masiv respect condiia;

FIELDS <list_cmpuri>- specific faptul c numai anumite cmpuri (cele din list) din noua nregistrare vor fi actualizate cu date din linia masivului; FIELDS LIKE <ablon> - specific faptul c doar cmpurile care se potrivesc ablonului vor fi actualizate. FIELDS EXCEPT <ablon>- specific faptul c toate cmpurile vor fi actualizate, cu excepia celor care se ncadreaz n ablon.

Dac masivul este unidimensional, comanda APPEND FROM ARRAY adaug o singur nregistrare n tabel, coninutul primului element trece n primul cmp al nregistrrii, coninutul celui de al doilea element trece n cel de al doilea cmp etc., cmpurile MEMO i GENERAL sunt ignorate.
Exemplu comanda:

105 APPEND FROM ARRAY NUME FIELDS LIKE M*, A* EXCEPT NUM*

Baze de date

are ca efect adugarea din masivul NUME, a cmpurilor care ncep cu litera M i A mai puin cele care au primele trei litere NUM. Caracterul asterisc (Wildcard) are semnificaia de orice combinaie de caractere.
Not Utilizarea clauzelor FIELDS LIKE i EXCEPT trebuie s se fac ntr-o tabel ale crui

nregistrri au cmpuri care accept valori de tip NULL (pentru a putea fi exceptate de la scriere). Exist i comanda invers, cu care putem aduga datele din nregistrarea curent a unei tabele ntr-un masiv: SCATTER [FIELDS <list_cmpuri>] | [FIELDS LIKE <ablon>] | [FIELDS EXCEPT <ablon>] [MEMO] TO ARRAY <nume_masiv> [BLANK] Semnificaia clauzelor este aceai ca i la comanda APPEND FROM ARRAY ..., clauza BLANK determin crearea masivului cu elemente vide, care sunt de aceai mrime i tip cu cmpurile din tabel. Clauza MEMO specific existena unui cmp de tip MEMO n list; implicit cmpurile MEMO sunt ignorate.
Exemplu. S se creeze un masiv cu numele MASIV1, s se ncarce cu date vide, de acelai tip i

mrime cu cele ale cmpurilor tabelei ESTUD1 (MATR N(5), NUME C(40), ADRESA C(30), ANS N(1), DATAN D, MBAC N(5,2)). S se introduc datele cmpurilor n masiv i s se adauge sub form de nregistrare nou n tabela ESTUD1. USE ESTUD1 * se deschide tabela ESTUD1 SCATTER TO MASIV1 BLANK * se creaz vectorul MASIV1, cu elemente vide i de acelai tip i mrime * cu cmpurile din tabela ESTUD1 FOR I=1 TO ALEN(MASIV1) @I,1 SAY FIELD(I) GET MASIV1(I)

8. Accesul i actualizarea datelor * se afieaz numele cmpului i se editeaz elementul I din masiv ENDFOR READ * se citesc valorile introduse cu GET IF READKEY()!=12 * dac nu s-a apsat tasta <ESC> APPEND FROM ARRAY MASIV1 * se adaug din elementele masivului o nou nregistrare n tabela ENDIF BROWSE * vizualizare tabela ESTUD1 CLOSE TABLE * nchidere tabela ESTUD1 CLEAR APPEND GENERAL <nume_cmp_general> FROM <nume_fiier> DATA <expr_c> [LINK] [CLASS <nume_clas>]

106

Comanda realizeaz importul unui obiect OLE dintr-un fiier i l plaseaz ntr-un cmp de tip general. Semnificaia parametrilor i a clauzelor este urmtoarea:

nume_cmp_general specific numele cmpului general n care obiectul OLE va fi plasat.


FROM <nume_fiier> - specific numele fiierului care conine obiectul OLE; DATA <expr_c> - expresie de tip caracter care este evaluat i trecut sub form de ir de caractere ctre obiectul OLE din cmpul general. Obiectul OLE trebuie s fie capabil s primesc i s proceseze irul de caractere. De exemplu, nu poate fi trimis un ir de caractere ctre un obiect grafic creat cu Paint Brush;

LINK - creaz o legtur ntre obiectul OLE i fiierul care conine obiectul. Obiectul OLE apare n cmpul general, dar definirea obiectului rmne n fiierul care-l conine. Dac se omite clauza, obiectul este nglobat n cmpul general;

CLASS <nume_clas> - specific o clas pentru un obiect de tip OLE, alta dect clasa implicit.

8.4.2. Modificarea nregistrrilor

107

Baze de date

Comanda CHANGE afieaz cmpurile unei tabele pentru editare (modificare).


CHANGE [FIELDS <list_cmpuri>][Scope] [FOR <expresie_L_1>] [WHILE <expresie_L_2>] [FONT <nume_liter> [,<mrime_liter>]] [FREEZE <nume_cmp>] [NOAPPEND] [NODELETE] [NOEDIT] Semnificaia clauzelor este urmtoarea:

FIELDS <list_cmpuri> - specific cmpurile care vor apare n fereastra de editare;

Scope specific domeniul de afiare a nregistrrilor (ALL, NEXT n, RECORD n,


REST);

FOR <expresie_L_1> - specific faptul c doar nregistrrile care satisfac condiia logic dat de expresie_L_1, vor fi afiate n fereastra de editare; WHILE <expresie_L_2> - atta vreme ct expresie_L_2 este adevrat vor fi afiate nregistrrile n fereastra de editare pentru modificare; FONT <nume_liter> [,<mrime_liter>] specific pentru fereastra de editare, tipul de liter i mrimea, cu care vor fi afiate datele; FREEZE <nume_cmp> - permite ca modificrile s fie fcute doar n cmpul specificat cu

nume_cmp. Celelalte cmpuri vor fi afiate dar nu pot fi editate (modificate);


NOAPPEND mpiedic utilizatorul de a aduga noi nregistrri (se blocheaz Append
Mode din meniul sistem View sau combinaia de taste [Ctrl] + [Y]);

NODELETE mpiedic marcarea nregistrrilor pentru tergere din interiorul ferestrei de editare. Includerea clauzei nu inhib comanda de marcare pentru tergere din interiorul unei proceduri;

NOEDIT mpiedic un utilizator s modifice o tabel. Includerea clauzei permite cutarea sau rsfoirea tabelei dar fr a-l putea modifica (edita).

Se poate folosi i comanda EDIT cu aceiai parametri ca i CHANGE.

Comanda BROWSE este una dintre cele mai utilizate comenzi pentru afiarea i editarea
nregistrrilor dintr-o tabel. Cu ajutorul tastelor [TAB] sau [SHIFT] + [TAB] se poate face deplasarea n cmpul urmtor sau anterior. Cu tastele [Page Up], [Page Down] se pot face deplasri pe vertical n tabel. Apsarea simultan a tastelor: [Ctrl] + [End] sau [Ctrl] + [W] - ieire cu salvare din fereastra de BROWSE; [Ctrl] + [Q] sau [Esc] ieire fr salvarea modificrilor.

8. Accesul i actualizarea datelor BROWSE [FIELDS <list_cmpuri>] [FONT <nume_font>[,<mrime_font>]] [STYLE <stil_font>] [FOR <expr_L_1>] [FREEZE <nume_cmp>] [LOCK <nr_cmpuri>] [NOAPPEND] [NODELETE] [NOEDIT | NOMODIFY] [VALID <expr_L_2>] [ERROR <mesaj>] [WHEN <expr_L_3>] [WIDTH <lime_afiare_cmp>] [IN [WINDOW] <nume_fer>] unde:

108

FIELDS <list_cmpuri> - specific care cmpuri vor aparea n fereastra BROWSE. Cmpurile vor fi afiate n ordinea specificat n list; FONT <nume_font>[,<mrime_font>] specific tipul literei i mrimea utilizate n fereastra Browse (de exemplu Font Courier, 16); STYLE <stil_font> - specific stilul literelor folosite n fereastra Browse (B- ngroat, Iitalic, U- subliniat); FOR <expr_L_1> - vor fi afiate numai acele nregistrri care ndeplinesc condiia dat de expresia logic expr_L_1; FREEZE <nume_cmp> - permite modificri doar ntr-un singur cmp, specificat prin

nume_cmp;
LOCK <nr_cmpuri> - specific numrul cmpurilor care pot fi afiate n partea stng, n fereastra Browse, fr a fi necesar deplasarea cu [TAB]-uri sau cursorul ferestrei (Scroll
Bar);

NOAPPEND mpiedic utilizatorul s adauge noi nregistrri (se inhib aciunea tastelor
[Ctrl] + [Y] i opiunea Append new record din meniul Table);

NODELETE mpiedic marcarea nregistrrilor pentru tergere n interiorul ferestrei BROWSE; NOEDIT | NOMODIFY mpiedic utilizatorul s fac modificri n fereastra Browse. VALID <expr_L_2> [ERROR <mesaj>] realizeaz o validare la nivel de nregistrare. Clauza se execut doar dac se fac modificri i se ncearc trecerea la o alt nregistrare. Dac expr_L_2 returneaz valoarea .T. (adevrat) utilizatorul se poate deplasa la urmtoarea nregistrare. n caz contrar, se genereaz un mesaj de eroare;

WHEN <expr_L_3> - se evaluaez condiia dat de expresia logic expr_L_3 atunci cnd utilizatorul mut cursorul la o alt nregistrare. Dac expresia returneaz valoarea .F. (fals) nregistrarea nu mai poate fi modificat (devine read-only);

WIDTH <lime_afiare_cmp> - limiteaz numrul de caractere afiate pentru toate cmpurile din fereastr;

109

Baze de date

IN [WINDOW] <nume_fer> - specific fereastra printe n interiorul creia va fi deschis fereastra Browse. Dac fereastra printe este mutat, se va muta i fereastra Browse.

Comanda REPLACE realizeaz actualizarea cmpurilor dintr-o nregistrare.


REPLACE <nume_cmp_1> WITH <expr_1> [ADDITIVE] [,<nume_cmp_2> WITH <expr_2> [ADDITIVE]] ... [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] [IN nr_zon_de_lucru |

alias_tabel]
unde:

<nume_cmp_1> WITH <expr_1> [,<nume_cmp_2> WITH <expr_2>] precizeaz c datele din nume_cmp_1 vor fi nlocuite cu valorile expresiei expr_1, datele din

nume_cmp_2 cu valorile expresiei expr_2 etc.


[ADDITIVE] pentru cmpurile de tip memo, adaug valoarea expresiei la sfritul cmpului memo (n continuare). Dac clauza lipsete, atunci cmpul memo va fi rescris cu valoarea dat de expresie;

Scope specific domeniul nregistrrilor care vor fi nlocuite (NEXT n, ALL, REST,
RECORD n);

FOR <expr_L_1> - specific faptul c vor fi nlocuite cmpurile desemnate, doar din nregistrrile pentru care evaluarea expresiei logice expr_L_1 are valoarea .T. (adevrat); WHILE <expr_L_2> - precizeaz condiia pentru care atta vreme ct expresia logic are valoarea .T., cmpurile desemnate vor fi modificate; IN nr_zon_de_lucru | alias_tabel specific zona de lucru sau alias-ul tabelei, n care nregistrrile vor fi actualizate.

Exemplu. n fiierul ESTUD2, s se modifice a treia nregistrare, cmpul ADRESA, cu o nou

valoare Cluj. USE ESTUD2 REPLACE ADRESA WITH "Cluj" FOR RECNO()=3 BROWSE CLOSE DATABASE

8. Accesul i actualizarea datelor

110

Comanda SET SAFETY ON | OFF determin afiarea de ctre sistemul VFP a unei casete de
dialog nainte de a suprascrie un fiier. SET SAFETY ON | OFF

Clauza ON este implicit i determin afiarea unei casete de dialog, pentru confirmarea de ctre utilizator a suprascrierii fiierului. Clauza OFF mpiedic afiarea casetei de confirmare a suprascrierii.

8.4.3. tergerea nregistrrilor

tergerea nregistrrilor se poate face la nivel logic sau fizic.

Comanda DELETE realizeaz tergerea la nivel logic. nregistrrile continu s existe n fiier
dar sunt marcate ca fiind terse. DELETE [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] [IN <nr_zon_de_lucru> | <alias_tabel>] unde:

Scope specific domeniul n care se face marcarea pentru tergere a nregistrrilor;


FOR <expr_L_1> - specific condiia pentru care vor fi marcate pentru tergere acele nregistrri pentru care expr_L_1 este adevrat; WHILE <expr_L_2> - vor fi marcate pentru tergere nregistrri, atta vreme ct condiia

expr_L_2 este adevrat. Funcia DELETED() returneaz o valoare logic care indic dac nregistrarea curent a fost
marcat pentru tergere. DELETED ([nr_zon_de_lucru | alias_tabel])

Comanda RECALL deselecteaz nregistrrile marcate pentru tergere.


RECALL [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] unde:

Scope precizeaz domeniul n care se aplic deselectarea;

111

Baze de date

FOR <expr_L_1> - doar nregistrrile pentru care expr_L_1 este adevrat (.T.) vor fi deselectate; WHILE <expr_L_2> - atta vreme ct expr_L_2 este adevrat, nregistrrile vor fi deselectate.

Comanda PACK face parte din comenzile de tergere la nivel fizic; va terge toate nregistrrile
marcate pentru tergere din tabela curent. PACK [MEMO] [DBF] unde:

MEMO permite tergerea fiierului MEMO ataat tabelei curente, dar nu i nregistrrile marcate pentru tergere (fiierul MEMO are acelai nume cu tabela, dar extensia este .FPT); DBF se vor terge nregistrrile marcate pentru tergere din tabela curent, dar nu afecteaz fiierul MEMO.

Comanda ZAP terge fizic toate nregistrrile din tabel, rmnnd doar structura tabelei. Este
echivalent cu comanda DELETE ALL, urmat de comanda PACK, dar este mult mai rapid. ZAP [nr_zon_de_lucru | alias_tabel]

Comanda DELETE FILE terge un fiier de pe disc.


DELETE FILE [<nume_fiier>] [RECYCLE] unde:

nume_fiier specific numele fiierului i extensia. Numele fiierului poate conine i


caracterul asterisc: DELETE FILE *.BAK va avea ca rezultat tergerea tuturor fiierelor cu extensia .BAK de pe disc. Comanda se execut pentru fiierele care nu sunt deschise (active);

RECYCLE fiierul nu va fi ters imediat de pe disc ci mutat n directorul RECYCLE BIN din sistemul WINDOWS 9x. Se mai poate folosi i comanda ERASE care are aceleai clauze.

8. Accesul i actualizarea datelor

112

Comanda SET DELETED specific dac sistemul VFP va procesa (terge) nregistrrile
marcate pentru tergere sau dac acestea sunt disponibile pentru a fi utilizate n alte comenzi. SET DELETED ON | OFF Semnificaia clauzelor:

Clauza OFF este implicit. nregistrrile marcate pentru tergere pot fi accesate de alte comenzi care opereaz cu nregistrri; Clauza ON are ca efect ignorarea nregistrrilor marcate pentru tergere, de comenzile care opereaz cu nregistrri.

Comanda COPY TO creaz un nou fiier cu acelai coninut ca i cel al tabelei curente.
COPY TO <nume_fiier> [FIELDS <list_cmpuri> | FIELDS LIKE <ablon> | FIELDS EXCEPT <ablon>][Scope] [FOR <exprL_1>] [WHILE <exprL_2>] [[WITH] CDX] | [[WITH] PRODUCTION] unde:

nume_fiier specific numele noului fiier care se creaz cu comanda COPY TO;
FIELDS <list_cmpuri> - specific n list cmpurile ce vor fi copiate n noul fiier. Dac clauza se omite, atunci toate cmpurile din tabela activ vor fi copiate. Prin declararea clauzei FIELDS se realizeaz operaia de proiecie (se selecteaz numai anumite cmpuri coloane - din tabel);

FIELDS LIKE <ablon> - specific cmpurile din tabela surs care se potrivesc unui ablon i vor fi copiate n noul fiier. Se poate folosi i caracterul asterisc (de exemplu comanda COPY TO TABELA1 FIELDS LIKE P*, A* va avea ca efect copierea n noul fiier a tuturor cmpurilor care ncep cu litera P i A);

FIELDS EXCEPT <ablon> - vor fi copiate toate cmpurile, mai puin cele care se ncadreaz n ablonul specificat;

Scope specific domeniul din care vor fi selectate nregistrrile care vor fi copiate.
FOR <exprL_1> - vor fi copiate doar acele nregistrri pentru care evaluarea expresiei logice exprL_1 are valoarea adevrat (.T.) WHILE <exprL_2> - specific condiia pentru care atta vreme ct expresia logic exprL_2 este adevrat, nregistrrile vor fi copiate n noul fiier.

113

Baze de date

Not Dac se utilizeaz clauzele [Scope], FOR sau WHILE, fr clauza FIELDS, se va

implementa operatorul relaional de selecie (se aleg doar o parte din nregistrri, cu toate cmpurile). Dac se folosete clauza FIELDS n combinaie cu clauzele [Scope], FOR sau WHILE, va rezulta o operaie compus: proiecie i selecie.

[WITH] CDX] | [[WITH PRODUCTION] la copiere se va crea i un fiier de index structural pentru noua tabel, care este identic cu cel al tabelei surs. Etichetele de index (TAG-urile) vor fi copiate n noul fiier de index structural. Cele dou clauze sunt identice. Clauzele nu se folosesc dac se creaz un fiier care nu este tabel VFP (extensia .DBF).

Comanda SET ALTERNATE direcioneaz la ecran sau la imprimant, ieirea rezultat din
folosirea comenzilor DISPLAY sau LIST. SET ALTERNATE ON | OFF sau SET ALTERNATE TO [<nume_fiier> [ADDITIVE]] unde:

ON direcioneaz ieirea ctre un fiier de tip text; OFF clauza implicit, dezactiveaz ieirea ctre un fiier de tip text; TO nume_fiier creaz un fiier de tip text, cu extensia implicit .TXT ; ADDITIVE clauz prin care ieirea este adugat la sfritul fiierului specificat cu

nume_fiier. Dac se omite clauza, coninutul fiierului de ieire este suprascris. Comanda CLOSE ALTERNATE nchide un fiier deschis cu comanda SET ALTERNATE.
Sintaxa comenzii este CLOSE ALTERNATE
8.4.5. Relaii ntre tabele

Comanda SET RELATION TO stabilete o legtur ntre dou tabele deschise.


SET RELATION TO [<expresie1> INTO <nr_zon_de_lucru> | <alias_tabel> [, <expresie2> INTO <nr_zon_de_lucru> | <alias_tabel>...] [IN <nr_zon_de_lucru> | <alias_tabel>] [ADDITIVE]]

8. Accesul i actualizarea datelor unde:

114

expresie1 specific expresia relaional care stabilete legtura ntre tabela-printe i


tabela-fiu. Expresia relaional este de obicei cmpul indexat din tabela-fiu. Indexul pentru tabela-fiu poate proveni dintr-un fiier simplu de index (.IDX) sau un fiier de index compus (.CDX);

INTO nr_zon_de_lucru | alias_tabel specific numrul zonei de lucru sau alias-ul tabelei-fiu; IN nr_zon_de_lucru | alias_tabel specific zona de lucru sau alias-ul tabelei-printe; ADDITIVE clauza pstreaz toate celelalte relaii stabilite anterior n zona de lucru specificat.

Pentru a stabili o relaie ntre dou tabele trebuie ndeplinite urmtoarele condiii:

cele dou tabele ntre care se stabilete relaia tata-fiu trebuie s fie indexate dup aceeai cheie (cmp), care face legtura ntre ele; cele dou tabele trebuie deschise n zone de lucru diferite.

Exemplul 1.

Tabelele legate printr-o relaie au n general un cmp comun. De exemplu presupunem c avem o tabel STUDENT, care conine informaii despre studeni i are cmpuri pentru nume, adres, i un cod unic al studentului (matr). O a doua tabel, NOTE, conine informaii despre notele studentului (matr, cod_disc, nota), care va avea de asemenea un cmp pentru codul unic al studentului (matr). Se pot uni astfel informaiile despre studeni cu cele despre note. Comanda SET RELATION leag cele dou tabele prin cmpul comun matr. Pentru a stabili relaia, tabela-fiu (NOTE) trebuie s fie indexat dup cmpul comun. Dup stabilirea relaiei, de cte ori mutm pointer-ul pe o nregistrare n fiierul STUDENT, pointer-ul din fiierul NOTE (fiu) se va muta pe nregistrarea care are acelai cod matr corespunztor n fiierul STUDENT. Fiier discipline.dbf Cod_disc Denumire Exam Coloc Tip_curs N(3) C(60) L L C(1) Fiier student.dbf Matr Nume Adresa An_stud Grupa Media N(5) C(50) m C(2) N(2) N(5,2) Fiier note.dbf Matr Cod_disc Nota N(5) N(3) N(2)

115 Integr
Programul pentru calculul mediilor generale

Baze de date

PUBLIC MEDG, INTEGRAL SELECT 2 USE STUDENT SELECT 3 USE NOTE FOR I=1 TO RECCOUNT(2) GOTO I MATRICOLA=MATR INTEGRAL=.T. MEDG=0 K=0 SELECT 3 LOCATE FOR MATR=MATRICOLA DO WHILE FOUND(3) K=K+1 MEDG=MEDG+NOTA IF NOTA<5 THEN INTEGRAL=.F. ENDIF CONTINUE ENDDO MEDG=MEDG/K SELECT 2 REPLACE MEDIA WITH MEDG, INTEGR WITH INTEGRAL ENDFOR SELECT 2 SORT TO TEMP1 ON NUME/A CLOSE DATABASE DELETE FILE 'STUDENT.DBF' RENAME 'TEMP1.DBF' TO 'STUDENT.DBF' SELECT 2

8. Accesul i actualizarea datelor USE STUDENT REPORT FORM MEDIIG PREVIEW CLOSE DATABASES

116

Programul pentru stabilirea relaiilor

SELECT 2 USE STUDENT SELECT 3 USE DISCIPLINE SELECT 4 USE NOTE SELECT 2 INDEX ON MATR TAG MATR ADDITIVE && se indexeaz dup cmpul matr SELECT 3 INDEX ON COD_DISC TAG COD_DISC && se indexeaz dup cmpul cod_disc SELECT 4 SET ORDER TO TAG MATR OF STUDENT.CDX IN STUDENT && se stabilete indexul principal SET RELATION TO MATR INTO STUDENT ADDITIVE && SE stabilete relaia ntre student i note SET ORDER TO TAG COD_DISC OF DISCIPLINE.CDX IN DISCIPLINE && se stabilete indexul principal

117 SET RELATION TO COD_DISC INTO DISCIPLINE ADDITIVE && se stabilete relaia ntre discipline, note REPORT FORM REPORT1 PREVIEW SET RELATION OFF INTO STUDENT SET RELATION OFF INTO DISCIPLINE CLOSE DATABASE

Baze de date

Pentru crearea raportului REPORT1.FRX se deschid tabelele: STUDENT, NOTE, DISCIPLINE, se acceseaz meniul File/New opiunea Report. Pagina de raport este structurat n trei seciuni: Page Header (antet), Detail (coninut), Page
Footer (subsol pagin). Datele pot fi grupate dup una sau mai multe variabile, introducndu-se n GroupHeader; Detail sau Group Footer (Figura 1).

In raport se includ urmtoarele cmpuri de date (Figura 1): -

recno() numrul nregistrrii din tabel, student.nume, student.media, note.nota, discipline.denumire.


Raportul poate conine i elemente grafice: linii / chenare utilizate pentru construcia de tabele sau imagini.

Fig. 1
Exemplul 2.

Presupunem c avem o tabel CLIENI, care conine informaii despre clieni, cmpuri pentru

nume, adres, i un cod unic al clientului (cod_client). O a doua tabel, FACTURI, conine

8. Accesul i actualizarea datelor

118

informaii despre facturi (numr, cantitate, produse etc.), care va avea de asemenea un cmp pentru codul clientului. Se pot uni astfel informaiile despre clieni cu cele despre facturi. Comanda SET RELATION leag cele dou tabele prin cmpul comun cod_client. Pentru a stabili relaia, tabela-fiu (FACTURI) trebuie s fie indexat dup cmpul comun. Dup stabilirea relaiei, de cte ori se mut pointer-ul n fiierul CLIENI pe o nregistrare, pointer-ul din fiierul FACTURI (fiu) se va muta pe nregistrarea care are acelai cod_client n fiierul CLIENI. SELECT 2 USE CLIENTI SELECT 3 USE FACTURI INDEX ON COD_CLIENT TAG COD_CLIENT ADDITIVE && se indexeaz cmpul cod_client SELECT 2 SET ORDER TO TAG COD_CLIENT OF FACTURI.CDX IN FACTURI && se stabilete indexul principal SET RELATION TO COD_CLIENT INTO FACTURI ADDITIVE && se stabileste relatia intre clieni, facturi

Comanda RENAME redenumete un fiier.


RENAME <nume_fiier_vechi> TO <nume_fiier_nou> unde:

nume_fiier_vechi TO nume_fiier_nou2 specific numele fiierului surs i noul nume. Se


va include extensia pentru fiecare fiier, dac nu, implicit se va atribui extensia .DBF. Comanda RENAME nu se folosete pentru o tabel care aparine unei baze de date. Pentru a schimba numele unei tabele dintr-o baz de date se folosete comanda RENAME TABLE. Numele fiierului surs i cel al fiierului nou creat poate cuprinde i caracterul asterisc (RENAME *.PRG TO *.BAK).

Comanda DISPLAY FILES


Afieaz informaii despre un fiier. DYSPLAY FILES [ON <drive>] [LIKE <ablon>] [TO PRINTER [PROMPT]] | TO FILE <nume_fiier>]

119 Unde:

Baze de date

ON <drive> - specific calea ctre fiiere; LIKE <ablon> - specific condiia pentru care vor fi afiate informaii, doar despre acele fiiere care se ncadreaz n ablon; TO PRINTER [PROMPT] | TO FILE <nume_fiier> - direcioneaz informaiile la imprimant (cu afiarea unei casete de dialog, clauza PROMPT) sau ntr-un fiier.

Informaii identice se pot obine i cu comanda DIR care are aceleai clauze.

9. Programarea procedural

120

9. Programarea procedural
Mediul VFP ofer pe lng modul de lucru n fereastra de comand (stil interpretor de comenzi) i posibilitatea de a dezvolta programe surs n limbajul propriu sistemului (stil compilator), prin comenzi i funcii care descriu datele i pot efectua prelucrrile necesare dezvoltrii aplicaiei. Programul surs folosete att tehnica de programare procedural (structurat, modular) ct i cea de programare pe obiecte. ntr-un program surs pot fi utilizate de asemenea i comenzile din nucleul SQL, care permit o programare descriptiv i de manipulare a datelor la nivel de tabel.

9.1. Programarea structurat


Maniera de programare care folosete numai cele trei structuri de baz: structura liniar, structura alternativ i structura repetitiv, este cunoscut sub numele de programare structurat. Se poate demonstra ca orice program poate fi realizat utiliznd numai cele trei structuri de baz Limbajul VFP are comenzi specifice pentru implementarea celor trei structuri de program fundamentale: secvenial, alternativ (IF i CASE) i repetitiv (WHILE, FOR i SCAN), dar nu are comenzi pentru salt necondiionat. Tehnica programrii modulare se utilizeaz la rezolvarea unor probleme complexe i implic descompunerea problemei n pri componente (module), conform unei metode (top-down, bottomup) i analiza lor, care stabilete:

caracteristicile principale ale fiecrui modul; legturile dintre module; alegerea unui modul principal (program, meniu sau videoformat); ierarhizarea modulelor fa de ansamblu.

Aceste subprobleme sunt apoi programate utiliznd tehnica programrii structurate. Limbajul VFP ofer facilitatea de creare a unui proiect (12.2. Figura 1), n care aceste module pot fi declarate n una din categoriile implementate:

Data se pot declara baze de date (Databases), tabele libere (Free Tables), interogri

(Query);
Class Libraries librrii de clase; Documents - se pot declara videoformate (Forms), rapoarte (Reports), etichete (Labels); Code programe (Programs), aplicaii (Applications); Other alte componente: meniuri (Menus), fiiere de tip text (Text Files); Other Files alte fiiere utilizate: icon-uri, fiiere .BMP etc.

121

Baze de date

Toate aceste componente sunt nglobate n proiect, care constituie baza pentru crearea aplicaiei n format executabil.
9.1.1. Structura liniar

O structur liniar este constituit dintr-o succesiune de comenzi, dintre cele admise i n modul de lucru interpretor (n fereastra de comenzi). O astfel de structur este o secven de comenzi care nu conine structuri alternative sau repetitive, ci doar comenzi, funcii i atribuiri de valori unor variabile.

Comenzi de afiare/citire la monitor


Comanda utilizat pentru afiarea la monitor, a unei variabile/constante de tip caracter sau numeric este: @<linie>,<coloana> SAY <expr> [PICTURE <exp_c1>] | [FUNCTION <exp_c2>] [FONT <exp_c3>[,<exp_n>]] [STYLE <exp_c4>] unde:

@<linie>,<coloana> - caracterul @ fixeaz coordonatele de afiare, date sub form de linie i coloan. SAY <expr> - comanda de afiare pe ecran, la coordonatele fixate, a unei expresii sau a unei funcii. PICTURE <expr_c1> - formatul de afiare (se utilizez codurile din tabel indicndu-se formatul ntre apostrof: 9999.99, pentru date de tip numeric). FUNCTION<exp_c2> - ofer o alternativ la stabilirea formatului.

exp_c2 Semnificaie

A L N X
9

Caractere alfabetice Date de tip logic (.T., .F., .Y., .N.) Litere i cifre Orice caractere Cu date de tip caracter permite numai numere. Cu date de tip numeric permite numere i semne algebrice

9. Programarea procedural

122

# $

Permite cifre, semne algebrice i spaii Afieaz semnul curent al monedei (definit cu SET CURRENCY)

FONT <exp_c3>[,<exp_n>] specific numele tipului de liter (font) utilizat i mrimea acesteia. [STYLE <exp_c4> - definirea stilului de afiare (B bold, I italic, N normal, U subliniat).

Exemplu. Urmtoarea secven de comenzi:

@1,1 SAY 'TEST' FUNCTION 'A' FONT 'ARIAL',14 STYLE 'BIU' S=10 @3,1 SAY S PICTURE '99.99' WAIT WINDOW && afiarea unei ferestre de continuare CLEAR are ca efect afiarea n spaiul de lucru, n linia 1, coloana 1, a cuvntului TEST (ngroat, nclinat, subliniat), iar n linia 3, coloana 1, valoarea variabilei S cu formatul ales. Se pot afia n spaiul de lucru sau tipri obiecte de tip BMP (imagini) cu comanda @<linie>,<coloana> SAY <fiier_imag>BITMAP|<cmp_GEN> [STYLE <exprC>] [CENTER] [ISOMETRIC] | [STRETCH] [SIZE <expN1>,<expN2>] unde:

<fiier_imag>BITMAP|<cmp_GEN> - clauza care face referire la fiierul de tip BMP (Bitmap Picture) sau imaginea coninut ntr-un cmp general dintr-un fiier. <fiier_imag> este o expresie de tip caracter, delimitat de apostrof sau ghilimele;

STYLE <exprC> asigneaz atributul de opac Q sau transparent T, pentru obiectele inserate; CENTER clauza pentru plasarea obiectului BMP n centrul unei arii determinate prin clauza SIZE sau delimitate de coordonatele linie, coloan; ISOMETRIC | STRETCH clauze pentru cazul n care zona de afiare a obiectului BMP este mai mic dect dimensiunea real a acestuia. ISOMETRIC redimensioneaz obiectul la dimensiunea ariei, cu pstrarea proporiilor. STRECH creaz un raport separat pentru fiecare coordonat Ox, Oy, cu care obiectul se poate distorsiona pe vertical sau orizontal.

123

Baze de date

SIZE <expN1>,<expN2>] stabilete coordonatele colului din dreapta jos al zonei de afiare.

Exemplu.

@1,1 SAY "1.JPG" BITMAP CENTER ISOMETRIC WAIT WINDOW CLEAR

Comanda
@<linie>,<coloana> GET <var> [PICTURE <expr_c>] permite editarea variabilei de memorie var (pentru a introduce o nou valoare), unde:

PICTURE <expr_c> - reprezint formatul de editare.

Se poate combina operaia de afiare cu cea de editare a unei variabile, caz n care vom utiliza comanda: @<linie>,<coloana> SAY <mesaj> GET <var> ntotdeauna o comand (sau mai multe comenzi) @...GET va fi nsoit de o comand READ. Practic se poate construi o machet cu cmpuri de afiare @SAY i cmpuri de citire @GET, cursorul se deplaseaz de la o linie la alta apasnd tasta [ENTER] sau [TAB] i napoi cu [SHIFT] + [TAB] (permite reactualizarea unor cmpuri nainte de citirea efectiv). La apsarea tastei
[ENTER] la ultima linie GET se va executa comanda READ i se va citi ntreg ecranul.

Comanda READ realizeaz citirea tuturor cmpurilor editate cu comanda GET.


READ [CYCLE] [MODAL] [VALID <expr_L>|<expr_N>] [WHEN <expr_L1>] unde:

CYCLE clauz care mpiedic ncheierea citirii variabilelor editate, atunci cnd cursorul depete primul sau ultimul obiect creat cu GET. Dac utilizatorul se plaseaz pe ultimul obiect GET i apas [ENTER] sau [TAB], cursorul se va deplasa pe primul obiect GET. Pentru a ncheia o comand READ ciclic, se apas tasta [Esc] sau tastele [CTRL] + [W] ;

MODAL este clauza care previne activarea ferestrelor care nu sunt implicate n execuia comenzii READ;

9. Programarea procedural

124

VALID expr_L | expr_N clauz care valideaz valorile introduse n cmpul GET, la terminarea comenzii READ. Dac expresia logic returneaz valoarea adevrat (.T.) comanda READ se ncheie;

WHEN expr_L1 clauza condiioneaz execuia comenzii READ de evaluarea expresiei logice. Dac expresia returneaz valoarea fals comanda READ este ignorat.

9.1.2. Structura alternativ

Structura alternativ este implementat n cele dou forme:

cu dou ramuri (comenzile IF, IIF); cu mai multe ramuri (comanda DO CASE).

Comanda IFENDIF execut condiionat un set de comenzi, n funcie de valoarea logic


returnat de o expresie evaluat. Expresia evaluat nu furnizeaz dect dou alternative (ramuri) corespunztoare valorilor adevrat (THEN) sau fals (ELSE). IF <exprL> [THEN] <comenzi> [ELSE <comenzi>] ENDIF unde:

exprL specific expresia logic ce este evaluat. Dac cele dou clauze THEN i ELSE
sunt prezente i expresia este adevrat vor fi executate comenzile de pe ramura THEN, dac expresia este fals, vor fi executate comenzile de pe ramura ELSE;

Dac expresia logic este fals i ramura ELSE nu este inclus, va fi executat prima comand care urmeaz clauzei ENDIF; Clauza ENDIF trebuie inclus la orice declarare a unui IF. O comand IF poate include mai multe blocuri IFENDIF pe ramurile sale (imbricare), cu condiia ca nchiderea lor (cu ENDIF) s se fac n aceai ordine ca i deschiderea (nu se admite intersecia blocurilor).

Exemplu. n fiierul PRODUSE, s se caute un anumit produs; dac este gsit s se afieze

cmpurile PRODUS, CANT, PU, dac nu, s se afieze un mesaj. CLEAR USE PRODUSE GET EXPR 'INTRODUCETI CONDITIA DE LOCALIZARE' TO GTEMP;

125 TYPE 'L' DEFAULT 'PRODUS = ""' LOCATE FOR &gctemp && caut produsul cu comanda LOCATE IF FOUND( ) && dac este gsit DISPLAY FIELDS PRODUS,CANT,PU&& afieaz cmpurile PRODUS, CANT, PU ELSE && dac nu ? 'CONDITIA ' + GTEMP + ' NU A FOST GASITA ' && afieaz mesajul ENDIF CLOSE TABLE

Baze de date

Funcia IIF returneaz pe baza evalurii unei expresii logice, una din cele dou valori ale unei
expresii de tip numeric, caracter, moned, dat calendaristic sau timp. IIF(expr_L, expr_1, expr_2) unde: expr_L specific expresia logic pe care funcia o evalueaz.

Dac expresia logic este adevrat, va returnat valoarea expresiei expr_1. Dac expresia logic este fals va fi returnat valoarea dat de expr_2.

Aceast funcie este cunoscut i sub numele de IF scurt (imediat). Este folosit mai ales la expresiile care condiioneaz afiarea coninutului unui cmp, n rapoarte sau etichete. Execuia sa este mai rapid dect echivalentul su IFENDIF.

Comanda DO CASEENDCASE
Execut primul set de comenzi ale cror expresie condiional este adevrat. Comanda este echivalentul unor instruciuni IF n cascad. DO CASE CASE <expr_L_1> <comenzi1> CASE <expr_L_2> <comenzi2>

9. Programarea procedural .... CASE <expr_L_n> <comenzi_n> [OTHERWISE <comenzi>] ENDCASE Aciunea comenzii:

126

CASE <expr_L_1>

<comenzi1>... - cnd prima expresie logic CASE ntlnit, are

valoarea adevrat, blocul de comenzi va fi executat pn la apariia unei noi comenzi CASE sau a clauzei ENDCASE. Execuia programului continu cu prima instruciune executabil care urmeaz lui ENDCASE;

Dac expresia din prima clauza CASE este fals, blocul de comenzi aferent este ignorat i se trece la evaluarea expresiei logice a urmtoarei clauze CASE; Dup gsirea primei expresii logice adevrat, orice alt clauz CASE pentru care expresia logic este adevrat, va fi ignorat; OTHERWISE <comenzi> - dac toate expresiile logice CASE au returnat valoarea fals, clauza ofer o alternativ pentru introducerea unui bloc de comenzi.

Exemplu

@1,1 SAY DATI N= GET N READ DO CASE CASE N = 0 ? 'ZERO' CASE N > 0 ? 'POZITIV' OTHERWISE ? 'NEGATIV' ENDCASE WAIT WINDOW Apasati Enter
9.1.3. Structura repetitiv

127

Baze de date

Pentru descrierea structurilor repetitive limbajul pune la dispoziie urmtoarele tipuri de comenzi:

ciclul de repetiie cu numr finit de pai - comanda FOR...ENDFOR; ciclu cu numr nedefinit de pai, condiionat anterior - comanda DO WHILE...ENDDO; o comand de parcurgere a nregistrrilor unei tabele de la nceput la sfritul fiierului comanda SCAN...ENDSCAN.

Comanda FOR...ENDFOR execut un bloc de comenzi de un numr de ori precizat.


FOR <var>=<val_iniial> TO <val_final> [STEP <val_increment>] <comenzi> [EXIT] [LOOP] ENDFOR | NEXT unde:

var specific o variabil sau un element de masiv, de tip ntreg, care acioneaz ca un
contor (variabil de ciclare);

val_iniial, val_final valoarea iniial, respectiv final a contorului;


STEP <val_increment> - domeniul dat de valoarea iniial / final poate fi parcurs cu incrementul 1 (implicit) sau cu un pas (increment) precizat prin val_increment. Dac

val_increment este negativ contorul este decrementat;


comenzi specific blocul de comenzi care vor fi executate n interiorul ciclului. EXIT permite ieirea forat din ciclu (nainte de atingerea valorii finale a variabilei de ciclare). n program va fi executat prima comand care urmeaz clauzei ENDFOR; LOOP returneaz controlul comenzii FOR, fr a se mai executa comenzile dintre LOOP i ENDFOR. Contorul este incrementat sau decrementat ca i cum s-ar ajunge la clauza ENDFOR.
Exemplu. Din fiierul CLIENTI, se vor afia la monitor, din primele 10 nregistrri, din doi n doi,

clienii. USE CLIENTI STORE 2 TO VI,K STORE 10 TO VF GOTO I DISPLAY FIRMA && valoarea iniial i pasul contorului && valoarea final a contorului && poziionare pe nregistrarea I && se afieaz numele firmei de pe poziia I din fiierul CLIENI

FOR I=VI TO VF STEP K && I variabila contor

9. Programarea procedural ENDFOR CLOSE TABLE && sfritul ciclului FOR

128

Comanda DO WHILE ... ENDDO execut un bloc de comenzi n interiorul unui ciclu
condiionat anterior. DO WHILE <expr_L> <comenzi> [LOOP] [EXIT] ENDDO unde:

expr_L specific o expresie logic a crei valoare de adevr determin dac blocul de
comenzi cuprins ntre DO WHILE i ENDDO va fi executat. Atta vreme ct condiia logic este adevrat, comenzile vor fi executate;

LOOP returneaz controlul comenzii DO WHILE. Comenzile ntre LOOP i ENDDO nu vor fi executate; EXIT transfer controlul, din interiorul ciclului DO WHILE, ctre prima comand care urmeaz clauzei ENDDO. Clauza este echivalent cu o ieire forat din ciclu; Fiecare comand DO WHILE trebuie s aib un corespondent (s se nchid) ENDDO.

Exemplu. Din fiierul PRODUSE s se afieze totalul produselor n stoc, care au preul mai mare de

30$. CLEAR USE PRODUSE STOC=0 DO WHILE !EOF() IF PU<30 SKIP ENDIF STOC=STOC+CANT ? PRODUS,CANT SKIP ENDDO CLOSE TABLES ?STOC

129

Baze de date

Comanda SCAN...ENDSCAN realizeaz mutarea pointer-ului prin toate nregistrrile din


tabela curent i execut un bloc de comenzi pentru nregistrrile care corespund condiiilor specificate. SCAN unde: [Scope] [FOR <expr_L_1>] [WHILE <expr_L_2>] [comenzi] [LOOP] [EXIT] [ENDSCAN]

Scope specific domeniul nregistrrilor care vor fi scanate (clauze: ALL, NEXT n,
RECORD n, REST). Clauza implicit este ALL;

FOR expr_L_1 execut comenzile doar pentru nregistrrile pentru care expresia logic

expr_L_1 este adevrat. Includerea clauzei permite filtrarea nregistrrilor, eliminnd pe


cele pe care nu trebuie s fie scanate;

WHILE expr_L_2 specific o condiie pentru care blocul de comenzi va fi executat atta vreme ct valoarea expresiei logice expr_L_2 este adevrat; LOOP returneaz controlul napoi la comanda SCAN (se reia execuia comenzii); EXIT transfer programului controlul din interiorul buclei SCAN...ENDSCAN, la prima comand care urmeaz clauzei ENDSCAN; ENDSCAN indic sfritul procedurii de scanare.

Exemplu. Utiliznd comanda SCAN, s se afieze din fiierul CLIENI, numele firmei, oraul i

persoana de contact, cu care o firm are contracte n FRANA. USE CLIENTI SCAN FOR UPPER(TARA)=FRANTA ? FIRMA,ORAS,CONTACT ENDSCAN CLOSE TABLES

9.2. Modularizarea programelor


Modularizarea programelor, n cazul unor aplicaii complexe, se poate realiza prin proceduri i funcii definite de utilizator. Definirea unei funcii utilizator, reprezint un bloc de comenzi independent, care primete un set de parametrii de la programul apelant i returneaz acestuia o valoare ca rezultat al prelucrrii parametrilor de intrare.

9. Programarea procedural

130

Definirea unei proceduri de ctre utilizator, este de asemenea un bloc de comenzi, care prelucreaz parametrii transmii din programul apelant. Dup prelucrare controlul este redat programului apelant. Din punct de vedere al locaiei, funciile se pot defini fie n programul apelant, fie ntr-o librrie sau pot fi salvate n fiiere externe, de tip .PRG.
9.2.1. Proceduri

Asocierea procedurilor cu programul apelant se face cu comanda: SET PROCEDURE TO [<fiier_1> [,<fiier_2>,...]] [ADDITIVE] unde:

fiier_1, fiier_2 specific succesiunea n care vor fi deschise fiierele. Se pot declara mai
multe nume de fiiere care conin proceduri. Aceast opiune permite crearea unor librrii de sine stttoare de funcii care pot fi specificate separat.

ADDITIVE se deschid fiierele cu proceduri din lista specificat, fr a fi nchise fiierele cu proceduri, deja deschise.

Cu comanda RELEASE PROCEDURE [<fiier_1> [,<fiier_2>,...]] se nchid fiierele individuale. Variabilele definite n interiorul procedurilor i funciilor utilizator, sunt la nivel local (nu se vd din afara procedurilor sau funciilor). Structural o procedur, cuprinde urmtoarele elemente: PROCEDURE nume_procedur PARAMETERS list_parametri

specific numele procedurii create declararea parametrilor formali de intrare bloc de comenzi, corpul procedurii ieirea din procedur, opional cu returnarea unei expresii calculate.

Bloc de comenzi
RETURN [expresie] unde:

PROCEDURE este o declaraie n interiorul unui program, care specific nceputul unei proceduri i definete numele procedurii. Numele procedurii poate ncepe cu o liter sau

131

Baze de date

caracterul _ (underscore) i poate conine orice combinaie de litere, numere i caractere underscore. Lungimea maxim a numelui este de 254 caractere;

PARAMETERS asigur trecerea parametrilor din programul apelant n procedur. Se pot transmite maxim 27 de parametri n procedur. Lista parametrilor poate cuprinde: expresii, variabile de memorie, nume de tabele, nume de cmpuri din tabele de date, constante, care sunt transmise prin referin;

RETURN [expresie] returneaz controlul i opional o expresie, n programul apelant; Parametrii pot fi transmii n procedur, prin includerea clauzei PARAMETERS n procedur, sau prin plasarea unei liste de parametri imediat dup PROCEDURE

nume_procedur. Lista se inchide ntre paranteze, iar parametrii sunt separai cu virgul. Apelul unei proceduri sau program se face cu comanda
DO <nume_procedur> | <nume_program> WITH <list_parametri>
Observaii

Metoda folosit la transmiterea parametrilor la proceduri sau funcii este implicit prin valoare, iar la programe prin referin; Variabilele transmise ctre procedur cu comanda DO...WITH sunt transmise prin referin.

Sistemul VFP are anumite restricii legate de utilizarea comenzii DO:

pot fi imbricate maxim 32 de apeluri DO (program principal | procedura1 | procedura2 |...); nu se poate face apel dintr-o procedur la ea nsi (nu admite recursivitatea direct); din interiorul unei proceduri nu poate fi apelat programul/procedura apelant (nu admite recursivitatea indirect).

9.2.2. Funcii

Elementele unei funcii definite de utilizator (UDF) sunt: FUNCTION nume_funcie


specific numele funciei create bloc de comenzi, corpul funciei

Bloc de comenzi

9. Programarea procedural RETURN [expresie]

132

ieirea din funcie, opional cu returnarea unei expresii calculate.

Implicit parametrii sunt transmii n funcie prin valoare. Numrul maxim de parametri care poate fi transmis, este 27. Parametrii pot fi transmii n funcie, prin includerea clauzei PARAMETERS n funcie, sau prin plasarea unei liste de parametri imediat dup FUNCTION

nume_funcie. Lista se inchide ntre paranteze, parametrii sunt separai cu virgul. Comanda
SET UDFPARAMS TO VALUE | REFERENCE specific dac parametrii sunt transmii ctre o funcie definit de utilizator (UDF) prin valoare sau prin referin. Cnd o variabil este transmis prin valoare, valoarea variabilei poate fi modificat n funcia definit de utilizator, dar valoarea original a variabilei n programul apelant nu se modific. Cnd o variabil este transmis prin referin i funcia definit de utilizator modific valoarea variabilei transmise, valoarea original a variabilei n programul apelant de asemenea se modific. Implicit parametrii sunt transmii prin valoare. Se poate fora transmiterea parametrilor ctre o funcie utilizator, n funcie de opiunea aleas n comanda SET UDFPARAMS. Variabilele se nchid ntre paranteze pentru a fora transmiterea prin valoare. Forarea transmiterii unui parametru prin referin se face punnd n faa parametrului caracterul @.
Exemplul 1.

*** Transmiterea Variabilelor Prin Valoare *** CLEAR SET TALK OFF WAIT 'APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN VALOARE WINDOW SET UDFPARMS TO VALUE STORE 1 TO GNX *** Valoarea Lui Gnx Este Neschimbata *** @ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(GNX)) @ 4,2 SAY 'VALOARE GNX: ' + STR(GNX) *** TRANSMITEREA VARIABILEI PRIN REFERINTA***

133

Baze de date

WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN REFERINTA' WINDOW CLEAR SET UDFPARMS TO REFERENCE STORE 1 TO GNX *** Valoarea Lui Gnx Se Schimba *** @ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(GNX)) @ 4,2 SAY 'VALUE OF GNX: ' + STR(GNX) SET UDFPARMS TO VALUE *** Functie Utilizator (Udf) Care Aduna Unu La Un Numar *** FUNCTION PLUSUNU PARAMETER GNZ GNZ = GNZ + 1 RETURN GNZ Urmtorul exemplu arat cum sunt transmise variabilele prin valoare i prin referin, utiliznd parantezele i caracterul @.
Exemplul 2.

*** Transmiterea Variabilei Prin Valoare *** CLEAR SET TALK OFF WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN VALOARE ' WINDOW STORE 1 TO GNX @ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU((GNX))) @ 4,2 SAY 'VALOAREA GNX: ' + STR(GNX) *** Transmiterea Variabilei Prin Referinta *** WAIT ' APASATI O TASTA PENTRU A TRANSMITE VARIABILA PRIN REFERINTA ' WINDOW CLEAR STORE 1 TO GNX @ 2,2 SAY 'VALOARE UDF: ' + STR(PLUSUNU(@GNX))

9. Programarea procedural @ 4,2 SAY 'VALOARE GNX: ' + STR(GNX) FUNCTION PLUSUNU(GNZ) GNZ = GNZ + 1 RETURN GNZ

134

135

Baze de date

10. Comenzi ale nucleului SQL


Sistemul VFP suport comenzile SQL care opereaz la nivel de tabel (relaie) i o singur comand SQL poate fi folosit pentru a nlocui o ntreag secven de comenzi. Sistemul VFP poate executa urmtoarele comenzi SQL: 1. Comanda SELECT SQL Comanda specific criteriile pe baza crora se bazeaz i lanseaz interogarea (Query). Sistemul VFP interpreteaz interogarea i extrage datele cerute din tabel (tabele). Comanda SELECT pentru interogare poate fi lansat din urmtoarele zone:

n fereastra de comenzi (modul de lucru interpretor); din interiorul unui program VFP; utiliznd asistentul de proiectare pentru interogare (Query Designer).

Sintaxa comenzii: SELECT [ALL | DISTINCT] [TOP expr_num [PERCENT]] alias.]art_selectat [AS nume_coloan] [[alias.]art_selectat [AS nume_coloan]] ROM [FORCE] nume_baz_de_date!]tabel [[AS]

alias_local] [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN nume_baz_de_date!]tabel [[AS] alias_local] [ON condiie_join [[INTO destinaie] | [TO FILE nume_fiier [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN ]] [NOCONSOLE] [PLAIN]
[WHERE condiie_join [AND condiie_join [AND | OR condiie_filtrare [AND | OR

condiie_filtrare]] [GROUP BY coloan_grup [,coloan_grup] [HAVING condiie_filtrare]


[UNION [ALL] comand_selectare] [ORDER BY articol_ordonat [ASC | DESC] [,articol_ordonat [ASC | DESC]]] Semnificaia clauzelor:

SELECT precizeaz cmpurile, constantele i expresiile care vor fi afiate n urma interogrii; ALL implicit se vor afia toate nregistrrile din tabel care ndeplinesc condiiile de selecie n rezultatul interogrii; DISTINCT se exclud duplicatele din nregistrrile care ndeplinesc condiiile de selecie. Argumentul se poate folosi o singur dat n cadrul unei clauze SELECT;

10. Comenzi ale nucleului SQL

136

TOP expr_num [PERCENT] rezultatul interogrii va conine un numr specificat de nregistrri sau un anumit procent din nregistrri. Dac se folosete clauza TOP trebuie inclus i clauza ORDER BY, care specific coloana din care clauza TOP, va determina numrul de nregistrri (linii) care vor fi incluse n rezultatul interogrii. Se pot specifica nregistrrile n domeniul 1..32767. nregistrrile care au valori identice pentru coloanele specificate cu clauza ORDER BY sunt incluse n rezultatul interogrii. De exemplu, dac se specific valoarea 10 pentru expr_num, rezultatul interogrii poate conine mai mult de 10 nregistrri dac exist n tabel mai mult de 10 linii care au valori identice n coloanele specificate cu clauza ORDER BY;

alias. se folosete pentru identificarea numelui cmpurilor (coloanelor) prin calificare.


Fiecare cmp specificat cu art_selectat va genera o coloan n rezultatul interogrii. Dac dou sau mai multe cmpuri au acelai nume, se va include alias-ul tabelei i caracterul punct (.) n faa numelui cmpului, pentru a preveni duplicarea coloanei (calificare cu punct);

art_selectat specific cmpul care trebuie inclus n rezultatul interogrii. Acesta poate fi:
o numele unui cmp din tabela care apare n clauza FROM; o constant care specific o valoare, care va apare n fiecare nregistrare din rezultatul

interogrii;
o expresie care poate fi numele unei funcii utilizator;

AS nume_coloan specific numele coloanei care va apare la ieire, n rezultatul interogrii. Aceast opiune este util atunci cnd art_selectat este o expresie sau conine un cmp calculat i vrem s dm un nume sugestiv coloanei respective. Nu sunt admise dect caracterele care se folosesc la stabilirea numelui cmpurilor la proiectarea tabelelor (de exemplu nu se folosesc spaii);

FROM se declar tabelele care conin datele pe care vrem s le extragem n urma interogrii. Dac nu este deschis nici o tabel, VFP va deschide caseta de dialog Open pentru a specifica locaia fiierului care conine datele;

FORCE clauza prin care specific c tabele sunt unite (join) n ordinea n care ele apar n clauza FROM;

nume_baz_de_date![tabel] specific numele unei baze de date, care nu este deschis,


care conine tabela cu date. Clauza se folosete n cazul n care tabela cu date nu face parte din baza de date curent (deschis). Semnul ! se folosete pentru adresarea tabelei prin calificare;

137

Baze de date

[AS] alias_local specific un nume temporar pentru tabela menionat n argumentul tabel; INNER JOIN rezultatul interogrii va conine numai nregistrrile din tabel care coincid cu una sau mai multe nregistrri, din alt tabel (jonciune intern); LEFT [OUTER] JOIN rezultatul interogrii va conine toate nregistrrile din tabel n stnga cuvntului JOIN i nregistrrile care coincid vor fi afiate la dreapta cuvntului JOIN. Clauza OUTER (exterior) este opional, se include pentru a sublinia faptul c se creaz o jonciune exterioar;

RIGHT [OUTER] JOIN rezultatul interogrii va conine toate nregistrrile din tabel la dreapta cuvntului JOIN i nregistrrile care coincid n stnga; FULL [OUTER] JOIN rezulatul interogrii va conine att nregistrrile care coincid, ct i cele care nu coincid, din cele dou tabele; [nume_baz_de_date!]tabel [[AS] alias_local] specific numele tabelei (baza de date) cu care se realizeaz jonciunea (eventual definit ca alias local); ON condiie_join specific condiia pentru care tabelele sunt unite (fac jonciune); INTO destinaie .- specific locul unde vor fi stocate rezultatele interogrii. Destinaia poate fi una din urmtoarele clauze:
o ARRAY nume_tablou va stoca rezultatele ntr-o variabil de memorie de tip

matrice. Variabila nu se creaz dac rezultatul interogrii furnizeaz 0 nregistrri;


o CURSOR nume_cursor stocheaz rezultatele interogrii ntr-un cursor (fiier

temporar). Dup executarea comenzii SELECT, cursorul temporar rmne deschis (read-only) i este activ. Dup nchiderea cursorului temporar, fiierul este ters;
o DBF | TABLE nume_tabel stocheaz rezultatele interogrii ntr-o tabel; o TO FILE nume_fiier clauz prin care rezultatele interogrii sunt direcionate ctre

un fiier de tip ASCII (text);


o ADDITIVE adaug rezultatele interogrii la coninutul existent al fiierului de tip

text specificat la clauza TO FILE;


o TO PRINTER [PROMPT] direcioneaz ieirea ctre imprimant; o TO SCREEN direcioneaz ieirea n fereastra principal a sistemului VFP sau n

fereastra activ definit de utilizator;


o NOCONSOLE mpiedic afiarea rezultatelor interogrii trimise ctre un fiier,

imprimant sau fereastra principal;

PLAIN mpiedic afiarea capului coloanei (numele coloanei) la ieirea din interogare;

10. Comenzi ale nucleului SQL

138

WHERE - specific includerea doar a anumitor nregistrri n rezultatele interogrii;

condiie_join [AND condiie_join] precizeaz cmpurile care leag tabele din clauza
FROM. Se include operatorul AND pentru a lega condiii multiple de unire (jonciune); AND | OR condiie_filtrare [AND | OR condiie_filtrare] specific criteriile pe care trebuie s le ndeplineasc nregistrrile pentru a fi incluse n rezultatul interogrii. Se pot declara mai multe condiii de filtrare, legate prin operatorii AND i/sau OR. Se poate folosi de asemenea i operatorul NOT pentru a inversa valoarea expresiei logice;

GROUP BY coloan_grup [,coloan_grup] grupeaz nregistrrile pe baza valorilor din una sau mai multe coloane; coloan_grup poate fi numele unui cmp dintr-o tabela obinuit, sau un cmp care include o funcie SQL, sau o expresie numeric care indic locaia coloanei n tabela rezultat;

HAVING condiie_filtrare specific o condiie de filtrare pe care grupul trebuie s o ndeplineasc pentru a putea fi inclus n rezulatele interogrii. HAVING trebuie utilizat mpreun cu clauza GROUP BY. Clauza HAVING fr clauza GROUP BY acioneaz ca i clauza WHERE;

UNION [ALL] comand_selectare - combin rezultatele finale ale unei clauze SELECT cu rezultatele finale ale altei clauze SELECT. Implicit UNION verific rezultatele combinate i elimin nregistrrile duplicat. Clauza ALL mpiedic aciunea clauzei UNION de a elimina nregistrrile duplicat.

ORDER BY articol_ordonat ASC | DESC sorteaz rezultatele interogrii pe baza datelor din una sau mai multe coloane. Fiecare articol_ordonat trebuie s corespund unei coloane din rezultatele interogrii. ASC respectiv DESC specific ordinea sortrii (ascendent, descendent).

Exemplu. Din tabelele CLIENI i COMENZI s se selecteze firma (CLIENI), data comenzii i

mijlocul de transport (COMENZI), sortate ascendent dup dat. Rezultatul se va scrie n fiierul TRANSPORT.DBF. OPEN DATABASES (TEST) SELECT A.FIRMA, B.DATA_CDA, B.MIJLOC FROM CLIENTI A, COMENZI B ; WHERE A.COD_FIRMA=B.COD_FIRMA ; ORDER BY B.DATA_CDA ASC INTO TABLE TRANSPORT BROWSE CLOSE DATABASES

139

Baze de date

2. Comanda ALTER TABLE SQL modific o tabel existent. Sintaxa comenzii : ALTER TABLE nume_tabel_1 ADD | ALTER [COLUMN] nume_cmp1, tip_cmp [(mrime_cmp [,precizie])] [NULL | NOT NULL] [PRIMARY KEY | UNIQUE] [REFERENCES nume_tabel_2 [TAG nume_etichet]] unde:

nume_tabel_1 specific numele tabelei a crei structur se modific;


ADD [COLUMN] nume_cmp1 specific numele cmpului care se adaug; ALTER [COLUMN] nume_cmp1 specific numele unui cmp existent care se modific;

tip_cmp[(mrime_cmp[,precizie])] specific tipul cmpului, mrimea i precizia pentru


un cmp nou sau pentru modificarea unui cmp existent; NULL | NOT NULL permite declararea unui cmp care accept sau nu valori de tip
NUL;

PRIMARY KEY creaz o o etichet primar de index. Eticheta de index are acelai nume cu cel al cmpului; UNIQUE creaz o etichet de index candidat, cu acelai nume cu cel al cmpului; REFERENCES nume_tabel_2 TAG nume_etichet specific tabela printe ctre care se stabilete o relaie persistent. TAG nume_etichet specific eticheta de index din tabela printe pe baza creia se stabilete relaia.

3. Comanda UPDATE SQL actualizeaz nregistrrile dintr-o tabel. nregistrrile pot fi actualizate pe baza rezultatelor unei declaraii SELECT SQL. Sintaxa comenzii: UPDATE [nume_BD!]nume_tabel SET nume_coloan=exprL_1 [, nume_coloan=exprL_2] WHERE condiie_filtrare_1[AND | OR condiie_filtrare_2]] unde:

[nume_BD!]nume_tabel specific tabela n care vor fi actualizate nregistrrile, cu noile valori;

10. Comenzi ale nucleului SQL

140

SET nume_coloan=exprL_1[, nume_coloan=exprL_2] specific coloanele care sunt actualizate i noile valori. Dac se omite clauza, fiecare nregistrare din coloan va fi actualizat cu aceai valoare;

WHERE condiie_filtrare_1[AND | OR condiie_filtrare_2]] specific nregistrrile care vor fi actualizate cu noile valori; condiie_filtrare_1 specific criteriul pe care trebuie s-l ndeplineasc nregistrrile pentru a fi actualizate. Se pot include mai multe condiii de filtrare legate prin operatorii logici AND i/sau OR. Se poate folosi de asemenea operatorul NOT pentru a inversa valoarea expresiei logice.

Exemplu. n fiierul CLIENI din baza de date TEST, s se modifice cmpul cantitate maxim

(CANT_MAX) la valoarea 25. OPEN DATABASES (TEST) USE CLIENTI UPDATE CLIENTI SET CANT_MAX=25 BROWSE FIELDS FIRMA,CANT_MAX CLOSE DATABASES 4. Comanda INSERT SQL adaug o nou nregistrare la sfritul unei tabele existente. Noua nregistrare conine date descrise n comanda INSERT sau pot fi preluate dintr-un masiv. Sintaxa comenzii: INSERT INTO tabel [(nume_cmp_1[, nume_cmp_2,...])] VALUES (valoare_1, valoare_2,...]) sau INSERT INTO tabel FROM ARRAY nume_masiv | FROM MEMVAR unde:

tabel specific numele tabelei n care se adaug o nou nregistrare;


(nume_cmp_1[, nume_cmp_2,...]) specific numele cmpurilor din din noua nregistrare n care vor fi inserate valori; (valoare_1, valoare_2,...]) specific valorile cmpurilor care vor fi inserate n noua nregistrare;

nume_masiv specific numele masivului din care vor fi inserate datele n noua nregistrare;

141

Baze de date

FROM MEMVAR coninutul variabilelor va fi inserat n cmpurile care au acelai nume cu variabilele.

Exemplu. n tabela CLIENI din baza de date TEST coninutul nregistrrii curente va fi transmis

n memorie ca variabile i structura tabelei va fi copiat ntr-un noua tabel CLIENI2. CLOSE DATABASES CLEAR OPEN DATABASES (TEST) USE CLIENTI * Se transmite nregistrarea curent n memorie ca variabile SCATTER MEMVAR * Se copiaz structura tabelei curente n tabela CLIENTI2 COPY STRUCTURE EXTENDED TO CLIENTI2 * Se insereaz nregistrarea memorat n variabile INSERT INTO CLIENTI2 FROM MEMVAR SELECT CLIENTI2 BROWSE USE DELETE FILE CLIENTI2.DBF 5. Comanda CREATE CURSOR SQL creaz o tabel temporar. Fiecare cmp din tabela temporar este definit cu nume, tip, precizie, numr zecimale, valoare NULL i reguli de integritate referenial. Aceste definiii pot fi obinute din comand sau dintr-un masiv. Sintaxa comenzii: CREATE CURSOR nume_alias(nume_cmp_1 tip_cmp [precizie[,nr_zecimale]) [NULL | NOT NULL] [CHECK expr_L [ERROR mesaj_eroare]] [DEFAULT expresie] [UNIQUE] [NOCPTRANS]] [, nume_cmp_2...]) | FROM ARRAY nume_masiv unde:

nume_alias specific numele tabelei temporare creat, care poate fi i numele unei
expresii;

nume_cmp_1 specific numele unui cmp din fiierul temporar;

10. Comenzi ale nucleului SQL

142

tip_cmp prin intermediul unei singure litere, specific tipul fiecrui cmp; precizie[,nr_zecimale] specific mrimea i dac este cazul, numrul de zecimale pentru
cmpuri numerice; NULL | NOT NULL aloc sau nu valori de tip NULL cmpului; CHECK expr_L specific regula de validare pentru valorile care se vor nscrie n cmp. Expresia logic expr_L poate fi i o funcie definit de utilizator; ERROR mesaj_eroare specific mesajul de eroare pe care sistemul VFP l va afia n cazul n care validarea datelor genereaz eroare; DEFAULT expresie specific valoarea implicit pentru cmp. Tipul de dat dat de expresie trebuie s fie de acelai fel cu tipul cmpului. UNIQUE creaz un index candidat pentru cmp. Eticheta de index candidat are acelai nume cu cel al cmpului. Valorile NULL i nregistrrile duplicat nu sunt permise ntr-un cmp utilizat ca index candidat;

NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri de tip memo. Dac cursorul este convertit la o alt pagin de cod, cmpurile pentru care a fost specificat clauza NOCPTRANS nu vor fi translatate;

FROM ARRAY nume_masiv specific numele unui masiv existent care conine numele, tipul, precizia, numrul de zecimale pentru fiecare cmp din tabela temporar.

Exemplu. Se creaz un cursor cu nume alias ANGAJAI cu urmtoarea structur:

ID N(5) identificator angajat; NUME C(25); ADRESA C(30); ORAS C(20); TELEFON C(8) care accept i valori de tip Null; SPEC M specialitatea, cmp de tip memo. Se va aduga o nregistrare goal, dup care se vor nscrie valori n cmpurile tabelei. CLOSE DATABASES CLEAR CREATE CURSOR ANGAJATI ; (ID N(5), NUME C(25), ADRESA C(30), ORAS C(20), TELEFON C(8) NULL, SPEC M) DISPLAY STRUCTURE

143 WAIT WINDOW Apasati o tasta pentru a introduce o inregistrare

Baze de date

INSERT INTO ANGAJATI (ID, NUME, ADRESA, ORAS, MARCA, SPECIALITATE); VALUES (1004,DR. ION GARCEA,B-DUL LACUL TEI 124, SECTOR 2, BUCURESTI,; 88567902,PAZA SI PROTOCOL) BROWSE * n acest punct se poate copia nregistrarea ntr-o tabel permanent. CLOSE ALL && odat ce cursorul s-a nchis, toate datele sunt golite din memorie. CLEAR 6. Comanda CREATE TABLE SQL determin crearea unei tabele. La fiecare tabel nou creat, i se specific numele cmpurilor din nregistrare i caracteristicile lor: tip, mrime, zecimale (pentru tipurile numerice), valori de tip NULL i regulile de integritate refereniale. Definirea cmpurilor se poate obine fie prin descriere n comand, fie dintr-un masiv.

Sintaxa comenzii:
CREATE TABLE | DBF nume_tabel_1 [NAME nume_lung] [FREE] (nume_cmp_1 tip_cmp [mrime[(,mrime_cmp[,precizie])] [NULL | NOT NULL] [CHECK expr_L_1 [ERROR mesaj_eroare_1]] [DEFAULT expr_1] [PRIMARY KEY | UNIQUE] [REFERENCES

nume_tabel_2 [TAG etich_1_index]] [NOCPTRANS] [nume_cmp_2 ]


[PRIMARY KEY expr_2 TAG etich_2_index|, UNIQUE expr_3 TAG etich_3_index] [, FOREIGN KEY expr_4 TAG etich_4_index [NODUP] REFERENCES nume_tabel_3 [TAG

etich_5_index]]
[,CHECK expr_L_2[ERROR mesaj_eroare_2]]) | FROM ARRAY nume_masiv unde:

nume_tabel_1 specific numele tabelei care va fi creat. Opiunile TABLE i DBF sunt
identice; NAME nume_lung specific un nume lung pentru tabel. Acest nume poate fi specificat numai dac este deschis o baz de date, el fiind stocat (memorat) n cadrul bazei de date. Numele lung poate conine pn la 128 caractere i poate fi folosit numai n cadrul bazei de date;

FREE noua tabel nu va fi adugat la baza de date curent (deschis); (nume_cmp_1 tip_cmp [mrime[(,mrime_cmp[,precizie])] specific numele cmpului, tipul, mrimea i precizia (numrul de poziii zecimale). O tabel poate conine pn la 255

10. Comenzi ale nucleului SQL

144

cmpuri. Dac unul sau mai multe cmpuri accept valori de tip NULL, limita se reduce la 254;

NULL | NOT NULL permite / mpiedic introducerea de valori de tip NULL n cmp; CHECK expr_L_1 specific o regul de validare pentru cmp. Expresia logic expr_L_1 poate fi o funcie definit de utilizator. La adugarea unei nregistrri vide, se verific regula de validare. Dac regula de validare nu prevede acceptarea de valori vide n cmp, se genereaz eroare;

ERROR mesaj_eroare_1 specific mesajul de eroare pe care sistemul VFP l afieaz la apariia unei erori, generate de clauza CHECK, care verific regula de validare; DEFAULT expr_1 specific valoarea implicit pentru cmp. Expresia expr_1 trebuie s fie de acelai tip cu tipul cmpului; [PRIMARY KEY creaz un index primar pentru cmp. Eticheta de index primar are acelai nume cu cel al cmpului; UNIQUE creaz un index candidat pentru cmp. Numele etichetei de index candidat este acelai cu cel al cmpului. REFERENCES nume_tabel_2 [TAG etich_1_index] specific numele tabelei printe, la stabilirea unei relaii persistente. Dac se omite clauza TAG etich_1_index, relaia se stabilete utiliznd cheia primar de index a tabelei printe. Dac tabela printe nu are un index de cheie primar, sistemul va genera eroare. Se include clauza TAG etich_1_index pentru a stabili o relaie bazat pe existena etichetei de index pentru tabela printe;

NOCPTRANS previne trecerea la o alt pagin de cod pentru caractere i cmpuri memo. Dac tabela este convertit la o alt pagin de cod, cmpul pentru care a fost specificat clauza NOCPTRANS, nu va fi translatat;

[nume_cmp_2 ] urmtorul cmp din structura tabelei. Are aceleai caracteristici de descriere ca i primul cmp; PRIMARY KEY expr_2 TAG etich_2_index specific indexul primar care va fi creat. Expresia expr_2 poate specifica orice cmp sau combinaie de cmpuri din tabel. TAG

etich_2_index specific numele etichetei de index primar. Deoarece o tabel nu poate avea
dect o singur cheie primar de indexare, nu se poate include aceast clauz dac deja exist definit o cheie primar;

UNIQUE expr_3 TAG etich_3_index creaz un index candidat. Expresia expr_3 specific orice cmp sau combinaie de cmpuri din tabel. Clauza TAG etich_3_index specific numele etichetei de index pentru eticheta de index candidat, care va fi creat;

145

Baze de date

FOREIGN KEY expr_4 TAG etich_4_index [NODUP] creaz un index extern (nonprimar) i stabilete o relaie cu tabela printe. expr_4 specific expresia indexului extern. Clauza TAG etich_4_index specific numele etichetei de index externe. Clauza NODUP se include pentru a crea un index candidat extern;

REFERENCES nume_tabel_3 [TAG etich_5_index] specific tabela printe ctre care se stabilete o relaie persistent. Includerea clauzei TAG etich_5_index determin stabilirea relaiei pe baza unei etichete de index a tabelei printe. Dac este omis clauza, relaia se stabilete utiliznd implicit cheia primar de indexare din tabela printe;

CHECK expr_L_2[ERROR mesaj_eroare_2] specific regula de validare pentru tabel; FROM ARRAY nume_masiv specific numele unui masiv existent care conine numele, tipul, mrimea i precizia pentru fiecare cmp al tabelei. Coninutul masivului poate fi definit cu funcia AFIELDS().

7. Comnda DELETE SQL realizeaz tergerea la nivel logic (marcarea pentru tergere) a nregistrrilor dintr-o tabel. Sintaxa comenzii: DELETE FROM [nume_BD!]nume_tabel [WHERE condiie_filtrare_1 [AND | OR

condiie_filtrare_2...]]
unde:

FROM [nume_BD!]nume_tabel specific numele tabelei n care nregistrrile sunt marcate pentru tergere la nivel logic; WHERE condiie_filtrare_1 [AND | OR condiie_filtrare_2...] vor fi marcate pentru tergere numai anumite nregistrri, cele care ndeplinesc condiiile de filtrare.

tergerea fiind la nivel logic, nregistrrile vor fi terse fizic din tabel doar dup utilizarea comenzii PACK.

11. Proiectarea meniurilor i a barelor de instrumente

146

11. Proiectarea meniurilor i a barelor de instrumente


Meniurile (Menus) i barele de instrumente (Toolbars) furnizeaz o cale structurat i accesibil pentru mnuirea comenzilor aplicaiei. Prin planificarea i proiectarea judicioas a meniurilor i barelor de instrumente, se poate crete calitatea aplicaiilor. O bun parte din activitatea de creare a unui meniu sistem este realizat cu ajutorul proiectantului de meniuri (Meniu Designer), n care se creaz meniul principal, submeniurile i opiunile din meniu.

147

Baze de date

12. Aplicaii
12.1. Evidena rezultatelor activitii studenilor ntr-o facultate
12.1.1. Formularea i analiza problemei Enunul problemei

Tema abordat este Evidena rezultatelor activitii studenilor ntr-o facultate.


Datele de intrare

Fia de nscriere; Cataloagele de note; Planul de nvmnt; Programele analitice.


Datele de ieire

Componena grupelor; Situaia dup o sesiune normanal; Situaia statistic asupra repartiiei notelor la o disciplin; Situaia statistic asupra repartiiei mediilor.
Actualizarea datelor

Adugarea de noi studeni; Modificarea datelor despre studeni; tergerea unui student; Adugrea de note; Modificarea notelor; tergerea studentului din fiierul de note; Adugarea de noi discipline; Modificarea numelui unei discipline; tergerea unei discipline.
Coduri adoptate

12. Aplicaii Codul judeului; Codurile disciplinelor; An studii 1-6, an calendaristic 2006-2007.
Interfaa cu utilizatorul

148

Stabilirea meniurilor i a videoformatelor pentru programul monitor i a programelor subordonate.


Proiectarea intrrilor

Cererea de nscriere; Cataloage; Formularele cu codurile i denumirile disciplinelor.


Proiectarea ieirilor

Lista studenilor pe grupe; Situaia dup sesiune; Statistica la o disciplin; Statistica medii; List bursieri; List integraliti. Stabilirea cadrului pentru:
Operaiile de actualizare

Obinerea rapoartelor finale.

149
Schema general propus

Baze de date

CATALOAGE

CEREREA DE NSCRIERE

PLAN NVMNT

PROGRAME ANALITICE

VIDEOFORMAT STUDENT

INTRODUCERE DE LA TASTATUR STUDENT

VIDEOFORMAT NOTE

PROGR. MONITOR

NOTE

VIDEOFORMAT DISCIPLINE

DISCIPLINE

LISTA STUDENILOR PE GRUPE

SITUAIA DUP SESIUNE

STATISTICA LA O DISCIPLIN

STATISTIC MEDII

LISTA BURSIERI

12.1.2. Crearea, actualizarea, modificarea i interogarea tabelelor

STUDENT MATR C(5) NUME_PRE C(30) ADRESA MEMO TEL C(9) AN_STUDII C(1) GRUPA C(2)

RELAIE

NOTE MATR C(5) COD_DIS C(3) NOTA N(2) RELAIE

DISCIPLINE COD_DIS C(3) DENUMIRE MEMO EXAMEN L COLOCVIU L TIP_CURS C(1) TIP_PROMO C(1)

CODIFICARI

U O - OBLIGATORI TIP_CURSF - FACULTATIV P - OPTIONAL U O - OBLIGATORI TIP_PROMO N - Nu este obligatoriu pentru promovare

Meniul programului ar putea fi de forma

150

BARA DE MENIURI

CREARE_BD STUDENTI NOTE DISCIPLINE

ACTUALIZARE_BD ADAUGARE MODIFICARE STERGERE STUDENTI NOTE DISCIPLINE

RAPOARTE LISTA STUDENTI INTEGRALISTI RESTANTIERI STATISTICA DISCIPLINA STATISTICA MEDII LISTA BURSIERI

IESIRE

SUBMENIU NIVELUL 2 SUBMENIURI NIVELUL 1

12.1.3. Crearea structurii unui fiier

n fereastra de comenzi se introduc comenzile de creare a unui fiier i vizualizare: CREATE TABLE STUD1 (MATR C(3), NUME C(30), AN C(1), GRUPA C(2)) BROWSE Se lanseaz comenzile [CTRL] + [Y] i se populeaz cu 3-4 nregistrri. Se salveaz cu [CTRL] +
[W].

Se deschide fereastra Data Session i se nchide fiierul STUD1 de la butonul Close. Se va crea programul de modificare a structurii fiierului anterior pentru adugarea unui nou cmp cu numele mbac (medie bacalaureat): File/New/Program/New File i introduc urmtoarele linii: SELECT 2 USE STUD1 COPY STRUCTURE EXTENDED TO TEMP USE TEMP BROWSE APPEND BLANK REPLACE FIELD_NAME WITH MBAC REPLACE FIELD_TYPE WITH N REPLACE FIELD_LEN WITH 5 REPLACE FIELD_DEC WITH 2

151 BROWSE USE TEMP CREATE STUD2 FROM TEMP USE STUD2 APPEND FROM STUD1 BROWSE CLOSE DATABASES Se salveaz i se ruleaz programul.
12.1.4. Adresarea prin macrosubstituie

Baze de date

Se va crea un program care va folosi macrosubstituia pentru numele de fiiere STUD1 i STUD2. Se vor introduce urmtoarele linii de program: PUBLIC FIS C(20) FOR I=1 TO 2 DO GOTO I FIS=STUD+ALLTRIM(STR(I))+.DBF USE &FIS BROWSE ENDFOR CLOSE DATABASES Se salveaz i se ruleaz programul.
12.1.5. Crearea unui meniu Menu Bar va avea urmtoarele componente:

Creare BD Results Submenu Create Studenti/Note Results - Procedure Actualizare - Results Submenu Create Studenti/Note Results - Procedure Media Mesults- Procedure Iesire Results- Procedure

152

a) Procedurile pentru crearea BD

Pentru fiierul Studenti CREATE TABLE STUD (MATR C(3), NUME C(30), AN C(1), GRUPA C(2)) CLOSE DATABASES Pentru fiierul Note CREATE TABLE NOTE (NOTA1 N(2), NOTA2 N(2), MEDIA N(5,2)) CLOSE DATABASES
b) Procedurile de actualizare

Pentru fiierul Studenti USE STUD BROWSE CLOSE DATABASES Pentru fiierul Note USE NOTE BROWSE CLOSE DATABASES n fiecare fereastr Browse cu [CTRL] + [Y] se populeaz fiierele cu 3-4 nregistrri. La fiierul Note nu se completeaz cmpul media.
c) Procedura de calcul a mediei

USE NOTE FOR I=1 TO RECCOUNT() GOTO I REPLACE MEDIA WITH (NOTA1+NOTA2)/2 ENDFOR

153 BROWSE CLOSE DATABASES


d) Procedura de ieire

Baze de date

CLEAR EVENTS CLOSE DATABASES SET SYSMENU TO DEFAULT

12.2. Gestionarea unei magazii


S se realizeze o aplicaie n Visual Fox Pro 6 prin care s se gestioneze intrrile de materiale, furnizorii i materialele ntr-o magazie a unei secii de producie.
12.2.1. Proiectarea i realizarea aplicaiei

Aplicaia va cuprinde un modul pentru definirea bazei de date, un modul pentru actualizare (adugare, modificare, tergere) i un modul de exploatare a bazei de date prin rapoarte. Sunt prevzute trei tabele independente care au urmtoarea structur: Fiierul materiale.dbf
Denumire Tip

Fiierul furnizori.dbf
Denumire Tip

Fiierul intrari.dbf
Denumire Tip

Denumire Cod_mat Um

C(40) N(5) C(6)

Denumire Cod_furn Adresa Tel

C(40) N(4) M C(10)

Cod_mat Cod_furn Cant Pu Data_in

N(5) N(4) N(6) N(8,2) D

Existena cmpurilor comune din fiierul intrari.dbf cu cele ale celorlalte fiiere ofer posibilitatea ca n etapa de proiectare a rapoartelor s se poat stabili relaii ntre tabele pentru a extrage date corelate din toate sursele. Se vor realiza dou rapoarte:

154

pentru obinerea unei liste de intrri de materiale sortat ascendent dup data calendaristic cu cteva comenzi SQL de manipulare a tabelelor; pentru obinerea unei liste cu furnizori i materiale folosind facilitatea de grupare a modulului de rapoarte. Se vor utiliza date extrase din toate cele trei fiiere (stabilind relaii ntre acestea), calculndu-se valoarea pltit fiecrui furnizor. Aplicaia conine proceduri pentru ntreinerea i exploatarea bazei de date fiind construit cu o

interfa accesibil i logic. Structura proiectului este prezentat n Figura 1. Se va utiliza programare vizual, orientat spre obiecte i procedural n realizarea aplicaiei care rezolv problema formulat mai sus. n programul principal init_var sunt declarate i iniializate variabilele globale, se deschid sau se creaz fiierele utilizate i se lanseaz meniul aplicaiei.

Fig. 1
Programul principal Init_var din seciunea Programs

PUBLIC CODF, DEN, ADR, TL, CODM, DENM, PUN, DATAIN, CANTIT

155 SET DATE TO BRITISHCODF=0 * INITIALIZARI DEN=' ' ADR=' ' TL=' ' CODM=0 DENM=' ' PUN=0 DATAIN={ / / } CANTIT=0 CLOSE DATABASES IF EMPTY(SYS(2000,'MATERIALE.DBF')) CREATE TABLE MATERIALE (COD_MAT N(5),DENUMIRE C(40),UM C(6)) ELSE USE MATERIALE ENDIF INDEX ON COD_MAT TAG COD_MAT ADDITIVE IF EMPTY(SYS(2000,'INTRARI.DBF'))

Baze de date

CREATE TABLE INTRARI (COD_MAT N(5), COD_FURN N(4), CANT N(6), PU N(8,2), DATA_IN D) ELSE USE INTRARI ENDIF IF EMPTY(SYS(2000,'FURNIZORI.DBF')) CREATE TABLE FURNIZORI (COD_FURN N(4), DENUMIRE C(40), ADRESA M, TEL C(10)) ELSE USE FURNIZORI ENDIF INDEX ON COD_FURN TAG COD_FURN ADDITIVE CLOSE DATABASE

156

SELECT 2 USE MATERIALE SELECT 3 USE FURNIZORI SELECT 4 USE INTRARI DO MENU1.MPR READ EVENTS n continuare se definete bara de meniuri. n Figura 2 sunt prezentate Meniul principal i submeniul Vizualizare BD. Meniul principal Submeniu Vizualizare BD

Fig. 2
Crearea submeniului Vizualizare BD * Vizualizarea tabelei Materiale

SELECT 2 BROWSE FIELDS COD_MAT, DENUMIRE, PU, DATA_IN NOEDIT


* Vizualizarea tabelei Furnizori

SELECT 3 BROWSE FIELDS COD_FURN, DENUMIRE NOEDIT


* Vizualiarea tabelei Intrari

SELECT 4 BROWSE NOEDIT


Crearea submeniu Actualizare BD

157 Submeniul este prezentat n Figura 3.

Baze de date

Fig. 3 Opiunea Adaugare DO FORM ADAUG Opiunea Modificare/Stergere DO FORM MODIFICARE


* Crearea submeniu Rapoarte

Submeniul este prezentat n Figura 4:

Fig. 4 Opiunea Lista materiale/Data DO FORM MAT_DATA Opiunea Lista Furnizori/Materiale Se declar urmtoarea procedur: SELECT 4 SET ORDER TO TAG COD_MAT OF MATERIALE.CDX IN MATERIALE SET RELATION TO COD_MAT INTO MATERIALE ADDITIVE

158

SET ORDER TO TAG COD_FURN OF FURNIZORI.CDX IN FURNIZORI SET RELATION TO COD_FURN INTO FURNIZORI ADDITIVE REPORT FORM FURNIZ_MATER PREVIEW SET RELATION OFF INTO MATERIALE SET RELATION OFF INTO FURNIZORI care stabilete o relaie ntre nregistrrile fiierului materiale.dbf i intrari.dbf prin intermediul cmpului comun cod_mat i pe de alt parte o relaie ntre nregistrrile fiierului furnizori.dbf i

intrari.dbf prin intermediul cmpului comun cod_furn.


Pentru stabilirea relaiilor ntre fiiere trebuie ca n prealabil fiierele copil s fie indexate dup cmpul de legtur (cod_mat n fiierul materiale, cod_furn n fiierul furnizori), etap realizat n programul principal init_var. Dup vizualizarea raportului furniz_mater cele dou relaii sunt anulate. Opiunea Iesire CLEAR EVENTS CLOSE DATABASE SET SYSMENU TO DEFAULT
* Videoformat Adaug

Aceast videoformat are numele intern Form1, numele extern Adaug.scx, iar pentru proprietatea
Caption se alege textul Adaugare, Figurile 5a i 5b.

Butonul Iesire este primul strat i se aplica deasupra obiectului PageFrame1 (de tip container) avnd proprietatea PageCount =3 (pagini). Pe butonul Iesire la evenimentul Click se asociaza comanda THISFORM.RELEASE. Se face click cu butonul din dreapta al mouse-ului i se alege opiunea Edit pentru a accesarea elementelor containerului, respectiv cele trei pagini: Furnizori, Materiale, Intrari. Numele extern i grosimea de caracter a paginilor se stabilete utiliznd proprietile Caption i FontBold= True. Adresarea paginilor se realizeaz fcnd click cu butonul stng al mouse-ului pe fiecare pagin. Numele intern poate fi schimbat, dar vor fi pstrate cele implicite (Page1, Page2, Page3), respectiv adresarea paginii Furnizori n procedurile ataate va fi una ierarhic, prin calificare:

159 THISFORM.PAGEFRAME1.PAGE1.proprietate Tabela Furnizori

Baze de date

Fig. 5a

Fig.5b

Urmeaz stabilirea obiectelor pentru pagina Page1 (cu proprietatea caption=Furnizori). Sunt patru regiuni de tip text, notate de la Text1 la Text4, un buton de comand (Command1) i patru etichete, de la Label1 la Label4. Ordinea lor se stabilete din meniul View, submeniul TabOrder. Dac se dorete trecerea de la vizualizarea interactiv a ordinii obiectelor la vizualizarea de tip list, se selecteaz meniul Tools, submeniul Options, submeniul Forms, opiunea Tab Ordering i se alege By list. n continuare se stabilesc cteva proprieti referitoare la obiectele alese:

pentru obiectul Page1 (Furnizori) se acceseaz codul procedurilor ataate diferitelor evenimente utiliznd butonul dreapta al mouse-ului i alegnd din meniu opiunea Code. Se selecteaz evenimentul Activate i se adug urmtoarele linii de cod n editorul deschis:

* SE SELECTEZ ZONA DE LUCRU 3 (FURNIZORI.DBF) SELECT 3 * SE TRIMITE FOCUSUL (PROMPTERUL) PE TEXT1 THISFORM.PAGEFRAME1.PAGE1.TEXT1.SETFOCUS CODF=0 DEN =''

160

ADR=' ' TL='' * ACTUALIZAREA REGIUNILOR DE EDITARE CU NOILE VALORI THISFORM.PAGEFRAME1.PAGE1.REFRESH

pentru obiectele de tip text la proprieti, seciunea Data, se declar variabilele n


ControlSource, care vor prelua datele ce se vor scrie n fiier: Text1- codf, Text2- den, Text3- adr, Text4- tl.

Etichetele vor avea trecute la proprietatea Caption denumirile explicite a variabilelor utilizate: Cod furnizor (Label1), Denumire (Label2), Adresa (Label3), Telefon (Label4). Proprietatea FontBold se seteaz True.

Butonul de validare (nume intern Command1, proprietatea Caption=Validare,


FontBold=True) va avea ataate urmtoare linii de cod pentru evenimentul Click:

LOCATE FOR CODF=COD_FURN IF FOUND(3) THEN WAIT WINDOW 'COD FURNIZOR DUPLICAT !' ELSE LOCATE FOR UPPER(ALLTRIM(DEN))=UPPER(ALLTRIM(DENUMIRE)) IF FOUND(3) THEN WAIT WINDOW 'DENUMIRE DUPLICAT !' ELSE APPEND BLANK REPLACE COD_FURN WITH CODF, DENUMIRE WITH DEN, ADRESA WITH ADR, TEL WITH TL ENDIF ENDIF CODF=0 DEN=' ' ADR=' ' TL=' ' THISFORM.PAGEFRAME1.PAGE1.REFRESH THISFORM.PAGEFRAME1.PAGE1.TEXT1.SETFOCUS

161

Baze de date

Secvena de cod realizeaz dou validri, una pentru codul de furnizor i una pentru denumirea firmei, verificnd dac mai exist o nregistrare similar. Verificarea se face pentru a pstra caracterul de unicitate al codului i denumirii. n caz ca se gsete un duplicat se afieaz un mesaj specific. Dac codul i denumirea sunt valide din punct de vedere al unicitii, se trece la scrierea n fiierul de furnizor.dbf a noilor informaii. Se reiniializeaz variabilele, se actualizeaz cmpurile afiate i se trimite focusul (prompter-ul) pe obiectul Text1.
Tabela Materiale

Fig. 6 Se stabilesc obiectele pentru pagina Page2 (proprietatea Caption=Materiale): Text1, Text2,
Text3, List1 (list), un buton de comand (Command1) i trei etichete Label1, Label2, Label3,

(Figura 6). Ordinea obiectelor se stabilete din meniul View, submeniul TabOrder. n continuare se stabilesc cteva proprieti referitoare la obiectele alese:

pentru obiectul Page2 (Materiale) se acceseaz codul procedurilor ataate diferitelor evenimente utiliznd butonul dreapta al mouse-ului i alegnd din meniu opiunea Code. Se selecteaz evenimentul Activate i se adug urmtoarele linii de cod n editorul deschis:

SELECT 2 CODM=0 DENM=' ' THISFORM.PAGEFRAME1.PAGE2.REFRESH THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS

162

pentru obiectul Page2 (Materiale) se selecteaz procedura Init la care se ataeaz urmtoarele linii de cod (se iniializeaz i introduc valorile ntr-un vector care va fi utilizat ulterior pentru obiectul list1 referitor la unitatea de msur)

PUBLIC UMAS(6) UMAS(1)='BUC' UMAS(2)='KG' UMAS(3)='TO' UMAS(4)='MC' UMAS(5)='MP' UMAS(6)='ML'

pentru obiectul Page2 se selecteaz procedura Activate la care se ataeaz urmtorul cod

SELECT 2 CODM=0 DENM=' ' THISFORM.PAGEFRAME1.PAGE2.REFRESH THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS

pentru obiectul text1 se specific n fereastra de proprieti, seciunea Data, proprietatea


ControlSource, variabila codm.

pentru obiectul Text2 se specific la proprietatea ControlSource variabila denm. pentru obiectul text3 se specific n fereastra de proprieti: ReadOnly=.T. i FontBold=.T. care va fi utilizat pentru verificarea alegerii unitii de msur din obiectul list1. pentru obiectul List1 se alege din fereastra de proprieti RowSource, unde se declar variabila umas, iar la RowSourceType se alege Array i se ata urmtotorul cod pe evenimentul Click:

WITH THISFORM.PAGEFRAME1.PAGE2 TEXT3.VALUE=.LIST1.VALUE TEXT3.REFRESH COMMAND1.SETFOCUS

163 ENDWITH

Baze de date

prin care se preia valoarea selectat n List1 i se afieaz n Text3. S-a folosit combinaia
With...EndWith pentru a adresa proprietile obiectelor List1, Text3 i Command1 din Page2

ntr-o form mai scurt (calificare global).

pentru obiectul command1 din lista de proprieti se stabilesc valorile pentru


Caption=validare i Fontbold= True. Din lista de evenimente se selecteaz Click Event

pentru care se ataeaz urmtoarele linii de cod: LOCATE FOR CODM=COD_MAT IF FOUND(2) THEN WAIT WINDOW 'COD MATERIAL DUPLICAT !' ELSE LOCATE FOR UPPER(ALLTRIM(DENM))=UPPER(ALLTRIM(DENUMIRE)) IF FOUND(2) THEN WAIT WINDOW 'DENUMIRE DUPLICAT !' ELSE APPEND BLANK REPLACE COD_MAT WITH CODM,DENUMIRE WITH DENM,; UM WITH THISFORM.PAGEFRAME1.PAGE2.LIST1.VALUE ENDIF ENDIF CODM=0 DENM=' ' THISFORM.PAGEFRAME1.PAGE2.REFRESH THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS Secvena de program realizeaz adugarea n fiierul de materiale a valorilor introduse, care se face n uma validrii codului i denumirii materialului. Se verific existena duplicatelor, dac acestea exist vor fi semnalate prin mesaje specifice i adugarea nu se efectueaz.
Tabela Intrari

164

Stabilirea obiectelor pentru ultima pagin Page3 (proprietatea Caption=Intrari, FontBold=


True) din setul de pagini PageFrame1. Se vor insera urmtoarele obiecte: List1, List2, Text1, Text2, Text3, Text4, Text5, Command1 i apte etichete, de la Label1 la Label7, Figura 7.

Fig. 7 Se stabilesc proprietile pentru obiectele declarate n videoformat:

pentru obiectul Page3 (Intrari) se acceseaz codul procedurilor ataate diferitelor evenimente utiliznd butonul dreapta al mouse-ului i alegnd din meniu opiunea Code. Se selecteaz procedura Activate i se adug urmtoarele linii de cod n editorul deschis

SELECT 2 GO TOP SELECT 3 GO TOP SELECT 4 PUN=0 CANTIT=0 CODM=MATERIALE.COD_MAT CODF=FURNIZORI.COD_FURN DATAIN={ / / } THISFORM.PAGEFRAME1.PAGE3.LIST1.SETFOCUS THISFORM.PAGEFRAME1.PAGE3.REFRESH

165

Baze de date

Procedura selecteaz tabelele care vor fi folosite, iniializeaz variabilele pentru cantitate, pre unitar, cod material, cod furnizor i data intrrii. Se trimite focusul pe obiectul List1 i se actualizeaz pagina cu noile valori.

pentru obiectul List1 se alege din fereastra de proprieti RowSource, unde se declar

materiale, RowsourceType, se alege fields, ControlSource, se declar denumire (cmpul


cu acelai nume ca n fiierul materiale.dbf). Pentru evenimentul Click se asociaz urmtoarele linii de cod SELECT 2 CODM=COD_MAT THISFORM.PAGEFRAME1.PAGE3.TEXT1.REFRESH

pentru obiectul List2 se alege din fereastra de proprieti RowSource, aici se declar

furnizori, RowsourceType, se alege Fields, ControlSource se declar denumire (cmpul cu


acelai nume al fiierului furnizori.dbf). Evenimentul Click are ataate urmtoarele linii de cod SELECT 3 CODF=COD_FURN THISFORM.PAGEFRAME1.PAGE3.TEXT2.REFRESH THISFORM.PAGEFRAME1.PAGE3.TEXT3.SETFOCUS

pentru obiectul text1 se introduce n fereastra de proprieti la ControlSource valoarea

codm (variabila n care se preia din lista List1 codul materialului), FontBold= True i
ReadOnly True.

pentru obiectul Text2 se introduce n fereastra de proprieti la ControlSource valoarea

codf (variabila n care se preia din lista List2 codul furnizorului), FontBold= True i
ReadOnly True.

pentru obiectul Text3 se introduce n fereastra de proprieti la ControlSource valoarea

cantit (variabila n care se preia cantitatea);

166

pentru obiectul text4 se introduce n fereastra de proprieti la ControlSource valoarea pun (variabila n care se preia preul unitar); pentru obiectul Text5 se introduce n fereastra de proprieti la ControlSource valoarea

datain (variabila n care se preia data intrrii);


pentru obiectul Command1 la proprietatea Caption se introduce validare, FontBold=
True, iar la evenimentul Click se introduce secvena de cod

SELECT 4 APPEND BLANK REPLACE COD_FURN WITH CODF, COD_MAT WITH CODM, CANT WITH CANTIT, PU WITH PUN,; DATA_IN WITH DATAIN PUN=0 CANTIT=0 SELECT 2 GO TOP CODM=MATERIALE.COD_MAT SELECT 3 GO TOP CODF=FURNIZORI.COD_FURN DATAIN={ / / } THISFORM.PAGEFRAME1.PAGE3.REFRESH THISFORM.PAGEFRAME1.PAGE3.LIST1.SETFOCUS Secvena de program realizeaz selectarea fiierului intrari.dbf i adugarea coninutului variabilelor ataate obiectelor din videoformat la cmpurile fiierului. Se reiniializeaz variabilele, se actualizeaz cmpurile cu noile valori i se trimite focus-ul pe obiectul List1. Etichetele vor avea fixate valorile pentru urmtoarele proprieti:
Obiect Caption FontBold ForeColor

Label1 Cod material

true

0,0,0

167

Baze de date

Label2 Cod furnizor Label3 Cantitate Label4 Pret unitar Label5 Data intrarii

true true true true

0,0,0 0,0,0 0,0,0 0,0,0 0,64,0 255,0,0

Label6 Denumire material true Label7 Denumire furnizor true


Videoformatul Modificare pentru tabela Furnizori

Fig. 8 Aceast videoformat are numele intern Form1, numele extern este modificare.scx, iar pentru proprietatea Caption se alege textul Modificare, Figura 8. Butonul Iesire este primul strat i se aplica deasupra obiectului PageFrame1 (de tip container avnd proprietatea PageCount =3); pe butonul Iesire la evenimentul Click se asociaz comanda THISFORM.RELEASE. Se face click cu butonul din dreapta al mouse-ului i se alege opiunea Edit pentru a accesa elementele containerului, respectiv cele trei pagini: Furnizori, Materiale, Intrari. Numele extern i grosimea de caracter a paginilor se stabilete utiliznd proprietile Caption i FontBold= True. Adresarea paginilor se realizeaz fcnd click cu butonul stng al mouse-ului pe fiecare pagin.

168

La fel ca i la videoformatul precedent numele intern al paginii poate fi schimbat, dar vor fi pstrate cele implicite (Page1, Page2, Page3). Pentru stabilirea obiectelor pentru prima pagin Page1 (proprietatea caption=Furnizori) din setul de pagini PageFrame1 se procedeaz astfel: se insereaz urmtoarele obiecte Text1, Text2,
Text3, Text4, Ttext5, cinci butoane de comand (Command1..Command5) i cinci etichete

(Label1..Label5). Stabilirea proprietilor pentru obiectele alese se realizeaz astfel:

pentru obiectul Page1 (Furnizori) se acceseaz codul procedurilor ataate diferitelor evenimente utiliznd butonul dreapta al mouse-ului i alegnd din meniu opiunea Code. Se selecteaz evenimentul Activate i se adug urmtoarele linii de cod n editorul deschis:

SELECT 3 GO TOP DENF=' ' THISFORM.PAGEFRAME1.PAGE1.REFRESH THISFORM.PAGEFRAME1.PAGE1.TEXT1.SETFOCUS

pentru obiectele de tip text la proprieti, seciunea Data, se aleg pentru ControlSource numele cmpurilor din fiiserul furnizori.dbf: Text1- cod_furn, Text2- denumire, Text3-

adresa, Text4- tel, iar pentru Text5- denf, care este variabila de preluare a irului de
caractere utilizat pentru cutarea n fiier a denumirii furnizorului.

Obiectul Text5 va avea ataat pe procedura Valid urmtoarele linii de cod pentru cutarea irului de caractere preluat n variabila codf

LOCATE FOR UPPER(LEFT(DENF, LEN(ALLTRIM(DENF))))=UPPER(LEFT(DENUMIRE, LEN(ALLTRIM(DENF)))) IF FOUND(3) THEN THISFORM.PAGEFRAME1.PAGE1.REFRESH ELSE MESSAGEBOX('NU EXISTA !',64) ENDIF

169

Baze de date

Etichetele vor avea trecute la proprietatea Caption denumirile explicite ale variabilelor utilizate: Cod furnizor (Label1), Denumire (Label2), Adresa (Label3), Telefon (Label4) i

Cauta furnizor (Label5). Proprietatea FontBold se seteaz pe valoarea True.


Butonul de tergere (nume intern Command1, proprietatea Caption=Stergere,
FontBold=True, ForeColor=255,0,0) va avea ataate urmtoare linii de cod pentru

evenimentul Click * VARIABILA CODF CAPTA VALOAREA CURENT A CODULUI FURNIZORULUI CODF=COD_FURN * STERGE LOGIC NREGISTRAREA CURENT DELETE * STERGE FIZIC NREGISTRAREA CURENT PACK * SELECIA FIIERULUI DIN ZONA 4(INTRARI.DBF) SELECT 4 * CAUT NREGISTRRILE CU CODF=COD_FURN LOCATE FOR CODF=COD_FURN * ATTA VREME CT GASETI CODF DO WHILE FOUND(4) * TERGE LOGIC NREGISTRAREA DELETE CONTINUE * SFRIT CICLU ENDDO * TERGE FIZIC NREGISTRAREA PACK * SELECIE FIIER DIN ZONA 3 (FURNIZORI.DBF) SELECT 3 * ACTUALIZARE CMPURI PAGINA 1 THISFORM.PAGEFRAME1.PAGE1.REFRESH * FOCUSUL(CONTROLUL) ESTE TRIMIS LA TEXT1. THISFORM.PAGEFRAME1.PAGE1.TEXT1.SETFOCUS

170

urmeaz grupul de patru butoane (Command2..Command5), utilizate pentru navigarea n cadrul fiierului furnizori.dbf, cu urmtoarele valori pentru declararea numelui icon-lui care va fi ataat (proprietatea Picture)
Obiect Picture

Command2 Command3 Command4 Command5

c:\proiect_ex\top.bmp c:\proiect_ex\prev.bmp c:\proiect_ex\next.bmp c:\proiect_ex\end.bmp

Fiecare buton are ataat cte o procedur pe evenimentul Click care execut deplasarea.

Butonul Command2 deplasare pe prima nregistrare

GO TOP THISFORM.PAGEFRAME1.PAGE1.REFRESH

Butonul Command3 deplasare o nregistrare napoi

SKIP -1 IF BOF(3) GO TOP MESSAGEBOX('INCEPUT FISIER !',64) ENDIF THISFORM.PAGEFRAME1.PAGE1.REFRESH

SKIP 1

Butonul Command4 deplasare o nregistrare nainte

IF EOF(3) GO BOTTOM MESSAGEBOX('SFRSIT FISIER !',64) ENDIF THISFORM.PAGEFRAME1.PAGE1.REFRESH

171 Butonul Command5 deplasare la ultima nregistrare GO BOTTOM THISFORM.PAGEFRAME1.PAGE1.REFRESH


Videoformatul Modificare pentru tabela Materiale

Baze de date

Fig. 9 Stabilirea obiectelor pentru pagina Page2 (proprietatea Caption=Materiale, FontBold=


True): Text1, Text2, Text3, Text4, List1

(list),

patru

butoane

de

comand

(Command2..Command5) i patru etichete Label1, Label2, Label3, Label4, Figura 9. Aciunile ataate se reazlizeaz dup cum urmeaz.

pentru obiectul Page2 (Materiale) se acceseaz codul procedurilor ataate diferitelor evenimente utiliznd butonul dreapta al mouse-ului i alegnd din meniu opiunea Code. Se selecteaz procedura Init i se adug urmtoarele linii de cod n editorul deschis

PUBLIC UMAS(6) UMAS(1)='BUC' UMAS(2)='KG' UMAS(3)='TO' UMAS(4)='MC' UMAS(5)='MP'

172

UMAS(6)='ML'

pentru obiectul Page2 se selecteaz procedura Activate la care se ataeaz urmtorul cod

SELECT 2 GO TOP DENM=' ' THISFORM.PAGEFRAME1.PAGE2.REFRESH THISFORM.PAGEFRAME1.PAGE2.TEXT1.SETFOCUS

pentru obiectele de tip text se stabilesc urmtoarele valori pentru prorietatile


ControlSource i ReadOnly: Obiect ControlSource ReadOnly

Text1 Text2 Text3 Text4 Proprietatea ReadOnly=.F. este implicit.

Cod_mat Denumire denm Um

.F. .F. .F. .T.

Obiectul Text3 va avea ataat urmtorul cod la procedura Valid

LOCATE FOR UPPER(LEFT(DENM,LEN(ALLTRIM(DENM))))=; UPPER(LEFT(DENUMIRE,LEN(ALLTRIM(DENM)))) IF FOUND(2) THEN THISFORM.PAGEFRAME1.PAGE2.LIST1.VALUE=UM THISFORM.PAGEFRAME1.PAGE2.REFRESH ELSE MESSAGEBOX('NU EXISTA !',64) ENDIF

Obiectul Text4 se utilizeaz pentru a afia unitatea de msur care este declarat n cmpul

um al fiierului materiale.dbf i pentru a afia noua modificare n cazul operrii n List1.

173

Baze de date

Secvena de cod realizezaz cutarea materialului dup irul de caractere preluat n variabila

denm, dac gsete o nregistrare cu valoarea cmpului denumire=denm se afieaz datele, dac nu,
apare un mesaj specific.

pentru obiectul List1 vom alege din fereastra de proprieti RowSource unde declarm variabila umas iar la RowsourceType alegem Aarray i atam urmtorul cod pe evenimentul Click:

WITH THISFORM.PAGEFRAME1.PAGE2 TEXT4.VALUE=.LIST1.VALUE UM=.TEXT4.VALUE TEXT4.REFRESH TEXT3.SETFOCUS ENDWITH Secvena realizeaz actualizarea valorii stocate n obiectului Text4 cu valoarea selectat din
List1 n cazul unei modificri, noua valoare se scrie n cmpul um din fiierul intrari.dbf i

trimiterea controlului la urmtorul obiect Text3 (cutare material).

pentru cele patru etichete se stabilesc valorile pentru proprietile Caption i FontBold
Obiect Caption FontBold

Label1 Label2 Label3 Label4

Cod material Denumire Unitate de masura Cauta material

true true true true

cele patru butoane de comand (Command2..Command5) se utilizeaz pentru navigarea n fiierul materiale.dbf au urmtoarele valori pentru declararea numelui icon-lui care va fi ataat:
Obiect Picture

Command2 Command3

c:\proiect_ex\top.bmp c:\proiect_ex\prev.bmp

174

Command4 Command5

c:\proiect_ex\next.bmp c:\proiect_ex\end.bmp

Se ataeaz urmtoarele linii de cod la evenimentul Click


Command2 deplasare la nceputul fiierului:

GO TOP THISFORM.PAGEFRAME1.PAGE2.REFRESH
Command3 deplasare o nregistrare napoi:

SKIP -1 IF BOF(2) GO TOP MESSAGEBOX('INCEPUT FISIER !',64) ENDIF THISFORM.PAGEFRAME1.PAGE2.REFRESH


Command4 deplasare o nregistrare nainte:

SKIP 1 IF EOF(2) GO BOTTOM MESSAGEBOX('SFRSIT FISIER !',64) ENDIF THISFORM.PAGEFRAME1.PAGE2.REFRESH


Command5 deplasare la sfritul fiierului:

GO BOTTOM THISFORM.PAGEFRAME1.PAGE2.REFRESH
Videoformatul Modificare pentru tabela Intrari

175

Baze de date

Fig. 10 n continuare se stabilesc obiectelor pentru ultima pagin


Page3

(proprietatea

Caption=Intrari, FontBold=True) din setul de pagini PageFrame1. Urmtoarele obiecte vor fi

inserate n acest videoformat : List1, List2, Text1, Text2, Text3, Text4, Text5, cinci butoane de comand (Command1..Command5) i apte etichete Label1..Label7, Figura 10. Pentru stabilirea proprietilor pentru obiectele declarate n videoformat se procedeaz astfel:

pentru obiectul Page3 (Intrari) se acceseaz codul procedurilor ataate diferitelor evenimente Se selecteaz procedura Activate i se adug urmtoarele linii de cod n editorul deschis

SELECT 2 GO TOP SELECT 3 GO TOP SELECT 4 GO TOP THISFORM.PAGEFRAME1.PAGE3.REFRESH

pentru obiectul List1 - se alege din fereastra de proprieti RowSource, unde se declar

materiale, RowsourceType, se alege Fields, ControlSource, se declar denumire (cmpul


cu acelai nume ca n fiierului materiale.dbf) i se ataez la evenimentul Click codul:

176

SELECT 2 CODM=COD_MAT THISFORM.PAGEFRAME1.PAGE3.TEXT1.REFRESH

pentru obiectul List2 se alege din fereastra de proprieti RowSource, unde se declar

furnizori, RowsourceType, se alege Fields, ControlSource, se declar denumire (cmpul


cu acelai nume ca n fiierul furnizori.dbf) i se ataeaz la evenimentul Click codul: SELECT 3 CODF=COD_FURN THISFORM.PAGEFRAME1.PAGE3.TEXT2.REFRESH THISFORM.PAGEFRAME1.PAGE3.TEXT3.SETFOCUS

pentru obiectul Text1 se introduce n fereastra de proprieti la ControlSource valoarea

cod_mat (cmpul din fiier corespunztor codului de material), FontBold= True i


ReadOnly=True.

Pentru obiectul Text2 se introduce n fereastra de proprieti la ControlSource valoarea

cod_furn (cmpul din fiier corespunztor codului de furnizor), FontBold=True i


ReadOnly= True.

pentru obiectul Text3 se introduce n fereastra de proprieti la ControlSource valoarea

cant (cmpul n care este stocat cantitatea);


pentruobiectul Text4 se introduce n fereastra de proprieti la ControlSource valoarea pu (cmpul n care este stocat preul unitar); pentru obiectul Text5 se introduce n fereastra de proprieti la ControlSource valoarea

data_in (cmpul n care este stocat data intrrii);


pentru butonul Command1 se stabilesc urmtoarele proprieti: Caption=Stergere,
FontBold= True, Forecolor=255,0,0 i se ataeaz urmtorul cod la evenimentul Click:

BTNVALUE=0 BTNVALUE=MESSAGEBOX('STERGERE ?',4+32+256) IF BTNVALUE=6 THEN DELETE PACK

177 ENDIF THISFORM.PAGEFRAME1.PAGE3.REFRESH

Baze de date

Secvena de cod realizeaz tergerea nregistrrii curente n urma unei confirmri suplimentare solicitate prin cutia de dialog Messagebox; valoarea returnat de cutia de dialog preluat n variabila btnvalue este testat i dac s-a ales butonul OK se realizeaz tergerea. Parametrii cutiei de dialog Messagebox sunt: MESSAGEBOX(cMessageText [, nDialogBoxType [, cTitleBarText]])

cMessageText -textul care va fi afiat; nDialogBoxType specific tipurile de butoane ,butonul implicit i icon-ul afiat n antet; cTitleBarText titlul cutiei de dialog (antet) .
Valorile pentru nDialogBoxType sunt date n tabelul de mai jos:
Valoare Tipuri butoane

0 1 2 3 4 5

Numai butonul OK OK i Cancel Abort, Retry, and Ignore Yes, No i Cancel Yes i No Retry i Cancel

Valoare

Icon

16 32 48 64

Stop Semnul ntrebrii Semnul exclamrii Semnul Informaie (I)

Valoare

Buton implicit

0 256 512

Primul buton Al doilea buton Al treilea buton

178

(4- butoanele YES i NO, 32- tipul de icon afiat- semnul ntrebrii i 256- butonul doi, NO este implicit).

cele

patru

butoane

(Command2..Command5)

se

utilizeaz

pentru

parcurgerea

nregistrrilor din fiierul intrari.dbf avnd proprietatea Picture cu urmtoarele valori:


Obiect Picture

Command2

c:\proiect_ex\top.bmp c:\proiect_ex\prev.bmp c:\proiect_ex\next.bmp c:\proiect_ex\end.bmp

Command3 Command4 Command5


la care se ataeaz urmtorul cod:

Command2 -deplasare la nceputul fiierului:

SELECT 4 GO TOP THISFORM.PAGEFRAME1.PAGE3.REFRESH


Command3 deplasare o nregistrare napoi:

SELECT 4 SKIP -1 IF BOF(4) GO TOP MESSAGEBOX('INCEPUT FISIER !',64) ENDIF SELECT 4 THISFORM.PAGEFRAME1.PAGE3.REFRESH
Command4 deplasare o nregistrare nainte:

SELECT 4 SKIP 1

179 IF EOF(4) GO BOTTOM MESSAGEBOX('SFRSIT FISIER !',64) ENDIF SELECT 4 THISFORM.PAGEFRAME1.PAGE3.REFRESH


Command5 deplasare la sfritul fiierului:

Baze de date

SELECT 4 GO BOTTOM THISFORM.PAGEFRAME1.PAGE3.REFRESH

cele apte etichete au stabilite urmtoarele proprieti:


Obiect Caption FontBold ForeColor

Label1 Label2 Label3 Label4 Label5 Label6 Lab6el7

Cod material Cod furnizor Cantitate Pret unitar Data intrarii Denumire material Denumire furnizor

true true true true true true true

0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,64,0 255,0,0

Videoformatul mat_data.scx pentru lista materiale/Data

Fig. 11

180

Acest videoformat are 5 obiecte: dou obiecte TextBox (Text1, Text2), dou etichete (Label1,
Label2) i un buton de comand (Command1) , Figura 11.

Proprietile pentru aceste obiecte sunt fixate astfel:

procedura ataat evenimentului Init este:

PUBLIC DATAIN1,DATAIN2 DATAIN1={ / / } DATAIN2={ / / } Se utilizeaz dou variabile pentru a prelua intervalul calendaristic pentru care se face selecia nregistrrilor din fiierul intrari.dbf.

procedura ataat evenimentului Activate este:

DATAIN1={ / / } DATAIN2={ / / } THISFORM.TEXT1.SETFOCUS THISFORM.REFRESH Se iniializeaz cele dou variabile declarate anterior i se trimite controlul catre obiectul
Text1.

cele dou etichete Label1 i Label2 vor avea stabilite urmtoarele proprietati:
Obiect Caption FontBold ForeColor

Label1 Label1

De la data La data

true true

0,0,0 0,0,0

Text1 i Text2 vor avea declarat pentru ControlSource datain1 i datain2. Command1 va avea ataat pe evenimentul Click urmtoarea secven de cod

IF DATAIN1>DATAIN2 THEN

181

Baze de date

MESSAGEBOX('A DOUA DAT CALENDARISTIC TREBUIE S FIE MAI MARE DECT PRIMA !',48) DATAIN2={ / / } THISFORM.TEXT2.SETFOCUS THISFORM.REFRESH ELSE SELECT * FROM INTRARI INTO TABLE TEMP1 HAVING BETWEEN(DATA_IN,DATAIN1,DATAIN2) ORDER BY DATA_IN ; ASC ALTER TABLE TEMP1 DROP COLUMN COD_FURN ALTER TABLE TEMP1 ADD COLUMN DENUMIRE C(40) USE SELECT 5 USE TEMP1 FOR I=1 TO RECCOUNT(5) GOTO I CODM=COD_MAT SELECT 2 LOCATE FOR CODM=COD_MAT IF FOUND(2) THEN DENM=DENUMIRE ENDIF SELECT 5 REPLACE DENUMIRE WITH DENM ENDFOR SELECT 5 REPORT FORM MATER_INTR PREVIEW USE DELETE FILE 'TEMP1.DBF' THISFORM.RELEASE ENDIF Secvena de cod realizeaz validarea intervalului de timp comparnd datain1 cu datain2. n cazul n care datain1 > datain2 intervalul nu este valid, se afieaz un mesaj explicativ, se reiniializeaz variabila datain2 i controlul este trimis la obiectul Text2.

182

n cazul n care perioada este validat se realizez o selecie din fiierul intrari.dbf n fiierul

temp1.dbf a tuturor nregistrrilor care respect condiia ca data calendaristic stocat n cmpul data_in s fie cuprins n perioada care este preluat n variabilele datain1 i datain2, ordonate
ascendent dup cmpul data_in. Se terge coloana cod_furn din fiierul temp1.dbf i se adaug o nou coloan cu numele

denumire de tip caracter (se utilizeaz comanda SQL ALTER TABLE).


Se selecteaz zona de lucru 5 i se deschide tabela temp.dbf i ntr-un ciclu FOR se parcurg secvenial nregistrrile din acest fiier concomitent cu cutarea denumirii materialului n fiierul

materiale.dbf deschis n zona de lucru 2 (pe baza cmpului comun cod_mat). Se transfer coninutul
cmpului denumire din fiierul materiale.dbf n cmpul denumire din fiierul temp1.dbf. La ieirea din ciclu se lanseaz execuia raportului mater_intr.frx cu datele fiierului temp1.dbf. Dup terminarea execuiei raportului, se terge fiierul temp1.dbf i se d controlul meniului

menu1.mpr.
Raportul n Design View are urmtoarea structur, Figura 12.

Fig. 12

183

Baze de date

n meniul Report se alege opiunea Title/Summary i n fereastra aprut, Figura 13, se selecteaz Summary band care va asigura tiprirea cmpurilor imediat ce se termin raportul; n caz contrar afiarea se va face n josul paginii (Page Footer).

Fig. 13 n meniul Report la opiunea Variables, se definete variabila valoare n care se va stoca suma produselor pu*cant, obinute de la fiecare nregistrare pentru a afia o valoare total a materialelor achiziionate ntr-o anumt perioad de timp, Figura 14. n seciunea Page Header sunt ase etichete corespunztoare titlului raportului i capului de tabel pentru care se afieaz datele din fiierul temp1.dbf. n seciunea Detail sunt patru cmpuri de editare corespunztoare datelor din fiier (data_in,

denumire, cant, pu) i un cmp utilizat pentru a afia valoarea mrfii (pu*cant) pentru fiecare
nregistrare. n seciunea Page Footer nu se trece nimic. n seciunea Summary se declar cmpul pentru afiarea variabilei valoare care sumeaz produsele pariale pu*cant.

184

Fig. 14 Opiunea Lista Furnizori/Materiale apeleaz n secvena de cod ataat raportul

furniz_mater.frx care are urmtoarea structur n modul Design View, Figura 15:

Fig. 15 n meniul Report, opiunea Data Grouping, se declar cmpul denumire din fiierul

materiale.dbf, dup care se va face gruparea datelor, utilizndu-se adresarea prin calificare

185

Baze de date

(nume_fiier.cmp, respectiv materiale.denumire) Figura 16. Opiunea se folosete pentru a parcurge secvenial nregistrrile din fiier la care se vor asocia i tipri, pe baza relaiilor definite n celelalte dou fiiere, datele corespunztoare.

Fig. 16 Din meniul Report se selecteaz opiunea Variables i se definete variabila NR, iar la opiunea Calculations, se selecteaz Count, Figura 17. Variabila se utilizeaz pentru numrarea nregistrrilor tiprite obinndu-se astfel numrul curent.

Fig. 17

186

Ca efect al opiunii selectate (Data Grouping), raportul se mparte n mai multe seciuni, astfel: seciunea Header n care este declarat sub form de etichet denumirea raportului (se alege din meniul Format opiunea Font i se stabilete Verdana, iar pentru FontStyle=Bold,
Size=20);

seciunea Group Header1: denumire n care se declar variabila NR i cmpul de grupare, respectiv materiale.denumire. Pentru aceste cmpuri din meniul Format, la opiunea Font, se alege Verdana i FontStyle=Regular i Bold (pentru materiale.denumire). Se observ c exist posibilitatea de a definii mai multe cmpuri de grupare;

seciunea Detail se prevd patru etichete pentru (furnizor, pret unitar, cantitate, valoare) i patru cmpuri pentru afiarea datelor din fiierele ntre care s-au stabilit relaii:

furnizori.denumire, intrari.pu, intrari.cant i produsul intrari.pu*intrari.pu. Pentru aceste


cmpuri caracterul de tiprire este Verdana i stilul caracterului Regular; n seciunea Group Footer1: denumire nu se trece nimic. n continuare este prezentat codul surs generat de wizard pentru aplicaia de mai sus.
***** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\INIT_VAR.PRG *:****************************************************************************** *: *: Procedure File C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\DOC\INIT_VAR.PRG *: *: *: *: *: *: *: *: *: *: *: *: *: *: *:

187

Baze de date

*: Documented using Visual FoxPro Formatting wizard version

.05

*:****************************************************************************** *: INIT_VAR

PUBLIC codf,denf,adr,tl,codm,denm,pun,datain,cantit SET date to british codf=0 denf='' adr=' ' tl='' codm=0 denm='' pun=0 datain={ cantit=0 CLOSE databases IF empty(sys(2000,'materiale.dbf')) CREATE table materiale (cod_mat n(5),denumire c(40),um c(6)) ELSE USE materiale ENDIF INDEX on cod_mat tag cod_mat additive / / }

IF empty(sys(2000,'intrari.dbf')) CREATE table intrari (cod_mat n(5),cod_furn n(4),cant n(6), pu n(8,2),data_in d) ELSE USE intrari ENDIF

IF empty(sys(2000,'furnizori.dbf')) CREATE table furnizori (cod_furn n(4),denumire c(40),adresa m,tel c(10)) ELSE USE furnizori ENDIF INDEX on cod_furn tag cod_furn additive

CLOSE database SELECT 2 USE materiale SELECT 3 USE furnizori

188

SELECT 4 USE intrari DO MENU1.MPR READ EVENTS ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\ADAUG.SCX Name = "Dataenvironment" Top = -1 Left = -1 Height = 272 Width = 408 DoCreate = .T. Caption = "Adaugare" Name = "Form1" ErasePage = .T. PageCount = 3 Top = 3 Left = 4 Width = 400 Height = 266 TabIndex = 1 Name = "Pageframe1" Page1.FontBold = .T. Page1.Caption = "Furnizori" Page1.Name = "Page1" Page2.FontBold = .T. Page2.Caption = "Materiale" Page2.Name = "Page2" Page3.FontBold = .T. Page3.Caption = "Intrari" Page3.Name = "Page3" PROCEDURE Page1.Activate SELECT 3 codf=0 den='' adr=' ' tl='' thisform.Pageframe1.Page1.refresh thisform.Pageframe1.Page1.text1.setfocus ENDPROC PROCEDURE Page2.Activate

189

Baze de date

SELECT 2 codm=0 denm='' thisform.Pageframe1.Page2.refresh thisform.Pageframe1.Page2.text1.setfocus ENDPROC PROCEDURE Page2.Init PUBLIC umas(6) umas(1)='BUC' umas(2)='KG' umas(3)='TO' umas(4)='MC' umas(5)='MP' umas(6)='ML'

ENDPROC PROCEDURE Page3.Activate SELECT 2 GO top SELECT 3 GO top SELECT 4 pun=0 cantit=0 codm=materiale.cod_mat codf=furnizori.cod_furn datain={ / / }

thisform.Pageframe1.Page3.list1.setfocus thisform.Pageframe1.Page3.refresh ENDPROC ControlSource = "codf" Height = 21 Left = 104 TabIndex = 1 Top = 22 Width = 81 Name = "Text1" ControlSource = "den" Height = 23 Left = 103

190

TabIndex = 2 Top = 55 Width = 250 Name = "Text2" ControlSource = "adr" Height = 38 Left = 106 TabIndex = 3 Top = 96 Width = 245 Name = "Text3" ControlSource = "tl" Height = 23 Left = 106 TabIndex = 4 Top = 144 Width = 113 Name = "Text4" Top = 157 Left = 337 Height = 26 Width = 53 FontBold = .T. Caption = "Validare" TabIndex = 5 Name = "Command1" PROCEDURE Click LOCATE for codf=cod_furn IF found(3) then WAIT window 'Cod furnizor duplicat !' ELSE LOCATE for upper(alltrim(den))=upper(alltrim(denumire)) IF found(3) then WAIT window 'Denumire duplicat !' ELSE APPEND blank REPLACE cod_furn with codf,denumire with den,adresa with adr,tel with tl ENDIF ENDIF codf=0

191

Baze de date

den='' adr=' ' tl='' thisform.Pageframe1.Page1.refresh thisform.Pageframe1.Page1.text1.setfocus ENDPROC FontBold = .T. Caption = "Cod furnizor" Height = 21 Left = 19 Top = 22 Width = 72 TabIndex = 6 Name = "Label1" FontBold = .T. Caption = "Denumire" Height = 21 Left = 18 Top = 54 Width = 80 TabIndex = 7 Name = "Label2" FontBold = .T. Caption = "Adresa" Height = 22 Left = 15 Top = 94 Width = 85 TabIndex = 8 Name = "Label3" FontBold = .T. Caption = "Telefon" Height = 20 Left = 14 Top = 146 Width = 74 TabIndex = 9 Name = "Label4" ControlSource = "codm" Height = 25 Left = 115

192

TabIndex = 1 Top = 16 Width = 76 Name = "Text1" ControlSource = "denm" Height = 27 Left = 115 TabIndex = 2 Top = 64 Width = 256 Name = "Text2" PROCEDURE Valid thisform.Pageframe1.Page2.list1.setfocus ENDPROC Top = 165 Left = 330 Height = 29 Width = 53 FontBold = .T. Caption = "Validare" TabIndex = 4 Name = "Command1" PROCEDURE Click LOCATE for codm=cod_mat IF found(2) then WAIT window 'Cod material duplicat !' ELSE LOCATE for upper(alltrim(denm))=upper(alltrim(denumire)) IF found(2) then WAIT window 'Denumire duplicat !' ELSE APPEND blank REPLACE cod_mat with codm,denumire with denm,; um with thisform.Pageframe1.Page2.list1.value ENDIF ENDIF codm=0 denm='' thisform.Pageframe1.Page2.refresh thisform.Pageframe1.Page2.text1.setfocus ENDPROC

193

Baze de date

FontBold = .T. Caption = "Cod material" Height = 24 Left = 10 Top = 20 Width = 82 TabIndex = 5 Name = "Label1" FontBold = .T. Caption = "Denumire" Height = 21 Left = 10 Top = 70 Width = 81 TabIndex = 6 Name = "Label2" RowSourceType = 5 RowSource = "umas" Height = 108 Left = 125 TabIndex = 3 Top = 110 Width = 100 Name = "List1" PROCEDURE Click WITH thisform.Pageframe1.Page2 .Text3.value=.list1.value .Text3.refresh .Command1.setfocus ENDWITH

ENDPROC FontBold = .T. Caption = "Unitate de masura" Height = 22 Left = 10 Top = 120 Width = 105 Name = "Label3" FontBold = .T. Height = 25

194

Left = 11 ReadOnly = .T. Top = 142 Width = 102 Name = "Text3" FontBold = .T. ControlSource = "codm" Height = 25 Left = 86 ReadOnly = .T. TabIndex = 1 Top = 85 Width = 84 Name = "Text1" FontBold = .T. ControlSource = "codf" Height = 25 Left = 85 ReadOnly = .T. TabIndex = 3 Top = 204 Width = 82 Name = "Text2" ControlSource = "cantit" Height = 25 Left = 276 TabIndex = 5 Top = 30 Width = 84 Name = "Text3" ControlSource = "pun" Height = 25 Left = 276 TabIndex = 6 Top = 67 Width = 107 Name = "Text4" ControlSource = "datain" Height = 25 Left = 276 TabIndex = 7

195

Baze de date

Top = 102 Width = 75 Name = "Text5" BoundColumn = 1 RowSourceType = 6 RowSource = "materiale" ControlSource = "denumire" Height = 51 Left = 5 Sorted = .F. TabIndex = 2 Top = 28 Width = 164 BoundTo = .T. Name = "List1" PROCEDURE Click SELECT 2 codm=cod_mat thisform.Pageframe1.Page3.text1.refresh ENDPROC RowSourceType = 6 RowSource = "furnizori" ControlSource = "denumire" Height = 52 Left = 4 Sorted = .F. TabIndex = 4 Top = 142 Width = 163 Name = "List2" PROCEDURE Click SELECT 3 codf=cod_furn thisform.Pageframe1.Page3.Text2.refresh thisform.Pageframe1.Page3.Text3.setfocus ENDPROC Top = 156 Left = 280 Height = 27 Width = 77 FontBold = .T.

196

Caption = "Adaugare" TabIndex = 8 Name = "Command1" PROCEDURE Click SELECT 4 APPEND blank REPLACE cod_furn with codf, cod_mat with codm, cant with cantit,pu with pun,; data_in with datain pun=0 cantit=0 SELECT 2 GO top codm=materiale.cod_mat SELECT 3 GO top codf=furnizori.cod_furn datain={ / / }

thisform.Pageframe1.Page3.refresh thisform.Pageframe1.Page3.list1.setfocus ENDPROC FontBold = .T. Caption = "Cod material" Height = 23 Left = 7 Top = 87 Width = 81 TabIndex = 9 Name = "Label1" FontBold = .T. Caption = "Cod furnizor" Height = 24 Left = 8 Top = 207 Width = 69 TabIndex = 10 Name = "Label2" FontBold = .T. Caption = "Cantitate" Height = 28 Left = 204

197

Baze de date

Top = 34 Width = 57 TabIndex = 11 Name = "Label3" FontBold = .T. Caption = "Pret unitar" Height = 28 Left = 204 Top = 72 Width = 66 TabIndex = 12 Name = "Label4" FontBold = .T. Caption = "Data intrarii" Height = 26 Left = 204 Top = 105 Width = 69 TabIndex = 13 Name = "Label5" FontBold = .T. Caption = "Denumire material" Height = 16 Left = 14 Top = 7 Width = 125 TabIndex = 14 ForeColor = 0,64,0 Name = "Label6" FontBold = .T. Caption = "Denumire furnizor" Height = 22 Left = 7 Top = 122 Width = 142 TabIndex = 15 ForeColor = 255,0,0 Name = "Label7" Top = 235 Left = 348 Height = 25

198

Width = 49 FontBold = .T. Caption = "Iesire" TabIndex = 2 Name = "Command1" PROCEDURE Click thisform.release ENDPROC ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\END.BMP ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\FURNIZ_MATER.FRX ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MAT_DATA.SCX Name = "Dataenvironment" Top = 1 Left = 67 Height = 94 Width = 214 DoCreate = .T. Caption = "Materiale-Data" Name = "Form1" PROCEDURE Activate datain1={ datain2={ / / / / } }

thisform.text1.setfocus thisform.refresh ENDPROC PROCEDURE Init PUBLIC datain1,datain2 datain1={ datain2={ ENDPROC Top = 39 Left = 170 Height = 21 Width = 45 FontBold = .T. Caption = "OK" TabIndex = 3 Name = "Command1" / / / / } }

199

Baze de date

PROCEDURE Click IF datain1>datain2 then MESSAGEBOX('A doua data calendaristica trebuie sa fie mai mare dect prima !',48) datain2={ / / }

thisform.Text2.setfocus thisform.refresh ELSE SELECT * from intrari into table temp1 having between(data_in,datain1,datain2) order by data_in asc ALTER table temp1 drop column cod_furn ALTER table temp1 add column denumire c(40) USE SELECT 5 USE temp1 FOR i=1 to reccount(5) GOTO i codm=cod_mat SELECT 2 LOCATE for codm=cod_mat IF found(2) then denm=denumire ENDIF SELECT 5 REPLACE denumire with denm ENDFOR

SELECT 5 REPORT form mater_intr preview USE Delete file 'temp1.dbf' thisform.release ENDIF ENDPROC ControlSource = "datain1" Height = 25 Left = 80 TabIndex = 1 Top = 23 Width = 84 Name = "Text1"

200

ControlSource = "datain2" Height = 25 Left = 80 TabIndex = 2 Top = 55 Width = 84 Name = "Text2" FontBold = .T. Caption = "De la data" Height = 22 Left = 11 Top = 25 Width = 61 TabIndex = 4 Name = "Label1" FontBold = .T. Caption = "La data" Height = 22 Left = 11 Top = 60 Width = 61 TabIndex = 5 Name = "Label2" ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MATER_INTR.FRX ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MENU1.MNX ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MENU1.MPR *:****************************************************************************** *: *: Procedure File C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\DOC\MENU1.MPR *: *: *: *: *: *: *: *:

201

Baze de date

*: *: *: *: *: *: *: *: Documented using Visual FoxPro Formatting wizard version .05

*:****************************************************************************** *: *: *: *: *: *: *: *: * * * * * * * * * * * * * * * * MENU1 _1j10vft5m _1j10vft5n _1j10vft5o _1j10vft5p _1j10vft5q _1j10vft5r _1j10vft5s ********************************************************* * * 26/05/05 * ********************************************************* * * Author's Name * * Copyright (C) 2005 Company Name * Address * City, * * Description: * This PROGRAM was automatically generated BY GENMENU. * ********************************************************* Zip MENU1.MPR 14:40:05

* * * * *

********************************************************* * * * ********************************************************* Menu Definition

202

SET SYSMENU TO SET SYSMENU AUTOMATIC

DEFINE PAD _1j10vft5i OF _MSYSMENU PROMPT "Vizualizare BD" COLOR SCHEME 3 ; KEY ALT+V, "" DEFINE PAD _1j10vft5j OF _MSYSMENU PROMPT "Actualizare BD" COLOR SCHEME 3 ; KEY ALT+A, "" DEFINE PAD _1j10vft5k OF _MSYSMENU PROMPT "Rapoarte" COLOR SCHEME 3 ; KEY ALT+R, "" DEFINE PAD _1j10vft5l OF _MSYSMENU PROMPT "Iesire" COLOR SCHEME 3 ; KEY ALT+i, "" ON PAD _1j10vft5i OF _MSYSMENU ACTIVATE POPUP vizualizar ON PAD _1j10vft5j OF _MSYSMENU ACTIVATE POPUP actualizar ON PAD _1j10vft5k OF _MSYSMENU ACTIVATE POPUP rapoarte ON SELECTION PAD _1j10vft5l OF _MSYSMENU ; DO _1j10vft5m ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?")

DEFINE POPUP vizualizar MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF vizualizar PROMPT "Materiale" DEFINE BAR 2 OF vizualizar PROMPT "Furnizori" DEFINE BAR 3 OF vizualizar PROMPT "Intrari" ON SELECTION BAR 1 OF vizualizar ; DO _1j10vft5n ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?") ON SELECTION BAR 2 OF vizualizar ; DO _1j10vft5o ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?") ON SELECTION BAR 3 OF vizualizar ; DO _1j10vft5p ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?")

DEFINE POPUP actualizar MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF actualizar PROMPT "Adaugare" DEFINE BAR 2 OF actualizar PROMPT "Modificare/Stergere" ON SELECTION BAR 1 OF actualizar ; DO _1j10vft5q ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?") ON SELECTION BAR 2 OF actualizar ; DO _1j10vft5r ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?")

203

Baze de date

DEFINE POPUP rapoarte MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF rapoarte PROMPT "Lista materiale/Data" DEFINE BAR 2 OF rapoarte PROMPT "Lista Furnizori/Materiale" ON SELECTION BAR 1 OF rapoarte do form mat_data ON SELECTION BAR 2 OF rapoarte ; DO _1j10vft5s ; IN LOCFILE("PROIECT_EX\MENU1" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU1?")

* * * * * * * * * * * *

********************************************************* * * _1J10VFT5M * * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* PROCEDURE _1j10vft5m Clear events CLOSE database SET sysmenu to default MENU1.MPR, ON SELECTION PAD Iesire 1 Record: 16 ON SELECTION PAD

* * * * * * * * * * * *

********************************************************* * * _1J10VFT5N * * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* MENU1.MPR, Record: 5 ON SELECTION BAR 1 OF POPUP vizualizar

ON SELECTION BAR 1 OF POPUP vizualizar Materiale 2

PROCEDURE _1j10vft5n

204

SELECT 2 BROWSE fields cod_mat, denumire noedit

* * * * * * * * * * * *

********************************************************* * * _1J10VFT5O * * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* MENU1.MPR, Record: 6 ON SELECTION BAR 2 OF POPUP vizualizar

ON SELECTION BAR 2 OF POPUP vizualizar Furnizori 3

PROCEDURE _1j10vft5o SELECT 3 BROWSE fields cod_furn, denumire noedit

* * * * * * * * * * * *

********************************************************* * * _1J10VFT5P * * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* MENU1.MPR, Record: 7 ON SELECTION BAR 3 OF POPUP vizualizar

ON SELECTION BAR 3 OF POPUP vizualizar Intrari 4

PROCEDURE _1j10vft5p SELECT 4 BROWSE noedit

* * *

********************************************************* * * _1J10VFT5Q ON SELECTION BAR 1 OF POPUP actualizar

205

Baze de date

* * * * * * * * *

* * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* MENU1.MPR, Record: 10

ON SELECTION BAR 1 OF POPUP actualizar Adaugare 5

PROCEDURE _1j10vft5q DO form adaug

* * * * * * * * * * * *

********************************************************* * * _1J10VFT5R * * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* MENU1.MPR, Record: 11 ON SELECTION BAR 2 OF POPUP actualizar

ON SELECTION BAR 2 OF POPUP actualizar Modificare/Stergere 6

PROCEDURE _1j10vft5r DO form modificare

* * * * * * * * * * * *

********************************************************* * * _1J10VFT5S * * Procedure Origin: * * From Menu: * Called By: * Prompt: * Snippet: * ********************************************************* MENU1.MPR, Record: 15 ON SELECTION BAR 2 OF POPUP rapoarte

ON SELECTION BAR 2 OF POPUP rapoarte Lista Furnizori/Materiale 7

206

PROCEDURE _1j10vft5s SELECT 4 SET order to tag cod_mat of materiale.cdx in materiale SET relation to cod_mat into materiale additive SET order to tag cod_furn of furnizori.cdx in furnizori SET relation to cod_furn into furnizori additive REPORT form furniz_mater preview SET relation off into materiale SET relation off into furnizori ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\MODIFICARE.SCX Name = "Dataenvironment" Top = 0 Left = -1 Height = 294 Width = 424 DoCreate = .T. Caption = "Modificare / Stergere" Name = "Form1" ErasePage = .T. PageCount = 3 Top = 9 Left = 10 Width = 400 Height = 266 TabIndex = 1 Name = "Pageframe1" Page1.FontBold = .T. Page1.Caption = "Furnizori" Page1.Name = "Page1" Page2.FontBold = .T. Page2.Caption = "Materiale" Page2.Name = "Page2" Page3.FontBold = .T. Page3.Caption = "Intrari" Page3.Name = "Page3" PROCEDURE Page1.Activate SELECT 3 GO top denf='' thisform.Pageframe1.Page1.refresh

207

Baze de date

thisform.Pageframe1.Page1.text1.setfocus ENDPROC PROCEDURE Page2.Init PUBLIC umas(6) umas(1)='BUC' umas(2)='KG' umas(3)='TO' umas(4)='MC' umas(5)='MP' umas(6)='ML'

ENDPROC PROCEDURE Page2.Activate SELECT 2 GO top denm='' thisform.Pageframe1.Page2.refresh thisform.Pageframe1.Page2.text1.setfocus ENDPROC PROCEDURE Page3.Activate SELECT 2 GO top SELECT 3 GO top SELECT 4 GO top thisform.Pageframe1.Page3.refresh ENDPROC ControlSource = "cod_furn" Height = 21 Left = 92 TabIndex = 1 Top = 11 Width = 81 Name = "Text1" ControlSource = "denumire" Height = 23 Left = 92 TabIndex = 2 Top = 44

208

Width = 250 Name = "Text2" ControlSource = "adresa" Height = 38 Left = 92 TabIndex = 3 Top = 85 Width = 245 Name = "Text3" ControlSource = "tel" Height = 23 Left = 92 TabIndex = 4 Top = 133 Width = 113 Name = "Text4" Top = 174 Left = 246 Height = 21 Width = 62 FontBold = .T. Caption = "Stergere" TabIndex = 5 ForeColor = 255,0,0 Name = "Command1" PROCEDURE Click codf=cod_furn Delete PACK SELECT 4 LOCATE for codf=cod_furn DO while found(4) Delete CONTINUE ENDDO PACK SELECT 3 thisform.Pageframe1.Page1.refresh thisform.Pageframe1.Page1.text1.setfocus ENDPROC FontBold = .T.

209

Baze de date

Caption = "Cod furnizor" Height = 21 Left = 3 Top = 11 Width = 72 TabIndex = 6 Name = "Label1" FontBold = .T. Caption = "Denumire" Height = 21 Left = 3 Top = 43 Width = 80 TabIndex = 7 Name = "Label2" FontBold = .T. Caption = "Adresa" Height = 22 Left = 3 Top = 83 Width = 85 TabIndex = 8 Name = "Label3" FontBold = .T. Caption = "Telefon" Height = 20 Left = 3 Top = 135 Width = 74 TabIndex = 9 Name = "Label4" Top = 135 Left = 239 Height = 20 Width = 31 Picture = top.bmp Caption = "" Name = "Command2" PROCEDURE Click GO top thisform.Pageframe1.Page1.refresh

210

ENDPROC Top = 135 Left = 317 Height = 20 Width = 31 Picture = next.bmp Caption = "" Name = "Command3" PROCEDURE Click Skip 1 IF eof(3) GO bottom MESSAGEBOX('Sfrsit fisier !',64) ENDIF thisform.Pageframe1.Page1.refresh ENDPROC Top = 135 Left = 361 Height = 20 Width = 31 Picture = end.bmp Caption = "" Name = "Command4" PROCEDURE Click GO bottom thisform.Pageframe1.Page1.refresh

ENDPROC Top = 135 Left = 278 Height = 20 Width = 31 Picture = prev.bmp Caption = "" Name = "Command5" PROCEDURE Click Skip -1 IF bof(3) GO top MESSAGEBOX('Inceput fisier !',64) ENDIF

211

Baze de date

thisform.Pageframe1.Page1.refresh ENDPROC ControlSource = "denf" Height = 24 Left = 92 Top = 173 Width = 145 Name = "Text5" PROCEDURE KeyPress LPARAMETERS nKeyCode, nShiftAltCtrl

ENDPROC PROCEDURE Valid LOCATE for upper(left(denf,len(alltrim(denf))))=; upper(left(denumire,len(alltrim(denf)))) IF found(3) then thisform.Pageframe1.Page1.refresh ELSE MESSAGEBOX('Nu exista !',64) ENDIF ENDPROC FontBold = .T. Caption = "Cauta furnizor" Height = 22 Left = 3 Top = 176 Width = 78 Name = "Label5" ControlSource = "cod_mat" Height = 25 Left = 115 TabIndex = 1 Top = 16 Width = 76 Name = "Text1" ControlSource = "denumire" Height = 25 Left = 115 TabIndex = 2 Top = 64

212

Width = 256 Name = "Text2" FontBold = .T. Caption = "Cod material" Height = 24 Left = 10 Top = 20 Width = 82 TabIndex = 5 Name = "Label1" FontBold = .T. Caption = "Denumire" Height = 21 Left = 10 Top = 70 Width = 81 TabIndex = 6 Name = "Label2" RowSourceType = 5 RowSource = "umas" Enabled = .T. Height = 71 Left = 115 TabIndex = 3 Top = 110 Width = 100 Name = "List1" PROCEDURE Click WITH thisform.Pageframe1.Page2 .Text4.value=.list1.value um=.Text4.value .Text4.refresh .Text3.setfocus ENDWITH

ENDPROC FontBold = .T. Caption = "Unitate de masura" Height = 22 Left = 10 Top = 120

213

Baze de date

Width = 105 Name = "Label3" ControlSource = "denm" Height = 25 Left = 115 Top = 191 Width = 198 Name = "Text3" PROCEDURE Valid LOCATE for upper(left(denm,len(alltrim(denm))))=; upper(left(denumire,len(alltrim(denm)))) IF found(2) then thisform.Pageframe1.Page2.list1.value=um thisform.Pageframe1.Page2.refresh ELSE MESSAGEBOX('Nu exista !',64) ENDIF ENDPROC FontBold = .T. Caption = "Cauta material" Height = 24 Left = 10 Top = 197 Width = 102 Name = "Label4" Top = 160 Left = 236 Height = 20 Width = 31 Picture = top.bmp Caption = "" Name = "Command2" PROCEDURE Click GO top thisform.Pageframe1.Page2.refresh ENDPROC Top = 160 Left = 314 Height = 20 Width = 31 Picture = next.bmp

214

Caption = "" Name = "Command3" PROCEDURE Click Skip 1 IF eof(2) GO bottom MESSAGEBOX('Sfrsit fisier !',64) ENDIF thisform.Pageframe1.Page2.refresh ENDPROC Top = 160 Left = 358 Height = 20 Width = 31 Picture = end.bmp Caption = "" Name = "Command4" PROCEDURE Click GO bottom thisform.Pageframe1.Page2.refresh

ENDPROC Top = 160 Left = 275 Height = 20 Width = 31 Picture = prev.bmp Caption = "" Name = "Command5" PROCEDURE Click Skip -1 IF bof(2) GO top MESSAGEBOX('Inceput fisier !',64) ENDIF thisform.Pageframe1.Page2.refresh ENDPROC FontBold = .T. ControlSource = "um" Enabled = .T. Height = 24

215

Baze de date

Left = 18 ReadOnly = .T. Top = 144 Width = 83 Name = "Text4" FontBold = .T. ControlSource = "cod_mat" Height = 25 Left = 86 ReadOnly = .T. TabIndex = 1 Top = 85 Width = 84 Name = "Text1" FontBold = .T. ControlSource = "cod_furn" Height = 25 Left = 85 ReadOnly = .T. TabIndex = 3 Top = 204 Width = 82 Name = "Text2" ControlSource = "cant" Height = 25 Left = 276 TabIndex = 5 Top = 30 Width = 84 Name = "Text3" ControlSource = "pu" Height = 25 Left = 276 TabIndex = 6 Top = 67 Width = 107 Name = "Text4" ControlSource = "data_in" Height = 25 Left = 276 TabIndex = 7

216

Top = 102 Width = 75 Name = "Text5" BoundColumn = 1 RowSourceType = 6 RowSource = "materiale" ControlSource = "denumire" Height = 51 Left = 5 Sorted = .F. TabIndex = 2 Top = 28 Width = 164 BoundTo = .T. Name = "List1" PROCEDURE Click SELECT 2 codm=cod_mat thisform.Pageframe1.Page3.text1.refresh ENDPROC RowSourceType = 6 RowSource = "furnizori" ControlSource = "denumire" Height = 52 Left = 4 Sorted = .F. TabIndex = 4 Top = 142 Width = 163 Name = "List2" PROCEDURE Click SELECT 3 codf=cod_furn thisform.Pageframe1.Page3.Text2.refresh thisform.Pageframe1.Page3.Text3.setfocus ENDPROC FontBold = .T. Caption = "Cod material" Height = 23 Left = 7 Top = 87

217

Baze de date

Width = 81 TabIndex = 9 Name = "Label1" FontBold = .T. Caption = "Cod furnizor" Height = 24 Left = 8 Top = 207 Width = 69 TabIndex = 10 Name = "Label2" FontBold = .T. Caption = "Cantitate" Height = 28 Left = 204 Top = 34 Width = 57 TabIndex = 11 Name = "Label3" FontBold = .T. Caption = "Pret unitar" Height = 28 Left = 204 Top = 72 Width = 66 TabIndex = 12 Name = "Label4" FontBold = .T. Caption = "Data intrarii" Height = 26 Left = 204 Top = 105 Width = 69 TabIndex = 13 Name = "Label5" FontBold = .T. Caption = "Denumire material" Height = 16 Left = 14 Top = 7 Width = 125

218

TabIndex = 14 ForeColor = 0,64,0 Name = "Label6" FontBold = .T. Caption = "Denumire furnizor" Height = 22 Left = 7 Top = 122 Width = 142 TabIndex = 15 ForeColor = 255,0,0 Name = "Label7" Top = 156 Left = 213 Height = 20 Width = 31 Picture = top.bmp Caption = "" Name = "Command2" PROCEDURE Click SELECT 4 GO top thisform.Pageframe1.Page3.refresh ENDPROC Top = 156 Left = 291 Height = 20 Width = 31 Picture = next.bmp Caption = "" Name = "Command3" PROCEDURE Click SELECT 4 Skip 1 IF eof(4) GO bottom MESSAGEBOX('Sfrsit fisier !',64) ENDIF thisform.Pageframe1.Page3.refresh SELECT 2 LOCATE for intrari.cod_mat=materiale.cod_mat

219

Baze de date

IF found(2) thisform.Pageframe1.Page3.list1.value=denumire ENDIF SELECT 4 thisform.Pageframe1.Page3.refresh

ENDPROC Top = 156 Left = 335 Height = 20 Width = 31 Picture = end.bmp Caption = "" Name = "Command4" PROCEDURE Click SELECT 4 GO bottom thisform.Pageframe1.Page3.refresh

ENDPROC Top = 156 Left = 252 Height = 20 Width = 31 Picture = prev.bmp Caption = "" Name = "Command5" PROCEDURE Click SELECT 4 Skip -1 IF bof(4) GO top MESSAGEBOX('Inceput fisier !',64) ENDIF thisform.Pageframe1.Page3.refresh SELECT 3 LOCATE for intrari.cod_furn=furnizori.cod_furn IF found(3) thisform.Pageframe1.Page3.List2.value=denumire ENDIF SELECT 4

220

thisform.Pageframe1.Page3.refresh ENDPROC Top = 195 Left = 222 Height = 25 Width = 63 FontBold = .T. Caption = "Stergere" ForeColor = 255,0,0 Name = "Command1" PROCEDURE Click btnvalue=0 btnvalue=messagebox('Stergere ?',4+32+256) IF btnvalue=6 then Delete PACK ENDIF thisform.Pageframe1.Page3.refresh ENDPROC Top = 236 Left = 345 Height = 25 Width = 49 FontBold = .T. Caption = "Iesire" Name = "Command2" PROCEDURE Click thisform.release ENDPROC ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\NEXT.BMP ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\PREV.BMP ****** * C:\DOCUMENTS AND SETTINGS\MIHAI\MY DOCUMENTS\CURS_BD\APLICATII_CURS_BD\PROIECT_EX\TOP.BMP

12.2.2. Realizarea documentaiei i a aplicaiei n format executabil

Pentru obinerea documentaiei referitoare la sursele proiectului se parcurg urmtorii pai: a) Se nchide aplicaia Project Manager;

221

Baze de date

b) Din meniul Tools se alege opiunea Wizards / Documenting. Aplicaia Documenting


Wizard parcurge 6 pai pentru elaborarea documentaiei proiectului:

1. Se alege fiierul surs (proiectul magazie.pjx) inclusiv calea ctre acesta. Se apas butonul Next; 2. Se seteaz caractere mari pentru cuvinte cheie (Keywords) i simboluri; 3. Se seteaz identare text (Tab sau Space); 4. Se adug antet; 5. Se selecteaz tipuri de rapoarte; 6. Se ncheie cu specificarea subdirectorului n care vor fi generate rapoartele (existent sau nou creat). Fiierul MAGAZIE.LST va conine codul surs (fiier de tip text care poate fi ulterior trecut ntr-un fiier Word) pentru toate programele i procedurile ataate obiectelor componentelor folosite n proiect. Se genereaz un tabel care va conine toate toate fiierele proiectului, generate, primare i implicite (videoformate, rapoarte, meniuri), fiierele de tip BMP etc. De exemplu, videoformatele (Forms) sunt salvate ntr-un fiier cu extensia .scx. La crearea videoformatului, tabelul cu extensia .scx conine o nregistrare pentru videoformat, o nregistrare pentru datele de mediu i dou nregistrri pentru uz intern. Pentru fiecare obiect adugat n videoformat se adaug o nou nregistrare. Anumite componente ale Visual FoxPro constau din fiiere multiple: un fiier primar i unul sau mai multe fiiere implicite. De exemplu, cnd se creaz un videoformat, Visual FoxPro creaz un fiier .scx (fiier primar) i un fier .sct (fiier implicit) Urmtoarele componente au fiiere multiple (Tabelul 1) Tabelul 1
Component Fiiere primare Fiiere implicite

Form Report

.scx .frx

.sct .frt

222

Label Class Library Menu Table Database

.lbx .vcx .mnx .dbf .dbc

.lbt .vct .mnt .fpt, .cdx, .idx .dct, .dcx

Tabelul 2 prezint extensiile i tipurile de fiiere asociate care sunt utilizate n Visual FoxPro Tabel 2
Extensie Tip fiier

.act .app .cdx .chm .dbc .dbf .dbg .dct .dcx .dep .dll .err .esl .exe .fky .fll .fmt .fpt .frt .frx

Documenting Wizard action diagram Generated application or Active Document Compound index Compiled HTML Help Database Table Configuraie debugger memo database index database Fiier dependen (creat de Setup Wizard) Windows Dynamic Link Library Eroare de compilare Visual FoxPro suport bibliotec Program executabil Macro Visual FoxPro Dynamic Link Library Format Fiier Table memo Report memo Report

223

Baze de date

.fxp .h .hlp .htm .idx .lbt .lbx .log .lst .mem .mnt .mnx .mpr .mpx .ocx .pjt .pjx .prg .qpr .qpx .sct .scx .spr .spx .tbk .txt .vct

Program compilat Antet fiier (pentru includere n Visual FoxPro or C/C++ program) WinHelp HTML Index, compact index Label memo Label Coverage log Documenting Wizard list Salvare variabile Menu memo Menu Program menu generat Program menu compilat ActiveX control Project memo Project Program Program query generat Program query compilat Form memo Form Screen Program generat (numai pentru versiunile anteriaore FoxPro) Screen Program compilat (numai pentru versiunile anteriaore FoxPro) Memo backup Text Visual class library memo

224

.vcx .vue .win

Clas de biblioteci Visual FoxPro 2.x view Fiier Window

Pentru a genera programul executabil al aplicaiei, se deschide Project Manager pentru aplicaia magazie.pjx i se apas butonul Build i se specific opiunile pentru construire, Figura 1.

Fig. 1 Opiunile de construire se referer la urmtoarele aciuni: reconstruirea proiectului (Rebuild Project); construirea aplicaiei (Build Application); construirea programului executabil (Build Executable); construirea componentelor COM (Component Object Model pentru includerea controalelor ActivX sau dac s-a creat un Automation server) sub form de DLL (librrie de legtur dinamic). Aciune de construire a executabilului are un subset de opiuni:

225 recompilarea tuturor fiierelor; afiarea erorilor; lansare n execuie dup construire; regenerarea identificrii obiectelor.

Baze de date

Pentru celelalte aciuni numrul opiunilor din subset poate varia n funcie de aciune. De exemplu, pentru construirea elementelor COM vor fi active doar trei opiuni, fr cea de rulare dup construire (un DLL nu poate fi lansat n execuie fiind o librrie dinamic). Programul executabil generat poate fi rulat pe acelai calculator sau pe un altul, cu condiia ca acesta s aib Visual FoxPro instalat.
12.2.3. Utilizarea Setup Wizard

Pentru a mri portabilitatea aplicaiei se folosete Setup Wizard, n vederea realizrii de subrutine de instalare a aplicaiei pe un alt calculator. Din meniul Tools se alege submeniul Wizard, apoi opiunea Setup. Se parcurg 7 pai: 1. Localizarea fiierelor se specific subdirectorul care conine fiierele i subdirectoarele ce trebuie distribuite. Nu se poate folosi Distrib ca nume de subdirector n care se afl fiierele i subdirectoarele ce se vor distribui; 2. Specificarea componentelor care vor fi incluse n pachetul de distribuie, i anume: Visual FoxPro 6.0 Runtime librriile Visual FoxPro; Microsoft 8.0 Graph Runtime; ODBC Drivers; COM Components; ActiveX Controls; HTML help engine; 1.44 MB 3.5 wizard-ul creaz imagini pentru floppy disk; Websetup (compressed) wizard-ul creaz un program de instalare dens compresat

3. Crearea subdirectorului pentru Disk Image:

proiectat pentru descrcare rapid de pe un web site;


Netsetup wizard-ul creaz un singur director care va conine toate fiierele. Setup dialog box caption titlul ferestrei de Setup, opional;

4. Specificarea opiunilor de instalare referitoare la:

226

Copyright information obligatoriu; Post-setup executable specificarea unei aciuni post instalare, opional;

5. Identificarea destinaiei implicite pentru fiier rutina setup va plasa aplicaia n directorul care se specific n Default directory . Opiunea Program group va crea un grup de programe pentru aplicaia instalat care se va regsi n meniul Start al calculatorului utilizatorului. Opiunea User can modify, ofer posibilitatea modificrii subdirectorului implicit de instalatre; 6. Schimbarea setrilor fiierelor se afieaz fiierele i opiunile fcute pentru ele cu posibilitatea de a se opera modificri legate de nume, destinaie sau alte modificri; 7. Terminarea procesului Setup Wizard la acest pas se poate crea un fiier de dependen (.dep) care permite folosirea altor utiliti la instalarea aplicaiei. Dup apsarea butonului de
Finish, Setup Wizard realizeaz urmtoare aciuni:

nregistreaz configuraia pentru urmtoarea utilizare a distribuiei din aceeai cale; lanseaz procesul de creare a imaginilor disc.

Imaginile disc pot fi copiate pe orice mediu de stocare i poate fi distribuit utilizatorilor aplicaiei.

227

Baze de date

A. Anexa
Limite ale SISTEMULUI VFP 6.0

Caracteristic Nr. maxim de nregistrri ntr-o tabel Mrimea maxim a unei tabele Nr. maxim de caractere pe nregistrare Nr. maxim de cmpuri pe nregistrare Nr. maxim de tabele deschise simultan Nr. maxim de caractere pentru un cmp Nr. maxim de bytes pentru cheia de index compus Nr. maxim de bytes pentru cheia de index simplu Nr. maxim de fiiere de index deschise pentru o tabel Nr. maxim de fiiere de index deschise pentru toate zonele de lucru Nr. maxim de legturi Lungimea maxim a unei expresii relaionale Valoarea maxim pentru ntregi Precizia n calculul numeric Mrimea maxim pentru un cmp de tip caracter Mrimea maxim pentru un cmp de tip numeric Nr. maxim de caractere pentru un cmp dintr-o tabel liber Nr. maxim de caractere pentru un cmp dintr-o tabel care aparine unei BD Nr. maxim de variabile Nr. maxim de masive Nr. maxim de elemente ntr-un masiv Nr. maxim de linii surs ntr-un program Mrimea maxim a modulului de program compilat Nr. maxim de proceduri (subprograme) Nr. maxim de apeluri DO imbricate Nr. maxim de comenzi de ciclare Nr. maxim de parametri transmii Nr. maxim de tranzacii Nr. maxim de obiecte la definirea unui raport

Valoare 1 miliard 2 Gb 65.500 255 255 254 100 240 nelimitat nelimitat nelimitat nelimitat 2.147.483.647 16 254 20 10 128 65.000 65.000 65.000 nelimitat 64 Kb nelimitat 128 384 27 5 nelimitat

A. Anexa Nr. maxim de niveluri de grupare ntr-un raport Nr. maxim de ferestre deschise Nr. maxim de ferestre BROWSE deschise Nr. maxim de caractere ntr-un ir de caractere Nr. maxim de caractere ntr-o linie de comand Nr. maxim de fiiere deschise Nr. maxim de cmpuri selectate prin comanda SELECTSQL 255 128 nelimitat 255 16.777.184 8.192 limit sistem

228

229

Baze de date

Index de termeni
accesul la date direct, 97 secvential, 97 actualizarea bazei de date, 13 algebr relaional diferen, 20 diviziunea, 21 intersecia, 21 jonciune, 21 jonciune exterioar, 21 jonciune exterioar complet, 21 jonciune exterioar dreapta, 21 jonciune exterioar stnga, 21 jonciune natural, 21 produs cartezian, 20 proiecia, 20 reuniunea, 20 selecia, 20 anularea marcrii pentru tergere fizic, 49 apelul unui (sub)program, 130 arhitectura sistemului de baze de date, 6 atribut, 4 complex, 29 cu o singur valoare, 29 cu set de valori, 29 derivat, 29 fr valoare, 29 bnci de date, 5 baz de date, 4 baz de date relaional, 28 cmp, 4 crearea etichetelor, 69 crearea interogrilor, 70 crearea rapoartelor, 68 crearea structurii unei tabele, 149 crearea tabelelor, 66 crearea videoformatelor, 67 de date relaional, 8 deschiderea bazei de date, 52, 60 deschiderea unei tabele, 49 dictionar de date, 4 domeniu, 19 entitate, 4 fiier index, 94 compus, 94 simplu, 94 funcie utilizator, 129 nchiderea bazei de date/tabelei, 64 Independena datelor fizic, 10 logic, 10 indexarea tabelei, 92 nregistrare, 4 fizic, 4 logic, 4 interclasarea documentelor, 71 interogarea bazei de date, 13 legtura ntre tabele, 113 matrice, 85 metadate, 4 model de date, 6, 7 distribuit, 8 ierarhic, 8 in reea, 8 primitiv, 8 semantic (orientat obiect), 9 modificarea nregistrrilor, 106 modificarea structurii, 91 bazei de date, 62 tabelei, 62 procedur utilizator, 129 programare modular, 119 orientat pe obiecte, 37 procedural, 119 structurat, 119 programarea orientat pe obiecte abstractizarea, 42 clasa, 37 clasa parinte, 38 evenimentul, 39 ncapsularea, 41 mesaj, 38 metoda, 38 motenirea, 41 obiect, 38 polimorfism, 41 proprietatea, 39 restricii de integritate, 38 subclasa, 37 redenumire fiier, 117 redundan minim, 14 relaie, 19

Index de termeni reorganizarea bazei de date, 14 Schema n modelul relaional, 29 securitatea datelor, 14 sistem de gestiune a bazelor de date, 5, 9 complet relaional, 36 minimal relaional, 36 relaionale, 19 sisteme de baze de date, 5 sortarea tabelei, 92 tergerea fiierelor, 110 tergerea nregistrrilor, 109 fizic, 50, 63, 110, 144 logic, 49, 63, 109, 144 structura bazei de date, 6 structura unei functii, 130 structura unei funcii, 130 structura unei proceduri, 129 subprograme imbricate, 130 tabel, 19 transmiterea parametrilor, 130 prin referin, 131 prin valoare, 131 validarea cmpurilor, 55 variabil global, 85 local, 85 vectori, 85 zon de lucru, 52

230

231

Baze de date

Bibliografie
1. Dima, G., Dima M. FoxPro, Editura Teora, Bucureti, 1993. 2. Dima, G., Dima M. FoxPro Meniuri, Editura Teora, Bucureti, 1994. 3. Kifer, M., Bernstein, A., Lewis, Ph. Database Systems An Application-Oriented Approach,

State University of New York, Stony Brook, 2005.


4. Lungu, I. i al. Sistemul FoxPro Prezentare i Aplicaii, Editura All, Bucureti, 1993. 5. M. Velicanu, i al. Sisteme de Gestiune a Bazelor de Date, Editura Petrion, Bucureti, 2000; 6. Velicanu, M., Lungu, I., Muntean, M. Dezvoltarea Aplicaiilor cu Baze de Date n Visual

FoxPro, Editura All, Bucureti, 2001.


7. *** Visual FoxPro 6.0 Manualele Microsoft 8. *** MSDN Library, April 2003.