Documente Academic
Documente Profesional
Documente Cultură
Note de Curs
Introducere
INTRODUCERE
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
Introducere
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
Capitolul 1
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.
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
1.1.3
Fereastra de comand
12
Capitolul 1
.MPR
.QPR
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
Un cuvnt la stnga
La nceputul textului
La sfritul textului
14
Capitolul 1
Tabelul 1.4
Opiune
Explicaii
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
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
15
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
16
Capitolul 1
Opiunile ferestrei de dialog Find sunt prezentate n tabelul 1.6.
Tabelul 1.6
Opiune
Explicaii
Look For
Replace
Search backward
Find Next
Math wholee word
Match case
Use wildcards
Wrap around
Zona Scope
Concluzii
Meniul sistemului Visual, este un instrument important n apelarea sau
proiectarea rapid a diferitelor entiti ale mediului. Multitudinea de subopiuni ale
17
Capitolul
19
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 3 Meniul Table prin care pot fi ntreprinse diverse aciuni asupra tabelelor din baza de date
20
Capitolul 2
21
Character
Descriere
Orice caracter admis de ctre
calculator
Mrime
1 pn la 254 de
caractere
Rang
Orice caracter
Descriere
Mrime
Date
Date Time
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.
22
Capitolul 2
8 bytes
8 bytes n
memorie;
4 bytes
+/-2.94065645841247E-324 la +/8.9884656743115E307
- .9999999999E+19 la
.9999999999E+20
-2147483647 la 2147483647
Memo (Binary)
Descriere
Mrime
Rang
Tipul de dat Variant, nu apare la crearea fiierelor de date, dar ele exist n
mediul VFP.
23
Tipul
cmpului
Variant
Mrime
Rang
24
Capitolul 2
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
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).
26
Capitolul 2
Nume cimp1
Tip
Lungime
Zecimale
Nume cimp2
NULL
NOT NULL
CHECK
ERROR
DEFAULT
PRIMARY KEY
UNIQUE
REFERENCES
27
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
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
!
$
29
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
30
Capitolul 2
31
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
34
Capitolul 2
35
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
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
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
2.2.3
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
41
B
C
D
E
F
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.
43
2.5.1
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 informaiilor stocate ntr-un fiier de date se poate face cu una din
comenzile :
CHANGE
EDIT
BROWSE
REPLACE
45
[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]]
46
Capitolul 2
[COLOR SCHEME <expN6>
47
[:H = <expC3>]
[:W = <expL1>]
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.
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
Semnificaie
FONT i STYLE
FORMAT
FREEZE
LAST
LEDIT i REDIT
LOCK
LPARTITION
NOLINK
NOOPTIMIZE
NOREFRESH
NORMAL
NOWAIT
PARTITION
PREFERENCE
REST
SAVE
TIMEOUT
TITLE
WIDTH
WINDOW
COLOR
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]
51
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
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
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().
53
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
54
Capitolul 2
55
RELATIONS
BROWSE
OPEN
CLOSE
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.1
56
Capitolul 2
57
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.
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
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
61
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
3.1.3
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 ).
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
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.
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.
71
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
73
74
Funcie
Semnificaie
SUBSTR(<expC>,
<expN1>,
[<expN2>])
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
?PADL(Anul I,15,*)
*********Anul I (n
caractere)
total
15
?PADR(Anul I,15,*)
Anul I********* (n
caractere)
total
15
75
?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
?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
PROPER(<expC>)
?LOWER(AAAbbCCC)
aaabbccc
?UPPER(universitate
UNIVERSITATE
?PROPER(universitate)
Universitate
77
SOUNDEX(<expC>)
?LIKE(calc*,calculator)
.T.
?CHRSAW()
.F.
?SOUNDEX(FFFF)
F000
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
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
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.
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
Pentru a copia coninutul unui cmp memo ntr-un fiier se folosete comanda:
COPY MEMO <cmp memo> TO <fiier > [ADDITIVE]
A
B
C
D
3.2.3.1
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>
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
83
3.2.4
Tipul numeric
INT(<expN>)
Semnificaia
Tabelul 3.15
Exemplu
program
84
Capitolul 3
partea ntreag
CEILING
(<expN>)
FLOOR
(<expN>)
ROUND(<expN1
>, <expN2>)
EXP(<expN>
LOG(<expN>)
MAX(<expN1>,
expN2>)
MIN(<expN1>,
expN2>)
RAND
[(<expN>)]
FIXED(<expN>)
FLOAT(<expN>
)
?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
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
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
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
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)
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
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>)
?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
90
Capitolul 4
NU
DA
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
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.
Instruciuni de selecie
93
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)
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.
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
Instruciuni de selecie
97
98
Capitolul 4
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.
99
DA
DA
NU
100
Capitolul 5
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
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.
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.
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.
104
Capitolul 5
105
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.
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.
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.
108
Capitolul 6
Descriere
Caset de text
Caset de editare
Buton de
comand
Grup de butoane
Grup de butoane
de opiune
Caset de
validare
Caset cu list
Caset de
modificare
valoric
Grid
Control cu
imagine
Timer
Cadru de pagin
OLE 2.0
Legtur OLE
Linie
Shape
109
Separator
Blocare generator
Blocare buton
Button Lock
Container
Control WEB
110
Capitolul 6
111
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.
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.
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.
113
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
115
Se adaug la formularul prezentat la exemplul 6.1 obiectul Edit Box prin care
sunt vizualizate date suplimentare
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.
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
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.
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.
119
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
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.
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
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.
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.4
125
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.
127
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.
128
6.6
Capitolul 6
129
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
131
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
133
134
6.10
Capitolul 6
Definirea metodelor
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.
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
137
caset micu, iar n interiorul fiecrei casete se afl un numr reprezentnd secvena
de parcurgere cu tasta f.
138
Capitolul 6
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.
139
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
1
2
3
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.
142
Capitolul 6
6.14.2
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
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.
143
144
Capitolul 6
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()
146
Capitolul 6
Obiectul Grid
Obiectul
eticheta
Obiectul
edit
147
Formularul de lansare
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 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.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.
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. 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
Generatorul de rapoarte
151
7.2
7.3
152
Capitolul 7
7.4
Generatorul de rapoarte
153
7.5
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.
154
Capitolul 7
Generatorul de rapoarte
155
7.7
156
Capitolul 7
Generatorul de rapoarte
157
158
Capitolul 7
7.8
Generatorul de rapoarte
159
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
160
Capitolul 7
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