Sunteți pe pagina 1din 6

Baze de date-Anul 2

Laborator 1 Visual FoxPro


Crearea i modificarea structurii unui tabel; operaii (inserare, adugare,
tergere); comenzi i funcii

Introducere
Un sistem de gestiune a bazelor de date (SGBD sau DBMS Data Base
Management System) este un produs software care asigur interaciunea cu o baz de
date, permind definirea, consultarea i actualizarea datelor din baza de date.
Baza de date este un ansamblu structurat de date coerente, fr redondan
inutil, astfel nct acestea pot fi prelucrate eficient de mai muli utilizatori ntr-un mod
concurent.
Sistemele de gestiune a bazelor de date (SGBD) pot fi mprite n dou
categorii:
- desktop (de exemplu: FoxPro, Access, Paradox)
- server (de exemplu: Oracle, SQLServer, MySQL).
n general, bazele de date de tip desktop sunt orientate ctre aplicaii singleuser i rezid pe calculatoare personale standard.
Bazele de date de tip server conin mecanisme care asigur sigurana i
consistena datelor i sunt destinate aplicaiilor multi-user. Aceste SGBD ruleaz de
obicei pe servere performante. Bazele de date de tip desktop sunt folosite adesea pe
post de front end pentru bazele de date server. De exemplu, se pot utiliza FoxPro sau
Access pentru a oferi o interfa pentru o baz de date SQLServer.
Visual FoxPro (VFP) este un instrument foarte puternic, care conine un limbaj
de programare, un motor de baze de date relaionale i un mediu de dezvoltare
integrat (IDE). Limbajul de programare este orientat obiect i procedural.

Crearea structurii unui tabel se realizeaz :


- prin meniu (File New);
- dupa crearea (sau deschiderea) unei baze de date, prin butonul New Table din
Database Designer;
- prin comanda CREA[TE].
Pentru deschiderea unui tabel existent se folosete comanda:
USE <nume_fisier>.
Pentru nchiderea unui tabel deschis n zona de lucru curent se folosete
comanda USE (fr parametri).
Obs: Comanda CLOSE ALL determin nchiderea bazei de date i a tuturor tabelelor i
indecilor deschii.
Modificarea structurii unui tabel existent se realizeaz:
- prin meniu (View Table Designer);
- prin comanda MODI[FY] STRU[CTURE];
- prin click dreapta pe tabel n Database Designer i selectarea opiunii Modify.
Obs: n mediul FoxPro, este suficienta introducerea primelor 4 caractere ale unei
comenzi. n continuare, nu vom mai semnala acest lucru n mod explicit (prin [ ]).

Vizualizarea structurii unui tabel se realizeaz prin comenzile LIST STRUCTURE


sau DISPLAY STRUCTURE.
Introducerea de nregistrri ntr-un tabel se poate face ntr-unul din urmtoarele
moduri:
- prin comanda APPEND;
- prin folosirea comenzii BROWSE (cu aceast comand se poate realiza orice operaie
de adugare, modificare sau tergere ntr-un tabel), urmat de selectarea opiunii Add
New Record din meniul Table (echivalenta cu combinatia de taste Ctrl + Y).
Pentru a completa un cmp de tip memo, se folosete CTRL+Page Down pentru
deschidere i CTRL + pentru nchidere.
Pentru a completa un cmp de tip general, se procedeaz astfel:
- poziionare pe cmp; de 2 ori click;
- Edit Insert Object;
- se alege Object Type i OK (de exemplu paintbrush sau file);
- se creaz sau se alege desenul;
- File Save As (se da nume - alfa.bmp i OK); CLOSE;
tergerea de nregistrri din tabel presupune 2 etape:
- tergerea logic a nregistrrilor (nregistrrile sunt doar marcate pentru tergere),
realizata prin comanda DELETE;
- tergerea fizic a nregistrrilor marcate, realizat prin comanda PACK.
Dac se dorete anularea marcajului efectuat prin DELETE, se utilizeaz comanda
RECALL ALL.
Obs: RECALL anuleaza doar marcajul de stergere al nregistrarii curente.
Comanda ZAP sterge toate liniile din tabelul curent, dar structura tabelului se
pastreaz.
Cteva comenzi utile n lucrul cu bazele de date:
- DISPLAY | LIST STRUCTURE - afieaz structura tabelului deschis n zona de lucru
curent.
- BROWSE, LIST, DISPLAY ALL- afieaz coninutul tabelului deschis n zona de lucru
curent.
- DISPLAY afieaz nregistrarea curent;
- CHANGE, EDIT afieaz cmpurile tabelului, n scopul editrii coninutului acestora.
- GO {n | TOP | BOTTOM} - determina poziionarea pe a n-a, prima, respectiv ultima
nregistrare din tabel.
- SKIP n determin saltul peste n nregistrri; n poate fi numr negativ.
- REPLACE <cmp> WITH <valoare> FOR <conditie> - permite actualizarea unei valori
a unui cmp din tabel.
- LOCATE FOR <conditie> - caut nregistrarea care ndeplineste condiia specificat.
Funciile sunt apelate precedndu-le cu simbolul "?", pentru afiare.
Exemplu: ? reccount()).
- RECNO() - furnizeaz numrul nregistrrii curente din tabel.
- RECCOUNT() - furnizeaz numrul de nregistrri din tabel.
- FOUND() - ntoarce TRUE sau FALSE dup cum ultima comanda LOCATE lansat a
gsit o nregistrare ndeplinind condiia cerut.

- DATE() ntoarce data curent.


- {LEFT | RIGHT}(<sir_caractere>, n) ntoarce cele mai din stnga, respectiv din
dreapta, n caractere din argumentul sir_caractere.
- SUM(), AVG(), COUNT(), MIN(), MAX() ntorc suma, media, numrul, minimul,
respectiv maximul valorilor unei coloane din tabel. Calculul i afiarea acestor valori se
pot realiza printr-o comand de tipul:
calculate sum(sSalariu)
Obs: Dac se d comanda SET TALK OFF, calculate nu afieaz nimic. n acest caz,
se poate proceda astfel:
calculate sum(sSalariu) to x
?x
Obs: Exist i comenzile COUNT, AVERAGE, SUM.
Exemplu: count for <conditie> to x
?x
Exerciii:
1. Utiliznd comadaSET DEFAULT TO, s se seteze directorul de lucru.
SET DEFAULT TO C:\examen\nume_dir
Obs: Fr parametri, comanda SET DEFAULT TO determin revenirea la directorul de
lucru implicit al Visual FoxPro.
Comanda SET PATH TO specific directorul n care sunt cutate fiierele dac
acestea nu se gsesc n directorul implicit:
SET PATH TO C:\examen\nume_dir_alternativ
2. S se creeze o baz de date, numit Personal. Aceasta va conine tabelele ce vor fi
create n continuare.
3. S se creeze tabelele:
SALARIAT (sCod N(6), sNume C(20), sPrenume C(20), sDataAng D, sJob C(10),
sSalariu N(10), sPcComision N(2), sManager N(6), sInfo M)
Obs:
N = numeric; C = caracter; D = data calendaristic; M= memo.
SJob = titlul jobului angajatului;
sPcComision = comisionul, reprezentat n procente;
sManager = codul efului direct al angajatului;
sDep = codul departamentului n care lucreaz angajatul;
sInfo = cmp de tip memo, care conine informaii speciale despre angajat (adres,
email etc).
DEPARTAMENT(dCod N(4), dNume C(30), dManager N(6), dLocatie C(20))
Obs:
dManager = codul directorului departamentului;
dNume = numele departamentului;
dLocatie = orasul in care este ocalizat departamentul respectiv.
GRILA(gCod N(2), gMin N(10), gMax N(10))
Obs:
gCod = codul grilei de salarizare;
gMin, gMax = salariul minim, respectiv maxim corespunzator grilei de salarizare.

4. S se modifice structura tabelelor create anterior, astfel:


introducei cmpul sDep (de tipul N(4)) n tabelul SALARIAT (reprezentnd codul
departamentului n care lucreaz un angajat);
introducei cmpul dCamere (de tipul N(2)) n tabelul DEPARTAMENT;
introducei n tabelul DEPARTAMENT cmpul dDesen de tip general ce conine sigla
specific departamentului respectiv;
eliminai cmpul dCamere din structura tabelului DEPARTAMENT;
modificati tipul de date al cmpului sSalariu n N(6) si al cmpului sJob n C(12).
5. S se afieze structura tabelului SALARIAT.
6. Introducei nregistrri coerente n tabelele create anterior, utiliznd valorile din
tabelele de mai jos pentru cmpurile indicate. Dai valori i pentru celelalte cmpuri.
Obs: Dac se dorete completarea cmpului sDataAng n forma zi/luna/an, se va da
comanda SET DATE TO DMY.
Pentru afiarea tuturor celor 4 cifre ale anului din dat, se d comanda SET
CENTURY ON.
SALARIAT
sCod

Sjob

SSal

SPcComision

sManage
r

sDep

7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

Referent
Vnztor
Vnztor
Manager
Vnztor
Manager
Manager
Analist
Presedinte
Vnztor
Referent
Referent
Analist
Referent

800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300

Null
10
25
Null
75
Null
Null
Null
Null
0
Null
Null
Null
Null

7902
7698
7698
7839
7698
7839
7839
7566
Null
7698
7788
7698
7566
7782

20
30
30
20
30
30
10
20
10
30
20
30
20
10

DEPARTAMENT
Dcod

Dnume

Dmanager

dLocatie

10
20
30
40

Contabilitate
Cercetare
Vanzari
Operatiuni

7934
7876
7654
Null

Bucuresti
Craiova
Constanta
Ploiesti

GRILA
Gcod

Gmin

gMax

1
2
3
4
5

700
1201
1401
2001
3001

1200
1400
2000
3000
9999

7. S se afieze salariaii din departamentul 30 (folosind BROWSE, LIST sau


DISPLAY, cu clauza FOR).
8. S se afieze locatia unui departament, dndu-se numele acestuia ({BROWSE |
LIST | DISPLAY} FIELDS ).
9. S se examineze efectul comezilor CHANGE i EDIT. Determinati afisarea
tabelara utiliznd optiunea Browse din meniul View.
10. - S se poziioneze cursorul pe a doua nregistrare din tabelul SALARIAT, apoi pe
prima i pe ultima nregistrare.
- S se poziioneze cursorul pe a doua nregistrare. S se efectueze un salt peste 3
nregistrri.
La fiecare pas, afiai nregistrarea curent (DISPLAY).
11. S se nlocuiasc managerul departamentului cercetare.
12. Marcai pentru tergere toi salariaii care lucreaz n departamentul 20. Marcai
pentru tergere toi salariaii din departamentul 30 care au mai putin de 10 ani vechime
i au fost angajai n ianuarie. Anulai marcajul.
13. Cte nregistrri are tabelul SALARIAT? Care este nregistrarea curent?
14. S se afle dac exist un salariat cu un nume dat. S se afieze nregistrarea
respectiv, precum i numrul acesteia (LOCATE FOR <conditie>, FOUND(),
RECNO())).
15. S se calculeze:
media salariilor celor care au cel mult 10 ani vechime;
numrul salariailor care au cel mult 5 ani vechime i care au salariul mai mic
dect 2000;
cel mai mare/mic salariu; salariatul cel mai recent angajat.
16. Numele zilei din sptmn corespunztoare datei curente.(CDOW)
Numele lunii corespunztoare datei 3/7/2001.(CMONTH)
17. Analizai funciile: DAY, DMY, DOW, MDY, MONTH, YEAR (toate aceste funcii
necesit argument de tip dat calendaristic), TIME.
18. S se afieze data de peste trei luni. (GOMONTH)
19. Analizai funciile: CTOD, DTOC, LEFT, RIGHT, REPLICATE, STR, VAL.
20. Analizai funciile: PI, RAND, SIGN, SQRT, ASC, CHR.
Exemple:
RIGHT(DTOC(DATE()),6);
DAY(CTOD(05/05/91));
CDOW(DATE());
CDOW(CTOD(01/02/99));
CHR(80);
ASC(a);
VAL(0.67),
STR(145);
REPLICATE(abc,5).
21. S se afieze data angajarii salariailor din departamentul 30.
22. Listai salariaii pentru care se precizeaz adresa de email n cmpul sInfo (se va
presupune ca apariia acesteia se identific prin prezena caracterului @ ).
Obs: Operatorul de incluziune pentru irurile de caractere este $.
23. Lista departamentelor n care lucreaz salariai cu salariul mai mare de 2500.
24. Ce structura are tabelul SALARIAT? Modificai structura tabelului SALARIAT i
introducei cmpul sTelefon, de tipul C(20).
25. Concatenai primele 2 poziii din sPrenume cu primele 3 poziii din sNume, pentru
nregistrarea curenta a tabelului SALARIAT.
Obs: Operatorul de concatenare este +.
26. Pe ce poziie n cmpul memo al nregistrrii 3 din tabelul SALARIAT se afl
cuvntul cazier? (AT(cazier, sinfo))
27. S se creeze un program (MODIFY COMMAND) pentru:
***********************
* Astazi este ...*
* Lucrez pe versiunea * &&VERSION()
* Este ora: ..*
***********************

Obs: Repetarea unui caracter de n ori se face utiliznd funcia


REPLICATE(<caracter>, n). Comentariile n Foxpro se fac utiliznd * sau &&.
28. S se mreasc cu 10% salariul celor care vechimea mai mare de 3 ani.
29. Numrul salariailor care au salariul < media salariilor pe firm.
30. Program pentru :
*****************************
* La data firma X *
* dispune de salariati care au*
* media salariilor de .*
*****************************
31. Analizai funciile LTRIM, RTRIM, TRIM, LOWER, UPPER, ISLOWER, ISUPPER,
ISALPHA.
Exemple: LTRIM( test); RTRIM (test
); TRIM(
test
) +x; UPPER(Test);
ISUPPER(Test);
LOWER(TEST);
ISLOWER(tEST);
ISALPHA(12);
ISALPHA(alfa).

S-ar putea să vă placă și