ALTE DOCUMENTE
|
||||
Visual Foxpro - sgbd relational
Ce este Visual Foxpro? Este un SGBD modern , din generatia a 4 de limbaje, folosit pentru manipularea bazelor de date relationale sub sistemele de operare din familia Microsoft Windows (95/98/2000/NT ). Este o versiune pentru Windows, ce continua variantele mai vechi de Foxpro, permitānd manipularea bazelor de date , inclusiv baze de date client -server. El face parte dintr-un pachet de instrumente de programare numit Visual Studio ( din pachet mai fac parte Visual C, Visual Basic). Permite programarea bazata pe obiecte si ofera instrumente visuale ( ce pot fi "trase" pe aplicatie) pentru construierea suprafetei (interfatei ) grafice de accesare a bazelor de date.
I. LUCRUL CU DATELE
1. Definirea si crearea bazelor de date relationale. Definirea tabelelor .
Ce este o baza de date relationala ? O baza de date relationala relationala reprezinta o structura complexa folosita la memorarea si gestionarea datelor ce descriu un anumit tip de obiecte. Concret, īn Visual Foxpro o baza de date este un container īn care sunt puse la un loc mai multe tabele cu date īntre care pot sa existe legaturi . Baza de date are asociat un fisier cu extensia DBC īn care sunt memorate date referitoare la baza de date : tabelele componente, relatiile dintre tabele , dictionarul de date asociate. Tabelele sunt structuri īn care se pot memora date descriind un anumit tip de elemente. Fiecare caracteristica a elementelor alcatuieste un cāmp, iar elementele propriu-zise sunt memorate īn inregistrari. Din punct de 252d33c vedere fizic, tabele sunt stocate īn fisiere cu extensia dbf :
Exemplu de structura tabelara īn care sunt stocate datele:
TABELA.DBF |
|||||
Cāmp1 |
Cāmp2 |
Cāmp m |
|||
Inregistrarea 1 | |||||
Inregistrarea 2 | |||||
Inregistrarea n | |||||
Cīmpurile tabelului
Structura tabelului
Exemplu un tabel datep.dbf dintr-o baza de date cursanti.dbc ,
Nume |
Prenume |
DataN |
Studii |
Venit |
||
Popescu |
Ion |
SUPERIOARE | ||||
Georgescu |
Mihai |
SUPERIOARE | ||||
| ||||||
| ||||||
Avrom |
Mihai |
MEDII |
Acest tabel formeaza un fisier de date, fisier ce se salveaza sub numele de cursanti.dbf (acesta va fi fisierul fizic care va contine efectiv datele ), tabel ce se depune īn containerul baza de date.
Dupa cum se observa definirea unei tabele implica specificarea numelui de tabel,a cāmpurilor componente, īmpreuna cu caracteristicile acestora si eventual a indexilor.
Fiecare cāmp al unei tabele este caracterizat prin mai multe caracteristici ce se precizeaza la definirea tabelului :
numele sau folosit la identificare ( de fapt numele coloanei ). Numele este format din caractere ( de obicei litere , cifre si liniuta de subliniere) . Daca tabelul este inclus īn baza de date , numele cāmpului poate fi de lungime maxima 128 de caractere. Daca tabelul este liber, nefiind legat de o anumita baza de date , numele este format din maxim 10 caractere ( prima litera), tabelul fiind de fapt un fel de baza de date din versiunile mai vechi de Foxpro
tipul cāmpului - precizeaza tipul datelor , valorilor ce vor fi stocate īn cāmpul (coloana) respectiva. Tipurile de date puse la dispozitie de Visual Foxpro sunt urmatoarele :
Character- folosit pentru stocarea datelor de tip sir de caractere (cum ar fi nume de persoane, nume de obiecte, adrese, denumiri, etc) . Cāmpurile de tip caracter pot pastra pāna la 254 de caractere ( de obicei litere, cifre , semne de pe tastatura, semne tiparibile).
Curency - folosit pentru a stoca valori īn dolari (i se mai spune tipul monetar ) . Valoarea maxima permisa este de $922 000 de miliarde si permite patru zecimale.( valorile sunt stocate pe 8 octeti īn memorie).
Numeric si Float - folosite pentru pastrarea valorilor numerice , permitānd panp la 20 de cifre semnificative, cu maxim 19 cifre zecimale. Valorile inime si maxim īntre care se poate lucra sunt 0.9999999999 x10-19 si 0.9999999999 x1020 .
Date si DateTime - sunt folosite pentru pastrarea datelor calendaristice īn memorie sub forma YYYYMMDD, iar DateTime pastreaza si data calendaristica si timpul īn formatul HHMMSS . Datele variaza īntre limitele 01-01-100 si 12-31-9999, iar timpul de la 12:00:00 AM la 11:59:59 PM. Trebuie precizat faptul ca īn tabel data calendaristica este afisata implicit īn formatul american MMDDYY. Pentru a schimab acest format se poate tasta ( īn fereastra de comanda) comanda SET DATE TO DMY, iar pentru a avea anul cu 4 cifre trebuie tastata comanda SET CENTURY ON .
Logical - se foloseste pentru pastrarea a doua valori : adevarat ( notata cu .T. ) si fals ( notata cu .F.) . Īn general , este folosit pentru marimi cu doua stari, cum ar fi : taxabil/netaxabil, bursier/nebursier, scutit/nescutit, etc.
Memo - se foloseste pentru stocarea sirurilor mari de caractere , care depasesc 254. De exemplu, un cāmp Observatie sau un cāmp Cv (curriculum vitae) pot fi declarate de tip memo. Trebuie sa atentionam faptul ca daca se folosesc cāmpuri memo , sistemul va ma atasa un fisier la baza de date , fisier ce are extensia FPT si stocheaza textul cel lung al cmpului ( cāmpurilor ) memo . De aceea , daca se doreste copierea unei baze de date , trebuiesc copiate mai multe fisiere : fisierul DBC (containerul b.d.) , DBF-urile ( tabelele cu date ), FPT-urile ( fisierele cu textul cāmpurilor memo) .
General - folosit pentru stocarea de referinte la anumite obiecte cum ar fi grafice. De asemenea , se foloseste pentru adaugarea de obiecte OLE (imagini, sunete, documente Windows). si el este stocat īn fisierul cu extensia FPT asociat.
lungimea cāmpului - adica numarul de pozitii necesare pentru pastrarea datelor acelui cāmp ( numarul maxim estimat a se ocupa ) .
numarul de zecimale - se refera la cāmpurile numerice si precizeaza cāte pozitii pentru zecimale se vor aloca.
fanionul (indicatorul) de indexare - acesta stabileste daca se foloseste un index pe baza cāmpului respectiv .
Observatie : Indecsii reprezinta o tehnologie cu ajutorul careia datele din tabel sunt vazute īntr-o anumita ordine , dupa un anume criteriu . Īi vom discuta la subiectul de ordonare a datelor .
fanionul (indicatorul) de valoare nula (NULL) - arata daca īn cāmpul respectiv poate fi memorata sau nu o valoare nula. Acest lucru permite diferentierea unui cāmp lasat necompletat de utilizator si unul completat cu valoarea 0.
Pe lānga tabele cu date si ( vom vedea mai tārziu) relatiile dintre aceste tabele , o baza de date relationala īn Visual Foxpro mai poate contine si alte elemente . De asemenea, fata de versiunile mai vechi, īn Visual Foxpro avem cāteva caracteristici noi :
nume lungi ale tabelelor si a cāmpurilor acestora , pentru a obtine o lizibilitate mai buna.
diferente secvente de cod ( proceduri si functii) care sa fie executate automat la aparitia anumitor evenimente ( cum ar fi completarea de cītre utlizator a unui cāmp de date , adaugarea de īnregistrari, modificarea unei anumite valori din cāmp.
restrictii de integritate sau conditii ce trebuie respectate la modificarea bazei de date.
vederi ale bazei de date
conexiuni cu alte surse de date , cu alte tipuri de baze de date.
Trebuie precizat faptul ca exista de fapt doua tipuri de tabele : cele stocate si legate īn baza de date ( ele permit caracteristicile de mai sus) si cele libere , nelegate de o baza de date ( cu restrictiile anterioare, nume scurte , etc.) folosite pentru aplicatii mai vechi din vechile versiuni .
Crearea bazei de date si a tabelelor componente :
Practic, pentru crearea bazei de date si (eventual) a tabelelor , utilizatorul are la dispozitie cel putine doua metode : folosind comenzile din meniurile mediului Visual Foxpro, fie tastānd comenzi dedicate īn fereastra de comanda .
Prima metoda consta īn alegerea optiunii New din meniul File , dupa care , īn fereastra deschisa pe ecran, se alege butonul Database (īn felul acesta se indica sistemului ca se doreste construirea unui container baza de date ). Īn final , fie se actioneaza butonul New file , fie se alege asistentul Wizard pentru a construi baza de date .
Se alege o noua
baza de date Se alege un nou fisier
pentru baza de date.
Daca se alege varianta New File, sistemul va cere directorul unde se stocheaza baza de date si numele bazei de date. Dupa specificarea numelui b.d. , pe ecran se va deschide fereastra Constructorului de baze de date, ca īn figura de mai jos. .
Zona īn care se vor
afisa tabelele si relatiile
Dupa crearea containerului, se poate trece la crearea tabelelor bazei de date sau adaugarea īn container a unor tabele cu date existente . Pentru a crea un tabel, se poate apasa butonul dreapta pentru a obtine meniul rapid cu comenzi si a alege comanda New Table. De aseamenea, se poate apasa primul buton ( New Table) din fereastra de comenzi Database Designer sau se poate realege din meniul File , comanda New cu optiunea Table. Īndiferent de metoda aleasa , mediul va cere sa precizati modul de lucru : fisier nou sau cu ajutorul asistentului . Apoi, se alege numele directorului īn care se stocheaza tabelul si numelele tabelului ce se creaza. Īn final, va aparea Constructorul de table prin intermediul caruia se va preciza structura logica a tabelului :
Cāmpurile
Tipul de date
ce se poate alege
pentru fiecare cāmp
Īn final, se poate confirma salvarea structurii cu butonul OK si eventual introduce date īn tabel, revenind apoi īn constructorul bazei de date :
Daca se apasa butonul dreapta īn zona tabelului (vezi figura anterioara), va aparea un alt meniu rapid din care se poate alege Modify - pentru a modifica structura bazei de date sau Browse -pentru a afisa si eventual a modifica datele din tabel. Cu ajutorul comenzii Modify se poate reveni īn structura tabelului, se pot adauga noi cāmpuri, se pot sterge cāmpuri sau se pot modifica caracteristicile celor vechi.
Tabelele create anterior sunt tabele legate de baza de date . Aceste tabele permit nume lungi pentru denumirea tabelului si pentru denumirile cāmpurilor (maxim 128 de caractere) . De asemenea , pentru cāmpurile unei tabele legate se pot preciza formate implicite de afisare a datelor, machete de introducere a datelor īn cāmp, reguli de validare la nivel de cāmp, etc. Exista si alte elemente noi cum ar fi posibilitatea de a incorpora īn baza de date elemente speciale cum ar fi conexiunile , vederile , etc.
Pe lāna aceste tabele legate, se pot crea tabele libere , care sa nu apartina unei baze de date . Aceste tabele libere nu ofera toate facilitatile de mai sus , existente la tabelel legate (nume lungi, etc). Ele se pot crea separat īn scopul folosirii lor īn programe mai vechi din vechile versiuni de Foxpro, fie pentru adaugarea ulterioara īn baza de date . Crearea tabelelor libere este similara crearii tabelelor legate . Pentru aceasta , īn ipoteza ca nu exista nici o baza de date deschisa, se alege comanda File, optiunea New si tipul Table, dupa care se parcurge acelasi dialog de creare a tabelului (prezentat anterior ).
Un tabel liber poate fi adaugat ulterior unei baze de date deschise , cu ajutorul comenzii Add Table ca īn figura de mai jos.
Toate operatiile anterioare legate de crearea bazei de date si a tabelelor legate sau libere se mai pot realiza si cu ajutorul comenzilor echivalente ce se tasteaza īn fereastra de comanda:
pentru crearea containerului baza de date folosim CREATE DATABASES nume, unde nume va reprezenta numele noii baze de date sau CREATE DATABASES , caz īn care aparea o fereastra de dialog pentru introducerea numelui .
pentru deschiderea constructorului si afisarea acestuia se foloseste MODIFY DATABASE .
crearea tabelelor se face cu comanda CREATE TABLE nume sau CREATE TABLE ( se poate omite numele TABLE ).
adaugarea de date īn tabelul curent se face cu comanda APPEND .
Observatii:
Orice comanda ce se foloseste īn fereastra de comanda poate fi scrisa prescurtat folosind doar primele patru litere din nume . De exemplu, puteti tasta doar CREA DATA.
De asemenea se poate lucra combinat, fie tastānd comenzi īn fereastra de comanda fie folosind comenzile din meniuri sau din ferestrele Constructorilor de tabele sau baze de date.
Daca un tabel poate fi adaugat īntr-o baza de date, de asemenea el poate fi sters din baza de date. Lucrul acesta se realizeaza fie cu ajutorul comenzii REMOVE din meniul DATABASE, fie cu ajutorul butonului Remove Table din bara de instrumente Database , fie cu ajutorul comenzii Delete din meniul rapid ce se obtine prin apasarea butonului dreapta al mouselui pe simbolul tabeleului .
Indexarea tabelelor .
Nimeni nu se asteapta ca utlizatorii sa introduca datele gata sortate, gata aranjate. Din acest motiv, de multe ori avem nevoie sa vedem datele īntr-o anumita ordine. Lucrul acesta este posibil de realizat īn mai multe moduri īn Visual Foxpro. Unul din aceste moduri poate fi folosit chiar din momentul crearii tabelei prin intermdiul unei tehnologii numita indexare. Indecsii servesc pentru doua scopuri principale. Īntāi , folosim indecsii pentru a forma realtii īntre tabele . Al doilea scop este de a ajuta la regasirea datelor si de a īmbunatati performantele interogorilor si ale rapoartelor.
Īn momentul crearii tabelului, utilizatorul poate sa-si defineasca si indecsi. De fapt, indexarea reprezinta o tehnica de ordonarea logica a datelor dintr-o tabela , dupa diferite criterii, operatie care īnsa nu afecteaza ordinea fizica a datelor din tabela, ci doar modul īn care sunt vazute de utilizator. Ordonarea tabelei presupune stabilirea unui criteriu dupa care sa fie parcurse īnregistrarile. Criteriul este de obicei un cāmp sau o combinatie de cāmpuri. De exemplu, pentru tabelul cursanti ne intereseaza sa avem , sa vedem cursanti fie īn ordinea alfabetica a numelui, fie īn ordinea anului de studiu. Cāmpul dupa care se face ordonarea se mai cheama cheie de ordonare. De fapt indexul, este un fisier separat atasat tabelului , ce īi spune sistemului cum sa parcurga baza de date pentru ca utlizatorul sa o vada ordonata .
De exemplu :
Carti.cdx Carti.dbf
Titlu |
Pozitie |
Nr. īnreg |
Titlu |
Autor |
Nr. pag. |
|
Amintiri din copil. |
Ion |
Liviu. R. | ||||
Ion |
Amintiri din copilarie |
Ion Creanga |
|
|||
Insula misterioasa |
Morometii |
Marin Preda | ||||
Morometii |
Insula misterioasa |
Jules Verne |
Daca se doreste afisarea datelor, sistemul se uita īn fisierul index si de acolo afiseaza mai īntāi inregistrarea de pe pozitia 2 (ce o gaseste īn tabelul carti.dbf), apoi īnregistrarea 1,4 si īn final 3.
Īn Visual Foxpro, indecsii sunt memorati īntr-un fisier cu extensia CDX.. Indecsii pot fi de doua feluri :
normali (Regular - acestia construiesc pentru fiecare īnregistrare a tabelei cāte o īnregistrare īn fisierul index respectiv, indiferent de duplicarea valorii cāmpului de indexare. Prin urmare, īntr-o tabela indexata care contine doua persoane cu acelati nume, ambele īnregistrari vor fi "vazute" de utilizator.
unici (Unique) , care permit o unica valoare a cheii de indexare . Īn varianta aceasta , daca exista mai multe persoane cu aceast nume, doar prima īnregistrare va fi accesibila.
Totusi, pentru a putea face legaturi īntre tabelel bazei de date exista īnca doua tipuri de indecsii :
indexul candidat (Candidate) - reprezinta un index asemanator cu cel unic , dar interzice īncarcarea de īnregistrari care dubleaza valoarea cheii de indexare. Īn cazul indecsilor unici se permitea īncarcarea acestora, dar īnregistrarile respective erau ascunse utilizatorului.
indexul de tip cheie primara (Primary) - Exista situatii īn care īn tabela s-au creat mai multe criterii unice de ordonare . Dintre acestea , se poate stabili unul care sa fie folosit drept cheie primara a tabelei, pentru a putea stabili relatii īntre tabela respectiva si alte tabele ale unei baze de date .
Observatie: De obicei proiectantul bazei de date si a tabelelor , īsi stabileste un cāmp ca si cheie primara unica . De exemplu, cod matricol , cod numeric personal , cod produs, cod carte , marca persoana , etc. Crearea indecsilor se poate face la creare tabelelor, folosind pagina Fields , asa cum se vede din figura de mai jos :
Ordinea Cāmpul Tipul de index Cheia de indexare Filtru
crescatoare/descrescatoare
Dupa cum se oberva īn figura anterioara , cu ajutorul paginii Index se poate defini unul sau mai multi indecsi. Pentru aceasta trebuie precizate cāteva informatii :
cum se ordoneaza : crescator sau descrescator;
numele simbolic al indexului;
tipul idexului ( unul din cele patru tipuri prezentate anterior);
expresia de indexare folosita ca si criteriu de ordonare, expresie formata dintr-un singur cāmp al tabelei sau dintr-o combinatie de cāmpuri legate prin operatori. Expresia se construieste cu ajutorul Constructorului de expresii.
un filtru care sa restrānga accesul la īnregistrarile tabelei , pe baza unor conditii pe care le precizeaza utlizatorul . Conditia de filtrare se poate tasta manual sau construi cu ajutorul Constructorului de expresii aflat īn dreapta coloanei Filter.
Indecsii , pentru a putea avea efect , trebuie deschisi. Vom vedea la subiectul de ordonarea datelor cum se folosesc , cum se deschid, etc.
Formatul de afisare si de citire. Validarea datelor.
Īn momentul crearii tabelului, utlizatorul are posibilitatea de a introduce formate de afisare si formate pentru citirea datelor . De asemenea, un lucru foarte util īn practica, utilizatorul poate impune conditii de validare a datelor pentru a preveni introducerea de date inconsistente. Optiunile respective se pot vedea īn figura de mai jos:
Formatul de afisare si masca de
intrare al unui cāmp se refera
la modul cum vor fi afisate datele īntr-o fereastra de editare a
tabelei (de exmplu cu comanda Browse )
sau īntr-o lista afisata cu comanda List sau Display sau īntr-un raport si la modul cum vor fi
citite datele (inclusiv īntr-un formular). Formatul de afisare si
masca de citire sunt de fapt un sir de caractere, un fel de
sablon, alcatuit din mai multe coduri , īn functie de
care se decide afisarea si citirea datelor. De exemplu, se poate
folosi caracterul 9 pentru a preciza fiecare pozitie a unei cifre dintr-un
numar ( de exemplu 99.99 - precizeaza afisarea pe 5 pozitii
cu 2 zecimale . De asemenea se poate folosi caracterul A pentru a preciza
caractere de tip litera sau se poate folosi caracterul ! pentru a preciza
majuscule ( de exemplu !Axxx precizeaza ca avem numai majuscule,
prima obligatoriu litera ) . Mai multe amānunte legate de sabloanele
de afisare si citire la realizarea rapoartelor de afisare si a formularelor de citire.
Conditiile de validare a datelor sunt expresii pe care le putem introduce īn ideea de a face verificari ale datelor introduse. Acest lucru este util pentru a preveni introducerea datelor inconsistente . Pentru aceasta se foloseste caseta Rule si , eventual, Constructorul de expresii aflat īn dreapta casetei Rule (vezi figura anterioara) . De aici se poate construi o expresie logica ce foloseste operatori relationali (<, >, =, <>, <=, >=), operatori logici (AND, OR, NOT sau !).
Regulile acestea sunt verificate īn momentul īn care se īncearca mutarea cāmpului sau modificarea valorilor acestuia cu ajutorul unei comenzi .
Valorile implicite pentru cāmpuri se refera la posibilitatea de a preciza de la īnceput cu ce valoare va fi initializat un anumit cāmp . Īn felul acesta , daca utilizatorul nu introduce o valoare , cāmpul va avea o valoare initiala . O alta situatie este aceea īn care o anumita valoare se repeta la mai multe īnregistrari , este mai simplu sa initializam cāmpul si sa modificam doar acele īnregistrari care nu se portivesc.
Valorile titlurilor de figura (proprietatea Caption pe figura ) se refera la titlurile coloanelor, de exemplu la comenzile Browse sau Edit titlurile coloanelor sunt denumirile cāmpurilor . de multe ori aceste denumiri nu sunt suficient de sugestive fiind de fapt prescurtari . Cu acesta proprietate, acele titluri pot fi schimbate.
Comentariile cāmpurilor se refera la mesaje explicative ce le
pune programatorul pentru a stii mai tārziu la ce folosea acel cāmp (
dupa un timp , programul va trebui depanat , actualizat si
programatorul uita la folosea acel cāmp) .
|