Documente online.
Username / Parola inexistente
  Zona de administrare documente. Fisierele tale  
Am uitat parola x Creaza cont nou
  Home Exploreaza
Upload





loading...
















































Baze de date - operatii de baza

foxpro










ALTE DOCUMENTE

Zone de lucru. Sortare si indexare. Visual FoxPro
APLICATII DIVERSE IN FOXPRO
EXPLOATAREA BAZELOR DE DATE
Introducere in mediul FoxPro

Baze de date - operatii de baza

Modul de lucru cu o tabela simpla este:

-         mai īntāi se creeaza tabela - o singura data, la īnceput, apoi ori de cate ori dorim sa o folosim, o deschidem īntr-o zona de lucru, lucram cu ea si īn final o īnchidem

Crearea unei baze de date. Structura bazei de date

Crearea unei baze de date se realizeaza īn doua metode prin meniuri si prin instructiuni īn fereastra de comenzi.

Comanda CREATE [fisier]

-         determina deschiderea unei ferestre īn care utilizatorul specifica īn mod interactiv caracteristicile noii baze de date ce se va crea

-         fisier reprezinta numele fisierului bazei de date ce va fi creat. Daca nu se specifica nici o extensie, Foxpro asociaza automat extensia .dbf

Comanda CREATE TABLE|DBF<nume.dbf> (<nume_cāmp1> <tip> [<precizie> [ ,<scala> ] [,<nume_cāmp2>.]])|FROM ARRAY<masiv>

-         nume.dbf reprezinta numele bazei de date de creat (eventual incluzānd si calea)

-         nume_cāmp 1, nume_cāmp 2 . reprezinta numele cāmpurilor structurii bazei de date

-         tip o singura litera reprezinta tipul cāmpului, lista tipurilor fiind C- sir de caractere, D - data calendaristica, N - numeric, M - memo, L - logic, G - general, P - imagine

-         latimea cāmpului este specificata prin <precizie>

-         <scala> reprezinta numarul de zecimale

-         FROM ARRAY se introduce pentru ca structura bazei de date sa fie preluatp din masivul <masiv>

Exp: CREATE TABLE mfixe (cod C(10), denumire C (30), valoare N (10), amortizare N (10), loc_folos M, stare L, data_inst D)

Deschiderea si īnchiderea unei baze de date

Deschiderea unei baze de date se realizeaza prin comanda:

USE [<fisier>] [IN <zona delucru>] [AGAIN]

<fisier> reprezinta fisierul bazei de date ce va fi deschisa

Implicit baza de date specificata va fi deschisa īn zona de lucru curenta (īnchiderea unei baze de date se refera tot la zona de lucru curenta). Pentru a ne referi la alta zona de lucru decāt cea curenta se foloseste clauza IN specificānd prin <zona de lucru> aceasta zona.

Īn FoxPro exista posibilitatea deschiderii unei baze de date īn mai multe zone de lucru. Īn acest scop se foloseste clauza AGAIN ("din nou"). Aceasta clauza trebuie introdusa īn comanda cānd se deschide o baza de date care a mai fost deschisa anterior si īn alta zona de lucru.

Obs: Daca la deschiderea unei baze de date īn zona de lucru exista deschisa anterior o alta baza de date , cea veche este īnchisa automat īnainte de deschiderea celei noi.

Comanda USE fara parametrii are ca efect īnchiderea bazei de date din zona de lucru curenta.

Exp:

USE m fixe // s-a deschis BD mfixe īn zona de lucru 1

USE

USE mfixe īn 2

USE mfixe īn 3 AGAIN // se deschide BD si īn zona de lucru 3

USE IN 2

USE IN 3

Īnchiderea bazei de date se poate realiza si cu comenzile:

CLOSE ALL

īnchide toate fisierele deschise din totate zonele de lucru si selecteaza zona de lucru 1

CLOSE DATABASE

īnchide toate bazele de date si selecteaza zona de lucru 1

Def. Zona de lucru reprezinta o zona de memorie speciala folosita pentru controlul operatiilor executate cu datele dintr-o tabela.

FoxPRo dispune de 225 de zone de lucru ceea ce face posibila manipularea simultana a mai multor tabele.

Def. Aliasul unei tabele reprezinta un nume (pseudonim) asociat unei tabele la deschidere, nume cu ajutorul caruia tabela si elementele sale componente (cāmpurile) se identifica.

Din ansamblul zonelor de lucru gestionate de SGBD una singura este curenta.

Selectarea zonei de lucru curente se face cu ajutorul comenzii SELECT care este urmata de numarul sau litera corespunzatoare zonei de lucru respective.

Zonele de lucru sunt identificate cu ajutorul numerelor de la 1 la 225 sau pentru primele 10 zone cu litere de la A la J. Zonele de lucru īn care au fost deschise anterior tabele pot fi identificate si prin aliasurile tablelor respective.


SELECT 1

                                      // zona curenta va fi zona 1

SELECT A

SELECT 2

SELECT B

? SELECT ( )                  afiseaza zona de lucru curenta

2.

? SELECT (1)                 afiseaza ultima zona de lucru nefoloita

225.

Indicatorul de īnregistrari

Def. Pentru a stii care este īnregistrarea asupra careia va actiona o anumita comanda, FoxPro foloseste īn cadrul fiecarei zone de lucru cāte o variabila specifica ce indica numarul īnregistrarii respective, variabila numita indicatorul de īnregistrari.

Acesta este asociat unei tabele la deschidere si este eliminat la īnchiderea ei. Indicatorul de īnregistrari contine numarul īnregistrarii curente. La deschiderea unei tabele indicatorul de īnregistrari va fi pozitionat pe prima īnregistrare.

Comanda GOTO urmata de o valoare numerica determina pozitionarea indicatorului pe īnregistrarea cu numarul dat de valoarea respectiva.

Aflarea īnregistrarii curente dintr-o tabela, se face folosind functia RECNO ( ), iar numarul total de īnregistrari dintr-o tabelor este returnat de functia RECCOUNT ( ).

USE mfixe

= RECNO ( )

1

? RECCOUNT ( )

10

GOTO 4

? RECNO ( )

4

USE

Comanda GOTO poate avea urmatoarele clauze pentru pozitionarea indicatorului pe prima TOP sau ultima BOTTOM īnregistrare.

USE mfixe

GOTO BOTTOM

? RECNO ( )

10

Exista comenzi FoxPro care actioneaza asupra mai multor īnregistrari ale unei baze de date. Selectarea acestora se face specificānd īn comanda conditia de selectie cu ajutorul careia, din multimea totala a īnregistrarilor se aleg doar acelea care respecta conditia respectiva. Multimea īnregistrarilor selectate formeaza "domeniul īnregistrarilor" la care se refera comanda. Domeniul īnregistrarilor se specifica prin clauzele <domeniu> FOR si WHILE incluse optional īn comanda respectiva.

Clauza <domeniu> se va īnlocui cu una din constructii īn functie de necesitati.

-         ALL = selecteaza toate īnregistrarile din baza de date

-         NEXT <expN> = se refera la urmatoarele <expN> īnregistrari, īncepānd de la īnregistrarea curenta inclusiv

-         RECORD <expN> actioneaza numai asupra īnregistrarii cu numarul <expN>

-         REST seelecteaza īnregistrarile īncepānd de la cea curenta, inclusiv, si pāna la sfārsitul bazei de date.

-         Clauza FOR <expL>

se foloseste pentru selectarea īnregistrarilor īn functie de o conditie logica, <expL>. Se selecteaza acele īnregistrari pentru care <expL> este adevarata.

Clauza WHILE <expL>

este asemanatoare clauze FOR, selectarea īnregistrarilor facāndu-se īn functie de expresia logica <expL> (pentru valoarea adevarata a acesteia). Spre deosebire de clauza FOR care dupa gasirea unei īnregistrari ce nu respecta conditia <expL>, continua testarea celorlalte, clauza WHILE īntrerupe testarea īnregistrarilor cānd gaseste o īnregistrare ce nu respecta conditia data.

Daca se specifica ambele clauze, FOR si WHILE, prima  care conteaza este clauza WHILE. Folosind clauza FOR viteza de preluare creste foarte mult, de aceea se recomanda folosirea acesteia oricānd este posibil.

Obs. Īn expresia logica din clauza FOR sI WHILE trebuie sa intervina o marime ce variaza īn functie de īnregistrare. Aceasta trebuie sa depinda fie de numarul īnregistrarii, fie de continutul acesteia.

Exp.

a) i = 4

. ALL FOR i = 2 .

este egal cu o īnregistrare, deoarece, pentru orice īnregistrare i este diferit de 2, deci expresia logica va fi falsa.

b) Domeniul

ALL WHILE 1 + 1 = 2

reprezinta toate īnregistrarile din baza de date (1 + 1 este egal cu 2 pentru toate īnregistrarile).

c) ALL FOR RECNO ( ) > 3

are ca efect selectarea tuturor īnregistrarilor īncepānd de la īnregistrarea 3 exclusiv.

Īncarcarea si modificarea datelor din tabele

Crearea unei tabele nu presupune si īncarcarea ei cu date. Adaugarea si modificarea datelor se poate face fie īn mod interactiv cu ajutorul optiunilor din meniu, fie prin intermediul comenzilor limbajului de programare.

Adaugarea interctiva de noi date la o tabela se realizeaza cu comanda APPEND sau optiunea cu acelasi nume a meniului FoxPro. Amble determina deschiderea unei ferestre īn care pot fi completate pe rānd datele corespunzatoare noilor īnregistrari ale tabelei.

Comanda APPEND [BLANK]

-         adauga īnregistrari la sfārsitul bazei de date deschisa īn zona de lucru curenta.

BLANK = adauga o īnregistrare vida la sfārsitul bazei de date, urmānd ca informatia utila se sa īncarce mai tārziu.

Modificarea datelor stocate īntr-o baza de date se realizeaza cu comenzile  CHANGE, EDIT, BROWSE si REPLACE.

Primele trei comenzi nu modifica propriu-zis continutul bazei de date ci deschid o fereastra de editare īn care utilizatorul va modifica datele din baza de date interactiv.

Comenzile CHANGE si EDIT sunt identice, cāmpurile din cadrul unei īnregistrari sunt asezate unele sub altele, la comanda BROWSE cāmpurile se afla unele lānga altele, iar īnregistrarile unele sub altele.

Comanda CHANGE/EDIT permite editarea continutului unei baze de date īntr-o fereastra de editare.

CHANGE / EDIT

[FIELDS <lista cāmpuri>]

[<domeniu>] [ FOR <expL1>] [WHILE <expL2>]

[FONT <expC1> [,<expN1>]]

[STYLE <expC2>]

[FREEZE <cāmp>] .

clauza FIELDS are ca efect afisarea spre editare doar a cāmpurilor specificate īn <lista cāmpuri >, īn ordinea aparitiei lor īn lista. Daca aceasta clauza lipsese sunt afisate spre editare toate cāmpurile bazei de date.

Fontul folosit pentru textul afisat īn fereastra Change se poate specifica prin clauza FONT īn stilul de afisare prin clauza STYLE.

Domeniu, for, while specifica domeniul īnregistrarilor ce vor fi accesibile.

Clauza Freeze se foloseste pentru a selecta spre modificare un singur cāmp si anume <cāmp> restul fiind afisate īn fereastra de aditare fara a se permite editarea lor.

Sintaxa comenzii browse este

BROWSE

[FIELDS <lista cāmpuri>]

[FONT <expC1> [,<expN1>]]

[STYLE <expC2>]

[FOR <expL1>]

[FORMAT]

[FREEZE <cāmp>]

[NOLGRID] [NORGRID].

Clauza Format se refera la preluarea formatului de afisare a cāmpurilor din fereastra Browse dintr-un fisier de format.

Īn fereastra Browse cāmpurile sunt separate prin linii verticale. Pentru a le elimina se folosesc clauzele NOLGRID respectiv NORGRID acestea referindu-se la partitia stānga respectiv la partitia dreapta a ferestrei.

Modificarea continutului unei baze de date se poate face si cu comanda REPLACE care, spre deosebire de celelalte nu deschide o fereastra īn care utilizatorul introduce noile valori ale cāmpurilor bazei de date, ci realizeaza propriu-zis actualizarea bazei de date cu datele precizate īn comanda.

REPLACE

<cāmp1> WITH <exp1> [ADDITIVE]

[, <cāmp2>] WITH <expr2>.]

[<domeniu>] [FOR <expL1>] [WHILE <expL2>]

comanda īnlocuieste vechea valoare din cāmpul <cāmp1> cu valoarea rezultata īn urma evoluarii expresiei <exp1> etc.

pentru cāmpurile numerice, daca nu se reuseste īncadrarea valorii expresiei īn cāmpul respectiv acesta va fi umplut cu asteriscuri. Īn cazul cāmpurilor memo specificānd clauza additive, vechea valoare nu este īnlocuita cu cea noua si se va realiza adaugarea noului continut la sfārsitul celui vechi.

<domeniu>, FOR si WHILE specifica domeniul īnregistrarilor la care se refera comanda REPLACE, domeniul implicat fiind īnregistrarea curenta:

Exp.   USE mfixe

APPEND BLANK

REPLACE cod with 'vopsea';

denumire with 'vopsea īn ulei, albastra';

BROWSE

USE.

Vizualizarea continutului unei baze de date

Se face folosind comenzi LIST si DISPLAY

Comanda DISPLAY afiseaza continutul bazei de date din zona de lucru curenta.

DISPLAY [[FIELDS] <lista cāmpuri>]

[<domeniu>][FOR <expL1>][WHILE <expL2>]

[TO PRINTER (TO FILE <fisier>)]

afisarea datelor se face īn urmatorul format:

-         prima linie reprezinta lista cāmpurilor, identificate prin numele acestora;

-         urmatoarele linii reprezinta īnregistrari din baza de date (fiecare linie reprezinta cāte o īnregistrare īn care cāmpurile sunt afisate unul lānga altul).

Pe prima pozitie, cāmpul 0,  se afiseaza numarul de ordine al īnregistrarii din baza de date.

FIELDS - se foloseste cu scopul de a afisa doar cāmpurile specificate īn <lista cāmp>, īn ordinea aparitiei lor īn aceasta lista. Absenta acestei clauze determina afisarea tuturor cāmpurilor bazei de date, īn ordinea īn care apar acestea īn structura bazei de date.

Cāmpurile memo vor fi afisate numai daca sunt explicit specificate īn lista de cāmpuri ale clauzei FIELDS.

Exp.   USE mfixe

          DISPLAY ALL FIELDS cod, denumire, valoare



USE

<domeniu>, FOR si WHILE determina domeniul īnregistrarilor ce vor fi afisate cu comanda DISPLAY. Daca aceste clauze lipsesc se va afisa doar īnregistrarea curenta, acesta fiind domeniul implicit al īnregistrarilor, pentru cdo DISPLAY.

          Exp.   USE mfixe

                   DISPLAY ALL FOR stare = .T.

(se afiseaza doar mijloacele fixe īn folosinta).

Prezenta clauzei OFF īn comanda determina disparitia din formatul de afisare a coloanei 0 reprezentānd numarul de ordine al īnregistrarilor din baza de date.

Īn afara de afisare pe ecran se poate face si afisarea la imprimanta daca se foloseste clauza TO PRINTER sau īn fisierul <fisier> daca se foloseste clauza TO FILE.

Exp.   USE mfixe

          DISPLAY ALL OFF TO PRINTER

          DISPLAY ALL TO FILE listare.txt

          USE

Comanda LIST este asemanatoare cu DISPLAY (cu aceeasi sintaxa) cu urmatoarele diferente

-         domeniul implicit al īnregistrarilor pentru comanda DISPLAY este NEXT 1 (īnregistrarea curenta) pentru comanda LIST este ALL (toate īnregistrarile);

-         comanda DISPLAY are ca efect afisarea continutului bazei de date, ecran cu ecran, trecerea de la un ecran la altul facāndu-se dupa apasarea unei taste. La comanda LIST afisarea este continua, pauza dintre ecrane lipsind;

-         LIST nu afiseaza īnregistrarile marcate pentru stergere īn cazul SET DELETED ON, iar DISPLAY le afiseaza pe acestea.

Obs. Comanda LIST este chivalenta din punctul de vedere al domeniului īnregistrarilor cu DISPLAY ALL, iar comanda DISPLAY este echivalenta cu comanda LIST NEXT 1.

Exp.   USE mfixe

          LIST FIELDS cod, denumire, valoare

USE

          Se afiseaza doar cāmpurile din lista.

          stergerea datelor din tabele

Alaturi de adaugare si modificare "stergerea reprezinta una din principalele operatii īn lucrul cu tabele. stergerea unei īnregistrari dintr-o tabela se poate realiza la doua nivele si anume:

-         la nivel logic, cānd īnregistrarea nu este propriu-zis stearsa din tabela, ci ea este marcata īntr-un anumit mor ("marcata pentru stergere") indicānd astfel aceasta stare a īnregistrarii. Exista comenzi si functii FoxPro (marea majoritate) care, īnainte de accesarea unei īnregistrari, testeaza marcajul de stergere al acesteia si, īn functie de el, considera īnregistrarea absenta sau prezenta īn fisier.

-         la nivel fizic, cānd īnregistrarea este stearsa efectiv din tabela, ea nemaiputānd fi īn nici un fel accesata sau refacuta.

Īn urma unei stergeri logice o īnregistrare sau un cāmp nu este eliminat fizic din fisierul respectiv, ci doar este facut invizibil pentru comenzile utilizatorului. Īn urma unei astfel de stergeri exista posibilitatea refacerii elementului respectiv, īn sensul acordarii din nou accesului utilizatorului. stergerea fizica actioneaza asupra datelor din fisier elimināndu-le pur si simplu, fara posibilitatea de refacere ulterioara (deoarece datele au disparut si īn zona respetiva de memorie s-a scris altceva).

Marcarea pentru stergere a unora sau mai multor īnregistrari se face cu ajutorul comenzii DELETE:

DELETE

[<domeniu>] [FOR<expL1>][WHILE <expL2>]

<domenii>, FOR WHILE identifica īnregistrarile ce vor fi marcate pentru stergere. Domeniul implicit al comenzii DELETE este īnregistrarea curenta.

Accesul la īnregistrarile marcate pentru stergere este contestat de comanda SET DELETED ON/OFF. Daca se alege optiunea ON īnregistrarile marcate pentru stergere nu vor fi accesibile celorlalte comenzi FoxPro, iar cānd este aleasa optiunea OFF īnregistrarile sunt accesibile indiferent de marcajul de stergere al acestora. Starea initiala este OFF.

Comenzile care actioneaza asupra unei singure īnregistrari sau care au ca domeniu implicit īnregistrarea curenta nu sunt afectate de aceasta comanda.

Exp:   USE mfixe

          SET DELETED OFF

DELETE FOR MOD (RECNO ( ), 2) = 0

LIST

Se sterg īnregistrarile cu un numar de ordine  par. Īnlaturarea marcajului de stergere se realizeaza cu comanda:

RECALL

[<domeniu>] [FOR <expL1>] [WHILE <expL2>]. Īnregistrarile selectate prin clauzele <domeniu>, FOR si WHILE vor fi refacute, adica li se va īnlatura marcajul de stergere, īn cazul ca acesta era pozitionat.

Īnregistrarile care nu sunt marcate pentru stergere nu sunt afectate de comanda RECALL. Domeniul implicit al acestei comenzi este īnregistrarea curenta.

Exp.   USE mfixe

DELETE FOR RECNO ( ) < = 3 // se sterg primele 3 īnregistrari

LIST

RECALL ALL // sunt refacute toate īnregistrarile

LIST

USE

Pentru stergerea la nivel fizic se foloseste comanda

PACK

Ea realizeaza stergerea fizica a tuturor īnregistrarilor marcate pentru stergere, din baza de date activa.

Dupa aplicarea comenzii PACK asupra unei baze de date, īnregistrarile nu mai pot fi refacute; stergerile sunt permanente.

Comanda PACK poate fi īntrerupta prin actionarea tastei ESC, baza de date originala fiind refacuta.

Exp. USE mfixe

LIST

DELETE RECORD5 // marcheaza pentru stergere a 5-a īnregistrare

PACK // se sterg fizic

LIST

USE

stergerea īnregistrarilor din baza de date se poate face cu comanda YAP.

Comanda sterge fizic toate īnregistrariledin baza de date activa fiind echivalenta cu secventa de instructiuni.

DELETE ALL

PACK

Ca si la comanda PACK, īnregistrarile sterse cu comanda YAP nu mai pot fi refacute (stergerea este fizica). Īnainte de executia comenzii, daca optiunea SAFETY este SET ON se va mai afisa un mesaj de confirmare a stergerii īnregistrarilor.

Cautarea īnregistrarilor īntr-o baza de date

Bazele de date voluminoase sunt foarte greu de exploatat fara ajutorul unui mecanism de cautare, care sa permita regasirea oricarei date īn timp util. Efectul comenzii respective este acela de pozitionare a indicatorului de īnregistrari pe prima īnregistrare care respecta conditia, pentru care valoarea expresiei logice este adevarat.

LOCATE FOR <expL1>

[<domeniu>][WHILE <expL2>]

Comanda cauta prima īnregistrare care respecta conditia <expL1> īn baza de date activa. Domeniul īnregistrarilor care se testeaza este dat de clauzele <domeniu> si WHILE, cel implicit fiind ALL.

La gasirea unei īnregistrari care respecta conditia <expL1>, indicatorul de īnregistrari se va pozitiona pe īnregistrarea respectiva.

Īntr-o baza de date pot exista mai multe īnregistrari ce respecta o conditie data. Prima dintre acestea va fi gasita  folosind comanda LOCATE, urmatoarele vor fi gasite prin intermediul comenzii CONTINUE.

Testarea reusitei sau nereusitei cautarii se face cu ajutorul functiilor RECNO ( ), FOUND ( ) si EOF ( ).

FOUND ([<expL1> / <expC>])

returneaza adevarat īn cazul unei cautari cu succes si fals īn caz contrar.

<expN>, <expC> identifica baza de date la care se refera functia.

Exp. Sa se gaseasca primele doua mijloace fixe īn folosinta din baza de date

USE mfixe

LOCATEFOR stare = .t.

?FOUND ( )

.T.

?EOF ( )

-F

?RECNO ( )

1.

CONTINUE

? FOUND ( )

.T.

?RECNO ( )

3.

USE


Cāmpurile memo

Īn general pentru memorarea textelor se foloseste ca tip de date sirul de caractere. Lungimea cāmpului īn cae urmeaza a se memora textele respective va trebui sa fie egala cu lungimea celui mai mare text care urmeaza a fi īncarcat īn cāmp. Īn acest caz se face o risipa de memorie. Eliminarea ei facāndu-se cu ajutorul unui tip special de cāmp numit tipul "memo".

O tabela care contine cel putin un cāmp "memo" are asociat un fisier suplimentar īn care sunt depuse datele cāmpurilor "memo". Pentru a se putea identifica ce date din fisierul "memo" asociat apartin unei anumite īnregistrari din tabela, pe pozitia cāmpului "memo" considerat, īn īnregistrarea respectiva se memoreaza toate informatiile cu privire la locul datelor īn fisierul "memo" (un "printer").

Accesul la continutul unui cāmp "memo" se face astfel:

-         se selecteaza īnregistrarea dorita si se citesc datele din respectivul cāmp "memo" din tabela;

-         cu ajutorul acestor date se gaseste locul de depozitare a continutului cāmpului īn fisierul "memo" asociat;

-         se citeste din fisierul "memo", de la pozitia determinata anterior, continutul cāmpului "memo" (de dimensiune variabila).

Īncarcarea unor date īntr-un cāmp "memo" se face astfel:

-         se gaseste un spatiu liber īn fisierul "memo" asociat tabelei, suficient pentru memorarea tuturor datelor, si se īncarca aceste date īn spatiul respectiv;

-         se completeaza īn tabela, īnregistrarea dorita, īn cāmpul "memo" respectiv, toate datele necesare localizarii īn fisierul "memo" a continutului cāmpului.

          Īncarcarea unor date īntr-un cāmp "memo" se poate face fie de utilizator, introducāndu-le caracter cu caracter īntr-o fereastra de editare, fie prin citirea acestora dintr-un fisier sau din memoria calculatorului.

Metoda interactiva consta din urmatoarele etape:

-         se deschide o fereastra de editare pentru modificarea continutului tabelei, sau pentru adaugarea de noi īnregistrari, folosindu-se comenzile CHANGE , EDIT, BROWSE, APPEND;

-         se pozitioneaza cursorul īn cāmpul memo respectiv, al īnregistrarii dorite, dupa care se apasa combinatia de taste CRTL + PAGE UP. Folosind mouse-ul se pozitioneaza cursorul acestuia pe cāmpul respectiv si efectuam dublu-clic stānga mouse;

-         ca efect al acestei actiuni pe ecran apare o fereastra de editare īn care utilizatorul are posibilitatea de a introduce, folosind tastatura, continutul cāmpului respectiv;

-         dupa terminarea editarii cāmpului memo se iese din fereastra de editare folosind combinatia de taste CTRL + W (CRTL +  ) combinatie care realizeaza si salvarea modificarilor īn baza de date, sau prin apasarea tastei ESC care nu salveaza modificarile aduse cāmpului memo;

-         dupa īnchiderea ferestrei de editare a cāmpului memo, se revine īn fereastra Change (Browse Append etc.).

Pentru a edita un cāmp "memo", fara a mai trece prin fereastra de editare Chnge, folosim comanda MODIFY MEMO care deschide direct o fereastra de editare pentru cāmpul memo specificat, al īnregistrarii curente din baza de date activa.

MODIFY MEMO <cāmp memo1> [,<cāmp memo2>.]

[NO EDIT] [NO WAIT] [SAVE]

unde <cāmp memo1>, <cāmp memo2>. reprezinta cāmpurile memo pentru care se vor deschide ferestre de editare, cāte una pentru fiecare cāmp.

NO EDIT = nu permite modificarea continutului cāmpului memo, folosindu-se īn cazul īn care se doreste doar vizualizarea acestuia.

NO WAIT = se foloseste īn interiorul unui program si are ca efect continuitatea executiei programului dupa deschiderea ferestrei de editare, fara a mai astepta ca utilizatorul sa modifice cāmpul memo respectiv.

SAVE = se foloseste pentru a pastra fereastra pe ecran si dupaiesirea din editare (clauza nu are efect īn fereastra de comenzi, doar īn cadrul unui program).

Exp.   USE mfixe

GOTO 4

MODIFY MEMO locatie folosita NOEDIT

se afiseaza cāmpul adresa al īnregistrarii 4 fara a se permite modificarea sa

USE.

Īnchiderea ferestrei memo de editare se realizeaza prin:

CLOSE MEMO <cāmp memo1> [, <cāmp memo2>.]/ALL

Se vor īnchide ferestrele de editare corespunzatoare cāmpurilor memo specificate īn lista, salvāndu-se eventualele modificari facute acestor cāmpuri. La īnchiderea unei baze de date se vor īnchide si ferestrele memo deschise īn acel moment, pentru cāmpurile memo ase bazei de date. Clauza ALL are ca efect īnchiderea tuturor ferestrelor memo deschise, pentru toate zonele de lucru.

Exp:   USE mfixe

MODIFY MEMO loc-folosinta

CLOSE MEMO    loc-folosinta

Se īnchide fereastra memo respectiva

USE

O alta modalitate de a īncarca un cāmp, "memo" dintr-o baza de date este data de comanda APPEND MEMO <cāmp memo> FROM <fisier> [OVERWRITE].

Continutul īntregului fisier, cu numele <fisier> se adauga la sfārsitul cāmpului memo <cāmp memo>. Daca se include optiunea OVERWRITE continutul fisierului nu va fi adaugat la sfārsitul cāmpului memo ce va fi copiat peste acesta, vechiul continut fiind sters.

Exp.   USE mfixe

APPEND BLANK

REPLACE cod WITH 'Masina';

REPLACE denumire WITH 'TICO'

REPLACE data_inst WITH

REPLACE stare WITH.T.

APPEND MEMO loc-folosinta FROM adresa.txt.OVERWRITE

Operatia inversa, de copiere a continutului unui cāmp memo dintr-o baza de date īntr-un fisier text (ASCII) este realizata de comanda:

COPY MEMO <cāmp memo> TO <fisier> [ADDITIVE]

Comanda are ca efect copierea continutului memo <cāmp memo> īn fisierul <fisier>. Daca fisierul nu exista anterior se creeaza unul nou, altfel copierea va avea loc īn fisierul existent deja pe disc.

Īn cazul īn care nu se specifica nici o extensie pentru fisierul <fisier>, FoxPro īi va atribui automat extensia TxT.

Continutul cāmpului memo va fi copiat peste continutul fisierului <fisier> (daca acesta exista), vechiul continut pierzāndu-se astfel. Pentru a se adauga la sfārsitul fisierului se include īn comanda clauza ADDITIVE.

Exp    USE mfixe

COPY MEMO loc-folosinta TO adresa.txt

se copiaza prima adresa

GO TO 2

COPY MEMO loc-folosinta TO adresa.txt ADDITIVE

se adauga a doua adresa

MODIFY FILE adresa.txt NOEDIT

se vizualizeaza fisierul adresa.txt

USE

Se poate realiza si copierea datelor īntre cāmpurile "memo" (din aceeasi tabela sau din tabele diferite), folosindu-se comanda REPLACE. Cāmpurile "memo" vor fi utilizate ca si celelalte cāmpuri.

Exp. Consideram baza de date mfixe īn care se doreste schimbarea īntre ele a locurilor de folosinta ale īnregistrarilor 2 si 4. Folosim ca intermediar fisierul adresa.txt.

1.     USE mfixe // se deschide baza de date īn zona de lucru 1

2.     USE mfixe // IN 2 AGAIN // se deschide si īn zona 2

3.     GO TO 2

4.     COPY MEMO loc-folos TO adresa.txt

5.     GO TO 4 IN B

6.     REPLACE loc-folos WITH b.loc-folos

// se īnlocuieste cāmpul memo loc-folos al īnregistrarii 2 (din zona 1) cu cāmpul memo loc-folos al īnregistrarii 4 (din zona 2)

7.     GOTO 4

8.     APPEND MEMO loc-folos FROM adresa.txt OVERWRITE

// se copiaza continutul fisierului adresa.txt īn cāmpul loc-folos al īnregistrarii 4 din zona 1

9.     BROWSE

10. CLOSE ALL

S-a folosit urmatoarea schema de interschimbare a cāmpurilor memo:



Linia 6 a programului īn care primul cāmp loc.folos se refera la zona de lucru A, zona activa, iar cel de-al doilea cāmp b.loc.folos se refera la zona de lucru B (referirea se face prin <alias>.<cāmp>, unde <alias> reprezinta aliasul bazei de date respective). Īn ambele zone de lucru avem deschisa aceeasi baza de date, īn momentul īn care se executa instructiunea a 6-a īn prima zona de lucru fiind pozitionati pe īnregistrarea a doua, iar īn cea de-a doua pe īnregistrarea 4.

O alta modalitate de a schimba cele doua cāmpuri memo din baza de date este:

Exp.

1.     CLOSE ALL

2.     USE mfixe

3.     USE mfixe IN 2 AGAIN

4.     GO TO 2

5.     v = loc.folos

6.     GO TO 4 IN b

7.     REPLACE loc.folos WITH b.loc.folos

8.     GO TO 4

9.     REPLACE loc,folos WITHv

10. BROWSE

11. CLOSE ALL

Deosebirea este ca s-a folosit ca intermediar īn locul fisierului adresa.txt o variabila de memorie v.

Vom avea urmatoarea schema de functionare


          Īn instructiunea din linia a 9-a se īnlocuieste continutul cāmpului memo loc.folos cu valoarea variabilei v. variabila v care se creeazaīn linia 5 va fi o variabila de tip memo ce va contine datele stocate īn cāmpul memo loc.folos.

Acest tip de variabila este tratat ca un sir de caractere, asupra lui putāndu-se aplica toate functiile folosite pentru siruri de caractere (SUBSTR ( ), LEFT ( ), PADC ( ), STR ( ), LEN ( ) etc.).

Exista īnsa doua functii speciale pentru manipularea cāmpurilor "memo", care se aplica numai acestui tip de cāmpuri.

MEMLINES ( ) = returneaza numarul de linii continute de cāmpul "memo" primit ca parametrii.

Pentru a extrage o anumita linie dintr-un cāmp memo se foloseste:

MLINE (<cāmp memo>, <expN1>[, <expN2>])

<cāmp memo> = reprezinta cāmpul memo din care se extrage linia.

<expN1> = specifica numarul liniei care se extrage (daca linia cu acest numar nu exista, se returneaza situl vid).

<expN2> = reprezinta deplasamentul folosit īn extragerea liniei, se considera cāmpul memo ca īncepānd de la al (<expN2>+1)-lea caracter.

Exp Pp ca īn cāmpul loc.folos. al īnregistrarii curente din baza de date mfixe avem textul

Bucuresti

str. Cuza Voda nr. 54

Sector 4

? MEMLINE (loc.folos)  // nr. de linii din cāmpul memo

3

? MLINE (loc.folos, 2)

str. Cuza Voda, nr. 54

? MLINE (loc.folos, 1, 0)

Bucuresti

? MLINE (loc.folos, 1, 1)

ucuresti

? MLINE (loc_folosinta, 4)

/         /

? MLINE (loc.folosinta, 1, 11)

strada Cuza Voda nr. 54

Ordonarea datelor din tabele

Īn cazul bazelor de date, īn care lucrul se realizeaza la nivel de īnregistrare, ordonarea unei tabele īnseamna asezarea īnregistrarilor sale īntr-o  anumita ordine, dupa un anumit criteriu de ordonare. Aceasta ordine a īnregistrarilor nu trebuie sa fie neaparat cea fizica, existenta īn fisier, ci poate fi una aparenta. Principiul indecsilor face ca o tabela sa fie vazuta de utilizator ca fiind ordonata cu toate ca ea nu este asa īn fisier. Aceasta operatie este realizata prin intermediul unui fisier intermediar (fisierul index) care actioneaza ca un filtru asupra tabelei.

O tabela este ordonata dupa un anumit criteriu daca fiecare īnregistrare a acesteia respecta criteriul dat, īn raport cu īnregistrarile anterioare si posterioare.

Compararea a doua īnregistrari ale unei tabele se reduce la compararea a doua valori ale unei expresii, fiecare valoare corespunzānd unei īnregistrari de comparat, expresia fiind specifica criteriului de ordonare. Astfel, compararea a doua īnregistrari se reduce la compararea valorilor expresiei respective.

Expresia poarta numele de cheie de ordonare, valoarea ei diferind de la īnregistrare la īnregistrare pentru ca ea contine cāmpuri ale tabelei, al caror continut difera de la īnregistrare la īnregistrare.

O tabela este ordonata crescator (ascendent) sau descrescator (descendent) daca fiecare īnregistrare din aceasta este mai mare, respectiv mai mica decāt īnregistrarea anterioara.

Īn FoxPro exista doua metode de ordonare a unei tabele:

-         ordonarea fizica a tabelei, realizata prin schimbarea īntre ele a īnregistrarilor dupa un anumit algoritm pāna cānd acestea sunt īn ordinea dorita. Īn acest caz se obtine o noua tabela care contine aceleasi īnregistrari ca si cea de la care s-a pornit dar īn ordinea dorita.

-         indexarea tabelei = crearea unui fisier special (numit fisier index), care contine informatiile cu privire la ordinea īnregistrarilor tabelei. si īn acest caz se obtine un fisier nou, fisierul index, dar acesta nu contine īnregistrarile tabelei, ci memoreaza numai ordinea acestora.

Sortarea bazelor de date

Def. Sortarea unei tabele reprezinta operatia prin care īnregistrarile acesteia sunt asezate īntr-o anumita ordine, dupa un anumit criteriu.

Comanda de stocare este SORT. Ea este urmata de clauza TO prin care se precizeaza numele fisierului nou creat.

SORT TO <fisier> ON <cāmp1> [/A][/D][/C]

[, <cāmp2> [/A][/D][/C] .]

[<domeniu>][FOR <expL1>][WHILE<expL2>]

[FIELDS <lista cāmpuri>]

Comanda sorteaza baza de date activa, creānd o noua baza de date īn care sunt depuse īnregistrarile selectate, īn ordinea specificata. Baza de date nou va contine cāmpurile specificate īn clauza FIELDS, sau toate cāmpurile, īn cazul cānd aceasta clauza lipseste. Noua baza de date va purta numele <fisier> la care FoxPro adauga extensia DBF īn cazul cānd nu se specifica explicit o alta extensie.

Cheia de ordonare este data de cāmpurile <cāmp1>, <cāmp2> ... specificate dupa clauza ON a comenzii.

Clauza /A si /D sunt asociate cāmpului dupa care acestea urmeaza specificānd tipul de ordonare: crescator pentru /A si descrescator īn cazul /D.

Daca toate cāmpurile din lista sunt egale ordinea va fi data de ordinea fizica de aparitie a īnregistrarilor īn baza de date sursa.

Clauza /C se foloseste dupa cāmpurile de tip sir de caractere pentru a nu se face distinctie īntre litere mari si mici. Implicit, tipul literelor este semnificativ īn comparatie.

Obs. Pentru specificarea a doua clauze dupa un cāmp se folosesc constructiile /AC si /DC īn functie de ordinea dorita.

<domeniu>, FOR si WHILE selecteaza īnregistrarile ce se vor ordona si vor fi trecute īn noua baza de date.

Exp.   USE mfixe

LIST

SORT TO mfixe_s ON cod /AC

USE mfixe_s

LIST

USE

se ordoneaza baza de date mfixe, cheia de ordonare fiind codul mijlocului fix, iar ordinea crescatoare. Noua baza de date se va numi mfixe_s.dbf.

Indexarea bazelor de date

Presupune crearea unui fisie nou, numir fisier index asociat bazei de date īn care se memoreaza ordinea īnregistrarilor. Accesul la o anumita īnregistrare se face prin intermediul fisierului index.

Modul de lucru cu o baza de date indexata este urmatorul:

-         mai īntāi trebuie creat fisierul index asociat bazei de date, specificāndu-se criteriile de ordonare dorite pentru baza de date;

-         cānd se doreste folosirea bazei de date indexate anteior aceasta se deschide si odata cu ea se deschid si fisierele index asociate acesteia;

-         se realizeaza operatiile dorite asupra bazei de date īnregistrarile fiind vazute īn ordinea data de fisierul index activ sau de eticheta index activa. Modificarea continutului bazei de date determina actualizarea automata a fisierelor index deschise pentru baza de date respectiva, ordinea īnregistrarilor fiind actualizata la modificarea bazei de dare;

-         la īnchiderea bazei de date se īnchid si fisierele index asociate acesteia la deschidere.

Fisierele index ce pot fi asociate unei baze de date pot fi de doua tipuri:

-         fisiere index simple (cu extensia .IDX) ce contin un singur criteriu de ordonare;

-         fisiere index compuse (cu extensia .CDX) care memoreaza mai multe criterii de ordonare, unul singur fiind activ la un moment dat (fiecarui criteriu de ordonare i se asociaza o eticheta).

O baza de date poate avea mai multe fisiere index asociate, dar numai unul singur va fi activ la un moment dat si se numeste fisier index activ.

Ordinea īn care este accesata baza de date este data de fisierul index activ, iar daca acesta este compus de eticheta activa din fisierul index.

Crearea unui fisier index pentru o baza de date se realizeaza prin

INDEX ON <expr> TO <fisier.idx> / TAG <nume eticheta> [OF <fisier.cdx>]

[FOR <expL>]      [COMPACT]

[ASCENDING / DESCENDING] [UNIQUE]

cheia de ordonare (indexare) va fi specificata prin expresia <expr> aceasta continānd cāmpuri ale bazei de date active dar nu cāmpuri memo.

Fisierul index creat se va transmite prin <fisier.idx> īn cazul unui fisier index simplu sau prin <fisier.cdx> īn cazul unui fisier index compus.

Fisierele compuse sunt la rāndul lor de doua tipuri:

-         structurale - sunt deschise si asociate automat bazei de date odata cu deschiderea acesteia folosind comanda USE. Are acelasi nume cu baza de date si sunt create folosind clauza TAG fara introducerea unui nume de fisier index cu clauza OF;

-         nestructurale - nu sunt deschise automat odata cu deschiderea bazei de date. Ele poarta alt nume decāt al bazei de date, nume specificat īn clauza OF <fi;ier.cdx>.

Clauza COMPACT are ca efect crearea unui fisier index simplu compact beneficiind de o accesare rapida a īnregistrarilor

For = numai īnregistrarile ce respecta conditia logica expL vor putea fi accesate prin fisierul index respectiv.

ASCENDING / DESCENDING = precizeaza modul de ordonare a bazei de date asociata fisierului index.

Exista cazuri cānd avem doua sau mai multe īnregistrari cu aceeasi cheie de indexare. Introducānd clauza UNIQUE va putea fi accesata numai prima dintre aceste īnregistrari.

Exp

* crearea unui fisier index simplu pentru baza  de date mfixe.dbf

USE mfixe

INDEX ON cod TO mfixe_n

LIST

USE

* crearea unei etichete īntr-un fisier index compus nestructural

USE mfixe

INDEX ON valoare TAG val_n OF mfixe_d

LIST

USE

* adaugarea unei noi etichete la fisierul index anterior

USE mfixe

INDEX ON substr (cofd, 1, 4) + substr (denumire, 1, 4);

TAG codden OF mfixe_d FOR data_inst >

LIST

USE

Se adauga eticheta codden la fisierul index mfixe_d se va ordona dupa cod si denumire, doar primele patru caractere din aceste cāmpuri fiind semnificative. Se selecteaza doar mijloacele fixe ce s-au instalat dupa 1 ianuarie 1999.

* indexarea unei baze de date folosind un fisier index compus structural īn care se vor introduce 4 etichete

USE mfixe

INDEX ON cod TAG tcod

INDEX ON valoare TAG tvaloare

INDEX ON amortizare TAG tamortizare DESCENDING

INDEX ON stare TAG tstare

USE

Odata cu deschiderea unei baze de date se pot deschide si fisierele index astfel:

USE [<fisier>/?]

[INDEX<lista fisiere index>/?]

[ORDER[<expN>/<fisier.idx>/[TAG] <nume eticheta>[OF <fisier.cdx>] [ASCENDING/DESCENDING]]]]

Pentru a deschide fisiere index pentru baza de date activa se foloseste comanda:

SET INDEX TO [<lista fisiere index>/?]

[ORDER <expN>/<fisier.idx>/TAG <nume eticheta>]

[OF<fisier.cdx>][ASCENDING/DESCENDING][ADDITIVE]

Se vor deschide toate fisiereleindex specificate īn <lista fisiere index> sau selectate din fereastra de dialog deschisa īn urma clauzei? Fisierul index simplu activ sau eticheta activa vor fi specificate prin clauza ORDER.

Noua lista de fisiere index o va īnlocui pe cea veche daca nu se specifica clauza ADDITIVE.

SET INDEX TO fara alte clauze are ca efect īnchiderea fisierelor index din zona de lucru curenta.

Exp.   USE mfixe

SET INDEX TO mfixe ORDER TAG tcod ADDITIVE

LIST

USE

Pentru a schimba ordinea de accesare a īnregistrarilor, deci pentru a selecta alt fisier index activ sau alta eticheta index activa folosim comanda:

SET ORDER TO

[<expN1>/<fisier,idx>/[TAG] <nume eticheta>]



[OF<fisier.edx>]

[IN <expN2>/<expC>]

[ASCENDING/DESCENDING]

          Clauza IN se foloseste atunci cānd comanda se refera la alta baza de date decāt cea activa cu aliasul <expC> sau din zona de lucru <expN2>

          Exp    USE mfixe INDEX mfixe_n.idx, mfixe_d.cxd, mfixe.cdx

SET ORDER TO 2

LIST

SET ORDER TO tvaloare OF mfixe.cdx

LIST

USE

Comanda folosita pentru reindexare este

REINDEX [COMPACT]

ea determina reactualizarea tutror fisierelor index simple sau a tuturor etichetelor din fisierele index compose, deschise curent pentru baza de date activa.

Clauza COMPACT actioneaza doar pentru fisiere index simple si se foloseste pentru a le transforma odata cu reindexarea īn fisiere index simple compacte.

Exp    USE mfixe INDEX mfixe_n, mfixe_d

REINDEX

USE

La deschiderea bazei de date <fisier> se vor deschide si fisierele index din <lista fisiere index> care au fost create anterior cu o comanda INDEX. Daca se īnlocuieste lista de fisiere index cu ? se va afisa o fereastra de dialog de unde utilizatorul poate selecta īn mod interactiv aceste fisiere.

Clauza ORDER determina fisierul index sau eticheta ce va deveni activa.

ORDER <expN> reprezinta numarul de ordine al fisierului index simplu sau eticheta din fisierul index compus. Daca expN este 0 se va folosi ordonarea fizica a īnregistrarilor din baza de date.

-         ORDER <fisier.idx>se specifica fisierul index simplu care va deveni activ.

-         ORDER [[TAG <nume eticheta>][OF <fisier.cdx>]] se specifica eticheta sau fisierul index compus care va deveni activ.

Clauzele ASCENDING si DESCENDING specifica ordinea crescatoare sau descrescatoare folosita pentru ordonarea īnregistrarilor.

Exp.

* USE mfixe INDEX mfixe_n.idx, mfixce_d, cdx, mfixe.cdy ORDER2

// prima eticheta fin mfixe.cdx va fi activa (ordonarea dupa cod)

LIST

USE

* USE mfixe INDEX mfixe ORDER TAG tvaloare

LIST

USE

// se selecteaza eticheta tvaloare din fisierul index compus structural mfixe.cdx.

* USE mfixe INDEX mfixe_n.idx, mfixe_d.cdx, mfixe.cdx

ORDER mfixe_n

LIST

USE

// selecteaza ca activ primul fisier index (simplu) cheia de indexare fiind cāmpul cod.

Cautarea unei anumite īnregistrari īntr-o baza de date indexata se face prin comanda:

SEEK <expr>

Comanda cauta prima īnregistrare pentru care cheia de indexare ia valoarea <expr>. Daca este gasita o astfel de īnregistrare indicatorul se va pozitiona pe aceasta, functia FOUND ( ) returnānd valoarea .T.

Exp.

USE mfixe INDEX mfixe ORDER tcod

SEEK 'C1     '

? FOUND ( )

.T.

? RECNO ( )

1

DISPLAY

USE

Calculele statistice cu datele din bazele de date

Comanda COUNT [<domeniu>][FOR<expL1>][WHILE<expL2>]

[TO <var>]

numara īnregistrarile din domeniul specificat depunānd rezultatul īn variabila <var> care va fi creata īn cazul īn care nu exista anterior executiei comenzii.

Exp. numararea mijloacelor fixe a caror valoare depaseste 1.000.000

USE mfixe

COUNT      FOR valoare > 1.000.000 TO nr. mfixe

? 'īn baza de date avem', nr. mfixe, 'mijloace fixe cu val > decāt 1.000.000'

USE

SUM [<lista expresii>] [<domeniu>] [FOR<expL1>]

[WHILE<expL2>][TO<lista variabile>/TO ARRAY<masiv>]

sumeaza valoarea unor cāmpuri numerice din īnregistrarile selectate.

<lista expresii> este formata din expresii care contin cāmpuri numerice ale bazei de date, valorile acestor expresii urmānd sa fie īnsumate pentru toate īnregistrarile selectate prin <domeniu>, FOR, WHILE.

Daca lista lipseste se vor īnsuma toate cāmpurile numerice ale bazei de date.

Rezultatele obtinute vor fi depuse fie cu variabilele din <lista variabile> fie īn elementele masivului <masiv>.

Exp. avānd baza de date mfixe.dbf sa se calculeze procentul valoric al amortizarii relativ la valoarea totala a mijloacelor fixe.

USE mfixe

SUM amortizare TO val_am

SUM valoare TO val_tot

? 'S-a amortizat', val_am/val_tot *100, '% din val totala a mijloacelor fixe'

USE

AVERAGE [<lista expresii>][<domeniu>]

[FOR<expL1>][WHILE<expL2>]

[TO <list[ variabile> / TO ARRAY<masiv>]

calculeaza media aritmetica a valorilor expresiilor din <lista expresii> pentru īnregistrarile selectate prin domeniu, FOR si WHILE.

Daca vreuna din variabile sau masivul nu exista, acesta va fi creat, iar daca masivul are alta dimensiune decāt nr. de expresii din lista, aceasta va fi ajustata la valorea corecta.

Exp. Sa se calculeze valoarea medie a unui automobil folosind datele din baza de date mfixe.

USE mfixe

AVERAGE valoare FOR substr (cod, A, 1) = 'A'

TO medie

? 'valoarea medie a unui automobil = ', medie

USE

CALCULATE [<lista expresii>]

[<domeniu>][FOR <expL1>][WHILE<expL2>]

[TO<lista variabile> /TO ARRAY <masiv>]

spre deosebire de comenzile anterioare care executau un anumit calcul fiecare, comanda CALCULATE poate efectua mai multe tipuri de calcule īn functie continutul expresiilor din <lista expresii>.

Īn alcatuirea unei expresii din aceasta lista pot intra urmatoarele functii:

AVG (<expN>) calculeaza media aritmetica a valorilor lui <expN> care poate contine cāmpuri numerice ale bazei de date.

CNT ( ) = returneaza numarul de īnregistrari ce apartin domeniului selectat prin <domeniu>, FOR si WHILE

MAX (<expr>) = returneaza valoarea makxima a expresiei <expr> care nu trebuie neaparat sa fie de tip numeric ci poate fi si de tip data, calendaristica sau sir de caractere.

MIN (<expr>) = returneaza valoarea minima a <expr>

NVP (<expN1>, <expN2>[,<expN3>]) = calculeaza valoarea prezenta neta a unei serii de plati diminuate la o rata a dobānzii constanta.

<expN1> reprezinta rata dobānzii.

<expN2> reprezinta expresia care, calculata pentru o īnregistrare selectata ne da o plata din seria de plati considerata.

<expN3> valoarea initiala a investitiei. Daca aceasta lipseste investitia initiala va fi data de prima īnregistrare selectata.

STD (<expN>) calculeaza derivatia standard a valorilor lui <expN> pentru īnregistrarile selectate.

SUM (<expN>) calculeaza suma valorilor lui <expN>

VAR (<expN>) calculeaza abaterea medie patratica

Exp. Sa presupunem ca avem o baza de date īn care am stocat rezultatele unei experiente, valori numerice. Fie seria de valori: 13, 47, 35, 9, 89, 123, 75 depozitate īn cāmpul numar al bazei de date numere.dbf.

USE numere.dbf

CALCULATE avg(numar) TO media

? 'Media numerelor este', media

CALCULATE cnt ( ) TO nr_inreg

? 'Numarul de valori este:', nr_inreg

CALCULATE max (numar), min (numar), sum (numar)

TO maxcim, minim, suma

? 'valoarea maxima este:', maxim

? 'valoarea minima este:' minim

? 'suma numerelor este:', suma

CALCULATE npv (0, 1, numar, 100) TO val_p

? 'valoarea prezenta este:', val_p

CALCULATE std (numar) TO dev-STD.

? 'Deviatia standard este:', dev_std

USE

1)     Sa se creeze tabela STOCURI.DBF cu urmatoarea structura īn care sunt memorate datele referitoare la stocurile de materiale ale unui depozit. Cod C(8); denumire C(30); cantitate N(10,2) cant_norm N(10,2) (cantitate normata); UNIT_MASC(3) valoare N(10,2); ULTIM_MISC D(data ultimei miscari); COND_SPEC L (conditii speciale de depozitare); informatii M

a)     sa se completeze baza de date cu 10 īnregistrari

b)    sa se listeze toate materialele care necesita conditii speciale de depozitare (LIST FOR cond_spec = .t.)

c)     sa se afiseze materialele a caror valoare unitara depaseste valoarea de 1.000.000

d)    sa se obtina lista materialelor lichide

e)     sa se marcheze pentru stergere īnregistrarile cu valoare mai mica de 700.000

f)      sa se vizualizeze baza de date

g)     sa se majoreze valoarea produselor mai mici de 1.500.000 cu 10%

2)     Sa se creeze tabela PERSONAL.DBF pentru memorarea datelor referitoare la angajatii unei societati cu urmatoarea structura:

Marca               C(6)            codul persoanei

Nume               C(20)           numele

Prenume           C(30)           prenumele

Data_n             D

Data_ang          D

Functia             N(3)            functia (codificata)

Salariu              N(10)           salariul brut

Departam                   C(4)            departamentul (codificat)

Alte_date                   M                alte informatii

a)     sa se completeze baza de date cu 10 īnregistrari

b)    sa se listeze toti directorii (codul functiei este 03) care au salariul mai mic de 5.000.000

c)     sa se obtina lista angajatilor tineri (sub 30 de ani) sau peste 50 de ani dar care nu sunt directori (LIST ALL FOR INT ((DATE ( )- datan)/365)<30

d)    sa se listeze toti angajatii de la litera A

sa se majoreze salariul cu 15% pentru salariile mai mici de 3.000.000

e)     sa se stearga (logic) persoanele a caror marca īncepe cu litera T. sa se vizualizeze BD

sa se recupereze īnregistrarile marcate

f)      sa se stearga fizic din tabela ultimii 3 angajati

sa se listeze BD

g)     sa se listeze cāmpurile Nume prenume, functia, salariu, departament. Īn aceasta lista sa nu fie disponibili directorii (codul functiei este 3)

h)     sa se modifice cāmpul memo al īnregistrarii 3 prin adaugare

i)       sa se copieze continutul cāmpului memo al īnregistrarii 2 īn fisierul adresa.txt

j)       sa se schimbe continutul cāmpului memo 2 cu continutul īnregistrarii 5

k)     sa se sorteze baza de date dupa Nume ascendent


loading...




Document Info


Accesari: 4159
Apreciat:

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site

Copiaza codul
in pagina web a site-ului tau.




Coduri - Postale, caen, cor

Copyright © Contact (SCRIGROUP Int. 2018 )