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: 4122
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. 2017 )