100% au considerat acest document util (1 vot)
367 vizualizări12 pagini

Visual Fox Pro Tutorial

Încărcat de

edward2828
Drepturi de autor
© Attribution Non-Commercial (BY-NC)
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOC, PDF, TXT sau citiți online pe Scribd
100% au considerat acest document util (1 vot)
367 vizualizări12 pagini

Visual Fox Pro Tutorial

Încărcat de

edward2828
Drepturi de autor
© Attribution Non-Commercial (BY-NC)
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOC, PDF, TXT sau citiți online pe Scribd

Laboratorul nr.

Mecanismele programarii în Visual FoxPro

Programarea în Visual FoxPro implica scrierea unor secvente de cod: instructiuni sub forma
de comenzi, functii sau operatii pe care Visual FoxPro le poate interpreta. Acestea pot fi introduse în:
- fereastra Command
- fisiere de programe;
- ferestre de cod pentru evenimente sau metode în cadrul proiectantului de formulare (Form
Designer) sau al proiectantului de clase (Class Designer);
- ferestre procedurale în cadrul proiectantului de meniuri (Menu Designer);
- ferestre procedurale în cadrul proiectantului de rapoarte (Report Designer).

Crearea de programe
- 1. în Project Manager se selecteaza optiunea Programs din fila Code;
2. se alege comanda New
- 1. se alege comanda New din meniul File
2. din caseta de dialog New se alege Program
3. se alege New File.
- în fereastra Command se foloseste comanda MODIFY COMMAND
MODIFY COMMAND [FileName | ?]
[NOEDIT] [NOMENU] [NOWAIT]
[RANGE nStartCharacter, nEndCharacter]
[[WINDOW WindowName1]
[IN [WINDOW] WindowName2 | IN SCREEN]]
[AS nCodePage] [SAME] [SAVE]
Visual Fox Pro va deschide o noua fereastra, în care se pot edita instructiunile programului.

Salvarea programelor
- din meniul File se alege Save
- daca se salveaza un program creat în Progect Manager , acesta este automat adaugat
proiectului.

Modificarea programelor
Înainte de a modifica un program, acesta trebuie redeschis prin una din urmatoarele metode:
- pentru programele cuprinse într-un proiect, se selecteaza în Project Manager si se alege
comanda Modify
- în meniul File se alege comanda Open. Din lista Files of Type se alege Program, se
selecteaza fisierul de modificat si se alege comanda Open.
- Se foloseste comanda MODI COMM în care se specifica numele programului sau
parametrul "?".

Rularea programelor
- daca programul este cuprins într-un proiect, se selecteaza din Project Manager si se alege
comanda Run.
- Din meniul Program se alege comanda Do
1
- în fereastra de comenzi se foloseste comanda DO
DO ProgramName1 | ProcedureName [IN ProgramName2] [WITH ParameterList]

Conceptele de baza ale programării

Stocarea datelor
Fiecare data cu care se lucrează aparţine unui anumit tip, care determina modul în care aceasta
poate fi stocata si folosita.

Containere de date
Containerele de date permit executarea aceloraşi operaţii asupra mai multor date simultan.
Principalele containere de date în Visual FoxPro sunt:
Tipul Descriere
Variabile Elemente singulare de date stocate în memoria RAM a calculatorului
Înregistrări în tabele Rânduri multiple de câmpuri predefinite, fiecare din acestea conţinând date
care corespund tipului declarat.
Matrice (masive) Elemente multiple de date stocate în RAM.

Variabile. Instrucţiuni şi funcţii de lucru cu variabilele.


Macrosubstituţia.
Variabila reprezinta zona de memorie careia i se atribuie un nume si care poate stoca o valoare
de un anumit tip. Deci elementele unei variabile sunt:
- numele - folosit pentru identificare si atribuit de programator sau predefinit de proiectanti,
- continutul sau valoarea variabilei - reprezinta data ce este memorata in zona de memorie a
variabilei;
- tipul variabilei - tipul datei ce se poate memora in zona de memorie respectiva.
Variabilele tablou (masivele) trebuie declarate in prealabil si pot avea maxim 2 dimensiuni.
Numărul de elemente pe o dimensiune se poate preciza şi prin expresii. In plus, in limbajul Visual
FoxPro caracteristica de tip este asociata elementului tablou si nu tabloului, de unde rezulta ca
elementele aceluiaşi tablou pot fi tipuri diferite.
Crearea unei variabile sau modificarea valorii acesteia se face prin una din metodele următoare:
(1) <memvar> = <expr>
Exemplu: msal=10000000
mnume='Deliu'
mdata=date()
(2) STORE <e> TO <lista var>
O tehnica speciala de lucru cu variabile o reprezinta macrosubstitutia, prin care continutul
unei variabile de tip sir de caractere este tratat ca numele altei variabile sau alt element FoxPro (câmp al
unei baze de date, denumire fişier).
Macrosubstituţia functionează ca şi în locul variabilei respective ar fi pus şirul de caractere
conţinut de aceasta, fără apostrofurile delimitatoare.
Operatorul de macrosubstitutie este &.
Exemplu:1. a='var'
var='Continutul variabilei var'
?a && se afisaza var
? &a && rezultatul afisarii este Continutul variabilei var
? var && rezultatul afisarii este Continutul variabilei var

2
Obs.: Dezavantajul este ca apare o problema de performanta pentru compilator, in sensul ca
linia pe care apare, trebuie compilata "din mers" in momentul rularii.

Comenzi pentru afişarea variabilelor de memorie existente la un moment dat:


LIST / DISPLAY MEMORY
[LIKE <skel>] [NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE <file>]

Manipularea datelor
Folosirea operatorilor
Operatorii utilizati pentru a crea expresii în Visual FoxPro sunt:
- operatori aritmetici: adunare, scadere, înmultire, ridicare la patrat etc,
- operatori relationali: <,>,=,<=,>=, <>. Ordinea lor de prioritate este aceeasi, de la stânga la
dreapta.
- operatori logici: negatie .not.(!) , sau logic .or. , si logic .and. Ordinea lor de prioritate este:
not; and; or.
- operatori specifici sirurilor de caractere: concatenare (+,-) apartenenta $, etc.
- operatori specifici datelor calendaristice: adunare sau scadere numar de zile dintr-o data
calendaristica, compararea a doua date.
Exemplu:
1. Fie urmatoarele valori de tip caracter stocate în variabilele v1 si v2:
v1= "Univ. "
v2="Stefan Cel Mare"
Expresia:
? v1+v2 va avea ca efect afişarea pe ecran a valorii " Univ. Stefan Cel Mare"
2. Daca variabilele v1 si v2 au valorile următoare:
v1= " Str. Univ. "
v2=21
Expresia:
? v1+v2 va avea ca efect afisarea pe ecran a unui mesaj de eroare.
Nota: Un semn de întrebare (?) la începutul unei expresii genereaza un caracter de salt la linie
noua si determina afişarea rezultatului expresiei în fereastra de rezultate activa.
Pentru un anumit operator trebuie folosite aceleaşi tipuri de date, în caz contrar se va genera un
mesaj de eroare de nepotrivire de tip.
Pentru evitarea acestui tip de probleme se vor folosi funcţiile de conversie.

Folosirea functiilor predefinite

Functii referitoare la semnul datelor numerice


ABS(nExpr)
SIGN(nExpr)
Functii de aproximare a datelor numerice
INT(nExpr)
CEILING(nExpr)
FLOOR(nExpr)
ROUND(nExpr, nDecimalPlaces)

3
Functii matematice elementare
EXP(nExpr)
LOG(nExpr)
SQRT(nExpr)
SIN(nExpr): COS(nExpr)..
ASIN(nExpr): ACOS(nExpr)..
Functii referitoare la codificarea caracterelor din siruri
CHR(nExpr)
ASC (cExpr)
Functii referitoare la subsirurile de caractere
SUBSTR(cExpr, nStartPosition [, nCharactersReturned])
Variante:
LEFT(<cExpr>,<nExpr>);
RIGHT(<cExpr>,<nExpr>);
Alte functii:
REPLICATE(<cExpr>,<nExpr>);,
SPACE(<nExpr>)
Functii de eliminare a blancurilor:
ALLTRIM(<cExpr>);
LTRIM(<cExpr>)
RTRIM(<cExpr>)
Functii referitoare la informatii despre un sir de caractere
LEN(<cExpr>);
ISDIGIT(<cExpr>);
ISLALPHA(<cExpr>);
ISLOWER(<cExpr>);
ISUPPER(<cExpr>);
Functii referitoare la transformarea sirurilor de caractere
LOWER(<cExpr>);
UPPER(<cExpr>);
PROPER(<cExpr>);
Functii referitoare la date calendaristice
DATE() - obtinerea datei curente a sistemului;
DOW(<dExpr>) - returneaza numarul zilei din cadrul saptamanii pentru data specificata;
CDOW(<dExpr>) - returneaza numele zilei din saptamana pentru data specificata;
DAY(<dExpr>) - returneaza numarul zilei din cadrul lunii pentru data specificata;
MONTH(<dExpr>) CMONTH(<dExpr>) - returneaza numarul/numele lunii pentru data
specificata;
YEAR(<dExpr>) - returneaza anul pentru data specificata;
Instructiuni pentru controlul formatului datei calendaristice
SET CENTURY ON/OFF
SET DATE TO DMY|MDY| BRITISH|FRENCH| GERMAN …
Functii pentru controlul timpului:
TIME(<nExpr>) - returneaza un sir de caractere de lungime 8, in formatul HH:MM:SS
ce reprezinta ora exacta a sistemului;
Instrucţiuni pentru controlul formatului de afişare al ceasului sistem:
SET CLOCK ON | OFF
SET CLOCK TO [<ROW>,<COL>]
SET HOURS TO [12 | 24]
4
Funcţie care verifica daca o expresie evaluata este vida sau nu
EMPTY(eExpression)
Funcţii de conversie
- din grade în radiani si invers
DTOR(nExpr)
RTOD(nExpr)
- transformarea unei date calendaristice intr-un sir de caractere
DTOC (<dExpr>)
DTOS (<dExpr>)
MDY (<dExpr>); DMY (<dExpr>)
- transformarea unui sir de caractere in data calendaristica
CTOD (<cExpr>)
- transformarea valorilor numerice in siruri de caractere
STR(nExpr [, nLength [, nDecimalPlaces]])
- transformarea sirurilor de caractere in valori numerice
VAL(cExpr)

Folosirea Comenzilor

Sintaxa generala a unei comenzi este:


Verb <clauza,>< clauza >..
Există o serie de clauze comune tuturor comenzilor, şi anume clauzele de selecţie respectiv
clauzele de domeniu.
a) Clauzele de selectie – permit comenzilor exprimate prim verb sa se execute numai asupra
acelor inregistrări care satisfac o condiţie impusă. Acestea sunt :
- clauza FOR conditie
- clauza WHIILE

1. Instructiuni (comenzi) de intrare-iesire


Sunt instructiuni de afisare si instructiuni pentru citirea de la tastatura.
Formatul de afisare, atat la instructiunile de afisare cat si la cele de citire, este controlat de
clauzele PICTURE si FUNCTION care apar la majoritatea comenzilor de intrare-iesire. Fiecare din
cele doua clauze este urmata de un sir de caractere prin care este descris simbolic formatul de afisare a
valorii expresiei <exp>. Diferenta dintre cele doua clauze:
- clauza PICTURE controleaza modul de afisare al unui singur caracter din textul de iesire, cel
de pe aceeasi pozitie; caracterele din cadrul sirului FUNCTION se refera fiecare la cate o caracteristica
a intregului text de iesire. Formatele stabilite prin cele 2 clauze sunt foarte importante in comenzile de
citire, pentru ca la citirea unor date utilizatorul sa fie oprit sa faca greseli. Codurile celor 2 clauze sunt
date in tabelele urmatoare:
==================================================================
Cod FUNCTION Semnificatie
==================================================================
! Converteste toate literele in majuscule;
( Afiseaza numerele negative intre paranteze;
A Permite numai caractere alfabetice;
B Aliniaza textul la stanga in cadrul unui camp;
D Utilizeaza formatul curent de data calendaristica;

5
E Utilizeaza formatul european de data calendaristica;
I Centreaza textul in cadrul unui camp (numai SAY);
J Aliniaza textul la dreapta in cadrul unui camp (numai SAY);
K Selecteaza intregul camp de editare cand cursorul se muta in acest camp;
L Afiseaza zerourile nesemnificative intr-un camp numeric;
M Defineste,atunci cand este urmat de o lista de optiuni separate prin virgula,optiunile
acceptabile pentru o variabila citita cu GET;
T Elimina spatiile din fata si din spate, in cadrul unui camp;
===================================================================
==================================================================
Cod PICTURE Semnificatie
==================================================================
9 Permite introd. cifrelor pentru date de tip sir de caract. si a cifrelor si semnelor
pentru date numerice;
# Permite cifre, blancuri si semne;
$ Afiseaza simbolul monetar curent definit de SET CURRENCY;
* Afiseaza asteriscuri in fata valorilor numerice;
. Specifica pozitia punctului zecimal;
, Separa cifrele la stanga punctului zecimal;
A Permite introducerea doar a caracterelor alfabetice;
W Permite doar date de tip logic;
N Permite doar litere si cifre;
X Permite doar caractere;
Y Permite doar caracterele Y,y,N,n trecandu-le la majuscule.
===================================================================
Obs.: Codurile FUNCTION pot fi incluse in clauza PICTURE dar precedate de "@"
Exemplu. PICTURE 'abcde' FUNCTION '!'
PICTURE '@!abcde'
Cele 2 forme sunt echivalente !!

a) Instructiuni de afisare.
Aceasta categorie de comenzi cuprinde urmatoarele instructiuni:
(1) ? | ?? Expr1
[PICTURE cFormatCodes] | [FUNCTION cFormatCodes] | [VnWidth]
[AT nColumn]
[FONT cFontName [, nFontSize] [STYLE cFontStyle | Expr2]]
[, Expr3] ...
Efect: Afiseaza, pe ecran, valorile unei sau mai multor expresii Visual FoxPro valide sau le
tipareste la imprimanta, daca SET PRINTER este pe ON , conform valorilor clauzelor PICTURE,
FUNCTION, AT, STYLE.
Obs.: - clauza AT <expN1> defineste coloana unde se afiseaza <expr1>;
- clauza STYLE <expC> defineste facilitati suplimentare de afisare/tiparire,cum ar fi bold, italic,
underline, sau scriere cu diferite tipuri de caractere (font) , daca monitorul sau imprimanta permit aceste
optiuni, in caz contrar fiind ignorata.
(2) @ <linie,coloana> SAY <expr>
[FUNCTION <expC1>] [PICTURE <expC2>][SIZE <expN1>, <expN2>]
[FONT <expC3> [, <expN3]][STYLE <expC4>][COLOR SCHEME <expN4>
| COLOR <lista perechi culori> ]

6
Efect: Afiseaza valoarea expresiei <expr> valide pe ecran sau o tipareste la imprimanta, daca
SET DEVICE este PRINTER, pe randul <expN1> si in coloana <expN2>, conform clauzelor
PICTURE, FUNCTION.

b) Instructiuni de citire de la tastatura.


(1) ACCEPT [<cExpr> ] TO <memvar>
Efect: Se afiseaza pe ecran valoarea <cExpr> dupa care se asteapta introducerea unui sir de
caractere, de la tastatura, ce se atribuie variabilei de memorie <memvar>.
(2) INPUT [<cExpr> ] TO <memvar>
Efect: Se afiseaza pe ecran valoarea <cExpr> dupa care se asteapta introducerea unei expresii de
la tastatura, a carei valoare se atribuie variabilei de memorie <memvar>.
Obs.: - comanda cere obligatoriu introducerea unei expresii; - pentru introducerea constantelor
de tip sir sau data calendaristica se vor folosi delimitatorii specifici (",',[], resp. {}).
(3) WAIT [[<cExpr> ] TO <memvar>]
Efect: Se afiseaza pe ecran valoarea <cExpr> dupa care se asteapta apasarea unei taste (fara
<CR> a carei valoare se atribuie variabilei de memorie <memvar>.
Se utilizeaza pentru oprirea temporara a executiei unui program pana la apasarea unei taste.
(4) @ <linie, coloana> GET <var> | <field>
[FUNCTION <expC1>] [PICTURE <expC2>]
[FONT <expC3> [, <expN1>]][STYLE <expC4>]
[DEFAULT <expr1>] [ENABLE | DISABLE]
[MESSAGE <expC5>] [[OPEN] WINDOW <nume fereastra>]
[RANGE [<expr2>] [, <expr3>]] [SIZE <expN2>, <expN3>]
[VALID <expL1> | <expN4>
[ERROR <expC6>]]
[WHEN <expL2>]
[COLOR SCHEME <expN5>| COLOR <lista perechi culori> ]
Principiul de lucru al instructiunii de tip @...GET este urmatorul:
- se definesc zonele de pe ecran in care utilizatorul va completa datele de intrare, numite campuri
de editare (zone de editare, casute de editare);
- se da comanda de citire a datelor (READ) - este prezentata ulterior;
- programul continua dupa ce au fost citite toate datele in campurile de editare definite anterior.
Obs: - <var> sau <field> trebuie sa fie definite in prealabil;
- WHEN - alt mod de control al accesului la un camp (cu ajutorul unei vb. logice sau a
unei UDF care intoarce un rezultat de tip logic. Evaluarea expresiei <expL2> se face la intrarea in
campul GET. Daca expL2=.F. campul este sarit ! DISABLE este prioritar lui WHEN !! ;
- VALID - controleaza corectitudinea editarii cimpului din GET. De asemenea <expL1>
poate fi o expresie logica, numerica sau o UDF. Daca expl1=.F. (sau 0 pentru expresii numerice) se
ramane in editarea respectivului camp cu afisarea unui mesaj de eroare, standard sau definit de
utilizator cu clauza ERROR. Revenirea in editare se face cu tasta <Space> ;
- RANGE - stabileste o limita minima (<expr2>), respectiv maxima (<expr3>.
Verificarea se face doar la modificarea valorii din camp si nu la simpla trecere a cursorului ;
- MESSAGE - permite precizarea unui mesaj ajutator, pe ultima linie a ecranului ;
- DEFAULT - valoarea initiala a unei variabile de memorie. O variabila de memorie editata cu
GET trebuie fie anterior definita, fie precizata astfel ;
- COLOR si COLOR SCHEME - determina culorile de afisare a campului GET.

(5) READ
[CYCLE]
7
[ACTIVATE <expL1>][DEACTIVATE <expL2>]
[WITH <window title list>] [SHOW <expL3>] [VALID <expL4 | expN1>]
[WHEN <expL5>] [OBJECT <expN2>] [TIMEOUT <expN3>]
[SAVE] [NOMOUSE] [LOCK | NOLOCK]
[COLOR <color pair list> | COLOR SCHEME <expN4>]
Efect: Activeaza mecanismul de cititre pentru toate instructiunile @... GET active.
Obs.: - dupa executarea instructiunii READ, toate instructiunile @...GET sunt dezactivate, iar
noile valori introduse se atribuie variabilelor sau campurilor specificate;
Exemplu: CLEAR
SET TALK OFF
SET STATUS OFF
SET SCOREBOARD OFF
Zi=SPACE(8)
@ 3,1 SAY "Ce zi este astazi ? " ;
GET zi FUNCTION "M Luni, Marti, Miercuri, Joi, Vineri, Simbata, Duminica" ;
MESSAGE "Spatiu sau prima litera pentru selectare si apoi Enter"
READ
@ 5,1 SAY "Astazi este : " + zi + "? - apasati o tasta..."
WAIT ""
SET STATUS ON
SET SCOREBOARD ON
SET TALK ON

2. Instructiuni de cautare a inregistrarilor intr-un tabel


Cautarea secventiala intr-un tabel pentru a gasi prima inregistrare care respecta conditia
specificata se realizeaza cu comanda:
LOCATE FOR lExpression1
[Scope]
[WHILE]
[NOOPTIMIZE]
In caz de reusita, indicatorul de inregistrare se va pozitiona pe inregistrarea respectiva, functia
FOUND () va returna valoarea .T. iar functia EOF() va returna valoarea .F.
In caz contrar, indicatorul de inregistrari va fi pozitionat dupa ultima inregistrare, FOUND () va
returna valoarea .F. , iar EOF() va returna valoarea .T..
Urmatoarele inregistrari care verifica conditia data vor fi gasite folosind comanda
CONTINUE.
Testarea reusitei sau nereusitei cautarii se face cu functiile RECNO(), FOUND() si EOF().
Functia:
FOUND([nWorkArea | cTableAlias])
Returneaza valoarea adevarat in cazul unei cautari reusite si valoarea fals in cazul unei cautari
nereusite.
Exemplu: Cu ajutorul urmatarei secvente de cod sunt gasiti toti clientii din Suceava si se afiseaza numarul lor:
SET TALK OFF
CLOSE DATABASES
OPEN DATABASE Parteneri
USE Clienti
STORE 0 TO gnCount
LOCATE FOR UPPER(localitate) = 'SUCEAVA'
DO WHILE FOUND( )
gnCount = gnCount + 1

8
CONTINUE
ENDDO
WAIT WINDOW 'Total clienti din Suceava: ' ;
+ LTRIM(STR(gnCount)) NOWAIT

3. Extragerea informatiilor statistice din tabele


Scopul principal in care sunt create bazele de date il reprezinta obtinerea in timp cat mai scurt a
unor informatii cu privire la datele continute. Aceste informatii pot fi de natura diferita, mai detaliate
sau mai sintetizate sub forma de liste, tabele sau simple valori, informatii statistice sau totalizatoare.
In acest scop sunt folosite urmatoarele comenzi:
(1) COUNT
[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO VarName]
[NOOPTIMIZE]
- comanda numara inregistrarile dintr-un tabel care respecta conditia data.
Exemplu:
CLOSE DATABASES
OPEN DATABASE Parteneri
USE Clienti
CLEAR
COUNT FOR UPPER(localitate) = 'SUCEAVA' to nrcl
? nrcl
(2) SUM [eExpressionList]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO MemVarNameList | TO ARRAY ArrayName]
[NOOPTIMIZE]
- face o insumare a campurilor numerice dintr-un tabel.
Exemplu: CLOSE DATABASES
OPEN DATABASE Parteneri
USE Produse
SUM stoc, cant_com, stoc+cant_com ;
TO tstoc, tcant_com, stocf
CLEAR
?
? 'Total stoc : ', tstoc
? 'Total cantitate comandata: ',tcant_com
? 'Total stoc final : ', stocf

(3) AVERAGE [ExpressionList]


[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO VarList | TO ARRAY ArrayName]
[NOOPTIMIZE]
- calculeaza media aritmetica a valorilor expresiilor din lista de expresii.
Exemplu: CLOSE DATABASES
OPEN DATABASE Tranzactii
USE comenzi
CLEAR
AVERAGE cant_com && calculeaza media tuturor coomenzilor
AVERAGE cant_com TO gnAvg && memoreaza media in variabila de memorie

9
? gnAvg && Afisaza media calculata

(4) CALCULATE eExpressionList


[Scope] [FOR lExpression1] [WHILE lExpression2]
[TO VarList | TO ARRAY ArrayName]
[NOOPTIMIZE]
- utilizata pentru calcule financiare si statistice asupra campurilor unui tabel.
Exemplu: CLOSE DATABASES
OPEN DATABASE Tranzactii
USE Comenzi
SET TALK ON
CLEAR
CALCULATE AVG(cant_com), MIN(cant_com), MAX(cant_com)
CALCULATE STD(cant_com), VAR(cant_com) TO gnStd, gnVar

(5) TOTAL TO TableName ON FieldName


[FIELDS FieldNameList] [Scope] [FOR lExpression1] [WHILE lExpression2]
[NOOPTIMIZE]
- se va crea un nou tabel, cu aceeasi structura cu tabelul activ, in care se vor incarca
inregistrari totalizatoare obtinute din tabelul curent.
Exemplu: : CLOSE DATABASES
OPEN DATABASE Tranzactii
USE Comenzi
INDEX ON cod_furn tag furniz
TOTAL TO furn_tot ON furniz
USE furn_tot
LIST

Controlul fluxului programului


In Visual FoxPro exista o categorie speciala de comenzi care permit determinarea modului cum
vor fi executate alte comenzi. Acestea permit ramificarea conditionala a programului si structurile
ciclice.

Ramificarea conditionala
Permite testarea unor conditii si executarea, în functie de rezultatul testului a unor operatii
diferite. Pentru aceasta sunt folosite urmatoarele comenzi:
- IF ..ELSE . .. ENDIF ; IIF();
- DO CASE ... ENDCASE.

IF lExpr [THEN]
Commands1
[ELSE
Commands2]
ENDIF
Efect: Se executa Commands1 daca lExpr are valoarea adevarat sau Commands2 daca are
valoarea fals si clauza ELSE este prezenta.
Obs.: - instructiunea nu se poate folosi de la prompter (fereastra Command);
- daca se utilizeaza comenzi IF imbricate, trebuie utilizat câte un ENDIF pentru fiecare IF
10
Exemplu: Se presupune ca exista o relatie PERSONAL(codp, nume, functie,salar)
SET TALK OFF
CLEAR
IF Salar>= 25000000
REPLACE Salar WITH Salar*1.03
ELSE
REPLACE Salar WITH Salar*1.06
ENDIF

DO CASE
CASE lExpr1
Commands1
[CASE lExpr2
Commands2
...
CASE lExprN
Commandsn]
[OTHERWISE
Commandsn+1]
ENDCASE

Efect: Se executa Commandsi pentru prima lExpr cu valoarea .T. sau Commandsn+1 daca toate
lExpr au valoarea .F. si clauza OTHERWISE exista.
Obs.: - instructiunea nu se poate folosi de la prompter;
- la prima evaluare adevarata a lExpr se executa Commandsi si apoi executia comenzii
se incheie;
Un efect asemanator se obtine prin functia:
IIF(lExpr, eExpr1, eExpr2)
Efect: Returneaza valoarea obtinuta prin evaluarea expresiei eExpr1 daca lExpr este 'true' sau
returneaza eExpr2 daca lExpr este 'false'. Cele 2 expresii nu trebuie sa fie (obligatoriu) de acelasi tip.

b) Instructiuni de ciclare
Ciclarea permite executarea uneia sau mai multor linii de cod de câte ori este nevoie. Sunt:
- comenzi pentru bucle cu un numar dat de pasi;
- comenzi pentru bucle cu un numar nedefinit de pasi.
DO WHILE lExpr
Commands
[LOOP] [EXIT]
ENDDO
Efect: Executa Commands atita timp cât lExpr este .T.
Obs.: - dupa fiecare executie a <grup instr.> se reevalueaza <eL>;
- daca lExpr este .F., se executa comanda urmatoare lui ENDDO;
- daca apare LOOP are loc o revenire fortata la inceputul ciclului;
- daca apare EXIT are loc o iesire fortata din bucla.

SCAN [NOOPTIMIZE]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[Commands]

11
[LOOP] [EXIT]
ENDSCAN
Efect: Permite parcurgerea tabelului curent in ordinea indexului curent (daca este activat), tinind
cont si de conditiile din filtru.
Obs.: - se refera doar la parcurgerea unui tabel;
- pointerul de inregistrari inainteaza automat in tabelul care era activ in momentul intrarii
in bucla;
- optiunea NOOPTIMIZE inhiba mecanismul de optimizare Rushmore;
- optiunea LOOP permite reluarea fortata a interatiei;
- optiunea EXIT permite terminarea fortata a instructiunii.
Exemplu: CLOSE DATABASES
OPEN DATABASE Parteneri
USE Clienti && Deschide tabelul clienti
CLEAR && Sterge ecranul

SCAN FOR UPPER(localitate) = 'SUCEAVA'


? cod_cli,nume, manager
ENDSCAN

Obs.: Exemplul determina afisarea tuturir codurilor, denumirilor si managerilor pentru toti
clientii din Suceava. Nu este obligatoriu sa pun o expresie logica in SCAN, caz in care "scanarea"
tabelului se face pana la intilnirea EOF().

12

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