ALTE DOCUMENTE
|
|||||||
Crearea si modificarea structurii unui tabel; operatii (inserare, adaugare, stergere); comenzi si functii
Un sistem de gestiune a bazelor de date (SGBD - Data Base Management System) este un produs software care asigura interactiunea cu o baza de date, permitând definirea, consultarea si actualiz 19219t1912t area datelor din baza de date.
Baza de date este un ansamblu structurat de date coerente, fara redondanta inutila, astfel încât acestea pot fi prelucrate eficient de mai multi utilizatori într-un mod concurent.
Crearea structurii unui tabel se realizeaza :
- 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 foloseste comanda:
USE <nume_fisier>
Pentru închiderea unui tabel deschis în zona de lucru curenta se foloseste comanda USE (fara parametri).
Obs: Comanda CLOSE ALL determina închiderea bazei de date si a tuturor tabelelor si indecsilor deschisi.
Modificarea structurii unui tabel existent se realizeaza:
- prin meniu (View Table Designer);
- prin comanda MODI[FY] STRU[CTURE];
- prin click dreapta pe tabel în Database Designer si selectarea optiunii 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 realizeaza prin comenzile LIST STRUCTURE sau DISPLAY STRUCTURE.
Introducerea de înregistrari într-un tabel se poate face într-unul din urmatoarele moduri:
- prin comanda APPEND;
- prin folosirea comenzii BROWSE (cu aceasta comanda se poate realiza orice operatie de adaugare, modificare sau stergere într-un tabel), urmata de selectarea optiunii Add New Record din meniul Table (echivalenta cu combinatia de taste Ctrl + Y).
Pentru a completa un câmp de tip memo, se foloseste CTRL+Page Down pentru deschidere si CTRL + pentru închidere.
Pentru a completa un câmp de tip general, se procedeaza astfel:
pozitionare pe câmp; de 2 ori click;
Edit Insert Object
se alege Object Type si OK (de exemplu paintbrush sau file);
se creaza sau se alege desenul;
File Save As (se da nume - alfa.bmp si OK); CLOSE;
stergerea de înregistrari din tabel presupune 2 etape:
- stergerea logica a înregistrarilor (înregistrarile sunt doar marcate pentru stergere), realizata prin comanda DELETE;
- stergerea fizica a înregistrarilor marcate, realizata prin comanda PACK.
Daca se doreste anularea marcajului efectuat prin DELETE, se utilizeaza 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 pastreaza.
Câteva comenzi utile în lucrul cu bazele de date:
- DISPLAY | LIST STRUCTURE - afiseaza structura tabelului deschis în zona de lucru curenta.
- BROWSE, LIST, DISPLAY ALL- afiseaza continutul tabelului deschis în zona de lucru curenta.
- DISPLAY - afiseaza înregistrarea curenta;
- CHANGE, EDIT - afiseaza câmpurile tabelului, în scopul editarii continutului acestora.
- GO - determina pozitionarea pe a n-a, prima, respectiv ultima înregistrare din tabel.
- SKIP n - determina saltul peste n înregistrari; n poate fi numar negativ.
- REPLACE <câmp> WITH <valoare> FOR <conditie> - permite actualizarea unei valori a unui câmp din tabel.
- LOCATE FOR <conditie> - cauta înregistrarea care îndeplineste conditia specificata.
Functiile sunt apelate precedându-le cu simbolul "?", pentru afisare.
Exemplu: ? reccount()).
- RECNO() - furnizeaza numarul înregistrarii curente din tabel.
- RECCOUNT() - furnizeaza numarul de înregistrari din tabel.
- FOUND() - întoarce TRUE sau FALSE dupa cum ultima comanda LOCATE lansata a gasit o înregistrare îndeplinind conditia ceruta.
- DATE() - întoarce data curenta.
<sir_caractere>, n) - întoarce cele mai din stânga, respectiv din dreapta, n caractere din argumentul sir_caractere.
- SUM(), AVG(), COUNT(), MIN(), MAX() - întorc suma, media, numarul, minimul, respectiv maximul valorilor unei coloane din tabel. Calculul si afisarea acestor valori se pot realiza printr-o comanda de tipul:
Obs: Daca se da comanda SET TALK OFF, calculate nu afiseaza nimic. În acest caz, se poate proceda astfel:
?x
Obs: Exista si comenzile COUNT, AVERAGE, SUM.
Exemplu: count for <conditie> to x
?x
Exercitii:
Utilizând comadaSET DEFAULT TO, sa se seteze directorul de lucru.
Obs: Fara parametri, comanda SET DEFAULT TO determina revenirea la directorul de lucru implicit al Visual FoxPro.
Sa se creeze o baza de date, numita Personal. Aceasta va contine tabelele ce vor fi create în continuare.
Sa se creeze tabelele:
SALARIAT (sCod N(6), sNume C(20), sPrenume C(20), sDataAng D, sJob C(10), sSalariu N(10), sPcComision N(2), sGrila N(2), sManager N(6), sInfo M)
Obs:
N = numeric; C = caracter; D = data calendaristica; M= memo.
SJob = titlul jobului angajatului;
sPcComision = comisionul, reprezentat în procente;
sGrila = codul grilei de salarizare corespunzatoare angajatului respectiv.
sManager = codul sefului direct al angajatului;
sDep = codul departamentului în care lucreaza angajatul;
sInfo = câmp de tip memo, care contine informatii speciale despre angajat (adresa, 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.
Sa se modifice structura tabelelor create anterior, astfel:
introduceti câmpul sDep (de tipul N(4)) în tabelul SALARIAT (reprezentând codul departamentului în care lucreaza un angajat);
introduceti câmpul dCamere (de tipul N(2)) în tabelul DEPARTAMENT;
introduceti în tabelul DEPARTAMENT câmpul dDesen de tip general ce contine sigla specifica departamentului respectiv;
eliminati câmpul dCamere din structura tabelului DEPARTAMENT;
modificati tipul de date al câmpului sSalariu în N(6) si al câmpului sJob în C(12).
Sa se afiseze structura tabelului SALARIAT.
Introduceti înregistrari coerente în tabelele create anterior, utilizând valorile din tabelele de mai jos pentru câmpurile indicate.
Obs: Daca se doreste completarea câmpului sDataAng în forma zi/luna/an, se va da comanda SET DATE TO DMY.
Pentru afisarea tuturor celor 4 cifre ale anului din data, se da comanda SET CENTURY ON.
sCod |
Sjob |
SSal |
SPcComision |
sManager |
sDep |
Referent |
Null | ||||
Vânzator | |||||
Vânzator | |||||
Manager |
Null | ||||
Vânzator | |||||
Manager |
Null | ||||
Manager |
Null | ||||
Analist |
Null | ||||
Presedinte |
Null |
Null | |||
Vânzator | |||||
Referent |
Null | ||||
Referent |
Null | ||||
Analist |
Null | ||||
Referent |
Null |
Dcod |
Dnume |
Dmanager |
dLocatie |
Contabilitate |
Bucuresti |
||
Cercetare |
|
||
Vanzari |
|
||
Operatiuni |
Null |
|
Gcod |
Gmin |
gMax |
Sa se afiseze salariatii din departamentul 30 (folosind BROWSE, LIST sau DISPLAY, cu clauza FOR).
Sa se afiseze locatia unui departament, dându-se numele acestuia ( FIELDS .).
Sa se examineze efectul comezilor CHANGE si EDIT. Determinati afisarea tabelara utilizând optiunea Browse din meniul View.
- Sa se pozitioneze cursorul pe a doua înregistrare din tabelul SALARIAT, apoi pe prima si pe ultima înregistrare.
- Sa se pozitioneze cursorul pe a doua înregistrare. Sa se efectueze un salt peste 3 înregistrari.
La fiecare pas, afisati înregistrarea curenta (DISPLAY).
Sa se înlocuiasca managerul departamentului "cercetare".
Marcati pentru stergere toti salariatii care lucreaza în departamentul 20. Marcati pentru stergere toti salariatii din departamentul 30 care au mai putin de 10 ani vechime si au fost angajati în ianuarie. Anulati marcajul.
Câte înregistrari are tabelul SALARIAT? Care este înregistrarea curenta?
Sa se afle daca exista un salariat cu un nume dat. Sa se afiseze înregistrarea respectiva, precum si numarul acesteia (LOCATE FOR <conditie>, FOUND(), RECNO())
Sa se calculeze:
media salariilor celor care au cel mult 10 ani vechime;
numarul salariatilor care au cel mult 5 ani vechime si care au salariul mai mic decât 2000;
cel mai mare/mic salariu; salariatul cel mai recent angajat.
Numele zilei din saptamâna corespunzatoare datei curente.(CDOW)
Numele lunii corespunzatoare datei 3/7/2001 CMONTH)
Analizati functiile: DAY, DMY, DOW, MDY, MONTH, YEAR (toate aceste functii necesita argument de tip data calendaristica), TIME.
Sa se afiseze data de peste trei luni. (GOMONTH)
Analizati functiile: CTOD, DTOC, LEFT, RIGHT, REPLICATE, STR, VAL.
Analizati functiile: PI,
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).
Sa se afiseze data angajarii salariatilor din departamentul 30.
Listati salariatii pentru care se precizeaza adresa de email în câmpul sInfo (se va presupune ca aparitia acesteia se identifica prin prezenta caracterului "@" ).
Obs Operatorul de incluziune pentru sirurile de caractere este "$".
Lista departamentelor în care lucreaza salariati cu salariul mai mare de 2500.
Ce structura are tabelul SALARIAT? Modificati structura tabelului SALARIAT si introduceti câmpul sTelefon, de tipul C(20).
Concatenati primele 2 pozitii din sPrenume cu primele 3 pozitii din sNume, pentru înregistrarea curenta a tabelului SALARIAT.
Obs: Operatorul de concatenare este "+".
Pe ce pozitie în câmpul memo al înregistrarii 3 din tabelul SALARIAT se afla cuvântul "cazier"? (AT("cazier", sinfo))
Sa se creeze un program (MODIFY COMMAND) pentru:
* Astazi este ........*
* Lucrez pe versiunea ..* &&VERSION()
* Este ora: ........*
Obs: Repetarea unui caracter de n ori se face utilizând functia REPLICATE(<caracter>, n). Comentariile în Foxpro se fac utilizând "*" sau "&&".
Sa se mareasca cu 10% salariul celor care vechimea mai mare de 3 ani.
Numarul salariatilor care au salariul < media salariilor pe firma.
Program pentru :
* La data ...firma X *
* dispune de ..salariati care au*
* media salariilor de ......*
Analizati functiile 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").
|