Documente Academic
Documente Profesional
Documente Cultură
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:
- 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 | ?]
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 MODIFY COMMAND 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
- Se folosete butonul de execuie din bara de instrumente
- n fereastra de comenzi se foloseste comanda DO
DO ProgramName1 | ProcedureName [IN ProgramName2] [WITH ParameterList]
1
Conceptele de baza ale programrii
Variabile. Macrosubstituia.
Crearea unei variabile sau modificarea valorii acesteia se face prin una din metodele
urmtoare:
(1) memvar = expr
Exemplu: msal=1000
mdata=date()
(2) STORE expr 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 (cmp al
unei baze de date, denumire fiier). Macrosubstituia functioneaz ca i cum n locul variabilei
respective ar fi pus irul de caractere coninut de aceasta, fr apostrofurile delimitatoare.
Operatorul de macrosubstitutie este &. ( && indic un comentariu)
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.
Manipularea datelor
a) Operatori
Operatorii utilizati pentru a crea expresii n Visual FoxPro sunt operatori aritmetici, operatori
relationali, operatori logici, operatori specifici irurilor 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. " i v2="Stefan Cel Mare"
Expresia: ? v1+v2 va avea ca efect afiarea pe ecran a valorii " Univ. Stefan Cel Mare"
2. Daca variabilele v1 si v2 au valorile urmtoare:
v1= " Str. Univ. " i v2=21
Expresia: ? v1+v2 va avea ca efect afisarea pe ecran a unui mesaj de eroare.
b) Comenzi
Fiecare comand determin executarea unei aciuni. Sintaxa generala a unei comenzi este:
Verb <clauza,>< clauza >..
Unde: verb indica aciunea ce trebuie executat iar clauzele sunt opionale si furnizeaz
informaii suplimentare legate de modul cum se va executa actiunea
Daca o comanda este scrisa pe mai mult de o linie, atunci la sfarsitul fiecarei linii
intermedare se va plasa simbolul ;.
2
1. Instructiuni (comenzi) de intrare-iesire
a) Instructiuni de afisare.
Aceasta categorie de comenzi cuprinde urmatoarele instructiuni:
(1) ? Expr1 [PICTURE Cod_format] | [FUNCTION Cod_format] |[AT nColumn]
[FONT Nume_font [,Dimens_Font]
Efect: Afiseaza, pe ecran, valorile uneia sau mai multor expresii Visual FoxPro valide sau le
tipareste la imprimanta, daca SET PRINTER este pe ON , conform valorilor clauzelor PICTURE,
FUNCTION,etc.
Obs.: - clauza AT <expN1> defineste coloana unde se afiseaza <expr1>;
(4) READ
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 cmpurilor specificate;
Exemplu: CLEAR
Zi=SPACE(8)
@ 3,1 SAY "Ce zi este astazi ? " ;
GET zi FUNCTION "M Luni,Marti,Miercuri,Joi,Vineri,Sambata,Duminica";
MESSAGE "Spatiu pentru selectare si apoi Enter"
READ
@ 5,1 SAY "Astazi este : " + zi + "? - apasati o tasta..."
WAIT ""
3
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:
OPEN DATABASE Parteneri
USE Clienti
STORE 0 TO total
LOCATE FOR UPPER(localitate) = 'SUCEAVA'
DO WHILE FOUND( )
total = total + 1
CONTINUE
ENDDO
WAIT WINDOW 'Total clienti din Suceava: ' ;
+ LTRIM(STR(total)) NOWAIT
(2) SUM [Expr] [Scope] [FOR Expr1] [WHILE Expr2] TO variab | TO ARRAY nume_arr
- face o insumare a campurilor numerice dintr-un tabel.
Exemplu: SET DEFA TO D:\universitate\gema
OPEN DATABASE stocuri
STORE 0 to tot_intr
USE rulaj
SUM cant for tipo="I" TO tot_intr
CLEAR
? 'Total intrari: ', tot_intr
CLOSE DATA
4
AVERAGE cant_com TO media && calculeaza media tuturor comenzilor si
&& memoreaza media in variabila de memorie
? media && Afisaza media calculata
In Visual FoxPro exista 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 sau DO CASE ...
ENDCASE.
IF lExpr [THEN]
Comenzi1
[ELSE
Comenzi2]
ENDIF
Efect: Se executa Comenzi1 daca lExpr are valoarea adevarat sau Comenzi2 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 cte un ENDIF pentru fiecare IF
Exemplu: Se presupune ca exista o relatie PERSONAL(codp, nume, functie,salar)
SET TALK OFF
CLEAR
IF Salar2500
REPLACE Salar WITH Salar*1.03
ELSE
REPLACE Salar WITH Salar*1.06
ENDIF
DO CASE
CASE lExpr1
Comenzi1
[CASE lExpr2
Comenzi2
...
CASE lExprN
ComenziN
5
[OTHERWISE
ComenziN+1]
ENDCASE
Efect: Se executa Comenzii pentru prima lExpr cu valoarea .T. sau Comenzin+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 Comenzii si apoi executia comenzii se
incheie;
Un efect asemanator se obtine prin functia:
IIF(lExpr, eExpr1, eExpr2)
Efect: Returneaza valoarea obtinuta prin evaluarea expresiei Expr1 daca lExpr este .T. sau
returneaza Expr2 daca lExpr este .F.. Cele 2 expresii nu trebuie sa fie (obligatoriu) de acelasi tip.
Instructiuni de ciclare
Ciclarea permite executarea uneia sau mai multor linii de cod de cte ori este nevoie. Sunt:
- comenzi pentru bucle cu un numar dat de pasi;
- comenzi pentru bucle cu un numar nedefinit de pasi.
(1) DO WHILE lExpr
Comenzi
[LOOP] [EXIT]
ENDDO
Efect: Executa Comenzi atita timp ct lExpr este .T.
Obs.: - dupa fiecare executie a <grup instr.> se reevalueaza < lExpr >;
- 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.
6
Intrebari si exerciii
Se va crea, salva i rula un program n Fox prin care :
a) Se seteaz drept director de lucru, directorul n care s-a salvat proiectul ( Anexa 2);
b) Se seteaz componentele mediului astfel: (vezi Anexa2)
- pentru dat, anul va fi afiat pe 4 caractere, n format DMY; (vezi Anexa2)
- se activeaz ceasul ;
- se inhib afiarea rezultatelor comenzilor pe ecran ( SET TALK OFF);
c) se vor citi de la tastatur dou valori ce se vor atribui unor variabile (un ir de caractere i o
valoare numeric);
d) se vor afia valorile citite la punctul anterior;
e) se deschide baza de date;
f) se deschide un tabel;
g) se folosete mecanismul adugrii datelor prin program ( succesiunea de comenzi APPE
BLANK i REPLACE.) pentru a aduga minim 3 nregistrri n tabelul deschis
h) se sterge prima inregistrare din tabel
i) prin intermediul unei variabile de memorie numit "opt" introdus de la tastatur, care
poate lua valori n mulimea :D,d,N,n ( se va folosi oricare din variantele ACCEPT, @
SAY GET i READ pentru citirea acesteia), se va crea o structur de ramificare
condiional. ( IF)
a) pe una din ramuri (de ex, pentru D respectiv d) se deschide nc un tabel ntr-o alt zon
i se stabilesc legturi temporare ntre cele dou tabele deschise dup care se va verifica
funcionalitatea legturilor prin afiare (ex. intre Materiale i Intrri cum ati facut
laboratorul trecut))
b) pe cealalt ramur folosindu-se una din structurile de ciclare ( DO WHILE sau SCAN )
se vor se modific valorile unuia dintre cmpuri (REPLACE)
ANEXA1
Principalele funcii predefinite Visual FoxPro
Funcii referitoare la semnul datelor numerice
ABS(nExpr) ntoarce valoarea absolut a expresiei numerice furnizat ca parametru
SIGN(nExpr) - ntoarce semnul expresiei numerice furnizat ca parametru
Functii de aproximare a datelor numerice
INT(nExpr) - ntoarce partea ntreag a expresiei numerice furnizat ca parametru
CEILING(nExpr) ntoarce urmtorul ntreg mai mare sau cel puin egal cu parametrul
FLOOR(nExpr) - ntoarce urmtorul ntreg mai mic sau cel mult egal cu parametrul
ROUND(nExpr, nDecimalPlaces) rotunjete valoarea expresiei numerice la un numr de
poziii zecimale specificat prin cel de-al doilea parametru
Functii matematice elementare
EXP(nExpr) exponentul unei expresii numerice furnizate ca parametru
LOG(nExpr) logaritmul unei expresii numerice
7
SQRT(nExpr) rdcina ptrat a unei expresii numerice
ASIN(nExpr), ACOS(nExpr), SIN(nExpr), COS(nExpr)..- funcii trigonometrice
Functii referitoare la codificarea caracterelor din siruri
CHR(nExpr) ntoarce caracterul asociat codului ANSI (numeric) specificat
ASC (cExpr) ntoarce codul ANSI al primului caracter (cel mai din stnga) din expresia tip ir
de caractere furnizat ca parametru.
Functii referitoare la subsirurile de caractere
SUBSTR(cExpr, nPosStart [, NrCharIntoarse]) ntoarce un subir al irului cExpr, care ncepe
cu caracterul aflat n poziia nPosStart i care conine un numr de caractere dat de
NrCharIntoarse.
Variante:
LEFT(cExpr,nExpr)ntoarce primele nExpr caractere din irul cExpr (cele mai din stnga)
RIGHT(cExpr,nExpr) - ntoarce ultimele nExpr caractere din irul cExpr (cele mi din dreapta)
Alte functii:
REPLICATE(cExpr,nExpr) multiplic irul de caractere cExpr de nExpr ori
SPACE(nExpr) ntoarce un ir de caractere compus din numrul specificat de spaii
Functii de eliminare a blancurilor:
ALLTRIM(cExpr) elimin att spaiile din stnga irului specificat, ct i pe cele din dreapta
acestuia
LTRIM(cExpr) elimin spaiile din stnga irului specificat
RTRIM(cExpr) elimin spaiile din dreapta irului specificat
Functii referitoare la informatii despre un sir de caractere
LEN(cExpr) - ntoarcre lungimea irului specificat ca parametru
ISDIGIT(cExpr) ntoarce valoarea logic .T. dac cel mai din stnga caracter din irul
specificat ca parametru este o cifr (0-9)
ISLALPHA(cExpr) - ntoarce valoarea logic .T. dac cel mai din stnga caracter din irul
specificat ca parametru este o liter
ISLOWER(cExpr) - ntoarce valoarea logic .T. dac cel mai din stnga caracter din irul
specificat ca parametru este o liter mic
ISUPPER(cExpr) ntoarce valoarea logic .T. dac cel mai din stnga caracter din irul specificat
ca parametru este o liter mare
Functii referitoare la transformarea sirurilor de caractere
LOWER(cExpr) - ntoarce irul cExpr scris n ntregime cu litere mici
UPPER(cExpr) - ntoarce irul cExpr scris n ntregime cu litere mari
PROPER(cExpr)- ntoarce irul cExpr scris sub forma unui nume propriu
Functii referitoare la date calendaristice
DATE() - furnizeaz data curent a sistemului;
DOW(dExpr) - returneaz numrul zilei din cadrul sptmnii pentru data specificat;
CDOW(dExpr) - returneaz numele zilei din saptamana pentru data specificata;
DAY(dExpr) - returneaz numrul zilei din cadrul lunii pentru data specificata;
MONTH(dExpr) CMONTH(dExpr) - returneaz numrul/numele lunii pentru data specificat;
YEAR(dExpr) - returneaz anul pentru data specificata;
Funcii pentru controlul timpului:
TIME(<nExpr>) - returneaz un sir de caractere de lungime 8, in formatul HH:MM:SS
ce reprezinta ora exacta a sistemului;
Functie care verifica daca o expresie evaluata este vida sau nu
EMPTY(eExpression)
Functii de conversie
8
- 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 iruri de caractere
STR(nExpr [, nLength [, nDecimalPlaces]])
-transformarea irurilor de caractere in valori numerice
VAL(cExpr)
ANEXA 2
Instruciuni (comenzi) de configurare