Sunteți pe pagina 1din 96

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