Sunteți pe pagina 1din 163

Medii de Programare

Note de Curs

Conf. dr. ing. Sorin Borza

Introducere

INTRODUCERE

Modelul relaional al bazelor de date a fost formulat i publicat de ctre


cercettorul american dr. Edgar Cood la nceputul anilor 70. Model criticat la nceput
datorit unor imperfeciuni ale sale, s-a impus treptat pe piaa bazelor de date, astfel
c n prezent ocup cel mai important segment din aceasta. Datele i relaiile sunt
reprezentate printr-o structur logic numit relaie. O relaie poate fi reprezentat sub
forma unei tabele bidimensionale sau a unui fiier cu nregistrri. Modelul relaional a
fost definit riguros din punct de vedere matematic, el constituind un mediu permanent
de studiu al proprietilor logice ale unui sistem de baze de date. Edgar F. Codd a
publicat un set de 13 reguli care determin dac un Sistem de Gestiune a Bazelor de
Date (SGBD) este relaional. Ulterior pn n anii 90, Codd apublicat un numr de
aproximativ 100 de reguli. n general nici un SGBD pus n vnzare nu respect n
totalitate aceste reguli, ci doar un numr mai mic sau mai mare al lor, dar acest lucru
nu mpiedic ataarea proprietii relaional, produsului respectiv.
Visual FoxPro face parte din acea categorie de aplicaii cunoscute sub numele
de Sisteme de Gestiune a Bazelor de Date Relaional Obiectuale (SGBDRO).
Acesta este ultimul tip de baze de date n care suprtul de memorare al datelor este
relaional iar limbajul de programare este obiectual. Visual FoxPro pune la dispoziia
utilizatorilor utilitare complexe care ajut la crearea relaiilor (tabelelor), a indecilor,
la introducerea datelor i la obinerea rapoartelor pe baza lor. FoxPro ofer un
mecanism rapid i flexibil de manipulare a fiierelor de date (fiierele cu extensia
DBF) sau a bazelor de date compuse din mai multe fiiere cu extensia DBF.
Vechiul FoxPro sub DOS sau sub Windows este un dialect a ceea ce este
cunoscut ca limbajul Xbase. Limbajul procedural din Foxpro, care este i elementul
su central, este puternic i flexibil avnd de asemenea un nalt grad compatibilitate
cu aplicaiile Xbase.
Visual FoxPro nu pune la dispoziie numai un compilator i un mecanism de
manipulare a bazelor de date, ci furnizeaz i un set bogat de utilitare puternice de
proiectare, ncorporate ntr-un mediu omogen, att de puternic i de comod nct
majoritatea proiectanilor de aplicaii FoxPro prefer s-i realizeze aplicaiile n
interiorul su.
Limbajele de programare Xbase, din care face parte i FoxPro, reprezint o
familie de limbaje de programare descendente ale limbajului dBase II produs de firma
Ashton-Tate. Limbajul este caracterizat printr-o sintax uor de nsuit, apropiat de
engleza curent i printr-un bogat set de comenzi, orientate pe nregistrri, pentru
manipularea la nivel nalt al datelor. Originea limbajului Xbase este legat de un
limbaj brevetat de manipulare a datelor pe calculatoare, creat pentru Laboratorul de

Introducere

Propulsie cu Reacie (JPL Jet Propulsion Laboratory) din cadrul NASA la sfritul
anilor 70. Acest limbaj a fost cunoscut sub numele JPLDIS, fiind ulterior portat sub
numele de Vulcan, pe sistemul de operare CP/M. Sesiznd posibilitile comerciale
ale produsului, Wayne Ratliff a prsit JPL i a trecut la firma Ashton-Tate unde a
elaborat programul dBase II care a fost o realizare deosebit ajutnd la dovedirea
utilitii microcalculatoarelor. n momentul n care a aprut calculatorul IBM PC,
dBase II a fost portat pe aceast platform de ctre echipa lui Ratliff, aprnd astfel
produsul dBase III, o versiune cu mult mai performant dect ceea ce exista pe piaa
bazelor de date n acel moment. n jurul anilor 80 produsul firmei Aston-Tate
domina aproximativ 75% din piaa bazelor de date pe microcalculatoare. Pe msur
ce aplicaiile Xbase au devenit mai complexe, a crescut, ca o cerin, i viteza de
lucru a produsului. Firma Ashton - Tate a fost la nceput indiferent la acest aspect,
permind altor companii care au nceput s imite limbajul dBase III s se dezvolte pe
aceast direcie.
Una dintre aceste companii a fost Fox Software din Perrysburg Ohio. Primul
lor produs FoxBase, a fost o imitaie dBase II. Fox i-a creat rapid o reputaie bazat
pe vitez i pe maxima compatibilitate cu limbajul dBase. Un alt productor,
Nantucket, a produs compilatorul Clipper care a pus mai mult accentul pe crearea
programelor executabile pure, urmnd propria lor cale, cu extensii nestandard ale
limbajului.
n anul 1988, Ashton-Tate ncepea s piard piaa nu numai fa de produsele
imitaie, dar i fa de numrul din ce n ce mai mare de sisteme de baze de date nondBase. n acest timp Fox Software lucra pe cont propriu la un nou produs, cunoscut
sub numele de FoxPro. La trgul Fall Comdex din 1989, Ashton-Tate a anunat
lansarea oficial a produsului dBase IV, care a fost aproape imediat caracterizat de
critici ca avnd deficiene iremediabile. Tot la acest trg demonstraiile care sau fcut
au scos n eviden faptul c produsul care urma s fie lansat, FoxPro 1.0, era mult
mai rapid i avea o serie de avantaje majore asupra proasptului lansat dBase IV.
La cteva zile dup aceste evenimente firma Ashton-Tate a intentat proces
mpotriva produsului Fox, n sensul c produsul nclca dreptul de copyright al firmei
Ashto-Tate asupra produsului dBase III. Acest proces a avut ca efect distrugerea
firmei Ashton-Tate i o mare publicitate pentru firma Fox Software. Firma Borland
Internaional a achiziionat Ashton-Tate i produsul su principal dBase IV, trecnd la
modificarea i mbuntirea produsului.
FoxPro i-a dobndit propria sa personalitate o dat cu versiunea 2.0, aprut
n iulie 1991. Cu versiunea 2.0 Fox i-a consolidat poziia sa de lider n inovaia
tehnologic din domeniul Xbase. n vara anului 1992, compania Fox Software a fost
achiziionat de ctre concernul Microsoft. Produsul FoxPro a continuat s fie
dezvoltat sub mediul Dos, aprnd versiunile 2.5 i 2.6. Sub patronajul Microsoft
produsul FoxPro a migrat n primul rnd spre mediul Windows prin versiunile
FoxPro 2.6 for Windows i ulterior Visual FoxPro versiunile 3.0, 5.0, 7.0, 8.0 i n
curnd 9.0.

Introducere

O schimbare major n Visual Fox, fa de Fox Pro, const n limbajul de


programare orientat obiect, fa de limbajul structurat clasic corespunztor versiunii
sub DOS. Din motive de compatibilitate n Visual Fox poate fi folosit programarea
structurat, instruciunile din FoxPro 2.6 fiind compatibile 100% cu mediul Visual
Fox.
O alt schimbare major const n trecerea la elemente de programare vizual.
Dei n versiunile 2.6 pentru DOS i Windows existau elemente de programare
visual proprii Generatoarelor, n Visual Fox aceste elemente sunt adaptate modelului
orientrii pe obiecte i modelului programrii conduse de evenimente.
Alte modificri majore se refer la modul de concepere a entitilor pentru
memorarea datelor. Pe lng clasicul tabel sau relaie n Visual Fox apare baza de
date de tip container, ca element important de memorare a datelor. Aceasta ofer
faciliti n plus pentru validarea datelor, att la nivel de cmp ct i la nivel de
nregistrare.
Visual FoxPro ofer suport pentru tehnica OLE de tragere i plasare (drag-anddrop), instrument care permite transferul de date ntre VFP, Visual Basic, Windows
Explorer, Microsft Word i Excel etc. VFP permite ca datele construite i
administrate n acest mediu, s fie folosite n alte medii de programare care nu au ca
limbaj de programare VisualFox sau cu alte cu alte cuvinte VFP este furnizor OLE
DB.
ncepnd cu versiunea 7.0 s-a introdus tehnologia de asistare a programatorului
n construirea instruciunilor denumit IntelliSense.
Visual Fox permite folosirea serviciilor Web, care reprezint clase disponibile
pe Internet, create de alii i posibil s fie folosite n propriile aplicaii.
Visual Fox permite folosirea unor faciliti legate de serverele COM, permite
conversia datelor n format XML dintr-o tabel i invers, oferind astfel utilizatorului
Visual FoxPro posibilitatea publicrii datelor pe Web.
Majoritatea limbajelor actuale referitoare la domeniul bazelor de date, fie c
sunt obiectuale sau procedurale au incorporate n ele limbajul Structured Query
Language (S.Q.L.).
S.Q.L a fost conceput ca un limbaj standard de descriere a datelor i acces la
informaiile din bazele de date, ulterior dezvoltndu-se ca o adevrat tehnologie
dedicat arhitecturilor client/server. Se reamintete c o baz de date este format
dintr-o colecie de date divers i un software care s controleze accesul la acestea
cunoscut sub numele de Sistem de Gestiune al Bazelor de Date (SGBD). Orice
SGBD modern furnizeaz un limbaj de interogare al datelor de obicei de tip SQL
(Structural Data Language) sau cel puin cteva instruciuni SQL ce permit
utilizatorilor s obin mult mai rapid i mai simplu informaiile dorite, dect dac ar
utiliza un program scris ntr-un limbaj procedural. Limbajele de interogare se pot
mpri n dou categorii:
a) limbaje algebrice, n care interogrile asupra relaiilor sunt exprimate
prin intermediul unor operatori aplicai asupra lor. n aceast categorie
se ncadreaz limbajul SQL;

Introducere

b) limbaje bazate pe calcul relaional, n care interogrile se bazeaz


pe diverse condiii puse asupra tuplelor existente n relaii.
SQL este un limbaj standard de descriere a datelor i acces la informaiile din
bazele dedate, ulterior dezvoltndu-se ca o adevrat tehnologie dedicat
arhitecturilor client/server.
Utilizat iniial de ctre firma I.B.M pentru produsul DB2, S.Q.L a devenit la
mijlocul deceniului trecut un standard de facto n domeniul bazelor de date. n aceast
perioad au fost realizate apte versiuni ale standardului S.Q.L, trei dintre acestea
fiind concepute de ctre Institutul National American de Standarde (ANSI), iar
celelalte de ctre firmele de software IBM, Microsoft Borland. n prezent, ANSI
lucreaz la standardul S.Q.L 3 care va introduce bazele de date orientate pe obiect.
Primul standard SQL a fost creat n 1989 de ctre ANSI fiind revizuit n 1992.
Proliferarea diverselor implementri ale limbajului SQL a determinat formarea
consoriului SAG (The SQL Access Group), care are drept scop conceperea de
standarde SQL, avnd la baz standardul ANSI-SQL89.
n timp, diveri membrii ai SAG i-au dezvoltat propriile standarde SQL,
astfel:
Microsoft a dezvoltat produsul ODBC (Open Database
Connectivity);
Borland a dezvoltat standardul IDAPI (Integrated Database
Application Programming Interface)
n capitolele urmtoare se va face referire la limbajul VisualFoxPro i la
comenzile SQL incorporate n acest produs. La prezentarea comenzilor i funciilor
Visual FoxPro se vor folosi o serie de convenii, preluate de la firma productoare i
care sunt prezentate n continuare:
cuvintele cheie ale limbajului sunt prezentate cu majuscule i ngroat.
Cuvintele cheie sau cuvintele rezervate sunt construcii sintactice proprii
mediului Visual FoxPro;
parantezele unghiulare ncadrnd text scris cu litere mici indic o poriune
ce trebuie furnizat de programator, aceasta fiind simbolizat prin textul
dintre paranteze;
parantezele rotunde, virgula, egalul, vor fi trecute n instruciune,
comand sau funcie, exact n poziia n care apar n definiie;
parantezele ptrate ncadreaz o poriune opional;
bara vertical indic alegerea unei opiuni i numai a uneia, din mai multe
posibile;
trei puncte de suspensie, indic faptul c funcia, comanda sau
instruciunea se continu n mod asemntor.
Exemplu sintax
DIMENSION<numetablou1>(<expN1>[,<expN2>])
[,<numetablou2>(<expN3> [,<expN4>)]
FOR <var>=<expN> TO <expN2> [STEP <expN3>]

Introducere

6
[instruciuni]
[EXIT]
[LOOP]
ENDFOR|NEXT
Exemplu program
USE SALARIAT
DISPLAY
DISPLAY ALL OFF
GO RECORD 3
DISPLAY FIELDS NUME,PRENUME,SALAR
DISPLAY FIELDS SALAR REST
GO TOP
DISPLAY ALL FOR STARE_CIVL=.F.
DISPLAY ALL TO FILE SALAR.TXT NOCONSOLE
CLOSE ALL

Capitolul

1
INTRODUCERE N VISUAL FOXPRO
1.1 Folosirea mediului propriu Visual FoxPro
Mediul Visual FoxPro versiunea 7 se prezint n figura 1.1. Visual FoxPro
definete ecranul ca o clas special denumit Screen. Visual Fox este un mediu de
programare orientat obiect. ncepnd cu versiunea 6.0 exist posibilitatea de a declara
baza de date, tabela, vederea sau legtura ntre tabele ca i o clas de obiecte, putnd
astfel gestiona datele ca i obiecte. Din acest punct de vedere, Visual Fox se comport
ca o baz de date relaonal obiectual.
Visual FoxPro este un mediu orientat pe evenimente, adic se poate trece de la
o activitate la alta, aproape n orice moment. De exemplu dac suntem ntr-o fereastr
de editare a unui fiier de date, fr s nchidem aceast fereastr se poate deschide o
fereastr de editare program. Se poate sri oricnd napoi la fereastra de editare a
fiierului de date fr a nchide fereastra de editare program. Principalele elemente ale
mediului Visual FoxPro (VFP) sunt :
Meniul mediului VFP sau meniul sistem;
Bara cu butoane (Toolbars)
Fereastra de comand (Command).

1.1.1

Bara de meniuri

Bara de meniuri se prezint n figura 1.1. Fiecare cuvnt care apare n bara de
meniuri reprezint o opiune bar sau simplu opiune. Meniul se mai numete i

Fig 1.1 Mediul integrat VFP

Capitolul 1

meniu principal sau meniul sistem.


Prile componente ale sistemului de meniuri sunt prezentate n figura 1.2.

Fig 1.2 Meniuri n mediul VFP

Pentru a selecta o anumit opiune se apas tasta A n combinaie cu tasta


subliniat a numelui opiunii respective. Pentru apelarea opiunii File se apas
concomitent tastele A+f. Submeniul, este lista care apare atunci cnd selectai o
opiune bar. Pentru a selecta o opiune a unui submeniu se deplaseaz cursorul cu
ajutorul tastelor poziionale pe opiunea dorit i se tasteaz Enter (j). Se poate de
asemenea tasta litera subliniat (sau supraluminat) asociat unei opiuni a unui
submeniu.
Unele selecii din submeniuri au o cale direct de apelare de la tastatur, afiat
n dreapta opiunii. De exemplu apelarea opiunii Help se poate face prin apsarea
tastei funcionale 1.
Unele opiuni sunt urmate de trei puncte (). Acestea reprezint o indicaie
vizual a faptului c, dup selectarea lor urmeaz o fereastr de dialog.
Opiunile meniului sistem vor fi explicate pe parcursul acestei cri n funcie
de capitolul n care vor fi tratate.

1.1.2 Configurarea mediului Visual Fox


Visual Fox permite utilizatorului individual s realizeze configurarea
particularizat a mediului de lucru funcie de dorina acestuia. Acest lucru se poate
realiza folosind meniul Tools i opiunea Options a acestuia. Fereastra care apare
(fig. 1.3) permite definirea n totalitate a caracteristicilor mediului de lucru n VFP.

Introducere n Visual FoxPro

Ea conine 13 pagini distincte care mpart setul de comenzi n urmtoarele grupuri:


Controls stabilete legturile cu bibliotecile de clasele vizuale i cu
controalele OLE;
Data definete accesul regsirea i afiarea datelor;
Editor definete caracteristicile editorului de text VFP;
File Locations definete cile de localizare a diferitelor fiiere existente n
VFP;
Forms determin configurarea proiectantului de formulare;
General permite dfinirea anumitor opiuni ale mediului VFP care nu se
regsesc n celelalte pagini ale ferestrei Options;
Regional definete modul de formatare al datei sau al numerelor funce de
zona geografic;
Projects definete opiunile managerului de proiect;
Remote data stabilete modul de legtur al VFP cu datele nderptate, n
cazul lucrului n reea;
View definete trsturile barei de stare i posibilitatea de a folosi proiectele
recent folosite;
Field Maping permite definirea n cazul folosirii proiectantului de
formulare (Form Designer), care obiect clas de baz este asociat cu un
anumit tip de dat;
IDE permite definirea caracteristicilor de sintax precum i a ferestrelor sau
meniurilor;
Debug definete caracteristicile depanatorului de programe din mediul
VFP.

Fig 1.3 Fereastra "Options" a meniului Tools

n continuare vom prezenta cteva dintre cele mai uzuale pagini


folosite la configurarea mediului.

10

Capitolul 1

Pagina Data a ferestrei Options din meniul Tools este prezentat n figura 1.4.
Ea permite stabilirea unor caracteristici cu caracter global referitoare la datele
existente n entitile de memorare VFP.

Fig 1.4 Pagina Data a ferestrei Options

Butonul:
Open exclusive permite stabilirea modului de deschidere a unui fiier ntrun mediu partajat. n mod exclusiv controlul este cedat n totalitate
utilizatorului care a deschis fiierul;
Ignore deleted records permite ignorarea nregistrrilor marcate pentru
tergere n toate comenzile Visual Fox care fac referire la ele;
Rushmore optimisation permite folosirea tehnicii de cutare rapide
Rushmore. Uneori se poate renuna la aceast tehnic. n general comenzile
VFP care o folosesc au i opiuni separate de dezactivare;
SET NEAR stabilete ce face VFP atunci cnd o cutare eueaz. Dac
opiunea nu este selectat pointerul de nregistrri este poziionat pe sfrit
de fiier. Dac opiunea este selectat atunci pointerul de nregistrri se
poziioneaz pe urmtoarea nregistrare n ordine alfabetic de la poziia
unde ar fi trebuit s existe valoarea cutat;
SET EXACT se refer la modul n care sunt evaluate criteriile de cutare.
Dac aceast opiune este setat cutarea se realizeaz caracter cu caracter
pe toat lungimea irului de caractere. Dac opunea nu este selectat
evaluarea se face caracter cu caracter pe lungimea termenului din partea
dreapt a expresiei de cutare;
SET ANSI definete modul n care se realizeaz n SQL comparaiile ntre
iruri. Cnd opiunea este selectat, se complecteaz irul mai scurt cu
blancuri pentru a egaliza cele dou iruri. Apoi se compar cele dou iruri
caracter cu caracter pentru a vedea dac ele coincid. Dac opiunea nu este
selectat comparaia se face caracter cu caracter, pe lungimea irului mai
scurt;

11

Introducere n Visual FoxPro

Grupul de comenzi Locking and buffering are ca scop lucrul cu buferele


ntr-un mediu partajat, adic gospodrirea datelor ntr-un mediu
multiutilizator.
Pagina File Locations (fig 1.5), permite localizarea unor anumite grupe de
fiiere:

Fig 1.5 Pagina File Locations

Default Directory permite definirea folderului de lucru curent;


Din aceast fereastr pot fi definite locaiile pentru alte categorii de fiiere
ca de exemplu: fiierul Help, fiierul de resurse, care pstreaz informaii
despre modul n care lucrai, generatorul HTML, corectorul ortografic etc

1.1.3

Fereastra de comand

n figura 1.1 se pune n eviden un element al mediului Visual FoxPro


denumit fereastra de comenzi (Command). Aceasta interacioneaz direct cu
sistemul, n ea se poate scrie orice fel de comand specific produsului Visual
FoxPro. O instuciune introdus n fereastra Command rmne acolo pn la
prsirea mediului, astfel nct fereastra funcioneaz i ca un istoric al comenzilor
introduse. Prin deplasarea cu ajutorul tastelor direcionale se poate alege comanda
anterioar tastat. Cu ajutorul opiunilor din meniul Edit:
copy;
cut;
paste;
se pot copia, sau muta blocuri de informaii, n diverse ferestre Fox active.

12

Capitolul 1

1.2 Editorul de texte din Visual FoxPro


Programele scrise de un programator sunt denumite fiiere program, ele sunt
fiiere text care conin instruciuni ale limbajului Visual FoxPro. Aceste fiiere au
extensia PRG i deseori sunt denumite fiiere PRG sau fiiere surs. n mediul Visual
FoxPro exist dou tipuri de fiiere program generate de sistem. Acestea sunt
prezentate n tabelul 1.2.
Tabelul 1.2
Generat de
Extensia
Constructorul de meniuri
Interogri relaionale (RQBE)

.MPR
.QPR

Fiierele program, precum i fiierele text generate de sistem, pot fi scrise i


modificate cu ajutorul editorului propriu al mediului Visual FoxPro.
Editorul mediului Visual FoxPro se poate porni n mai multe moduri. Din
submeniul File, opiunea New sau Open, apoi se specific Program (pentru a edita
un fiier program) sau File (pentru editarea unui fiier text obinuit). Visual FoxPro
va solicita numele fiierului.
Dac se pornete editorul Visual FoxPro dintr-un program sau din fereastra de
comenzi, atunci se vor folosi instruciunile:
MODIFY FILE <nume fiier> pentru editarea oricrui tip de fiier
text;
MODIFY COMMAND <nume program> pentru editarea unui fiier
program.
Instruciunea (comanda) MODIFY COMMAND se deosebete de
instruciunea MODIFY FILE sub dou aspecte. n primul rnd dac nu se specific o
anumit extensie, comanda MODIFY COMMAND creaz implicit pentru fiierul
program extensia PRG, pe cnd MODIFY FILE creaz implicit un fiier cu extensia
TXT. n al doilea rnd, Visual FoxPro ine evidena modificrilor fcute cu
MODIFY COMMAND, executnd ntodeauna versiunea cea mai nou, modificat.
Dac se tasteaz MODIFY COMMAND <nume_fiier> se va deschide
fereastra editorului de texte. Textul se introduce caracter cu caracter de la tastatur, la
sfritul fiecrei linii se tasteaz Enter. Pentru a muta cursorul n cadrul ferestrei se
folosesc tastele sau combinaiile de taste conform tabelului 1.1.
Tabelul 1.3

Combinaie Taste

Mut Cursorul

Sgeat dreapta r
Sgeat stnga l
Sgeat sus t
Sgeat jos b
Page Up u
Page Down d
Home h
End e
C+r

Un caracter la dreapta
Un caracter la stnga
O linie n sus
O linie n jos
O fereastr(pagin) de text n sus
O fereastr(pagin) de text n jos
La nceputul liniei curente
La sfritul liniei curente
Un cuvnt la dreapta

13

Introducere n Visual FoxPro


C+l
C+h
C+e

Un cuvnt la stnga
La nceputul textului
La sfritul textului

O facilitate important a editorului Visual FoxPro este posibilitatea de a selecta


un numr variabil de caractere. Dac se ine tasta S apsat i se deplaseaz
cursorul n cadrul textului cu ajutorul tastelor sau combinaiilor de taste (tabelul 1.3)
se selecteaz numrul de caractere dorit. Acelai efect se obine dac se ine apsat
butonul stng al mouse-ului i se deplaseaz cursorul acestuia peste caracterele care
se doresc a fi selectate. Dac se dorete selectarea unei linii de text, atunci se
poziioneaz cursorul la nceputul rndului, se apas tasta S i una dintre tastele
t sau b. Acelai efect se poate obine cu ajutorul mouse-ului. Se poziioneaz
cursorul acestuia la nceputul unei linii sau pe un caracter al unei linii care se dorete
a fi selectate i se face clic de trei ori.
tergerea unui caracter sau a unei poriuni de text selectat selectat se face cu
ajutorul tastelor D sau B:
Delete terge caracterul pe care este poziionat cursorul;
Backspace terge caracterul aflat imediat n stnga cursorului.
Dac exist un text selectat la apsarea uneia dintre aceste taste textul se terge.
Combinaia C+B terge cuvntul deasupra cruia se afl cursorul.
Textul selectat poate fi mutat sau copiat n diferite locuri ale fiierului cu
ajutorul opiunilor meniului Edit:
Cut
ncarc textul selectat n clipboard(zon de memorie folosit la
transferurile de date), eliminndu-l din textul surs;
Copy
ncarc textul selectat n clipboard fr a-l elimina din textul
surs;
Paste
Introduce textul ncrcat anterior n clipboard, n textul surs, la
poziia cursorului.
Selectarea caracteristicilor editorului de texte se face prin opiunea Properties
a meniului Edit (fig 1.6).

Fig 1.6 Opiunile ferestrei Edit Properties

Opiunile acestei ferestre sunt prezentate n tabelul 1.4

14

Capitolul 1
Tabelul 1.4
Opiune

Explicaii

Drag and drop editing


Word wrap

Editare drag and drop


Determin saltul automat la linie nou cnd se ntlnete marginea
dreapt a ferestrei de editare.
Saltul la linia urmtoare se face sub primul caracter al liniei precedente.
Pstrez o copie a versiunii anterioare a fiierului de editat, actualizarea
acesteia fcndu-se la fiecare salvare a fiierului.
Fiierul este salvat folosind carriage return (ntoarcere la nceputul
liniei) i line feed (salt la linie nou) la sfritul fiecrei linii.
Permite vizualizarea numrului de coloan sau rnd n cadrul editorului

Automatic ident
Make backup copy
Save with line feeds
Show line/column
position
Save with and of file
marker
Alignment
Tab size
Indent size
Compile befor saving
Use these preferences
as default for .PRG
files
Font
Syntax coloring
Save preference
Display white space
Applay to .PRG files
Ok
Cancel
Help

Adaug caracterul Ctrl+Z la sfritul fiierului indicnd terminarea


logic a acestuia.
Specific modul de aliniere al textului n fereastr: la stnga, la dreapta,
n centrul ferestrei.
Indic marimea pe ecran a caracterului Tab. Valoarea implicit este 4, el
putnd lua valori ntre 0-50.
Mrimea spaiului de identare
La salvarea ferestrei de editare se face i compilare automat
Setrile efectuate se folosesc implicit pentru fiierele program
Alegerea fontului dorit
Folosete diverse culori pentru textul care nsoete editarea
Salveaz setrile stabilite
Vizualizarea spaiului care nu conine caractere
Se aplic fisierelor text cu extensia .PRG
Butonul de validare al ferestrei Preference
Butonul de invalidare a setrilor efectuate n fereastra Preference
Apelarea programului de ajutoe n explicarea opiunilor ferestrei

Celelalte opiuni ale meniului Edit (fig 1.7) sunt prezentate n tabelul 1.5.
Aceste opiuni sunt folosite pentru a aciona asupra textului tastat ntr-o fereastr de

Fig 1.7 Meniul Edit

15

Introducere n Visual FoxPro

editare.
Tabelul 1.5
Opiune

Explicaii

Undo

Anuleaz ultima aciune asupra unui text dintr-o fereastr de editare, care
pot fi tergerile cu tastele D sau B, nlocuiri de blocuri prin
selectare.
Aceast opiune este opus lui Undo i ea poate fi aleas repetat pentru
anularea unor comenzi Undo repetate.
Determin tergerea textului selectat, fr ncrcarea sa n clipboard.
Selecteaz tot textul existent n fereastra de editare.
Are ca efect activarea ferestrei din figura 1.8, prin care se poziioneaz
cursorul pe linia dorit.
Se utilizeaz pentru cutarea unui ir de caractere n fereastra de editare i
eventual nlocuirea acestuia cu un alt ir de caractere. Are ca efect apariia
ferestrei din figura 1.9.
Comenzille clasice Windows de copiere i mutare folosind Clipboard.
Se folosete pentru inserarea obiectelor OLE din alte aplicaii ntr-un cmp
de tip "General".
nlocuiete irul gsit cu irul specificat prin opiunea Find, dup care caut
o nou apariie a irului cutat. Se folosete frecvent pentru nlocuirea unui
ir cu altul, cele dou iruri fiind definite anterior n fereastra de dialog a
opiunii Find
Informaii despre diverse entiti folosite n program
Jaloane care pot fi puse n diverse faze ale editrii unui fiier text
Opiunea este asemntoare cu Paste Special, doar c nu se face
presupunerea c obiectul exist deja i este memorat n Clipboard. Opiunea
permite nglobarea obiectelor ntr-un cmp de tip "General". Aceasta este o
metod de a introduce obiecte multimedia ntr-un fiier de date
Pemite editarea unui obieect OLE selectat.
Permite editarea tuturor obiectelor legate.
Afieaz componentele obiectului selectat.
Activeaz fereasta cu acelai nume a meniului care a fost prezentat n
tabelul 1.4

Redo
Clear
Select All
Go to Line
Find
Cut, Copy, Paste
Paste Special
Replace

Quick Info
Bookmarks
Insert Object

Object
Links
List Members
Properties

Fig 1.8 Fereastra Go To Line

Fig 1.9 Fereastra de cutare Find

16

Capitolul 1
Opiunile ferestrei de dialog Find sunt prezentate n tabelul 1.6.
Tabelul 1.6
Opiune

Explicaii

Look For
Replace

Cmp de editare text n care se introduce irul de caractere cutat.


Buton care activeaz cmpul de editare, folosit pentru a specifica irul de
caractere cu care va fi nlocuit irul de caractere cutat.
Buton radio care determin direcia de cutare a irului de caractere dorit,
de la cursor spre nceputul fiierului.
Buton care determin cutarea nainte a irului de caractere dorit
Comutator care dac este activ, consider cuvntul (irul de caractere)
gsit numai atunci cnd acesta este de sine stttor i dac este inactiv
atunci cuvntul (irul de caractere) cutat poate s fac parte dintr-un alt
cuvnt.
Cutarea irului de caractere se face indiferent de formatul caracterelor
(mici sau mari)
Buton radio care permite folosirea caracterelor wildcard adic a
caracterelor care permit definirea unor anumite actiuni, de exemplu:
"<" cautarea irului de caractere la nceputul cuvntului
"*" sau "?" folosite n cazul cutrilor n care sunt omise caractere
Cutarea irului de caractere se face n ntreg fiierul, cu depirea
limitelor de nceput i sfrit de fiier pn la poziia curent a cursorului.
Permite definirea cutrilor n:
procedura curent (Current procedure);
obiectul curent (Current object);
n toate obiectele (All objects).

Search backward
Find Next
Math wholee word

Match case
Use wildcards

Wrap around
Zona Scope

Cu ajutorul editorului de texte Visual FoxPro se poate edita i coninutul unui


cmp memo. Despre cmpurile memo se va discuta n capitolul 4.

1.3 Comenzi i funcii n Visual FoxPro


Comenzile sau instruciunile limbajului vor fi prezentate n aceast carte cu
litere majuscule. Funciile specifice limbajului Visual FoxPro sunt reprezentate prin
mnemonica instruciunii urmat de caracterele ( i ). La cele mai importante
comenzi sau funcii va fi prezentat detaliat sintaxa. n cadrul sintaxei parametrii
opionali se vor scrie ncadrai de caracterele [,]. Expresiile numerice, cele ir de
caractere i cele logice vor fi scrise expN, expC i expL, ncadrate de caracterele
<,>. Posibilitatea folosirii unui parametru n mai multe variante este marcat prin
caracterul |.

Concluzii
Meniul sistemului Visual, este un instrument important n apelarea sau
proiectarea rapid a diferitelor entiti ale mediului. Multitudinea de subopiuni ale

17

Introducere n Visual FoxPro

acestuia permit lucrul rapid, att n activitatea de programare, ct i n cea de


ntreinere de date.
Configurarea mediului Visual Fox, este o activitate important, care poate fi
efectuat aa cum s-a artat din meniul Tools subopiunea Options. Aceasta este
prima activitate care se desfoar atunci cnd se ncepe lucrul cu oricare mediu de
programare.

Capitolul

MEMORAREA DATELOR N VISUAL FOXPRO

2.1 Noiuni teoretice privind bazele de date i fiierele de


date n Visual FoxPro
Visual FoxPro este un produs Microsoft. n VFP tabela este entitatea
fundamental n care se memoreaz datele. Spre deosebire de clasicul FoxPro, tabela
care este un fiier cu extensia .DBF, poate exista ca entitate independent (free table)
sau ca entitate coninut ntr-o baz de date, care este un fiier cu extensia .DBC. ntro baz de date sunt incorporate mai multe tabele relaionale, mai multe interogri, mai
multe vederi i cod program, care toate la un loc alctuiesc un tot unitar numit baz
de date. n continuare n aceast carte vom folosi termenul de fiier de date atunci
cnd ne vom referi la o tabel relaional sau un fiier cu extensia DBF i termenul de
baz de date cnd vom face referint la un fiier cu extensia .DBC.
Un fiier cu extensia DBF este o colecie de date format din unul sau mai multe
articole (nregistrri) legate ntre ele.
Se poate face o analogie ntre modul de organizare al unui tabel i modul de
organizare al fiier de date.
n primul rnd pentru a defini un fiier de date este necesar s-i definim
STRUCTURA adic caracteristicile fiecrui articol. n cadrul structurii unui fiier de

Fig. 4 1 Fereastra de creare a unei entiti noi

19

Memorarea datelor n Visual FoxPro

date definim CMPURILE care compun structura i TIPUL fiecrui cmp. Toate
articolele dintr-un fiier, care se mai numesc i nregistrri au aceeai structur.
Dac facem analogie cu o relaie definit de Codd, atunci fiecare fiier de date
este o relaie, fiecare nregistrare sau articol este o tupl, iar fiecare relaie are unul
sau mai multe atribute, deci unul sau mai multe cmpuri care alctuiesc structura
fiierului.
Baza de date este o entitate care se creaz cu comanda:
CREATE DATABASE <nume_baz de date>
Baza de date se poate crea din menoul File, opiunea New (fig 2.1)
Baza de date poate fi creat automat ntr-un mod predefinit propriu VFP
(Wizard) sau prin aciunea manual a utilizatorului (New File). n aceast vom
prezenta realizarea interactiv, manual a entitilor, modul Wizard fiind prezentat
numai n cazurile n care autorul consider acest lucru util.
n fereastra proprie bazei de date, pot fi realizate mai multe aciuni: creare
tabel, adugare de tabel, creare vedere la distan sau local, etc.. Acestea se pot
activa din meniul contextual care apare, acionnd asupra butonului drept al mouse-

Fig. 2 2 Meniul contextual al ferestrei Database Designer

ului (fig 2.2).


Asupra tabelelor create n baza de date se pot ntreprinde o serie de aciuni, activnd
opiunea Table a meniului principal (fig. 2.3).

Fig. 2 3 Meniul Table prin care pot fi ntreprinse diverse aciuni asupra tabelelor din baza de date

20

Capitolul 2

Opiunile meniului Table au denumiri identice cu comenzi Visual Fox, de


aciune asupra nregistrrilor dintr-o tabel, care vor fi explicate n acest capitol.
Aa cum s-a menionat anterior, o tabel poate exista n mediul VFP n dou
moduri:
Independent, fr s aparin unei baze de date;
Aparine unei baze de date;
Indiferent de modul de creare a unei tabel, tipurile de date care pot exista n
nregistrrile tabelei sunt aceleai (fig 2.4).

Fig. 2 4 Tipuri de date n tabele Visual Fox

2.1.2 Tipuri de date ale cmpurilor FoxPro


Fiecare cmp (atribut) dintr-un fiier de date este destinat memorrii unui
element individual de date. Tipurile de cmpuri acceptate de Visual FoxPro sunt:
caracter (character);
uniti monetare (currency);
dat calendaristic (Date, Date Time);
numeric (Numeric, Float, Double, Integer);
logic (Logical);
memo;
general ;
character (binary);
memo (binary).
Cmpurile character sunt cele mai flexibile i cele mai utilizate. Ele conin
caractere de tip ASCII, limita de lungime impus pentru acest tip de cmp este 254
caractere.

21

Memorarea datelor n Visual FoxPro


Tipul
cmpului

Character

Descriere
Orice caracter admis de ctre
calculator

Mrime
1 pn la 254 de
caractere

Rang
Orice caracter

Cmpurile uniti monetare sau Currency sunt folosite pentru a reprezenta


cmpuri numerice nsoite de simbolul monedei n care se lucreaz, leu, dolar, euro,
etc.
Cmpurile dat calendaristic memoreaz doar datele de acest tip. El are
lungime fix de 8 caractere. Asupra acestui tip de cmp pot fi executate o serie de
operaii de transformare a datei calendaristice n ir de caractere sau tip de dat
numeric. Visual FoxPro nu accept date calendaristice inexistente, el execut o
permanent verificare a cmpurilor din care este format data calendaristic. Acest
cmp se poate seta dup dorin n dat calendaristic de un anumit tip (american,
englez, german. Francez etc.). Exist dou tipuri de cmp dat calendaristic: Date i
Date Time, care pot prezenta data calendaristic sub forma lun, zi, an sau sub forma,
lun, zi, an, or, minut, secund. Pentru ine cont de problema anului 2000 este
necesar este necesar luarea n considerare a opnii Tools->Options. n zona Year
2000 compliance se va seta caseta Strict data lavel la valoarea dorit. Opiunile
acestei casete sunt strns legate de comenzile SET CENTURY i SET
STRICTDATE.
Tipul
cmpului

Descriere

Mrime

Date

Date format implicit din lun, zi, an 8 bytes

Date Time

Data format din lun, zi, an i timp:


8 bytes
or, minut, secund

Rang
Cnd se folosete formatul strict
{^0001-01-01}, 1 ianuarie anul 1 la
{^9999-12-31}, 31 decembrie anul 9999
Cnd se folosete formatul strict, de la,
{^0001-01-01}, 1 ianuarie anul 1
{^9999-12-31}, la 31 decembrie anul
9999, ntre orele 00:00:00 a.m. la
11:59:59 p.m.

Cmpurile numerice memoreaz numere cu punct zecimal fix, care pot fi


pozitive sau negative. Imaginea unui cmp numeric este limitat la 20 de caractere.
Visual FoxPro are o precizie de calcul de 16 cifre.
Cmpurile numerice n virgul mobil sau n notaia tiinific sunt un caz
particular al tipului numeric. Tipul numeric virgul mobil difer de tipul numeric
prin faptul c numerele n virgul mobil sunt destinate n special depozitrii
numerelor foarte mari sau foarte mici, care vor fi convertite dac este necesar, n
notaia tiinific i depozitate cu maximum de precizie posibil. Un numr n notaia
tiinific se caracterzeaz prin dou cmpuri:
mantis;
exponent;
desparite printr-o liter.

22

Capitolul 2

De exemplu considerm numrul 0.345000000E+05, n care 0.345000000


reprezint mantisa, iar 05 reprezint exponentul. Valoarea acestui numr se
interpreteaz 0.345*105.
Tipul
Descriere
Mrime
Rang
cmpului
Double
Float
Integer

Precizie dubl n virgul


mobil
La fel ca i cmpul
numeric numai c
reprezentarea este n
virgul mobil
Valoare ntreag

8 bytes
8 bytes n
memorie;
4 bytes

+/-2.94065645841247E-324 la +/8.9884656743115E307
- .9999999999E+19 la
.9999999999E+20
-2147483647 la 2147483647

Cmpul de tip logic are ntodeauna lungimea de un caracter, el putnd memora


doar dou valori adevrat sau fals. Litera T mare n cmp reprezint valoarea logic
adevrat, iar litera F mare este interpretat ca valoarea fals.
Cmpurile memo sunt cmpurile din Visual FoxPro n care se pot memora
informaii de diverse tipuri: text, informaii binare cum ar fi fiiere executabile DOS,
imagini, bii de sunet sau orice altceva care nu se potrivete cu un alt tip de cmp.
Aceste cmpuri sunt practic nelimitate, singura limitare referindu-se la spaiul
disponibil pe memoria auxiliar. Infomaiile dintr-un cmp memo nu sunt memorate
n fiierul de date DBF. Ele sunt memorate ntr-un fiier separat, fiier care are
extensia FPT i acelai nume cu al fiierului DBF. Cmpurile memo sunt cele mai
vulnerabile cmpuri ale sistemului FoxPro. Un cmp memo se poate distruge prin
simpla ntrerupere de curent i face imposibil folosirea fiierului cu extensie FPT.
De aceea n practic, dac se lucreaz cu astfel de cmpuri se impune lucrul cu mai
multe copii de siguran.
Cmpurile de tip General sunt folosite pentru a introduce obiecte de tipul
OLE. Acestea pot fi cmpuri multimedia sau entiti Windows ca de exemplu foaie de
calcul Excel sau document Word.
Cmpurile Character (Binary) i Memo(Binary) sunt folosite n cazul n care se
lucreaz n reea.
Tipul cmpului
Character (Binary)

Memo (Binary)

Descriere

Mrime

Rang

La fel cu tipul Character, dar valorile nu


sunt translatate atunci cnd se schimb
1 la 254
Orice caracter
codul de pagin, de exemplu parolele unor
caractere
utilizatori stocate ntr-o tabel i folosite n
diverse ri
La fel cu tipul Memo, dar valorile nu sunt
translatate atunci cnd se schimb codul de
pagin, de exemplu scriptul de logare al
unui utilizator (n diverse ri)

Tipul de dat Variant, nu apare la crearea fiierelor de date, dar ele exist n
mediul VFP.

23
Tipul
cmpului

Variant

Memorarea datelor n Visual FoxPro


Descriere

Mrime

Rang

Acest tip de dat poate fi de orice tip


recunoscut de VFP sau poate avea
valoarea NULL.
Funcie
de
tipul Funcie de tipul
Acest tip de variabil este definit n predefinit de dat.
predefinit de dat.
sintaxa limbajului prin caracterul "e"
situat naintea numelui datei.

2.2 Implementarea fiierelor de date n limbajul FoxPro.


Principalele operaii care se execut n vederea implementrii unui fiier de
date sunt:
1) crearea structurii fiierului;
2) deschiderea / nchiderea fiierului de date, ntr-o zon de lucru (WORK
AREA) n vederea prelucrrii;
3) introducerea datelor conform cu structura fiierului;

2.2.1 Crearea fiierului de date independent (free table) din


fereastra de comenzi sau cu ajutorul sistemului de meniuri
Pentru a crea o un fiier de date se poate folosi instruciunea:
CREATE [< nume fiier > / ? ]
din fereastra de comenzi. Dac nu se tasteaz numele fiierului sau se tasteaz
caracterul ? atunci apare o fereastr de dialog (figura 2.5), n care se introduce
numele fiierului de date care se va crea.
Pentru exemplul prezentat s-a creat fiierul de date cu numele tbl_freetable. Dup

Fig. 2.5 Fereastra de definire a numelui fiierului de date

24

Capitolul 2

tastarea numelui fiierului, se va aciona butonul Save pentru crearea fiierului.


Se poate folosi n acelai scop sistemul de meniuri, selectnd meniul File,
subopiunea New. Pe ecran va apare fereastra de dialog pentru selectarea tipului de
fiier (figura 2.6).

Fig. 2. 6 Ferastra NEW

Se va alege butonul Table din lista entitlor afiate.


Oricare din cele dou metode va deschide fereastra de dialog din figura 2.7.

Fig. 2. 7 Fereastra Table Designer pentru definirea structurii unui fiier de date

Aceasta este o fereastr de natur modal, adic pentru a selecta o alt operaie
aceast fereastr trebuie nchis, prin butonul OK de terminare a operaiei de creare
tabel sau prin butonul Cancel de anulare a operaiei. n pagina Fields sunt definite
cmpurile fiierului de date.
Modul de lucru este simplu. Se introduce numele cmpului (atributului) dorit,
maxim 10 caractere, n caseta Name, se alege tipul cmpului i mrimea acestuia.
Tipurile cmpurilor sunt cele enunate anterior.

25

Memorarea datelor n Visual FoxPro

Prin fereastra de dialog se poate naviga folosind tastatura sau mouse-ul. Dac
se folosete tastatura atunci cu ajutorul tastei TAB se poate selecta obiectul dorit ntrun sens sau combinaia Shift+Tab pentru selectarea obiectului cu deplasare n sens
invers. Dac se folosete mouse-ul, se face clic pe obiectul care se dorete a fi
selectat.
Dup definirea tuturor cmpurilor, am definit structura fiierului DBF.
Structura unui fiier de date poate fi oricnd modificat. tergerea unui cmp din
structur are ca efect pierderea irecuperabil a datelor din acel cmp. Dac se
modific lungimea unui cmp atunci datele sale vor fi modificate astfel:
dac lungimea cmpului se mrete atunci informaiile memorate sunt
completate la dreapta cu spaii;
dac lungimea cmpului este micorat, atunci se va face o trunchiere a
datelor originale i se vor elimina caracterele cele mai din dreapta.
n pagina Indexes sun definii indecii ataai fiierului (fig 2.8). n acest caz
pot fi definii doar indexi de tip Regular i Candidate. Asupra noiuni "index" se va
reveni pe parcursul acestui capitol.
Pagina Table afieaz n cazul fiierelor de date independente date referitoare
la fiierul creat (fig. 2.9).

Fig. 2. 8 Crearea indexilor in fiierele de date independente

Fig. 2. 9 Pagina Table

26

Capitolul 2

2.2.2 Crearea fiierelor de date din program surs PRG


Crearea unor fiiere de date din program surs Visual FoxPro se realizeaz cu
comanda:
CREATE TABLE | DBF < nume > <nume lung de fiier> [FREE]
(<nume cmp1>/<tip>[<lungime>[<zecimale>] ) ,[<nume cmp2>... ]
[NULL |NOT NULL] [CHECK lExpresie1 [ERROR TextEroare1]] [DEFAULT
eExpresie1] [PRIMARY KEY | UNIQUE] [REFERENCES NumeTabel2 [TAG
NumeEticheta1]] [NOCPTRANS] [, NumeCmp2 ...] [, PRIMARY KEY eExpresie2
TAG NumeEticheta2 |, UNIQUE eExpresie3 TAG NumeEticheta3] [, FOREIGN
KEY eExpresie4 TAG NumeEticheta4 [NODUP] REFERENCES NumeTabela3
[TAG NumeEticheta5]] [, CHECK lExpresie2 [ERROR TextEroare2]])| FROM
ARRAY NumeMatrice
Aceasta este de fapt o comand a limbajului SQL implementat n mediul VFP.
Semnificaia parametrilor comenzii este prezentat n tabelul 2.1.
Tabelul 2.1
Parametru Comand
Semnificaie
Table sau DBF
Nume
Nume lung
FREE

Nume cimp1
Tip
Lungime
Zecimale
Nume cimp2
NULL

NOT NULL
CHECK
ERROR
DEFAULT
PRIMARY KEY
UNIQUE
REFERENCES

Parametrii sinonimi ai comenzii


Numele fiierului de date care se creaz.
Numele lung al fiierului poate conine 128 de caractere i
poate fi specificat doar n cazul n care fiierul de date
aparine unei baze de date
Specific faptul c tabela este independent n cazul n
care o baz de date este activ. n cazul n care nici o baz
de date nu este deschis acest parametru poate lipsi, dac
se dorete crearea unei tabele indepandente.
Numele primului cmp din structura fiierului.
Tipul primului cmp definit.
Lungimea cmpului definit.
Numrul de zecimale al cmpului, n cazul n care acesta
este cmp numeric
Numele celorlalte cmpuri care se introduc
Permite introducerea valorii null n cmp. Dac unul dintre
cmpuri conine valoarea null atunci numrul de cmpuri
care poate fi creat ntr-un fiier de date se reduce de la 255
la 252.
Nu permite existena valorilor null n cadrul cmpului.
Aceasta este valoarea implicit la crearea fiierului de date
Permite specificarea unor reguli de validare pentru cmp
Afieaz un mesaj de eroare n cazul n care regula de
validare pentru cmp nu este ndeplinit
Specific valoarea inial a cmpului
Creaz un index primar pentru cmpul specificat
Creaz un index candidat pentru cmp
Stabilete numele tabelei printe cu care se realizeaz o

27

Memorarea datelor n Visual FoxPro


NOCPTRANS
FOREIGN KEY
NODUP
FROM ARRAY

legtur persisent
Previne translatarea cmpurilor memo i caracter cu cod de
pagin diferit
Crearea unui index extern
Crearea unui index candidat extern
Reprezint numele unei matrici existente care conine
numele, tipul, lungimea i numrul de zecimale pentru
fiecare cmp .

Aceast comand este deosebit de util pentru a crea ntr-o aplicaie fiiere de
date temporare adic acele fiiere care dup o anumit faz a aplicaiei sau dup
terminarea execuiei aplicaei pot s fie terse.
n cazul acestei comenzi tipurile cmpului sunt date de ctre urmtoarele litere:
C ir de caractere de o anumit lungime;
N numeric, de o anumit lungime i cu un anumit numr de
zecimale;
F virgul mobil de o anumit lungime i cu un anumit numr de
zecimale;
I integer;
B double;
Y currency
L logic;
M memo;
D dat calendaristic;
T date time;
G general
Exemplul 2.1
S se creeze fiierul de date SALARIAT.dbf cu urmtoarea structur:
Matr
N(6)
numrul matricol al salariatului;
Nume
C(12)
numele salariatului;
Prenume
C(20)
prenumele salariatului;
Data_nast
D
data naterii salariatului;
Sex
L
dac salariatul este de sex masculin valoarea
cmpului este T (true);
Stare _civil L
dac salariatul este cstorit valoarea cmpului
este T (true);
vrsta
N(3)
vrsta salariatului.
Se deschide fereastra de editare n care se va scrie urmtoarea comand:
CREATE TABLE salariat(nume C(12), prenume C(20), data_nast D, sex
L, stare_civil L, vrsta N(3))

28

Capitolul 2

2.2.3 Crearea unui fiier de date ntr-o baz de date


n mediul Visual Fox crerea unui fiier de date ntr-o baz de date, permite pe

Fig. 2. 10 Crearea structurii unui fiier de date ntr-o baz de date

lng crearea cmpurilor i a indexilor, impunerea unor restricii la nivel de cmp sau
la nivel de fisier de date. Un fiier de date, poate fi creat inial ntr-o baz de date sau
un fiier de date independent poate fi ataat la o tabel. Fereastra pentru crearea
structurii tabelei este prezentat n fig. 2.10.
Acest mod de creare a tabelei prezint o serie de avantaje:
Permite nume lungi de cmpuri, pn la 128 de caractere. n definirea
numelui unui cmp nu se folosete caracterul "spaiu", el poate fi
nlocuit cu caracterul "_" (liniua de subliniere);
Prezint trei zone distincte: Display, Map field type to classes, field
validation pentru a impune diverse restricii asupra cmpurilor i o
zon de comentarii asupra cmpului realizat, Field comment;
n caseta Table pot fi introduse restricii asupra fiierului de date n
ansamblu;
Permite definirea indexului de tip cheie primar;
Permite realizarea n cadrul bazei de date a relaiiolor permanente
ntre tabele de tipul one to one, one to many sau many to many.
Zona Display permite introducerea unor restricii asupra cmpului definit.
Restricia poate fi introdus sub forma unui format particularizat al cmpului (n
caseta Format) sau sub forma unei mti de intrare (n caseta Input mask).
Principalele caracterele folosite pentru proprietatea Format sunt prezentate n
tabelul 2.2
Tabelul 2.2
Caracter
Desctriere
folosit
!
$

Convertete literele mici n litere mari.


Vizualizeaz simbolul monezii pentru cmpul de tip currency

29

Memorarea datelor n Visual FoxPro


^
A
D
E

Vizualzeaz datele numerice folosind notaia tiinific.


Permite folosirea doar a caracterelor alfabetice.
Folosete setarea curent pentru SET DATE.
Editeaz data calendaristic n formatul British.

Pentru masca de intrare principalele caractere folosite sunt prezentate n tabelul


2.3
Tabelul 2.3
Caracter
folosit
!
#
$
$$
9
A
L
N
X
Y

Descriere
Convertete literele mici n litere mari.
Permite folosirea caracterelor numerice a spaiului i a semnului.
Permite folosirea simbolului monetar ntr-o pozie fix.
Permite folosirea simbolului monetar ntr-o pozie aleatoare dup valoarea
numeric.
Permite folosirea valorilor numerice i a semnului "-".
Permite folosirea numai a caracterelor alfabetice.
Permite folosirea numai a valorilor logice .t. (true), .f. (False).
Permite folosirea numai a caracterelor alfanumerice.
Permite folosirea oricrui caracter.
Permite folosirea caracterelor Y, y, N i n pentru valorile logice true respectiv false

n caseta Caption pot fi introduse caractere care vor nlocui denumirea


cmpului ntr-o comand VFP.
Exemplul 2.2
Se consider baza de date Facultate (fig 2.11) n care se creaz tabela Student

Fig. 2 11 Baza de date "Facultate" i tabela "Student"

a) Cmpul "np" apare n comenzile VFP cu denumirea Nume si Prenume


(caseta Caption);
b) n caseta Format s-a folosit caracterul "!" pentru ca informaia din cmp s
fie scris cu litere mari indiferent de caracterul introdus n cmp.
n zona Field Validation, pot fi introduse restricii asupra cmpului. Acestea
se introduc sub forma unor expresii, n caseta Rule, unde se apeleaz Expression
Builder (fig. 2.12)

30

Capitolul 2

Fig. 2 12 Introducerea restriciilor n caseta Rule i Expression Builder

Expression Builder este apelat de la butonul "" situat n dreapta casetei


Rule. El are rolul de a forma o expresie. O expresie, este o entitate care conine
operanzi i operatori. Asupra acestui aspect, se va reveni n aceast carte cnd vom
discuta despre limbajul de programare VFP. Expression Builder permite
introducerea ntr-o expresie a cmpurilor existente n tabel, a unei funcii predefinite
VFP sau a unei variabile de memorie VFP. Din figur, se observ c a fost introdus
restricia: valoarea cmpului anuls s fie mai mare dect 0 i mai mic sau egal cu 5.
n cazul n care regula de validare impus asupra cmpului, nu este ndeplinit, apare
un mesaj predefinit sau un mesaj scris de ctre utilizator, n caseta Message. Valoarea
inial a cmpului poate fi definit n caseta Default Value. Pentru exemplul
prezentat valoarea inial este 1.
Un comentariu de cmp este o not care clarific semnificaia sau scopul
cmpului. VFP stocheaz acest element ca un cmp Memo, de aceea poate fi orict de
lung. Toate acestea pot fi introduse n caseta Field comment.
Zona Map field to classes permite alegerea unei clase sau a unei biblioteci de
clase pentru un cmp n cazul n care acesta este introdus ntr-un formular.
n caseta Table (fig 2.13), este permis introducerea unor restricii la nivel de

Fig. 2 13 Pagina Table pentru fiierul de date Student

31

Memorarea datelor n Visual FoxPro

nregistrare ntr-un fiier de date.


Validarea la nivel de nregistrare, nseamn, modificarea unor valori din
cmpurile nregistrrii i mutarea ntr-o nou nregistrare. Codul de validare nu poate
modifica un cmp din nregistrarea curent, nu poate modifica contorul de nregistrri
sau pointerul de nregistrare dar poate compara valoarea unui cmp cu a altuia sau
poate executa o validare prin cutare ntr-un alt fiier. Orice expresie de validare
trebuie s returneze un rezultat de tip logic. Pentru aceasta se folosete o funcie
utilizator scris n caseta Rule, din zona Record validation. Caseta Message conne
un mesaj care nsoete validarea. Pentru a realiza o funcie de validare se folosete
funcia VFP, GETFLDSTATE, care stabilete dac un cmp dintr-un tabel s-a
schimbat n timpul comenzii curente sau dac starea de tergere s-a modificat, prin
valorile pe care le poate returna (tabelul 2.3).
Tabelul 2.3
Valoare
Descriere
returnat
1
2
3
4

Cmpul i indicatorul de tergere nu i-au modificat valoarea


S-a modificat valoarea cmpului i a indicatorului de tergere
Cmpul i indicatorul de tergere nu i-au modificat valoarea ntr-o
operaie de adugare
S-a modificat valoarea cmpului i a indicatorului de tergere ntr-o
operaie de adugare

Zona Triggers definete declanatorii (trigerii) care se execut atunci cnd se


adaug (Insert Trigger), se modific (Update Trigger) sau se terge (Delete
Trigger) o nregistrare din tabel. Ca i n cazul validrii la nivel de cmp i la nivel
de nregistrare, codul surs al triggeru-lui se stocheaz n baza de date. ntodeauna
cnd se execut o operaie de adugare, modificare sau tergere ntr-o tabel, VFP
verific dac exist un declanator aferent tabelei i n cazul n care acesta exist este
apelat codul program surs, al respectivului trigger.

2.2.3 Legturi ntre tabelele bazei de date


Tabelele existente nr-o baz de date pot fi legate ntre ele prin diverse
cmpuri. Un index primar a unui cmp sau o cheie primar dintr-o tabel, are o cheie
de cutare sau o cheie extern , care poate fi un index regular al unui cmp, ntr-o alt
tabel. Pentru exemplul prezentat n figura 2.3 legtura dintre tabela Student i tabela
Note se realizeaz ntre cheia primar Nrl care este un undex primar n tabela

Fig. 2 14 Legtura ntre tabele (Relationship)

32

Capitolul 2

Student i indexul regular Nrl, din tabela Note (fig 2.14). Aceasta este o relaie de tip
one to many. n Visual Fox pot exista relaii de tip one to one, one to many i many to
one. Relaiile de tip many to many se obin din precedentele.
Fereastra Edit Relationship se poate activa poziionnd cursorul pe legtura
stabilit ntre tabelele din baza de date i executnd clik pe butonul din dreapta al
mouse-ului. Din meniul contextual care apare se apeleaz opiunea cu acelai nume.
Editarea legturii se poate realiza i din meniul Database, care se activeaz la
vizualizarea bazei de date (MODIFY DATABASE).
ntr-o tabel se pot stabilii i relaii de autoreferire, prin care un cmp dintr-o
tabel este legat cu un cmp din aceeai tabel.
n capitolul 2 s-au prezentat noiuni teoretice despre integritatea referenial. n
general aceasta stabilete ce operaii sunt permise ntre tabelele legate. Integritatea
referenial trateaz ca invalide, nregistrrile care nu ndeplinesc anumite criterii. Ea
se aplic doar n cazul n care se modific datele din cheile stabilite n relaie. Aceste
modificri se refer la:
Adugarea unei nregistrri noi;
Modificarea unei nregistrri existente;
tergerea unei nregistrri existente.
n cazul n care se dorete adugarea unei nregisrri noi n tabela copil (Note)
legat la tabela printe (Student), apar dou cazuri:
1. Permite adugare de nregistrare nou n tabela copil indiferent dac exist
corespondent n tabela printe (Ignore);
2. Se generaz o eroare atunci cnd se introduce o nregistrare n tabela copil
care nu are corespondent n tabela printe (Restrict)
n cazul n care se dorete modificarea unei nregisrri n tabela copil (Note)
legat la tabela printe (Student), apar trei cazuri:
1. Permite modificarea n nregistrarea din tabela copil chiar dac aceasta nu
are corespondent n tabela printe (Ignore);
2. Nu permite modificarea unei nregistrri din tabela copil, care nu are
corespondent n tabela printe, acest lucru genernd eroare (Restrict);

33

Memorarea datelor n Visual FoxPro


3. Sunt modificate automat toate nregistrrile din tabela copil care au avut
aceeai valoare a cheii printe vechi cu noua valoare a cheii. De exemplu un
student i modific numrul de legitimaie, atunci n tabela copil Note,
cmpul nr_leg se modific automat cu noua valoare (Cascade).
n cazul n care se dorete tergerea unei nregisrri n tabela printe (Student)

Fig. 2 15 Constructorul de integritate referenal

legat la tabela copil (Note), apar trei cazuri:


1. Permite tergerea n nregistrarea din tabela printe indiferent dac n tabela
copil exist sau nu nregistrri legate cu nregistrarea din tabela printe
(Ignore);
2. Apare un mesaj de eroare atunci cnd tergerea se face pe o nregistrare n
tabela printe pentru care exist nregistrri corespunztoare n tabela copil
(Restrict);
3. Se terg automat, toate nregistrrile din tabela copil, legate de nregistrarea
din tabela printe tears (Cascade).
n VFP, integritatea referenial poate fi definit automat folosind
Constructorul de integritate referenial (Referential Integrity Builder). Acesta
poate fi apelat fie de la butonul Referenial Integrity, din fereastra de editare a
legturii sau din meniul Database al ferestrei Database Designer. Fereastra care
apare permite definirea restriciilor definite anterior (fig 2.15).

2.3 Activarea fiierelor de date

34

Capitolul 2

2.3.1 Deschiderea / nchiderea unui fiier de date Visual


FoxPro ntr-o zon de lucru
Deschiderea fiierului de date presupune rezervarea n memoriea intern a
calculatorului a unei zone n care Visual FoxPro va memora toate informaiile
necesare utilizrii acestui fiier. Aceste zone se numesc zone de lucru ele fiind
numerotate de la 1-32767 n versiunea Visual FoxPro 7.0 standard. Numrul de zone
de lucru care pot fi deschise n acelai timp, difer funcie de versiunea VFP cu care
se lucreaz. Primele 10 zone de lucru pot fi marcate cu literele de la A-J.
Manipularea fiierelor de date este la ndemna programatorului pe baza
comenzilor specializate n acest scop. n aceast carte se prezint modul de lucru pe
un calculator nelegat n reea, de aceea o serie de parametrii ai comenzilor,care se
refer la modul de lucru n reea sunt omii. Dup deschiderea fiierului de date se
trece la lucrul efectiv cu aceasta, adic:
prelucrarea datelor din fiierul de date (citire);
modificarea datelor (scriere de date noi peste cele existente);
adugarea datelor noi la cele existente (scriere de date noi);
tergerea informaiilor existente n fiierul de date.
Dup terminarea lucrului cu fiierul de date urmeaz nchiderea acestuia, operaie ce
const n :
desfacerea legturii dintre zona de lucru i fiierul de date ;
eliberarea memoriei alocate la deschidere (eliberarea zonei de lucru);
nchiderea fiierului de date memornd modificrile efectuate de la deschidere,
pn n acest moment.
Pentru a deschide un fiier de date a crui structur a fost creat i n care au
fost sau nu introduse date se folosete comanda USE cu sintaxa:
USE [<nume_fis> | ?]
[IN <expN1>]
[AGAIN]
[INDEX <lista fis index> | ?
[ORDER [<expN2>
| <fisiere index idx>
| [TAG] <nume tag>
[OF <fisiere cdx>]
[ASCENDING | DESCENDING]]]]
[ALIAS <alias>]
[EXCLUSIVE]
[SHARED]
[NOUPDATE]
USE nume _fis

35

Memorarea datelor n Visual FoxPro

este cea mai uzual form a comenzii pentru deschiderea fiierului de date n zona de
lucru activ sau curent. Implicit aceast zon este zona 1.
Opiunea IN <expN1> definete zona de lucru n care fiierul de date este
deschis. <expN1>, este o expresie numeric avnd valoarea cuprins ntre 1-225. n
cazul n care n zona de lucru exist un fiier deja activ acesta este nchis i devine
activ fiierul deschis ultima dat.
Opiunea AGAIN se folosete pentru a deschide acelai fiier de date n mai
multe zone de lucru.
Exemplul 2.3
USE salariat
USE salariat IN 2 AGAIN
se deschide fiierul de date Salariat n zona 1 i n zona 2 de lucru
Opiunea [INDEX <lista fis_index> | ?
[ORDER [<expN2>
| <fisiere index idx>
| [TAG] <nume tag>
[OF <fisiere cdx>]
[ASCENDING | DESCENDING]]]] se folosete pentru a
deschide fiierele indexate. Se va explica opiunea n subcapitolul referitor la
indexarea fiierelor de date.
Opiunea ALIAS se refer la aliasul atribuit de utilizator unui fiier de date.
Aliasul este un nume oarecare atribuit la deschiderea fiierului. n unele cazuri aliasul
poate fi definit de ctre mediul FoxPro.
Exemplul 2.4
USE salariat IN 3 ALIAS s n zona de lucru 3 fiierul salariat are aliasul s.
Opiunile EXCLUSIVE i SHARED sunt specifice modului de lucru n reea,
caz n care mai muli utilizatori au acces la acelai fiier n acelai timp. n cazul
lucrului n reea dac la un fiier de date au acces mai muli utilizatori acesta trebuie
dechis NOEXCLUSIVE n caz contrar un singur utilizator avnd acces la fiierul de
date.
Opiunea NOUPDATE se refer la faptul c fiierul este deschis numai n
citire, deci datele din fiier nu pot fi modificate.
Exemplul 2.5
USE pers NOUPDATE
nchiderea unui fiier activ ntr-o zon de lucru se poate face folosind comanda
USE fr nici o opiune sau folosind alte comenzi specifice ca de exemplu CLOSE
ALL. Spre deosebire de comanda USE care nchide doar fiierul din zona de lucru
activ comanda CLOSE ALL nchide toate fiierele active la un moment dat n mai
multe zone de lucru.

36

2.3.2

Capitolul 2

Selectarea unei zone de lucru n FoxPro

La pornirea Visual FoxPro zona de lucru curent este 1 sau zona A . n cazul n
care lucrm cu mai multe fiiere de date atunci zona de lucru se poate schimba
folosind instruciunea:
SELECT <exp N> |<expC>
<expN> reprezint numrul zonei de lucru ce va fi activat;
<expC> reprezint numele zonei de lucru care va fi activat, acesta poate
fi o liter A-J sau un alias definit de utilizator.
Exemlul 2.6
Presupunem c dorim s lucrm cu trei fiiere Cu denumirile Fisa, Fisb, Fisc,
pe care vrem s le deschidem n trei zone de lucru diferite.
SELECT 1
USE Fisa
SELECT 2
USE Fisb
SELECT 3
USE Fisc
n continuare apelul la unul dintre fiiere se face folosind doar instruciunea
SELECT. Astfel, pentru a lucra cu Fisc este suficient a selecta numai zona de lucru
3:
SELECT 3
Implicit aliasul, adic numele asociat fiierului este chiar numele acestuia.
Selectarea fiierului Fisc ca fiier de lucru se poate face prin comanda:
SELECT Fisc
Exemplul 2.7
Presupunem c dorim s deschidem fiierul Salariati n zona de lucru 2
atribuindu-i aliasul salar.
USE salriati IN b ALIAS salar
SELECT salar
se selecteaz zona de lucru 2 prin aliasul salar al
fiierului din aceast zon de lucru.
n Visual FoxPro pentru majoritatea comenzilor se pot folosi doar primele 4
caractere din comand .
Pentru a obine numrul zonei de lucru curent se folosete funcia:
SELECT ()
Aceasta returneaz un numr ce reprezint numrul zonei de lucru curente sau
numrul ultimei zone de lucru nefolosite.
SELECT() sau SELECT (0) returneaz numrul zonei de lucru
curente;
SELECT(1) returneaz numrul ultimei zone de lucru nefolosite

37

Memorarea datelor n Visual FoxPro

2.2. Accesul la fiierele de date


2.2.1 Accesul la structura unui fiier de date
Pentru a modifica structura unui fiier de date se folosete comanda
MODIFY STRUCTURE <nume_fiier>
<nume_fiier> este numele fiierului cruia i se modific structura. Dac
numele fiierului nu este specificat apare o fereastr de dialog care cere s se
specifice numele fiierului dorit.
Fereastra de dialog care apare este prezentat n figura 2.7 sau 2.10. n aceast
fereastr se pot modifica numele cmpurilor, dimensiunile acestora, se pot aduga
cmpuri noi sau se pot terge cmpuri existente. tergerea i inserarea de cmpuri se
realizeaz prin poziionarea cursorului pe indicatorul de nregistrri i acionarea
tastelor Insert sau Delete.
Vizualizarea structurii unui fiier de date se realizeaz cu comanda:
DISPLAY STRUCTURE
[IN <expN> | <expC>]
[TO PRINTER [PROMPT]
| TO FILE <fiier>]
[NOCONSOLE]
<expN> specific zona de lucru n care se gsete fiierul, iar <expC> specific
numele fiierului. Implicit afiarea se face pe ecran. Acest lucru poate fi inhibat prin
folosirea opiunii NOCONSOLE. Structura fiierului poate fi copiat ntr-un fiier
(opiunea TO FILE) sau la imprimant (opiunea TO PRINTER). Opiunea
PROMPT este specific mediului Window.
Comanda LIST STRUCTURE este identic cu precedenta comand, singura
deosebire constnd n faptul c instruciunea DISPLAY STRUCTURE face pauz
dup umplerea unui ecran cu informaii.
Informaia afiat are urmtorul coninut:
- pe prima linie se afieaz fiierul de date la care se refer comanda;
pe a doua linie se afieaz numrul de nregistrri din fiierul DBF;
pe a treia linie se afieaz data calanderistic cnd s-a scris ultima
informaie n baza de date;
pe urmtoarele linii se afieaz cmpurile ce alctuiesc structura
fiierului de date cu caracteristicile acestora (nr.cmp, nume, tip,
lime).
Un alt mod de a crea un fiier de date este acela de a copia structura unui fiier
existent n unul nou, care va avea iniial structura identic cu a fiierului surs.
Comanda de copiere a structurii este:
COPY STRUCTURE TO <fiier> FIELDS <list cmpuri>

38

Capitolul 2

<fiier> este numele noului fier n care s-a copiat structura. Dac nu se dorete
copierea tuturor cmpurilor, atunci cmpurile care se doresc a fi copiate se pot
specifica cu opiunea FIELDS.
Exemplul 2.8
Se copiaz din structura fiierului Pers.dbf cmpurile Nume i Prenume n noul
fiier Pers_1.dbf.
USE PERS
COPY STRU TO PERS_1 .DBF;
FIELDS NUME, PRENUME
USE PERS_1.DBF
LIST STRU
CLOSE ALL.
Se mai poate copia structura unui fiier de date n nregistrrile unui nou fiier
de date, folosind comanda:
COPY TO <fiier>STRUCTURE EXTENDED
Aceast fiier de date are o structur fix format din 4 cmpuri iar cmpurile
fierului de date activ devin nregistrri. Cmpurile fixe au urmtoarea semnificaie:
Field_name (nume cmp) de tip ir de caractere, n care se depoziteaz
numele cmpurilor structurii;
Field_type (tip cmp) de tip ir de caractere, de lungime 1, n care se
depoziteaz un caracter ce corespunde tipului cmpului structurii( C-ir de
caractere,N-numeric, D-dat calendaristic, F-virgul mobil, L-logic, Mmemo);
Field_len(lungime cmp), de tip numeric, memoreaz lungimea fiecrui
cmp al structurii;
Field_dec (numr de zecimale din cmp), de tip numeric, n care se
memoreaz numrul de zecimale pentru un cmp numeric al structurii.
Exemplul 2.9
Se execut comanda
COPY STRUCTURE asupra fiierului
SALARIAT.DBF.
USE SALARIAT.DBF
COPY STRU EXTENDED TO TEMP
Fiierul TEMP va avea structura:
NR FIELD_NAME FIELD_TYPE FIELD_LEN FIELD_DEC
1
MATR
N
12
--2
NUME
C
12
--3
PRENUME
C
20
--4
DATA_NAS
D
5
SEX
L
6
ST_CIVIL
L
3
7
VRSTA
N

39

Memorarea datelor n Visual FoxPro

Structura fiierului SALARIAT.DBF devine nregistrare pentru TEMP.DBF.


Ulterior se poate crea un nou fiier de date folosind nregistrrile fiierului Temp.dbf
cu comanda:
CREATE PERS1 FROM TEMP se creeaz fiierul de date PERS1.DBF cu
noua structur.

2.2.2 Accesul la cmpurile unui fiier de date


Accesul la cmpurile unui fiier de date este controlat de comanda SET
FIELDS cu sintaxa
SET FIELDS TO [<cmp1>][<cmp2>]/ALL

SET FIELDS ON /OFF


Dac SET FIELDS este ON atunci FIELDS reprezint lista cmpurilor ce pot
fi accesate. Accesul la toate cmpurile unui fiier de date se poate face prin comanda
SET FIELDS TO ALL
Numrul cmpurilor dintr-o baz de date este dat de funcia FCOUNT().
Exemplul 2.10
Explicaii
A) Se determin numrul de nregistrri din fiierul specificat;
B) Se determin mrimea cmpului Nume din fiierul pers;
C) Se determin numele unui cmp din fiierul de date identificat printr-un numr.
Semnul ? se folosete pentru listarea pe ecran a rezultatului unei funcii. Se va
revenii pe larg n capitolul

2.2.3

Accesul la nregistrrile unui fiier de date

Accesul la coninutul unui fiier de date se poate face n dou moduri:


1. secvenial cnd pentru obinerea unei informaii se parcurg nregistrrile
una dup cealalt n ordinea fireasc a lor;
2. direct cnd putem stabili unde anume pe suport este nregistrarea vizat i o
utilizm fr s ne preocupm de nregistrrile anterioare.
Fiecare nregistrare (articol) din fiier are ataat un numr, care poart
denumirea de indicator de nregistrare. Fiierul cu extensia Dbf are dou caractere
speciale care marcheaz, nceputul i sfritul unui fiier, bof, eof. Corespunztor
acestor dou caractere speciale, exist funciile:
A
B
C

USE PERS
?FCOUNT()
6
?FSIZE('NUME')
12
?FIELD(1)
NUME

40

A
B
C
D
E
F
G

Capitolul 2
BOF() care returneaz rezultatul adevrat (T) dac indicatorul de
inregistrare este poziionat la nceputul fiierului;
EOF() care returneaz rezultatul adevrat (T) dac indicatorul de
nregistrare este poziionat la sfritul fiieruluide date .
Pentru a cuta o anumit nregistrare n fiierul de date se folosete
USE SALARIATI
GO TOP
?RECNO()
GO RECORD RECNO()+1
GO RECNO()+4
GO 10
CLOSE ALL

comanda GO sau GOTO care poziioneaz indicatorul de nregistrare al fiierului pe


o anumit nregistrare. Sintaxa acestor comenzi este identic:
GO [RECORD] <expN1>
[IN <expN2> | IN <expC>]
GO TOP | BOTTOM
[IN <expN2> | IN <expC>]
GOTO [RECORD] <expN1>
[IN <expN2> | IN <expC>]
GOTO TOP | BOTTOM
[IN <expN2> | IN <expC>]
Cuvntul rezervat RECORD este folosit opional, expN1 reprezint numrul
nregistrrii n fiier. Localizarea se poate face i ntr-o alt zon de lucru precizat
prin expresie numeric <expN2> sau prin aliasul fiierului dedate <expC>.
GO TOP
poziionare pe nceput de fiier
GO BOTTOM poziionare pe sfrit de fiier
Numrul nregistrrii curente (valoarea numeric a indicatorului de nregistrri
la un moment dat) dintr-un fiier din zona de lucru <expN> sau identificat prin aliasul
<expC> este dat de funcia RECNO() cu sintaxa:
RECNO([<expN> | <expC>])
Dac ambele expresii <expN> i <expC> lipsesc atunci funcia returneaz
numrul nregistrrii curente din fiierul de date activ.
Exemplul 2.11
Explicaii
A) deschiderea fiierului de date;
B) poziionare la nceputul fiierului;
C) vizualizare numr nregistrare curent;
D) poziionarea pe nregistrarea urmtoare;
E) se poziioneaz pe al patrulea articol de la nregistrarea curent;
F) poziioneaz pe articolul cu indicatorul de nregistrri zece;

41

B
C
D
E
F

Memorarea datelor n Visual FoxPro


USE SALARIATI
GO RECO 3
SKIP
?RECNO()
SKIP 10
?RECNO()
SKIP -5
?RECNO()
?RECOUNT()
?RECSIZE()
CLOSE ALL

G) nchiderea fiierului de date.


Un alt tip de deplasare, cu indicatorul de nregistrri, de-a lungul fiierului de
date se realizeaz cu comanda SKIP care are sintaxa:
SKIP [<expN1> | <expN2> | <expC>]
<expN1> reprezint numrul de nregistrri peste care se sare. Expresia poate
s fie att pozitiv ct i negativ, saltul poate avea loc nainte i napoi n
fiierul de date;
<expN2> i <expC> specific fiierul la care se refer funcia, prin numrul
zonei de lucru n care este deschis (<expN2>) sau prin aliasul corespunztor
(<expC>). Dac cele dou expresii nu se specific comanda se refer la fiierul
de date activ.
Funcia RECCOUNT() returneaz numrul de nregistrri dintr-un fiier de
date. Funcia are sintaxa:
RECCOUNT([<expN2> | <expC>])
Seminificaia celor dou expresii este identic cu cea de la comanda SKIP.
Funcia RECSIZE() returneaz mrimea unei nregistrri dintr-un fiier DBF
Sintaxa acestei funcii este:
RECSIZE([<expN2> | <expC>])
Seminificaia celor dou expresii este identic cu cea de la comanda SKIP.
Exemplul 2.12
Explicaii
A) poziionare pe nregistrarea trei din fiier;
B) incrementatrea indicatorului de nregistrri;
C) valoarea indicatorului de nregistrri se mrete cu 10;
D) valoarea indicatorului de nregistrri se micoreaz cu 5;
E) se vizualizeaz numrul de nregistrri dein fiier;
F) se vizualizeaz mrimea nregistrrii din fiier.

42

2.2.4

Capitolul 2

Domeniul nregistrrilor

n limbajul Visual FoxPro exist comenzi care acioneaz asupra mai multor
nregistrri dintr-un fiier de date. Alegerea nregistrrilor se face folosind n
comand condiia de selectare, din mulimea nregistrrilor unui fiier se aleg doar
acelea care ndeplinesc condiia de selecie. n Visual FoxPro condiiile de selecie se
realizeaz prin cuvintele rezervate FOR i WHILE care sunt clauze a mai multor
comenzi ale limbajului.
Clauza FOR (" Pentru") se folosete pentru selectarea nregistrrilor n funcie
de o condiie logic. Se selecteaz acele nregistrri pentru care expresia logic este
adevrat.
Expresia logic este acea expresie care ntoarce un singur rezultat: adevrat
(true) sau fals (false).
Clauza WHILE ("ct timp") realizeaz selecia asemntor cu clauza FOR,
aceasta fcndu-se n funcie de valoarea adevrat a expresiei logice. Spre deosebire
de clauza FOR care dup gsirea unei nregistrri care nu respect condiia logic,
continu testarea celorlalte nregistrri, clauza WHILE ntrerupe cutarea
nregistrrilor cnd o nregistrare nu respect condiia logic.
Datorit faptului c viteza de prelucrare este mult mai mare cnd se folosete
clauza FOR este recomandabil s se foloseasc aceast clauz ori de cte ori este
posibil.
Numrul nregistrrilor care se testeaz printr-o condiie de selecie este
variabil i el constitue domeniul de selecie. Acesta constitue o clauz distinct pentru
o mulime de comenzi FoxPro.
Clauza domeniu inclus ntr-o astfel de comand va avea urmtoarele forme:
ALL selecteaz toate nregistrrile din fiierul de date;
NEXT<expN> se refer la urmtoarele <expN> nregistrri, ncepnd
de la nregistrarea curent;
RECORD <expN> aciuneaz numai asupra nregistrrii cu numrul
<expN>;
REST selecteaz toate nregistrrile de la cea curent i pn la
sfritul fiierul de date.

2.5 Operaii asupra nregistrrilor


Asupra nregistrrilor dintr-un fiier de date se pot face urmtoarele operaii
principale:
adugare;
modificare;
tergere.

43

2.5.1

Memorarea datelor n Visual FoxPro

Adugarea de nregistrri ntr-un fiier de date

n paragrafele anterioare am artat modul n care se creeaz un fiier de date, i


modul n care poate fi manipulat structura fiierului. Adugarea de nregistrri se
poate face n dou moduri :
1. adugarea de noi nregistrri la sfritul fiierului de date
2. introducerea de nregistrri noi n interiorul fiierului de date
Cea mai uzual comand folosit pentru introducerea de date este comanda
APPEND cu sintaxa:
APPEND [BLANK]
Aceast comand adaug nregistrri la sfritul fiierului de date activ. Dac
se tasteaz comanda cu acelai nume n fereastra Command Window, se deschide
fereastra Append prin care datele se introduc interactiv n fiierul de date (fig.2.16)

Fig. 2 16 Fereastra Append

USE SALARIAT
SET CARRY ON
SET CARRY TO SEX
A
APPEND
SET CARRY OFF
B
USE
Saltul la cmpul urmtor se realizeaz fie la apsarea tastei Enter, fie atunci
cnd cmpul este ocupat n totalitate cu date. Pentru a edita un cmp de tip memo,
cnd cursorul se afl n cmpul respectiv se tasteaz combinaia de taste C+d.
Ieirea cu salvare din fereastra de editare a cmpului memo se face cu C+W.
Datele introduse n fereastra Append sunt influenate de comanda SET
CARRY cu sintaxa:
SET CARRY TO <list cmpuri>[ADITIVE]
Aceast comand poate determina ca toate cmpurile sau numai anumite
cmpuri introduse ntr-o nou nregistrare s fie identice cu cmpurile din
nregistrarea precedent
Exemplul 2.13
Dorim s introducem persoanele de sex masculin n fiierul SALARIAT.

44

Capitolul 2

Explicaii
A) Se seteaz cmpul SEX, pentru a fi identic cu nregistrarea precedent. Se va scrie
automat caracterul T n toate nregistrrile care vor fi scrise dup nregistrarea
curent.
B) Cnd se termin introducerea datelor se tasteaz SET CARRY OFF prin care se
revine la starea iniial n care fiecare cmp dintr-o nregistrare nou poate avea
valori diferite.
O anumit list de cmpuri poate fi extins prin folosirea clauzei ADDITIVE,
care permite ca la o anumit list de cmpuri existente n comanda SET CARRY s
se adauge una nou.
Comand APPEND BLANK adaug o nregistrare "blank", adic o nregistrare
n care toate cmpurile sunt vide, la sfritul fiierului de date urmnd ca mai trziu
s se ncarce informaia util prin alte comenzi FoxPro.
Comanda APPEND FROM<fiier>
[FIELDS<list cmpuri>]
[FOR <expL>]
[TYPE]
adaug nregistrri dintr-un alt fiier de date n fiierul de date curent. Dac se
dorete ca n fiierul de date s fie introduse numai anumite cmpuri atunci se
folosete opiunea FIELDS n care se vor introduce cmpurile care se vor copia,
separate prin virgul. Pentru a prelua doar anumite nregistrri se va folosi opiunea
FOR. Clauza TYPE se folosete pentru a specifica tipul fiierului din care vor fi
preluate datele. Acesta este diferit de tipul DBF i aparine altor medii de programare.
Adugarea unei nregistrri noi dup nregistrarea curent, se realizeaz cu
comanda INSERT care are sintaxa:
INSERT [BEFORE][BLANK].
Dac se folosete clauza opional BEFORE atunci se adaug naintea
nregistrri curente, o nregistrarea nou. Clauza opional BLANK este analoag cu
aceeai clauz de la comanda APPEND. Fereastra care apare n urma acestei comanzi
este identic cu aceea de la comanda APPEND. n general este o comand mai puin
folosit deoarece introducerea de nregistrri noi printre cele vechi se folosete mai
rar cu aceast comand, existnd alte tehnici prin care se realizeaz acest lucru.

2.5.2

Modificarea nregistrrilor unui fiier de date

Modificarea informaiilor stocate ntr-un fiier de date se poate face cu una din
comenzile :
CHANGE
EDIT
BROWSE
REPLACE

45

Memorarea datelor n Visual FoxPro

Primele trei comenzi nu modific propriu-zis coninutul unui fiier de date, ci


deschid o fereastr de editare n care utilizatorul va modifica informaiile dorite.
Comenzile CHANGE i EDIT sunt identice , ele fiind diferite de comanda
BROWSE numai prin modul n care sunt aranjate cmpurile n fereastra de editare.
n timp ce la comenzile EDIT i CHANGE cmpurile sunt aezate pe vertical, la
comanda BROWSE cmpurile sunt aezate pe orizontal.

2.5.2.1 Comanda BROWSE


Sintaxa comenzii este:
BROWSE
[FIELDS <list cmpuri>]
[FONT <expC1> [, <expN1>]]
[STYLE <expC2>]
[FOR <expL1>]
[FORMAT]
[FREEZE <cmpuri>]
[KEY <expr1> [, <expr2>]]
[LAST | NOINIT]
[LEDIT]
[REDIT]
[LOCK <expN2>]
[LPARTITION]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLGRID] [NORGRID]
[NOLINK]
[NOMENU]

[NOOPTIMIZE]
[NOREFRESH]
[NORMAL]
[NOWAIT]
[PARTITION <expN3>]
[PREFERENCE <expC3>]
[REST]
[SAVE]
[TIMEOUT <expN4>]
[TITLE <expC4>]
[VALID [:F] <expL2>
[ERROR <expC5>]]
[WHEN <expL3>]
[WIDTH <expN5>]
[[WINDOW <nume
fereastr1>]
[IN [WINDOW] <nume
fereastr2>
| IN SCREEN]]

Fig. 2 17 Fereastra Browse i meniul Table aferent acesteia

46

Capitolul 2
[COLOR SCHEME <expN6>

| COLOR <list perechi de


culori>]
Comanda BROWSE fr nici o opiune, afieaz toate cmpurile din fiierul
de date oferind utilizatorului, accesul cu toate drepturile la informaiile existente (fig
2.5).
La tastarea comenzii BROWSE, n meniul principal apare meniul Table care
permite configurarea ferestrei de editare a fiierelor.
Opiunea Font permite schimbarea fontului de editare.

Fig. 2 18 Fereastra Browse - Properties

Opiunea Properties deschide fereastra cu acelai nume (fig 2.18).


Fereastra afieaz numele fiierului activ n fereasta Browse, permite blocarea
articolelor n cazul lucrului n reea (Lock records), permite definirea unui filtru
asupra datelor n caseta Data filter, permite deschiderea fiierului indexat prin
alegerea indexului dorit din caseta Index order, permite accesul la toate articolele din
fiier sau numai la cele specificate de ctre filtru, prin alegerea butonului dorit din
zona Allow access to. Butonul Field Filter permite activarea anumitor cmpuri din
cadrul tabelei.
Opiunea Go to Record permite poziionarea pe anumite articole din cadrul
fiierului de date.
Opiunea Append New Record permite adugarea unui articol nou din
fereastra Browse.
Opiunea Toggle Deletion Mark permite marcarea pentru tergere articolului
sau a grupului de articole dorit
Opiunea Resize Partitions este similar cu opiunea PARTITIONS a
comenzii BROWSE. Aceasta activeaz butonul de mprire al ferestrei de editare n
dou zone distincte. Cu ajutorul tastelor direcionale sau al mouse-ului se definesc
cele dou regiuni denumite partiii.
Opiunea Size Field permite redimensionarea cmpului activ (cmpul n care
se afl cursorul) cu ajutorul tastelor sgei sau al mouse-lui.
Opiunea Move Field, permite schimbarea ordinii de afiare a cmpurilor, n
fereastra de afiare.

47

Memorarea datelor n Visual FoxPro

Opiunea Remove Deleted Records permite refacerea articolelor terse.


Opiunea Recall Records permite demarcarea articolelor marcate pentru
tergere
Opiunea Delete Records, permite marcarea pentru tergere a unor nregistrri
din fiierul de date.
Opiunea Append Record, permite adugarea de articole noi n fiierul de date
dintr-un alt fiier de date.
Opiunea Rebuild Indexes, permite refacerea fiierelor de index ataate
fiierului de date sau refacerea etichetelor index ataate fiierului de date.
n continuare vom prezenta opiunile comenzii BROWSE.
Opiunea FIELDS a comenzii BROWSE, ofer utilizatorului posibilitatea de
a afia doar anumite cmpuri ale fiierului de date activ, n fereastra de editare.
Numele cmpurilor care se doresc a fi afiate se vor scrie n lista de cmpuri,
desprite de virgul. Opiunile de editare ale cmpurilor sunt prezentate n tabelul 2.2
Tabelul 2.2
Opiuni de editare a cmpurilor
Explicaii
[:P = <expC2>]
<cmp1> [:R] [:mrime cmp]
[:V = <expr1> [:F] [:E = <expC1>]]

[:B = <expr2>, <expr3> [:F]]

[:H = <expC3>]
[:W = <expL1>]

Se poate specifica un cod PICTURE specific


comenzilor de intrare ieire (Capitolul ??????)
Cmpul se poate vizualiza pe un numr de
caractere.
Permite validarea cmpului introdus. Dup ce
cmpul sa modificat i se iese din editarea
acestuia se evalueaz <expr1> i dac valoarea
ei este .T. (adevrat) atunci data introdus este
corect.
[:F] se folosete pentru a fora validarea
[:E] se folosete pentru a schimba mesajul de
eroare n cazul n care, valoarea expresiei
<expr1> este fals.
Reprezint intervalul n care trebuie s se
gseasc cmpul dup editare. <expr2>
reprezint limita inferioar, iar <expr3>
reprezint limita superioar.
Schimb numele cmpului care se afiaz n
fereastra de editare.
Se permite editarea cmpului doar dac expresia
logic <expL1> are valoarea adevrat.

Exemplu 2.14
USE SALARIAT
BROWSE FIELDS NUME:R:10, MATR:H=MATRICOL
A
BROW FIELDS VIRSTA:V=VIRSTA>15 AND VIRSTA<50: VIRSTA;
B
INVALIDA
BROW FIELDS SALAR:W=SALAR>200000
C

48

Capitolul 2

Explicaii

USE SALARIAT
BROW VALID SALAR > 200000 ERROR 'DATE ERONATE'
BROW WHEN SEX=.F.

BROW FOR SALAR>1000000

CLOSE ALL
A) Comand BROWSE n care se afiaz cmpul Nume pe lungime de 10 caractere i
se schimb numele cmpului Matr n Matricol.
B) Comand BROWSE n care asupra cmpului Virsta se pune condiia de validare
ca acesta s fie cuprins ntre valorile numerice 15 i 50. n cazul n care se tasteaz
valori diferite acestui interval apare mesajul de eroare VIRSTA INVALIDA.
C) Comand BROWSE care inhib editarea cmpului SALAR dac valoarea
salarului este mai mic dect 200000.
Opiunea FOR permite apariiei n fereastra de editare doar a acelor nregistrri
care ndeplinesc condiia logic.
Opiunea VALID acioneaz la nivel de nregistrare. Oiunea este evaluat n
momentul n care se trece de la o nregisrare la alta i verific dac nregistrarea
respectiv ndeplinete o anumit valoare. Clauza ERROR ofer utilizatorului
posibilitatea de a introduce un mesaj, diferit de mesajul sistem Invalid input.
Opiunea WHEN se folosete pentru a specifica dac o nregistrare poate fi sau
nu modificat. Dac expresia logic este .T., atunci este validat accesul la nregistrare
pentru a face modificri.
Exemplul 2.15
Explicaii
A) n cazul n care cmpul Salar din nregistrarea n care sau fcut modificrile nu
ndeplinete condiia logic Salar>200000, trecerea la o alt nregistrare,
genereaz mesajul DATE ERONATE.
B) comanda permite numai modificarea nregistrrilor n care cmpul Sex are
valoarea .F..
C) comanda vizualizeaz n fereastra de editare doar acele nregistrri care
ndeplinesc condiia logic.
Opiunile NOEDIT i NOMODIFY ale comenzii BROWSE sunt identice, ele
impiedic modificarea datelor din tabele, dar permit tergerea i adugarea de
nregistrri.
Opiunile NODELETE i NOAPPEND inhib posibilitile de tergere i de
adugare de noi nregistrri n fiierul de date.
Opiunea NOMENU inhib apariia meniului Table (Fig 2.17) n meniul
principal.
Alte opiuni ale comenzii BROWSE sunt prezentate n tabelul 2.2.

49

Memorarea datelor n Visual FoxPro


Tabelul 2.4
Opiune

Semnificaie

FONT i STYLE

Opiuni pentru alegerea tipului fontului de editare specifice mediului


Window.
Informeaz comanda Browse c trebuie s foloseasc variabile din
fiierul format activ. n aceast carte nu se vor folosi fiierele format
Limiteaz editarea doar la un singur cmp din fereastra de editare.
Preia ultima configuraie de fereastr de editare Browse salvat.
Comut partiiile stng sau dreapt n modul Change.
Specific numrul de coloane care rmn fixate n poziia lor iniial
n fereastra de editare.
Plaseaz iniial cursorul n fereastra din stnga n cazul n care
fereastra de editare este partiionat.
Opiunea nu coreleaz partiiile. Deplasarea cursorului ntr-o partiie
nu implic deplasarea cursorului i n cealalt partiie
Dezactiveaz tehnica Rushmore de cutare a nregistrrilor ntr-un
fiier de date. Aceasta este cea mai rapid tehnic de cutare
existent n mediul VFP.
Comand folosit doar n mediu multiutilizator.
Fereastra de editare este setat la atributele normale.
Se poate folosi n cazul n care din program se apeleaz comanda
Browse i are rolul ca dup afiarea ferestrei de editare programul
utilizator se continu.
mparte fereastra de editare n dou partiii.
Salveaz atributele ferestrei pentru o utilizare ulterioar
Se utilizeaz mpreun cu clauza FOR i impune comenzii s caute
nregistrrile de la nregistrarea curent pn la sfritul fiierului.
Se folosete ntr-un program i foreaz pstrarea pe ecran a ferestrei
i a cmpurilor memo asociate.
Specific ct timp ateapt comanda Browse ca utilizatorul s
introduc datele, nainte de a nchide automat fereastra de editare.
Ofer posibilitatea de a da un titlu ferestrei de editare.
Definete limea maxim a unei coloane din fereastra de editare.
Afiaz fereastra de editare n interiorul unei ferestre definit anterior
Permite s se indice o configuraie de culori prestabilite sau o list de
atribute pentru culoare.

FORMAT
FREEZE
LAST
LEDIT i REDIT
LOCK
LPARTITION
NOLINK
NOOPTIMIZE
NOREFRESH
NORMAL
NOWAIT
PARTITION
PREFERENCE
REST
SAVE
TIMEOUT
TITLE
WIDTH
WINDOW
COLOR

2.5.2.2 Comanda REPLACE


Modificarea cmpurilor unui fiier de date poate fi efectuat i cu comanda
REPLACE care spre deosebire de comenzile prezentate anterior nu deschide o
fereastr de editare. Sintaxa acestei comenzi este:
REPLACE <cmp1> WITH <expr1> [ADDITIVE]
[, <cmp22> WITH <expr2>
[ADDITIVE]] ...

50

C
D

Capitolul 2
USE SALARIAT
GO RECORD 4
REPLACE NUME WITH IONESCU, PRENUME WITH ION, MATR;
WITH 1012
APPE BLANK
REPLACE NUME WITH POPESCU, PRENUME WITH ION, MATR;
WITH 1011
REPLACE SEX WITH .T., STARE_CIVL WITH .F.
GO TOP
REPLACE SALAR WITH 1000000 NEXT 3
REPLACE SALAR WITH 150000 FOR NUME=IONESCU AND;
PRENUME=ION
CLOSE ALL
[<domeniu>]
[FOR <expL1>]
[WHILE <expL2>]
[NOOPTIMIZE]

Comanda nlocuiete vechea valoare din cmpul1 cu valoarea rezultat n urma


evalurii expresiei expr1, cmpul2 cu expr2 i aa mai departe. Pentru cmpurile
memo se folosete clauza ADDITIVE prin care cmpul memo nu este ters, valoarea
expresiei fiind ataat la sfritul cmpului.
Comanda REPLACE se folosete n general cu comanda APPEND BLANK
pentru a introduce nregistrri noi ntr-un fiier.
Exemplul 2.16
Explicaii
A) Pentru nregistrarea cu numrul 4 se nlocuiete coninutul cmpurilor Nume,
Prenume, Matr;
B) Se adaug o nou nregistrare la sfritul fiierului, n care se vor complecta
cmpurile: Nume, Prenume, Natr, Sex, Stare_civl;
C) Se modific cmpul Salar pentru trei nregistrri ncepnd de la nregistrarea
curent;
D) Se modific cmpul Salar pentru nregistrarea care conine n cmpurile Nume i
Prenume, expresiile IONESCU i ION.

2.5.3 tergerea nregistrrilor dintr-un fiier de date.


tergerea unei nregistrri dintr-un fiier de date se poate realiza la dou nivele
i anume:

51

Memorarea datelor n Visual FoxPro

1. la nivel logic, cnd nregistrarea nu este propriu zis tears din fiierul de date
ci ea este "marcat pentru tergere", indicnd astfel aceast stare a nregistrrii.
nregistrrile marcate pentru tergere pot fi determinate de funcia
DELETED().
2. la nivel fizic, cnd nregistrarea este, efectiv tears din fiierul de date,
ulterior ea nu mai poate fi recuperat.
Marcarea pentru tergere se face prin comanda DELETE cu sintaxa:

USE SALARIAT
SET DELETED ON
GO TOP
DELETE NEXT 4

DELETE NEXT 1 FOR SEX=F

DELETE REST FOR STARE_CIVL = T

DELETE NEXT ALL


CLOSE ALL
DELETE [<domeniu>] [FOR<expL1>] [WHILE<expL2>][NOOPTIMIZE]
Dac nu se specific nimic n comand atunci se marcheaz pentru tergere
nregistrarea curent. <domeniu> este domeniul nregistrrilor. Clauzele FOR i
WHILE sunt clauzele generale de cutare a nregistrrilor, n funcie de o expresie
logic. Clauza NOOPTIMIZE se refer la dezactivarea metodei Rushmore.
Controlul la nregistrrile marcate pentru tergere este dat de ctre comanda:
SET DELETED ON|OFF
Dac se alege opiunea ON atunci nregistrrile marcate pentru tergere nu vor fi
accesibile celorlalte comenzi Visual FoxPro care vor folosi aceste nregistrri.
Opiunea OFF permite accesul celorlalte comenzi Visual FoxPro la nregistrrile
marcate pentru tergere.
D

Exemplul 2.16
Explicaii
A) terge primele 4 nregistrri de la nceputul fiierului.
B) terge primul articol care are ndeplinit condiia logic cmpul Sex=F.
C) terge toate articolele din fiier care au n cmpul Stare_civl valoarea T.
D) terge toate articolele rmase n fiier de la nregistrarea curent pn la sfritul
fiierului.
nregistrare marcat pentru tergere nu este tears fizic. Informaia marcat
pentru tergere poate fi recuperat cu ajutorul comenzii RECALL cu sintaxa:
RECALL [<domeniu.] [FOR<expL1>] [WHILE<expL2>].
Clauzele acestei comenzi sunt identice cu clauzele comenzi DELETE. Dac nu
se specific nici o clauz se recuperaz nregistrarea curent.

52

Capitolul 2

tergerea efectiv a nregistrrilor dintr-un fiier de date se face cu comanda


PACK. Dup aplicarea acestei comenzi nregistrrile nu mai pot fi refcute.
Toate nregistrrile dintr-un fiier pot fi terse global prin comanda ZAP.
Aceast comand activeaz o fereastr de dialog care valideaz sau nu comanda.
Informaiile terse din fiier sunt distruse definitiv, fr posibiliti de refacere.
Comanda ZAP este echivalent cu comenzile: DELETE ALL i PACK.
n limbajul Visual Fox, exist o comand prin care, fr tergere sau marcare
pentru tergere, se poate nhiba accesul la unele nregistrri. Aceast comand este:
SET FILTER TO [<expL>]
Ca efect al acestei comenzi n fiierul de date vor apare doar nregistrrile care
ndeplinesc condiia expL.
Exemplul 2.18
A
B

USE SALARIAT
SET FILTER TO STARE_CIVL=.T.
BROW
?FILTER()
CLOSE ALL

Explicaii
A) Se aleg din fiierul de date numai acele nregistrri care au n mpul Stare_civl
valoarea adevrat.
B) Se vizualizeaz condiia de filtrare cu ajutorul funciei FILTER().

2.6 Vizualizarea coninutului unei fiier de date


Vizualizarea coninutului unui fiier de date se poate face folosind una dintre
comenzile pentru modificarea nregistrrilor fiierului de date, prezentate n
paragraful precedent. n acest caz, pentru a avea o vizualizare strict a fiierului de
date este necesar inhibarea posibilitilor de scriere n cmpurile nregistrrilor i
tergerea acestora.
Comenzile specifice pentru vizualizare nregistrrilor sunt comenzile
DISPLAY i LIST.
Comanda DISPLAY are sintaxa:
DISPLAY
[[FIELDS] <list cmpuri>
| FIELDS LIKE <masc>
| FIELDS EXCEPT <masc>]
[<domeniu>]
[FOR <expL1>]
[WHILE <expL2>]
[OFF]

53

Memorarea datelor n Visual FoxPro


[TO PRINTER [PROMPT]
| TO FILE <nume fiier>]
[NOCONSOLE]
[NOOPTIMIZE]

Afiarea informaiilor se face astfel :


pe prima linie se reprezint lista cmpurilor;
pe urmtoarele linii se reprezint nregistrri din fiierul de date. Pe prima
poziie se afieaz numrul de ordine al nregistrrii din fiierul de date.
Opiunea FIELDS specific lista de cmpuri pentru afiare. Dac lipsete se
afieaz toate cmpurile. Opiunile FIELDS LIKE i FIELDS EXCEPT afieaz
sau nu mai multe cmpuri dup o anumit masc de identificare.
A
B
C
D
E
F

USE SALARIAT
DISPLAY
DISPLAY ALL OFF
GO RECORD 3
DISPLAY FIELDS NUME,PRENUME,SALAR
DISPLAY FIELDS SALAR REST
GO TOP
DISPLAY ALL FOR STARE_CIVL=.F.
DISPLAY ALL TO FILE SALAR.TXT NOCONSOLE
CLOSE ALL

Opiunile <domeniu> FOR i WHILE sunt cele specifice domeniului


nregistrrilor.
Opiunea OFF, inhib apariia n formatul de afiare, a informaiei de pe
coloana 0 reprezentnd numrul de ordine al nregistrrilor.
Opiunile TO PRINTER i TO FILE, permite transmiterea rezultatelor
vizualizrii la imprimant sau ntr-un fiier ASCII.
Opiunea NOCONSOLE inhib vizualizarea coninutului fiierului pe ecranul
videoterminalului calculatorului
Implicit dac n [domeniu] nu se specific nimic atunci cu DISPLAY se vizualizeaz
nregistratrea curent.
Exemplul 2.19
Explicaii
A) Vizualizarea primei nregistrri din fiierul Salariat;
B) Vizualizarea tuturor nregistrrilor din fiier, fr afiarea pe coloana 0 a
indicatorului de nregistrri;

54

Capitolul 2

C) Vizualizarea cmpurilor Nume, Prenume i Salar de la treia nregistrare din


fiierul de date;
D) Vizualizarea tuturor nregistrrilor de la nregistrarea cu numrul 3 pn la
sfritul fiierului de date;
E) Vizualizarea tuturor nregistrrilor care conin valoarea fals pentru cmpul
Stare_civl;
F) Vizualizarea tuturor nregistrrilor n fiierul text, cu numele Salar.txt, fr
afiarea rezultatelor vizualizrii pe ecran.
Comanda LIST este asemntoare cu comanda DISPLAY, avnd aceeai
sintax, dar cu urmtoarele deosebiri:
domeniul implicit al comenzii vizualizeaz toate articolele fiierului
de date;
n timp ce comanda DISPLAY afieaz ecran cu ecran, trecerea de la
un ecran la altul fcndu-se prin apsarea unei taste, comanda LIST
afieaz fr pauz ntre ecrane, toate nregistrrile;
Comanda LIST nu afieaz nregistrrile marcate pentru tergere, n
cazul n care avem activ comanda SET DELETED ON, pe cnd
comanda DISPLAY afieaz i aceste nregistrri.
Pentru ca prima linie de vizualizare care conine cmpurile dintr-un fiier s nu
apar ca urmare a comenzilor DISPLAY sau LIST se folosete comanda SET
HEADING OFF.

2.7 Fereastra Data Session


Pentru afiarea zonelor de lucru, a fiierelor active ntr-o aplicaie precum i a
legturilor dintre acestea se folosete fereastra DATA SESSION (fig 2.19), care se

Fig 2. 19 Fereastra Data Session

55

Memorarea datelor n Visual FoxPro

apeleaz din meniul Window.


Aceast fereastr afiaz o list derulabil de zone de lucru, aliasurile tabelelor
deschise i o schem a tuturor relaiilor stabilite ntre fiierele de date.
n tabelul 2.5 sunt descrise funciile butoanelor din partea central a ferestrei.
Tabelul 2.5
PROPERTIES

RELATIONS
BROWSE
OPEN
CLOSE

Activeaz fereastra Work Area Properties (fig 2.18)


Activeaz fereastra de setare a legturilor dintre fiierele de date.
Activeaz fereastra de editare cu acelai nume corespunztoare unui fiier
de date.
Activeaz un fiier de date.
nchide un fiier de date.

nregistrrile dintr-un fiier pot corespunde uneia sau mai multor nregistrri
din alt fiier, caz n care se spune c ntre cele dou fiiere exist o legtur sau n
terminologia relaional a bazelor de date, o relaie. Aa cum s-a artat anterior n
acest capitol, fiierul de unde se stabilete relaia se numete fiier printe, iar
fiierul copil este fiierul n care s-a stabilit relaia. Pentru stabilirea unei relaii
ntre dou fiiere de date, trebuie ca ambele s fie deschise n cte o zon de lucru. Se
poate stabili o relaie, numai ntre cmpuri care memoreaz date comune.
Pentru a stabili interactiv o relaie ntre dou fiiere, acestea se deschid n dou
zone de lucru diferite. Zona curent de lucru este zona n care este deschis fiierul
printe. Se acioneaz apoi butonul Relation, pe ecran va apare fiierul printe cu o
sgeat ndreptat n jos i spre dreapta. Se stabilete fiierul copil din zonele de
lucru i relaia de legtur cu ajutorul constructorului de expresii.

2.8 Ordonarea unui fiier de date


Ordonarea nregistrrilor n Visual FoxPro se poate realiza n dou moduri ;
prin ordonarea propiu-zis a fiierului de date n ordinea dorit a
nregistrrilor. Se creeaz practic un nou fiier de date care conine aceleai
nregistrri ca i primul, dar de data aceasta nregistrrile sunt ordonate
dup unul sau mai multe cmpuri, numite cheie de ordonare.
prin indexarea fiierului de date, aceasta presupunnd crearea unui fiier
care conine informaii cu privire la ordinea nregistrrilor n fiierul de
date. Aceasta NU CONINE nregistrrile fiierului de date, fiierul index
ine evidena articolelor din fiierul de date ntr-o anumit ordine.

2.8.1

Sortarea fiierelor de date

56

Capitolul 2

Sortarea fiierelor de date, adic aranjarea nregistrrilor ntr-o anumit ordine,


funcie de unul sau mai multe cmpuri ale fiierului de date, se realizeaz cu comanda
SORT a crei sintax este:
SORT TO <nume fiier>
ON <cmp1>[/A][/D][/C],
[Cmp 2][/A][/D][/C] ...
[ASCENDING][DESCENDING]
[<domeniu>][FOR <expL1>][WHILE <expL2>]
[FIELDS<list cmpuri>]
[NOOPTIMIZE]
Comanda creeaz un nou fiier de date, al crui nume este dat de ctre clauza
TO. Cmpul sau cmpurile dup care se face sortarea sunt denumite chei de sortare,
numele acestora fiind dat de ctre clauza ON. Parametrii A i D se folosesc pentru a
realiza ordonarea cresctoare sau descresctoare a nregistrrilor din fiier i sunt
similari cu clauzele ASCENDING i DESCENTING. Parametrul C se folosete
pentru a compara iruri de caractere i pentru a nu face deosebire ntre literele mari
sau mici. Clauza ASCENDING este implicit. Fiierul de date rezultat n urma
operaiei de sortare poate avea toate cmpurile fiierului de date iniial sau poate avea
numai anumite cmpuri carepot fi specificate n clauza FIELDS.
Dac nu se dorete ordonarea tuturor nregistrrilor dintr-o baz de date atunci se pot
folosi clauzele :
<domeniu> prin care se poate selecta un anumit numr de nregistrri
din fiierul de date;
FOR sau WHILE prin care, nregistrrile se selecteaz n funcie de o
anumit condiie logic
Exemplu 2.20
Se consider fiierul de date Salariat.dbf.
CLEA
CLOSE ALL
DELE FILE MATRICOL.DBF
DELETE FILE ALFAB.DBF
DELETE FILE SALAR.DBF
DELETE FILE SALNUM.DBF
USE SALARIAT

57

Memorarea datelor n Visual FoxPro

Explicaii
A) aranjarea nregistrrilor din fiierul de date dup cmpul Matr n fiierul
Matricol n ordine ascendent;
B) aranjarea nregistrrilor din fiierul de date dup cmpurile Nume i
Prenume n fiierul Nume n ordine ascendent;
C) aranjarea nregistrrilor din fiierul de date care ndeplinesc condiia logic
salar>500000, n ordine descendent, dup cheia Matr, n fiierul Salar;
D) aranjarea nregistrrilor n ordie ascendent dup cmpurile Salar i Nume,
n fiierul Salnum. Noul fiier de date are doar cmpurile Nume i Salar.

2.8.2 Indexarea fiierelor de date


Indexii sunt structuri de date care au drept unic scop, creterea vitezei de
accesare a articolelor. La crearea structurii fiierelor de date am prezentat tipurile de
indecsi care pot fi create. n afar de metoda prezentat, fiierele index pot fi create
prin comenzi tastate n fereastra de comand. Fiierele de index sunt fiiere auxiliare
pe disc, ele sunt diferite de fiierele de date, cutarea se face dup valorile anumitor
cmpuri care poart denumirea de cheie de indexare. Indexul este definit asupra unui
cmp unic din fiier, el conine valorile cmpului de indexare, ordonate astfel nct s
se poat face o cutare liniar asupra lor. Indexul mai conine un cmp n care se
gsesc pointeri sau adrese la blocuri sau nregistrri din fiierul de date. Dimensiunile
fiierului index sunt mai mici dect dimensiunile fiierului de date, de aceea cutarea
se face mult mai rapid. Indexarea se poate face pe un cmp care are valori distincte n
cadrul fiierului de date, caz n care indexul se numete index primar. Indexarea se
A SORT TO MATRICOL ON MATR
SELE 2
USE MATRICOL
BROW
SELE 1
B SORT TO ALFAB ON NUME,PRENUME
SELE 3
USE ALFAB
BROW
SELE 1
C SORT TO SALAR ON MATR FOR SALAR >500000 DESC
SELE 4
USE SALAR
BROW
SELE 1
D SORT TO SALNUM ON SALAR,NUME FIELDS NUME,SALAR
SELE 5
USE SALNUM
BROW
CLOSE ALL

58

Capitolul 2

poate face dup o cheie de indexare (unul sau mai multe cmpuri) care nu are valori
distincte n tot fiierul, caz n care fiierul se numete index prin clusterizare. Un
fiier mai poate avea mai multe fiiere de index secundare, care pot fi specificate pe
un cmp oarecare din fiier, n afar de cmpurile principale de indexare.
n limbajul Visual FoxPro exist dou tipuri de fiiere index:
fiierele cu extensia IDX care conin un singur index;
fiierele cu extensia CDX, care sunt fiiere index compuse.
Numrul de indeci dintr-un fiier index compus este limitat doar de
capacitatea memoriei disponibile; fiecare index poart denumirea de etichet (tag).
Un fiier index compus care are acelai nume cu fiierul de date DBF i care este
legat de acesta poart denumirea de fiier index compus structurat. Fiierele CDX au
avantaje fa de fiierele IDX prin faptul c ele conin mai muli indeci nglobai.
Deschiderea unui fiier de date care are ataai mai muli indeci simpli, poate dura
foarte mult. De asemenea fiierele indexate compuse asigur o integritate sporit
fiierelor index, prin legarea strns a fiierelor de date de indecii care i sunt
asociai.
Fiierele index att cele simple ct i cele compuse se prezint sub forma unor
arbori B+. Fiierele indexate compuse au cte un arbore B+ pentru fiecare etichet de
indexare.
Fiierele index trebuie s fie deschise ori de cte ori se deschide i fiierul de
date DBF i se realizeaz modificri ale articolelor din el. Altfel apar anomalii n
funcionarea fiierelor index. n cazul fiierelor compuse structurale acest lucru poate
fi neglijat deoarece aceste fiiere de index se deschid automat la deschiderea fiierului
de date DBF.
Fiierele index simple se recomand a se crea atunci cnd dorim s creem un
index temporar care exist un timp limitat de timp, dup care se terge cu o comand
DELETE FILE <nume_fiier_index>. n cazul n care se creeaz fiiere index care
vor fi folosite n mod frecvent, un timp mai ndelungat, soluia cea mai bun este de a
folosi fiiere index compuse, adic fiierele index CDX, deoarece etichetele de index
ntr-un astfel de fiier sunt actualizate n mod permanent.
Indecii pot fi creai cu comanda INDEX, iar cu comanda REINDEX, poate fi
refcut un index alterat. Comanda INDEX de creare a unui fiier index simplu sau
compus are sintaxa:
INDEX ON <exp_cheie> TO <fiier_idx>
| TAG <nume_etichet>
[OF <fiier_cdx>]
[FOR <expL>]
[COMPACT]
[ASCENDING | DESCENDING]
[UNIQUE]
[ADDITIVE]
Cheia de indexare este descris de ctre expresia aflat n clauza ON. Aceast
expresie poate fi de tip: ir de caractere, numeric, logic, dat calendaristic, funcie

59

Memorarea datelor n Visual FoxPro

definit de utilizator. Aceast ultim noiune va fi explicat pe larg n capitolul


Proceduri i funcii. Cheie de indexare nu poate fi un cmp de tip memo. Lungimea
unei expresii a unei chei de indexare poate fi de 100 de caractere pentru fiierele IDX
i 240 de caractere pentru fiierele CDX.
Dac se specific clauza TO se creaz un fiier index de tip IDX, iar dac se
specific clauza TAG se creaz un fiier compus. Fiierele compuse sunt de dou
categorii:
structurale, caz n care au acelai nume cu fiierul de date, fr a mai
fi specificat un alt nume de fiier indexat n clauza OF a comenzii
INDEX;
nestructurale, adic ele poart alt nume dect cel al fiierului de date,
nume care este specificat n clauza OF a comenzii INDEX
Clauza COMPACT se refer doar la fiierele index simple i ofer
posibilitatea de a realiza fiiere index compactate, adic fiiere index cu dimensiuni
mai reduse dect un fiier index obinuit. Totodat accesul la nregistrri n fiierele
compactate este mai rapid. Fiierele index compuse sunt totdeauna compactate.
n cazul n care se dorete indexarea numai a anumitor nregistrri din fiierul
de date se folosete clauza FOR. Aceast clauz poate fi specificat numai atunci
cnd este creat o etichet a unui fier index compus. Expresia logic din clauza
FOR poate conine variabile de memorie, funcii definite de utilizator sau cmpuri ale
unor alte fiiere DBF, deschise n alte zone de memorie.
Dac este specificat clauza UNIQUE la crearea unui fiier index, atunci doar
prima nregistrare pentru care valoarea cheii de indexare este aceeai, este introdus
n fiierul index.
Clauza ASCENDING este implicit i semnific ordonarea nregistrrilor n
ordine cresctoare. Clauza DESCENDING se refer doar la fiierele indexate
compuse.
Deschiderea unui fiier index se realizeaz cu comanda USE a crei sintax
este:
USE [<fiier> | ?]
[IN <expN1>]
[AGAIN]
[INDEX <lista_fiiere_indexate> | ?
[ORDER [<expN2>
| <fiiere_indexate_idx>
| [TAG] <nume_etichet>
[OF <fiiere_cdx>]
[ASCENDING | DESCENDING]]]]
[ALIAS <alias>]
[EXCLUSIVE]
[SHARED]
[NOUPDATE]

60

Capitolul 2

A
B

CLOSE ALL
SET TALK OFF
DELE FILE inume.idx
DELE FILE matricol.idx
USE salariat
INDEX ON nume to inume
INDEX ON matr to matricol

INDEX ON nume TAG nume

INDEX ON matr TAG matricol

INDEX ON salar TAG salar FOR salar>500000 DESCENDING


USE salariat INDEX inume
F
BROW
USE salariat INDEX matricol
G
BROW
USE salariat ORDER TAG nume
H
BROW
USE salariat ORDER TAG matricol
I
BROW
USE salariat ORDER TAG salar
J
BROW
CLOSE ALL
Comanda USE care se folosete pentru deschiderea unui fiier de date poate fi
folosit i pentru deschiderea unui fiier indexat de tip IDX sau CDX.
Clauza INDEX prezint o list a fiierelor IDX. Dac se tasteaz caracterul ?
se deschide o fereastr de dialog din care se va alege fiierul indexat dorit. Fiierele
din list vor fi separate prin virgul.
Clauza ORDER determin fiierul din lista de fiiere IDX care va devenii activ sau
eticheta (TAG) care va deveni activ. Apelul acestora se poate face i prin expresia
numeric <expN>, care reprezint numrul de ordine al fiierului n lista de fiiere
sau numrul de ordine al etichetei n lista de etichete.
Clauza TAG individualizeaz o etichet cu un anumit nume.
Clauza OF face referin la un fiier CDX nestructural, deci care are nume
diferit de cel al fiierului de date activ.
Exemplul 2.21
E

Se consider fiierul de date Salariat.dbf, care este indexat i deschis n mai


multe moduri.
Explicaii

61

Memorarea datelor n Visual FoxPro

A) crearea unui fiier indexat simplu cu numele inume.idx;


B) crearea unui fiier indexat simplu cu numele matricol.idx;
C) crearea unui fiier indexat compus cu acelai nume cu numele fiierului de date,
Salariat.cdx, cu cheia de indexare nume i eticheta nume;
D) adugarea etichetei matricol, corespunztoare cheii de indexare matr, n fiierul
Salariat.cdx;
E) adugarea etichetei Salar, corespunztoare cheii de indexare Salar n fiierul
Salariat.cdx, pentru nregistrrile care ndeplinesc condiia logic salar>500000 ,
aranjarea nregistrrilor fcnd-se descresctor;
F) deschiderea fiierului indexat simplu inume.idx;
G) deschiderea fierului indexat simplu matricol.idx
H) deschiderea fiierului indexat compus Salariat.cdx, cu selectarea etichetei Nume;
I) se selecteaz eticheta Matricol din fiierul indexat compus Salariat.cdx;
J) se selecteaz eticheta Salar din fiierul indexat compus Salariat.cdx.
Asupra fiierelor indexate pot aciona o serie de funcii care returneaz
informaii despre fiierele indexate:
NDX() returneaz numele fierelor indexate simple deschise ntr-o anumit
zon de lucru;
CDX() returneaz numele fierelor indexate compuse deschise ntr-o
anumit zon de lucru;
TAG(), SYS(21) returneaz numele fiierului simplu sau al etichetei unui
fiier indexat compus, dintr-o list existent;
KEY(), SYS(14) returneaz numele cheii de indexare specificat la crearea
fiierului index simplu sau al etichetei unui fiier indexat compus;
ORDER() returneaz numele fiierului index simplu activ sau al etichetei
active.
n cazul n care cheia de indexare este format din mai multe cmpuri este
necesar formarea unei expresii de indexare de tip ir de caractere. Dac cmpurile
sunt de tipuri diferite, este obligatorie folosirea unor funcii specifice mediului Visual
Fox pentru conversia datelor dintr-un tip de dat n alt tip de dat. n figura 2.20 este
prezentat realizarea unui index folosind o cheie de indexare format din dou
cmpuri de tipuri diferite. Cmpul de tip numeric este convertit n tip ir de caractere
folosind funcia STR. Formarea cheii de indexare din cele dou cmpuri se realizeaz
folosind operatorul de concatenare "+".
Acelai index se poate realiza folosind comanda de indexare n fereastra de
comand:
INDEX ON STR(anuls)+np TAG STUD_DIS
Deschiderea fiierului se realizeaz cu comanda:
USE STUDENT ORDER TAG STUD_DIS
n general n mediul Visual Fox folosirea fiierelor de index de tip Idx, nu este
interzis dar se folosesc mai rar. Efectul prin care se creaz un fiier de index att din

62

Capitolul 2

fereastra Table Designer sau prin comanda INDEX, este identic, un fiier cu
extensia CDX, care are eticheta de index STUD_DIS

Fig 2. 20 Index care are cheia de indexare format din dou cmpuri de
tip diferit

Concluzii
n mediul Visual Fox suportul de memorare al datelor este relaia sau tabela
sau fiierul de date, care poate exista independent sau ntr-o baz de date. Existena
tabelei ntr-o baz de date VFP, este soluia recomandat de ctre autor datorit
facilitilor pe care le ofer.
Din punct de vedere obiectual, o baz de date poate fi considerat o clas de tip
container cu numele Data Environment, clas care conine obiecte de tip Cursor,
care sunt tabelele bazei de date, vederile acesteia sau legturile dintre fiierele de
date, ale bazei de date. Despre toate acestea vom discuta n capitolul referitor la
programarea orientat obiect n mediul Visual Fox.

Capitolul

3
VARIABILE, CONSTANTE, EXPRESII, FUNCII
SPECIFICE TIPURILOR DE DATE N LIMBAJUL VISUAL
FOX
3.1 Obiecte de date
Variabilele reprezint informaia pe care o poate manipula un limbaj de
programare. Limbajul Visual Fox ofer dou tipuri de variabile scalare:
cmpurile, care constitue elementele constructive ale fiierelor de
date DBF i au un caracter permanent;
variabile de memorie, care exist temporar, pe durata execuiei unui
program. Ele pot fi salvate ntr-un fiier i aduse n memoria
calculatorului, n funcie de dorina utilizatorului.
Variabilele scalare se mai numesc n mediul Visual Fox obiecte de date. Spre
deosebire de alte limbaje n Visual Fox, variabilele nu sunt definite n program ntr-o
zon anume i pstreaz tipul cu care au fost definite pe toat durata programului.
Lungimea i tipul unei variabile de memorie sunt ajustabile pe durata execuiei unui
program.
Un program Visual Fox este o niruire de instruciuni care au trei pri
distinctive i anume:
semantica sau semnificaia instruciunii;
sintaxa sau modul de scriere al instruciunilor;
lexica sau regulile pe baza crora se formeaz elementele sintaxei.
Totalitatea instruciunilor unui program formeaz programul surs. Pentru ca
acesta s poat fi neles de ctre mediul Visual Fox, este necesar s fie compilat
adic s fie transformat n instruciuni main, instruciuni care sunt interpretate de
ctre calculator. Programul surs se tiprete ntr-o fereastr special denumit
fereastra de program i care poate fi apelat prin comanda MODIFY COMMAND
nume_program din fereastra de comand, sau din meniul principal opiunea File,
subopiunea New i opiunea Program din lista care apare n fereastra de dialog
New. n general la nceputul unui program se inializeaz variabilele globale,
constantele i variabilele care vor fi folosite n program, far ca acest lucru s fie

64
Capitolul 3
obligatoriu, alocarea tipului variabilei se realizeaz dinamic prin program. Alocarea
dinamic nseamn c tipul este atribuit pe parcursul executrii programului n
momentul crerii variabilei, putnd fi schimbat ori de cte ori dorete programatorul.
ntr-un program surs Visual Fox, se pot face diverse comentarii. Acestea fac
referiri la diverse puncte ale programului pentru ca acesta s fie mai uor de neles.
Comentariile se introduc pe un rnd nou, cu ajutorul caracterului *, tastat pe prima
poziie a unui rnd, sau cu ajutorul combinaiei de caractere &&, introduse pe un
rnd n locul n care se dorete s se fac un comentariu.
Exemplul 3.1
**************************************************
*Programul calculeaz aria i volumul unei sfere, functie de
*o anumit raz. Rezultatele se memoreaza in fisierul sfera.dbf
*cu structura formata din cimpurile aria, raza si sfera
**************************************************
close all
@ 1,1 say Raza = get raza default 0 picture 9999.99
read
aria= 4*pi()*raza*raza && Calculeaza aria sferei
volum=aria*raza/3 && Calculeaz volumul sferei
@2,1 say Aria
= get aria && Afiaz aria sferei
@3,1 say Volumul = get volum && Afiaz volumul sferei
return
Comentariile nu sunt interpretate de ctre compilator, ele sunt folosite doar
pentru explicitarea programelor surs.

3.1.2

Atributele unui obiect de date

Oricare obiect de date, cmp sau variabil de memorie, are urmtoarele


atribute:
identificator;
tip;
valoare;
lungime.
Un ir de caractere care definete un nume de variabil,constant, procedur
sau funcie se numete identificator, care rmine nemodificat pe durata rulrii unui
program.
n limbajul Visual Fox identificatorii respect urmtoarele reguli de baz i
anume:
pot s fie formai din oricte caractere, dar numai primele 10
caractere sunt luate n considerare;
trebuie s nceap cu un caracter alfabetic sau liniua de subliniere;

Variabile, constante, expresii, funcii specifice tipurilor de date


pot s cuprind caractere alfabetice, numerice sau liniua de
subliniere _.
Modul de scriere cu majuscule sau litere mici nu are importan. Compilatorul
interpreteaz la fel literele mari i literele mici. Limbajul Visual Fox nu are o list de
cuvinte rezervate, dar nu este indicat s folosii cuvinte cheie Visual Fox ca i
identificatori. Cuvintele cheie pot fi trunchiate pn la 4 caractere, compilatorul
Visual Fox lundu-le n considerare. Identificatorii sunt de dou tipuri:
definii de ctre utilizatori, n cadrul unui program;
standard, care sunt proprii mediului Visual Fox i care definesc funcii
standard, precum i variabile de sistem.
Variabilele de sistem, conin informaii globale referitoare la sistemul Visual
Fox. De obicei variabilele de sistem au pe prima poziie o liniu de subliniere _.
Variabilele de memorie admit un singur tip de date la un moment dat, cu toate c tipul
unui obiect de date se poate modifica pe parcursul unui program. n general
variabilele de memorie sunt locaii de memorie care au un nume (identificator) i
conin informaii de o anumit natur.
65

3.1.3

Constante, expresii, funcii

Constantele sunt denumite uneori reprezentri literale, deoarece valorile lor


sunt valori concrete, ele nu fac referire la alte valori ca i variabilele sau cmpurile
din fiierele de date. Constantele sunt de urmtoarele tipuri:
Caracter;
Logic;
Dat calendaristic;
Numeric
Constantele caracter, care se mai numesc i iruri pot fi formate din maximum
64K de caractere, fiind definite prin intermediul ghilimelelor. Ghilimelele pot fi
formate din caracterele: , , [, ]. De exemplu irul Universitate poate fi scris:
Universitate
Universitate
[Universitate]
Constantele caracter conin n general orice caracter permis de ctre sistem.
Caracterele sunt reprezentate n codul ASCII. Pentru a introduce caractere speciale
care nu se tipresc ntr-un ir se recomand folosirea funciei CHR() care returneaz
caracterul al crui cod ASCII a fost introdus ntre paranteze. De exemplu caracterele
de ntoarecere a carului (carriage return) i de salt la linie nou (line feed) se obin cu
ajutorul funciei CHR() astfel:
CHR(13) - carriage return;
CHR(10) - line feed.
Constantele logice sau constantele booleene pot conine doar dou valori:
TRUE (adevrat) i FALSE (fals). Visual Fox permite utilizarea caracterelor YES

66
Capitolul 3
pentru TRUE i NO pentru FALSE. Datorit acestui fapt, mulimea constantelor
logice este .T., .F., .Y., .N.. n cazul constantelor logice nu se face diferen ntre
litere mari i litere mici, adic .T. este identic cu .t..
Constantele dat calendaristic se folosesc pentru a memora informaii de tip
zi, lun, an. Ele sunt definite folosind acoladele astfel:
identificator_constant = {<cifre1> <delimitator> <cifre2> <delimitator> <cifre3>}
Forma de prezentare a datei adic a grupului de cifre <cifre1>, <cifre2>, <cifre3>
este n funcie de modul n care se utilizeaz comanda:
SET DATE [TO] AMERICAN | ANSI | BRITISH | FRENCH | GERMAN |
ITALIAN | JAPAN | USA | MDY | DMY | YMD.
Dac se consider cifre1=luna=ll, cifre2=ziua=zz, cifre3=anul=aa, atunci n tabelul
3.1 sunt sintetizate aciunile comenzii SET DATE.
Tabelul 3.1
Tipul datei
Formatul
AMERICAN
ll/zz/aa
ANSI
aa.ll.zz
BRITISH
zz/ll/aa
FRENCH
zz/ll/aa
GERMAN
zz.ll.a
ITALIAN
zz-ll-aa
JAPAN
aa/ll/zz
USA
ll-zz-aa
MDY
ll/zz/aa
DMY
zz/ll/aa
YMD
aa/ll/zz
Formatul implicit este formatul AMERICAN.
Constantele numerice sunt ntodeauna de tipul N, niciodat F. reprezentarea
intern depinde de valorile acestor constante. Constantele numerice pot apare i n
reprezentarea tiinific:
Valelect = 1.6E-12;
Nravog = 2.24E+1
Variabilele i constantele reprezint obiectele de baz manipulate ntr-un program.
Expresiile sunt construcii care combin ntre ele variabilele i constantele
pentru obinerea unor valori noi, prin aplicarea operatorilor. Expresiile constau din
urmtoarele:
Operanzi simpli (constante, variabile sau funcii);
Operanzi combinai cu operatori i cu ali operanzi.
Funciile sunt formate din urmtoarele elemente:
Un nume, care poate fi propriu sistemului Visual Fox sau poate fi
definit de utilizator;
Zero unul sau mai muli parametrii cuprini ntre dou paranteze
( i ).

Variabile, constante, expresii, funcii specifice tipurilor de date


Operanzii sunt constante, variabile, funcii. Operandul are mai multe atribute,
fiecare operand avnd un anumit tip de date. Constantele, expresiile i funciile sunt
efemere, spre deosebire de variabile. Valorile lor exist n memorie doar pentru o
scurt perioad de timp (pn la evaluarea expresiei urmtoare), iar atributele lor de
lungime nu sunt fixe, spre deosebire de cmpurile fiierelor de date DBF, dar toi
operanzii au un singur tip de dat.
O expresie este format din mai muli operanzi legai de operatori. Funcie de
tipul operanzilor care exist ntr-o expresie sunt permii anumii operatori. De
exemplu operatorul + poate avea semnificaia de adunare pentru varibilele
numerice i de concatenare a irurilor pentru variabile ir de caractere.
Operatorii caracter sunt operatorii + i - care concateneaz dou sau mai
multe iruri de caractere. Efectul celor doi operatori este asemntor, deosebirea
dintre ei const n faptul c operatorul - mut toate spaiile libere de la sfritul
operanzilor la sfritul rezultatului.
Exemplul 3.2
Se consider urmtoarele comenzi tastate n fereastra de comand Command:
67

A=Universitatea
B=Lucian Blaga
C=din Sibiu
?A+B
A
Universitatea Lucian Blaga
?A+B+C &&Vizualizare rezultat concatenare variabile folosind operatorul +
B
Universitatea Lucian Blaga din Sibiu
?A-B
C
UniversitateaLucian Blaga
?A-B-C &&Vizualizare rezultat concatenare variabile folosind operatorul -
D
UniversitateaLucian Blagadin Sibiu
Explicaii
A) Concatenarea irurilor A i B folosind operatorul +;
B) Vizualizare i comentariu aferent operaiei de concatenare a trei iruri folosind
operatorul +;
C) Concatenarea irurilor A i B folosind operatorul de concatenare -;
D) Vizualizare i comentariu aferent operaiei de concatenare a trei iruri folosind
operatorul -;
Operatorii dat calendaristic, sunt identici cu operatorii pentru irurile de
caractere; exist doar patru metode permise de combinare a operanzilor i a acestor
operatori:
<data> + <numr> rezultatul este de tip dat calendarisic;
<numr> + <data> rezultatul este de tip dat calendarisic;
<data> - <numr> rezultatul este de tip dat calendarisic;
<data> - <data> rezultatul este de tip numeric;

68

Capitolul 3
Operatorii relaionali sunt folosii n diverse expresii logice i sunt prezentai
n tabelul 3.2.
Tabelul 3.2

Descriere
Operatorul
Egal
=
Egalitatea exact(identitate); numai pentru tipul caracter.
==
Mai mare dect
>
Mai mic dect
<
Mai mare sau egal cu
>= sau =>
Mai mic sau egal cu
<= sau =<
Diferit de
<>
Diferit de (identic cu <>)
#
Diferit de (identic cu <>)
!=
Este cuprin n (numai pentru tipurile caracter i memo)
$
Aceti operatori se aplic doar la operanzi de acelai tip. Operatorii relaionali se pot
aplica doar operanzilor iruri de caractere, dat calendaristic i numerici. Operanzii
dat calendaristic nu pot fi comparai cu operanzii numerici cu toate c i operanzii
dat calendaristic sunt reprezentai intern sub forma unor numere. Operatorul ==
este folosit pentru a determina dac dou iruri sunt identice, adic au aceeai
lungime i aceleai caractere. Operatorul = compar dou iruri de caractere i le
consider egale dac fiecare caracter din irul din dreapta este egal cu fiecare caracter
din irul din stnga. Pot apare cazurile:
A=alfa
B=alfabet
? A=B
.F.
? B=A
.T.
Comparaia se face pe lungimea irului mai scurt. Pentru a nltura acest lucru
cnd se folosete operatorul relaional =, este necesar folosirea comenzii SET
EXACT ON, n acest caz caracterele trebuie s corespund poziie cu poziie, n timp
ce poziiile libere de la sfritul fiecrui ir sunt ignorate.
Operatorul $ se aplic doar irurilor de caractere i returneaz rezultatul .T.
dac irul din stnga este coninut n irul din dreapta.
Exemplul 3.3
A
B

A= Universitatea Lucian Blaga


? Lucian $ A
.T.
?universitatea $ A
.F.

69
Variabile, constante, expresii, funcii specifice tipurilor de date
Explicaii
A) Se caut irul Lucian n irul A, irul este gsit rezultatul este adevrat;
B) Ultima comparaie este fals deoarece la compararea irurilor de caractere se ine
cont de tipul literelor mari sau mici.
Operatorii logici care se folosesc n limbajul Visual Fox sunt AND, OR i
NOT. Operatorii relaionali i operatorii logici AND i OR sunt operatori binari
pentru c sunt folosii ntre doi operanzi. Operatorul NOT este un operator unar
deoarece are nevoie de un singur operand.
Tabelul de adevr al operatorului AND este urmtorul:
AND .T. .F.
.T.
.T. .F.
.F.
.F. .F.
Tabelul de adevr al operatorului OR este urmtorul:
OR
.T.
.F.

.T.
.T.
.T.

.F.
.T.
.F.

Tabelul de adevr al operatorului NOT este urmtorul:


NOT
.T.
.F.
.F.
.T.
Pentru operatorul NOT se poate folosi un sinonim i anume caracterul !. De
exemplu !A este echivalent cu .NOT. A
Operatorii numerici sau operatorii aritmetici ai limbajului Visual Fox sunt
prezentai n tabelul 3.3.
Tabelul 3.3
Operatorul
Descrierea
Generaz negativul unui numr
- unar
Pozitivul unui numr
+ unar
Adunare
+
Scdere
nmulire
*
mprire
/
Ridicare la putere
** sau ^
Modulo ntoarce restul care rezult la
%
mprirea a dou expresii numerice
Exemplul 3.4
set talk off

70

Capitolul 3
n tabelul 3.4 sunt prezentate regulile de preceden ale operatorilor:
A=134
?-A
-134
?+A
-134
B=200
?A+B
66
?43.3 % 22
1.3
Tabelul 3.4
Nivelul de
preceden
1
2
3
4
5
6
7
8
9
Cel mai sczut

3.1.4

Operatorul
Parantezele
Operatorii de semn + i Ridicarea la putere
Modulo
nmulirea i mprirea
Adunarea scderea i concatenarea irurilor
Operatorii relaionali
Operatorul .NOT.
Operatorii logici binare .AND. i .OR.

Operaii cu variabile de memorie

Operaia de creare a unei variabile de memorie se poate face cu instruciunea :


STORE <expresie> To <list de identificatori>
Expresia poate fi de un anumit tip permis de ctre limbaj, iar lista de
identificatori, poate cuprinde unul sau mai multe nume de variabile, desprite prin
virgul. A doua metod de creare a unei variabile const din folosirea semnului de
atribuire ntre identificator i expresie:
[<identificator>] = <expresie>
Exemplul 3.5
STORE 5 to Alfa, Beta
STORE Universitate to Var
Var=Universitate
Alfa=5
Beta=5

Variabile, constante, expresii, funcii specifice tipurilor de date


Membrul <identificator> din cadrul operaiei de atribuire este opional. Exist
cazuri n care se dorete apelarea unei funcii i nu intereseaz salvarea valorii
ntoars de ctre aceasta.
Mai exist i alte comenzi Visual Fox care creaz variabile de memorie:
ACCEPT i INPUT permit introducerea valorilor unor variabile de la
tastatur;
PUBLIC i PRIVATE declar tipul variabilelor permise ntr-un
program;
DECLARE i DIMENSION definesc variabile de tip matrice;
PARAMETERS definete variabilele dintr-o procedur;
SUM, AVERAGE, COUNT, TOTAL definesc o anumit variabil ca
rezultat al unor operaii matematice.
tergerea variabilelor din memorie se realizea cu comanda:
RELEASE ALL [LIKE|EXCEPT <nume generic>]| <list identificatori>
Aceast comand asigur nlturarea fie a unor anumite variabile sau a tuturor
variabilelor din memorie. Clauza ALL elimin toate variabilele de memorie, iar
clauzele LIKE i EXCEPT determin anumite variabile de memorie care vor fi
eliminate.
Nume generic este un nume de identificator care poate conine caracterele de
nlocuire:
? corespunde unui singur caracter;
* corespunde oricrei secvene de caractere.
Astfel de exempl A? corspunde identificatorilor formai din dou caractere, la care
primul caracter este litera A, iar A*, corespunde tuturor irurilor de caractere care
au prima liter litera A. Variabilele de memorie pot fi nlturate din memorie i cu
comenzile CLEAR MEMORY i CLOSE ALL.
Vizualizarea variabilelor de memorie este realizat cu comenzile:
DISPLAY MEMORY;
LIST MEMORY.
Vizualizarea coninutului unei variabile se poate face folosind comenzile de
intrare/ieire @..SAY,GET, precum i comenzile speciale de editare ?,\ sau\\
n continuare se vor prezenta variabilele, constantele i funciile specifice
diferitelor tipuri de date ale limbajului de programare Visual Fox.

71

3.2 Tipuri de date n limbajul Visual Fox


Tipurile de date admise de ctre limbajul Visual Fox sunt urmtoarele:
caracter (character);
uniti monetare (currency);
dat calendaristic (Date, Date Time);
numeric (Numeric, Float, Double, Integer);
logic (Logical);

72

Capitolul 3

memo;
general;
variant.
Se observ c variabilele de memorie au aceleai tipuri de date ca i cmpurile
din fiierele de date DBF.

3.2.1

Tipul ir de caractere

Un ir de caractere reprezint o mulime ordonat de caractere , n care fiecare


termen al mulimii are o poziie bine determinat , putndiu-se asocia un numr care
reprezint poziia caracterului n cadrul irului. Numrul caracterelor dintr-un ir
reprezint lungimea irului. O poriune dintr-un ir se numete subir. O constant ir
de caractere denumit i ir de caractere, se reprezint prin mulimea caracterelor care
o compun ncadrate ntre apostroafe simple ' ' sau apostroafe duble " ". De asemenea
o constant de tip ir de caractere poate fi delimitat de caracterele [ i ]. Nu sunt
permise folosirea apostroafelor de tipuri diferite pentru acelai ir de caractere. De
exemplu:
'studenti ' "studeni" corect
'studeni" "studeni' incorect
Dac se dorete nscrierea unui apostrof ntr-un ir de caractere atunci irul de
caractere va fi delimitat de apostroafe de cellalt tip: "10' (minute)". irul nul se
specific prin dou apostroafe alturate "" sau". Caracterele desemnate prin 0 binar i
26(Ctrl+Z) nu trebuie utilizare, deoarece n anumite cazuri pot s determine pierderea
datelor. Constantele caracter pot fi formate, ca i variabilele de tip caracter din pn
la 64K de caractere admise de sistemul Visual Fox.
Operanzii care intr n componena irurilor de caractr sunt :
cmpuri a unor fiiere de date de tip caracter sau ir de caractere;
funcii ce returneaz iruri de caractere;
variabile de tip iruri de caracterere;
constante de tip ir de caractere.
Operatori care se aplic asupra irurilor de caractere sunt:
de concatenare simplu + sau special -;
de comparare sau relaionali
Operatorul simplu de concatenare face ca din dou iruri de caractere s se obin un
al treilea prin alipirea celui de al doilea ir la coada primului ir. De exemplu:
'UNIVERSITATEA '+'LUCIAN BLAGA' 'UNIVERSITATEA LUCIAN BLAGA
Operatorul special '-' este asemntor cu cel simplu cu deosebirea c spaiile de la
sfritul primului ir sunt trecute la sfritul irului al doilea.
'FAC '-' DE ING' 'FAC DE ING '
Evaluarea irurilor de caractere se realizeaz cu ajutorul operatorilor
relaionali. Dac este ndeplinit condiia logic atunci rezultatul returnat este
adevrat, n caz contrar rezultatul este fals.

Variabile, constante, expresii, funcii specifice tipurilor de date


n cazul operatorilor relaionali algoritmul de comparare a dou iruri de
caractere este urmtorul: se testeaz primele caractere din fiecare ir care se compar.
n funcie de codul ASCII pe care l au aceste dou caractere rezultatul comparrii
poate fi adevrat (.T.) sau fals (.F.). Dac codul ASCII a primului caracter din primul
ir este mai mic dect codul ASCII al primului caracter din al doilea ir i dac ntre
expC1 i expC2 se gsete operatorul relaional <, atunci rezultatul comparrii este
.T.. Dac ntre cele dou iruri se afl operatorul relaional > atunci rezultatul
comparrii este .F. Dac codurile ASCII ale acestor prime caractere din ir este
identic atunci se trece la compararea celorlalte caractere din iruri. Dac lungimile
celor dou iruri difer atunci irul de lungime mai mic este completat cu caracterul
al crui cod ASCII este egal cu 0 pn la egalitatea lungimii celor dou iruri. Aa
cum s-a amintit la paragraful precedent compararea irurilor de caractere cu operatoru
= este controlat de ctre comanda SET EXACT ON|OFF.

73

3.2.1.1 Funcii referitoare la codificarea caracterelor din


iruri
Funciile referitoare la codul ascii a caracterelor sunt prezentate n tabelul 3.6.
Tabelul 3.6
Funcie
Semnificaie
Exemplu program
returneaz ? CHR (65)
CHR(<expN>) funcia
caracterul
ASCII A rezultatul funciei
corespunztor
codului ? CHR (49)
numeric
(<expN>) 1 rezultatul funciei
transmis
ASC(<expC>) funcia returneaz codul ?ASC('A')
ASCII al caracterului 65 rezultatul funciei
dorit (<expC>)
? ASC( ' AMIC')
65 rezultatul arat c n cazul n care
irul conine mai multe caractere atunci
funcia returneaz codul numeric al
primului caracter

3.2.1.2 Funcii referitoare la subirurile de caractere


Limbajul Visual Fox are implementate mai multe funcii care facilitez lucrul
cu prile componente ale unui ir de numite subiruri. n tabelul 3.7 sunt prezentate
principale funcii care acioneaz asupra subirurilor de caractere precum i o serie de
exemple program de folosire a funciilor. Vizualizarea coninutului unei variabile sau
al rezultatului unei funcii se poate face cu ajutorul caracterului ?, folosit n
fereastra de comand.

74
Funcie

Semnificaie

SUBSTR(<expC>,
<expN1>,
[<expN2>])

Extrage un subir de caractere dintrun ir dat.


<expN1 > reprezint poziia de unde
ncepe subirul de extras
<expN2 > este opional i reprezint
numrul de caractere care se extrag.
Dac lipsete atunci ubirul se
consider de la poziia expN1 pn la
sfrit.
Extrage din irul <expC>, un subir
de caractere ncepnd de la poziia
<expN>, poziionat la stnga.
Extrage din irul <expC>, un subir
de caractere ncepnd de la poziia
<expN>, poziionat la dreapta.
Returneaz un ir de caractere
obinut prin repetarea irului <expC>
de <expN> ori.
Returneaz un numr de spaii egal
cu <expN>

LEFT(<expC>,
<expN>)
RIGHT(<expC>,
expN>)
REPLICATE(<ex
pC>,
<expN>)
SPACE(<expN>

ALLTRIM
(<expC>)
LTRIM (<expC>)
RTRIM (<expC>)

Capitolul 3
Tabelul 3.7
Exemplu program
?SUBSTR ('FACULTATE', 1,3)
FAC rezultatul funciei
? SUBSTR (' UNIV LUCIAN
BLAGA' ,7)
LUCIAN BLAGA rezultatul funciei

?LEFT (Programare,4)
Prog rezultatul funciei
?RIGHT(Programare,4)
mare rezultatul funciei
? REPLICATE (' FAC,3)
FACFACFAC rezultatul funciei

?REPLICATE
(
,10)
==
SPACE(10)
.T. cele dou funcii n aceast form
sunt identice
Elimin spaiile de la nceputul i ?ALLTRIM (' SIBIU ')
sfritul irului de caractere <expC> SIBIU rezultatul funciei
Elimin spaiile de la nceputul ? Anul I + LTRIM ('
IE ')
irului
Anul I IE rezultatul funciei
Elimin blancurile de la sfritul ?RTRIM (' SIBIU
')+EST
irului de caractere
SIBIUEST rezultatul funciei

PADC (<expR>, Adaug la stnga i la dreapta


expresiei <expR>, care poate fi o
<expN>, [expC])
variabil de tip ir de caractere,
numeric sau dat calanderistic, irul
de caractere expC sau n lipsa
acestuia blank, pn se obine un ir
de lungime <expN>
Adaug
la stnga expresiei <expR>,
PADL(<expR>,
<expN>, [<expC>] care poate fi o variabil de tip ir de
caractere,
numeric
sau
dat
calanderistic, irul de caractere
expC sau n lipsa acestuia blank,
pn se obine un ir de lungime
<expN>
Adaug la dreapta expresiei <expR>,
PADR(<expR>,
<expN>, [<expC>] care poate fi o variabil de tip ir de
caractere,
numeric
sau
dat
calanderistic, irul de caractere

?PADC (' ING1', 10,'-')


---ING1--- (n total 10 caractere)

?PADL(Anul I,15,*)
*********Anul I (n
caractere)

total

15

?PADR(Anul I,15,*)
Anul I********* (n
caractere)

total

15

75

Variabile, constante, expresii, funcii specifice tipurilor de date

expC sau n lipsa acestuia blank,


pn se obine un ir de lungime
<expN>
nlocuiete un subir al unui ir dat,
STRTRAN
cu un alt ir de caractere.
(<expC1>,
<expC2>,[<expC3> expC1-irul de baz n care se fac
],[<expN1>],[<exp nlocuirile
expC2-subir al irului de baz, care
N2>])
va fi nlocuit cu irul <exp C3>. Dac
irul <exp C3> lipsete se consider
irul nul, obinndu-se astfel efectul
de tergere a unui subir dintr-un ir
dat.
expN1 arat la a cta apariie n irul
expC1 a lui expC2 se face nlocuirea
expN2 -arat numrul de nlocuiri
care se fac.Dac lipsete se
nlocuiesc toate subirurile gsite
pn la sfrit.
STUFF(<expC1>, nlocuiete ntr-un ir de caractere
<expC1>, un subir <expC2>, al
<expN1>,
acestuia, de la poziia<expN1>, un
<expN2>,
numr de <expN2> caractere din
<expC2>)
irul de baz.
CHRTRAN(<exp Transform caracterele din <expC1>,
folosind irurile din <expC2> i
C1>, <expC2>,
<expC3 ca tabel de transformare.
<expC3>)
Caracterele din <expC1> care se
potrivesc cu cte un caracter din
<expC2> sunt nlocuite cu caracterele
corespunztoare din <expC3>

?STRTRAN ('BLABLABLA', 'BLA',


BOOM', 2, 1)
BLABOOMBLA rezultatul funciei
?STRTRANAAABBBCCCC,B, ,
2,2)
AAAB CCCC rezultatul funciei

?STUFF(aaaaaaaaa,3,0,bb)
aabbaaaaaaa
rezultatul funciei
?STUFF(aaaaaaaaa,3,6,bb)
aabba
rezultatul funciei
?CHRTRAN ('bomba','ba,'pe')
pompe
rezultatul funciei
?CHRTRAN ('CAPAT', 'CT', ' ')
APA
rezultatul funciei
?CHRTRAN ('COMPUSE', 'MPSE',
'NFZ')
CONFUZ
rezultatul funciei

3.2.1.3 Funcii care returneaz informaii despre ir


De multe ori n programe este necesar s se cunoasc informaii despre irurile
de caractere cu care se lucreaz. Funciile care returneaz informaii despre iruri n
limbajul Visual Fox sunt prezentate n tabelul 3.8.
Tabelul 3.8
Funcia
Semnificaie
Exemplu program
LEN(<expC>)
ISALFA(<expC>)
ISDIGIT(<expC>)
ISLOWER(<expC>
)
ISUPPER(<expC>)

Returneaz lungimea unui ir de caractere


<expC>
Returneaz adevrat dac irul de caractere
<expC> ncepe cu un caracter alfabetic
Returneaz adevrat dac irul de caractere
<expC> ncepe cu o cifr
Returneaz adevrat dac irul de caractere
<expC> ncepe cu o liter mic
Returneaz adevrat dac irul de caractere

?LEN(aaaaaaaaa)
9
rezultatul funciei
?ISALFA(Sibiu)
.T.
rezultatul funciei
?ISDIGIT(1234567)
.T.
rezultatul funciei
?ISLOWER(alfabet)
.T.
rezultatul funciei
?ISUPPER(Alfa)

76
AT(<expC1>,
<expC2>,
[<expN])

ATC(<expC1>,
<expC2>,
[<expN])

RAT(<expC1>,
<expC2>,
[<expN])

OCCURS(<expC1>,
<expC2>)

Capitolul 3
<expC> ncepe cu o majuscul
Caut de la nceputul irului <expC2>
subirul <expC1> i returneaz poziia
subirului n cadrul irului. Funcia AT()
este sensibil la tipul caracterelor, litere
mici sau majuscule. <expN> este opional
i specific de cte ori apare subirul n
irul cutat.
Caut de la nceputul irului <expC2>
subirul <expC1> i returneaz poziia
subirului n cadrul irului. Funcia ATC()
este insensibil la tipul caracterelor, litere
mici sau majuscule. <expN> este opional
i specific de cte ori apare subirul n
irul cutat.
Caut de la sfritul irului <expC2> spre
nceputul irului, subirul <expC1> i
returneaz poziia subirului n cadrul
irului. Funcia RAT() este sensibil la
tipul caracterelor, litere mici sau
majuscule. <expN> este opional i
specific de cte ori apare subirul n irul
cutat.
Caut irul <expC1> n irul <expC2>,
returnnd numrul de apariii al irului.

.T.
rezultatul funciei
?AT(SIBIU,
Universitatea
Lucian
Blaga din SIBIU)
34
rezultatul funciei

?AT(sibiu,
Universitatea
Lucian
Blaga din SIBIU)
34
rezultatul funciei

?RAT(SIBIU,Universit
ateaLucian Blaga din
SIBIU)
34
rezultatul funciei

?OCCURS(a,abracadab
ra)
5
rezultatul funciei

Un ir de caractere se poate ntinde pe mai multe linii, trecerea la linie nou


fiind realizat de prezena n ir a combinaiei de caractere CHR(13)CHR(10)

3.2.1.4 Funcii care transform irurile de caractere


Diferenierea ntre caracterele alfabetice mici i mari a dus la necesitatea
transformri caracterelor mici n caractere mari i invers. Funciile care realizeaz
acest lucru sunt prezentate n tabelul 3.9
Tabelul 3.9
Funcie
Semnificaie
Exemplu program
LOWER(<expC>)
UPPER(<expC>)

PROPER(<expC>)

Transform toate majusculele n


litere mici, restul caracterelor
rmnnd neschimbate
Transform toate caracterele mici n
majusculele corespunztoare, restul
caracterelor din ir rmnnd
neschimbate.
Transform primul caracter dintr-un
ir n majuscul dac este alfabetic,
restul fiind caractere mici

?LOWER(AAAbbCCC)
aaabbccc
?UPPER(universitate
UNIVERSITATE
?PROPER(universitate)
Universitate

77

Variabile, constante, expresii, funcii specifice tipurilor de date

3.2.1.5 Funcii speciale pentru irurile de caractere


Tabelul 3.10 prezint aceste funcii care se refer la irurile de caractere i care
au un caracter mai special.
Tabelul 3.10
Funcia
Semnificaia
Exemplu program
LIKE(<nume
generic>, <expC>
CHRSAW([expN])

SOUNDEX(<expC>)

Compar irul de caractere


<expC>, cu numele generic i
ntoarce .T. dac exist potrivire.
ntoarce rezultatul adevrat(.T.) n
cazul n care un caracter este
prezent n bufferul de tastatur.
Expresia
numeric
reprezint
timpul de rspuns, n secunde.
Returneaz
o
reprezentare
fonetic(cod Soundex) a unui ir
de caractere

?LIKE(calc*,calculator)
.T.
?CHRSAW()
.F.

?SOUNDEX(FFFF)
F000

3.2.2 Tipul dat calendaristic


Expresiile de tip dat calanderistic pot conine :
cmpuri de acest tip ale unui fiier de date;
funcii ce returneaz valori tip dat calanderistic;
variabile tip dat calanderistic;
constante de tip dat calendaristic.
Ordinea de specificare azilei, lunii i anului, modul de scriere al anului (cu
dou sau patru cifre) ct i separatorul dintre cele trei omponente ale datei sunt
determinate de comenzi i funcii specifice limbajului Visual Fox.
Memorarea datei calendaristice ntr-o variabil de memorie se face cu comanda
STORE {11/18/95}TO DATA_C
Principalele funcii care se folosesc pentru datele calendaristice sunt prezentate
n tabelul 3.11
Tabelul 3.11
Funcia
Semnificaia
Exemplu program
DATE ()

Returneaz
sistemului

SET MARK TO
<expC>

Determin
schimbarea SET MARK TO -
delimitatorului pentru grupul de
caractere zz/ll/aa. ExpC trebuie s
reprezinte un singur caracter
Returneaz numrul zilei din ?DOW ({10-22-95})
sptmna. De exemplu la ziua de 1
duminic i corespunde cifra 1.

DOW (<expD>)

data

curent

a ?DATE ( )
12/07/97

78

Capitolul 3

CDOW (<expD>)
MONTH
(<expD>)
CMONTH
(<expD>)
DAY (<expD>)
YEAR <expD>)
GOMONTH
(<expD>,
<expN>)

DMY(<expD>)
DTOC <expD>)
DTOS(<expD>
SECONDS()
TIME()
CTOD(<expC>)

3.2.3

Returneaz numele zilei din ?CDOW ({10-22-95})


sptmn n limba englez
Sunday
Returneaz numrul lunii din an.
?MONTH ({10-22-95})
10
Returneaz
denumirea
lunii ?CMONTH ({10-22-95})
calendaristice din an n limba october
englez.
Returneaz valoarea numeric a ?DAY({12/08/97})
zilei n cadrul lunii.
8
Extrage anul dintr-o constant de ?YEAR (date())
tip dat calendaristic
1997
ntoarce data calendaristic care ?GOMONTH(DATE(), 3)
este cu <expN> luni nainte sau 03/08/98 - data cu 3 luni nainte de la
dup o anumit dat <expD>.
data curent
?GOMONTH {11/18/95},5)
04/18/96
?GOMONTH(DATE(),- 15) - data
cu 15 luni n urm, de la data curent
Transform data n forma zi Luna ?DMY({12/08/97})
anul.
08 December 97
Transform data calanderistic ? DTOC (DATE())
ntr-un ir de caractere.
11/18/1995 - ir de caractere
Transform data ntr-un ir de ?DTOS({10/04/97})
caractere n forma SSAALLZZ 19971004
(secol, an, lun, zi)
Returneaz numrul de secunde ?SECONDS()
trecute de la miezul nopii.
33567.750
Returneaz timpul curent n forma ?TIME()
hh:mm:ss
09:24:34
Convertete un ir de caractere ?CTOD(01/01/98)
ntr-o dat calendaristic.
01/01/98

Tipul memo

Tipul de dat memo este specific fiierelor de date, n cazul n care se dorete
memorarea unui numr mare de caractere. Cmpurile memo sunt cmpuri care permit
memorarea unui volum variabil de informaie sau variabile de memorie care preiau
valoarea cmpurilor memo din fiierele de date. Un fiier de date care are cel puin un
cmp memo are asociat un fiier suplimentar n care sunt depuse informaiile
coninute n acest cmp. ntre fiecare nregistrare a unui cmp memo (n cazul nostru
cmpul Adresa) i nregistrrile fiierului asociat, fiier care are acelai nume ca i
fiierul de date dar are extensia FPT, se stabilete o relaie univoc (Fig. 3.1). n
cmpul memo din fiierul de date, se pstreaz date referitoare la adresa
corespunztoare din fiierul FPT. Acest mecanism este invizibil pentru utilizator.
Accesul la un cmp memo se face astfel:

79

Variabile, constante, expresii, funcii specifice tipurilor de date


se selecteaz nregistrarea dorit din fiierul de date;
implicit i independent de utilizator se face legtura cu fiierul a
crei extensie este FPT, adic cu fiierul memo;
se citete din cmpul fiierul memo de la poziia determinat anterior,
informaia corespunztoare cmpului memo.

Fiierul de date
Adresa

Fiierul memo
asociat
Adresa 1
Adresa 4
Adresa 2
Adresa 3

Fig 3.1 Legtura dintre fiierul de date i fiierul memo ataat (FPT)

Editarea coninutului unui cmp memo se poate face din fereastra de editare a
unei comenzi pentru modificarea coninutului unui fiier de date (Browse, Change,
Edit, Append, etc). n acest caz ne poziionm pe cmpul memo dorit i-l deschidem
prin tastarea combinaiei de taste C+d sau dublu click de la mouse. Se
introduce coninutul cmpului n fereastra de editare care apare. Dup terminare se
apas combinaia de taste C+W dac se dorete salvarea coninutului introdus, sau
tasta E, dac nu se dorete salvarea coninutului introdus.
Considerm spre exemplu fiierul de date Discipline.dbf n care avem un cmp
memo corespunztor bibliografiei unei discipline. Comanda Browse din figura 3.2
prezint cmpurile fiierului de date, Discipline.dbf. Dac se dorete modificarea
coninutului cmpului memo Bibliografie, se poziioneaz spotul pe respectivul cmp
i se acioneaz combinaia de taste C+d. Ca rezultat va apare fereastra de
editare a cmpului, fig 3.2.

Fig. 3 2 Editarea cmpului Memo

Dac se dorete direct modificarea unui cmp memo atunci se poate executa
comanda:

80

Capitolul 3
MODIFY MEMO <cmp memo 1 >[, <cmp memo 2>]
[NOEDIT]
[NOWAIT]
[RANGE <expN1>,expN2>]
[WINDOW] <nume fereastr1>
[IN [WINDOW]<nume fereastr2> | SCREEN]]
[SAVE].
Opiunile comenzii sunt prezentate n tabelul 3.11.
Tabelul 3.11
Opiune
Semnificaie

<cmp memo 1>, Reprezint cmpurile memo pentru care se vor deschide ferestrele de editare
<cmp memo 2>
Nu permite modificarea cmpului memo.
NOEDIT
Se folosete numai n interiorul unui program, acesta continundu-i execuia
NOWAIT
dup deschiderea ferestrei de editare fr a mai atepta ca utilizatorul s
modifice cmpul memo respectiv.
RANGE <expN1>, Se folosete pentru a edita doar poriuni dintr-un cmp memo, ncepnd de la
caracterul <expN1> pn la caracterul <expN2>
<expN2>
Specific faptul c fereastra de editare se deschide n ecranul Visual Fox.
IN SCREEN
WINDOW i IN Definesc faptul c fereastra de editare va fi deschis ntr-o fereastr definit
de utilizator.
WINDOW
Se folosete din interiorul unui program, pentru a pstra fereastra pe ecran i
SAVE
dup ce se iese din editare.

Exemplul 3.6
Explicaii
A
B

USE DISCIPLINE
MODIFY MEMO bibliografia RANGE 1,20
MODIFY MEMO bibliografia NOEDIT

A) Modificarea cmpului memo bibliografia, al primei nregistrri, numai primele 20


de caractere;
B) Afiarea cmpului memo bibliografia al primei nregistrri fr modificarea sa.
ntr-un cmp memo poate fi ncrcat coninutul unui fiier. n acest caz se
folosete comanda:
APPEND MEMO <cmp memo> FROM <fiier> OWERWRITE
Semnificaia opiunilor comenzii este prezentat n tabelul 3.12.
Tabelul 3.12
Opiunea
Semnificaia
<cmp memo>
<fiier>
OVERWRITE

Numele cmpului n care se va scrie coninutul fiierului.


Numele fiierului al crui coninut este copiat n cmpul memo <cmp
memo>
Coninutul fiierului se scrie peste coninutul cmpului memo

Pentru a copia coninutul unui cmp memo ntr-un fiier se folosete comanda:
COPY MEMO <cmp memo> TO <fiier > [ADDITIVE]

Variabile, constante, expresii, funcii specifice tipurilor de date


Parametrii comenzii sunt prezentai n tabelul 3.13
Tabelul 3.13
Opiunea
Semnificaia
<cmp memo>
Numele cmpului care se va copia n fiier.
<fiier>
Numele fiierului n care va fi copiat cmpul. n cazul n care
extensia fiierului nu este specificat, Visual Fox va atribui
automat extensia .TXT
ADDITIVE
Coninutul cmpului se va scrie la sfritul fiierului.
Un cmp memo dintr-o anumit nregistrare se poate nlocui cu un alt cmp
memo..
Exemplul 3.7
S se scrie un program prin care s se schimbe coninutul cmpului memo
Capitol1 cu coninutul cmpului memo Capitol2 pentru aceeai nregistrare. Cele
dou cmpuri memo exist ntr-o tabel cu numele Carte
81

A
B
C
D

SET TALK OFF


SELECT 1
USE CARTE
Var=capitol1
SELECT 2
USE carte AGAIN
REPLACE capitol1 WITH b.capitol3
REPLACE capitol3 WITH var

A) Fiierul de date se deschide n zona 1 de lucru;


B) Variabil denumit Var devine variabil de memorie de tip memo. n versiunea
standard FOX ea poate ocupa maximum 64 K de memorie iar n versiunea extins
poate ocupa toat memoria disponibil .Ea este tratat ca un ir de caractere asupra
ei putndu-se aplica toate fiunciile specifice tipului de ir de caractere;
C) Fiierul de date Carte.dbf se deschide i n zona 2 de lucru;
D) Se schimb cmpurile ntre ele cu ajutorul variabilei Var.

3.2.3.1

Funciile tipului memo

Asupra cmpurilor sau variabilelor de tip memo se pot aplica mai multe funcii
care sunt prezentate n tabelul 3.14. Exemplu se refer la cmpurile memo ale
fiierului de date Carte.dbf (fig 6.1 i fig 6.2).
Tabelul 3.14
Funcia Memo
Semnificaia funciei
Exemplu program
SET
MEMOWIDTH
TO <expN>

Modific limea liniei de afiare a unui cmp Set memowidth to 80


memo. Limea prestabilit este 50, valoarea
minim fiind 8, iar valoarea maxim 254.
Valoarea lui <expN> poate depi 256, dar
limea de afiare a cmpului memo pe ecran

82
nu va depi aceast valoare.
Returneaz numrul de rnduri ale unui cmp
memo
Funcia extrage linia <expN1> dintr-un cmp
memo. Dac nu se dorete extragerea liniei n
totalitate atunci poate fi considerat cmpul
memo ca ncepnd de la al (<expN2>+1) lea
caracter
AT
(<expC>, Returneaz poziia unui ir de caractere ntr-un
<cmp
memo>, cmp memo. Dac <expN> este precizat
funcia returneaz poziia celei de a <expN>
[<expN>])
apariii a irului <expC> n cmpul memo
MEMLINES
(<cmp memo>
MLINE (<cmp
memo>,
<expN1>[,<expN2
>

Capitolul 3
?memlines(capitol1)
4
?mline(capitol1,1)
Capitolul 1
?mline(capitol1,1,10)
1

?at (1,capitol1)
11
?at(ca,capitol1,1)
1
?at(ca,capitol1,2)
22
ATC
(<expC>, Funcia este identic cu funcia AT,ignornd ?atc(CA,capitol1,3)
<cmp
memo> deosebirile dintre literele mari i mici
61
[,<expN>])
Returneaz numrul de linie al irului <expC> ?atcline(cAMp,capitol1)
ATCLINE
(<expC>, <cmp n cmpul memo <cmp memo>, ignornd 3
deosebirile dintre literele mari i mici
memo>
Returneaz numrul de linie al irului <expC> ?atcline(camp,capitol1)
ATLINE
(<expC>, <cmp n cmpul memo <cmp memo>.
3
memo>
LEFT
(<cmp Returneaz numrul de caractere specificat prin ?left(capitol1,11)
<expN>, din partea stng a cmpului memo
memo>, <expN>)
Capitolul 1
LEN
(<cmp Returneaz lungimea cmpului memo.
?len(capitol1)
memo>
93
LTRIM
(cmp Returneaz caracterele cmpului memo cu ?ltrim(capitol1)
spaiile libere de la nceput eliminate.
memo)
Capitolul 1
Aceasta carte va prezenta
modul de utilizare a
campurilor MEMO intr-un
fisier
8
RIGHT (<cmp Returneaz numrul de caractere specificate de ?right (capitol1,15)
la dreapta cmpului memo.
memo>, <expN>)
tr-un fisier
8
RTRIM (<cmp Returneaz cmpul memo cu spaiile de la ?rtrim(capitol1)
sfrit eliminate.
memo>
Capitolul 1
Aceasta carte va prezenta
i TRIM
modul de utilizare a
campurilor MEMO intr-un
fisier
8
SUBSTR (<cmp Extrage un subir dintr-un cmp memo, de la o ?substr(capitol1,12,10)
memo> ,<expN1>, anumit poziie, un anumit numr de caractere. Aceasta
[expN2])
?substr(capitol1,85)
fisier
8

Variabile, constante, expresii, funcii specifice tipurilor de date

83

3.2.4

Tipul numeric

Cu toate c este un limbaj orientat spre fiiere de date, i nu spre calcule


matematice ca de exemplu limbajele Pascal sau Fortran, tipul numeric este
implementat astfel nct s realizeze majoritatea operaiilor matematice ntlnite n
practic. De asemenea sunt prevzute o serie de funcii matematice care calculeaz
funciile matematice elementare cum ar fi exponeniala, logaritmul, funciile
trigonometrice, etc.
Operanzii numerici care intervin n expresii pot fi :
cmpuri numerice ale unui fiier de date;
funcii care returneaz valori numerice;
variabile de tip numeric;
constante numerice.
Numrul de cifre zecimale cu care este afiat implicit un numr este 2.
Numrul de zecimale care se afiaz poate fi modificat de ctre utilizator cu
comanda:
SET DECIMAL TO <expN>
<expN> reprezint numrul de zecimale care se afiaz. Aceast comand
controleaz doar aspectul extern al numrului nu i modul n care lucreaz intern
Visual Fox.
n limbajul Visual Fox sunt prevzute mai multe tipuri de date numerice:
numeric (N), Currency, Integer, double aa cum a fost prezentat n detaliu n capitolul
4. Documentaia Visual Fox sugereaz memorarea datelor cu specific comercial n
cmpuri de tip numeric (N) sau Currency i a celor tiinifice n cmpuri de tip
Double, Float (F), etc. Conversia din tipul numeric n tipul flotant se face cu funcia
FLOAT, iar din tipul flotant n tipul numeric prin funcia FIXED.

3.2.4.1 Funcii numerice i matematice


Principalele funcii metematice sunt prezentate n tabelul 3.13.
Funcia
ABS(<expN>)
SIGN(<expN>)

INT(<expN>)

Semnificaia

Tabelul 3.15
Exemplu
program

Returneaz o valoare numeric egal cu valoarea absolut ?ABS(-34)


a argumentului
34
Returneaz semnul argumentului
?SIGN(23)
+1
?SIGN(-23)
-1
?SIGN(0)
0
Returneaz partea ntreag a unui numr zecimal. Partea ?INT(1.234)
zecimal a unui numr se obine scznd din numr 1

84

Capitolul 3
partea ntreag

CEILING
(<expN>)

Returneaz cel mai mic ntreg mai mare sau egal cu


argumentul <expN>.

FLOOR
(<expN>)

Returneaz cel mai mare ntreg mai mic sau egal cu


argumentul <expN>

ROUND(<expN1
>, <expN2>)

Rotunjete primul argument <expN1> , funcie de al


doilea argument <expN2>, care definete numrul de
zecimale care se vor pstra n valoarea returnat.

EXP(<expN>

Returneaz funcia exponenial cu baza E

LOG(<expN>)

Returneaz logaritmul natural al argumentului

LOG10(<expN>) Returneaz logaritmul zecimal al argumentului


SQRT(<expN>)

Returneaz rdcina ptrat a argumentului

MAX(<expN1>,
expN2>)
MIN(<expN1>,
expN2>)
RAND
[(<expN>)]

Returneaz maximum dintre <expN1> i <expN2>

FIXED(<expN>)
FLOAT(<expN>
)

Returneaz minimum dintre <expN1> i <expN2>


Returneaz un numr pseudoaleator. Dac <expN>
lipsete, funcia ntoarce un numr pseudoaleator cuprins
ntre o i 1.0. Iniializarea de la ceasul sistemului se
realizeaz cu argumentul -1 (rand(-1))
Transform un numr din format IEEE numr binar lung
(tipul flotant F), ntr-un numr n format BCD (tipul
numeric N), returnnd acelai argument <expN>
Transform un numr din format BCD(binary coded
decimal) (tipul numeric N), ntr-un numr binar lung
corespunztor standardului IEEE (tipul flotant F),
returnnd acelai argument <expN>

3.2.4.2 Funcii trigonometrice

?INT(-43.678)
-45
?3.45-INT(3.45)
0.45
?CEILING(9.56)
10
?CEILING(-9.56)
-9
?FLOOR(6.78)
6
?FL00R(-9.45)
-10
?ROUND(9.567,3)
9.567
?ROUND(9.567,2)
9.57
?ROUND(9.567,0)
10
?EXP(3.4)
29.96
?LOG(3.6)
1.72
?LOG10(3.6)
0.75
?SQRT(34)
3.83
?MAX(43.67,78.9)
78.9
?MIN(4.56,2.45)
2.45
?RAND()
0.23
?RAND(-1)
0.10

Variabile, constante, expresii, funcii specifice tipurilor de date


Funciile trigonometrice ale limbajului Visual Fox sunt reprezentate n tabelul

85
3.16.

Funcia

Semnificaia

ACOS(<expN>)
ASIN(<expN>)
ATAN(<expN>)
ATN2(<expN1>,
<expN2>)

SIN(<expN>)
COS(<expN>)
TAN(<expN>)
PI()
DTOR(<expN>)
RTOD(<expN>)

3.2.5

Arccosinus. ExpN este cuprins ntre -1 i +1, iar


valoarea returnat de funcie este n radiani fiind
cuprins n intervalul 0 i PI
Arcsinus. ExpN este cuprins ntre -1 i +1, iar valoarea
returnat de funcie este n radiani, fiind cuprins n
intervalul -PI/2 i PI/2
Arctangent. ExpN poate lua orice valoare, valoarea
returnat de funcie este dat n radiani fiind cuprins n
intervalul -PI/2 i PI/2.
Funcia primete dou argumente numerice ca
argumente reprezentnd coordonatele punctului n plan
a crui arctangent se calculeaz (expN1 reprezint
abscisa iar <expN2> reprezint ordonata) i returneaz
unghiul
corespunztor
n
radiani.
Raportul
<expN1>/<expN2> trebuie s se gseasc n intervalul PI i PI
Sinus. Argumentul <expN> este dat n radiani

Tabelul 3.16
Exemplu
program
?ACOS(0.3)
1.27
?ASIN(0.3)
0.30
?ATAN(0.5)
0.46
?ATN2(5,4)
0.90

?SIN(PI()/4)
0.71
Cosinus. Argumentul <expN> este dat n radiani
?COS(PI()/4)
0.71
Tangent. Argumentul <expN> este dat n radiani
?TAN(PI()/4)
1
Returneaz valoarea lui (3.141592653589)
?ROUND(PI(),10)
3.1415926536
Transform gradele n radiani rezultatul fiind dat n ?DTOR(90)
radiani.
1.57
Transform radianii n grade
?RTOD(1.57)
89.95

Tipul logic

O expresie de tip logic este o combinaie de operatori i operanzi, realizat


dup anumite reguli sintactice, pentru a forma o construcie corect, a crei evaluare
va avea ca rezultat o valoare logic.
Operanzii ce intr n componena expresiilor logice sunt de urmtoarele tipuri:
cmpuri de tip logic a unui fiier de date;
funcii ce returneaz valori logice;
variabile de tip logic;
alte expresii de tip logic.
Operatorii logici n ordinea prioritilor sun prezentai n tabelul 3.17.

86

Capitolul 3
Tabelul 3.17
Operator
Semnificaie
grupeaz expresiile logice
()
negaia logic
!, NOT
i logic
AND
sau logic
OR
n general rezultatul unei expresii care conine operatori relaionali este de tip

logic.

3.2.6

Funcii pentru calcule financiare

n limbajul Visual Fox exist cteva funcii care rezolv relativ uor unele
probleme financiare. Presupunem urmtoarele probleme:
Exemplul 3.8
S se calculeze suma care trebuie restituit lunar ctre o banc considernd c
s-a efectuat un mprumut de 10,000,000 lei, dobnda lunar practicat de banc este
de 3,6% iar mprumutul a fost acordat pe un an. Pentru rezolvare se folosete funcia
financiar PAYMENT cu sintaxa:
PAYMENT(<expN1>,<expN2>,<expN3>)
unde expresiile <expN1..3> reprezint:
expN1 valoarea mprumutului (10,000,000);
expN2 rata dobnzii (0.036);
expN3 numrul de rate pentru achitarea mprumutului (12) .
Rezolvare:
?PAYMENT(10000000,0.036,12)
1040939.03
Exemplul 3.9
Presupunem c am deschis un cont ntr-o banc care iniial este gol. S se
calculeze suma existent n cont dup un an, dac depunem lunar 500000, dobnda
lunar practicat de banc este 3,3%. Pentru rezolvare se folosete funcia Visual Fox,
FV() (Future value) cu urmtoarea sintax:
FV(<expN1>,<expN2>,<expN3>)
unde expresiile <expN1..3> reprezint:
expN1 suma care se depune lunar (500,000);
expN2 rata lunar a dobnzi (0.033);
expN3 numrul de depuneri dup care se calculeaz suma din cont
(12) .
Rezolvare:
?FV(500000,0.033,12)

Variabile, constante, expresii, funcii specifice tipurilor de date


7218172.63
Exemplul 3.10

87

Presupunem c avem un cont ntr-o banc. Ce valoare trebuie s aib acest cont
pentru a putea scoate lunar 1,000,000 lei timp de 1 an astfel ca la sfritul intervalului
contul s fie nul. Dobnda practicat de banc este de 4% lunar. Pentru rezolvare se
folosete funcia Visual Fox, PV() (Present Value) cu urmtoarea sintax:
PV(<expN1>,<expN2>,<expN3>)
unde expresiile <expN1..3> reprezint:
expN1 suma care se scoate lunar din cont (1,000,000);
expN2 rata lunar a dobnzi (0.04);
expN3 numrul de luni n care se scot bani din contul respectiv(12) .
Rezolvare:
?PV(1000000,0.04,12)
9385073.76

3.2.7

Funcii referitoare la toate tipurile de date

n limbajul Visual Fox exist cteva funcii care se aplic global asupra
expresiilor fr a ine cont de tipul acesteia. Aceste funcii sunt prezentate n tabelul
3.18.
Tabelul 3.18
Funcia
Semnificaie
Exemplu program
TYPE(<expC>)

Testeaz tipul unei expresii. Rezultatul returnat de


funcie este de tip caracter cu urmtoarea
semnificaie:
C ir de caractere;
N numeric;
D dat calendaristic;
L logic;
M memo;
U nedefinit.

?TYPE(date())
D
?TYPE(1=5)
L
?TYPE(356)
N
?TYPE(universitate)
C
?TYPE(universitate)
U
Evalueaz rezultatul expresiei transmis ca ir de ?EVALUATE(6*3)
EVALUATE
caractere. Acesta poate fi: numeric,logic, dat 18
(<expC>)
calendaristic, ir de caractere, memo.
EMPTY(<expr>) Evalueaz dac o expresie este vid sau nu. ?EMPTY(aa)
Semnificaia de expresie vid are diferite .F.
nelesuri funcie de tipul expresiei astfel:
?EMPTY( )
ir de caractere expresia conine numai spaii, .T.
nuluri (chr(0)), taburi(chr(10)), sfrit de linie ?EMPTY(5-5)
.T.
(chr(13), chr(10));
?EMPTY({})
numeric expresia este 0;
.T.
data calendaristic expresia este {/ /} sau {};
logic expresia este fals (.F.);

88

Capitolul 3

memo fr coninut.
INLIST(<expr1>, Funcia testeaz dac expr1 se gsete printre A=joi
expresiile expr2, expr3,
?INLIST(a,miercuri, joi,
<expr2>,
[<expr3>]
vineri, smbt)
.T.
Funcia testeaz dac o expresie se ncadreaz ?BETWEEN(date(),{01/01/9
BETWEEN
(<expr1>,<expr2> ntre dou expresii de acelai tip. Expresia poate fi 7},{12/31/97}
de orice tip permis de limbajul Visual Fox
, <expr3>
.T.
?BETWEEN(3,1,5)
.T.
?BETWEEN(h,a,z)
.T.
Returneaz valoarea minim a dou sau mai ?MIN(3*4,9*3,8*2)
MIN(<expr1>,
multor expresii de acelai tip.
<expr2>,
12
[<expr3>]
?MIN(a,b,c,d)
a
?MIN(date(),{010/01/97})
01/01/97
Returneaz valoarea maxim a dou sau mai ?MAX(3*4,9*3,8*2)
MAX(<expr1>,
multor expresii de acelai tip.
<expr2>,
27
[<expr3>]
?MAX(a,b,c,d)
d
?MAX(date(),{010/01/97})
12/09/97

Concluzii
Expresiile sunt construcii sintactice fundamentale n orice limbaj de
programare. Ele sunt formate din operanzi i operatori. De multe ori ntr-o expresie
apar funcii proprii mediului de programre. Acestea sunt de obiecei legate de un
anumit tip de dat. Pe lng funciile proprii mediului de programare, pot exista
funcii scrise de ctre un anumit utilizator i care de asemenea pot face parte dintr-o
expresie. Despre acest tip de funcii se va discuta n capitolul 9 al acestei cri.

Capitolul

4
INSTRUCIUNI DE SELECIE
Instruciunile de selecie sunt acele instruciuni care n funcie de evaluarea
unei expresii logice execut o anumit secven de program.
Expresia logic este aceea expresie care are ca rezultat, cuvintele logice
adevrat sau fals, respectiv TRUE (.T.) sau FALSE (.F.). n cadrul unei expresii
logice se folosesc operatorii relaionali i operatorii logici.
n limbajul FoxPro exist dou tipuri de instruciuni de selecie:
instruciuni de selecie cu dou ci de tip:
1) IFELSEENDIF
2) IIF()
instruciuni de selecie cu mai multe c de tip:
DO CASE ... ENDCASE

4.1 Instruciuni de selecie cu dou ci


Instruciunile de selecie cu dou ci evalueaz o expresie logic. Funcie de
valoarea de adevr a acesteia se execut o ramur sau alta de instruciuni. n limbajul
FoxPro, instruciunea de selecie cu dou ci este instruciunea IFELSEENDIF
i funcia IIF(). Din punct de vedere logic, o structur de acest tip este reprezentat
n figura 4.1.
Forma general a instruciunii este:
IF <expL> <instr1>
ELSE <instr2>
ENDIF
Etapele de evaluare ale instruciunii sunt urmtoarele:
1. Se evalueaz expresia logic;

90

Capitolul 4

NU

DA

Fig. 4.1. Structura IFTHENELSE

2. Dac aceasta este adevrat se execut instruciunile de pe ramura DA sau


.T., adic instruciunile <instr1>;
3. Dac expresia logic este fals atunci apar dou cazuri:
a)
exist clauza ELSE n comand i se vor executa instruciunile
<instr2>;
b)
nu exist clauza ELSE n comand i se trece la prima
instruciune din program care urmeaz dup instruciunea IFENDIF.
Exemplul 4.1
S se scrie un program n limbajul FoxPro care citete dou numere a i b i le
compar afind relaia care exist ntre numere.
SET TALK OFF
CLOSE ALL
CLEAR
@ 1,1 SAY 'CITESTE NUMARUL a'GET a PICT '999'
DEFAULT 0
@ 1,1 SAY 'CITESTE NUMARUL b'GET b PICT '999'
DEFAULT 0
A IF a>b
\a mai mare dect b
ELSE
\a mai mic sau egal cu b
ENDIF
CLOSE ALL
Explicaii

Instruciuni de selecie

91

A) Expresia logic care se evalueaz este a>b. Dac este adevrat se execut
instruciunea \a mai mare decit b, altfel se execut instruciunea \a
mai mic sau egal cu b
Dou instruciuni de selecie se numesc imbricate dac una din
instruciuni se gsete n clauza IF sau n clauza ELSE a celeilalte
instruciuni
Mai multe comenzi IF...ENDIF pot fi imbricate obinndu-se condiionarea
unui grup de instruciuni prin mai multe expresii logice sau obinndu-se selecii
diverse ntre mai multe grupuri de instruciuni.
Schemele generale de imbricare ale unei instruciuni de tip
IFELSEENDIF sunt:
IF <expL1>
IF <expL2> <instr1>
ELSE <instr2>
ENDIF
ELSE <instr3>
ENDIF
i
IF <expL1> <instr1>
ELSE
IF <expL2> <instr2>
ELSE <instr3>
ENDIF
ENDIF
Clauza ELSE este opional. Cuvntul rezervat ENDIF este necesar s apar
ntodeauna, lipsa lui ntr-o instruciune selectiv genernd o eroare de sintax.
Exemplul 4.2
S se scrie un program FoxPro care calculeaz urmtoarea funcie:
e x pentru x < -1

F( x ) = 0 pentru x [-1,1]
ln(x) pentru X > 1

SET TALK OFF


CLEAR
CLOSE ALL
F=0
@1,1 SAY 'Se citeste numarul x' GET x;
PICT '99.99' DEFAULT 0

92

Capitolul 4
READ
IF x < -1
F=EXP(x+1)
ELSE
IF x <= 1
F=0
ELSE
F=LOG(x)
ENDIF
ENDIF
@4,1 SAY 'Valoarea functiei F=' GET F;
PICT '99.99999'
CLOSE ALL

A
B

Explicaii
A) Se testeaz prima ramur a funciei i se calculeaz valoarea funciei, lund n
considerare valoarea de adevr a expresiei logice x <-1;
B) Se testeaz cea de a doua ramur a funciei F(x) pornind din clauza ELSE a
primei instruciuni IF.
O alt posibilitate de a ramifica pe dou ci un program FoxPro este folosirea
unei funcii IIF() cu urmtoarea sintax:
IIF(<expL>,<expr1>, <expr2>)
Etapele de lucru ale acestei funcii sunt:
1. Se evalueaz expresia logic <expL>;
2. Dac aceasta este adevrat se execut grupul de instruciuni <expr1>;
3. Dac expresia logic este fals se execut grupul de instruciuni <expr2>.
Cele dou expresii <expr1> i <expr2> nu trebuie s fie neaprat de acelai tip,
ele putnd fi de tip numeric, ir de caractere, dat calendaristic sau logic. La fel ca i
instruciunile de tip IFELSEENDIF, dou sau mai multe funcii IIF() pot fi
imbricate.
Exemplul 4.3
S se scrie un program n limbajul FoxPro care citete dou numere. Dac
primul numr este mai mare dect al doilea se tiprete logaritmul primului numr. n
caz contrar tiprete suma celor dou numere.

SET TALK OFF


CLEA
CLOSE ALL
a=0
b=0
@1,1 SAY 'se citeste a' GET a PICT '9999.99'
READ

Instruciuni de selecie

93

@2,1 SAY 'se citeste b' GET b PICT '9999.99'


READ
SET DECIMALS TO 3
var=IIF(a>b,'Logaritmul natural al numarului;
a = '+STR(log(a),10,3),;
'Suma numerelor= '+STR((a+b),6,1))
@5,5 GET VAR
CLOSE ALL
SET DECIMALS TO

Explicaii
A) Se citesc cele dou numere a i b cu dou zecimale;
B) Se folosete funcia IIF() pentru a testa cele dou numere i pentru a afia
rezultatul.
Exemplul 4.4
S se scrie un program FoxPro care rezolv ecuaia de gradul al doilea:
Ax2 + Bx +C=0
cu coeficieni ntregi, folosind funcia IIF(). Algoritmul de rezolvare este urmtorul:
1. Dac A = 0, B = 0, C = 0 ecuaia este nedeterminat;
2. Dac A = 0, B = 0, C # 0 ecuaia este imposibil;
3. Dac A= 0 i B # 0 ecuaia de gradul I cu soluia X = -C/B;
4. Dac A # 0 se calculeaz expresia delta = B*B - 4*A*C. Dac delta > 0
rdcinile ecuaiei sunt:
X1= (-B + B * B - 4 * A * C ) / (2*A)
X2=(-B + B * B - 4 * A * C ) / (2*A)

SET TALK OFF


CLOSE ALL
CLEAR
ACCEPT 'Citeste coeficientul A: ' TO a
INPUT 'Citeste coeficientul B: ' TO b
@3,3 SAY 'Citeste coeficientul C:' GET c PICT '99';
DEFAULT 0
READ
a=VAL(a) <instr2>
varrez=IIF(A=0,IIF(B=0,IIF(C=0,'Ecuatie ;
nedeterminata','Ecuatie imposibila'),;
'Ecuatie de gradul I, X='+STR(-C/B,8,2)),;
'Delta = '+STR((B*B-4*A*C),8,2))
IF a<>0 AND VAL(SUBSTR(varrez,9,8))>=0
x1=-b+SQRT(b*b-4*a*c)/(2*a)
x2=-b-SQRT(b*b-4*a*c)/(2*a)
@ 4,4 SAY 'Ec de gradul 2 are radacinile:;

94

Capitolul 4
'+STR(x1,6,2)
@4,50 GET x2
ELSE

?varrez
ENDIF
CLOSE ALL
RETURN

Explicaii
A) Se citesc variabilele de intrare, coeficienii A,B,C, folosind trei tipuri de
instruciuni de intrare. Recomandabil a se folosi doar instruciunile
@..SAYGET;
B) Se transform variabila ir de caractere a n variabil numeric;
C) Varibilei varrez i se atribuie o valoare ir de caractere n funcie de evaluarea
expresiilor din funciile IIF imbricate;
D) Se evalueaz pasul numrul patru al algoritmului n cazul n care coeficientul A
este diferit de 0. Din variabila varrez se extrage doar subirul ncepnd de la al
noulea caracter, care se transform n valoare numeric.

4.2 Instruciuni de selecie cu mai multe ci


Instruciunile de selecie pe mai multe ci evalueaz o expresie funcie de care
se execut o anumit ramur de program. Aceste instruciuni accept n general
comenzile n cascad ca i n cazul mai multor instruciuni IFELSEENDIF sau
funcii IIF().
n limbajul FoxPro instruciunea de selecie cu mai multe ci este DO
CASEENDCASE cu urmtoarea sintax:
DO CASE
CASE <expL1>
<instructiuni1>
[CASE <expL2>
<instruciuni2>
. . . . . . . .
CASE <expLN>
<instructiuniN>]
OTHERWISE
<instructiuni>
ENDCASE
Comanda determin execuia grupului de instruciuni pentru care expresia
logic este adevrat. Se evalueaz expresia logic <expL1>. Dac este adevrat, se
execut instruciunile <instructiuni1> dup care comanda se ncheie. Dac expresia
logic <expL1> este fals, atunci se trece la evaluarea urmtoarelor expresii logice i
unde se gsete prima dat expresia logic adevrat se execut grupul de instruciuni

Instruciuni de selecie

95

corespunztor. Dac nici una dintre expresiile logice nu are valoarea adevrat (.T.)
pot apare dou cazuri:
cnd nu exist clauza OTHERWISE i se trece la execuia primei
instruciuni care urmeaz dup cuvntul rezervat ENDCASE;
n prezena clauzei OTHERWISE se va executa grupul de instruciuni
care urmeaz cuvntului cheie, dup care se trece la prima comand
care urmeaz dup cuvntul rezervat ENDCASE.
n general instruciunea DO CASE nlocuiete mai multe instruciun IF
imbricate.
Exemplul 4.5
S se citesc dou numere i se afieze relaia n care se gsesc acestea. n
primul caz se vor folosi instruciuni IF, iar n al doilea caz instruciuni DO CASE.
Primul caz:
SET TALK OFF
CLEAR
CLOSE ALL
@ 1,1 SAY 'Citeste numarul A :' GET a DEFAULT 0
@ 2,1 SAY 'Citeste numarul B :' GET b DEFAULT 0
READ
IF a>b
?'Numarul A mai mare decit numarul B'
ELSE
IF a=b
? 'Numarul B egal cu numarul A'
ELSE
? 'Numarul A mai mic decit numarul B'
ENDIF
ENDIF

Al doilea caz:
SET TALK OFF
CLEA
a=0
b=0
@1,1 SAY 'se citeste a' GET a
READ
@2,1 SAY 'se citeste b' GET b
READ
var1='a mai mare ca b'
var2= 'a mai mic ca b'
var3 = 'a egal cu b'
DO CASE
CASE a>b

96

Capitolul 4
?var1
CASE a=b
?var3
CASE a<b
?var2
ENDCASE

Instruciunile DO CASE se folosesc n cazul n care o expresie ia mai multe


valori i n funcie de fiecare valoare se execut un anumit set de instruciuni. Foarte
frecvent se folosesc aceste instruciuni n cazul meniurilor.
Exemplul 4.6
Se consider un fiier de date cu numele Salariat.dbf cu urmtoarele cmpuri:
C(10) numele salariatului
Nume
Adresa
C(30) adresa salariatului
N(2) vrsta salariatului
Vrsta
C(15) secia n care lucreaz salariatul
Secia
are valoara logica .T. dac salariatul este cstorit
Casatorit L
S se scrie un program FoxPro care simuleaz un meniu cu urmtoarele cinci
opiuni:
Adugare
Modificare
Cutare
Sortare
Exit
SET TALK OFF
USE salariati
CLEA
@ 8,16 SAY 'MENIU PRINCIPAL PENTRU FISIERUL PERSONAL'
@ 9,16 SAY ========================================'
A @ 10,20,16,60 BOX REPLICATE(CHR(177),14)
a=0
IF a=0
@11,22 SAY 'Adaugare' GET a DEFAULT 0 PICT '9';
MESSAGE 'Pentru actualizare tasteaza 1'
READ VALID a=1 or a=0
ENDIF
IF a=0
@12,22 SAY 'Modificare' GET a DEFAULT 0 PICT '9';
MESSAGE 'Pentru modificare tasteaza 2'
READ VALID a=2 or a=0
ENDIF
IF a=0

Instruciuni de selecie

97

@13,22 SAY 'Cautare' GET a DEFAULT 0 PICT '9';


MESSAGE 'Pentru cautare tasteaza 3'
READ VALID a=3 or a=0
ENDIF
IF a=0
@14,22 SAY 'Sortare dupa nume' GET a DEFAULT 0;
PICT '9' MESSAGE 'Pentru sortare tasteaza 4'
READ VALID a=4 or a=0
ENDIF
IF a=0
@15,22 SAY 'Exit' GET a DEFAULT 0 PICT '9';
MESSAGE 'Pentru iesire tasteaza 5'
READ VALID a=5
ENDIF
B DO CASE
CASE a=1
APPEND
CASE a=2
BROWSE
CASE a=3
C
CLEAR
@ 1,1 SAY 'Tasteaza numele cautat :';
GET mnume DEFAULT REPL(' ',10)
READ
GO TOP
LOCATE FOR mnume=nume WHILE NOT EOF()
IF FOUND()
BROWSE FIELDS Nume,Virsta,Adresa;
FOR nume=mnume NOAPPEND NODELETE;
NOEDIT
ELSE
WAIT WIND 'Nume negasit'
ENDIF
CONTINUE
CASE a=4
SORT ON NUME TO snume
USE snume
BROWSE
CASE a=5
CLOSE ALL
CLEAR
RETURN
ENDCASE
Explicaii

98

Capitolul 4

A) Se scriu instruciunile pentru realizarea meniului cu opiunile prevzute n textul


problemei;
B) Se scrie instruciunea DO CASE pentru valorile pe care le poate lua variabila A;
C) Pentru procedura de cutare se folosete instruciunea LOCATE mpreun cu
funcia IF FOUND(). Dac este ndeplinit condiia logic de cutare din
instruciunea LOCATE nregistrarea este gsit i se execut instruciunile de pe
ramura adevrat a instruciunii IF FOUND().

Concluzii
Instruciunile de selecie, deservesc structura selectiv din orice limbaj de
programare. Acest set de instruciuni, exist n toate limbajele de programare,
nelegerea lor fiind obligatorie n activitatea de programare

Capitolul

5
STRUCTURI DE CONTROL. INSTRUCIUNI
REPETITIVE
Structura repetitiv, este una dintre structurile fundamentale ale programrii
structurate, ea permite reluarea unui numr de instruciuni ale unui program de un
numr determinat sau nedeterminat de ori
Se numesc instruciuni repetitive acele instruciuni care determin un
grup de instruciuni s se execute de un anumit numr de ori ntr-un
program.
Setul de instruciuni care se repet se numete corpul ciclului. Instruciunile
repetitive sunt de dou categorii:
1. Ciclul nedeterminat sau ciclu condiionat;
2. Ciclul controlat prin contori, sau ciclu care se repet de un numr
determinat de ori, n funcie de o variabil care ia valori determinate.

5.1. Cicluri nederminate sau condiionate


Un anumit numr de instruciuni care se repet de un numr
nedeterminat de ori, funcie de o anumit condiie logic, formeaz un ciclu
repetitiv nedeterminat sau condiionat.
n cadrul limbajelor de programare exist dou tipuri de cicluri repetitive
condiionate i anume cicluri repetitive cu test iniial i cicluri repetitive cu test final.

Structuri de control. Instruciuni repetitive

99

La ciclurile repetitive cu test iniial condiia logic se gsete nainte de


grupul de instruciuni care formeaz corpul ciclului. Etapele de execuie pentru un
astfel de ciclu sunt:
1. Se evalueaz expresia logic;
2. Dac aceasta este adevrat, se execut instruciunile care formeaz corpul
ciclului;
3. Dac expresia logic este fals, se execut prima instruciune din program
NU

DA
DA

Ciclu repetitiv cu test initial

NU

Ciclu repetitiv cu test final

Fig. 5.1. Cicluri repetitive condiionate


care urmeaz dup corpul ciclului.
Scheme logice ale ciclului repetitiv cu test iniial i ale ciclului repetitiv cu test
final sunt reprezentate n figura 5.1.
La ciclurile repetitive cu test final condiia logic este pus dup
instruciunile care formeaz corpul ciclului. Etapele de execuie ale unui ciclu
repetitiv cu test final sunt:
1. Se execut instruciunile care formeaz corpul ciclului;
2. Se evalueaz expresia logic;
3. Dac aceasta este fals, se execut instruciunile din cadrul corpului
ciclului;
4. Dac expresia logic este adevrat se execut prima instruciune din
program care urmeaz dup instruciunile ce formeaz corpul ciclului.
Deosebirea dintre cele dou tipuri de cicluri const n faptul c la ciclul
condiional cu test iniial, instruciunile care formeaz corpul ciclului pot s nu se
execute nici o dat, pe cnd la ciclul condiionat cu test final instruciunile din corpul
ciclului se execut cel puin o singur dat.
Cele dou tipuri de cicluri se pot nlocui unul cu cellat, adic n program
instruciunile repetitive pot fi executate fie cu test final, fie cu test iniial.

100

Capitolul 5

5.2. Ciclu condiional cu test iniial. Comanda DO WHILE


ENDDO
n limbajul Visual FoxPro exist numai ciclul repetitiv condiional cu test
iniial. Instruciunea pentru ciclul condiional cu test iniial este: DO WHILE
....ENDDO cu sintaxa:
DO WHILE <expL>
<instruciuni>
[LOOP]
[EXIT]
ENDDO
Instruciunea DO WHILE se termin n mod obligatoriu cu instruciunea
ENDDO. n cazul n care se dorete ieirea forat dintr-o bucl DO WHILE se
folosete opiunea EXIT. Pentru reevaluarea forat a condiiei de execuie a ciclului
se folosete instruciunea LOOP. Utilizarea ei determin numai testarea condiiei de
execuie a ciclului, iar n continuare controlul programului este preluat de structura
repetitiv n conformitate cu rezultatul evalurii condiiei.
n cazul n care expresia <expL> este fals la prima testare a condiiei,
instruciunile care formeaz ciclul repetitiv DO WHILEENDDO nu se execut nici
o dat. De asemenea, dac expresia logic este ntotdeauna adevrat, programul nu
mai iese niciodat din ciclu i trebuie terminat forat prin apsarea tastelor
(C+2).
Prelucrarea repetitiv a articolelor dintr-un fiier de date este o aciune
frecvent. Condiia din structura repetitiv este de obicei parcurgerea tuturor
articolelor din fiierul de date pn la ntlnirea marcajului de sfrit de fiier EOF.
Funcia EOF() returneaz rezultatul adevrat dac s-a detectat sfritul de fiier i
fals dac nu avem sfrit de fiier.
Exemplul 5.1
S se scrie un program care calculeaz media a zece numere.
SET TALK OFF
CLEAR
NR = 0
MEDIA = 0
A
TOTAL = 0
CONTOR =0
DO WHILE CONTOR <=10
B
@1,1 SAY 'CITESTE NUMARUL' GET NR PICT'999 '
READ

Structuri de control. Instruciuni repetitive

101

TOTAL = TOTAL + NR
CONTOR = CONTOR+1
@ 2,2 SAY 'S-a citit numarul' GET CONTOR;
DEFAULT 0 PICTURE '99' DISABLE
NR=0
ENDDO
MEDIA = TOTAL / CONTOR
SET DECIMALS TO 3
@5,5 SAY 'MEDIA= ' + STR(MEDIA,8,3)
SET DECIMALS TO

Explicaii
A) Se iniializeaz variabilele care vor fi folosite n program;
B) Se folosete instruciunea DO WHILE pentru citirea celor zece numere.
Instruciunile cuprinse ntre WHILE i ENDDO se execut atta timp ct expresia
logic CONTOR<=10 rmne adevrat;
C) Se calculeaz media numerelor i se afieaz.
Exemplul 5.2
La un examen de admitere nu se prezint un anumit numr de candidai
nscrii. S se scrie un program care listeaz candidaii abseni la una dintre cele dou
probe ale examenului. Se consider absent candidatul pentru care n cmpul NOTA1
sau NOTA2 exist valoarea 0. Evidena candidailor este inut n fiierul de date
Candidai.DBF cu urmtoarele cmpuri:
Nota1
Nota2
Nume
Prenume

N
N
C
C

2
2
20
20

nota la prima prob


nota la cea de a doua prob
numele candidatului
prenumele candidatului

USE CANDIDATI
SET TALK OFF
CLOSE ALL
CLEAR
FLAG=.T.
USE CANDIDAT
lin = 4
col = 6
@ 1,5 SAY 'CANDIDATI ABSENTI LA CONCURS'
\=======================================

102

Capitolul 5
DO WHILE .NOT. EOF()
IF NOTA1<=10 OR NOTA2 <=10
IF NOTA1 < 1
@ LIN,COL SAY NUME+' '+PRENUME+;
+ ' ABSENT ; LA PRIMA PROBA'
LIN=LIN+1
ELSE
IF NOTA2 < 1
@ LIN,COL SAY NUME+' '+PRENUME;
+'ABSENT LA PROBA NR 2'
LIN=LIN+1
ENDIF
ENDIF
ELSE
WAIT WIND 'EROARE LA INTRODUCEREA;
NOTELOR'
FLAG=.F.
MNUME=NUME
EXIT
ENDIF
SKIP
ENDDO
IF FLAG=.F.
BROWSE FOR NUME=MNUME
ENDIF
CLOSE ALL
RETURN

Explicaii
A) Instruciunea DO WHILE .NOT. EOF() este un exemplul clasic de cutare ntr-un
fiier de date. n cazul n care n cmpul Nota1 sau Nota2 avem valoarea 0
nseamn c respectivul candidat nu s-a prezentat i programul l va afia;
B) n cazul n care Nota1 sau Nota2 depete valoarea 10 se va semnala eroare, se va
seta o variabil numit flag pe valoarea .F. (false) i se va prsi forat bucla
WHILE cu ajutorul instruciunii EXIT;
C) Se corecteaz cmpul eronat cu ajutorul comenzii BROWSE.

Structuri de control. Instruciuni repetitive

103

Exemplul 5.3
S se scrie un program n limbajul FoxPro care calculeaz suma numerelor de
la 1 la 10 cu excepia valorilor 3 i 5.

SET TALK OFF


CLEAR
I = 0
total = 0
DO WHILE I <= 10
IF I = 3 OR I = 5
I = I + 1
LOOP
ENDIF
total = total + I
I = I + 1
ENDDO
SET TEXTMERGE ON
\Total = <<total>>
SET TEXTMERGE OFF
CLOSE ALL
RETURN

Explicaii
A) n cazul n care variabila I are valoarea 3 sau 5 se va face incrementarea variabilei
urmat de saltul la nceputul ciclului folosind instruciunea LOOP fr a mai fi
executate restul instruciunilor din corpul ciclului.

5.3. Cicluri condiionate specifice fiierelor de date.


Comanda SCANENDSCAN
Un tip special de instruciune repetitiv folosit n limbajul FoxPro doar pentru
fiierele de date este instruciunea SCAN ...ENDSCAN cu sintaxa:
SCAN [NOOPTIMIZE]
[domeniu][FOR<expL1>][WHILE <expL2>]
<instruciuni>
[LOOP]
[EXIT]
ENDSCAN

104

Capitolul 5

Aceast comand realizeaz parcurgerea fiierului de date curent i executarea


grupului de instruciuni <instruciuni> pentru fiecare nregistrare specificat prin:
domeniu, FOR sau WHILE. Comanda este deosebit de util n cazul fiierelor de date
mari, cnd pentru a gsi anumite nregistrri se parcurge fiierul de date o singur
dat. Domeniul nregistrrilor a fost specificat n capitolele anterioare i se refer la:
toate nregistrrile fiierului de date (ALL);
urmtoarele nregistrri de la nregistrarea curent pn la sfritul fiierului
(REST);
urmtoarele nregistrri dorite de la nregistrarea curent (NEXT).
Expresiile logice din clauza FOR sau WHILE determin condiia de cutare.
Clauza NOOPTIMIZE inhib optimizarea RUSHMORE. Clauzele LOOP i EXIT au
aceeai semnificaie cu cele de la comanda DO WHILEENDDO.
Exemplul 5.4
S se scrie un program care consult fiierul Clieni.DBF i mrete costurile
tuturor clienilor din judeul SB care ncep cu litera B. Se vor afia cmpurile
Companie, Ora, Cost.
SET TALK OFF
CLOSE ALL
CLEAR
USE CLIENTI
SCAN ALL FOR judet ='SB'
IF SUBSTR(companie,1,1)='B'
mcost=cost*1.1
REPL COST WITH mcost
DISP FIELDS companie,oras,cost
ENDIF
ENDSCAN
CLOSE ALL
RETURN

5.4. Cicluri controlate prin contori


Ciclurile repetitive sau iterative controlate prin contori se execut de un numr
determinat de ori n funcie de valorile pe care le poate lua o variabil numit
variabila de control. n general aceasta ia valori ntre o valoare inial i o valoare

Structuri de control. Instruciuni repetitive

105

final. n limbajul FoxPro acest tip de ciclu repetitiv se realizeaz cu instruciunea


FORENDFOR cu sintaxa:
FOR variabila_de_control=valoare_iniial
TO valoare_final [STEP <expN>] <instruciuni>
[EXIT]
[LOOP]
ENDFOR/NEXT
Comanda determin execuia repetat a corpului ciclului (<instruciuni>),
contorizarea numrului de iteraii fcndu-se prin variabila de control. Valoarea
inial a acestei variabile este dat de o expresie numeric, iar valoarea final de o alt
expresie numeric. Modul n care se ajunge de la valoarea inial la valoarea final,
este controlat de ctre clauza STEP prin expresia numeric <expN>, care intr n
componena ei. Dac aceast clauz lipsete atunci se consider pasul egal cu unu,
adic variabila de control este incrementat la fiecare iteraie.
Deci, la prima iteraie a grupului de instruciuni variabila de control va avea
valoarea egal cu valoarea iniial iar la a doua iteraie va avea valoarea:
variabila de control = valoarea iniial <expN>
unde <expN> este o valoare numeric care poate fi pozitiv sau negativ.
Etapele de lucru ale acestei instruciuni sunt:
1. se evalueaz variabila de control cu valoarea iniial;
2. se compar valoarea iniial cu valoarea final. Dac este diferit se
execut corpul ciclului;
3. se incrementeaz variabila de control dac opiunea STEP lipsete.
Dac nu, se mrete sau se micoreaz variabila de control cu valoarea
<expN> din clauza STEP;
4. se repet paii 2 i 3 de attea ori pn cnd valoarea variabilei de
control devine mai mare sau mai mic dect valoarea final, moment n
care se trece la prima instruciune din afara corpului ciclului, adic prima
instruciune care urmeaz dup cuvntul rezervat ENDFOR.
Valoarea iniial, valoarea final i valoarea numeric cu care se face
incrementarea se evalueaz la intrarea n bucl, modificarea lor ulterioar ne
influennd numrul de iteraii. Nu este indicat s se modifice de ctre utilizator
valoarea variabilei de control n timpul unui ciclu iterativ, deoarece acest lucru poate
conduce la rezultate imprevizibile.
Clauzele EXIT i LOOP sunt identice cu cele de la instruciunea DO
WHILEENDDO.
Cuvntul rezervat ENDFOR este obligatoriu s fie prezent la sfritul unui
ciclu iterativ controlat prin contori. El poate fi nlocuit cu cuvntul NEXT avnd
aceeai semnificaie.

106

Capitolul 5

Exemplul 5.5
Folosind un ciclu iterativ controlat prin contori, s se scrie un program care
calculeaz media unui numr aleator de numere.

SET TALK OFF


CLOSE ALL
CLEAR
Media = 0
Total = 0
Numnr = 0
@ 1,1 SAY Pentru care numere se calculeaza;
media : GET numnr PICT '9999'
READ
FOR I = 1 TO numnr
@ 2,1 SAY Citeste numerele = GET NR;
PICT '9999.99' DEFAULT 0
READ
Total=total + nr
ENDFOR
MEDIA =TOTAL/numnr
@ 6,6 SAY 'Media numerelor = '+ STR (MEDIA)
CLOSE ALL
RETURN

Explicaii
A) n instruciunea FORENDFOR lipsete clauza STEP deci variabila de control I
va fi incrementat la fiecare iteraie de la valoarea 1 la valoarea atribuit varibilei
numnr. Instruciunea FORENDFOR se poate scrie n alt mod, efectul
instruciunii fiind acelai:
FOR I = numnr TO 1 STEP -1
@ 2,1 SAY Citeste numerele= GET NR;
PICT '9999.99' DEFAULT 0
READ
Total=total + nr
ENDFOR
Instruciunea FORENDFOR este mai rapid dect instruciunea DO WHILE
ENDDO din aceast cauz este recomandabil folosirea instruciunii FOR n loc de
DO WHILE ori de cte ori este cazul.

Structuri de control. Instruciuni repetitive

107

Exemplul 5.6
S se scrie un program n limbajul FoxPro care ilustreaz faptul c
instruciunea FOR ENDFOR este mai rapid dect instruciunea DO WHILE
ENDDO. Se va utiliza funcia SECONDS() care returneaz numrul de secunde trecute
de la miezul nopii (ora zero).
SET TALK OFF
CLOSE ALL
CLEAR
incepdo = SECONDS()
I = 0
DO WHILE I < 1000000
I = I + 1
ENDDO
sfdo = SECONDS()
FOR I = 1 TO 1000000
ENDFOR
sffor = SECONDS()
timpdo = sfdo - incepdo
timpfor = sffor - sfdo
@1,1 SAY 'Nr secunde pentru Do While= ' GET timpdo;
PICT '99.99999'
@2,1 SAY 'Nr secunde pentru For= ' GET timpfor;
PICT '99.999999'
CLOSE ALL
RETURN

Concluzii
Instruciunile repetitive, deservesc structura repetitiv din orice limbaj de
programare. Acest set de instruciuni, exist n toate limbajele de programare,
nelegerea lor fiind obligatorie n activitatea de programare

Capitolul

6
Formulare n mediul Visual Fox
De-a lungul anilor, a fost abandonat modelul de programare conform cruia
programul controla ceea ce fcea utilizatorul. Acum utilizatorii au pretenia s poat
controla aplicaia. Cu alte cuvinte s-a trecut de la programarea structurat la
programarea orientat pe obiecte. n mediile de programare vizuale (Visual Fox,
Delphi, Visual Basic, Acces, etc) orientate spre baze de date, entitatea fundamental
care apare n aplicaii este formularul. Acesta se aseamn cu o fereastr dar se
deosebete fundamental, prin faptul c este format din obiecte.

6.1 Paradigma obiectelor de tip formular


Programele orientate spre obiecte accept dou tipuri fundamantale de obiecte
vizuale: containerele i obiectele. Un container este orice obiect n care putei plasa
alte obiecte. Prin urmare, un formular este un container, deoarece el conine obiecte,
cum ar fi casetele de text, casetele de validare i multe alte tipuri de obiecte. O
caracteristic interesant a formularelor este aceea c, ntruct sunt obiecte, putei
crea noi formulare pe baza celor existente. Datorit proprietii de motenire a
obiectelor, putei crea definiia unui formular generic i apoi s o folosii pentru a
crea restul formularelor unei aplicaii. De exemplu, putei defini aspectul global,
culoarea, fonturile i alte proprieti. Apoi, salvai pur i simplu acest formular sub
forma unei clase vizuale i folosii-l drept ablon pentru toate noile formulare.
Exist mai multe metode de a crea un nou formular:
Selectai File, New, Form din meniul de sistem
Introducei comanda CREATE FORM n fereastra de comenzi
Introducei comenzile:
NewForm = CREATEOBJECT("FORMULAR")
NewForm.Open
Folosii vrjitorul Form Wizard.
Dei vrjitorii v permit s creai un obiect elementar, cum ar fi un formular, vei
constata deseori c trebuie s modificai i s mbuntii ceea ce creeaz acetia.
Figura 6.1 prezint un formular n care nu s-a introdus nici un obiect. De asemenea,
aceast figur prezint zona de lucru a instrumentului Form Designer, n care putei
construi o reprezentare vizual a formularului.

108

Capitolul 6

Fig 6.1 Formularul nou

Pentru a aduga obiecte n formular, Visual FoxPro utilizeaz bara cu


instrumente Controls.

6.2. Bara cu instrumente Controls


Aceasta definete pictogramele barei cu instrumente Controls, care sunt urmtoarele:

Semnificatia fiecrui buton este urmtoarea:


Control /
PictoNume
gram
Selectare obiecte
/ Select Pointer
Vizualizare clase
/ View Classes
Etichet / Label

Descriere

Redimensioneaz i mut obiectele


V permite s afiai bibliotecile de clase nregistrate sau s
deschidei noi biblioteci de clase
Utilizat pentru afiarea unui text fix.

Caset de text

Utilizat pentru afiarea unei singure linii de text

Caset de editare

Utilizat pentru afiarea mai multor linii de text

Buton de
comand
Grup de butoane

Utilizat pentru a crea un buton pe care utilizatorul l poate alege


pentru a executa o comand.
Utilizat pentru a crea un grup de butoane pe care utilizatorul le
poate alege pentru a executa diverse comenzi
Utilizat pentru a afia mai multe opiuni din care utilizatorul poate
selecta una singur
Utilizat pentru a indica dac ceva este selectat sau nu, adevrat sau
fals sau pentru a afisa opiuni multiple din care utilizatorul poate

Grup de butoane
de opiune
Caset de
validare

Formulare n mediul Visual Fox


Caset combinat

Caset cu list
Caset de
modificare
valoric
Grid
Control cu
imagine
Timer
Cadru de pagin
OLE 2.0
Legtur OLE
Linie
Shape

109

selecta mai multe opiuni.


Utilizat pentru crearea unei liste derulante care s permit
utilizatorului s selecteze unul dintre articolele listei sau pentru
crearea unei casete combinate care s permit utilizatorului s
selecteze dintr-o list sau s introduc o nou valoare.
Utilizat pentru afiarea unei liste derulante de articole
Utilizat pentru incrementarea sau decrementarea unei valori ntregi
n interiorul unui domeniu.
Utilizat pentru crearea unui control de tip browser
Utilizat pentru afiarea unei imagini grafice
Utilizat pentru planificarea evenimentelor i pentru stabilirea
intervalelor dintre ele
Utilizat pentru reprezentarea mai multor pagini ale unui control
ntr-un singur formular
Utilizat pentru a permite legarea i nglobarea obiectelor (OLE)
dintr-un server OLE
Utilizat pentru a permite legarea i nglobarea obiectelor (OLE) n
cmpul
general al unui tabel
Utilizat pentru desenarea diverselor stiluri de linii pe formularul
dumneavoastr
Utilizat pentru a desena dreptunghiuri, ptrate, cercuri i elipse

Separator

Utilizat la crearea unei bare cu instrumente personalizate n vederea


separrii instrumentelor n grupuri

Blocare generator

Utilizat pentru deschiderea generatoarelor corespunztoare


obiectelor atunci cnd acestea sunt selectate
Utilizat pentru adugarea mai multor obiecte de acelai tip, fr a fi
necesar s reexecutai clic pe butonul controlului respectiv din bara
cu instrumente
Permite introducerea mai multor entiti Vfox

Blocare buton
Button Lock
Container
Control WEB

Permite legtura la Internet

6.2.1 Controlul (butonul) Select Pointer


Butonul Select Pointer reactiveaz indicatorul mouse-ului. n mod normal,
atunci cnd plasai un obiect pe ecran, mouse-ul revine la modul de indicare dup
poziionarea controlului. n schimb, dac folosii instrumentul Button Lock pentru a
plasa mai multe obiecte de acelai tip, trebuie s executai clic pe acest buton pentru a
reveni la modul de indicare.

110

Capitolul 6

6.2.2 Controlul (butonul) View Classes


Butonul View Classes v permite s vizualizai alte clase de obiecte salvate ca
fiere VCX. nainte de a utiliza acest buton, putei s nregistrai i s selectai
propriile dumneavoastr biblioteci folosind Tools, Options, Controls. Putei, de
asemenea, s nregistrai o bibliotec de clase personalizat apsnd butonul View
Classes din bara cu instrumente i selectnd opiunea Add. Este afiat caseta de
dialog Open care v permite s selectai biblioteca din orice director. Selectarea
bibliotecii duce la deschiderea i, simultan, la nregistrarea ei.
Dup nregistrarea lor, numele acestor biblioteci de clase personalizate apar
atunci cnd selectai butonul View Classes. Atunci cnd selectai o bibliotec
personalizat, butoanele din seciunea median a acestor bare cu instrumente sunt
nlocuite cu butoanele corespunztoare noilor obiecte.
Putei reveni oricnd la obiectele prestabilite selectnd Standard din lista
View Classes.

6.2.3 Controlul (butonul) Builder Lock


Instrumentul Builder Lock comut n modul generare, construcie obiect.
Generatoarele v ajut s definii proprietile unui obiect prin afiarea unor ecrane de
introducere care v solicit s specificai cele mai importante proprieti ale
controlului. Generatoarele reprezint o metod eficient de nvare a celor mai
importante proprieti ale obiectelor. Totodat ele permit o generare mai uoar a
obiectului dorit. Nu toate obiectele din mediul Visual Fox permit generarea lor cu
ajutorul constructorului (builderului). Instrumentul Button Lock v permite s
adugai instane multiple ale aceluiai obiect de baz, fr s fie necesar s revenii
n bara cu instrumente Controls i s-l reselectai. Executai clic o dat pe acest buton
pentru a-l apsa, dup care selectai controlul pe care vrei s-l folosii. Adugai
numrul dorit de instane ale controlului selectat, fr s revenii la bara cu
instrumente. Putei chiar s schimbai controlul selectat, executnd clic pe un alt
control din bara cu instrumente. Putei, de asemenea, s activai instrumentul Button
Lock, executnd dublu clic pe butonul oricrui control.

6.2.4 Obiectul Label sau Etichet


Etichetele sau obiectele Label, sunt simple iruri de text adugate unui
formular pentru identificarea cmpurilor sau pentru afiarea unor informaii fixe de
tip caracter, destinate utilizatorului. O etichet poate avea o singur linie sau, n cazul
n care valoarea proprietii WordWrap este .T., se poate ntinde pe mai multe linii.
Cele mai uzuale proprieti ale etichetelor sunt cele care permit schimbarea fontului, a
dimensiunii i a stilului fontului. Putei, de asemenea, s definii o culoare de fundal

Formulare n mediul Visual Fox

111

Fig 6.1 Exemple de obiecte etichet sau text

sau s stabilii un fundal transparent, astfel nct s fie vizibile toate obiectele de
dedesubt. Textul se poate nconjura cu un chenar cu linie simpl, continu. Figura 6.2
prezint aceste posibiliti.
n fereastra Properties sunt definite proprietile obiectului text fig 6.3.

Fig 6.2 Fereastra cu proprietile obiectului

Obiectul text nu are o surs de date. Introducei textul care dorii s apar pe
ecran, direct n proprietatea Caption a obiectului.
Majoritatea obiectelor au o proprietate Visible. Dac i atribuii valoarea .F.
atunci cnd definii formularul, obiectul nu va aprea la rularea formularului. El
exist totui, ns nu este vizibil. Aceast proprietate permite personalizarea
formularelor n vederea afirii numai a obiectelor necesare n contextul specific.
O utilizare interesant a acestei proprieti o reprezint definirea mai multor obiecte
suprapuse, dintre care numai unele sunt vizibile la un moment dat.

112

Capitolul 6
Grupul de proprieti Font permite definirea fontului cu care se va tiprii textul
din cadrul obiectul. Acestea fac referin la mrime, culoare, fond, subliniere etc.
Proprietile Left i Top definesc poziia obiectului n formular, iar
proprietile Height i Width definesc mrimea obiectului pe vertical respectiv
orizontal.
Proprietatea ToolTipBox permite afiarea unui text, dac mouse-ul este
poziionat pe obiect, n cazul n care proprietatea ShowTips a formularului are
valoarea True.
Dei acest aspect nu a fost discutat referitor la forme, aceste obiecte au ca i
etichetele, evenimente asociate lor. De exemplu, ele pot s rspund unui simplu clic,
unui dublu clic sau unui clic cu butonul drept at mouse-ului. Toate evenimentele au
metode prestabilite.
n general metoda Click Event execut o aciune n momentul n care se
execut click pe butonul stng al mouse-ului, Dblclick Event execut o aciune n
momentul n care se execut dublu click pe butonul stng al mouse-ului, RightClick
Event execut o aciune n momentul n care se execut click pe butonul drept al
mouse-ului. GotFocus Event i LostFocus Event execut aciuni, n momentul n
care controlul se transmite unui obiect sau n momentul n care se prsete un obiect.
Metodele Init Event i Load Event execut aciuni de iniializare a obiectului, fie la
activarea sa, fie la ncrcarea sa n memorie. n obiectul Form aceste metode pot fi
folosite pentru deschiderea bazelor de date i a tabelelor n diverse zone de lucru
controlate de ctre utilizator.

6.2.5 Obiecte Text Box


Deosebirea fundamental ntre o etichet i un obiect TextBox sau caset de
text const n sursa de date a celor dou. n cazul unei etichete textul este invariabil i
este dat de valoarea proprietii Caption a obiectului. Pe de alt parte, sursa unei
casete de text este de obicei un cmp al unui tabel, dar poate fi la fel de bine o

Fig.6. 4 Exemple de obiecte Text box

variabil de memorie. Printre cele mai comune proprieti ale casetei de text pe care
le vei modifica se numr cele referitoare la culoare, font, dimensiunea i poziia
casetei de text i, evident, sursa de date. Figura 6.4 prezint un exemplu de caset de
text etichetat Text1.

Formulare n mediul Visual Fox

113

Pe lng proprietatea Visible, discutat n legtur cu etichetele, casetele de


text (ca i alte obiecte cu surse de date) au o proprietate Enable. Atunci cnd valoarea
proprietii Enable este .T., utilizatorul poate accesa obiectul. Evident, codul asociat
unei metode When poate fora prsirea cmpului. ns n cazul n care valoarea
proprietii Enable este .T., metoda When nu va fi niciodat executat. De altfel, un
cmp dezactivat poate fi afiat diferit de un cmp activat folosind culori diferite
pentru prim-plan i pentru fundal. (Vezi proprietile DisableBackColor i
DisableForeColor) Utilizarea acestora n locul proprietii Visible semnaleaz
utilizatorului existena cmpului sau a opiunii, precum i faptul c nu poate fi
selectat n contextul respectiv.
O alt opiune referitoare la cmpurile care posed surse de date este s le
protejai la scriere (ReadOnly). Folosii opiunea ReadOnly pentru a permite
utilizatorului s vizualizeze textul, fr s-l poat modifica. Dac nlimea casetei de
text este suficient de mare, textul continu automat pe linia urmtoare. n schimb,
atunci cnd spaiul se epuizeaz, caseta de text trebuie s ntrerup afiarea textului.
Pentru date de tip caracter de lungime mai mare, folosii o caset de editare. Dei
putei defini o fereastr memo distinct pentru afiarea variabilelor de tip memo
legate la un cmp de text, este recomandabil s folosii obiecte de tip caset de
editare, Edit Box, pentru a face acest lucru.
Exemplul 6.1
S se realizeze un formular pentru vizualizarea datelor existente n tabela
Studenti din baza de date Facultate (vezi Capitolul 4).
C
A

114
Capitolul 6
Explicaii
A) Dup crearea unui nou formular i activarea Form Designer se acioneaz
asupra butonului Data Environment, pentru activarea ferestrei cu acelai
nume pentru ataarea bazei de date i a tabelei dorite la formular;
B) Se construiesc obiectele Label i Text Box. Proprietatea Control Source din
caseta Data permite legarea obiectului Text de cmpul dorit din tabel.
Proprietile Format i InputMask permit definirea unor formate
personalizate i a unei mti de intrare pentru obiectul Text (vezi capitolul 4);
C) Formularul realizat vizualizeaz datele din prima nregistrare a tabelei Studenti

6.2.6 Obiecte Edit Box


Obiectele de editare Edit Box mbuntesc caracteristicile casetelor de text,
permind utilizatorului s modifice textul afiat. n primul rnd, ele posed o bar de
derulare vertical, care permite utilizatorului s parcurg textele lungi mai rapid dect
prin derulare linie cu linie. Avnd n vedere faptul c o caset de editare

Fig.6. 5 Controlul Edit Box

accept pn la 2.147.483.647 de caractere, barele de derulare se pot dovedi vitale.


Figura 6.5 ilustreaz o caset de editare situat n jumtatea inferioar a ecranului. n
mare, o caset de editare prezint aceleai caracteristici ca i o caset de text.
O proprietate special ests Allow Tabs, care specific dac utilizatorul poate utiliza
tabulatoare n textul casetei de edttare. Dac activai aceast opiune, utilizatorul va
trebui s apese C+T pentru a trece la controlul urmtor (n locul tastei T). Prin
urmare, dac permitei utilizarea tabulatoarelor; nu uitai s indicai pe formular c
utilizatorul trebuie s apese C+T pentru a prsi cmpul.
Exemplul 6.2

Formulare n mediul Visual Fox

115

Se adaug la formularul prezentat la exemplul 6.1 obiectul Edit Box prin care
sunt vizualizate date suplimentare

6.2.7 Obiecte Command Button


Un buton de comand are aspectul unui dreptunghi tridimensional cu un text n
interior. Formularele utilizeaz deseori butoane de comand pentru a permite
selectarea unei opiuni dintr-un set de opiuni. Una dintre cele mai uzuale utilizri ale
butoanelor de comand este pentru parcurgerea unui tabel. De obicei se utilizeaz
patru butoane pentru deplasarea indicatorului de nregistrri la nceputul tabelului, la
nregistrarea anterioar, la cea care urmeaz, respectiv la sfritul fiierului.
Printre celelalte utilizri ale butoanelor de comand se numr nchiderea unui
formular, prsirea aplicaiei sau tiprirea unui raport. n toate cazurile, evenimentul
principal asociat unui buton de comand este un clic. Atunci cnd utilizatorul

Fig.6. 6 Buton de comand


execut clic pe un buton, el se ateapt s efectueze o aciune, cum ar fi deplasarea la

116
Capitolul 6
o alt nregistrare sau la un formular existent. Totui butoanele de comand pot
executa multe alte aciuni. Putei chiar s asociai valoarea unui buton cu o surs de
date. Spre deosebire de multe obiecte care v permit s controlai att culoarea de
prim-plan, ct i culoarea de fundal, butoanele de comand nu v permit s stabilii
dect prim-planul (textul). Setul de culori Windows definete culoarea de fundal. n
schimb, putei folosi culori de prim-plan diferite pentru starea activat, respectiv
dezactivat.
O alt caracteristic interesant a butoanelor de comand este capacitatea
acestora de a afia o imagine bitmap folosind proprietile Picture, Disabled Picture
i DownPicture. Toate aceste trei proprieti v permit s selectai un fiier BMP sau
DIB pentru a-l afia pe buton. Proprietatea Picture definete imaginea ce urmeaz a
fi folosit atunci cnd butonul este neapsat. Proprietatea DownPicture definete
imaginea afiat atunci cnd utilizatorul execut clic pe buton. n sfrit, proprietatea
DisabledPicture definete imaginea folosit atunci cnd butonul este dezactivat. O
imagine clasic pentru butonul neapsat este cea a cercului rou cu o bar deasupra.
Exemplul 6.3
S se insereze n formularul de la exemplele precedente un buton de comand
prin care execuia formularului este oprit

Explicaii
Butonul are o imagine ataat i un text (Exit). n procedura Click Event
ataat butonului s-a apelat metoda Release, prin care obiectul formular este eliminat
din memorie. Numele butonului este Command1.

6.2.8 Obiecte Command Group


Putei definii butoanele de comand fie independent unul cte unul, fie n grup.
Principalul avantaj al utilizrii unui grup este c v permite s plasai codul comun
ntr-o singur metod aparinnd grupului.

Formulare n mediul Visual Fox

117

Cele trei butoane din figura 6.7, efectueaz aciuni asemntoare. Fiecare emite
un mesaj cu o alt destinaie. n loc s introducei n mod repetat codul

Fig.6. 7 Butoane de comand sub forma unui grup

generrii unui mesaj n fiecare buton, este preferabil s le combinai ntr-un singur
obiect. Evenimentul Click Event al grupului de butoane de comand, utilizeaz
proprietatea Value a grupului pentru a stabili butonul apsat de utilizator.
Codul program pentru metoda amintit este:
DO CASE
CASE This.Value = 1
= MESSAGEBOX (Mesaj trimis de BUTON 1)
CASE This.Value = 2
= MESSAGEBOX (Mesaj trimis de BUTON 2)
CASE This.Value = 3
= MESSAGEBOX (Mesaj trimis de COMMAND 3)
ENDCASE
Proprietatea Value conine numrul butonului pe care s-a executat clic. VFP
numeroteaz butoanele secvenial, n ordinea n care le adugai n grupul de
comand. Proprietii ButtonCount trebuie s-i atribuii o valoare egal cu numrul de
butoane din grup.
Pentru a declara unul dintre butoanele de comand ca fiind cel prestabilit,
atunci cnd utilizatorul apas j, atribuii valoarea .T. proprietii Default a
butonului respectiv. Avei n vedere faptul c numai un singur buton al unui formular
poate fi declarat drept prestabilit. Nu putei specifica n acelai timp un buton dintr-un
grup de comand i un buton independent drept butoane prestabilite sau butoane din
dou sau mai multe grupuri de comand.

6.2.9 Obiecte Option Group (butoane radio)


Un alt tip de butoane sunt butoanele radio care nu apar niciodat singure. De
altfel, un singur buton radio nu prea are sens - este ca i cum radioul dumneavoastr

118
Capitolul 6
ar avea un singur buton. Scopul unui set de butoane radio este s ofere o serie de
opiuni din care utilizatorul trebuie s selecteze una. Spre deosebire de un grup de
comand pe care utilizatorul poate s-l ignore, un grup de butoane radio are
ntotdeauna un buton selectat.
Prin urmare, cea mai important proprietate a unui grup de butoane radio (pe
care Visual FoxPro l numete grup de opiune) este ButtonCount. Trebuie s
definii aceast proprietate nainte de a ncepe s etichetai butoanele individuale. Tot
naintea configurrii butoanelor individuale, va trebui s definii butonul prestabilit.
n mod prestabilit, primul buton devine cel prestabilit, ns putei schimba butonul
prestabilit modificnd proprietatea Value a grupului de opiune. Pentru a declara al
doilea buton drept butonul prestabilit, atribuii proprietii Value valoarea 2.
Concomitent, este stabilit i proprietatea Value a fiecrui buton. Valorile pot fi 0
(deselectat) sau 1 (selectat).
Dup stabilirea numrului de butoane din grupul de opiune, le putei selecta pe
fiecare n parte, pentru a le defini titlurile. Deschidei lista derulant situat la baza
casetei de dialog Properties. Butoanele radio individuale apar imediat sub grupul de
opiune. Figura 6.8 ilustreaz aceast list.

Fig.6. 8 Butoane radio

Ca i n cazul butoanelor de comand, putei folosi o imagine pentru un buton


de opiune, ns numai dac atribuii n prealabil valoarea Graphical proprietii
Style. Desigur, n acest fel butonul de opiune va semna cu un buton de comand.
Reinei faptul c deosebirea fundamental este c un grup de butoane de opiune are
ntotdeauna o valoare selectat. Butonul selectat este apsat atunci cnd este acceptat
selecia.
Att grupurile de comand, ct i cele de opiune, pot avea un chenar. Figura
6.8 ilustreaz grupul de comand cu chenarul afiat; chenarul grupului de opiune este
dezactivat. n timp ce proprietatea Border Style controleaz existena unui chenar cu
linie simpl continu, proprietatea BackStyle controleaz afiarea acestuia. Atunci

Formulare n mediul Visual Fox

119

cnd proprietatea BackStyle are valoarea Transparent, VFP nu afieaz chenarul i


culoarea de fundal.

6.2.10 Obiecte Check Box sau casete de validare


n general, casetele de validare (fig 6.9), reprezint cmpuri sau variabile
logice individuale. Prin convenie, o caset de validare goal semnific faptul c
opiunea respectiv nu este selectat. Atunci cnd utilizatorul o selecteaz, n caset
apare un X. Spre deosebire de grupurile de comand sau de opiune, casetele de
validare funcioneaz independent unele de altele. n consecin, putei avea orice
numr de casete de validare ntr-un formular. Mai mult, utilizatorul poate s nu
selecteze nici una, s le selecteze pe toate sau numai o parte dintre ele.

Fig.6. 9 Casete de validare

Ca i n cazul butoanelor de opiune, putei afia o caset de validare sub forma unui
buton grafic, folosind proprietatea Style. Atunci cnd este afiat n acest fel, caseta
de validare poate conine o imagine bitmap, precum i un titlu. Dac butonul apare
neapsat, opiunea nu este selectat (are valoarea 0 sau .F.). Dac butonul apare
apsat, valoarea este egal cu 1 sau .T. VFP stabilete dac va fi returnat o valoare
numeric sau logic, n funcie de tipul sursei de date asociate controlului. n schimb,
casetele de validare pot avea i valoarea 2. Aceast stare reprezint o valoare
.NULL., cu alte cuvinte, nici bifat, nici nebifat. n unele aplicaii s-ar putea s
dorii s iniializai casetele de validare cu aceast valoare pentru a stabili dac
utilizatorul a efectuat o selecie sau a srit-o pur i simplu. O caset de validare avnd
valoarea .NULL. apare sub forma unei casete umbrite.

120

Capitolul 6

6.2.11 Obiecte Spinner sau caseta de modificare valoric


Un alt control prezentat n figura 6.10 este caseta de modificare valoric, n
cazul creia trebuie s existe o valoare numeric drept surs a controlului
(proprietatea ControlSource), valoare reprezentnd numrul de exemplare. Sgeile
din dreapta casetei permit utilizatorului s incrementeze sau s decrementeze valoarea
afiat. n mod prestabilit, valoarea de incrementare este 1.00. Putei ns s nlocuii
aceast valoare cu orice alt valoare, inclusiv cu valori fracionare.

Fig.6. 10 Control spinner

Pe lng proprietatea Increment, casetele de modificare valoric sunt


caracterizate de un domeniu limit, definit de proprietile KeyboardHighValue i
KeyboardLowValue, SpinnerHighValue i SpinnerLowValue. n mod normal,
proprietile corespunztoare tastaturii i casetei de modificare valoric au aceeai
valoare. Utilizatorul nu poate introduce de la tastatur o valoare situat n afara aestui
domeniu i nu poate utiliza sgeile casetei pentru a iei n afara domeniului.

6.2.12 Obiecte Image sau obiectul imagine


Obiectul imagine este format din fiiere imagine (bmp, pcx, jpg, gif, etc) salvate sub
forma unor fiiere separate. Le putei folosi drept embleme n formulare rapoarte.
Nu le putei edita, ci doar s le afiai. Figura 6.11 ilustreaz un formular cu obiect
imagine, n care a fost utilizat fiierul WINLOGO.BMP din directorul \WINDOWS.
n mod prestabilit, atunci cnd VFP insereaz o imagine ntr-un formular,
dimensiunea acesteia va fi cea a imaginii bitmap originale. Desigur, acest lucru ar

Formulare n mediul Visual Fox

121

putea duce la suprapunerea imaginii peste obiectele existente. Putei fie s tragei
celelalte obiecte n alte poziii pentru a face loc imaginii, fie s modificai modul n
care VFP afieaz imaginea, folosind proprietatea Stretch.

Fig 6.11 Obiecte imagine n formular

Proprietatea Stretch a unei imagini identific cele trei moduri de afiare a


imaginii:
0 Clip
1 Stretch
2 Zoom
Dac selectai Clip, Visual FoxPro reteaz imaginea atunci cnd i reducei
dimensiunile n raport cu originalul. Indiferent ce marcaj de selecie folosii atunci
cnd redimensionai imaginea, Visual FoxPro repoziioneaz ntotdeauna imaginea n
funcie de colul din stnga-sus al acesteia (proprietile Left i Top). n consecin,
dac este necesar retezarea imaginii, FoxPro reteaz laturile din dreapta i de jos,
dup caz, chiar dac ai deplasat marcajul de selecie din colul din stnga-sus.
A doua opiune este Stretch care menine proporia relativ dintre nlime i
lime. n consecin, dac modificai zona imaginii njumtind-o pe lime,
opiunea Stretch njumtete automat i nlimea, pstrnd n acest fel proporiile
relative ale obiectului original.
Opiunea Zoom modific modul de afiare a imaginii, astfel nct aceasta s se
ncadreze n noile dimensiuni ale obiectului. Aceast tehnic distorsioneaz
dimensiunile relative ale imaginii, ns nu o reteaz. Orice dimensiune nemodificat
rmne intact. n consecin, o imagine redimensionat prin tragerea marcajelor de
selecie situate la mijlocul laturii superioare sau inferioare pare comprimat.

6.2.13 Obiecte Line sau obiectul linie


Obiectul linie v permite s desenai linii drepte ntre oricare dou puncte ale
formularului. Pentru a desena o linie, selectai controlul i poziionai mouse-ul n
locul n care vrei s nceap linia. Apoi executai clic i tragei mouse-ul pn la
punctul final. n timp ce tragei, vei vedea o caset reprezentnd un dreptunghi

122
Capitolul 6
imaginar care nconjoar linia, de genul celui care apare la redimensionarea unei
ferestre. Linia unete colurile opuse.
Atunci cnd eliberai butonul mouse-ului, Visual FoxPro afieaz o linie care ncepe

Fig.6. 12 Obiectul Line

n colul din stnga-sus i se termin n colul din dreapta-jos al acestei casete. Dar
dac vrei ca linia s nceap n colul din stnga-jos i s se termine n colul din
dreapta-sus? Avnd linia selectat (lucru semnalat de prezena micilor ptrate, numite
marcaje de selecie, pe laturile i n colurile dreptunghiului imaginar), deschidei
pagina Layout a casetei de dialog Properties. n continuare, selectai proprietatea
LineSlant i schimbai-i valoarea din \ n /.
Putei, de asemenea, s schimbai grosimea liniei prin modificarea proprietii
BorderWidth. Aceast valoare reprezint grosimea liniei n pixeli.
O alt proprietate interesant este BorderStyle. Ei i corespund apte stiluri de
linie diferite, stilul prestabilit fiind cel de linie continu. De asemenea, i corespund
16 stiluri diferite ale creionului (moduri de desenare). Unele dintre acestea v permit
s afiati linii care trebuie s intersecteze alte obiecte, chiar i imagini grafice. Figura
6.12 de mai sus ilustreaz cteva dintre aceste stiluri de linie.

6.2.14 Obiecte Shape


Obiectul Shape permite s creai ptrate, dreptunghiuri, ovaluri i cercuri. n

Fig. 6.13 ilustreaz diferite forme geometrice

Formulare n mediul Visual Fox

123

esen, procedura folosit pentru crearea formelor este asemntoare celei utilizate
pentru linii, cu cteva excepii.
Dreptunghiuri i ptrate
Forma prestabilit este dreptunghiul. Un ptrat este un tip special de
dreptunghi cu toate laturile egale. n mod similar, ovalurile i cercurile deriv i ele
din dreptunghiuri avnd colurile din ce n ce mai rotunjite.
Formele posed i umbrire, care n mod prestabilit este transparent. Un obiect
transparent poate avea o culoare asociat, ns fiind transparent, aceasta nu va fi
afiat. n schimb, vei vedea tot ce se gsete n spatele lui, fie c este vorba de
fundalul ecranului, de un text sau de alte obiecte. Pentru a vedea culoarea asociat
unui obiect, schimbai valoarea proprietii FillStyle din Transparent n unul din
celelalte opt modele de umplere.
Un model de umplere opac (FillStyle = 0) afieaz ntreaga suprafa a
obiectului cu culoarea (proprietatea FillColor) selectat. Pe de alt parte, dac
intenionai s tiprii formularul, testai n prealabil fidelitatea cu care imprimanta
reproduce diversele culori. Unele imprimante tipresc culorile cu o calitate destul de
slab; prin urmare, va trebui s utilizai diverse modele de umplere (proprietatea
FillStyle) n locul culorilor.
O caracteristic a modelelor de umplere este c pot fi fcute opace n raport cu
celelalte obiecte din fundal, folosind proprietatea BackStyle. n cazul modelelor de
umplere, VFP utilizeaz valoarea proprietii BackColor pentru definirea fundalului
modelului de umplere i valoarea proprietii FillColor pentru liniile modelului. n
schimb, dac atribuii proprietii BackStyle valoarea Transparent, VFP ignor
valoarea proprietii BackColor i afieaz orice obiect situat n spatele obiectului n
cauz.
O ultim caracteristic special a formelor este proprietatea SpecialEffect.
Atribuii acestei proprieti valoarea 0 pentru a da chenarului un efect tridimensional.
Din pcate, nu putei controla n nici un fel direcia sursei de lumin sau limea
umbririi. n mod prestabilit, este vorba de o form tridimensional cu sursa de lumin
venind din colul din stnga-sus al ecranului. Pe de alt parte, efectul este foarte slab
i este vizibil numai n cazul dreptunghiurilor i al ptratelor cu coluri nerotunjite i
cu o grosime a chenarului de 1.
Cercuri i ovale
Un cerc sau un oval nu este nimic altceva dect un ptrat sau un dreptunghi cu
colurile rotunjite. Practic, putei utiliza proprietatea Curvature pentru a controla
gradul de rotunjire a colurilor dreptunghiului. Un dreptunghi perfect are curbura
zero. Pe de alt parte, un oval perfect are o valoare a curburii de 99. Valorile
intermediare reprezint diverse grade de curbur a colurilor.

124

Capitolul 6

6.3 Fereastra pentru secvene de cod. Definirea metodelor


Intr-o astfel de fereastr se pot scrie secvente de program care se vor executa la
apariia unor evenimente (clic pe obiect, iniializarea obiectului, etc).
Pentru modificarea unei proprieti a unui obiect n cadrul unui formular se
poate folosi construcia:
Numeformular.Numeobiect.Proprietate = valoare
Unde numeformular se refer prin construcie la ThisForm (acest formular)
Execuia unei metode a formularului se realizeaz cu construcia
Nume form.metod
Deschiderea unei ferestre cod se poate face, astfel:
- clic dreapta pe suprafaa formularului i selectarea opiunii Code;
- dublu clic pe numele metodei din cadrul ferestrei Properties;
- selectarea optiunii Code din meniul View.

Fig.6. 12 Fereastr de cod

In interiorul acestei ferestre sunt disponibile 2 liste derulante:


Object care permite selectarea unui obiect;
Procedure care permite alegerea unei anumite metode.

6.4

Definirea proprietilor globale ale formularului

Prima etap a crerii unui formular o reprezint definirea proprietilor globale


ale acestuia. Deoarece toate proprietile au valori prestabilite, este suficient s
specificai proprietile pe care vrei s le modificai. Din fericire, nu trebuie
modificate dect cteva proprieti (din totalul de 60). Printre cele mai evidente sunt:
Dimensiunea
Poziia pe ecran
Titlul

Formulare n mediul Visual Fox

125

Culoarea de fundal i de prim-plan

Fig.6. 14 Fereastra de proprieti

Visual FoxPro mparte proprietile obiectelor n cinci pagini: Data, Methods,


Layout, Other i All ce include toate proprietile. Pentru a modifica aspectul unui
formular, afiai pagina Layout.
Figura 6.14, ilustreaz cteva proprieti ale paginii Layout. Pentru a modifica

Fig.6. 15 Proprietatea Caption

o proprietate, executai clic pe ea sau punei-o n eviden cu tastele direcionale.


Visual FoxPro afieaz valoarea curent n caseta de editare din partea superioar a
paginii. n figura 6.15 este pus n eviden proprietatea Caption, a crei valoare
prestabilit a fost deja schimbat din Form1 n Formular. Remarcai
faptul c aceast modificare este imediat reflectat n bara de titlu a formularului
propriu-zis.
n modi implicit n partea stng sus a ferestrei Properties apar trei butoane:
Primul este etichetat cu un X.

126

Capitolul 6
El anuleaz modificrile proprietii, cel puin pn n momentul n care apsai
j sau selectai o alt proprietate.
Al doilea buton afieaz un semn de validare.

Acesta verific din punct de vedere sintactic ecuaiile folosite pentru definirea
proprietii. Anumite proprieti au un domeniu de valori limitat constnd din
valori logice sau valori selectate din liste predefinite (cum ar fi cazul stilului de
chenar). Pentru aceste proprieti, butonul de validare accept pur i simplu noua
valoare n mod asemntor apsrii tastei j sau executrii unui clic pe alt
proprietate.
Al treilea buton deschide caseta de dialog Expression Builder. Folosii acest
buton pentru proprietile care accept valori calculate, cum ar fi Top, Left,
Height sau Width.
n stnga casetei de editare pot aprea o serie de butoane suplimentare, de
exemplu: o sgeat cu vrful n jos indicnd o list derulant. Multe proprieti, cum
ar fi Border Style, Draw Style, Font, toate proprietile logice i multe altele,
afieaz o list derulant. Executnd clic pe acest buton, afiati valorile posibile ale
proprietii. Nu putei introduce valori ntr-o asemenea list. De exemplu,
proprietatea Style Border afieaz patru stiluri numerotate de la 0 la 3. Caseta de
editare a proprietii nu va accepta nici o alt valoare sau caracter. (Evident, nu ar ti
ce s fac cu alte valori.) Prin urmare, spre deosebire de scrierea manual a codului,
caz n care riscai s introducei o valoare incorect, caseta de editare a proprietilor
permite numai introducerea valorilor valide.
Cteva proprieti, cum ar fi ForeColor i BackColor, afieaz un buton cu
trei puncte (puncte de suspensie). Acest buton indic faptul c la apsarea butonului
este afiat o caset de dialog cu opiuni pentru proprietatea respectiv. Executnd
clic pe acest buton, deschidei caseta de dialog Color, care afieaz o gril cu 48 de
culori predefinite. n plus, v permite s definii pn la 16 culori personalizate.
Patru proprieti definesc pozitia i dimensiunea majoritii obiectelor vizuale,
inclusiv ale formularelor. Top i Left poziioneaz colul din stnga-sus al obiectului.
n mod prestabilit, Visual FoxPro plaseaz un nou formular n colul din stnga-sus al
ecranului (Top = 0 i Left = 0). Putei fie s-i schimbai poziia folosind aceste dou
proprieti, fie s mutai fizic obiectul n fereastra Form Designer. Putei, de
asemenea, s folosii proprietatea AutoCenter pentru a centra automat formularul. n
mod similar, proprietile Height i Width definesc dimensiunile formularului.
S-ar putea s dorii s centrai formularul pe o singur direcie, pe orizontal sau pe
vertical. Nu exist nici un buton i nici o opiune pentru a face acest lucru. Atribuii
pur i simplu proprietii Left sau Top (dup caz) expresia uneia dintre urmtoarele
expresii:
Top: =(_Screen.Height This.Height) / 2
sau
Left: =( _Screen.Width - This.Width) / 2.

Formulare n mediul Visual Fox

127

Aceste expresii se bazeaz pe posibilitatea de a face referire la oricare dintre


proprietile obiectului. Suprafaa de lucru FoxPro are ntotdeauna numele de obiect
SCREEN i are aceleai proprieti referitoare la poziie i la dimensiuni ca i un
formular. Expresia utilizeaz cuvntul rezervat de referire relativ "This" pentru a
face referire la proprietile Width i Height ale obiectului.curent. This se refer la
formularul care este proiectat.
La baza ferestrei Properties, apare n majoritatea cazurilor, o scurt descriere a
proprietii.

6.5

Mediul de date

Majoritatea formularelor trebuie s fac referire la datele din unul sau mai
multe tabele. Pentru a include tabelele necesare n definiia formularului deschidei
fereastra View, Data Environment. Aceast fereastr seamn cu Table View a
instrumentului Database Designer.
Pentru adugarea de tabele n zona de lucru Data Environment, deschidei
meniul derulant Data Environment, care apare n meniul de sistem dup selectarea
proprietii. Iniial, este activat numai butonul Add. Selectai-l i alegei un tabel din
caseta de dialog Add Table sau View. Sau executai clic pe butonul drept n
fereastra Data Environment i s selectai Add din meniul derulant.
Pentru a stabili o relaie ntre mai multe tabele, executai clic pe un cmp al tabelului
principal i tragei-l n tabelul de cutare. n fereastra Data Environment apare o
linie care unete cmpul tabelului principal cu indexul corespunztor din tabelul de
cutare, dup cum se poate vedea n figura 6.16. Este de semnalat faptul c totui
trebuie s existe dinainte un index corespunzator.

Fig.6. 16 Legtura ntre dou tabele folosind Data Environment

128

6.6

Capitolul 6

Adugarea obiectelor ntr-un formular

Dup ce am definit mediul de date putem aduga obiecte n formularul nostru.


Visual FoxPro accept mai multe tipuri de obiecte. Unele obiecte nu solicit nici o
aciune din partea utilizatorului odat ce au fost definite. Acestea sunt liniile, formele
i etichetele. Celelalte obiecte trebuie s fie legate la anumite cmpuri din tabelele sau
vederile specificate n mediul de date. Exist obiecte care leag Visual FoxPro cu alte
fiiere sau aplicaii.
De exemplu, obiectul Image afieaz o imagine bitmap creat de alt aplicaie
i stocat separat sub forma unui fiier BMP. Obiectele OLE v permit s lucrai cu
documente din alte aplicaii i s le includei n aplicaia dumneavoastr.
Pentru a aduga un obiect ntr-un formular, trebuie s deschidei bara cu instrumente
Form Controls, dac nu este deja deschis. Pentru a o deschide, selectai opiunea
Toolbar din meniul derulant View i alegei Form Control.

6.7 Adugarea manual a obiectelor


Pentru a aduga orice obiect ntr-un formular, executai clic pe pictograma
acestuia dup care executai clic pe formular. Visual FoxPro afieaz obiectul cu
dimensiunea prestabilit, definit de clasa de baz. Pentru unele obiecte, cum ar fi
casetele de text sau cele de editare; va trebui s definii dimensiunea n momentul n
care le plasai. n asemenea cazuri, dup selectarea obiectului, executai clic cu
mouse-ul n formular i tragei pentru a crea un dreptunghi reprezentnd dimensiunea
obiectului. Atunci cnd eliberai butonul mouse-ului, Visual FoxPro atribuie
obiectului dimensiunile acestui dreptunghi.

6.7.1 Utilizarea instrumentului Builder pentru adugarea


manual a obiectelor
Dac plasai obiectele pe formular n maniera descris anterior, va trebui s
definii manual toate proprietile acelui obiect. Pe de alt parte, Visual FoxPro v
pune la dispoziie un instrument numit Builder (generator) care v ajut s

Fig 6.17 Pictograma Builder Lock

configurai proprietile importante ale fiecrui obiect.

Formulare n mediul Visual Fox

129

Pictograma Builder Lock (Fig 6.17)seamn cu o baghet magic. Trebuie doar s


executai clic pe ea nainte de a selecta obiectul pe care vrei s-l adugai. n
continuare, instrumentul rmne selectat pn cnd executai din nou clic. Putei, de
asemenea, s lansai un generator executnd clic cu butonul drept pe obiect i
selectnd opiunea Builder din meniu.
Exemplu 6.4
S se foloseasc generatorul Builder pentru a aduga un grup de butoane de de
tip radio.

Fig.6. 18 Prima pagina din Group Builder

Fig.6. 19 Pagina a doua din Group Builder

Fig.6. 20 Pagina a treia din Group Builder

130
Capitolul 6
Explicaii
A) nti executai clic pe butonul Builder Lock i apoi alegei opiunea dorit. n
continuare, plasai grupul de butoane n formular executnd clic o dat i
trgnd pentru a-l dimensiona. Visual FoxPro afieaz instrumentul Option
Group Builder. Acesta are trei pagini, prima dintre ele fiind prezentat n
figura 6.18. Aceast pagin definete numrul de butoane, titlurile i tipul lor.
n cazul de fa, cele trei butoane au fost definite ca butoane standard cu
titlurile: Fisier, Imprimanta i Iesire. Atunci cnd introducei numele titlurilor
sau schimbai numrul de butoane, putei vedea imediat aceste modificri n
formularul propriu-zis.
B) n cea de a doua pagin (vezi figura 6.19) definim configuraia butoanelor cu
ajutorul a trei opiuni. n primul rnd, putei plasa butoanele pe vertical sau pe
orizontal. n afara cazului n care avei puine butoane, opiunea cea mai
uzual este plasarea pe vertical. n al doilea rnd, putei schimba spaierea
butoanelor, exprimat n foxeli. i, n sfrit, putei defini stilul chenarului din
jurul grupului de butoane. Aceasta nseamn fie afiarea unei casete cu o
singur linie, fie renunarea la chenar.
C) n ultima pagin generatorul v ntreab dac dorii s salvati valoarea care
identific butonul selectat de utilizator. Aa cum rezult din figura 6.20 n
general, este vorba de un cmp al unui tabel sau al unei vederi, ns poate fi i
o variabil de memorie. Dac selectai Yes, putei selecta att tabelul sau
vederea, ct i cmpul. Pentru a selecta tabelul sau vederea, executai clic pe
butonul cu cele trei puncte. Este afiat caseta de dialog Open. Dup selectarea
unui tabel, executai clic pe sgeata cu vrful n jos a casetei cu list derulant
pentru a afia cmpurile tabelului sau ale vederii. Selectai din list cmpul
dorit sau introducei direct numele unei variabile de memorie.
Fiecare generator v ajut s definii diverse proprieti ale obiectului asociat.
Unele generatoare, cum ar fi ComboBox Builder sau List Builder, necesit
parcurgerea a pn la patru cadre de pagin pentru definirea complet a obiectului.
Altele necesit parcurgerea a numai dou pagini. n ambele cazuri, generatorul v
ajut s definii suficiente proprieti pentru a crea un obiect funcional. Ulterior,
putei oricnd reveni n caseta de dialog Properties pentru a configura alte atribute
ale obiectului, cum ar fi culorile sau fonturile.
Putei, de asemenea, s revenii la generator pentru obiecte deja existente pe ecran.
Pur i simplu selectai obiectul pe care vrei s-l trecei n revist i executai clic pe
butonul Builder din colul din dreapta sus al casetei de dialog Properties.

6.8

Proprietile tipice ale obiectelor

Orice obiect are proprieti care i definesc poziia i dimensiunile. Visual


FoxPro poziioneaz obiectele folosind coordonatele colului din stnga-sus al
acestora. Iat de ce proprietile corespunztoare se numesc Top i Left. Pentru

Formulare n mediul Visual Fox

131

definirea dimensiunilor, fiecare obiect are o nlime (Height) i o lime (Width).


Reinei faptul c nlimea se msoar de sus n jos.
Poziia i dimensiunile sunt exprimate n unitile de msur definite de
proprietatea ScaleMode. Exist dou posibiliti: pixeli sau foxeli. Pixelii sunt cei
mai uor de neles. Fiecare pixel reprezint un punct colorat pe ecran. Atunci cnd
folosii pixeli, poziionarea textului nu depinde de dimensiune sau de alte
caracteristici ale fontului, ci se reduce la o simpl numrare a pixelilor.
Pe de alt parte, Visual FoxPro definete un foxel ca fiind dimensiunea medie a
unui caracter. n cazul fonturilor neproporionale, cum ar fi Courier, dimensiunea
medie a caracterelor este identic cu dimensiunea oricrui caracter. n schimb, atunci
cnd se folosesc seturi de caractere proporionale, dimensiunea medie de un foxel nu
este riguros egal cu dimensiunea nici unui caracter. Mai mult, dimensionarea i
poziionarea obiectelor se complic deoarece nici un set aleator de cinci caractere nu
va ncpea n mod necesar ntr-o caset de text definit cu o lime de cinci foxeli.
n cazul obiectelor plasate ntr-un formular folosind ca uniti de msur
foxelii, sunt utilizate caracteristicile fontului prestabilit pentru stabilirea poziiei i a
dimensiunilor lor.
Visual FoxPro v ofer o serie de funcii care v ajut s stabilii
caracteristicile fontului. Prima funcie este FONTMETRIC() care returneaz
diverse atribute despre orice font din sistem. n tabelul 6.1 sunt enumerate
informaiile pe care le putei obine cu aceast funcie.
Tabelul 6.1
Atribut
Descriere
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

nlimea caracterelor n pixeli


Poriunea ascendent (numrul de uniti cu care depete linia de baz) n pixeli
Poriunea descendent (numrul de uniti de sub linia de baz) n pixeli
Interlinierea (spaiul dintre linii) n pixeli
Interlinierea suplimentar n pixeli
Limea medie a caracterelor n pixeli
Limea maxim a caracterelor n pixeli
Grosimea fontului
Italic (0=Nu, diferit de zero=Da)
Subliniat (0=Nu, diferit de zero=Da)
Tiat (0=Nu, diferit de zero=Da)
Primul caracter definit al fontului
Ultimul caracter definit al fontului
Caracterul prestabilit (care nlocuiete caracterele pe care fontul nu le conine)
Caracterul de desprire a cuvintelor
Distana ntre caractere i familia
Setul de caractere
Lire (lime suplimentar)
Aspectul orizontal pentru fontul de dispozitiv
Aspectul vertical pentru fontul de dispozitiv

132
Capitolul 6
Pe lng atributul fontului pe care vrei s-l obinei, trebuie s specificai numele
fontului, dimensiunea n puncte i codul stilului. Sintaxa funciei FONTMETRIC()
este urmtoarea:
FONTMETRIC (<atributul fontului>, <numele fontului>,<marimea in puncte>,
<codul stilului>)
Exemplul 6.5
S se calculeze ltimea medie a caracterelor unui font Arial, aldin, cu o
dimensiune de 14 puncte.
? FONTMETRIC(6, ARIAL, 14, B)
La scrierea acestei expresii, s-a presupus c se cunoate fontul, dimensiunea n
puncte i stilul. n cazul unui program real, nu putei face aceast presupunere. n
consecin, trebuie s folosii o alt funcie, WFONT().
Funcia WFONT() returneaz una din trei informaii posibile pentru orice
fereastr activ, n funcie de valoarea primului parametru. Valorile posibile sunt:
1 numele fontului
2 dimensiunea fontului
3 stilul fontului
Sintaxa general a comenzii este urmtoarea:
WFONT(<atribut>, <numele ferestrei>)
Exemplul 6.6
Se presupune c numele formularului deschis este FORM1, i se cer
informaiile referitoare la limea medie a caracterelor .
? FONTMETRIC (6, WFONT (1, FORM1), WFONT (2, FORM1 ), WFONT(3, ;
FORM1'))
Exemplul 6.7
Se cere s creai o caset de text de 10 caractere, folosind un font
neproporional, cum ar fi Courier. Aceast caset de text va aprea ntr-un formular
care utilizeaz un font Arial de 10 pt, normal.
= 10 * FONTMETRIC (6, Courier New, 10, N) / FONTMETRIC (6, WFONT(1,;
FORM1), WFONT(2, FORM1), WFONT(3, FORM1))
Explicaii
A) Se calculeaz ltimea necesar pentru acest obiect. Aceast ecuaie
calculeaz numrul de pixeli necesari pentru 10 caractere cu font Courier
New de 10 pt, normal. n continuare, mparte aceast valoare la numrul

Formulare n mediul Visual Fox

133

mediu de pixeli ai unui caracter din fontul formularului. Rezultatul


indic numrul de foxeli pe care trebuie s-i aib limea casetei de text.

6.9 Adugarea noilor proprieti i metode


Putei aduga noi proprieti unui formular, dac acesta este deschis. Selectai
nti formularul, dup care deschidei meniul derulant Form. Prima opiune a
meniului adaug o nou proprietate, iar a doua adaug o nou metod. Selectnd
opiunea New Property, se va afia caseta de dialog prezentat n figura 6.21.

Fig.6. 21 Optiunea New Property

Remarcai faptul c deocamdat nu putei specifica dect numele proprietii i


descrierea. Dup ce introducei aceste informaii i executai clic pe OK, VFP adaug
proprietatea n caseta de dialog New Property, la sfritul paginilor All sau Other.
Remarcai faptul c valoarea prestabilit a propietii este .F. Putei nlocui aceast
valoare cu oricare alta, executnd clic pe ea i introducnd o valoare prestabilit n
caseta de editare a proprietii. De asemenea, atunci cnd noua proprietate este pus
n eviden, descrierea introdus anterior apare n zona de descrieri situat la baza
casetei de dialog Properties.
Opiunea Form, Edit Property/Method... v permite s modificai descrierea
unei proprieti, ns nu i ortografia. Dac facei o greeal i vrei s modificai
ortografia unei noi proprieti sau metode, trebuie s o eliminai i s o adugai din
nou.
Dac adugai o metod, ea apare n caseta de dialog Properties Putei s
deschidei codul asociat formularului executnd dublu clic pe formular sau selectnd
View, Code.

134

6.10

Capitolul 6

Definirea metodelor

Programarea condus de evenimente nseamn c utilizatorul este acela care


controleaz programul. Practic, programul st pur i simplu i ateapt ca utilizatorul
s fac ceva. Acest ceva poate fi apsarea unei taste sau un clic cu mouse-ul. Odat
declanat evenimentul, programul poate rula o singur metod sau poate executa mai
multe. De exemplu, executarea unui clic cu un buton al mouse-ului declaneaz un
simplu eveniment clic. n schimb, acest eveniment poate determina programul s
ncarce un formular. Exist o serie de evenimente asociate ncrcrii formularelor,
cum ar fi INIT i WHEN att pentru formular, ct i pentru obiectele acestuia.
Acelai lucru este valabil i atunci cnd vrei s definii o aciune pentru un

Fig.6.22 Definirea unei metode

obiect al formularului. Vom considera un formular existent care v permite s


introducei personal. n continuare, programul folosete valoarea selectat pentru a
afia o list a candidatilor admisi. Figura 6.22 de mai sus ilustreaz formularul
deschis. Acest formular const din mai multe obiecte. O metod are loc n formularul
nsui. Atunci cnd formularul se deschide, el va trebui s deschid baza de date
Facultate, astfel nct s poat accesa tabelul ce are denumirea Studenti, ca i baza de
date. Puteti realiza acest lucru cu caseta de dialog Data Environment, ns ca s
vedem cum arat codul unui eveniment, ne vom ocupa de evenimentul Load al
formularului.
Pentru a deschide codul, putei s executai dublu clic pe evenimentul Load din
lista Methods a casetei de dialog Properties, pentru obiectul Form1. De asemenea,
putei s executai clic cu butonul drept oriunde pe formularul propriu-zis (nu pe un
alt obiect) i s selectai Code din meniul derulant

Formulare n mediul Visual Fox

135

Figura 6.22 prezint i caseta de dialog care apare. Ea are dou casete cu list
n partea superioar, iar dedesubt, o zon alb. Caseta cu list Object v permite s
selectai orice obiect care face parte la momentul curent din formular sau din setul
de formulare, inclusiv formularul propriu-zis. Caseta cu list Procedure afieaz
procedurile i metodele disponibile, pe care le putei defini pentru obiectul respectiv.
n cazul de fa, asigurai-v c n caseta cu list Object este afiat Form1, iar n
caseta cu list Procedure este afiat Load, unde este scris textul urmtor:
* Deschide baza de date Facultate i selecteaza tabelul Studenti
CLOSE DATABASES
OPEN DATABASE Facultate
USE Studenti
Acesta este ntregul cod necesar pentru deschiderea tabelului Personal pentru
aceast aplicaie simpl. Este, de asemenea, singurul cod introdus n obiectul Form1.

6.11 Alinierea obiectelor


Chiar dac este activat opiunea Snap-to-Grid din meniul derulant Format,
s-ar putea s nu fii mulumit de modul n care sunt aliniate obiectele de pe formular.
Pentru a le realinia pe toate, deschidei bara cu instrumente Layout selectnd-o din
meniul derulant View. Ea conine 13 opiuni pentru alinierea obiectelor, opiuni
descrise n tabelul 6.2.
Tabelul 6.2
Control
Align Left Sides
Align Right Sides
Align Top Edges
Align Bottom Edges
Align VerticalCenters
Align
Horizontal
Centers
Same Width
Same Height
Same Size
Center Horizontally

Pictogram

Descriere
Aliniaz obiectele selectate la marginea cea mai
din stnga
Aliniaz obiectele selectate la marginea cea mai
din dreapta
Aliniaz obiectele selectate la marginea situat
cel mai sus
Aliniaz obiectele selectate la marginea situat
cel mai jos.
Aliniaz centrele obiectelor selectate dup o ax
vertical.
Aliniaz centrele obiectelor selectate dup o ax
orizontal.
Ajusteaz
limile
obiectelor
selectate
aducndu-le la valoarea celui mai lat.
Ajusteaz nlimile obiectelor selectate
aducndu-le la valoarea celui mai nalt.
Ajusteaz dimensiunile obiectelor selectate
aducndu-le la dimensiunea celui mai mare.
Aliniaz centrele obiectelor selectate dup o ax
vertical care trece prin centrul formularului

136
Center Vertically
Bring to Front
Send to Back

Capitolul 6
Aliniaz centrele obiectelor selectate dup o ax
orizontal care trece prin centrul formularului
Plaseaz obiectele selectate n faa tuturor
celorlalte obiecte
Plaseaz obiectele selectate n spatele tuturor
celorlalte obiecte

nainte de selectarea unui stil de aliniere, selectai obiectele pe care vrei s le


aliniai. Le putei alinia relativ la o latur sau o ax de simetrie. Putei, de asemenea,
s centrai obiectele pe orizontal sau pe vertical relativ la formular.
Dac selectai un set vertical de obiecte, nu ncercai s le centrai pe vertical
relativ la formular. Visual FoxPro centreaz fiecare obiect n mod individual.
Rezultatul este c Visual FoxPro va plasa obiectele unele peste altele. Aceleai
precauii trebuie avute n vedere i n cazul obiectelor dispuse pe orizontal. Nu
ncercai s le centrai pe orizontal.
Putei, de asemenea, s redimensionai un grup de obiecte pentru a le aduce pe
toate la aceeai lime, aceeai nlime sau ambele.
n sfrit, dac obiecte se suprapun (cazul liniilor i al formelor care se suprapun
peste alte cmpuri), putei modifica ordinea de suprapunere cu opiunile Send to
Back i Bring to Front. Aceste dou opiuni exist i n meniul derulant Format.
Folosii bara cu instrumente Layout pentru a ordona obiectele formularului
dup ce le-ai adugat pe toate. Un formular cu obiecte de aceeai dimensiune i
aliniate de-a lungul unei laturi este mai atractiv dect unul n care toate obiectele par
s fie dispuse aleator.

6.12 Definirea ordinii de parcurgere cu tasta Tab


Nu ntotdeauna utilizarea mouse-ului pentru deplasarea de la un cmp la
urmtorul este cea mai convenabil metod. Dac utilizatorii trebuie s introduc date
n majoritatea cmpurilor sau chiar n toate, ei nu vor dori s-i ridice minile de pe
tastatur dup completarea fiecrui cmp pentru a selecta cmpul urmtor. Ar fi
preferabil s poat apsa tastele Enter sau Tab pentru a comunica programului
Visual FoxPro c au completat cmpul curent i sunt gata s treac la urmtorul.
n mod prestabilit, Visual FoxPro definete ordinea de parcurgere a cmpurilor
cu tasta f ca fiind ordinea n care adugai cmpurile n formular. Majoritatea
utilizatorilor ateapt ca deplasarea cursorului prin cmpuri s se fac fie pe vertical,
fie pe orizontal. Dac apsarea tastei T deplaseaz cursorul dintr-o parte n
cealalt a formularului, se pierde timp pentru a localiza urmtorul cmp de
introducere a datelor.
Exist dou metode de modificare a ordinii de parcurgere: interactiv i cu
ajutorul unei liste. Putei selecta metoda dorit alegnd Tools, Options, Forms i
deschidei lista derulant Tab Ordering pentru a selecta metoda dorit: Interactive
sau By List.
Dac optai pentru schimbarea interactiv (figura 6.23) a ordinii de parcugere,
selectai View, Tab Order. n colul din stnga-sus al fiecrui obiect este afiat o

Formulare n mediul Visual Fox

137

caset micu, iar n interiorul fiecrei casete se afl un numr reprezentnd secvena
de parcurgere cu tasta f.

Fig.6. 23 Parcurgere cu tasta Tab interactiv

Pentru a schimba secvena de parcurgere cu tasta f, meninei tasta S


apsat i executai clic pe caseta obiectului pe care vrei s-l modificai. Aceasta
duce la eliminarea numrului i la renumerotarea tuturor celorlalte obiecte. Dac
executai nc o dat S+clic pe aceeai caset, obiectul este plasat la sfritul
secvenei
O tehnic mai rapid presupune executarea unui clic pe primul obiect al
secvenei de parcurgere, fr apsarea tastei S. Aceasta duce la dezactivarea
tuturor numerelor i plaseaz cifra 1 n caseta obiectului curent. n continuare,
folosind metoda S+clic, executai clic pe fiecare cmp n ordinea n care vrei
ca utilizatorii s le completeze. Cnd ai terminat, executai clic pe butonul Reorder.
O alt metod de a stabili ordinea de parcurgere este cu ajutorul unei liste (By
List din Options, Forms. Acum, cnd selectai View, Tab Order, apare caseta de
dialog prezentat n figura 6.24.

138

Capitolul 6

Fig.6. 24 Ordine de parcurgere cu Tab cu ajutorul unei liste

Fiecare obiect din formular apare n lista derulant din stnga. Executnd clic
pe butoanele de deplasare din stnga numelor obiectelor i trgndu-le, putei adapta
ordinea de parcurgere dup cum dorii. Observai c, Visual FoxPro afieaz, o
pictogram, reprezentnd tipul obiectului, pentru a v ajuta s identificai obiectele.
Putei, de asemenea, s selectai butoanele By Row sau By Column pentru a defini
rapid ordinea cmpurilor. Totui, n cazul multor ecrane complexe, aceste opiuni s-ar
putea s nu dea rezultatele dorite. Dup se ai fixat ordinea de parcurgere dorit,
executai clic pe butonul OK.

6.13 Metode echivalente clauzelor comenzii READ


Un obiect este citit ntr-un formular. Transferul de la un obiect la altul se poate
face folosind tasta T. Comanda READ poate exista pn apare o comand
CLEAR EVENTS sau o proprietate TerminateRead are valoarea .T.
Utilizatorii activeaz formularele fie executnd clic pe obiectul formular, fie
apelnd metoda SHOW a formularului.
Visual FoxPro folosete metoda Show att pentru a deschide formularul, ct i
pentru a stabili dac acesta este nemodal sau modal. Comanda urmtoare afieaz
formularul nemodal, ceea ce nseamn c atunci cnd formularul este deschis,
execuia codului continu:
Form1.Show (0)
F1 = CREATEOBJ(Test_fer)
F1.Caption = Acesta este un formular de testare
F1.Show (0)
= MessageBox (Testare program!')
DEFINE CLASS test_fer AS FORM

Formulare n mediul Visual Fox

139

ADD OBJECT Exit AS COMMANDBUTTON ;


WITH Caption = QUIT ;
Top = 5
Left = 10
Height = 2
Width = 10
PROCEDURE Exit.CLICK
ThisForm.Release
ENDPROC
ENDDEFINE
Comanda Form1.Show(1) deschide formularul MODAL. n acest fel, i se interzice
utilizatorului s comute la o alt fereastr i se suspend continuarea execuiei
programului, pn n momentul n care formularul este nchis.
F2 = CREATEOBJ(Test_fereastra')
F2.Caption = Aceasta fereastra este MODAL'
F2.Show(1)
= MessageBox (`Testare program!')
DEFINE CLASS Test_fereastra AS FORM
ADD OBJECT Quit AS COMMANDBUTTON ;
WITH Caption = `QUIT'
Top = 5
Left = 10
Height = 2
Width = 10
PROCEDURE Quit.CLICK
ThisForm.Release
ENDPROC
ENDDEFINE
Dac nu furnizai nici un parametru metodei Show, VFP utilizeaz valoarea
proprietii WindowType.
Metoda Show a unui formular afieaz formularul. Atunci cnd apelai metoda
Refresh a formularului, aceasta remprospteaz formularul i toate obiectele
acestuia. Comanda este:
Form1.Refresh
Acest lucru nseamn reapelarea formularului i a obiectelor acestuia, precum i
actualizarea valorilor obiectelor.
S presupunem ns c s-a modificat valoarea unui singur obiect. Reapelarea
ntregului formular dureaz prea mult. O metod mai rapid presupune apelarea
metodei Refresh numai pentru obiectul respectiv, dup cum urmeaz:
Nume_formular.nume_obiect.REFRESH

140
Capitolul 6
Pentru a abandona un formular se poate folosi comanda
Nume_formular.RELEASE
n lumea de obiecte a mediului Visual FoxPro, metoda SetFocus este utilizat
n scopul activrii unui obiect. Fiecare obiect care permite interaciunea utilizatorului
accept aceast metod. Pentru a v abate de la ordinea prestabilit de parcurgere cu
tasta Tab, lansai pur i simplu comanda:
ThisForm.text1.SetFocus
Aceast comand cedeaz focalizarea unui obiect numit Text1.
Obiectul Timer poate fi utilizat pentru simularea efectului comenzii
TIMEOUT.
Similar clauzei Lock a comenzii READ, Visual FoxPro introduce proprietatea
BufferMode. Aceast proprietate stabilete cnd vor fi blocate nregistrrile, dup
cum este definit n tabelul 6.3.
Tabelul 6.3
Valoare
Metod
0

Nici una: nregistrrite sunt blocate i cmpurile sunt scrise atunci cnd sunt
editate.
Pesimist: nregistrrile sunt blocate de ndat ce ncepei s editai orice cmp.
Cmpurile sunt scrise n tabel n momentul deplasrii indicatorului de
nregistrri.
Optimist: Blocheaz nregistrrile numai atunci cnd se ncearc scrierea
datelor cmpurilor n tabel.

1
2

Proprietile unui formular nu permit specificarea unei scheme de culori. n


schimb, ele permit stabilirea culorilor de prim-plan, de fundal i de umplere. Pe de
alt parte, obiectele individuale accept culori de prim-plan i de fundal, precum i o
schem de culori i o surs de culori.
Atribuirea valorii 0 proprietii ColorScheme comunic programului Visual FoxPro
s utilizeze celelalte proprieti standard referitoare la culoare (ForeColor i
BackColor). De asemenea, aceast proprietate accept valori ntre 1 i 24 pentru a
asigura compatibilitatea cu schemele de culori ale versiunilor FoxPro 2.x. Pentru a
stabili o schem de culori, trebuie s folosii comanda SET COLOR SET, care caut
setul de culori n fiierul curent de resurse.
Proprietatea ColorSource are patru valori posibile, dup cum se poate vedea n tabelul
114.
Tabelul 6.4
Valoare
Utilizare
0

Utilizeaz proprietile obiectului referitoare la culoare (BackColor i


ForeColor)

1
2
3

Utilizeaz proprietile printelui obiectului referitoare la culoare


Utilizeaz schema de culori a obiectului
Utilizeaz proprietile prestabilite ale obiectului din schema de culori

6.14 Lucrul cu mai multe formulare active

Formulare n mediul Visual Fox

141

Putei lucra cu formulare active multiple prin gruparea lor ntr-un obiect de
grup numit set de formulare (Form Set). Avantajele utilizrii seturilor de formulare
fa de apelarea formularelor individuale cu instruciuni DO FORM independente
sunt urmtoarele:
Sincronizarea indicatorilor de nregistrri utilizai de fiecare formular atunci
cnd definii mediul de date la nivelul setului de formulare.
Posibilitatea de a afia (Show) i de a ascunde (Hide) toate formularele
simultan.
Posibilitatea de a aranja vizual pe ecran formularele multiple n locul stabilirii
poziiilor prin ncercare i eroare.
Pentru a crea un set de formulare, deschidei sau creai primul formular pe care
intenionai s-l includei n set. Odat activat, instrumentul Form Designer adaug
meniul derulant Form n meniul principal. Una dintre opiunile acestui meniu este
Create Form Set.
Selectarea comenzii Form, Create Form Set duce la adugarea automat a
formularului n set. Pentru a aduga formulare suplimentare, alegei Add New Form
din meniul Form. Aceast comand deschide un formular gol.

6.14.1 Referirea obiectelor situate n alt formular al setului


de formulare
Se poate stabili proprietatea unui obiect din formularul curent prin preluarea
proprietii din alt formular al setului, folosind o instruciune de genul urmtor:
ThisForm.Label.Caption = ThisFormSet.Form2.Text3.Value
Aceast expresie preia proprietatea Value a unei casete de text numite Text3,
aparinnd unui formular numit Form2 din setul curent de formulare, apoi o atribuie
proprietii Caption a unei etichete numite Labell din formularul curent.
Tot la fel, putei configura proprietatea oricrui obiect aparinnd unui alt formular
dintr-un set de forrnulare, folosind instruciuni de genul urmtor:
ThisFormSet.Form2.Label2.Caption = Angajat
sau
ThisFormSet.Form2.Label2.Caption = ThisForm.Text3.Value
Prima dintre aceste dou expresii atribuie un ir invariabil proprietii Caption a unei
etichete aparinnd formularului Form2 din setul curent de formulare. A doua
expresie folosete valoarea dintr-o caset de text numit Text3 aparinnd
formularului curent pentru a actualiza proprietatea Caption a aceleiai etichete.
Este simplu s transferai date dintr-un formular n altul n cadrul unui set de
formulare, att timp ct avei n vedere ierarhia numelor utilizate pentru a face
referire la fiecare obiect.

142

Capitolul 6

6.14.2

Transferul controlului ntre formulare

Atunci cnd rulai un set de formulare, Visual FoxPro utilizeaz ordinea n care
au fost definite obiectele fiecrui formular drept secven prestabilit de parcurgere
cu tasta Tab. De asemenea, folosete ordinea n care formularele au fost adugate n
setul de formulare pentru a defini ordinea de parcurgere a formularelor distincte cu
ajutorul tastei Tab. Atunci cnd utilizatorul completeaz toate obiectele primului
formuiar, Visual FoxPro transfer focalizarea n urmtorul formular i aa mai
departe. Atunci cnd utilizatorul ajunge la ultimul obiect al ultimului formular,
focalizarea este transferat ciclic primului obiect. Acest proces continu la infinit, cu
excepia cazului n care proprietatea TerminateRead a unui formular are valoarea .T.
sau dac este ntlnit o comand de genul:
ThisFormSet.Release
Aceast comand elimin toate formularele setului de formulare.

6.14.3

Gestionarea formularelor

Proprietatea WindowType a setului de formulare poate avea una dintre cele


patru valori enumerate n tabelul 12.12.
Tabelul 6.9 Valorile proprietii WindowType pentru seturile de formulare
Valoare
Utilizare
0

1
2

Modeless. Utilizatorul poate selecta orice obiect din orice formular al setului
de formulare. De asemenea, poate selecta din meniu sau din orice alt
formular activ n momentul respectiv. Aceast opiune permite utilizatorului
un maximum de control asupra aplicaiei
Modal. Utilizatorul poate selecta orice obiect din orice formular, cu condiia
ca acesta s fac parte din setul de formulare. Nu este posibil selectarea din
meniu sau din alte formulare active n momentul respectiv.
Read. Execuia se oprete la comanda care activeaz setul de formulare.
Execuia programului se reia de ndat ce utilizatorul nchide setul de
formulare.

6.15 Exemplu de realizare a unei aplicaii folosind form-uri.


Se consider baza de date CUITE. Se va realiza o aplicaie prin care vor fi
vizualizate datele despre cuite, reperele care intr pe acestea precum i operaiile
aferente prelucrrii unui anumit tip de cuit. Totodat se vor elabora documente
economice: document de lansare, document bon de material
Baza de date CUTITE

Formulare n mediul Visual Fox

Principalele fiiere de date sunt:


Fiierul de date Articole_cutite

Fiierul de date Repere

Fiierul de date Operaii

143

144

Formularul pentru lansarea n execuie a aplicaiei este:

Formularul n faza de proiectare este:

Cu ajutorul butoanelor se realizeaz micarea n interiorul aplicaei

Capitolul 6

Formulare n mediul Visual Fox

145

La execuia unui click pe unul dintre butoanele inceput, sfrit, prec, next,
close se realizeaz deplasarea nainte, napoi, la sfrit, respectiv nceput de fiier i
se prsete aplicaia. Totodat butoanele permit vizualizarea reperelor a fiei
tehnologice, scrierea unui formular de lansare, bon de material sau comanda unei
cuit
Procedura de poziionare la nceputul fiierului
GO TOP
THISFORM.REFRESH()

Procedura de poziionare la sfritul fiierului


SKIP 1
IF eof()
??chr(7)
WAIT WINDOW nowait "la sfarsit de fisier"
GO bottom
ENDIF
THISFORM.REFRESH()
GO bottom
THISFORM.REFRESH()

Procedura de poziionare pe nregistrarea urmtoare


SKIP 1
IF eof()
??chr(7)
WAIT WINDOW nowait "la sfarsit de fisier"
GO bottom
endif
THISFORM.REFRESH()

Procedura de poziionare pe nregistrarea precedenta


SKIP -1
IF bof()
??chr(7)
WAIT WINDOW nowait "la inceput de fisier"
GO top
ENDIF
THISFORM.REFRESH()

Procedura de prsire a aplicaiei


RELEASE classlib flatbtn
RELEASE classlib clasa_cutit
RELEASE all
CLEAR EVENTS
CLOSE ALL

Formularul pentru prezentarea reperelor este:

146

Capitolul 6

Formularul pentru fisa tehnologica este:

Faza de proiectare a formularului pentru fia tehnologic este:


Obiectul
text

Obiectul Grid
Obiectul
eticheta

Obiectul
edit

Formulare n mediul Visual Fox

147

Formularul de lansare

Formularul pentru bon material

Concluzii
Formularele sunt entiti foarte importante n mediile software vizuale. Ele
permit realizarea relativ uoar a unei interfee pentru o aplicaie utilizator, folosind
obiectele i clasele predefinite. Un formular poate exista ca o entitate separat putnd
fi lansat n execuie prin comanda: DO FORM. ntr-un formular pot exista mulimi de
formulare, astfel nct se pot realiza aplicaii complexe numai din formulare.
Formularul se poate salva sub forma unei clase de obiecte, lucrul important din punct
de vedere al programrii orientate obiect.

Capitolul

7
GENERATORUL DE RAPOARTE
Rapoartele sunt programe care afieaz pe ecranul moitorului sau la
imprimant, diverse informaii obinute din unul sau mai multe tabele. Strctura
general a unui raport cuprinde trei etape:
de preluare a parametrilor necesari construirii raportului;
de prelucrare a datelor din bazele de date, adic de extragere a datelor
din baza de date i prelucrarea lor ntr-o form ct mai apropiat de cea
a raportului, de obicei se creaz o tabel temporar sau o interogare pe
baza creia este construit raportul;
de prezentare exterioar a raportului, datele fiind aranjate conform
cerinelor utilizatorului.
n VisualFoxPro exist dou metode de a realiza rapoarte:
1. metoda clasic prin care se construiesc programe de listare sau
vizualizare folosind instruciuni de intrare ieire Fox;
2. folosind generatorul de rapoarte cu ajutorul cruia se realizeaz
raportul ntr-un fiier cu extensia .FRX.
n general un raport poate fi construit pe lng o form dar n acest caz
aceasta trebuie s conin un buton prin care este apelat raportul. Un raport
conine datele existente n una sau mai multe tabele.
Folosind generatorul de rapoarte, un raport poate fi construit n dou
moduri i anume folosind modul Design sau utilitarul Wizard. n cazul n care se
folosete utilitarul Wizard se pot construi trei tipuri derapoarte i anume:
raport totalizator, care conine cmpuri totalizatoare sau
subtotalizatoare;
raport one to many n care se alege o tabel printe i una sau mai
multe tabele copil;
raport clasic n care se prezint datele dintr-o tabel.

7.1

Structura unui raport

Structura unui raport poate diferi foarte mult de la caz la caz. Un exemplu
este raportul wizard pe fiierul Benef (figura 7.1) din baza de date Prod.

148

Capitolul 7

Fig 7.1 Raport Wizard pe o baz de date

Raportul conine un titlu, un cap de tabel (nume, adresa) i informaiile


existente n tabel. Fizic raportul exist sub forma unui fiier cu extensia .FRX.
Structura raportului este prezentat n figura 7.2:

Fig. 7.2

Nume i adresa sunt cmpuri alese din fiierul Benef, sub titlu este pus
implicit data curent iar n zona footer este pus numrul de pagin. n general un
raport conine trei zone:
Page Header unde este introdus titlul raportului, i capul de tabel.
Titlul raportului poate apare doar pe prima pagin;
Zona Detail n care sunt introduse informaiile din tabele

Generatorul de rapoarte

149

Page Footer n care sunt introduse informaii care se vor afla n partea
de jos a paginii.

Fig. 7.3 Raport totalizator

Un raport totalizator este prezentat n figura 7.3. El a fost realizat pe baza tabelei
STOCURI fig. 7.3_1 din baza de date Prod (figura 7.1).
Structura unui astfel de raport este prezentat n figura 7.4

Fig 7.3_1 Datele din tabela Stocuri

Fig. 4
Fig 7.4 Structura raportului din tabela Stocuri

150

Capitolul 7

n cazul unui raport totalizator vor apare seciuni noi, datorit faptului c
de data aceasta informaiile trebuie grupate pentru a se obine situaii
totalizatoare. Gruparea s-a fcut dup cmpul cod_produs i s-a obinut un
subtotal pe cmpul cantitate pentru fiecare produs i pentru toate produsele.
Comanda de creare a unui raport este CREATE REPORT <nume raport> sau din
meniul FILE->NEW-. REPORT din fereastra New care apare.
Efectul este apariia pe ecran a ferestrei din figura 7.5

Fig. 7.5 Proiectarea raportului

Dup cum se observ din figur raportul construit cu Constructorul de rapoarte


este format din trei benzi i anume:
Antet de pagin (Page Hader);
Detalii (Detail);
Subsolul paginii (Page Footer).
Fiecare band va genera n raportul afiat mai multe instane ale sale sau
obiecte ale sale. Antetul de pagin va conne instane care vor apare pe fiecare
pagin. Ea are attea instane cte pagini are raportul.
n Visual FoxPro benzile unui raport sunt urmtoarele:
Detail este banda de baz, ea conine informaiile din tabel;
Title conine titlul raportului care va apare doar pe prima pagin i
eventual capul de tabel dac acesta nu trebuie s apar pe fiecare
pagin.
Summary sau rezumat se folosete pentru a specifica zona de sfrit a
raportului i apare o singur dat pe ultima pagin a raportului i poate
conine informaii referitoare la totaluri grupate pe anumite informii;
Page Header specific textul care apare pe fiecare pagin;
Page Footer specific tectul care apre la subsolul fiecrei pagini;
Group Header n antetul grupului de nivel n i Group Footer n
subsolul grupului de nivel n apar datorit faptului c fiecare criteriu de
grupare genereaz mai multe grupuri n raportul final, funcie de
valorile cheii de grupare. La nceputul fiecrui grup va pare antetul iar
la sfrit subsolul de grup;

Generatorul de rapoarte

151

Column Header antetul de coloan i Column Footer subsolul de


coloan araqt faptul c la nivel de coloan poate fi specificat un antet
i un subsol
Aa cum se vede din figura 7.5 nu toate benzile apar la pornirea
constructorulu de rapoarte dar ele pot fi generate ulterior. La limit o band
poate avea nlimea zero, ceea ce nseamn c ea nu va apare n raportul
generat. Banda de titlu i de concluzii (Summary) sunt generate prin activarea
opiunii Title/ Summary din meniul Report (bara de titlu).

7.2

Proprietile benzilor raportului

Dac se execut dublu clic pe o anumit band va apare o fereastr


corespunztoare fig 7.6

Fig. 7.6 Proiectarea unei benzi

Dimensiunea benzii este stabilit de ctre caseta Height.


Dac se dorete ca toate instanele benzii s aib aceai dimensiune se
poate activa butonul Constant band Height;
On entry permite evaluarea unei anumite expresii nainte de afiarea
benzii;
On exit determin evaluarea unei expresii dup afiarea benzii.

7.3

Proprietile n ansamblu ale unui raport

Fig. 7.7 Opiunea Page Setup

152

Capitolul 7

Setarea caracteristicilor paginii raportului se poate face activnd opiunea


Page Setup din meniul File figura 7.7
Number definete numrul de coloane;
Width ltimea unei coloane;
Spacing distana dintre coloane. n cazul n care avem o singur
coloan atunci valoarea Spacing este inhibat;
Whole Page permite alegerea ntregii pagini fizice de hrtie pentru
listare;
Printable Page permite alegerea numai a zonei tipribile a paginii;
Left Margin definete un spaiu suplimentar care este rezervat
pentru marginea din stnga a raportului

7.4

Mediul de date al raportului

Mediul de date al unui raport, se configureaz n fereastra mediului


deschis prin alegerea opiunii Data Environment a meniului View. Automat
va apare n meniul principal opiunea Data Environment. Folosind opiunea
ADD se adaug tabele vederi sau interogri noi la raport. Acestea vor fi deschise
automat n momentul n care este deschis raportul. Proprietile ferestrei Data
Environment se pot seta activnd opiunea Properties din meniul care apare
dac se execut click pe butonul din dreapta al mouse-ului, n timp ce acesta se
gsete n fereastr (fig. 7.8). Metodele permit apelarea dinamic a tabelelor n
timpul rulrii unui raport.

Fig. 7.8 Fereastra Data Environment

Principalele metode (Methods) sunt:


Before Open Tables, Open Tables, stabilesc fiierele care vor fi deschise
nainte de rularea raportului, comenzile pentru deschiderea efectiv a
fiierelor i selecta rea tabelei curente;
AddObject, Remove Obiect permite adugarea respectiv trgerea unui
nou obiect la fereastra de stare;
Close Tables nchide efectiv tabelele specificate;
After Close Table aciunile care se intreprind dup nhiderea tabelelor.

Generatorul de rapoarte

153

Opiunea Data definete proprietile mediului care sunt:


InitialSelectedAlias stabilete tabela selectat iniial;
AutoOpenTables determin deschiderea automat a tabelelor specificate
n mediul de date dac are valoarea .T.;
AutoCloseTables determin nchiderea automat a tabelelor specificate n
mediul de date al formei
n cazul n care se definete un mediu de date specific unui anumit raport este
indicat s se defineasc o sesiune privat de lucru pentru respectivul raport
alegnd opiunea Private Data Session a meniului Report.

7.5

Fontul implicit al raportului

O alt setare global care se poate efectua asupra unui raport este alegerea
fontului implicit, care se realizeaz din meniul Report opiunea Default Font.

7.6

Controalele Raportului

Controalele care pot fi folosite ntr-un raport sunt active prin acionarea
butonului respectiv de pe bara Controls Report. Butoanele din bara de stare
Controls Report sunt prezentate n figura 7.9.

Fig 7. 9 Butoanele Controls Report

Butonul etichet sau Text permite introducerea unui text explicativ n


raport. Specific acestui tip de instan este faptul c poate fi ales un anumit Font
din meniuil Format sau din meniul care apare executnd click pe butonul din
dreapta al mouse-ului.
Butonull Field este unul dintre cele mai importante i permite alegerea
unor cmpuri din tabela de date pentru a fi vizualizate n raport. Proprietile
acestui obiect se pot defini n fereastra Report Expression care apare implicit
atunci cnd se creaz un obiect Field nou sau n cazul n care se execut dublu
click pe un obiect cmp existent sau se alege opiunea Properties din meniul ce
apare prin click, pe butonul din dreapta cu mouse-ul poziionat pe obiect (fig
7.10)

154

Capitolul 7

Fig. 7.10 Alegerea cmpurilor ntr-un raport

n caseta Report expression se definete cmpul dorit sau o expresie de orice


tip admis de ctre mediul VisualFox. Poziia cmpului este determinat de ctre
casetele:
Float este poziia mobil adic un obiect se poziioneaz n pagin
funcie de obiectele definite deasupra lui;
Fix relative to top band este poziie relativ la marginea superioar a
benzii adic, poziia cmpului se calculeaz funcie de marginea
superioar a benzii n cazul n care aceasta este variabil;
Fix Relative to bottom of band pozziia cmpului este considerat
fix dar ea se calculeaz relativ la marginea inferioar a benzii;
Comutatorul Strech with overflow determin extinderea unui obiect att
ct este necesar pentru a putea fi vizualizat
Butonul Calculation definete cmpul calculat Funcia dup care se
calculeaz poate fi:
Nothing nu se calculeaz;
Count n cmp se afieaz numrul de nregistrri ale tabelei
Sum calculeaz suma valorilor dintr-un anumit cmp;
Average calculeaz media aritmetic;
Lowest calculeaz cea mai mic valoare;
Highest calculeaz cea mai mare valoare.
n cazul n care datele sunt grupate momentul aducerii la 0 al unui cmp este
stabilit cu ajutorul listei derulante Reset din fereastra Calculate Field i pot fi la
sfritul paginii, la sfritul raportului sau la sfritul coloanei n cazul n care
raportul se deruleaz pe mai multe coloane.
Modul n care apare cmpul este definit n fereastra format (fig 7.11)

Generatorul de rapoarte

155

Fig. 7.11 Fereastra Format

n aceast fereastr se alege tipul datelor din cmp i modul de tiprire al


cmpului: cu litere mari, cu ignorarea mtii de intrare, cu setarea datei
calendaristice, modul de aliniere etc.

7.7

Gruparea datelor n raport

Obinerea unor totaluri sau subtotaluri ntr-un raport este un lucru


deosebit de important ntr-un raport pot exista mai multe niveluri de grupare.
Fiecare criteriu de grupare este caracterizat printr-o expresie, care se evalueaz
pentru fiecare instan a benzii. Vor forma un grup acele instane care corespund
aceleiai valori ale expresiei de grupare. Un nivel de grupare adugat la raport
aduce cu sine o band de antet de grup, afiat la nceputul fiecrui grup de
nivelul respectiv i una de subsol de grup, afiat dup fiecare grup de nivelul
respectiv.
Exemplul 7.1
S se creeze un raport care s returneze preul tuturor produselor de
acelai tip din fiierul Produse.dbf al bazei de date Prod. Dbc i valoarea total a
acestora.
Gruparea datelor se realizeaz folosind opiunea Data Grouping din
meniul Reset. Lista Group Expression conine cte o linie pentru fiecare nivel
de grupare (fig 7.12).

156

Capitolul 7

Fig 7.12 Fereastra de grupare Data Grouping

Se alege cmpul DENUMIRE ca i criteriu de grupare. Inserarea unui nou


criteriu de grupare se poate realiza folosind butonul Insert. tergerea unui
criteriu de grupare se realizeaz folosind butonul Delete. Funcie de dorina
utilizatorului se poate lista fiecare grup pe pagin nou, se poate reseta numrul
de pagin la valoarea 1 dup fiecare grup sau se poate lista antetul de grup pe
fiecare pagin. Subtotalurile , adic totalurile pentru fiecare denumire de produs
se calculeaz n cmpul PRET din banda Group Footer (fig 7.13)

Fig. 7.13 Fereastra Calculate field

Generatorul de rapoarte

157

n caseta Reset se introduce numele cmpului de grupare dup care se va face


totalul. Se va folosi funcia SUM(). n cmpul pentru totalul general, din banda
Summary, n caseta Reset, din fereastra Calculation se va folosi opiunea END
OF REPORT.
Structura raportului este prezentat n figura 7.14 iar rezultatele execuiei
raportului n figurile 7.15,7.16.

Fig 7.14 Structura Raportului

Fig 7.15 Raportul n faza de execuie

158

Capitolul 7

Fig 7.16 Raportul n faza de execuie

7.8

Folosirea variabilelor n construirea rapoartelor

n cadrul unui raport poate fi necesar folosirea variabilelor. De exemplu


n cazul n care este calculat o sum i aceasta va fi folosit de mai multe ori n
tr-un raport, este de preferat ca aceast sum s apar ntr-uo variabil. Definirea
unei variabile se realizeaz n fereastra Report Variables obinut prin alegerea
opiunii Variabiles a meniului Report.
Exemplul 7.2
S se realizeze un raport pe fiierul Stocuri.dbf din baza de date Prod.dbf, n care

Fig. 7.17 Structura raportului pe fiierul Stocuri

s se vizualizeze cantitatea total pe produs i cantitatea total de produse existent n

Generatorul de rapoarte

159

fiier. Totodat s se vizualizeze cantitatea medie pe articol existent n fiier

figura 7.17.
Gruparea nregistrrilor se face dup cod produs. Pentru a afia media pe
articole se alege o variabil cu numele VAR figura 7.18

Fig 7.18 Fereastra de definire a variabilelor

Se va alege funcia AVG pe cmpul cantitate. Explicarea cmpurilor se va face


din figur.
Pentru a afia un raport pe ecran poate fi folosit comanda:
REPORT FROM <nume_raport> PREVIEW
sau poate folosi butonul cu acelai nume din fereastra Report. Rezultatele din

Fig. 7.19 Rezultatele raportului pe fiierul Stocuri

160

Capitolul 7

acest raport sunt ilustrate n figura 7.19


Elementele semigrafice linie, dreptunghi, elipse se vor folosi acionnd
butoanele cu acelai nume.
Pentru introducerea unei imagini se folosete tehnologia OLE de incorporare
i legare ale obiectelor. n fereastra care apare opiunile:
Clip picture pstreaz dimensiunile originale ale imaginii;
Scale picture, retain shape se redimensioneazaginea pstrndu-se
proporiile iniiale astfel ca imaginea s ncap ct mai bine n cadru;
Scale picture, fill the frame se redimensioneaz imaginea dar nu mai
sunt pstrate proporiile originale, imaginea fiind eventual deformat
pentru a umple complet cadrul rezervat n raport.

Concluzii
n general orice aplicaie are nevoie de programe prin care sunt vizualizate
datele prelucrrilor, fie pe ecran, fie la imprimant. Un instrument deosebit de
util pentru realizarea acestui lucru este Genertorul de Rapoarte prin care poate fi
realizat rapid i corect n mod interactiv orice situaie dorit. Practic cu
Generatorul de Rapoate, se poate elimina scrierea de cod obiect n programele
de listare a unei aplicaii

S-ar putea să vă placă și