Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tabele de date

fox pro



+ Font mai mare | - Font mai mic



Tabele de date

FoxPro este un mediu de dezvoltare integrat, care, pe langa instrumentele de programare, ofera si un sistem de tabele de date relationale care simplifica procesele de gestionare si organizare eficienta a datelor. Datele sunt organizate tabelar, pe linii (records, articole inregistrari) si coloane (fields, campuri), mai multe tabele, intre care exista legaturi, alcatuind o baza de date relationala.



1.1. Crearea unui tabel de date - definirea structurii

Crearea unui tabel de date implica specificarea numelui tabelului (fisier cu extensia implicita DBF) si este initiata prin comanda

CREATE [<fisier>] sau prin alegerea optiunii File, New (in acest caz in caseta New se selecteaza Table si New file). Ca urmare pe ecran este deschisa fereastra constructorului de tabele, in care vor fi precizate caracteristicile noului tabel (nume, tip, lungime, etc.) si a indecsilor folositi la ordonarea datelor din lista.

Fiecare camp (field, coloana) al unui tabel este caracterizat prin:

.         nume (Name);

.         tip (Type) - sir de caractere, numeric, data calendaristica sau moment de timp, logic, memo;


latime (Width) - numarul de caractere pe care il ocupa fiecare data memorata in acel camp;

numarul de zecimale (Decimal) - pentru datele de tip numeric;

'Table Designer - peisonal.dbf

Fields | Indexes | Table |
Name
Type

□ K

Cancel

Insert

Delete

Width Decimal Index NULL

nume

Character

25

t ____

marca

Character

8

functia

Character

20

salariu

Numeric

8

0

datanast

Date

8

sex

Logical

1

r

adresa

Memo

□ 4

1

fanionul de indexare (Index) - indica daca se stabileste un index pe campul respectiv (indecsii reprezinta o tehnologie cu ajutorul careia datele din tabele sunt vazute intr-o anumita ordine, data de un anumit criteriu numit criteriu de indexare); fanionul de valoare nula (NULL) - arata daca in campul respectiv poate fi memorata o valoare nula, pentru a se face diferentierea intre un camp lasat necompletat si unul completat cu valoarea 0.

1.2. Deschiderea (activarea) tabelelor de date

Pentru initierea unei sesiuni de lucru cu un tabel de date, acesta trebuie sa fie activat (deschis). Deschiderea unui tabel de date se poate realiza prin meniu (File, Open, Files of type: Table (*.dbf)) sau prin comanda USE:

USE [<fisier>] [IN <zona de lucru>] [TAG <nume eticheta>] [ASCENDING I DESCENDING]

[ALIAS <alias>] [EXCLUSIVE] [NOUPDATE]

o <fisier> - numele tabelului de date care va fi deschis

(extensia implicita DBF); o IN - permite deschiderea unui tabel de date intr-o alta zona

de lucru decat cea curenta; o TAG - face precizarea unei variante de indexare; o ASCENDING IDESCENDING - precizeaza tipul ordonarii

(implicit ascendenta) atunci cand se foloseste indexarea; o ALIAS - stabileste un nou alias;

o EXCLUSIVE - asigura exclusivitatea folosirii unui tabel de date

atunci cand se lucreaza intr-o retea de calcul; o NOUPDATE - protejeaza tabelul de date la scriere (este

deschis doar pentru consultare).

a Observatii

■ Derularea unei sesiuni de lucru in FoxPro se realizeaza in directorul de lucru implicit. Acest director poate fi schimbat prin comanda:


SET DEFAULT TO <path>


unde path defineste noul director.


Lista tabelelor de date aflate in directorul de lucru poate fi obtinuta prin lansarea comenzii:

DIR



Se poate limita, temporar, accesul la inregistrarile tabelului de date prin folosirea comenzii:


SET FILTER TO <cond>


0 Zone de lucru

Pentru manipularea simultana a mai multor tabele de date, FoxPro foloseste zone speciale de memorie numite "zone de lucru', in care depune informatiile necesare efectuarii operatiilor cu tabelele de date respective.

Pentru identificarea unei zone de lucru se folosesc alias-uri (literele A, B, C sau cifrele 1, 2, 3, ) care permit identificarea tabelelor de date si altfel decat prin numele lor. In afara de aceste alias-uri utilizatorul poate defini si propriile sale alias-uri.

a Observatii

La pornirea FoxPro-ului zona de lucru implicita va fi zona 1 (cu alias 1 sau A). Aceasta se poate schimba prin comanda :

SELECT <expN> I <expC>

Comanda este urmata de o cifra, litera sau de un alias definit de utilizator. Daca alias-ul este 0 se va selecta prima zona de lucru neselectata.

Pentru a obtine informatii despre zonele de lucru folosite si tabelele de date deschise se pot folosi doua functii:


USED([<alias>]) si


DBF([<alias>])


Functia USED returneaza .T. sau .F. daca, in zona de lucru curenta sau precizata prin alias, este sau nu prelucrat un tabel de date. Functia DBF returneaza numele tabelului de date deschis in zona de lucru.

Exemple:

use personal in 1

use nomenclator in B alias nomen

select nomen

?dbf()

C:PROGRAM

FILESDEVSTUDIOVFPJOBNOMENCLATOR.DBF

?used(1)

.T.

|p 1.3. Modificarea structurii unui tabel de date

Modificarea caracteristicilor unui tabel de date poate fi facuta prin comanda:

MODIFY STRUCTURE |

Aceasta comanda permite modificarea structurii tabelului de date activ prin deschiderea unei ferestre de dialog, aceeasi ca la crearea tabelului de date. Modificarile care pot fi aduse structurii unui tabel de date sunt :

.         schimbarea numelor, tipurilor si latimii campurilor deja existente;

.         stergeri, inserari de campuri, prin plasarea cursorului pe zona de modificare (prima coloana din fereastra de dialog) si actionarea butoanelor Delete si Insert.

Dupa efectuarea modificarilor, FoxPro copiaza continutul tabelului de date vechi in tabelul de date nou, cu efectuarea schimbarilor respective.

Caracteristicile unui tabel de date (structura) pot fi vizualizate prin comanda:

DISPLAY STRUCTURE

1.4. Inchiderea prelucrarii tabelelor de date

Finalizarea operatiei de prelucrare a tabelelor se poate face prin comenzile:


USE


sau


CLOSE ALL


Prima comanda inchide prelucrarea tabelului de date din zona de lucru curenta iar a doua inchide si elibereaza toate zonele de lucru (in acest caz zona curenta devine zona de lucru 1).

f Prelucrarea inregistrarilor. Inregistrarea curenta.

Un grup de inregistrari (domeniu) poate fi:

.        All - semnifica toate inregistrarile tabelei;

.        Next - urmatoarele inregistrari;

.        Record - inregistrarea cu numarul de ordine specificat;

.        Rest - restul inregistrarilor din pozitia curenta pana la sfarsitul tabelului.

Prelucrarea tabelelor de date se realizeaza la nivel de inregistrare. La un moment dat este activ un singur tabel de date si o singura inregistrare din acest tabel. Fiecare inregistrare are un numar de ordine, asociat acesteia la introducerea ei in tabelul de date. Numarul de ordine al inregistrarii curente poate fi modificat prin comenzile:


GOTO TOP | BOTTOM | RECORD <expN> (salt la prima, ultima sau inregistrarea precizata din tabel);


1.5. Editarea continutului unui tabel de date

SKIP [<expN>]

(salt inainte sau inapoi cu un numar de inregistrari);

LOCATE [<domeniu>] [FOR <cond1>] [WHILE <cond2>]

(cauta prima inregistrare care respecta conditia <cond1>, domeniul inregistrarilor fiind dat de clauzele <domeniu> si WHILE).

Pozitia curenta in tabelul de date poate fi stabilita cu ajutorul functiilor:

.         EOF() - returneaza .T. sau .F. dupa cum este detectat sau nu marcajul de sfarsit de fisier (aflat dupa ultima inregistrare);

.         BOF()- returneaza .T. sau .F. pentru inceput de fisier;

.         RECNO() - furnizeaza numarul de ordine al inregistrarii curente.

Exemple:

use personal

?recno()

1

goto record 7

?recno()

7

goto top ?recno() 1

skip -1

?bof()

.T.

skip 3 ?recno()

3

go bottom skip

?eof() .T.

locate for nume='ALEX'

(fl Introducerea inregistrarilor noi intr-un tabel de date

Numarul de inregistrari dintr-o baza de date, furnizat de functia RECCOUNT(), poate fi modificat, prin introducerea unor inregistrari vide (adaugari, inserari):


sau

APPEND BLANK

INSERT BLANK [BEFORE]

Inserarea se executa implicit dupa inregistrarea curenta, daca nu se foloseste optiunea BEFORE, iar urmatoarele inregistrari sunt translatate spre sfarsitul tabelului de date si renumerotate.

(fl Stergerea inregistrarilor dintr-un tabel

Eliminarea unor inregistrari din tabelele de date se efectueaza la nivel logic sau fizic prin utilizarea comenzilor DELETE, RECALL, PACK, ZAP.

a) Stergerea logica (marcare pentru stergere). Prin marcarea pentru stergere inregistrarile din tabelele de date nu sunt eliminate definitiv. Pentru stergerea logica este utilizata comanda:

DELETE [<domeniu>] [FOR <cond1>] [WHILE <cond2>]

Aceasta comanda (precum si altele) foloseste clauza FOR pentru selectarea tuturor inregistrarilor care corespund conditiei logice <cond1>. Clauza WHILE intrerupe testarea inregistrarilor cand gaseste o inregistrare ce nu respecta conditia data, <cond2>.

Accesul la inregistrarile marcate pentru stergere este controlat de comanda:

SET DELETED ON I OFF !

Cand se alege optiunea ON, inregistrarile marcate pentru stergere nu vor fi accesibile celorlalte comenzi, iar cand se selecteaza optiunea OFF, inregistrarile sunt accesibile indiferent de marcajul de stergere (starea implicita este OFF). Aceasta comanda este utila atunci cand se lucreaza pe grupuri de inregistrari.

b) Demarcarea stergerii logice. Marcajele de stergere logica pot fi anulate prin folosirea comenzii:

RECALL [<domeniu>] [FOR <cond1>] [WHILE <cond2>]

c) Stergerea fizica. Prin folosirea acestui tip de stergere inregistrarile sunt eliminate definitiv din tabelul de date (stergerile fizice nu mai pot fi refacute). Stergerile fizice au efect asupra inregistrarilor marcate logic sau asupra tuturor inregistrarilor din tabelul de date prelucrat prin utilizarea uneia din comenzile:


PACK


sau


ZAP


p Modificarea continutului inregistrarilor

Modificarea continutului inregistrarilor dintr-un tabel de date presupune inlocuirea valorilor din unul sau mai multe campuri cu altele noi. Comanda REPLACE permite actualizarea tabelelor de date cu valori precizate in comanda si are urmatoarea sintaxa:

REPLACE <camp1> WITH <exp1> [, <camp2> WITH <exp2> ] [<domeniu>] [FOR <cond1>] [WHILE <cond2>]

REPLACE inlocuieste vechea valoare din campul <camp1> cu valoarea expresiei <exp1>, valoarea din campul <camp2> cu <exp2> si asa mai departe.

Exemple:

use personal

?reccount()

25

append blank ?reccount()

26

goto 7

insert blank before ?recno()

7

dele next 3 skip -1 recall pack

?reccount()

24

replace for nume='ALEX' nume with 'ALEXANDRU

IP Fereastra BROWSE

Principala comanda, pentru realizarea diferitelor operatiuni asupra tabelelor de date, prin deschiderea unei ferestre de lucru, este comanda BROWSE care poate fi editata in urmatoarea sintaxa:

BROWSE [FIELDS <lista de campuri>] [FOR <cond>] [FREEZE <camp>]

[NOAPPEND] [NODELETE] [NOEDIT I NOMODIFY]

o FIELDS - permite ca numai campurile precizate sa intre in editare

(selectie pe verticala); o FOR - precizeaza conditiile conform carora inregistrarilor vor fi

afisate in fereastra BROWSE; o FREEZE - permite modificari doar pe campul precizat; o NOAPPEND - invalideaza posibilitatea efectuarii adaugarilor; o NODELETE - elimina marcarile pentru stergere; o NOEDIT I NOMODIFY - interzice modificarile.


Ca efect al lansarii comenzii BROWSE, in meniul principal, apare o noua optiune, Table, care permite:

. adaugarea unei noi inregistrari la un tabel de date: Append New Record (Ctrl+Y);

Microsoft Visual FoxPro


Text Box: Append New Record	Ctrl+Y

Edit View Tools Program


Table Window Help

Go to Record Ka.i.HiiT.ikcroi.

Toggle Deletion Mark


Properties Font

Append Records Delete Records Recall Records Remove Deleted Records


Replace Field.. Size Field Move Field

Resize Partitions 1/ Link Partitions Change Partitions

Rebuild Indexes

stabilirea inregistrarii curente: Go to Record;

Domeniul Clauza FOR



Clauza WHILE


precizarea unor criterii de pozitionare, Lpcate, la fel ca prin folosirea comenzii cu acelasi nume:

. stergerea datelor din tabele:

o marcare (demarcare) pentru stergere: Toggle Deletion

Mark (Ctrl+T) sau clic cu mouse-ul pe fanionul de
stergere din dreptul inregistrarii:

Fanionul de stergere

i

li Personal

J Nume

Marca

Ivasiliu Alina J202

1 Pop Stefan 1157

| Popescu Constantin

1204 159

II

Petriu Stelian J177

o stergere fizica: Remove Deleted Records; o stergeri conform sintaxei comenzilor DELETE si RECALL: Delete Records, Recall Records; . modificari ale valorilor inscrise in campurile tabelelor conform sintaxei comenzii REPLACE: Replace Field.

IP Campuri MEMO

Campurile MEMO definesc campuri de lungime variabila de

tip text. Un tabel de date, cu cel putin un camp MEMO, are asociat un fisier suplimentar in care sunt depuse informatiile legate de acest camp. Pentru a putea identifica datele din fisierul MEMO asociat, care


Fisierul MEMO asociat

apartin unei anumite inregistrari, in tabelul de date, pe pozitia corespunzatoare a inregistrarii, se memoreaza o adresa spre fisierul MEMO (pozitia primului caracter al campului respectiv).

Modificarea campurilor MEMO se poate face in fereastra Browse sau prin comenzi specifice:

MODIFY MEMO <camp memo1>[,<camp memo2>,.]

- se deschide cate o fereastra de editare pentru fiecare camp

memo;

CLOSE MEMO <camp memo1>[,<camp memo2>,.] I ALL ;

- se vor inchide ferestrele de editare corespunzatoare campurilor memo specificate in lista (sau toate - ALL);

APPEND MEMO <camp memo> FROM <fisier> [OVERWRITE]

- continutul unui fisier extern, de tip text, va fi adaugat la sfarsitul campului memo precizat (daca se foloseste clauza OVERWRITE vechiul continut al campului se pierde);

COPY MEMO <camp memo> TO <fisier> [ADDITIVE]

-continutul unui camp memo se copiaza intr-un fisier extern de tip text. Daca se foloseste clauza ADDITIVE copierea se va face la sfarsitul unui fisier deja existent.

1.6. Ordonarea si actualizarea tabelelor de date

Inregistrarile apar, in tabelul de date, in ordinea in care au fost introduse, dar nu intotdeauna aceasta este si ordinea lor de utilizare. Ordonarea unui tabel presupune stabilirea unui criteriu dupa care sa fie parcurse inregistrarile acestuia. Acest criteriu poate fi un camp sau o combinatie de campuri ale tabelului de date numit cheie de ordonare.

O cheie de ordonare este o expresie, alcatuita din campuri ale tabelului, care este evaluata pentru fiecare inregistrare, ordinea de prelucrare a inregistrarilor fiind data de valorile acestei expresii. Se folosesc doua metode de ordonare a bazelor de date: fizica si logica.

0 Ordonarea fizica (sortarea)

Sortarea consta in rearanjarea fizica a datelor din tabel intr-o alta ordine, data de criteriul de sortare. Astfel rezulta un tabel de date nou cu aceleasi informatii ca si cel original, dar ordinea fizica (naturala) a inregistrarilor este schimbata.

SORT TO <fisier> ON <camp1> [/A I /D] [/C]

[, <camp2>[/A I /D] [/C] ] [ASCENDING I DESCENDING] [<domeniu>] [FOR <cond>] [WHILE <cond>] [FIELDS <lista de campuri>]

o <fisier> - numele tabelului de date nou creat; o <camp1>,<camp2>,. - lista cheilor de sortare; o /A , /D - sortare ascendenta, descendenta, relativa la campul asociat;

o /C- sortare in ordine alfabetica, necontand literele mari sau mici; o ASCENDING I DESCENDING - ordonare ascendenta sau descendenta

cu specificarea ordinii pentru toate campurile; o FIELDS - selectie pe verticala (filtrare).

0 Ordonarea logica (indexarea)

Indexarea este o metoda mult mai eficienta de ordonare a tabelelor de date, care permite ca operatiile de consultare si cautare a datelor in tabel sa fie rapide. Prin indexare se creeaza un fisier index, asociat bazei de date, de dimensiuni mult mai mici decat dimensiunea bazei de date. Fara a detalia structura fisierului index, trebuie mentionat ca fisierul index este o lista simplu inlantuita a numerelor articolelor din baza de date aflate in ordinea lor naturala.

La definirea structurii bazei de date (prin CREATE sau MODIFY STRUCTURE), in coloana Index, se pot defini unul sau mai multe criterii de indexare care sunt identificate prin etichete (numele unei etichete este acelasi, in acest caz, cu numele campului). Activarea unuia sau altuia din criteriile de indexare se realizeaza in doua moduri:

a) la deschiderea tabelului de date:

USE <fisier> ORDER <nume eticheta>

b) in timpul lucrului prin comanda:
SET ORDER TO TAG <nume eticheta >

Stabilirea altor criterii de indexare, diferite de cele definite in structura tabelului de date, se poate face prin comanda:

INDEX ON <exp> TAG <nume eticheta> [FOR <cond>]

[ASCENDING I DESCENDING]

[UNIQUE]

o TAG - identifica un criteriu de indexare;

o UNIQUE - clauza care nu admite dubluri pe campul de indexare

Stergerea unei etichete (criteriu) de indexare se realizeaza utilizand comanda:

DELETE TAG <nume eticheta> I ALL

Principalul avantaj al indexarii rezulta din posibilitatea localizarii rapide a unor inregistrari, mult mai eficienta decat cea furnizata prin LOCATE. Acest lucru este realizat prin comanda:

SEEK <exp>

Comanda SEEK cauta prima inregistrare pentru care valoarea expresiei calculate cu valori din campurile acesteia este egala cu <exp>, pe criteriul de indexare selectat.

a Observatii

     la un moment dat poate fi activ un singur criteriu de indexare, numele etichetei corespunzatoare fiind furnizat de functia TAG();

     efectul unei comenzi de cautare (SEEK sau LOCATE) poate fi prelungit prin folosirea comenzii CONTINUE;

     functia FOUND() determina (.T. sau .F.) daca s-a reusit sau nu localizarea.

Comanda:

SET EXACT ON I OFF

stabileste modalitatea de cautarea pe subsiruri de caractere. Clauza implicita este OFF.

Daca <exp> este un sir de caractere, acesta trebuie pus intre apostrofuri.

~z~---------------------------------------------------------------------------------------

gjp 1.7. Introducerea formatata a datelor

FoxPro ofera posibilitatea introducerii datelor sub forma unor machete sau formate prin asocierea la clauza GET a clauzelor PICTURE si FUNCTION:

| @<linie, coloana> [GET<variabila>]

[PICTURE <expC>] [FUNCTION <expC>]

[READ]


. .


@ plaseaza cursorul pe pozitia specificata a ecranului.

GET stabileste portiunea de pe ecran unde vor fi introduse

valorile ce vor fi atribuite variabilei <variabila>.


.         PICTURE si FUNCTION permit formatarea afisarii datelor. Ambele clauze sunt urmate de un sir de caractere care contine coduri referitoare la modul de afisare.

.         Codurile PICTURE se refera doar la un anumit caracter din formatul de afisare si anume la cel de pe aceeasi pozitie cu cea a codului.

.         Codurile FUNCTION actioneaza asupra tuturor caracterelor din formatul de afisare.

.         Clauzele PICTURE si FUNCTION pot actiona impreuna, dar FUNCTION este prioritara.

.         READ determina citirea continutelor zonelor de editare pentru introducerea valorilor de la tastatura, create prin GET.

Codurile de formatare PICTURE

X Permite orice caracter

9 Cifre si semnele + - . E (date numerice)

# Cifre, spatii si semnele + - . E
A Numai litere

W Numai date logice

N Numai litere si cifre

Y Permite doar caracterele logice Y, y, N si n

! Literele sunt convertite in majuscule

* Afiseaza asterix-uri in locul zerourilor initiale
. Specifica pozitia punctului zecimal.

Codurile de formatare FUNCTION

A Permit numai caractere alfabetice (litere)

B Aliniere la stanga

I Centrare

J Aliniere la dreapta

C Dupa un numar pozitiv se afiseaza CR (credit)

D Format data calendaristica stabilit de SET DATE

E Format data calendaristica european (britanic)

T Elimina spatiile de inceput si sfarsit

X Dupa un numar negativ se afiseaza DB (debit)

Z Afiseaza spatii daca valoarea campului este 0

( Numerele negative sunt incluse intre paranteze

! Literele sunt convertite in majuscule.

Exemple:

* citirea unui numar cu doua zecimale pe camp de 7 caractere:

a=0

@10,10 GET a PICTURE '9999.99' READ

* citirea oricaror caractere pe camp de lungime 10: b=space(10)

@10,10 GET b PICTURE REPLICATE ('X',10)

READ

* introducere cu majuscule: b=space(10)

@10,10 GET b PICTURE REPLICATE ('!',10)

READ

* introducerea unei majuscule si a doua cifre cu centrare:

PICTURE 'A99' FUNCTION 'I!'

* urmatoarele machete de editare sunt echivalente:

PICTURE 'AAAAA' FUNCTION '!'

PICTURE 'XXXXX' FUNCTION 'A!'

1.8. Actualizarea tabelelor de date

Actualizarea tabelelor de date inseamna modificarea structurii tabelelor de date (vezi comanda MODIFY STRUCTURE) sau modificarea continutului acestora. In ceea ce priveste modificarea continutului unui tabel de date se au in vedere posibilitatile de stergere sau adaugare a unor inregistrari precum si modificarea continutului celor existente (vezi comenzile DELETE, PACK, RECALL, REPLACE). Pentru editarea de la tastatura a tabelelor de date se poate utiliza comanda BROWSE sau se pot alcatui secvente program.

Exemplu.

Fie fisierul Agenda.dbf, avand structura:


Nume

Data_N

Telefon

Caracter

Date

Caracter


30 8

10


Pentru introducerea, de la tastatura, a unor date in acest fisier se poate concepe urmatoarea procedura:

procedure introducere clear

@10,10 say 'Numele' get nume function '!' @12,10 say 'Data nasterii' get data_n @14,10 say 'Telefonul' get telefon read endproc

Folosind aceasta procedura se poate edita urmatoarea secventa pentru consultarea si actualizarea fisierului Agenda.dbf:

clear

use agenda

TEXT

Alegeti optiunea:

1.  Afisare

2.  Adaugare

3.  Modificare 0. Terminare

ENDTEXT opt=0

@10,20 say 'Optiunea:' get opt picture '9' range 0,3 read

clear do case

case opt=1

do afisare case opt=2

do adaugare case opt=3

do modificare case opt=0

cancel

endcase cancel

procedure afisare

browse endproc

procedure adaugare append blank

do introducere endproc

procedure modificare

numele = space(30)

@10,0 say 'Numele cautat' get numele function '!' read

locate for nume=numele if found()

do introducere

else

WAIT 'Nume negasit!'

endif endproc

a Observatii

o Pentru afisarea meniului de optiuni s-a utilizat instructiunea TEXT ENDTEXT

o Pentru afisarea mesajului de eroare "Nume negasit!'s-a utilizat instructiunea WAIT.

0 1.9. Ciclul SCAN

Ciclul SCAN este un ciclu cu numar finit de pasi, specializat in lucrul cu tabele de date. Aceasta structura repetitiva realizeaza parcurgerea tabelului si executarea unui grup de instructiuni pentru fiecare inregistrare care indeplineste conditiile specificate. Ciclul este utilizat, deseori, pentru actualizarea continutului tabelelor de date, conform unor anumite conditii, sau pentru obtinerea informatiilor statistice.

Sintaxa este:

SCAN [<domeniu>] [FOR <cond1>] [WHILE <cond2>] [<instructiuni>]

[LOOP]

[EXIT] ENDSCAN

1.10. Extragerea unor informatii statistice

Comenzile care permit extragerea unor informatii din tabelele de date se aplica asupra unor campuri sau asupra unor expresii care contin numele unor campuri.

COUNT [TO <var>]

[FOR <cond>] [<domeniu>] [WHILE <cond>]

- numara inregistrarile din tabelul de date, numarul de inregistrari putand fi memorat intr-o variabila de lucru;

SUM <lista exp>[TO<lista var>]

[FOR <cond>] [<domeniu>] [WHILE <cond>]

- insumeaza valorile expresiilor din lista de expresii(<lista exp>) si le atribuie, eventual, unei liste de variabile (<lista var>);

AVERAGE <lista exp>[TO <lista var>]

[FOR <cond>] [<domeniu>] [WHILE cond>]

- la fel ca SUM avand ca rezultat media aritmetica.

CALCULATE <lista funct>[TO<lista var>]

[FOR <cond>] [<domeniu>] [WHILE <cond>]

- calculeaza anumite expresii folosind urmatoarele functii (<lista funct>):

SUM(<expN>) - suma; AVG(<expN>) - media aritmetica; STD(<expN>) - deviatia standard; VAR(<expN>) - abaterea medie patratica; MAX(<exp>) - val maxima, nu neaparat numerica; MIN(<exp>) - val minima, nu neaparat numerica; NPv(<expN1>,<expN2>)[,<expN3>])

- valoarea prezenta neta a unei investitii (vezi

functia de calcul financiar);
CNT() - numarul de inregistrari din tabelul de date.

Aplicatii

10 Se creaza tabelul (fisierul) de date Personal.dbf avand structura:

Camp

Semnificatie

Tip de data

nume

Numele angajatului

Sir de caractere

marca

Cod numeric angajat

Sir de caractere

functia

Functia angajatului

Sir de caractere

salariu

Salariul brut

Numeric

datanast

Data nasterii

Data calendaristica

sex

Sex

Logic

adresa

Adresa angajatului

Memo

gr


20 Se introduc in tabel urmatoarele inregistrari:

in campul sex se inscriu valorile .T. (masculin) si .F. (feminin)

valorile din campul adresa (text de lungime variabila) nu pot fi inscrise

direct in tabel, dar sunt stocate intr-un fisier asociat tabelului de date

numit fisier memo. Trimiterea spre acest fisier se poate face printr-un

dublu clic, cu mouse-ul pe campul memo corespunzator 30 Informatii privind:

. fisierele tabel de date prezente pe disc, in directorul de lucru:

dir

. numarul de inregistrari ale tabelului de date si numarul de ordine al inregistrarii curente:

?reccount() ?recno()

4 Operatii asupra tabelului de date:

. limitarea accesului in tabel la inregistrarile care contin angajati de sex masculin:

set filter to sex=.T. browse

. anularea filtrarii:

set filter to browse

. localizarea inregistrarii cu marca '177' :

locate for marca='177' browse

. marcarea pentru stergere a inregistrarilor 2 si 4:

delete record 2 delete record 4 browse

. marcarea pentru stergere a inregistrarilor corespunzatoare persoanelor cu varste mai mari de 40 ani:

delete all for (year(date())-year(datanast))>40 browse

. demarcarea tuturor inregistrarilor:

recall all browse

. stergerea fizica a inregistrarilor pentru care salariul este cuprins intre 3500000 si 12000000:

dele all for salariu >=3500000 and salariu < = 12000000

pack

browse

. inlocuirea, in campul nume, a literelor mici cu litere mari:

replace all nume with upper(nume) browse

. inlocuirea valorica a salariului, la toti salariatii, cu 12%:

replace all salariu with salariu*1.12 browse

5 Editarea tabelului de date selectiv (selectii pe orizontala si pe verticala) utilizand comanda BROWSE:

. afisarea pe campurile nume, functia, salariu :

browse fields nume, functia, salariu

. editarea inregistrarilor corespunzatoare persoanelor de sex masculin si a campurilor nume, salariu:

browse fields nume, salariu for sex=.T.

. editarea tabelului de date doar pe campul salariu:

brow freeze salariu

60 Introducerea adresei persoanelor avand marca '204' si '161': locate for marca = '204' modify memo adresa locate for marca = '161' modify memo adresa

70 Se creaza, prin sortare, un tabel de date Persoane.dbf,

ordonarea facandu-se dupa campurile Functia (cheie primara) si

Salariu (cheie secundara), ascendent:

sort on functia, salariu to Persoane

use Persoane

browse

8 Se definesc urmatoarele criterii de indexare:

. criteriul nume+functia, num:

index on nume+functia tag num

. criteriul functia+salariu, func:

index on functia+str(salariu,8) tag func

. criteriul salariu, descendent:

index on salariu tag salariu descending

. criteriul marca

index on marca tag marca

90 Vizualizarea tabelului de date conform celor patru criterii de

indexare definite anterior: set order to tag num browse

set order to tag func browse

set order to tag salariu

browse

?tag()

set order to tag marca browse

100 Folosind criteriul marca, se localizeaza inregistrarea de cod

'204' si se face, pentru aceasta, o marire de salariu de 8%: set order to tag marca seek '204'

replace salariu with salariu*1.08

110 Informatii despre tabelul de date:

. numarul total de inregistrari:

count to tot ?tot

. numarul de angajati 'Secretara':

count for functia = 'Secretara' to a

?a

sau (prin program):

a=0

scan for functia = 'Secretara'

a=a+1 endscan

?a

. media salariala pentru functia 'Secretara':

average salariu for functia='Secretara' to b

sau:

calculate avg(salariu) for functia = 'Secretara' to b

?b

. salariul maxim:

calculate max(salariu) to m

?m sau (prin program):

maxim= salariu scan

if salariu >maxim

maxim=salariu

endif endscan ?maxim



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1007
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved