Documente Academic
Documente Profesional
Documente Cultură
PRELUCRAREA
DATELOR
32
repetat (caz n care este mai avantajoas realizarea unui program, a unei forme, care s
automatizeze operaiile respective);
una prin cod sau prin intermediul limbajului FoxPro: aceast metod const n folosirea
diferitelor comenzi, fie n diferite programe sau metode ale unor forme, rapoarte etc; realizarea
unui sistem informatic necesit folosirea acestei metode, prin construirea unor forme, rapoarte i
a altor elemente, n ale cror cmpuri sunt introduse comenzi de prelucrare a datelor din bazele
de date.
Comanda USE deschide tabela <tabel>, ce face parte din <baz_de_date>, n zona de lucru curent
sau ntr-o alt zon specificat n comand. Modul de acces la coninutul tabelei, adic modalitatea n care se
ajunge la nregistrrile acesteia, poate fi:
secvenial, cnd pentru obinerea unei informaii anumite trebuie s parcurgem toate
nregistrrile anterioare;
direct, cnd putem stabili unde anume pe suport este nregistrarea vizat i o utilizm fr s ne
preocupm de nregistrrile anterioare; acest tip de acces este asigurat de o etichet index
adecvat ataat tabelei - <etichet_index>; prin indexare, ordinea fizic a nregistrrilor din
tabel nu se modific, se schimb ns modul n care utilizatorul are acces la datele acesteia;
prima nregistrare a tabelei indexate o constituie cea corespunztoare celei mai mici
(ASCENDING)/mari (DESCENDING) valori a cheii de indexare, iar ultima nregistrare a
fiierului indexat este cea care conine cea mai mare (ASCENDING)/mic (DESCENDING)
valoare a cheii de indexare.
Pentru tabela nou deschis, se poate defini un pseudonume <alias>, ce va putea fi folosit n
comenzile de prelucrare a tabelei, n locul numelui acesteia.
33
CONTINUE
Comanda LOCATE parcurge tabela curent cutnd prima nregistrare pentru care <cond1> este
ndeplinit. Dac comanda are succes, funcia RECNO ( ) va returna numrul nregistrrii localizate, iar
funcia FOUND ( ) va lua valoarea logic .T. Dac LOCATE gsete o nregistrare, se poate folosi comanda
CONTINUE pentru a cuta urmtoarele nregistrri din tabela curent care ndeplinesc condiia <cond1>. La
execuia comenzii CONTINUE, procesul de cutare continu de la nregistrarea imediat urmtoare celei
gsite anterior. Comanda CONTINUE poate fi executat repetat pn la detectarea sfritului de fiier sau
pn la epuizarea domeniului de cutare stabilit prin clauza <domeniu> a comenzii LOCATE sau pn la
execuia unei alte comenzi LOCATE.
Dac LOCATE nu gsete nici o nregistrare corespunztoare, funcia RECNO ( ) va returna o
valoare egal cu numrul total de nregistrri plus 1 (RECCOUNT ( ) + 1), iar FOUND ( ) valoarea .F. n
mod implicit, comanda LOCATE caut prima nregistrare care ndeplinete condiia <cond1> n ntreaga
tabel. Se poate reduce domeniul de cutare (ALL) incluznd clauza <domeniu> n sintaxa comenzii, n una
din urmtoarele forme: NEXT, RECORD sau REST. Totodat, se poate limita cutarea incluznd clauza
WHILE <cond2> n sintaxa comenzii LOCATE, aceasta avnd loc atta timp ct condiia <cond2> este
adevrat.
4. Comenzi de localizare a nregistrrilor n acces direct
SEEK <expr>
[ORDER [TAG] <etichet_index>
[ASCENDING | DESCENING]]
[IN <zon_de_lucru>]
Comanda SEEK caut prima nregistrare din tabela curent sau din cea deschis n zona de lucru
specificat prin <zon_de_lucru>, pentru care valoarea cheii de indexare este egal cu <expr>. Cutarea se
poate face pe baza etichetei index curente sau prin intermediul celei specificate prin <etichet_index>.
Dac valoarea <expr> nu se regsete printre valorile cheii de indexare, dar setarea curent SET
NEAR are valoarea ON, prin comanda SEEK se va localiza nregistrarea corespunztoare celei mai
apropiate -mai mari- valori a cheii de indexare de valoarea expresiei <expr>.
Dac expresia <expr> este alfanumeric i nu se regsete exact printre valorile cheii de indexare, dar
setarea curent SET EXACT are valoarea OFF, prin comanda SEEK se va localiza nregistrarea pentru care
<expr> constituie un subir stng al cheii de indexare.
34
Numrul nregistrrii localizate prin intermediul comenzii SEEK este returnat de funcia RECNO ( ),
iar funcia logic FOUND ( ) va lua, n aceast situaie, valoarea .T.
5.
do form form2
do form form3
LOCATE
CONTINUE
Fig. 2.2 Cutarea secvenial. Comenzile LOCATE i CONTINUE
procedura cmdAfisare_Click( )
open database aplic
use magazin
locate for val(cod) = val(thisform.txtcod.value)
do while found( ) and not eof( )
browse noedit nodelete title "afisare"
continue
35
enddo
use
close databases
SEEK
6.
36
Exist diferite modaliti de acces la nregistrrile unei tabele n vederea implementrii algoritmilor de
prelucrare a datelor coninute de ctre acestea.
n = RECCOUNT ( )
FOR i = 1 TO n
<prelucrare_nregistare_curent>
SKIP
ENDFOR
CLOSE TABLES
CLOSE DATABASES
7. Vizualizarea coninutului tabelelor
comenzile ? i ??
? | ?? [<expr1> [ PICTURE <format 1>] [FUNCTION <format 2>]
[ AT <nr> ]
[, <expr2> ..]]
Comenzile ? i ?? afieaz rezultatul expresiilor <expr1>, <expr2> pe ecran, n cadrul formei sau
ferestrei curent active. Comanda ? face ca afiarea s aib loc de la nceputul liniei urmtoare celei curente,
iar ?? determin ca aceasta s aib loc ncepnd cu poziia curent a cursorului. Prin clauza AT se poate
impune i o anumit coloan de nceput a afirii. <expr1>, <expr2> vor fi afiate conform formatului de
afiare specificat printr-o clauz PICTURE sau FUNCTION.
37
comanda @ SAY
@<lin>,<col>SAY <expr> [PICTURE <expc1>]
[FUNCTION <coduri_functie>]
[SIZE <expn1>,<expn2>]
[FONT <expc2>[,<expn3>]][STYLE <expc3>]
[COLOR <culori> COLOR SCHEME <expn4>]
Comanda permite afiarea pe ecran, ncepnd cu o anumit poziie i ntr-un anumit format, a valorii
expresiei <expr>.
Comanda permite vizualizarea coninutului tabelei curente, n mod implicit fiind afiat coninutul
nregistrrii curente n cadrul formei sau ferestrei curent active. Se poate limita afiarea la anumite cmpuri
prin introducerea clauzei [FIELDS] <list_cmpuri> n sintaxa comenzii. Afiarea coninutul unui cmp de
tip memo este posibil numai prin includerea numelui acestuia n <list_cmpuri>.
Se poate extinde domeniul de afiare prin includerea clauzei <domeniu> n sintaxa comenzii, n una
din variantele: ALL, NEXT, RECORD sau REST.
Totodat, se poate limita afiarea nregistrrilor incluznd clauza WHILE <cond2> n sintaxa
comenzii DISPLAY, aceasta avnd loc atta timp ct condiia <cond2> este adevrat. Clauza FOR
<cond1> limiteaz afisarea nregistrrilor la acelea care ndeplinesc condiia <cond1> din cadrul domeniului
luat n considerare.
Prin introducerea clauzei OFF n sintaxa comenzii DISPLAY se omite afiarea numerelor de
nregistrare n faa nregistrrilor vizualizate. Inregistrarile vizate pot fi tiprite la imprimant, prin
introducerea clauzei TO PRINTER n sintaxa comenzii sau pot fi memorate ntr-un fiier separat (clauza TO
FILE).
LIST
[[FIELDS] <list_cmpuri>]
[<domeniu>] [FOR <cond1>] [WHILE <cond2>]
[OFF]
[TO PRINTER | TO FILE <fiier>]
Comanda LIST este similar comenzii DISPLAY, n mod implicit fiind ns vizualizat ntregul
coninut al tabelei curente.
5.
Comenzile permit introducerea de la tastatur a unei valorii pentru variabila <var>, textul <expc>
precednd pe ecran poziia de introducere a acesteia. Particularitatea comenzii ACCEPT const n faptul c,
prin intermediul ei se pot introduce de la tastatur numai valori alfanumerice.
38
Comanda permite editarea unei variabile sau a unui cmp al unei tabele fie la coordonatele specificate
prin <lin>,<col>, fie la poziia urmtoare de pe ecran care urmeaz dup SAY (atunci cnd comenzile SAY
i GET sunt grupate mpreun). O comand @GET (sau grup de comenzi @GET) este urmat de o
comand READ, care va declana citirea cmpului GET i atribuirea valorii citite lui <var> <cmp>.
6.
Comanda adaug o nregistrare la sfritul tabelei cuente sau celei specificate prin IN
<zon_de_lucru> <alias>. Clauza BLANK adaug o nregistrare vid. Comanda APPEND fr BLANK
este folosit pentru adugarea de nregistrri prin intermediul unei ferestre de editare.
APPEND FROM <fiier> [FIELDS <list_cmpuri>]
[FOR <expl1>]
[DELIMITED WITH TAB WITH<delimitator> WITH BLANK]
[TYPE]
[DIF FW2 MOD PDOX RPD SDF SYLK WK1 WK3
WKS WR1 WRK XLS]
Tabela curent poat fi mbogit cu noi nregistrri, al cror coninut va fi preluat dintr-un alt fiier
specificat. <list_cmpuri> reprezint cmpurile ale cror valori vor fi adugate n tabela curent.
n mod implicit sunt preluate din <fiier> toate nregistrrile i adugate la coninutul tabelei curente.
Se poate limita setul de nregistrri din <fiier> care se vor aduga la acelea care ndeplinesc o anumit
condiie <expl1>. Dac fiierul surs nu este o tabel de date (.DBF), atunci trebuie specificat tipul acestuia
n conformitate cu opiunile oferite de ctre sintaxa general a comenzii.
comanda INSERT -SQL
INSERT INTO <tabela1> [(<cmp1> [, <cmp2>, ...] )]
VALUES (<expr1> [,<expr2>, ...])
Comanda INSERT SQL adaug o nregistrare n <tabela1>. Cmpurile specificate ale noii
nregistrri se vor completa cu valorile precizate. Dac tabela nu este deschis, ea se va deschide ntr-o nou
zon de lucru, n mod exclusiv.
7.
comanda REPLACE
39
Modificarea valorilor cmpurilor unei tabele se poate realiza cu ajutorul comenzii UPDATE SQL.
Modificrile se vor efectua n <tabela1> i vor afecta cmpurile <cmp1>, <cmp2>, ... ale acesteia
conform setrilor stabilite. Prin includerea clauzei WHERE n sintaxa comenzii, se va limita domeniul
nregistrrilor luate n considerare la acelea care ndeplinesc condiia <expl1>.
8.
Comanda marcheaz nregistrri pentru tergere din tabela curent deschis. nregistrrile marcate pot
fi recuperate prin comanda RECALL.
DELETE FROM [<baz_de_date>] <tabela1>
[WHERE <expl1> ]
Din tabela specificat se vor terge logic toate nregistrrile pentru care condiia <expl1> este
ndeplinit.
PACK
Comanda PACK se folosete pentru tergerea fizic a nregistrrilor care anterior au fost marcate
logic.
9.
40
41
(*)
procedura frmAfisare_Activate
open database aplic3
use tabel1
go top
@ 2,1 say "Numele"
@ 2,17 say "Valoare"
@ 2,33 say "Data facturii"
linie = 3
do while not eof( )
@ linie,1 say nume
@ linie,17 say valoare
@ linie,33 say data_fact
linie = linie+1
skip
enddo
use
close databases
( ** )
42
Operaia de tergere a nregistrrilor este implementat cu ajutorul unui control de tip GRID, prin
intermediul cruia este vizualizat coninutul tabelei tabel1. nregistrarea ce urmeaz a fi ters se
selecteaz n cadrul controlului de tip GRID prin poziionare pe o anumit linie a acestuia, iar operaiile ce
urmeaz a fi executate vor fi incluse n corpul procedurii eveniment AfterRowColChange asociate grid-ului.
procedura frmstergere_Activate
public poz
thisform.cmdstergere.visible = .F.
open database aplicatie
procedura grid1_AfterRowColChange
poz = recno( )
if deleted( )
thisform.cmdstergere.visible = .F.
cls
else
thisform.cmdstergere.visible = .T.
endif
(*)
Controlul de tip GRID afieaz toate nregistrrile tabelei asociate, cele terse logic prin comenzi de
tip DELETE fiind marcate corespunztor. Distincia ntre o nregistrare efectiv i una tears logic se poate
face cu ajutorul funciei logice DELETED( ).
procedura cmdstergere_Click
go poz
@ 7,60 say "Nume: " + nume
@ 8,60 say "Valoare: " + ltrim(str(valoare))
thisform.command1.visible = .F.
on key label del delete
( ** )
Pe ecran sunt afiate informaii extrase din nregistrarea selectat, pentru tergere urmnd a se apsa
tasta <Del>. Conform specificrii efectuate prin comanda ON KEY LABEL, comanda DELETE va fi
executat dup apsarea acestei taste.
procedura cmdintoarcere_Click
close tables
use tabel1
pack
use
close databases
on key
thisform.release
43
[WIDTH <lungime>]
Comanda BROWSE determin apariia pe ecran, n cadrul formei sau ferestrei curente, a ferestrei
speciale Browse. Aceasta reprezint principalul instrument pentru realizarea diferitelor operaii de prelucrare
asupra datelor din tabela curent. n cadrul ferestrei Browse este afiat coninutul tabelei, n mod implicit
ntr-un format tabelar, coloanele reprezentnd cmpuri, iar liniile nregistrri), coninut care poate fi
modificat de utilizator n mod interactiv. Se pot aduga noi nregistrri sau terge nregistrri existente, se
poate interveni asupra coninutului oricrui cmp i al oricrei nregistrri, se pot cuta diferite date, etc. n
mod implicit sunt afiate toate cmpurile din structura tabelei. Se poate restrnge afiarea la anumite cmpuri
utiliznd clauza FIELDS. Printre cmpurile specificate pot s apar i cmpuri dintr-o tabel referit,
deschis ntr-o alt zon de lucru. n acest caz se va utiliza sintaxa <pseudonume>.<cmp>.
Formatul de afiare al datelor vizualizate n cadrul ferestrei Browse, poate fi impus prin intermediul
clauzelor FONT i STYLE. n absena acestor clauze, pentru afiarea datelor n cadrul ferestrei Browse se
va utiliza fontul MS Sans Serif, stilul de afiare va fi cel normal, iar caracterele vor fi de dimensiune 8.
n mod implicit sunt afiate toate nregistrrile tabelei curente. Se poate restrnge afiarea la anumite
nregistrri care ndeplinesc o anumit condiie impus prin intermediul clauzei FOR.
n mod implicit, prin intermediul ferestrei Browse este posibil modificarea coninutului oricrui
cmp afiat n fereastr. Dac se va dori modificarea coninutului a numai unui singur cmp, atunci se va
specifica acest cmp i prin clauza FREEZE <cmpi>.
n cazul tabelelor indexate, se poate limita afiarea la acele nregistrri care conin o anumit valoare a
cheii de indexare <expr2> sau care conin valori ale acesteia cuprinse n intervalul [<expr2>, <expr3>].
Operarea n cadrul ferestrei Browse poate fi limitat prin introducerea clauzelor NOAPPEND,
NODELETE, NOEDIT sau NOMODIFY.
Fereastra Browse poate fi mprit n dou subferestre (partiii) de vizualizare, limita dintre cele dou
ferestre fiind specificat printr-un numr de coloan PARTITION <coloan>. Dac se apeleaz la clauza
LEDIT/REDIT, atunci partiia (subfereastra) stnga/dreapt va corespunde modului EDIT de afiare,
partiia dreapt/stng fiind n modul standard Browse de afiare.
n mod implicit, n bara de titlu a ferestrei Browse apare numele tabelei vizualizate. Se poate impune
un text oarecare prin intermediul clauzei TITLE.
Clauza WIDTH <lungime> impune limea coloanelor de afiare din ferestra Browse, indiferent de
dimensiunea cmpurilor tabelei. n cazul cmpurilor de dimensiuni mai mari dect <lungime>, coloanele
aferente acestora vor fi prevzute cu bare de difilare pe orizontal.
Comenzile CHANGE i EDIT prezint o sintax similar lui BROWSE, fereastra de vizualizare a
coninutului tabelei fiind ns diferit.
CHANGE | EDIT
[FIELDS <cmp1> [, <cmp2> ...]]
[FONT <font> [, <dimensiune>]] [STYLE <stil>]
[<domeniu> [FOR <expr1> ] [WHILE <expr2>]
[FREEZE <cmpi>]
[KEY <expr3 [, <expr4>]]
[NOAPPEND][NODELETE][NOEDIT | NOMODIFY]
[PARTITION <coloan> [LEDIT] [REDIT]]
[WIDTH <lungime>]
Prin clauza <domeniu> se poate stabili mulimea nregistrrilor din tabela curent ce vor fi afiate
ntr-o fereastr de tip Change sau Edit. Clauzele FOR i WHILE se vor aplica numai nregistrrilor din
<domeniu>. Acesta poate fi ALL, NEXT n, REST sau RECORD n.
44
45
expresiilor <expr1>, <expr2>, , n formularea crora se pot utiliza funcii statistice i/sau financiare
standard, cum ar fi AVG, CNT, MAX, MIN, NVP, STD, SUM i VAR.
Legarea unui control de un cmp dintr-o tabel deschis este posibil prin setarea corespunztoare a
valorii proprietii ControlSource (stocuri.cod) a controlului respectiv. n ceea ce privete controlul de tip
ComboBox, lista de elemente ataat acestuia se genereaz conform specificrilor fcute prin proprietile
RowSource Type (6-Fields) i RowSource (stocuri.cod ) ale controlului.
thisform.lblstoc.visible = .T.
activate window op
select io
browse fields data_op,cantitate for cod = cod_spec
replace cod with cod_spec for cod<1
calculate sum(cantitate) to stoc_curent for cod = cod_spec
frmlocaliz.txtstoc.value = stoc_curent
deactivate window op
procedura frmlocaliz_Unload
close databases
set talk on
procedura cmdCreare_Click
create database gest
create table produse (codp N(5) primary key check codp>10000;
error "Codul produsului trebuie sa fie de 5 cifre !",;
denp C(16) not null check substr(denp,1,1)=upper(substr(denp,1,1));
error "Prima litera din denumire este obligatoriu majuscula !",ump C(3))
create table beneficiari (codb N(5) primary key check codb>0;
error "Codul beneficiarului trebuie sa fie mai mare ca zero !",;
denb C(30) not null, str C(20),nr n(3),loc c(20), tel n(7),ctbc c(15))
create table contracte (codp N(5) check codp>10000 ;
error "Codul produsului trebuie sa fie de 5 cifre !",;
codb N(5) check codb>0 error "Codul trebuie sa fie mai mare ca zero !",;
prl N(8,2),cantl N(7),termenl D(8), cl M(4),;
foreign key codp tag codp references produse,;
foreign key codb tag codb references beneficiari)
close tables
close databases
procedura cmdInreg_Click
thisform.release
do form frminreg
procedura cmdcb_Click
thisform.release
do form frmcontrbenef
Forma de ntegistrare frminreg conine un grup de butoane de comand, acionarea unui buton
activnd o form specific pentru introducerea datelor. n ceea ce privete operaia de nregistrare a unui nou
contract s-a proiectat forma CONTRACTE (figura 2.10), pentru introducerea produselor i a clienilor
apelndu-se ns la ajutorul FormWizard-ului figura 2.11.
procedura - frmContracte_Activate
open database gest
use produse order codp alias pr in 1
use beneficiari order codb alias benef in 2
thisform.txtprl.value = ""
thisform.txtcantl.value = ""
thisform.txttermen.value = { / / }
thisform.edit1.value = ""
procedura cmdInregistrare_Click
p = val (thisform.combo1.text)
b = val (thisform.combo2.text)
insert into contracte (codp,codb,prl,cantl,termenl,cl);
values p,b,val (thisform.txtprl.value),val (thisform.txtcantl.value),;
thisform.txttermen.value,thisform.edit1.value)
thisform.txtprl.value = ""
thisform.txtcantl.value = ""
thisform.txttermen.value = { / / }
thisform.edit1.value = ""
thisform.combo1.value = ""
thisform.combo2.value = ""
procedura cmdQuit_Click
close tables
close databases
thisform.release
do form frminreg
Ne propunem s afism ntr-o fereastr Browse contractele destinate unui anumit beneficiar specificat
cu ajutorul unui control de tip ComboBox legat de cmpul "codb" al tabelei "Beneficiari". Datorit relaiilor
definite ntre cele trei tabele, n fereastra Browse vor fi afiate contractile solicitate.
procedura frmcontrbenef_Activate
open database gest
use produse order codp alias pr in 1
use beneficiari order codb alias benef in 2
use contracte alias contr in 3
procedura cmdOk_Click
b = val(thisform.combo1.text)
select 3
browse fields codp, pr.denp, prl, cantl for codb = b title benef.denb
endif
enddo
if inf = sup
messagebox ("Contul "+cautat+" nu este un cont valid !",48,"Avertizare")
else
thisform.lstPlan_ctb.selected (val_cautat) = .T.
thisform.lstPlan_ctb.topindex = val_cautat
endif
thisform.txtCautare.value = ""
B). n urmtorul exemplu vom programa coninutul unui control de tip ListBox cu ajutorul unei
interogri SQL. Proprietatea RowSourceType a unui control de tip list specific tipul sursei de date pentru
acesta. Optndu-se pentru 3-SQL statement, n proprietatea RowSource se poate include comanda SELECT
SQL pentru generarea listei de informaii a controlului. Proprietatea RowSource se poate seta i prin
program, caz n care comanda SELECT se va pune ntre ghilimele. n secvena de iniializare a formei,
comanda SELECT afieaz cmpurile "nume" + "prenume", "nrbi", "nrpass" i "idcli" ntr-un cursor.
C). Considernd baza de date evid figura 1.13 creat conform metodologiei prezentate n cadrul
paragrafului 1.6, vom prezenta un algoritm de nregistrare a unei note la o anumit disciplin dintr-un an de
studiu figura 2.14.
(*)
next i
endif
< se face vizibil zona ( * )>
Disciplinele vizualizate de ctre cel de-al doilea ComboBox depind de anul selectat din cadrul
grupului de butoane de opiune.
procedura optiongroup1_Click( )
with thisform
.cbonote.clear
do case
case .optiongroup1.option1.value = 1
select 1
case .optiongroup1.option2.value = 1
select 2
case .optiongroup1.option3.value = 1
select 3
case .optiongroup1.option4.value = 1
select 4
endcase
zona = select(0)
nr_campuri = afields(t)-1
for i = 1 to nr_campuri
nota = "n" + ltrim(str(i))
.cbonote.additem((nota),i)
next i
endwith
n final, nregistrarea unei note efectundu-se dup cum urmeaz, n variabila global "zona"
fiind memorat anul selectat.
procedura - cmdOkNota_Click( )
select (zona)
camp_nota = thisform.combo1.value
replace &camp_nota with val(thisform.text1.value)
procedura cmdQuit_Click( )
thisform.release
close databases
D). n exemplul urmtor figura 2.15 este propus o variant de parcurgere a unor tabele legate,
fiind definite n acest scop dou butoane de comand speciale. Deplasarea n tabela printe este
implementat cu ajutorul comenzii SKIP, fiind tratat explicit momentul atingerii sfritului/nceputului
fiierului. Controalele de tip TextBox utilizate sunt legate de cmpurile al cror coninut trebuie s-l
vizualizeze.
procedura frmAfis_Activate( )
use salar order marca in 2
use personal order marca in 1
select 1
set relation to marca into 2
procedura cmdUrmator_Click ( )
if not bof ( )
thisform.cmdPredecesor.Enabled = .T.
endif
if not eof ( )
skip
if eof ( )
skip -1
thisform.cmdUrmator.Enabled = .F.
endif
endif
procedura cmdPredecesor_Click ( )
if not eof ( )
thisform.cmdUrmator.Enabled = .T.
endif
if not bof ( )
skip -1
if bof ( )
skip
thisform.cmdPredecesor.Enabled = .F.
endif
endif
Roca I. Gh., Ghilic-Micu B., Apostol C., Roca V., Cocianu C.L., Programarea calculatoarelor, Editura ASE, 2002
endproc
enddefine
define class optutil as optiongroup
buttoncount = 3
top = 60
left=75
height = 70
width = 110
procedure click
do case
case thisform.Y.value = 1
messagebox("S-a ales prima optiune !")
case thisform.Y.value = 2
messagebox("S-a ales a doua optiune !")
case thisform.Y.value = 3
messagebox("S-a ales a treia optiune !")
endcase
endproc
enddefine
define class lstutil as listbox
left = 80
top = 60
procedure click
for i = 1 to thisform.Z.listcount
if thisform.Z.selected(i)
messagebox("S-a selectat - " + thisform.Z.list(i))
endif
endfor
endproc
enddefine
return
obiectul X definit ca
instan a clasei frmutil
Fig. 2.16 Definirea i utilizarea claselor de obiecte
procedura frmprinc_click
public X
set procedure to fisproc
procedura cmdcont_click
thisform.release
X = createobject("frmutil")
X.activate
X.cmdinreg.setfocus
procedura cmdiesire_click
thisform.release
X, Y i Z sunt definite ca variablile globale la nivelul aplicaiei i reprezint obiecte componente ale
claselor definite figura 2.16. Conform codului procedurii eveniment cmdinreg.click inclus n definiia
clasei frmutil, acionarea acestui buton aduce n prim plan forma frminreg. Apariia ferestrei MessageBox
are loc n conformitate cu cele stabilite n codul procedurii eveniment Click incluse n definiia clasei
optutil.
public Z
public tablou(3)
tablou(1) = "Unu"
tablou(2) = "Doi"
tablou(3) = "Trei"
set procedure to fisproc
thisform.addobject('Z','lstutil')
thisform.Z.rowsourcetype = 5
thisform.Z.rowsource = 'tablou'
thisform.Z.visible=.T.
procedura cmdrev_Click
release Z
thisform.release
o redundan nedorit, dat de clasele ale cror obiective se suprapun ntr-o oarecare msur, dar
care trebuie ntreinute separat ;
un grad redus de reutilizare a software-lui, dat de numai cele cteva utilizri ale unei clase n
gradul aplicaiei i/sau n cadrul altor aplicaii.
Fotache M., Brava I., Strmbei C., Creu L., Visual FoxPro. Ghidul dezvoltrii aplicaiilor profesionale, Editura Polirom,
Iai, 2002