Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
Mecanismele programarii in Visual FoxPro



Mecanismele programarii in Visual FoxPro


Mecanismele programarii in Visual FoxPro


Programarea in 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 in:

fereastra Command

fisiere de programe;

ferestre de cod pentru evenimente sau metode in cadrul proiectantului de formulare (Form Designer) sau al proiectantului de clase (Class Designer);

ferestre procedurale in cadrul proiectantului de meniuri (Menu Designer);

ferestre procedurale in cadrul proiectantului de rapoarte (Report Designer).

Crearea de programe

- 1. in 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

se alege New File.

in 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, in care se pot edita instructiunile programului.

Salvarea programelor

din meniul File se alege Save

daca se salveaza un program creat in Progect Manager , acesta este automat adaugat proiectului.


Modificarea programelor

Inainte de a modifica un program, acesta trebuie redeschis prin una din urmatoarele metode:

pentru programele cuprinse intr-un proiect, se selecteaza in Project Manager si se alege comanda Modify

in 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 in care se specifica numele programului sau parametrul '?'.

Rularea programelor

daca programul este cuprins intr-un proiect, se selecteaza din Project Manager si se alege comanda Run.

Din meniul Program se alege comanda Do

in fereastra de comenzi se foloseste comanda DO

DO ProgramName1 | ProcedureName [IN ProgramName2] [WITH ParameterList]


Conceptele de baza ale programarii

Stocarea datelor

Fiecare data cu care se lucreaza apartine unui anumit tip, care determina modul in care aceasta poate fi stocata si folosita.


Containere de date

Containerele de date permit executarea acelorasi operatii asupra mai multor date simultan. Principalele containere de date in Visual FoxPro sunt:

Tipul

Descriere

Variabile

Elemente singulare de date stocate in memoria RAM a calculatorului

Inregistrari in tabele

Randuri multiple de campuri predefinite, fiecare din acestea continand date care corespund tipului declarat.

Matrice (masive)

Elemente multiple de date stocate in RAM.


Variabile. Instructiuni si functii de lucru cu variabilele.

Macrosubstitutia.

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. Numarul de elemente pe o dimensiune se poate preciza si prin expresii. In plus, in limbajul Visual FoxPro caracteristica de tip este asociata elementului tablou si nu tabloului, de unde rezulta ca elementele aceluiasi tablou pot fi tipuri diferite.

Crearea unei variabile sau modificarea valorii acesteia se face prin una din metodele urmatoare:

<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 (camp al unei baze de date, denumire fisier).

Macrosubstitutia functioneaza ca si in locul variabilei respective ar fi pus sirul de caractere continut de aceasta, fara 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


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 afisarea 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 in Visual FoxPro sunt:

operatori aritmetici: adunare, scadere, inmultire, ridicare la patrat etc,

operatori relationali: <,>,=,<=,>=, <>. Ordinea lor de prioritate este aceeasi, de la stanga 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:

Fie urmatoarele valori de tip caracter stocate in variabilele v1 si v2:

v1= 'Univ. '

v2='Stefan Cel Mare'

Expresia:

? v1+v2      va avea ca efect afisarea pe ecran a valorii ' Univ. Stefan Cel Mare'

Daca variabilele v1 si v2 au valorile urmatoare:

v1= ' Str. Univ. '

v2=21

Expresia:

? v1+v2 va avea ca efect afisarea pe ecran a unui mesaj de eroare.

Nota: Un semn de intrebare (?) la inceputul unei expresii genereaza un caracter de salt la linie noua si determina afisarea rezultatului expresiei in fereastra de rezultate activa.

Pentru un anumit operator trebuie folosite aceleasi tipuri de date, in caz contrar se va genera un mesaj de eroare de nepotrivire de tip.

Pentru evitarea acestui tip de probleme se vor folosi functiile 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)

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;

Instructiuni pentru controlul formatului de afisare al ceasului sistem:

SET CLOCK ON | OFF

SET CLOCK TO [<ROW>,<COL>]

SET HOURS TO [12 | 24]

Functie care verifica daca o expresie evaluata este vida sau nu

EMPTY(eExpression)

Functii de conversie

- din grade in 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 >..

Exista o serie de clauze comune tuturor comenzilor, si anume clauzele de selectie respectiv clauzele de domeniu.

a)     Clauzele de selectie – permit comenzilor exprimate prim verb sa se execute numai asupra acelor inregistrari care satisfac o conditie impusa. 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;

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


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:

? | ?? 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> ]

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.


READ

[CYCLE]

[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

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

? 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, in 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 cate un ENDIF pentru fiecare IF

Exemplu: Se presupune ca exista o relatie PERSONAL(codp, nume, functie,salar)

SET TALK OFF

CLEAR

IF Salar>

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 cate 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 cat 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]
[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().



Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright