foxpro seminarii

Upload: ion-antonescu

Post on 08-Jul-2015

209 views

Category:

Documents


2 download

TRANSCRIPT

Concepte privind sistemele de baze de date * Baza de date (DataBase System) este un ansamblu de colectii de date (organizat pe niveluri), coerent (integritatea si securitatea), structurat (conform unui model de date), cu o redundanta minima si controlata (prin tehnici de proiectare), accesibil mai multor utilizatori in timp util. * Componentele bazei de date sunt: colectiile de date propriu-zise, dictionarul de date, fisierele auxiliare (clustere, biblioteci etc.), datele virtuale(viziuni, zone de memorie etc.). * Sitemul de Gestiune a Bazelor de Date SGBD (DataBase Management System) este un ansamblu complex de programe (software) care formeaza interfata intre baza de date si utilizatorii acesteia si asigura legatura si interdependenta intre toate componentele unui sistem de baze de date. * Componentele unui SGBD sunt: nucleul, interfetele pentru dezvoltatori (limbaje de descriere, de manipulare, interfete cu alte limbaje, generatoare etc.), instrumentele pentru diferiti utilizatori (utilitare, convertoare etc.) * Functiile unui SGBD sunt: descrierea datelor ( prin Limbajul de Descriere a Datelor), manipularea datelor (prin limbajul de manipulare a datelor LMD), utilizare (pe categorii de utilizatori), administrare (instrumente pentru administratorul BD). * Organizarea datelor - este un set de metode si tehnici pentru definirea si structuraera datelor in colectii, precum si pentru stabilirea legaturilor intre elementele unei colectii si intre colectii. * Colectia de date este un ansamblu de date organizat dupa anumite criterii si format din urmatorele componente: caracteristicile (definesc aspecte ale obiectelor din lumea reala), predicatul (defineste o relatie de ordine cu un anumit scop), alte componente ce iau in considerare tipul si legaturile. * Fisierul este o colectie de date organizata dupa criterii calitative, de prelucrare si scop. * Structura de date este o colectie de date intre care s-au stabilit o serie de legaturi, care conduc la un anumit mod de identificare si selectie a componentelor. * Modelul logic de date este un ansamblu de concepte si instrumente necesar pentru a construi o schema a bazei de date. Elementele unui model logic de date sunt: definirea structurii de date (entitatile, caracteristicile, legaturile), operatorii (actioneaza asupra structurii de date), restrictiile de integritate (reguli ce asigura corectitudinea datelor-coerenta). * Baza de Date Relationala (BDR) este un ansamblu de tabele prin care se reprezinta atat datele cat si legaturile dintre ele. * Tabela (relatia) reprezinta un ansamblu al produsului cartezian al mai multor domenii caracterizat printr-un nume si care contine tupluri cu semnificatie. * Domeniul reprezinta un set de valori caracterizat printr-un nume; * Atributul (campul) este o coloana a unei tabele care are un nume si ia valori dintr-un domeniu. * Tuplul (inregistrarea) este o linie dintr-o tabela, nu are un nume si ia valori din produsul cartezian al domeniilor. * Cheia primara este un atribut sau grup de atribute care face ca fiecarui tuplu sa-i corespunda o valoare distincta (identifica un tuplu). * Cardinalitatea tabelei este data de numarul de linii dintr-o tabela. * Schema relatiei este data de multimea atributelor prin care se descrie o relatie impreuna cu domeniile asociate acestora si numele atribuite. * Schema relationala este compusa din schema relatiei + restrictiile de integritate + cheile. * Operatorii din algebra relationala: proiectia, selectia, jonctiunea, reuniunea, diferenta, intersectia etc. * Restrictiile de integritate in modelul relational: unicitaeta cheii (UNIQUE), referentiala (REFERENTIAL cheie externe), entitati (NOT NULL), cheia primara (PRIMARY KEY), comportament (CHECK), dependenta datelor ( functionale, multivaloare, joctiune la proiectare). Tabela Descrierea tabelei formeaza STRUCTURA o Colectia de date este formata din inregistrari de date O inregistrare de date reprezinta totalitatea datelor memorate despre un obiect al tabelei bazei de date.

o

O inregistrare este formata din campuri de date. Campul de date este zona de memorie in care se inreg. o anumita data. Fiecare camp de date se descrie prin: o Nume (este dat de utilizator la crearea bd.(1-10) o Tip (natura) (precizeaza tipul informatiei ce se memoreaza Numeric Character Logic Date Memo o Lungime: - marimea zonei de suport necesara pt. a dispune informatia respectiva exprimata in nr. de caractere / pozitii: Numeric: 20 pozitii (incluzand si punctul zecimal) Character: 254 de caractere; Logic: 1 / 0 (True / False) Date: 8 Camp de date Memo pe ecran apare 10 dar apasand Ctrl/PgDn pe el se va deschide o fereastra de editare care permite introducerea unor texte mari, care se memoreaza ca fisiere separate. Inchiderea ferestrei si salvare se face tastand Ctrl/W.

Cod

Nume

Gr.

Adresa

Tel

Cateva definitii utile * Date Aspecte elementare ale unor obiecte, actiuni, fenomene din lumea reala nesupuse unor operatii de prelucrare si neevaluate din punct de vedere al utilitatii; * Informatie ansamblu de date corelate si elaborate intr-un scop bine determinat, care satisface cerintele celor ce le utilizeaza; * Articol (field) unitate elementara de date, care poate fi identificata cu ajutorul unui nume * Tipul (schema) articolului ansamblu format din identificatorul articolului, descrierea multimii valorilor acceptabile pentru articol (tip de date) si a formatului de memorare; * Inregistrare (record) colectie de articole * Set de date (table) multime de inregistrari de un anumit tip * Zona subdiviziune a memoriei interne, identificabila printr-un nume si care poate memora inregistrari; * Schema bazei de date ansamblu format din lista identificatorilor folositi si descrierea articolelor, grupurilor de date, inregistrarilor, seturilor de date si a zonelor. Schema defineste un tip de baza de date; * Baza de date totalitatea exemplarelor inregistrarilor, seturilor, zonelor organizate sub o anumita schema. In acceptiunea Visual FoxPro, baza de date cuprinde toate tabelele de date, indecsii, precum si toate relatiile stabilite intre tabele; * Dictionarul datelor

multimea descrierilor obiectelor unei baze de date * Administratorul bazei de date persoana sau grup de persoane responsabile de analiza, proiectarea, implementarea si intretinerea bazei de date; * Sistem de gestiune a bazei de date (SGBD) ansamblu de programe destinate crearii, intretinerii si exploatarii bazei de date. SGBD furnizeaza interfata dintre baza de date si utilizatorii acesteia. Un SGBD foloseste in principiu trei limbaje: un limbaj de descriere a datelor fizice, un limbaj de descriere a datelor logice si un limbaj de prelucrare a datelor. Arhitectura unei baze de date O baza de date are urmatoarea arhitectura (in principiu):

baza de date propri-zisa; sistemul de gestiune a bazelor de date, care realizeaza gestiunea si prelucrarea datelor continute de baza de date; dictionarul bazei de date (informatii referitoare la structura datelor, statistici, documentatie...) mijloace hardware utilizate; reglementari administrative personalul implicat: administrator, utilizatori finali, operatori, programatori;

Cum arata o tabela de date (Table)? Dupa cum unii stiu iar altii nu, prin model intelegem o abstractizare a unui sistem, obiect, entitate, fenomen din lumea reala, caruia i se retin doar acele caracteristici considerate esentiale, definitorii (din punctul de vedere al observatorului, in cazul nostru fiind vorba despre analist). Activitatea prin care se creeaza un model se numeste modelare. Analistul identifica proprietatile esentiale si le asociaza cate un atribut care sa le descrie. Atributele iau valori intr-un anumit domeniu. Exemplu: Sa luam urmatorul exemplu: intr-un liceu este nevoie, printre multe altele, de repartizarea elevilor la admiterea in liceu. Una dintre entitatile din modelul nostru va fi entitatea elev. Analistul nostru nu va trebui sa retina aspecte neconcludente ca: inaltimea elevului, culoarea ochilor sau darea de mana a parintilor... Analistul va retine urmatoarele aspecte:

codul elevului (poate fi ales numarul matricol, de exemplu); nume prenume media scoala profil1 profil2 profil3

Dupa cum observati, fiecare elev isi va putea exprima trei optiuni, in ordinea preferintei, ei urmand a fi repartizati in functie de preferinta si medie.

Operatii cu tabele

Tabela, impreuna cu inregistrarile pe care le contine, pot fi privite ca fiind un tabel, in care:

capul de tabel corespunde structurii tabelei (numele campului apare la inceputul unei coloane de date) inregistrarea corespunde unei linii a tabelului

Definirea structurii tabelei se va face specificand, pentru fiecare camp:

numele(name) = identificator unic prin intermediul caruia se pot manipula valorile efective ale campului tipul (type)= specifica domeniul in care poate lua valori atributul campului; In VFP sunt admise valori de urmatoarele tipuri: o character = sir de caractere o numeric = intreg sau real o integer = intreg de maxim 4 cifre o float = real (20 cifre cu 19 zecimale) o double = real (8 cifre si 18 zecimale) o logical = logic (cu valori .T. - true si .F. - false) o date = data calendaristica (lungime fixa de 8 caractere) o date time = data si ora o currency = moneda (marime fixa de 8 caractere) o memo = sir lung de caractere, memorat separat si afisat doar la cerere; in campurile de acest tip se memoreaza de fapt un pointer la zona ce contine sirul; o general = valorile acestui tip sunt obiecte de diverse tipuri: grafice, sunet, foaie de calcul. Inglobarea acestor obiecte se face prin mecanismul OLE - Object Linking and Embedding (legare si incorporare de obiecte); marimea (width) = specifica numarul de caractere/cifre; anumite tipuri au valori de lungime fixa (vezi mai sus); zecimale (decimals) = numar de zecimale (valabil doar pentru campurile double, float, numeric); index (index) = specifica daca tabela este indexata dupa acel camp (vom vedea mai tarziu ce inseamna asta); Null = .........;

Crearea unei tabele Crearea unei tabele se poate face in trei moduri:

din meniul TOOLS -> Wizards ->Table se porneste construirea tabelei prin asistenta pas cu pas; in fereastra de comenzi se da comanda: CREATE [nume_tabela] care lanseaza fereastra de editare a structurii tabelei (table designer);

intr-un modul de program sau in fereastra de comenzi se poate da comanda: CREATE TABLE nume.dbf ( nume_cimp1 tip [ (marime [scala])] [, nume_cimp2 ...] unde:

o o o o

nume.dbf - numele, eventual calea, fisierului care va contine tabela; tip - o singura litera care specifica tipul: C-character, N - numeric, F - float, ... marime - este specificata doar pentru tipurile care nu au marime fixa; scala - numarul de zecimale (pentru tipuri reale);

Pentru tabela considerata in exemplul de mai sus vom da comanda: Create Table elev.dbf ( cod N(4), nume C(20), prenume C(15), media F(2,2) ,scoala C(20), profil1 C(2), profil2 C(2), profil3 C(3))

Dupa definirea structurii bazei de date in fereastra Table Designer, utilizatorul este intrebat daca introduce sau nu inregistrari in momentul respectiv. Daca raspunsul este afirmativ, va apare pe ecran fereastra de editare a valorilor campurilor, sub forma unui tabel sau a unei liste. Introducerea inregistrarilor se incheie prin inchiderea ferestrei de editare. **********************************************************

1. creare 2. actualizare a. a structurii b. a datelor i. adaugare ii. modificare iii. stergere 3. sortare 4. interogare (cautare in tabela si regasirea info. Dorite) 5. afisarea 6. stabilirea relatiilor 7. afisarea formatata inchidere / deschidere Moduri de lucru in FoxPro direct prin comanda (utiliz. Introduce comenzi de la tastatura) asistat prin intermediul meniului program indirect cand succesiunea de comenzi e memorata intr-un fisier numit program sursa cu extensia .prg Zone de memorie - Comenzile de prelucrare a datelor nu precizeaza tabela sursa ci actioneaza automat asupra tabelelor active/deschise (in zona respectiva de memorie) - Pt a deschide mai multe tabele simultan trebuie precizate mai multe zone de memorie Ex: Select 1 USE stud Select 2 USE prof List Select 1 List

&& SAU USE facultati IN 3 && adica deschiderea tabelei facultari in zona 3 de memorie Fiecare comanda Fox are implicit un domeniu de actiune ce poate fi: fie intreg. curenta, fie toate inreg. de date. Utilizatorul poate schimba acest domniu implicit de actiune prin 2 metode: a. Prin specificarea expresa a domeniului dorit: a.a. ALL (comanda actioneaza asupra tuturor inreg) a.b. Next n (comanda actioneaza asupra urmatoarelor n inreg. incepand cu cea curenta) a.c. REST (comanda act. asupra celorlalte inreg. incepand cu cea curenta) a.d. RECORD n (comanda actioneaza asupra inreg cu nr de ordine n) b. Prin introducerea unei expresii conditionale: b.a. Conditia FOR b.b. Cond WHILE Cond. FOR va selecta din tabela si va actiona doar asupra inregistrarilor ce indeplinesc conditia specificata. Cond. WHILE va actiona atata timp cat conditia ramane adevarata. Comanda LIST asemanatoare cu DISPLAY Afiseaza diferite date conform conditiilor de afisare in fereastra principala foxpro. List are setat ca domeniu implicit ALL, spre deosebire de display la care trebuie specificat domeniul. Atenie: Avand in vedere ca LIST este setat pe ALL, si, afiseaza toate datele neoprindu-se atunci cand fereastra s-a umplut cu date, sfatuim folosirea comenzii DISPLAY care se opreste afisand mesajul Press any key to continue Ex: List FOR medie > 9 List WHILE medie > 9 (se opreste la prima medie < 9) List record 3 LIST STATUS // SAU // DISPLAY STATUS { aceasta comanda afiseaza datele referitoare statusului mediului FoxPro: datele despre tabele si indecsii aferenti: tabele active indecsi active atributele de citire / scriere atribuite fisierelor etc. } LIST STRUCTURE // SAU // DISP STRU { afiseaza scructura tabelei deschisa in zona curenta de lucru } pt. a afisa scructura unei tabele deschisa in alta zona de memorie se foloseste comanda compusa: Ex: DISP STRU IN 3 ( adica: DISP STRU IN Sintaxa completa a comenzii DISP STRU este: DISPLAY STRUCTURE IN [expN | expC] [ TO PRINTER [PROMPT] | TO FILE ] [ NOCONSOLE ] LIST MEMORY // SAU // DISPLAY MEMORY { afiseaza continutul curent al variabilelor de memorie si al vectorilor } Comanda Copy comanda de copiere a anumitor date dintr-o tabela in alta):

Ex: - copy stru to stud2 (copiaza doar structura tabelei deschisa in zona de lucru active in stud2) - copy to stud3 (copiaza si structura si datele) - copy to stud3 for FAC = INFO - copy stru to stud4 FIELDS LIKE I*, N* - copy stru to stud4 FIELDS LIKE I*, N* EXCEPT NRTEL* Constantele de tip caracter se pun intre delimitatorii Constanta de tip logic se pune intre delimitatorii . . (ex: .Y.) Constanta de tip data se incadreaza intre { } (Ex: List for DATAN={10/24/79} ) Operatorii matematici: - ; + ; / ; ** sau ^n(ridicare la putere) ; () schimbarea ordinii operatiilor Operatia de adaugare: Append (adauga la sf tabelei inreg noi) Append from nume tab (adauga la sf tabelei inreg noi dintr-o alta tabela) Insert (insereaza o noua inreg intre inreg bazei de date , ceea ce inseamna recopierea celorlalte inreg. cu un camp mai jos) Comanda APPEND: Ex: APPEND APPEND FROM fisier_21.txt DELIMITED WITH TAB APPEND FROM fisier_21.txt TYPE DELIMITED ASCII WITH BLANK APPEND FROM stud2 FIELDS ID_STUD, NUME_STUD FOR ID_STUD > 8823 Comanda INSERT: GO 3 INSERT GO TOP INSERT BEFORE // insereaza in fata primei inreg din tabela asta bineinteles dupa comanda GO TOP !!!

Operatia de modificare CHANGE EDIT BROWSE REPLACE ( face modificari dictate pe baza unei formule de calcul si/sau a unei conditii (Ex: Replace ALL grupe wit grupe + 1 FOR an = 2 and fac=infor Comanda CHANGE: Ex: CHANGE REDIT CHANGE FIELDS nume :H=Nume Student, datan :H=Data Nastere REDIT Comanda REPLACE: Ex: REPLACE nume with Popescu for nume =oPpescu && adica inlocuirea lui "oPescu" cu inreg. corescta adica "Popescu"

Functii destinate lucrului cu bd si fisiere asociate. * ALIAS() sau ALIAS(expN) afis. alias-ul bd deschise in zona de lucru spec, sau aliasul zonei de lucru curente. Ex: USE stud ALIAS Studenti ? ALIAS() * Ex: DBF() Numele tabelei deschisa in zona de lucru spec. SELECT a USE studenti ? USED() && afiseaza .T. ? DBF(1) && afiseaza studenti.dbf ? DBF() * EOF() returneaza valorarea logica TRUE daca a gasit sf. de fisier

Indexare simpla necesara pt. anumite functii: Index on cod to index_cod * Ex: * Ex: * Ex: * Ex: SEEK() Returneaza .T. dc. Expresia cautata este gasita in indexul activ. Seek 3 ? FOUND() ORDER() returneaza numele fis. index activ in zona de mem. curenta. ? Order() RECNO() returneaza nr. inreg curente din tablea activa. ? Recno() DELETED() returneaza val .T. daca inreg curenta este marcata pt. stergere ? Deleted() && verifica daca inreg. Curenta este marcata pt. stergere sau nu LIST for DELETED() && afiseaza inreg marcate pt. stergere BROWSE for DELETED() && afiseaza inreg marcate pt. stergere in fereastra BROWSE Functii dest. prelucrarii datelor numerice: * CHR() ret. caracterul care corespunde codului ASCII Ex: ? CHR(7) + Beep * INT() ret. partea intreaga si ignora partea zecimala Ex: ? INT(5.2) * ROUND() rotunjeste la un anumit numar de zecimale (dc. exp a doua este negativa at. Se rotunjeste la multimli de 10, 100 etc. Adica pt -1 se rotunjeste la 10 iar pt. -2 se rotunjeste la 100) Ex: ? ROUND(5.22,0) -> 5 ? ROUND(5.29,1) -> 5.3 ? ROUND(-5.22,0) -> -5

? ROUND(8,-1) ? ROUND(125,-2) * Ex:

-> ->

10 100

CEILING() returneaza un integer care este mai mare decat argumentul ? CEILING(5.2) -> 6 ? CEILING(5.6) -> 6 ? CEILING(-5.2) -> -5

* Ex:

FLOOR() - returneaza un integer care este mai mic decat argumentul ? FLOOR(5.2) -> 5 ? FLOOR(5.6) -> 5 ? FLOOR(-5.2) -> -6 * STR(expN1,expN2,axpN3) converteste val numerica expN1 intr-un sir de caractere pe o lungime de expN2 si daca este cazul expN3 nr pozitiilor zecimale. Ex: ? STR(5,6,2) -> 5.00 ? STR(5,6) -> 5 Functii destinate prelucrarii sirurilor de caractere: * CTOD() converteste un string care arata ca o data calendaristica, intr-o expresie de tip data calendaristica. Ex: ? CTOD(4/27/03) CTOD(3/3/03) -> 55 (zile pana la paste) * SUBSTR(expC,Poz, Lungime) extrage sin sirul expC un subsir incepand cu pozitia Poz pe o anumita lungime * LOWER() converteste literele majusculele in minuscule * UPPER() conv. literele min in maj * LEFT() returneaza un anumit numar de caractere dintr-un string incepand de la prima litera. Ex: STORE JOHN TO m ? UPPER(LEFT(m,1)) + LOWER(SUBSTR(m,2)) -> John * VAL() converteste un string care incepe cu o cifra in intr-o variabila de tip numeric Ex: ? VAL(500 de case sunt pe strada noastra) -> 500 Functii de tip data calendaristica * Ex: * * Ex: * * * * * CDOW() returneaza numele zilei, dandu-se o expresie de tip data. ? CDOW({3/3/2003}) DATE() data sistemului DTOC() conv. o expresie de tip data intr-un sting de caractere. ? DTOC(DATE()) ? DTOC(DATE(),1) AAAA/LL/ZZ DTOS() la fel ca la DTOC() dar cu argumentul 1. DMY() data in format zz/ll/aa MDY() data in format Luna , zz , aa YEAR() returneaza anul in format aaaa TIME() ora curenta Creare si relationare tabele sub foxpro Obiectivul seminarului de azi: - Realizarea a 2 tabele folosind comanda completa CREATE TABLE; - Indexarea celor 2 tabele realizate;

- Relationarea celor 2 tabele folosind comenzi foxpro; - Afisarea rezultatelor celor 2 tabele relationate folosind coenzi foxpro. 1. CREATE TABLE - SQL sintaxa: CREATE TABLE | DBF ( [( [, ]) [, < nume_camp1> ...]]) | FROM ARRAY Tabel pentru tip_camp:

Exemplificare pentru obiectivul seminarului: create table studenti(id_stud n(5), nume c(30), tel c(30)) create table facultati(id_fac c(3), etaj n(1), id_stud n(5)) 2. Crearea indexului: Sintaxa: INDEX on TO | TAG [OF ] [FOR ] [COMPACT] [ASCENDING | DESCENDING] [UNIQUE] && se cer valori unice pentru fiecare inreg [ADDITIVE] && precizeaza ca fisierele index deschise anterior raman in continuare deschise Exemplificare pentru obiectivul seminarului: use studenti index on id_stud tag id_stud of ind_stud use facultati

index on id_stud tag id_stud of ind_fac 3. Relationarea close all use studenti index ind_stud order id_stud in 0 use facultati index ind_fac order id_stud in 0 select studenti set relation to id_stud into facultati set skip to facultati 4. Afisarea continutului conform relatiei browse fields studenti.id_stud, studenti.nume, facultati.id_fac, facultati.etaj exemple browse: Camp calculat: brow field Detalii = studenti.nume + ' din facultatea de ' + facultati.id_fac brow fields nume, tel :R && [:R] Read only brow fields id_student :V = id_student > 500 :F :E='id_student este mai mic de 500' && [:V] verifica validitatea unei conditii ; && [:F] NU verifica doar daca se efectueaza modificari intr-un camp && [:E] Afiseaza un mesaj personalizat daca verificarea nu a fost cu success. Browse fields id_student :B = 400, 800 :F && [:B] stabileste intervalul in care trebuie sa se afle inregistrarea din camp BROWSE fields id_student :H = Numar Matricol && [:H] utilizat pentru a afisa un nume mai descriptive pentru un anumit camp brow font 'System',15 Style 'NU' && font de system de dimensiunea 15 in stylul Normal + Underline

Calcule ACCEPT [mesaj] TO INPUT [] TO WAIT [mesaj] TO Cele trei comenzi afieaz pe ecran mesajul specificat sau rezultatul obinut din evaluarea expresiei i apoi ateapt ca utilizatorul s introduc de la tastatur o valoare (terminat prin Enter). Valoarea tastat va fi scris n variabila cu numele specificat, care acum se aloc automat (nu trebuie s existe definit anterior). Deosebirile dintre comenzi sunt: 1. ACCEPT definete variabila n mod automat de tip caracter, indiferent de natura datelor introduse. Se folosete pentru valori introduse de la tastatur de tip caracter, deoarece nu mai necesit demarcarea irului ntre ( e mai rapid). 2. INPUT analizeaz natura datelor introduse i declar variabila funcie de aceast natur: de tipul Caracter, Numeric, Logic sau Dat calendaristic. Comanda e mai lent cci necesit demarcarea datelor ntre delimitatorii cunoscui, cu excepia celor de tip numeric sau a expresiilor de calcul ce vor fi mai nti evaluate. Se recomand pentru date numerice. 3. WAIT seamn cu ACCEPT, cu deosebirea c aloc n mod automat variabila de lungime=1 i deci nu mai ateapt apsarea tastei Enter la sfritul introducerii datei. Este deci mult mai rapid, dar poate fi folosit pentru date de tip caracter i lungume suficient de un caracter. COUNT [Scope] [FOR ] [WHILE ] [TO ] Comanda numr nregistrrile care ndeplinesc condiia specificat prin FOR sau WHILE, eventual numai din domeniul specificat prin Scope.Rezultatul numrrii este memorat n variabila cu numele precizat, care se aloc acum i va fi de tip numeric. SUM [] [Scope] [FOR ] [WHILE ] [TO ] Comanda nsumeaz valorile din cmpul, cmpurile sau expresiile n care intervin cmpuri din tabela activ pentru toate nregistrrile (dac nu e precizat un domeniu), sau numai pentru nregistrrile din domeniul specificat prin Scope sau numai pentru acelea care ndeplinesc condiia introdus prin FOR sau WHILE. Rezultatul nsumrii este afiat pe ecran, n mod poziional, eventual fiind memorat i n variabilele specificate dup TO. AVERAGE [] [Scope] [FOR ] [WHILE ] [TO ] Comanda este asemntoare cu SUM, numai c ea calculeaz media aritmetic a valorilor specificate din nregistrrile selectate. CALCULATE [] [Scope] [FOR ] [WHILE ] [TO ] Comanda funcioneaz ca i SUM i AVERAGE, calculnd valoarea expresiilor specificate, permind n plus, i evaluarea unor funcii, cum ar fi: CALCULATE MAX(val) to mval CALCULATE AVG(val) to aval

TOTAL TO ON [FIELDS ] [Scope] [FOR ] [WHILE ] Tabela de date surs trebuie s fie activ i ordonat dup cmpul indicat prin cheie. Comanda permite nsumarea valorilor numerice, sau doar a celor specificate prin clauza FIELDS , pe grupe de nregistrri cu aceeai valoare a cheii. Rezultatele obinute se depun n tabela destinaie al crei nume s-a precizat prin TO nume_tabel. Se creaz deci o tabel destinaie, n care, va exista cte o singur nregistrare cu totalurile calculate la nivelul fiecrei valori a cheii de ordonare Tabela rezultat va fi sortat dup cmpul cheie. use facturi order id_furniz total to fact2 on id_furniz fields id_furniz , produs, cant use fact2 brow Rapoarte & Introducere Programare Seminarul incepe cu prezentare rapoarte Comanda pentru creare de rapoarte: CREATE REPORT [nume_fisier] Comanda pentru modificare rapoarte: MODIFY REPORT [nume_fisier] ******************************************************************** Programare in FoxPro: Comanda Creare fisier cu succesiune de comenzi tip program: Modify Command nume_fis Comanda Rulare : Program demo: Tabela DATE_P, contine informatii de tipul unei liste de adrese. Campuri: Nume(c,20);Prenume(c,15);adresa(c,30);Oras(c,20);Tara(c,2);zip(c,10);Tel(c,30);data_intr(date,8); Bani_inv(N,8,2) INDEX on UPPER(nume) TAG NUME OF INDEX_p.CDX ************************************************************** Pmain.prg >>>> Va contine dupa tastare comenzii: MODI COMM Pmain >>>>> * Set-up environment SET TALK OFF * Open DATEP_P database USE DATE_P INDEX INDEX_p.cdx ORDER Nume * Repeat until Exit is selected from menu Do nume_fis

m.choice = 0 DO WHILE m.choice != 4 CLEAR TEXT Program date PERSONAL 1) 2) 3) 4) Intoducere de inregistrari Modificarea inregistrarilor Rularea unui Raport Exit

ENDTEXT ACCEPT Introd. Optiunea dorita: TO m.choice CLEAR DO CASE CASE m.choice = 1 APPEND * Find Nume in index, and edit CASE m.choice = 2 ACCEPT Introd. ultimul NUME salvat TO m.name SEEK m.name EDIT * daca se doreste listarea la imprimanta a raportului porniti-o CASE m.choice = 3 ACCEPT Listare pe ( E )cran sau pe ( I )mprimanta? (E / I) TO m.prnt IF UPPER(m.prnt) = I SET PRINT on ENDIF

REPORT FORM Date_pers IF UPPER(m.prnt) = E SET PRINT OFF ELSE WAIT ENDIF ENDCASE ENDDO QUIT / RETURN Preluarea datelor dintr-un formular Realizarea si preluarea datelor dintr-un formular Acest lucru va fi realizat in acest laborator in 3 moduri diferite: ****** MODALITATEA I. >>> cu SCATTER si REPLACE PRIVATE m.continue, m.yn m.continue = .T. m.yn="" DEFINE WINDOW insert FROM 6,10 TO 19,60 ACTIVATE WINDOW insert * repeta la infinit DO WHILE m.continue * initializare variabile SCATTER MEMVAR BLANK STORE"" TO m.yn * Obtinerea de valori @ 1,1 SAY "Nume: " GET m.nume @ 2,1 SAY "Prenume: " GET m.prenume @ 3,1 SAY "Adresa: " GET m.adresa

@ 4,1 SAY "Oras: " GET m.oras @ 5,1 SAY "Tara: " GET m.tara PICTURE "!!" @ 6,1 SAY "Zip: " GET m.zip PICTURE "99999" @ 7,1 SAY "Tel: " GET m.tel PICTURE "(999) 999-99.99/g/9999.999.999" @ 8,1 SAY "Data intr.: " GET m.data_intr @ 9,1 SAY "Bani investiti: " GET m.bani_inv PICTURE "99999.99" READ

* Controlul apasari tastei de ESC IF LASTKEY() = 27 EXIT ENDIF * Adaugarea noii inreg APPEND BLANK REPLACE nume with m.nume, prenume with m.prenume, adresa with m.adresa,; oras with m.oras, tara with m.tara, zip with m.zip, tel with m.tel,; data_intr with m.data_intr, bani_inv with m.bani_inv WAIT WINDOW "Introd. inreg. noua ? (Y/N)" TO m.yn IF UPPER(m.yn) "Y" m.continue = .F. ENDIF ENDDO RELEASE WINDOW insert RETURN ********************************************************************************** ** ****** MODALITATEA II. >>> cu SCATTER si GATHER PRIVATE m.continue, m.yn

m.continue = .T. m.yn="" DEFINE WINDOW insert FROM 6,10 TO 19,60 ACTIVATE WINDOW insert * repeta la infinit DO WHILE m.continue * initializare variabile SCATTER MEMVAR BLANK STORE"" TO m.yn * Obtinerea de valori @ 1,1 SAY "Nume: " GET m.nume @ 2,1 SAY "Prenume: " GET m.prenume @ 3,1 SAY "Adresa: " GET m.adresa @ 4,1 SAY "Oras: " GET m.oras @ 5,1 SAY "Tara: " GET m.tara PICTURE "!!" @ 6,1 SAY "Zip: " GET m.zip PICTURE "99999" @ 7,1 SAY "Tel: " GET m.tel PICTURE "(999) 999-99.99/g/9999.999.999" @ 8,1 SAY "Data intr.: " GET m.data_intr @ 9,1 SAY "Bani investiti: " GET m.bani_inv PICTURE "99999.99" READ

* Controlul apasari tastei de ESC IF LASTKEY() = 27 EXIT ENDIF * Adaugarea noii inreg

APPEND BLANK GATHER MEMVAR

WAIT WINDOW "Introd. inreg. noua ? (Y/N)" TO m.yn IF UPPER(m.yn) "Y" m.continue = .F. ENDIF ENDDO RELEASE WINDOW insert RETURN ********************************************************************************** ** ****** MODALITATEA III. >>> cu SCATTER si preluarea datelor dintr-un ARRAY PRIVATE m.continue, m.yn m.continue = .T. m.yn="" DECLARE inreg[9]

DEFINE WINDOW insert FROM 6,10 TO 19,60 ACTIVATE WINDOW insert * repeta la infinit DO WHILE m.continue * initializare variabile SCATTER TO inreg BLANK STORE"" TO m.yn * Obtinerea de valori @ 1,1 SAY "Nume: " GET inreg[1]

@ 2,1 SAY "Prenume: " GET inreg[2] @ 3,1 SAY "Adresa: " GET inreg[3] @ 4,1 SAY "Oras: " GET inreg[4] @ 5,1 SAY "Tara: " GET inreg[5] PICTURE "!!" @ 6,1 SAY "Zip: " GET inreg[6] PICTURE "99999" @ 7,1 SAY "Tel: " GET inreg[7] PICTURE "(999) 999-99.99/g/9999.999.999" @ 8,1 SAY "Data intr.: " GET inreg[8] @ 9,1 SAY "Bani investiti: " GET inreg[9] PICTURE "99999.99" READ

* Conotrolul apasari tastei de ESC IF LASTKEY() = 27 EXIT ENDIF

* Adaugarea noii inreg APPEND FROM ARRAY inreg

WAIT WINDOW "Introd. inreg. noua ? (Y/N)" TO m.yn IF UPPER(m.yn) "Y" m.continue = .F. ENDIF ENDDO RELEASE WINDOW insert RETURN

Programul principal MAIN.PRG (meniuri, popup-uri, apeluri de proceduri si programe)

****************** clear all clear close all set talk off set mouse off set safety off deactivate window all deactivate menu all deactivate popup all USE DATE_P INDEX INDEX.CDX ORDER NUME ** Partea de definire define window principala from 0,1 to 22,72 color scheme 13; footer ' Utilizati sagetile sus, jos pentru scroll si CTRL+W pentru a iesi '; shadow grow float close zoom minimize panel define menu liniar in window principala define pad neutru of liniar prompt ' .::. ' define pad evidenta of liniar prompt 'EVIDENTA PERSONAL' define popup pers1 in window principala from 6,4 shadow margin define popup persoane in window principala from 6,23 shadow margin DEFINE BAR 1 OF persoane PROMPT "Introd. inreg." DEFINE BAR 2 OF persoane PROMPT "Editare de inreg." DEFINE BAR 3 OF persoane PROMPT "Stergere de inreg." DEFINE BAR 4 OF persoane PROMPT "Rapoarte" DEFINE BAR 5 OF persoane PROMPT "-" DEFINE BAR 6 Of persoane PROMPT "Exit" ** Partea de selectie on pad evidenta of liniar activate popup persoane on selection bar 1 of persoane do insert on selection bar 2 of persoane do edit on selection bar 3 of persoane do delete on selection bar 4 of persoane do report on selection bar 6 of persoane do iesire activate window principala activate menu liniar ********************************** *********************************** ********************************** PROCEDURE IESIRE CLOSE ALL pop key all deactivate window all deactivate menu all deactivate popup all set talk on set safety on clear all RETURN

Realizarea unui raport conform unui criteriu de regasire a datelor REPORT.PRG PRIVATE m.criteriu, m.dest SCATTER MEMVAR BLANK STORE 0 TO m.bani_inv1 STORE 99999.99 TO m.bani_inv2 STORE "" TO m.criteriu, m.dest DO crit DO dest REPORT FORM RAP FOR &criteriu &dest CLEAR RETURN ***********************************************8 CRIT.PRG DEFINE WINDOW crit FROM 6,10 TO 21,60 ACTIVATE WINDOW crit @ 0,1 SAY "Introd. criteriul: " @ 2,1 SAY "Numele: " GET m.nume @ 3,1 SAY "Prenume: " GET m.prenume @ 4,1 SAY "Adresa: " GET m.adresa @ 5,1 SAY "Oras: " GET m.oras @ 6,1 SAY "Tara: " GET m.tara @ 7,1 SAY "Zip: " GET m.zip @ 8,1 SAY "Tel: " GET m.tel @ 9,1 SAY "Data introd: " GET m.data_intr @ 10,1 SAY "Bani inv. >= " GET m.bani_inv1 @ 11,1 SAY "Bani inv. = m.bani_inv1 AND" CASE m.bani_inv2 < 99999.99 m.criteriu=m.criteriu + "Bani_inv