52709915 Visual Fox Pro Tutorial

12
Laboratorul nr. 5 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

Transcript of 52709915 Visual Fox Pro Tutorial

Page 1: 52709915 Visual Fox Pro Tutorial

Laboratorul nr. 5

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 File2. din caseta de dialog New se alege Program3. 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

Page 2: 52709915 Visual Fox Pro Tutorial

- în fereastra de comenzi se foloseste comanda DODO 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 dateContainerele 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

Page 3: 52709915 Visual Fox Pro Tutorial

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 datelorFolosirea operatorilorOperatorii 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 numericeINT(nExpr)CEILING(nExpr)FLOOR(nExpr)ROUND(nExpr, nDecimalPlaces)

3

Page 4: 52709915 Visual Fox Pro Tutorial

Functii matematice elementareEXP(nExpr)LOG(nExpr)SQRT(nExpr)SIN(nExpr): COS(nExpr)..ASIN(nExpr): ACOS(nExpr)..

Functii referitoare la codificarea caracterelor din siruriCHR(nExpr)ASC (cExpr)

Functii referitoare la subsirurile de caractereSUBSTR(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 caractereLEN(<cExpr>);ISDIGIT(<cExpr>);ISLALPHA(<cExpr>);ISLOWER(<cExpr>);ISUPPER(<cExpr>);

Functii referitoare la transformarea sirurilor de caractereLOWER(<cExpr>);UPPER(<cExpr>);PROPER(<cExpr>);

Functii referitoare la date calendaristiceDATE() - 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 calendaristiceSET CENTURY ON/OFFSET 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 | OFFSET CLOCK TO [<ROW>,<COL>]SET HOURS TO [12 | 24]

4

Page 5: 52709915 Visual Fox Pro Tutorial

Funcţie care verifica daca o expresie evaluata este vida sau nuEMPTY(eExpression)

Funcţii de conversie- din grade în radiani si invers

DTOR(nExpr)RTOD(nExpr)

- transformarea unei date calendaristice intr-un sir de caractereDTOC (<dExpr>)DTOS (<dExpr>)MDY (<dExpr>); DMY (<dExpr>)

- transformarea unui sir de caractere in data calendaristicaCTOD (<cExpr>)

- transformarea valorilor numerice in siruri de caractereSTR(nExpr [, nLength [, nDecimalPlaces]])

- transformarea sirurilor de caractere in valori numericeVAL(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

Page 6: 52709915 Visual Fox Pro Tutorial

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

Page 7: 52709915 Visual Fox Pro Tutorial

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

Page 8: 52709915 Visual Fox Pro Tutorial

[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 OFFSET STATUS OFFSET SCOREBOARD OFFZi=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 ONSET SCOREBOARD ONSET TALK ON

2. Instructiuni de cautare a inregistrarilor intr-un tabelCautarea 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 OFFCLOSE DATABASESOPEN DATABASE ParteneriUSE Clienti STORE 0 TO gnCountLOCATE FOR UPPER(localitate) = 'SUCEAVA'DO WHILE FOUND( )

gnCount = gnCount + 1

8

Page 9: 52709915 Visual Fox Pro Tutorial

CONTINUEENDDOWAIT WINDOW 'Total clienti din Suceava: ' ;

+ LTRIM(STR(gnCount)) NOWAIT

3. Extragerea informatiilor statistice din tabeleScopul 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 DATABASESOPEN DATABASE ParteneriUSE ClientiCLEARCOUNT 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 ParteneriUSE ProduseSUM stoc, cant_com, stoc+cant_com ;

TO tstoc, tcant_com, stocfCLEAR?? '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 TranzactiiUSE comenziCLEARAVERAGE cant_com && calculeaza media tuturor coomenzilorAVERAGE cant_com TO gnAvg && memoreaza media in variabila de memorie

9

Page 10: 52709915 Visual Fox Pro Tutorial

? 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 TranzactiiUSE 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 TranzactiiUSE Comenzi INDEX ON cod_furn tag furnizTOTAL TO furn_tot ON furniz USE furn_totLIST

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 conditionalaPermite 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[ELSECommands2]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

Page 11: 52709915 Visual Fox Pro Tutorial

Exemplu: Se presupune ca exista o relatie PERSONAL(codp, nume, functie,salar)SET TALK OFFCLEARIF Salar>= 25000000

REPLACE Salar WITH Salar*1.03ELSE

REPLACE Salar WITH Salar*1.06ENDIF

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 ciclareCiclarea 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]ENDDOEfect: 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

Page 12: 52709915 Visual Fox Pro Tutorial

[LOOP] [EXIT]ENDSCANEfect: 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 DATABASESOPEN DATABASE ParteneriUSE Clienti && Deschide tabelul clientiCLEAR && Sterge ecranul

SCAN FOR UPPER(localitate) = 'SUCEAVA' ? cod_cli,nume, managerENDSCAN

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