You are on page 1of 20

Comenzi FoxPro

Sistem de gestiune a bazei de date (SGBD Data Base Management System) : -un produs software care asigur interaciunea cu o baz de date, permind definirea, consultarea i actualizarea datelor din baza de date. Baza de date : -este un ansamblu structurat de date coerente, fr redondan inutil, astfel nct acestea pot fi prelucrate eficient de mai muli utilizatori ntr-un mod concurent. Operatii asupra unui tabel: 1.Crearea structurii unui tabel se realizeaz : - prin meniu (File New); -dupa crearea (sau deschiderea) unei baze de date, prin butonul New Table din Database Designer; - prin comanda CREA[TE]. Pentru deschiderea unui tabel existent se folosete comanda: USE <nume_fisier>. Pentru nchiderea unui tabel deschis n zona de lucru curent se folosete comanda USE (fr parametri). 2.Introducerea de nregistrri ntr-un tabel se poate face : -prin comanda APPEND; -prin comanda BROWSE (cu aceast comand se poate realiza orice operaie de adugare, modificare sau tergere ntr-un tabel), urmat de selectarea opiunii Add New Record din meniul Table (echivalenta cu combinatia de taste Ctrl + Y). Pentru a completa un cmp de tip memo:CTRL+Page Down pentru deschidere i CTRL + pentru nchidere. Pentru a completa un cmp de tip general: - poziionare pe cmp; de 2 ori click; - Edit Insert Object; - se alege Object Type i OK (de exemplu paintbrush sau file); - se creaz sau se alege desenul; - File Save As (se da nume - alfa.bmp i OK); CLOSE; 2.Modificarea structurii unui tabel se realizeaz: - prin meniu (View Table Designer); - prin comanda MODI[FY] STRU[CTURE]; - prin click dreapta pe tabel n Database Designer i selectarea opiunii Modify. Obs: n mediul FoxPro, este suficienta introducerea primelor 4 caractere ale unei comenzi. n continuare, nu vom mai semnala acest lucru n mod explicit (prin [ ]). Obs: Comanda CLOSE ALL determin nchiderea bazei de date i a tuturor tabelelor i indecilor deschii.
1

3.Vizualizarea structurii unui tabel se realizeaz prin LIST STRUCTURE DISPLAY STRUCTURE. 4.tergerea de nregistrri: -tergerea logic a nregistrrilor (nregistrrile sunt doar marcate pentru tergere), comanda DELETE; - tergerea fizic a nregistrrilor marcate, realizat prin comanda PACK. Dac se dorete anularea marcajului efectuat prin DELETE, se utilizeaz comanda RECALL ALL. Obs: RECALL anuleaza doar marcajul de stergere al nregistrarii curente. Comanda ZAP sterge toate liniile din tabelul curent, dar structura tabelului se pastreaz.
5.Comenzi

utile: -DISPLAY | LIST STRUCTURE - afieaz structura tabelului deschis n zona de lucru curent. -BROWSE, LIST, DISPLAY ALL- afieaz coninutul tabelului deschis n zona de lucru curent. - DISPLAY -afieaz nregistrarea curent; - CHANGE, EDIT - afieaz cmpurile tabelului, n scopul editrii -GO{ n | TOP | BOTTOM} -poziionarea pe a n-a, prima, respectiv ultima nregistrare - SKIP n - saltul peste n nregistrri; n poate fi numr negativ. -REPLACE <cmp> WITH <valoare> FOR <conditie> - permite actualizarea unei valori a unui cmp din tabel. - LOCATE FOR <conditie> - caut nregistrarea care ndeplineste condiia

Funcii:apelate precedndu-le cu simbolul "?", pentru afiare. Exemplu: ? reccount()).

- RECNO() - RECCOUNT() - FOUND()

- furnizeaz numrul nregistrrii curente din tabel. - furnizeaz numrul de nregistrri din tabel. - ntoarce TRUE sau FALSE dup cum ultima comanda LOCATE lansat a gsit o nregistrare ndeplinind condiia cerut. - DATE() - ntoarce data curent. -{LEFT | RIGHT}(<sir_caractere>, n) -ntoarce cele mai din stnga, respectiv din dreapta, n caractere din argumentul sir_caractere. -SUM(), AVG(), COUNT(), MIN(), MAX() -ntorc suma, media, numrul, minimul,maximul valorilor unei coloane Calculul i afiarea acestor valori se pot realiza : calculate sum(sSalariu) Obs: Dac se d comanda SET TALK OFF, calculate nu afieaz nimic. n acest caz, se poate proceda astfel: calculate sum(sSalariu) to x ?x Obs: Exist i comenzile COUNT, AVERAGE, SUM.exemplu count for <conditie> to x ?x
2

Zone de lucru. Sortare i indexare.


I. Zone de lucru
n aplicaii, apare necesitatea de a lucra cu mai multe tabele n paralel. Pentru aceasta, mediul Foxpro dispune de zone de lucru, iar n fiecare dintre acestea se poate deschide cte un tabel. Aceste zone de lucru sunt numerotate cu numere naturale de la 1 la 32767, iar primele 10 pot fi referite i prin literele A-J. De asemenea, o zon de lucru poate fi referit prin tabelul deschis n cadrul acesteia.

Comenzi i funcii utile : USE <nume_tabel> [IN <zona>] deschide tabelul T n zona de lucru n . Dac nu se precizeaz

zona de lucru, tabelul va fi deschis n zona curent. USE (fr parametri) determin nchiderea tabelului deschis n zona de lucru curent. SELECT n | alias_tabel determin ca zona de lucru identificat prin n sau alias_tabel s devin zona curent . Un alias este un nume atribuit unui tabel ; un tabel poate fi referit prin alias-ul su sau prin zona de lucru n care este deschis. SELECT 0 selecteaz (determin s fie zon curent) zona de lucru n, unde n este cel mai mic numr de zon nefolosit. SELECT([ 0 | 1 | alias_tabel ]) SELECT(0) - ntoarce numrul zonei curente SELECT(1) - ntoarce un numr n, unde n este cel mai mare numr corespunztor unei zone neutilizate. SELECT(alias_tabel) - ntoarce numrul zonei n care este deschis tabelul cu aliasul respectiv. SELECT() - ntoarce numrul zonei curente dac SET COMPATIBLE este OFF i numrul minim al zonei neutilizate dac SET COMPATIBLE este ON. USED([<zona>]) ntoarce .T. sau .F., dup cum zona de lucru specificat este utilizat sau nu (i.e. exist un tabel deschis n aceasta). Dac nu se specific zona, este vorba de cea curent. DBF(alias_tabel | zona) ntoarce numele tabelului care are alias-ul respectiv sau care este deschis n zona de lucru specificat. Pentru observarea zonelor de lucru i a tabelelor deschise n cadrul acestora, se utilizeaz opiunea Data Session din meniul Window.

II. Sortarea tabelelor


Pentru situaiile practice, un tabel ordonat este mult mai folositor. Ordonarea unui tabel presupune: - alegerea unui cmp al tabelului drept criteriu de sortare; - alegerea ordinii sortrii: cresctoare sau descresctoare. Dac exist mai multe nregistrri pentru care cmpul-criteriu are aceeai valoare, ordinea lor poate s nu fie important, dar, de multe ori, se dorete ca nregistrrile cu aceeai valoare a cmpului criteriu sa fie ordonate la rndul lor dup alt criteriu. De exemplu, la un examen de admitere, primul criteriu este nota obtinuta, iar al doilea, este numele concurenilor. Dezavantajele sortrii: - se creeaz noi fiiere pe disc; - este costisitoare ca timp. Avantajul sortrii: cutarea foarte rapid care se poate efectua ntr-un tabel sortat.

Comanda SORT are urmtoarea sintax: SORT TO <nume_fisier> ON <camp1>[/A|/D][/C] [, <camp2>,] [ASCENDING|DESCENDING][<domeniu>] [FOR] [WHILE] [FIELDS <lista_campuri>] Efectul este crearea unui nou tabel cu numele specificat. n acest tabel sunt copiate nregistrrile din tabelul activ, n ordinea valorilor din cmpul <camp1>, n ordine cresctoare. nregistrrile pentru care <camp1> are aceeai valoare sunt la rndul lor sortate dupa <camp2> , etc. Implicit, sortarea dup fiecare din aceste cmpuri se face n ordine cresctoare. Modul de sortare se poate preciza pentru fiecare cmp n parte, incluznd dup numele su una din opiunile /A (pentru sortare cresctoare) sau /D (pentru sortare descresctoare). Obs.: Pentru cmpurile de tip logic, se consider .F. <.T. Nu se poate face sortare dup cmp memo. Dac dorim ca un tabel s fie sortat dup un cmp de tip caracter fr a se face distincie ntre literele mari i mici, vom aduga dup cmpul respectiv opiunea /C. Clauze: - ASCENDING| DESCENDING determin ordinea de sortare pentru toate cmpurile-criteriu pentru care nu s-a specificat una din opiunile /A sau /D. Ordinea implicit este ASCENDING; - FIELDS <lista_campuri> - din structura noului tabel vor face parte numai cmpurile specificate. Informaia din celelalte cmpuri nu este copiat n noul tabel. Numele din list se separ prin virgul. - FIELDS LIKE<lista sabloane> - n noul tabel sunt copiate cmpurile ale cror nume se potrivesc cu unul din abloane. - FIELDS EXCEPT<lista sabloane> - n noul tabel sunt copiate toate cmpurile n afar de cele ale cror nume se potrivesc cu unul din abloane. - <Domeniu> - poate fi ALL, REST, NEXT <numar> sau RECORD <numar> i face ca n noul tabel creat s fie copiate nregistrrile din domeniul specificat. Domeniul implicit este ALL- toate nregistrrile sunt sortate. Exemplu: Fie tabelul CLIENT (ccod, cnume, cprenume, coras, cadresa, ctelefon, cafaceri). Sa se sorteze descrescator dupa cifra de afaceri. use client list sort on cafaceri/D to fclient use fclient list

III. Indexarea tabelelor


Indexarea este posibilitatea de ordonare logic a unui tabel permind parcurgerea ntr-o anumit ordine a nregistrrilor fiierului prin sistemul pointerilor. Indexarea presupune extragerea din fiecare nregistrare a fiierului de baz, a cheii care determin ordinea. Aceast cheie mpreun cu numrul logic al nregistrrii respective vor fi aranjate ntr-un fiier index (simplu indexat, cu extensia .IDX). Un index este n esen un tablou cu 2 coloane. O coloan se refer la nregistrarea din tabel prin valorile date de cheie, iar cealalt coloan conine numrul nregistrrii ce d poziia iniial n tabel. Ca efect deci, un fiier index este o sortare virtual a unui tabel, n timp ce nregistrrile acestuia rmn neschimbate. Exemplu: Iniial: 1 Oprean 2 Dragomir 3 Albu Fiier sortat dup nume: 1 Albu 2 Dragomir 3 Oprean Fiier indexat dupa nume: 3 Albu 2 Dragomir 1 Oprean

Modul de lucru cu un tabel indexat este urmatorul: 1. mai nti se creeaz fiierul index asociat tabelului (indexarea tabelului); se dau cheile i criteriile de indexare; 2. dac se dorete utilizarea tabelului indexat anterior, se deschide tabelul i o dat cu el se deschid i fiierele index asociate, fie automat de FoxPro, fie manual de utilizator; 3. se realizeaz operaiile dorite asupra tabelului (stergere, modificare, listare), nregistrrile fiind vzute n ordinea dat de indexul activ. Modificarea coninutului tabelului implic actualizarea automat a fiierelor index deschise pentru tabelul respectiv; 4. dup ce se termin lucrul cu tabelul, acesta se nchide mpreuna cu fiierele index asociate.
a. b.

Fisierele index asociate unui tabel pot fi: simplu indexate (fiiere index simple, cu extensia .IDX) ce contin un singur criteriu de ordonare; multiplu indexate (fiiere index compuse, cu extensia .CDX), care memoreaz mai multe criterii de ordonare, doar unul singur fiind activ la un moment dat.

Comanda INDEX are urmtoarea sintax: INDEX ON <criteriu> TO <fisier.idx> | TAG <nume_tag> [OF<Fisier.cdx>] [FOR<conditie>] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE] [ADDITIVE] Clauze: - UNIQUE Pentru cazul in care se produc valori duplicat pentru campul de indexare, Visual FoxPro va construi intotdeauna indeci secundari. Daca dorim un index primar, atunci se specifica aceast clauz. - ADDITIVE permite crearea unui fiier index pentru un tabel, n condiiile n care fiierele index deschise anterior rmn deschise.

Fiierele compuse sunt de 2 tipuri: - structurale, deschise i asociate automat tabelului odat cu deschiderea acestuia, folosind comanda USE. Ele au acelai nume cu tabelul, au extensia .CDX i sunt create folosind clauza TAG fara OF - nestructurale, nu sunt deschise automat cu tabelul. Au nume diferit de numele tabelului i va fi specificat n clauza OF
5

Cum se deschid sau se activeaz fiierele index? Odat cu deschiderea unui tabel, se pot deschide i fiiere index asociate acestuia (care anterior au fost create cu o comanda INDEX): USE [<fisier>|?] [INDEX <lista fisiere index>|?] [ORDER [<expresie_numerica>|<fisier.IDX>|[TAG]<nume tag>[of<fisier.CDX>]]] [ASCENDING|]

Dac nu se d ORDER, atunci primul fiier index din list va fi cel activ. <expresie_numerica> este numrul de ordine al fiierului index simplu sau al tagului. Numrarea se face astfel: - mai nti fiierele.IDX (n ordinea din list) - apoi tag-urile din fiierele structurale (n ordinea definirii lor) - apoi tag-urile din fiierele nestructurale n ordinea apariiei lor. Dac se dorete deschiderea unor fiiere index pentru tabelul activ (dup ce acesta a fost deschis) se utilizeaz comanda:

SET INDEX TO [<lista_fisiere_index> | ?] [ORDER <expN> | <idx index file> | [TAG] <tag name> [OF <cdx file>] [ASCENDING | DESCENDING]] [ADDITIVE] Se vor deschide toate fiierele din list. Noua list de fiiere index o va nlocui pe cea veche, dac nu se precizeaz clauza ADDITIVE. Pentru a schimba ordinea de accesare, pentru a selecta un anumit fiier sau tag activ utilizm:

SET ORDER TO [<expN1> | <idx index file> | [TAG] <tag name> [OF <cdx file>] [IN <expN2> | <expC>] [ASCENDING | DESCENDING]] [IN <expN2> | <expC>] permite activarea unui index dintr-o alt zon de lucru dect cea activ. Este posibil i folosirea de alias-uri n locul numrului zonei de lucru.

Cum se nchid sau se dezactiveaz fiierele index? Pentru a nchide toi indecii, n afar de cel compus structural, vom da comanda: SET INDEX TO SET ORDER TO dezactiveaz toi indecii, fr a-i nchide. CLOSE INDEX nchide toate fiierele index din zona de lucru curent, n afara celui structural. Fiierele index pot fi nchise i cu CLOSE ALL, USE, CLOSE DATABASES.

Vizualizarea indexului activ la un moment dat se realizeaz prin: LIST STATUS sau DISPLAY STATUS Pot aprea situaii cnd dou sau mai multe nregistrri corespund la aceeai valoare a cheii de indexare: SET UNIQUE ON | OFF din mulimea de nregistrri cu aceeai valoare a cheii de indexare, va putea fi accesat numai prima dintre acestea. Ce se ntmpl la modificarea coninutului unui tabel? Modificarea coninutului unui tabel determin actualizarea fiierelor index deschise pentru tabelul respectiv, dar cele care nu sunt deschise n momentul executrii modificrilor nu vor fi reactualizate, deci vor memora o stare anterioar a tabelului. Apar astfel discrepane ntre tabel i fiierul index respectiv, care trebuie reactualizat cu noul coninut al tabelului, operaie care poart numele de reindexare. Reindexarea este necesar i cnd se modific tipul indexrii (cu acces unic sau acces multiplu SET UNIQUE). Comanda folosit este: REINDEX [COMPACT] - determin reactualizarea tuturor fiierelor .IDX sau a tag-urilor din .CDX deschise curent pentru tabelul activ. Funcii referitoare la indexarea tabelelor: - NDX(), CDX()- dau numele fiierelor index deschise ntr-o zon de lucru. - Funcia TAG ntoarce numele unui index simplu sau al unei etichete dintr-un index compus. - Numele fiierului simplu indexat activ sau al tag-ului activ cu funcia ORDER. - Ordinea de accesare a nregistrrilor unui fiier indexat este determinat de cheia de indexare. Cheia de indexare se poate afla cu functia KEY. Comenzi referitoare la indexare a) trecerea de la un fiier simplu indexat la un tag dintr-un fiier index compus cu: COPY INDEXES <lista de fisiere index> | ALL [TO <fisier.CDX>] (tag-urile vor avea acelai nume cu fisierul .IDX) b) operaia invers: transformare tag n fiier .IDX: COPY TAG <nume tag> [of <fisier.CDX>] TO <fisier.IDX> c) dup b), tag-ul rmne totui n lista de indeci a tabelului. Pentru a terge tag-ul din fiierul compus: DELETE TAG Obs: Dac dintr-un fiier compus se terg toate tag-urile, fiierul este ters n ntregime de pe disc. d) cutarea unei nregistrri ntr-un tabel indexat se face cu: - comanda SEEK <expresie>; dac este gsit, pointerul se poziioneaz pe ea, iar FOUND() ia valoarea .T.; altfel pointerul se poziioneaz dup ultima nregistrare. - funcia SEEK(expresie,[<expN>|<expC>]) ntoarce o valoare logic: .T. dac este gsit o nregistrare (prima din ele) pentru care valoarea cheii de indexare este egal cu expresia (din argumentul funciei); prin al doilea argument al funciei, se specific tabelul n care se face cutarea (prin zona de lucru sau alias). Obs: Funcia SEEK nlocuiete combinaia: comanda SEEK i funcia FOUND().

Observaii: 1) Presupunem c avem 2 cmpuri numerice cafaceri, cavere i dorim indexare dup cafaceri i in interiorul su dup cavere. use client index on cafaceri+cavere to alfa list Sistemul adun valorile din cmpurile cafaceri i cavere, iar apoi face indexarea, deci se obtine un rezultat eronat. Operatorul + are un sens pentru cmpuri, valori numerice, i alt sens pentru caractere. Rezolvarea problemei se face prin: a) sort on cafaceri, cavere to gama SAU b) index on str(cafaceri)+str(cavere) to delta 2) Litera mare este diferit de litera mic, prin urmare se pot folosi pentru cutri funciile: UPPER transforma literele mici in litere mari LOWER transforma literele mari in litere mici.

Relaii ntre tabele. Programe. Filtre


II. Comanda BROWSE
Comanda BROWSE poate avea urmtoarele clauze: i. FOR <conditie> ii. FREEZE <camp> - permite modificarea doar a valorilor campului specificat iii. NOAPPEND interzice inserarea de inregistrari iv. NODELETE interzice marcarea pentru stergere in fereastra BROWSE v. NOMODIFY, NOEDIT interzic modificarea inregistrarilor existente, dar permit adaugarea si stergerea de inregistrari vi. TITLE<string> - permite schimbarea titlului ferestrei BROWSE vii. VALID <conditie> permite verificarea corectitudinii inregistrarilor introduse viii. WHEN <conditie> - se evalueaza ori de cate ori pozitionam cursorul pe o noua inregistrare; in cazul in care conditia este adevarata, este permisa modificarea liniei respective, altfel nu. ix. FIELDS permite vizualizarea si modificarea numai unei parti din campuri; se pot crea si campuri imaginare (campuiri calculate) Clauza FIELDS are la randul ei o serie de parametri: x. :R campul vizualizat nu poate fi modificat xi. :V=<conditie> - permite efectuarea de validari suplimentare asupra datelor xii. :E=<string> - mesajul de eroare ce va fi afisat in status bar in cazul in care conditia din :V este falsa. xiii. :B=<lim_inf>, <lim_sup> - permite incadrarea corecta a datelor introduse.

III.

Relaii ntre tabele


ntre tabele apar relaii, adic legturi orientate care determin ca orice repoziionare a cursorului n primul tabel (tabel-printe) s atrag dup sine o repoziionare a cursorului n cel de-al doilea tabel (tabel-copil). Pentru ca s se poat realiza o relaie, este necesar ca ntre cele dou tabele s existe un cmp comun.O relaie n care unei nregistrri din tabelul printe i corespunde exact o nregistrare n tabelul copil, se numete relaie one-to-one. O relaie n care unei nregistrri din
8

tabelul printe i pot corespunde zero, una sau mai multe nregistrri din tabelul copil relaia se numete one-to-many.

SET RELATION creeaz relaii one-to-one ntre tabele. SET RELATION TO [<expr1> INTO <expN1> | <expC1> [, <expr2> INTO <expN2> | <expC2> ...] [ADDITIVE]] Exemplu: Indexati tabelul copil (SALARIAT) dupa cmpul comun (sdep): INDEX ON sdep TO idep.idx Urmtoarea secven de instructiuni creeaz o relatie one-to-one : CLOSE DATABASES USE salariat IN 1 INDEX idep.idx USE departament IN 2 SELECT 2 SET RELATION TO dcod INTO 1 select 1 BROWSE NOWAIT SELECT 2 BROWSE NOWAIT

&& tabel copil && tabel parinte

SET SKIP creeaz relaii one-to-many. Comanda se utilizeaz mpreun cu SET RELATION.

SET SKIP TO [<alias1>[, <alias2>] ...] !!! Tabelul copil trebuie indexat dupa cheia extern (cmpul comun sdep). Dac indexarea se face prin index compus structural, nainte de crearea relaiei se va executa comanda: INDEX ON sdep TAG depart ADDITIVE Altfel, dac se indexeaz prin index simplu, vezi exemplul anterior. CLEAR CLOSE DATABASES USE departament in 0 && tabel parinte USE salariat ORDER TAG depart in 0 && tabel copil SELECT departament SET RELATION TO dcod INTO salariat && stabilire relatie one-to one SET SKIP TO salariat && relatie one-to-many SELECT salariat BROWSE NOWAIT SELECT departament BROWSE NOWAIT

RELATION() Returneaz cmpul pe care s-a facut legatura. RELATION(<expN1>[, <expN2> | <expC>]). ExpN1 numarul de ordine al relatiei. ExpC alias-ul tabelului. ExpN2 aria de lucru. Implicit folosete aria de lucru curent ?relation(1)
TARGET() Returneaz alias-ul tabelului care este inta unei relaii (specificat n clauza SET

RELATION dup INTO) TARGET(<expN1>[, <expN2> | <expC>]) la fel ca mai sus

? target(1)
9

Instruciuni FoxPro: IF, FOR, DO WHILE, SCAN, DO CASE, EXIT, LOOP. Comenzile ACCEPT, WAIT, INPUT.
a) IF <expresie_logica> <set de instructiuni> [ELSE < set de instructiuni >] ENDIF b) FOR <memvar> = <expN1> TO <expN2> [STEP <expN3>] <set de instructiuni> [EXIT] ENDFOR memvar = variabil de memorie; expN= expresie numeric. Exemplu: (afiarea numerelor impare de la 1 la 10) CLOSE DATABASES CLEAR FOR mcount = 1 TO 10 STEP 2 ? mcount ENDFOR Exemplu: (afiarea numelor tiprite cu majuscule, utiliznd FOR) SET TALK OFF USE SALARIAT GO TOP STORE RECNO() TO I && STORE comand pentru atribuire; este util atunci cnd && stocm aceeai valoare n mai multe variabile care vor aprea && n comand separate prin virgule STORE RECCOUNT() TO J FOR mcount = I TO J GOTO mcount DISPLAY UPPER (snume) ENDFOR USE c) DO WHILE <expr_logica> <set instructiuni> [LOOP] [EXIT] ENDDO

10

Exemplu: (afiarea primelor 10 numere Fibonacci) CLOSE DATABASES CLEAR STORE 1 TO t0 STORE 1 TO t1 ?'t0=',t0 ?'t1=',t1 i=1 DO WHILE i<10 temp = t0 + t1 t0 = t1 t1 = temp ?'t'+alltrim(str(i,2)),'=', str(t1,2) i=i+1 ENDDO d) DO CASE CASE <expL1> <set instructiuni> [CASE <expL2> < set instructiuni > ... CASE <expLN> < set instructiuni >] [OTHERWISE < set instructiuni >] ENDCASE && expL = expresie logic

Exemplu: (stabilirea n funcie de luna curent, a anotimpului n care ne aflm) STORE CMONTH(DATE( )) TO luna DO CASE CASE INLIST(luna,'March','April','May') STORE 'Este primavara!' TO anotimp CASE INLIST(luna,'June','July','August') STORE 'Este vara!' TO anotimp CASE INLIST(luna,'September', 'October','November') STORE 'Este toamna!' TO anotimp OTHERWISE STORE 'Este iarna!' TO anotimp ENDCASE WAIT WINDOW anotimp NOWAIT e) SCAN mut pointerul in tabelul current si executa un bloc de comenzi pentru fiecare inregistrare care indeplineste conditiile. SCAN [<scope>] [FOR <expL1>] [WHILE <expL2>] [<set_instructiuni>] [LOOP] [EXIT] ENDSCAN
11

Exemplu: (afiarea salariailor i acordarea unei mriri de 250 la salariul celor din departamentul 30, care ctig mai puin de 500) close database clear use salariat go 1 display all scan all for scopii>1 if ssalariu<500 REPLACE salariat.ssalariu WITH 250 endif endscan display all f) EXIT apare in blocuri de tipul DO WHILE, FOR sau SCAN. Transfera controlul la instructiunea imediat urmatoare blocului. g) LOOP apare in blocuri de tipul DO WHILE, FOR sau SCAN. Poate fi plasata oriunde in interiorul acestor blocuri. Transfera controlul direct clauzei DO WHILE, FOR sau SCAN, fr s se execute instruciunile care urmeaz dup LOOP. Aplicatie: Parcurgeti tabela de angajati. Sumati salariile celor care lucreaz n departamentul 30 si au salariul mai mic decat media pe unitate. (Indicatie : calcul medie, parcurgere si pentru fiecare inregistrare, daca salariul e mai mare ca media sau nu lucreaz n departamentul 30, salt la sfarsitul ciclului, altfel continuare cu calculul sumei) h) ACCEPT citire variabila de la tastatura (sir de caractere) ACCEPT [<expC>] TO <memvar> Exemplu: ACCEPT 'Dati numele unui nou client: ' TO var_nume ? var_nume i) WAIT [<expC>] TO <memvar> [WINDOW [NOWAIT]] Exemplu : WAIT WINDOW numele noului client este: ; + var_nume NOWAIT j) INPUT intoduce date de la tastatura; asemntor cu ACCEPT Exemplu : INPUT Dati numele noului client: ' TO var_nume &&textul dat de la tastatura se scrie intre ghilimele
?

4.Filtre (Query)
Interogari modalitati de consultare a informatiilor din mai multe tabele. Se creaza o interogare (FILE -> NEW -> Query sau CREATE QUERY <nume_query>). QBE (Query By Example) este un limbaj de interogare interactiv, care va permite sa spuneti sistemului ce doriti, si nu cum sa obtineti date din mai multe tabele (neprocedural). In linia de comanda poate scrie CREATE QUERY si se deschide editorul pentru query.
12

Reamintiti-va posibilitatile meniului Query, atunci cand este deschis un Query. Observai opiunile de adugare sau eliminare de tabele din interogare clauza FROM (a instruciunii SELECT din SQL), condiii de filtrare a nregistrarilor din rezultat clauza WHERE, lista cmpurilor de afiat lista SELECT, clauza de ordonare ORDER BY, clauza de grupare GROUP BY, clauza HAVING care pune conditii asupra gruparilor, butonul View SQL (din toolbar-ul Query Designer sau din meniu) unde se poate consulta comanda SQL generata de ecran, si optiunea Run Query din meniul Query.

Comenzi i funcii utile


SET PATH TO CLOSE DATABASES | TABLES | ALL EOF

13

RAPOARTE Rapoartele reprezinta o modalitate de prezentare a datelor. Acestea contin informatii extrase din bazele de date si prezentate intr-o anumita forma pe ecran, la imprimanta sau intr-un fisier. Ca si ecranele, rapoartele pot fi create fie prin program, fie folosind generatorul de rapoarte. Crearea unui raport se poate realiza prin: comanda CREATE REPORT <nume raport> CREATE REPORT ? permite alegerea raportului pe care dorim sa l modificm din lista celor existente. meniu: File -> New -> Report Dup aceasta, apare o fereastr care va conine modelul raportului. Fiecare model de raport este memorat ntr-un fiier cu extensia .FRX. Dac un raport cu numele specificat exist deja, el va fi deschis pentru modificare. In bara de meniu superioara, va aprea submeniul Report. Opiunile submeniului View sunt i ele adaptate lucrului cu rapoarte. Modificarea unui raport se realizeaz prin: Comanda MODIFY REPORT <nume raport> Meniu: File -> Open -> Report. Vizualizarea nainte de tiprire a raportului se poate realiza prin opiunea Preview a submeniului View. Tiprirea unui raport se poate realiza prin: Report -> Run Report (opiunea Run Report a submeniului Report); comanda REPORT FORM <nume_raport.frx> - rezultatul acestei ciomenzi este tiprirea pe ecran, n fereastra principal Foxpro, a nregistrrilor n formatul descries n fiierul .FRX. Dintre clauzele acestei comenzi amintim: TO PRINTER tiprete raportul la imprimant. ENVIRONMENT nainte de listarea informaiilor, este ncrcat environment-ul salvat n fiierul .FRX. Clauza este util atunci cnd tabelele necesare raportului nu sunt deschise. TO FILE <nume> - efectueaz tiprirea ntr-un fiier. NOCONSOLE - suprim tiprirea raportului pe ecran. PREVIEW deschide pagina Page Preview. <Domeniu>- selecteaz domeniul de nregistrri care vor fi listate (ALL, REST, NEXT <numar>, RECORD <numar>). FOR <conditie>, WHILE <conditie>. Fereastra de configurare a rapoartelor conine, la inceput, 3 seciuni (benzi): Header i Footer: sunt aezate la nceputul, respectiv la sfritul fiecrei pagini i pot conine informaii ca: numrul de pagin, data crerii raportului etc. Detail este cea mai important, pentru c n ea va fi inclus cte o dat pentru fiecare nregistrare care face parte din raport; aceast seciune cuprinde informaiile de fond ale raportului. Pe langa aceste benzi, in functie de optiunile utilizatorului, in raport pot fi incluse i alte seciuni, prin intermediul submeniului Report: Title i Summary: Inserarea uneia dintre ele (sau ambelor) se face prin submeniul Report -> Title/Summary. Seciunea Title este inclus o singur dat, la nceputul raportului
14

generat i poate fi folosit pentru a afia un titlu generic, data generrii raportului etc. Coninutul seciunii Summary apare o singur dat, la sfritul raportului i n general conine date statistice: medii, sume, maxime i minime referitoare la datele din raport. Group Header (continutul acestei benzi apare n partea superioara a fiecrui grup); Group Footer (continutul ei apare in partea inferioara a fiecarui grup), Pentru a realiza un raport grupat, tabelul din care se extrag datele trebuie sa fie sortat sau indexat dup cheia care d criteriul de grupare. Crearea unui raport grupat se realizeaz prin opiunea Data Grouping din submeniul Report. Aici se vor alege criteriile de grupare ale raportului, iar fiecrui grup i vor corespunde benzi Group Header, Group Footer specifice.

Toolbar-ul Report Controls conine cursorul de selecie, butonul de text (Label), butonul pentru introducerea cmpurilor (Fields), butonul pentru trasarea liniilor (Line), pentru crearea de dreptunghiuri (Rectangle, Rounded Rectangle), pentru inserarea de imagini (Picture/ActiveX Bounded Control). Controlul Button Lock permite crearea succesiv a mai multor controale de un anumit tip. Unele caracteristici ale raportului se stabilesc prin intermediul instrumentelor din toolbar-ul Layout, care se deschide prin optiunea Layout Toolbar din submeniul View. Crearea cmpurilor de intrare / ieire. Introducerea unui camp deschide o fereastr de dialog, n care se poate specifica: expresia cmpului introdus formatul de afiare a cmpului

15

valoarea statistic pe care o conine cmpul: prin butonul Calculations indicm c nu dorim s reinem o simpl valoare n camp, ci o sum, o medie, un maxim etc. Valoarea statistic poate fi calculat pentru ntregul raport sau pentru fiecare pagin n parte. Condiia care trebuie ndeplinit pentru ca respectivul camp s fie afiat: cmpul poate fi vizibil doar n unele nregistrri, prin utilizarea butonului Print When
Forme (ecrane) O form permite schimbul de informaii ntre utilizator i sistemul Visual Foxpro, cu ajutorul unei interfee familiare pentru vizualizarea i introducerea datelor n baza de date. Forma afieaz pe ecran, ntr-o anumit configuraie, ferestre i obiecte specifice, txt, linii, chenare, obiecte de control, asupra crora acioneaz utilizatorul cu ajutorul tastaturii sau al mouse-ului, n vederea transmiterii opiunilor sale sistemului. Formele furnizeaz o mulime vast de obiecte care pot rspunde la evenimente (utilizator sau sistem) astfel nct managementul informaiei devine ct se poate de simplu i intuitiv. Un obiect este o instan a unei clase, avnd astfel att date ct i metode. De exemplu, un control (buton, list etc.) ntr-o form n execuie este un obiect. Un eveniment este o aciune, recunoscut de un obiect, pentru realizarea cruia se scrie un cod (program) corespunztor. Evenimentele sunt generate fie de ctre aciunea utilizatorului (ex: click cu mouse-ul), fie de ctre system (cu timer-e). Cum se creeaz o form? - se deschide fereastra de configurare a formei (Form Designer), n care se definesc obiectele care alctuiesc ecranul i se stabilesc caracteristicile globale ale acestuia. Aceast fereastr se deschide: prin comanda CREATE FORM; prin meniul sistem: File -> New -> Form. - se salveaz fiierul .SCX. - se ruleaz prin meniul Program -> Do, prin butonul Run de pe bara de instrumente sau prin comanda DO FORM nume_fisier.scx. Ce pune la dispoziie fereastra Form Designer? Zona gri a ferestrei este exact forma pe care o vom proiecta, deci dac forma trebuie s aib alt dimensiune este necesar redimensionarea acestei ferestre. Deschiderea Form Designer conduce la apariia meniului Form n bara de meniu superioar i la apariia unor opiuni specifice n cadrul meniului View. n Form designer se pot deschide urmtoarele toolbar-uri (ultimele 3 se pot deschide din meniul View): - Form designer; - Form Controls; Layout; - Color Palette Toolbar-ul Form Controls cuprinde diversele tipuri de obiecte pe care le putem insera n ecran:
-

text (Label); cmpuri de intrare/ieire (Fields); linii (Line), dreptunghiuri (Rectangle, Rounded Rectangle), imagini (Image, ActiveX Control) diverse forme geometrice (Shape); butoane (Command Button) sau grupuri de butoane (Command Group); butoane radio (Option Group); checkbox-uri; Combo Box-uri; liste (List Box);
16

spinner-e; grile (Grid); pagini (Page Frame).

n fereastra Properties a formei avem: - o list ascuns n care putem vizualiza obiectele create; - o list a proprietilor obiectului selectat (toate All sau grupate dup specificul lor Data, Method, Layout, Other). Obiectul selectat poate fi ntreaga form (caz n care se pot seta proprieti generale ale acesteia, de exemplu titlul) sau un control din cadrul formei.

Stabilirea mediului de lucru (Data Environment) Fiecare form are un mediu de lucru asociat. Acesta este un obiect care include tabelele utilizate de form i relaiile ntre ele. Mediul de lucru poate fi proiectat n Data Environment Designer i se salveaz odat cu forma. Data Environment Designer se deschide din meniul View, iar apoi, prin click dreapta i selectarea opiunii Add se pot deschide tabelele necesare. Relaiile dintre tabele se pot stabili prin drag and drop asupra cmpurilor comune (pe baza crora se realizeaz relaia), dinspre tabelul primar (care face referin la cmpurile altui tabel) ctre cel referit. Controale i containere Containerele pot conine alte containere sau controale, avnd rol de obiect printe pentru alte obiecte. De exemplu, o form este obiectul printe al unui obiect din forma respectiv. Controalele pot fi plasate n containere, dar nu pot fi prini ai altor obiecte. De exemplu, un buton nu poate conine un alt obiect. Exemple de containere: - grupurile de butoane pot conine mai multe butoane; - forma poate conine obiecte de tip page frame, grid, orice control; - obiectele grid pot conine coloane;
17

obiectele option group conine mai multe butoane radio; obiectele page frame - conine pagini; obiectele page obiecte grid, orice control.

Butoane La crearea unui buton, vom avea nevoie de setarea urmtoarelor proprieti: caption (mesajul afiat pe el); name - numele butonului: fiecare obiect trebuie s aib un nume asociat prin care celelalte obiecte pot s comunice cu el; cancel specific dac obiectul respectiv este unul de anulare; terminate read specific dac forma este dezactivat la acionarea butonului (opiunea este adecvat unui buton Exit); picture fiierul sau cmpul grafic care ar urma s fie plasat pe control; putem face ca butonul s fie iniial dezactivat, urmnd sa-l activm ulterior (prin program); when event putem specifica n ce condiii se permite apsarea butonului. Codul scris trebuie s fie o funcie care returneaz o valoare logic. Dac valoarea ntoars este .T., butonul se poate apsa n mod obinuit, altfel nu are nici un effect; valid event explicm ce se ntmpl atunci cnd este apsat butonul; message event apare nc pentru compatibilitate cu versiunile anterioare: rezultatul ntors de codul scris la procedura Message va fi trecut n status bar la momentul apsrii butonului. n loc de acesta, se recomand utilizarea proprietii StatusBarText. este posibil introducerea de comentarii, pentru claritate (comment).

IV.

Comenzi utile Comenzi pentru transferul datelor ntre variabile i cmpuri: SCATTER MEMVAR [MEMO] - transfer o nregistrare dintr-un tabel ntr-un grup de variabile de memorie; - pentru fiecare cmp se creeaz cte o variabil de memorie, cu acelai nume, tip de dat, lungime i coninut. GATHER MEMVAR [MEMO] - se atribuie fiecrui cmp al nregistrrii curente valoarea variabilei cu acelai nume. Thisform.refresh actualizeaz toate obiectele folosite de aplicaie

V.

nchiderea unei forme active Pentru a permite utilizatorilor nchiderea formei active prin click pe butonul close sau prin opiunea close din meniu, se seteaz proprietatea Closeable a formei la true iar apoi se utilizeaz comanda RELEASE nume_forma. De exemplu, pentru un buton Quit codul ar putea fi: THISFORM.Release Obs: THIS, THISFORM se utilizeaz pentru a face referin la forma, respectiv la obiectul curent. Ascunderea unei forme se realizeaz prin metoda HIDE.

Indicaie (idee pentru codul procedurii Valid la butoane): Butonul Inceput:


18

go top scatter memvar thisform.refresh wait "Inceputul fisierului" window nowait Butonul Precedent if bof() wait "Inceputul fisierului" window nowait else skip-1 scatter memvar thisform.refresh endif Butonul Urmator if eof() wait "Sfarsitul fisierului" window nowait else skip+1 scatter memvar thisform.refresh endif Butonul Ultimul go bottom scatter memvar thisform.refresh wait "Sfarsitul fisierului" window nowait Butonul Adaugare go bottom append blank scatter memvar memo thisform.refresh Butonul Stergere Pos=recno() use &&inchidere tabel salariat use salariat exclusive && redeschidere tabel in mod exclusive &&(altfel nu e posibila stergerea) go pos delete pack if pos>1 go pos-1 else go top endif Butonul Salvare if reccount() = 0 append blank endif gather memvar thisform.refresh Butonul Iesire thisform.release
19

20

You might also like