54611780-atestat-foxpro

Upload: alin-tataru

Post on 14-Apr-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/30/2019 54611780-Atestat-FoxPro

    1/62

    1.1. Elemente de teoria b1.1. Elemente de teoria b77azelor de dateazelor de dateEvoluia metodelor i tehnicilor de organizare a datelor a fost determinat de necesitatea de a avea un

    acces ct mai rapid i mai uor la un volum din ce n ce mai mare de informaii.

    n esen conceptul de baz de date 1 poate fi definit ca fiind una sau mai multe colecii de date aflaten interdependen, mpreun cu descrierea datelor precum i a relaiilor dintre acestea. Baza de date astfeldefinit trebuie s ndeplineasc urmtoarele condiii:

    s asigure o independen sporit a datelor fa de programe i invers; structura bazei de date trebuie s asigure informaiile necesare i suficiente pentru cerinele de

    informare i decizie; s asigure o redundan minim i controlat a datelor; s permit accesul rapid la informaiile memorate.

    Bazele de date sunt extrem de variate, existnd diferite criterii de clasificare, i anume:

    dup orientare: generalizate, specializate; dup modelul de date: ierarhice, reea, relaionale, orientate obiect; dup amploarea geografic: locale, distribuite;

    dup limbajele utilizate: autonome (limbaje proprii), cu limbaj gazd, mixte.Arhitectura bazelor de date evideniaz componentele acestora, cuprinznd n general urmtoarele :

    baza de date propriu-zis n care se memoreaz datele; un dicionar al bazei de date (metabaza de date), ce conine informaii despre date, structura

    acestora, elementele de descriere a semanticii, statistici, documentaie, etc.; sistemul de gestiune al bazei de date, reprezentnd ansamblul de programe cu ajutorul cruia se

    realizeaz gestiunea i prelucrarea complex a datelor; un set de proceduri manuale i automate destinate bunei funcionri a ntregului sistem; mijloacele hardutilizate; personalul implicat: deosebim urmtoarele categorii de utilizatori: finali (neinformaticieni), de

    specialitate (administratori), analiti-programatori, gestionari, operatori.ntr-o baz de date, organizarea datelor poate fi analizat din mai multe puncte de vedere. De obicei,

    abordarea efectundu-se pe trei nivele:fizic sau intern, conceptualsauglobali extern.

    Nivelul fizic este un nivel de abstractizare al datelor elementar la care pot fi considerate datele,reprezentnd modalitatea efectiv n care acestea sunt memorate pe suportul infomaional. Structura dateloreste descris detaliat, fiind accesibil numai specialitilor (ingineri de sistem, programatori n limbaj deasamblare sau alte limbaje apropiate de main). La acest nivel, structura bazei de date se concretizeaz naa-numita schem intern.

    7

    BAZE DE DATE

    N VIZUAL FOXPRO

    1

  • 7/30/2019 54611780-Atestat-FoxPro

    2/62

    Nivelul conceptual (sau global) este nivelul imediat superior celui fizic, datele fiind privite prinprisma semanticii lor, punndu-se accent pe coninutul lor efectiv i pe relaiile care le leag de alte date.ntreaga baz de date este descris prin intermediul unui numr restrns de structuri care, dei relativ simple,

    prin transpunerea la nivel fizic devin extrem de complexe. Toi utilizatorii i exprim cerinele de date lanivel conceptual, prezentndu-le administratorului bazei de date, acesta fiind cel care are o viziune global

    asupra organizrii bazei concretizat printr-o schem conceptual aferent.Nivelul extern este ultimul nivel de abstractizare la care poate fi descris o baz de date. El este dat de

    viziunea programatorului de aplicaii, care realizeaz programele de aplicaii pentru manipularea datelor istructura logic (subschema) corespunztoare descrierii datelor aplicaiei. Dac la nivel conceptual baza dedate era abordat n ansamblul ei, n practic, un utilizator sau un grup de utilizatori lucreaz numai cu o

    poriune specific a bazei de date, n funcie de departamentul n care i desfoar activitatea i atribuiilesale (lor). Pentru a simplifica interaciunea utilizator-baz de date se recurge la nivelul extern, n care baza dedate se prezint sub diferite machete, sub-scheme sau scheme externe specifice necesitilor fiecriuutilizator sau grup de utilizatori.

    Sistemul de gestiune al bazei de date reprezint software-ul propriu-zis al acesteia asigurndrealizarea urmtoarelor activiti:

    definirea structurii bazei de date; ncrcarea datelor n baza de date; accesul la date (consultare, interogare); ntreinerea bazei de date (colectarea i refolosirea spaiilor goale, refacerea bazei de date n

    cazul unui incident); reorganizarea bazei de date (restructurarea i modificarea strategiei de acces); securitatea datelor.

    Aadar, sistemul de gestiune al bazei de date apare ca un sistem complex de programe care asigurinterfaa ntre o baz de date i utilizatorii acestuia. n acest context, sistemului de gestiune al bazei de date irevin o serie de obiective:

    asigurarea independenei datelor: independena datelor trebuie privit din dou puncte devedere: independena fizic a datelor ce face ca memorarea datelor precum i tehnicile fizice dememorare s poat fi modificate fr a determina rescrierea programelor de aplicaie, iarindependena logic a datelor ce se refer la posibilitatea adugrii de noi articole de date sauextinderea structuri conceptuale (globale), fr ca aceasta s impun rescrierea programelorexistente;

    asigurarea unei redundane minime i controlate a datelor din baza de date : memorareadatelor, n cazul bazelor de date, se face astfel nct fiecare dat s apar o singur dat; totui,nu sunt excluse nici cazurile n care, pentru a realiza performane sporite, referitoare la timpul deacces la date i rspuns la solicitrile uilizatorilor, s se accepte o anumit redundan a datelor,n acest caz ns instituidu-se un control automat n vederea asigurrii coerenei datelor din baz;

    asigurarea unor faciliti sporite de utilizare a datelor: aceasta presupune: folosirea datelor de ctre mai muli utilizatori n diferite scopuri; accesul ct mai simplu al utilizatorului la date; existena unor limbaje performante de regsire a datelor; posibilitatea unui acces multicriterial, fr sortri suplimentare; utilizarea unui limbaj ct mai apropiat de limbajul natural, cu posibilitatea exploatrii

    n mod facil a bazei de date i de ctre utilizatorii neinformaticieni;

    sporirea gradului de securitate a datelormpotriva accesului neautorizat la ele; asigurarea integritii datelor mpotriva unor tergeri intenionate sau neintenionate, prin

    intermediul unor proceduri de validare, a unor protocoale de control concurent i a unor

    proceduri de refacere a bazei de date dup incidente;

  • 7/30/2019 54611780-Atestat-FoxPro

    3/62

    asigurarea partajabilitii datelor: partajabilitatea datelor trebuie neleas nu numai subaspectul asigurrii accesului mai multor utilizatori la aceleai date, ci i acela al posibilittiidezvoltrii unor aplicaii fr a se modifica structura bazei de date.

    Pentru realizarea obiectivelor enumerate mai sus, sistemele de gestiune a bazelor de date dispun deo serie de componente ce permit efectuarea numeroaselor operaii. Se pot astfel deduce cteva funcii cu

    caracter de generalitate pentru toate sistemele de gestiune a bazelor de date, i anume: funcia de descriere a datelor: permite definirea structurii bazei de date cu ajutorul limbajului

    de definire; definirea datelor poate fi realizat la nivel logic, conceptual i fizic; la nivelul acesteifuncii se descriu multitudinea atributelor (cmpurilor) din cadrul structurii bazei de date,legturile dintre entitile de date sau dintre atributele aceleai entiti, se definesc eventualelecriterii de validare a datelor, metodele de acces la date, aspectele referitoare la asigurareaintegritii i confidenialitii datelor, etc; rezultatul acestei funcii va fi schema bazei de date,memorate n cod intern;

    funcia de manipulare a datelor este cea mai complex funcie i realizeaz urmtoareleactiviti:

    crearea (ncrcarea) bazei de date;

    adugarea de noi nregistrri (tupluri); suprimarea unor nregistrri; modificarea valorilor corespunztoare unor cmpuri; cutarea, sortarea i editarea parial i total a unei nregistrri virtuale etc.; funcia de

    manipulare a datelor se realizeaz prin intermediul limbajului de manipulare a datelor;

    funcia de utilizare asigur mulimea interfeelor necesare pentru comunicarea tuturorutilizatorilor cu baza de date; n cadrul realizrii acestei funcii, apar mai multe categorii deutilizatori:

    utilizatori conversaionali: acetia reprezint categoria beneficiarilor de informaii careutilizeaz limbajele de interogare a bazei de date ntr-o form simplist;

    utilizatori programatori, care utilizeaz limbajele de manipulare, realiznd proceduricomplexe de exploatare a bazei de date; administratorul bazei de date apare ca un utilizator special i are rolul hotrtor n ceea

    ce privete funcionarea optim a ntregului ansamblu;

    funcia de administrare a bazei de date apare ca o funcie complex i este de competenaadministratorului acesteia.

    1.1.1 Diagrama Entitate - Asociere

    Nivelul conceptual este nivelul central care reflect datele structurate astfel nct acestea s poat fi

    preluate i prelucrate cu ajutorul unui SGBD. n proiectarea bazelor de date, la nivel conceptual, se potutiliza mai multe modele, dintre care cel mai frecvent utilizat n ultima vreme este modelul entitate - asociere(EA). Modelul EA 2 abstractizeaz lumea real i o transpune, pe de o parte, n angregri de date, numiteentiti, iar pede alt parte, n legturi ntre entiti, denumite corespondene, asocierisau relaii.

    O entitate este un model de obiect identificat n lumea real - material, imaterial (eveniment) sauabstract - al crui tip este definit de un nume i de o list de proprieti (atribuite). Un atributse definete cafiind o proprietate a unei entiti sau a unei corespondene, mulimea realizrilor (valorilor) sale formnd undomeniu. Mulimea format din cte o valoare a fiecrui atribut al unei entiti reprezint o realizare(instaniere) a entitii respective. Spunem c exist o dependen funcional ntre dou atribute atuncicnd unei valori a unei proprieti i corespunde o singur valoare a altei proprieti. Identificatorul unei8entiti este atributul (sau grupul de atribute) a crui realizare caracterizeaz n mod unic o realizare a

    8

  • 7/30/2019 54611780-Atestat-FoxPro

    4/62

    entitii. Putem avea o dependen funcional ntre identificatorii a dou entiti. O coresponden sauasocieresaurelaie reprezint o legtur logic ntre dou sau mai multe realizri de entitii. Roluluneientiti este un nume care desemneaz modul de participare al entitii la o asociere. Identificarea asocierilorse realizeaz prin rolurile entitilor participante deci, concret, cu ajutorul identificatorilor entitilorrespective. Mulimea entitilor care particip la o asociere formeaz colecia acesteia, numrul acestora

    reprezentnd gradul sau dimensiunea asocierii. O coresponden ntre realizri diferite ale aceleeaientiti se numete asociere reflexiv, caz care se recomand precizarea rolurilor fiecrei entiti n cadrulasocierii. O entitate poate participa la mai multe corespondene; n acelai timp, pot exista mai multe asocierintre aceleai entiti. Un subansamblu de entiti ale aceluiai tip de entitate formeaz un subtip al entitiirespective cu proprieti specifice.

    n cadrul modelului EA de abstractizare a unui ansamblu de date trebuie s se in cont deurmtoarele reguli:

    o asociere (relaie) nu poate exista dect o singur dat ntre aceleai entiti; numele entitilor, corespondenele (relaiilor), rolurilor, atributelor trebuie s fie unice n cadrul

    modelului conceptual, iar apoi n baza de date definit.

    1.1.2 Modelul relaional

    Acesta a fost conceput i dezvoltat de Codd, constituind un model formal de organizare conceptual adatelor, destinat reprezentrii legturilor dintre date, bazat pe teoria matematic a relaiilor. Este modelul celmai accesibil pentru utilizatorul bazei de date, deoarece are aceeai structur fizic cu datele care trebuie

    prelucrate. n general, datele se prezint sub forma unor tabele (relaii 3 ) n care liniile constituie entiti, iarcoloanele atribute ce caracterizeaz aceste entiti.

    Spre deosebire de modelul ierarhic i reea unde apar dou elemente, i anume tipul entitii i relaiiledintre dou entiti, modelul relaional este alctuit numai din relaii i prin urmare, orice integrare asupra

    bazei de date este tot o relaie. Modelul relaional a fost definit cu o deosebit rigoare matematic, furniznd

    un mijloc performant de studiu al proprietilor logice ale unui sistem de baze de date.Definirea unui SGBD relaional impune analizarea caracteristicilor pe care trebuie s le prezinte unmodel de date pentru a fi considerat relaional. Dintre diferitele modaliti de definire ale acestui concept,exemplificm cu:

    prezentarea datelor n tabele supuse anumitor operaii: proiecie, selecie, reuniune, compunere,intersecie etc (definiie simpl);

    un sistem de baze de date ce suport un limbaj SQL - Structure Query Language (definiiepractic);

    un sistem de baze de date care respect principiile modelului relaional introdus de Codd(definiia cea mai frecvent folosit).

    Codd a publicat un set de 13 reguli, n raport cu care un SGBD poate fi apreciat ca fiind relaional.Ulterior, cele 13 reguli de fidelitate ale lui Codd au fost extinse la un numr de 100. Trebuie remarcat c nuexist un SGBD care respect toate regulile definite de Codd. De fapt, nu trebuie s apreciem un SGBD cafiind relaional sau nu, ci msura n care acesta este relaional.

    Un model relaional este caracterizat de trei elemente:

    structura relaional a datelor operatorii modelului relaional regulile de integritate care guverneaz folosirea cheilor n model.

    Prezentarea structurii datelor impune definirea noiunilor de domeniu, relaie, schem relaional,valoarea null i tabel view. Un domeniu 4 este o mulime de valori care poate fi definit fie enumernd

  • 7/30/2019 54611780-Atestat-FoxPro

    5/62

    elementele componente, fie de9finind o proprietate distinct a domeniului valorilor. Fie D1, D2, ......., Dndomenii finite, nu neaprat disjuncte. Produsul cartezian D1 x D2 x ......x Dn al domeniilor D1, D2, ...., Dn estedefinit de mulimea tuplurilor (V1,V2,.....,Vn) , unde V1 D1, , Vn Dn. O relaie R pe mulimile D1,D2,....., Dn este o submulime a produsului cartezian D1 x D2 x ......x Dn, deci o mulime de tupluri. Relaia

    poate fi definit i ca o mulime finit de funcii R = {f1, f2 ,...., fm} cu fj : {A1, A2,..., An} D1 D2

    ....... Dn i fj (Ai) Di , n care asociem fiecrui domeniu Di un atribut Ai. Mulimea numelor atributelorcorespunztoare unei relaii o numim schem relaional i o notm cu R (A1, A2,....., An). Putem reprezintao relaie printr-un tabel bidimensional n care fiecare linie corespunde unui tuplu, iar fiecare coloan unuidomeniu din produsul cartezian, de fapt unui atribut. Numele atributului exprim de obicei semnificaiavalorilor din calcul coloanei respective. Numrul atributelor definete gradul relaiei, iar numrul de tupluridin relaie definete cardinalitatea relaiei.

    FORMAL UZUAL FIZIC

    relaie tabel Fiier

    tuplu linie Inregistrare

    atribut coloan cmpdomeniu tip de dat tip de dat

    Fig. 1.1 Concepte de baz

    Atunci cnd inserm tupluri ntr-o relaie, de multe ori un atribut este necunoscut sau neaplicabil.Pentru a reprezenta acest atribut a fost introdus o valoare convenional n relaie, i anume valoarea null.n ceea ce privete un tabel de tip view (vizualizare, filtru, relaie virtual) acesta reprezint o filtrare atabelului iniial necesar unei anumite abordri, unei anumite aplicaii. Spunem c un tabel de tip viewreprezint o relaie virtual, deoarece datele pe care le conine nu sunt n realitate memorate, fiind stocatnumai definiia vizualizrii. Utilizarea vizualizrilor este, n anumite situaii, avantajoas, asigurnd

    securitatea tabelului iniial, care este astfel protejat de tergeri, modificri, etc., dar prezint i limitri nprelucrarea datelor.

    Operatorii modelului relaional definesc operaiile care se pot efectua asupra relaiilor, n scopulrealizrii funciilor de prelucrare asupra bazei de date. Modelul relaional ofer dou mulimi de operatori perelaii i anume: algebra relaional i calculul relaional. Operatorii algebrei relaionale sunt fie operatoritradiionali pe mulimi (UNION, INTERSECT, PRODUCT, DIFFERENCE), fie operatori relaionalispeciali (PROJECT, SELECT, JOIN, DIVISION). Calculul relaional este de dou tipuri : orientat pe tuplurisau orientat pe domenii, reprezentnd o adaptare a calculului predicatelor la domeniul bazelor de date. Pe

    baza unor predicate iniiale, prin aplicarea unor operatori ai calculului cu predicate (conjuncia, disfuncia,10negaia, cuantificatorul existenial i cel universal) se pot defini noi predicate, noi relaii. Conformechivalenei dintre algebra relaional i calculul relaional demonstrate de Ullmann, orice relaie posibil de

    definit n algebra relaional poate fi definit i n cadrul calculului relaional, i reciproc.

    9

    10

  • 7/30/2019 54611780-Atestat-FoxPro

    6/62

    Regulile de integritate sunt aseriuni pe care datele coninute n baza de date trebuie s le satisfac.Trebuie fcut distincia ntre regulile structurale care sunt inerente modelrii datelor i regulile defuncionare (comportament) care sunt specifice unei aplicaii particulare. Exist trei tipuri de constngeristructurale (de cheie, de referin, de entitate) ce constituie mulimea minimal de reguli de integritate pecare trebuie s le respecte un SGBD relaional i care sunt definite n raport cu noiunea de cheie a unei

    relaii. O mulime minimal de atribute ale cror valori identific un tuplu unic ntr-o relaie reprezint ocheie pentru relaia respectiv. Fiecare relaie are cel puin o cheie de identificare. Dac exist mai multechei de identificare, atunci acestea se numesc chei candidat. Una dintre cheile candidat va fi aleas de ctreadministratorul bazei de date pentru a identifica efectiv tupluri i ea va primi numele de cheie primar, iarcelelalte chei candidat vor purta numele de chei alternative sau alternate. Modelul relaional servete lareprezentarea entitilor din lumea real i a asocierilor dintre acestea. Modelarea asocierilor dintre entitiimpune recurgerea la conceptul de cheie extern. Aceasta reprezint un atribut/grup de atribute dintr-orelaie R1 ale crui/cror valori sunt definite pe acelai domeniu/aceleai domenii ca i cheia primar a uneialte relaii R2 i care are rolul de a modela asocierea dintre entitile reprezentate prin relaiile R1 i R2. nacest context, R1 este denumit relaie care refer, iar R2 poart numele de relaie referit.

    Cu aceste considerente, cele trei reguli de integritate structural se refer la :

    unicitatea cheii: cheia primar trebuie s fie unic i minimal; integritatea entitii: atributele cheii primare trebuie s fie diferite de valoarea null; integritatea referirii: o cheie extern trebuie ori s fie null n ntregime, ori s corespund la o

    valoare a cheii primare asociate.

    1.1.3 Caracteristicile unui SGBD relaional

    Deoarece regulile lui Codd sunt prea severe pentru a fi respectate de un SGBD relaional, s-auformulat criterii minimale de definire a unui sistem relaional.

    Un SGBD este minimal relaionaldac satisface urmtoarele condiii:

    Toate datele din cadrul bazei de date sunt reprezentate prin valori n tabele.

    Nu exist pointeri observabili de ctre utilizatori.

    Sistemul suport operatorii relaionali de proiecie, selecie i compunere natural, frlimitri impuse din considerente interne.

    Un SGBD este complet relaional dac este minimal relaional i satisface n plus urmtoarelecondiii:

    Sistemul suport restriciile de integritate de baz (unicitatea cheii primare, constrngerile dereferin, integritatea entitii).

    Sistemul suport toate operaiile de baz ale algebrei relaionale.

    Un SGBD relaional ndeplinete funtiile unui SGBD, cu anumite particulariti care decurg dinconcepia de organizare a datelor, respectiv din modelul relaional. Fiecare SGBD relaional implementeazmodelul relaional ntr-o manier proprie care l difereniaz de restul sistemelor relaionale.

    Caracterizarea unui SGBD relaional se poate realiza la nivelul clasei SGBD-urilor relaionale, nsensul caracterizrii globale, unitare n raport cu celelalte tipuri de SGBD-uri, sau la nivelul unui SGBDrelaional individualn sensul caracterizrii particularitilor sale, n raport cu alte SGBD-uri relaionale.

    Realizarea funciilor SGBD-urilor relaionale se face cu ajutorul unor mecanisme de lucru specifice,care le separ de sistemele nerelaionale. Dintre instrumentele i mecanismele de lucru de care dispune unSGBD relaional se disting:

    un limbaj relaional pentru descrierea datelor la nivel fizic, logic i conceptual; un limbaj relaional pentru manipularea datelor;

  • 7/30/2019 54611780-Atestat-FoxPro

    7/62

    mecanisme pentru controlul integritii semantice a datelor;

    mecanisme pentru optimizarea cererilor de date;

    mecanisme pentru asigurarea coerenei datelor n condiiile accesului la date;

    utilitare pentru generarea de rapoarte i de etichete, utilitare pentru generarea de aplicaii,utilitare pentru generarea unor statistici referitoare la starea i activitatea bazei de date, etc.

    1.1.4 Normalizarea relaiilor

    Codd a artat c intr-o anumit form relaiile posed proprieti nedorite, pe care le-a numitanomalii de actualizare:

    anomalia de tergere const n faptul c anumite date care urmeaz s fie terse, fac parte dintupluri n care se gsesc i alte date care mai sunt necesare n continuare, ori tergerea fcndu-sela nivelul tuplului, acestea se pierd;

    anomalia de adugare const n faptul c anumite date care urmeaz s fie adugate fac parte

    din tupluri incomplete (pentru care nu se cunosc toate datele), ceea ce face ca acestea s nu poatfi adugate;

    anomalia de modificare rezult din faptul c este dificil de modificat o valoare a unui atributatunci cnd ea apare n mai multe tupluri ale relaiei.

    Pentru a nltura aceste anomalii, Codd a stabilit trei forme normale pentru relaii i a introdusprocesul de normalizare care se bazeaz pe noiunea de dependen funcional ca relaie ntre atributele uneientiti ce are un caracter invariant.

    Procesul de normalizare a relaiilor se realizeaz n mai muli pai, ncepnd cu forma normal unu(FN1) i ajungnd (dup ultimele cercetri) la forma normal cinci (FN5). Teoria normalizrii se ocup cumbuntirea succesiv a schemei conceptuale, find satisfcute, n acelai timp, urmtoarele condiii:

    conservarea datelor, adic n schema conceptual final s existe toate datele din cadrul schemeiiniiale;

    conservarea dependenelordintre date, adic s se pstreze tipurile de relaii dintre entiti;

    descopunerea minimal a relaiilor iniiale, adic n schema conceptual final nici o relaie nutrebuie s fie coninut ntr-alta.

    O relaie este n forma normal 1 (FN1), dac i numai dac toate atributele ei conin numai valoriatomice. n plus, un tuplu nu trebuie s conin atribute sau grupuri de atribute repetitive. Este forma de baza relaiilor, care figureaz ca cerin minimal la majoritatea sistemelor de gestiune a bazelor de daterelaionale.

    O relaie este n a doua form normal FN2, dac este n FN1 i oricare dintre atributele non-cheieeste dependent funcional complet de cheia primar a relaiei.

    O relaie este n forma normal 3 (FN3), dac se gsete n FN2 i toate atributele non-cheie suntdependente tranzitiv de cheia primar.

    n afara acestor trei forme normale au fost introduse i formele FNBC (forma normal Boyce Codd), FN4 i FN5 care conduc la diminuarea redundanei n baza de date. Trecerea de la forma FN3 laFN4 i FN5 se face opernd asupra cheilor compuse ntre ale cror atribute apar relaii care genereazdependene ce nu sunt funcionale, numite dependene multi-valoare. O relaie este n forma normal FNBC,dac fiecare determinant (acesta este un atribut sau o mulime de atribute neredundante care constituie unidentificator unic pentru alt atribut sau alt mulime de atribute ale unei relaii) este o cheie candidat.

    A patra form normal FN4 elimin redundanele datorate relaiilor de tip n:m, iar a cincea formnormal FN5 este mai mult academic i apare destul de rar n practic.

  • 7/30/2019 54611780-Atestat-FoxPro

    8/62

    1.2. Crearea bazelor de date1.2. Crearea bazelor de daten Visual FoxPro o baz de date are asociat un fiier special (.DBC) n care sunt memorate date

    referitoare la baza de date n ansamblul ei, cum ar fi: tabelele componente, relaiile permanente ntre tabele,dicionarul de date asociat bazei de date, etc. n acest fel, ntre date i programele de prelucrare se interpuneun nou nivel, care asigur independena bazelor de date fa de programele de prelucrare.

    Un program care prelucreaz o baz de date relaional citete mai nti informaiile nscrise n fiierul.DBC asociat acesteia i numai apoi, dup ce cunoate structura complex a bazei de date, trece la

    prelucrarea efectiv a datelor din tabele.

    O dat cu introducerea n Visual FoxPro a noului concept de baz de date, o tabel clasic a fostmbuntit cu o serie de caracteristici suplimentare, care sunt disponibile numai dac tabela respectiv esteinclus ntr-o baz de date. Aceste faciliti suplimentare se manifest la nivelul cmpurilor componente saula nivelul tabelei n ansamblul ei. Prin urmare, n Visual FoxPro se disting dou tipuri de tabele:

    cele clasice, simple (din versiunile FoxPro pentru DOS i WINDOWS) cele incluse n baze de date (tipice pentru Visual FoxPro).

    n vederea construirii unei baze de date trebuie parcuri urmtorii pai:

    mai nti se construiete un fiier baz de date nou, n care vor fi memorate datele referitoare labaza de date i la tabelele componente;

    apoi se ncorporeaz pe rnd tabelele simple create anterior sau se construiesc tabele noi, directncorporate n noua baz de date;

    pentru tabele simple urmeaz specificarea acelor caracteristici noi, care nu se puteau declara laconstruirea lor ca tabele izolate;

    se stabilesc legturile, relaiile ntre tabele;

    se pot preciza o serie de caracteristici noi ale bazei de date n ansamblul ei; se pot construi i incorpora n baza de date o serie de elemente speciale, precum vederile,

    conexiunile, etc.

  • 7/30/2019 54611780-Atestat-FoxPro

    9/62

    Fig. 1.2 Crearea unei baze de date. Definirea structurii unei tabele componente

    1.2.1 Stabilirea structurii unui tabel i a caracteristicilor

    acestuiaFiecare cmp al unei tabele este caracterizat prin: nume (Name): reprezint identificatorul prin care se face referire la cmpul respectiv, la datele

    memorate n acesta; tip (Type): tipul datelor care pot fi memorate n cmpul respectiv; acesta poate fi: ir de

    caractere, numeric de diferite feluri, dat calendaristic sau moment de timp, logic, memo, saugeneral:

    lungime (Width): reprezint numrul de caractere pe care l ocup fiecare dat memorat ncmpul respectiv;

    numrul de zecimale (Decimal): caracteristic valabil n cazul cmpurilor numerice, care

    indic numrul de cifre de dup punctul zecimal memorate n cmp; lungimea cmpului,precizat anterior, trebuie s includ i aceast valoare precum i punctul zecimal propriu-zis; fanionul de indexare (Index): indic dac se stabilete un index pe baza cmpului respectiv;

    poziionarea acestui indicator implic stabilirea cmpului ca i cheie de indexare i determincrearea unui tag (etichet index) cu acelai nume ca i cmpul, n cadrul fiierului indexstructural asociat tabelei;

    fanionul de valoare nul (NULL): arat dac n cmpul respectiv poate fi memorat sau nu ovaloare nul; aceast caracteristic a fost introdus datorit necesitii diferenierii ntre un cmplsat necompletat de utilizator i unul completat cu valoarea 0.

    TIP CMP VALORI ADMISE

    Character iruri de caractere cu lungime ntre 1 i 254 caractereFamilia tipurilornumerice

    numere ntregi sau reale:-Integer(4 octei): valori ntregi din intervalul

    [-2147483647, +2147483646];- Double (8 octei): valori reale n dubl precizie din intervalele[-4.9406564584124710-324, +4.9406564584124710-324][8.9884656743115 10307, +8. 9884656743115 10307]

    - Numeric i Float: tipuri numerice standard; zona de memoriealocat pentru un cmp de acest tip este dependent de lungimeadeclarat de utilizator la crearea tabelei respective (de la 1 la 20de octei); pentru fiecare cifr sistemul aloc n tabel 1 octet; se

    pot reprezenta valori din intervalul

    [ 0.9999999999 1019, 0.99999999991020]Currency tipul monetar folosit pentru memorarea valorilor exprimate n bani; zonade memorie alocat are dimensiunea de 8 octei; valorile de acest tiptrebuie s se ncadreze n intervalul[ 922337203685477.5808 , 922337203685477.5807]

    Logical valori logice (1 octet)Date valori de tip dat calendaristic (8 octei)DataTime valori de tip dat calendaristic urmate de marci de timp (8 octei)General acest tip de date permite memorarea n tabele a unor elemente create cu

    ajutorul altor programe, cum ar fi documente, foi de calcul tabelar,imagini, etc., utilizndu-se tehnologia OLE de incorporare i de legare a

    obiectelor (4 octei)

  • 7/30/2019 54611780-Atestat-FoxPro

    10/62

    Memo acest tip de date se folosete pentru prelucrarea textelor, adic a irurilorde caractere de dimensiuni mari sau variabile, n cmpul de tip memomemorndu-se un indicator spre textul salvat ntr-un fiier distinct detipul.FTP (4 octei)

    Pe lng aceste caracteristici, pentru tabele incluse ntr-o baz de date se pot efectua i urmtoareleprecizri pentru cmpurile din structura lor:

    pentru fiecare cmp se poate stabili un format implicit de afiare a datelor (DisplayFormat); pentru fiecare cmp n parte se poate stabili o machet pentru introducerea datelor (Display

    Input Mask); se poate stabili un titlu nou pentru fiecare cmp; acesta va apare n antetul vizualizrii

    coninutului tabelei (DisplayCaption); o valoare iniial implicit pentru fiecare cmp; la adugrii unei noi nregistrri, cmpurile

    acesteia vor fi iniializate cu aceste valori implicite (Field ValidationDefault value); pentru fiecare cmp se poate impune o regul de validare a valorilor (Field ValidationRule)

    i eventual un mesaj care s fie afiat pe ecran n cazul nerespectrii condiiei de validare impuse(Field ValidationMessage); regula de validare la nivel de cmp const dintr-o expresielogic, ce va fi evaluat la orice modificare a valorii cmpului respectiv; dac valoarea rezultatn urma evalurii expresiei de validare este false, atunci noua valoare a cmpului nu va fiacceptat i se va afia un mesaj de eroare standard sau unul specificat de utilizator.

    La nivelul tabelei n ansamblu (figura 1.3), pot fi precizate: o regul de validare la nivel denregistrare (la modificarea unei nregistrri) i, eventual, un mesaj de eroare, n cazul nerespectrii acesteireguli, precum i secvene de cod care s fie executate la inserarea unei noi nregistrri, la actualizarea(modificarea) sau la tergerea uneia existente. Validarea la nivel de nregistrare (Record ValidationRule)se declaneaz dup cea la nivel de cmp, dar naintea secvenelor de cod asociate evenimentelor demanipulare a tabelei.

    Fig. 1.3 Faciliti suplimentare la nivelul unei tabele n ansamblul ei

  • 7/30/2019 54611780-Atestat-FoxPro

    11/62

    Adugarea unei nregistrri, modificarea datelor dintr-o nregistrare existent precum i tergerea uneinregistrri a tabelei constituie trei evenimente de manipulare a datelor dintr-o tabel inclus ntr-o baz dedate. Pentru fiecare dintre aceste evenimente se poate specifica cte o secven de cod care s fie executat laapariia acestuia. Secvenele de cod asociate evenimentelor de manipulare a unei tabele se declaneaz dupvalidrile la nivel de cmp i la nivel de nregistrare.

    1.2.2 Indexarea tabelelor

    Indexarea reprezint o tehnic de ordonare logic a datelor dintr-o tabel, dup diferite criterii,operaie care ns nu afecteaz ordinea fizic a datelor din tabel, ci doar modul n care acestea sunt vzutede utilizator.

    Ordonarea unei tabele presupune stabilirea unui criteriu dup care s fie parcurse nregistrrile ei.Acest criteriu poate fi un cmp sau o combinaie de cmpuri ale tabelei. Criteriul de ordonare reprezint defapt o expresie, numit cheie de ordonare sau de indexare, n alctuirea creia intr cmpuri ale tabelei.Pentru stabilirea ordinii nregistrrilor tabelei se evalueaz expresia cheii de ordonare pentru fiecarenregistrare n parte, valorile obinute se compar ntre ele, iar ordinea nregistrrilor n tabel se stabilete n

    funcie de rezultatul obinut.Exist dou tipuri de ordonri ale unei tabele:

    fizic, numit i sortare, ce const n rearanjarea fizic a datelor din tabel ntr-o alt ordine,dat de criteriul respectiv; n urma sortrii rezult o nou tabel, cu aceeai structur ca i cea de

    baz, dar cu nregistrrile aranjate n ordinea dorit; logic, numit i indexare, care const n construirea unui fiier special, folosit la regsirea

    datelor din tabel n ordinea dorit; prin indexare, ordinea fizic a nregistrrilor din tabel nu semodific, se schimb ns modul n care utilizatorul are acces la datele acesteia.

    n mod simplificat, putem considera tabela index format din cheia de indexare i un numr denregistrare (pointer) din tabela de date.

    Fie tabela date_pers din figura nr. 1.2 pentru care s-a stabilit cmpul nr_leg ca i cheie deindexare. Pe baza valorilor, n ordine cresctoare, a acesteia, s-a construit tag-ul (eticheta index) nr_leg alfiierului index structural date_pers.CDX asociat tabelei. Prima nregistrare a tabelei indexate oconstituie cea corespunztoare celei mai mici valori a cheii de indexare, iar ultima nregistrare a fiieruluiindexat este cea care conine cea mai mare valoare a cheii de indexare (figura 1.4).

    O tabel poate avea mai muli indeci asociai, dar numai unul singur va fi activ la un moment dat.Ordinea n care va fi parcurs tabela este dat de indexul activ.

    n Visual FoxPro, prin indexarea unei tabele, se creaz n mod automat o etichet index n cadrulfiierul index structural asociat tabelei (.CDX). Prin comenzi explicite de indexare, se poate solicita creareaunui index simplu (.IDX) sau a unui index compus nestructural (memorat ntr-un fiier de tipul .CDX avndns un nume diferit de cel al tabelei care se indexeaz). Un index poate fi considerat un filtru aplicat tabelei,

    filtru prin care datele respective sunt pribite ntr-o anumit ordine. Vzui din aceast perspectiv, indeciipot chiar anula accesul la unele nregistrri ale tabelei.

    Un tip special de filtrare prin indexare este acela al nregistrrilor cu aceeai valoare a cheii deindexare. Din acest punct de vedere, indecii pot fi de dou feluri:

    normali (Regular), care construiesc pentru fiecare nregistrare a tabelei cte onregistrare n fiierul index respectiv, indiferent de duplicarea (sau multiplicarea) valorii cheiide indexare; prin urmare, ntr-o astfel de tabel indexat toate nregistrrile sunt accesibile,indiferent de valoarea cheii de indexare;

    unici (Unique), care permit o unic valoare a cheii de indexare; dac dou sau maimulte nregistrri ale tabelei corespund aceleiai valori a cheii de indexare, numai prima

    dintre acestea va fi disponibil (accesibil), restul neaprnd n tabel (dei fizic exist).

  • 7/30/2019 54611780-Atestat-FoxPro

    12/62

    Fig. 1.4 Localizarea, n acces direct, a nregistrrii ce conine n nr_leg valoarea 1005

    Legarea tabelelor ntre ele n cadrul modelului relaional a impus alte dou tipuri de indeci,cel candidat i cel cheie:

    indexul candidatn cadrul unei tabele pot exista mai multe cmpuri (sau mai precis mai multecriterii) care s asigure identificarea unic a nregistrrilor tabelei i care vor sta la baza definiriiindexilor de acest tip; spre deosebire de indexul unic, cel candidat va mpiedeca ncrcarea ntr-onregistrare a unor valori care, dup evaluarea cheii de indexare, conduc la valori existente ntabel;

    indexul de tip cheie primar: se va alege dintre potenialii indecsi de tip candidat i va juca unrol important n legarea tabelelor.

    Tipurile de indeci prezentate (normali, unici, candidai i de tip cheie primar) impun anumiterestricii de acces, n funcie de valorile cheii de indexare. Accesul la nregistrrile tabelei este din ce n cemai restrictiv, n ordinea: indeci normali, unici, candidat sau de tip cheie primar.

    1.2.3 Relaii ntre tabele

    Modelul relaional al bazelor de date implic organizarea datelor n tabele legate ntre ele prin relaii.Scopul stabilirii relaiilor este acela de coordonare, dup diferite criterii, a datelor citite din tabelele aflate nlegtur. Fie dou tabele T1 i T2, A un cmp din primul tabel i B un cmp din cel de-al doilea tabel, celedou cmpuri avnd valori de acelai tip. Tabelul T1 se va numi tabel primar(principal), iat T2tabel referit(secundar)11. Unei nregistrri din T1, cu valoarea V n cmpul A, i se pot pune n coresponden anumitenregistrri din tabela T2. Cmpul A din tabela T1 se numete cheie extern, deoarece valorile sale se vorcuta n T2, printre valorile cmpului B.

    11

  • 7/30/2019 54611780-Atestat-FoxPro

    13/62

    Fig. 1.5 Definirea unei relaii ntre dou tabele

    Cu ajutorul cmpurilor A i B, legtura dintre tabelele T 1 i T2 poate fi unul dintre urmtoarele treitipuri:

    1:1 (one-to-one): unei valori V din cmpul A i corespunde o unic valoare din cmpul B;

    1:n (one-to-many): unei valori V din cmpul A i corespund mai multe valori din cmpul B; n:1 (many-to-one): unei valori V din cmpul B i corespund mai multe valori din cmpul A; m:n (many-to-many): unei valori din cmpul A, ce se regsete n mai multe nregistrri ale

    tabelei T1, i corespund mai multe valori din cmpul B.Dintre acestea, n Visual FoxPro sunt implementate doar primele trei tipuri de relaii. Lipsesc relaiile

    de tipul m:n, deoarece ele se pot reduce la dou relaii, una de tipul n:1 i alta de tipul 1:n prin intermediulunor tabele suplimentare intercalate ntre primele dou.

    Un alt criteriu de clasificare a relaiilor dintre tabele este cel al momentului definirii lor. Din acestpunct de vedere exist:

    relaii temporare sau dinamice, care sunt create prin comenzi introduse n programele deprelucrare, deci sunt disponibile numai la rularea acestora. n afara programelor de prelucrare,relaiile respective nu exist;

    relaii permanante, care sunt create automat de sistem la deschiderea bazei de date care coninetabelele legate; aceste relaii sunt disponibile imediat ce este deschis baza de date, deoarecesunt memorate n fiierul bazei de date.

    La crearea unei relaii permanente ntre dou tabele este necesar ndeplinirea unor condiiiprealabile i anume:

    tabelul primar trebuie s fie indexat cu un index candidat sau primar; tabelul referit poate fi indexat cu orice fel de index, de acesta depinznd ns tipul relaiei

    definite.

    Condiia indexrii tabelului primar cu un index candidat sau primar determin stabilirea numai a unorrelaii permanente de tip 1:1 sau 1:n, deoarece acest tip de index mpiedic existena, n tabelul primar, amai multor nregistrri cu aceeai valoare a cheii de indexare. Dac dorim crearea unei relaii de tip n:1,aceasta trebuie vzut dinspre tabelul referit nspre tabelul primar. Desigur c prin aceasta se inverseazrolurile primar referit ntre tabele. Dac dorim neaprat ca tabelul primar s-i pstreze acest rol pentru oalt relaie, se poate crea o vedere (view) din cele dou tabele legate, vedere care va deveni noul tabel primar

    pentru relaia respectiv.

    n esen, legtura ntre dou tabele const ntr-un cmp comun ce exist n ambele tabele. n felulacesta se leag o nregistrare din primul tabel de (prima) nregistrarea corespunztoare din tabelul referit,adic legtura se stabilete pe baza unor valori egale n cmpul de legtur.

  • 7/30/2019 54611780-Atestat-FoxPro

    14/62

    Fig. 1.6 Definirea relaiilor permanente

    1.2.4 Integritatea referenial a tabelelor legate ntre eleprin relaii

    Integritatea referenial reprezint un ansamblu de reguli impuse tabelelor ntre care s-au stabilitrelaii. Aceste reguli sunt necesare deoarece deseori se dorete modificarea unor date dintr-o tabel, date careafecteaz relaia dintre aceast tabel i o alta.

    Printre evenimentele care conduc la modificri ale cheii i deci reprezint evenimente ce trebuietratate prin integritatea referenial se numr urmtoarele 12:

    adugarea unei nregistrri noi; tergerea unei nregistrri; modificarea datelor unei nregistrri, date care afecteaz relaia.n cazul adugrii unei noi nregistrri n tabelul referit printr-o relaie, exist urmtoarele

    opiuni: ignorare (Ignore) cu alte cuvinte, se permite adugarea noii nregistrri n tabelul referit,

    indiferent dac exist sau nu o nregistrare corespunztoare n tabelul primar; restricionare (Restrict) se genereaz o eroare atunci cnd se ncearc adugarea unui

    nregistrri n tabelul referit printr-o relaie, fr corespondent n tabelul primar.

    12

  • 7/30/2019 54611780-Atestat-FoxPro

    15/62

    Fig. 1.7 Adugarea unei noi nregistrri n tabela copil a unei relaii

    tergerea unei nregistrri din tabelul primar al unei relaii este de asemenea gestionat prinintermediul integritii refereniale. n acest caz, avem la dispoziie urmtoarele opiuni:

    ignorare (Ignore) se permite aceast tergere, indiferent dac n tabelul referit exist sau nunregistrri legate de nregistrarea primar tears;

    restricionare (Restrict) oprete tergerea, genernd un mesaj de eroare, atunci cnd existnregistrri corespunztoare n tabela referit;

    tergere n cascad (Cascade) se terg automat toate nregistrrile din tabelul referit legate denregistrarea primar tears.

    Modificarea unor date din tabelul primar, ce afecteaz relaia dintre tabele, este de asemenea tratatprin regulile integritii refereniale n felul urmtor:

    ignorare (Ignore) se permit modificrile respective, chiar dac prin aceasta nregistrrilereferite corespunztoare rmn n aer, adic fr corespondent n tabelul primar;

    restricionare (Restrict) atunci cnd exist nregistrri corespunztoare n tabela referit,modificarea este oprit i este generat un mesaj de eroare;

    modificare n cascad (Cascade) sunt modificate automat toate nregistrrile din tabelulreferit conform noii valori a cheii relaiei.

    1.2.5 Crearea prin intermediul limbajului Visual FoxPro a

    unei BD1. Crearea bazei de date de tip .DBC

    CREATE DATABASE

    2. Crearea tabelelor, a indecilor i a relaiilor permanente dintre tabele

    CREATE TABLE | DBF ( ( [, ])

    [NULL | NOT NULL][CHECK [ERROR ]]

    [DEFAULT ][PRIMARY KEY | UNIQUE]

  • 7/30/2019 54611780-Atestat-FoxPro

    16/62

    [REFERENCES [TAG ]][, ...][, PRIMARY KEY TAG

    |, UNIQUE TAG ] [, FOREIGN KEY TAG [NODUP]

    REFERENCES [TAG ]])| FROM ARRAY

    n cadrul bazei de date curent deschise, se va crea tabela . Aceasta vaconine cmpurile , , .... Fiecrui cmp i se vor preciza tipul , lungimea i dac este cazul numrul de zecimale .

    Pentru ca ntr-un cmp s poat fi memorat o valoare nul, se va apela la argumentul NULL dinsintaxa general a comenzii. mpiedicarea acestui lucru se va face specificnd clauza NOT NULL pentrucmpul respectiv. n absena acestor specificri, cmpul se va comporta conform setrii curente stabilite princomanda SET NULL ON | OFF. Pentru fiecare cmp se poate impune o regul de validare a valoriloracestora CHECK . Dac condiia nu permite existena unui cmp necompletat, atunciadugarea unei nregistrri vide (de exemplu prin comanda APPEND BLANK) nu va fi posibil i va figenerat un mesaj de eroare. Acest mesaj de eroare poate fi stabilit de ctre programator prin intermediulclauzeiERROR (ERROR ).

    De asemenea, pentru fiecare cmp poate fi stabilit o valoare iniial implicit DEFAULT ,la adugarea unui noi nregistrri, cmpurile acesteia vor fi iniializate cu valorile implicite specificate.

    Dac se dorete definirea unui index de tip cheie primar, atunci se va apela la clauzaPRIMARY KEYn definirea cmpului ale crui valori vor sta la baza generrii indexului. Acesta va avea acelai nume ca icmpul.

    Se poate defini un index unic pe baza valorilor unui cmp al tabelei ( UNIQUE), acesta va face canumai prima dintre nregistrrile ce conin aceeai valoare a cheii de indexare s fie accesibil.

    Tabela creat prin comanda CREATE TABLE | DBF poate constitui un tabel referit ntr-orelaie permanent, al crei tabel primar se specific prin . Revenind lafigura 1.5, cmpul B estecel cruia i s-a ataat clauza REFERENCE, iar cmpul A din tabelul primar, este cel pe bazavalorilor cruia s-a construit indexul . n absena clauzei TAG se ia nconsiderare indexul de tip cheie primar al tabelului primar .

    Odat cu creerea tabelei se poate defini i un index de tip cheie primar al acesteia, ce areare la baz o combinaie de cmpuri ale tabelei i care va asigura identificarea unic a nregistrrilor tabelei.Cu valorile lui , reprezentnd combinaia de cmpuri dorit, se va forma . Clauza

    PRIMARY KEY TAG nu va putea fi folosit, dac s-a definit deja un index detip cheie primar cu valorile unui cmp (clauzaPRIMARY KEYataat cmpului respectiv). Reamintim, co tabel poate avea un singur index de tip cheie primar. Clauza UNIQUE TAG creaz un index candidat pe baza valorilor lui , ce reprezint un cmp sau o combinaie de cmpuridin tabela nou creat. Trebuie menionat c, cmpul/cmpurile pe baza cruia/crora s-a construit indexul detip cheie primar nu poate/pot apare n . De asemenea, o tabel poate avea mai muli indeci de tipcandidat.

    Clauza FOREIGN KEY TAG [NODUP] permite definirea unui indexnormal (regular) , pe baza valorilor cheii de indexare , pentru tabela ,fiind esenial n stabilirea unei relaii de tipul 1:n cu tabela primar . Dac se include specificarea

    NODUPn clauz, se va creea un index de tip candidat pentru , ce va constitui tabelul referit dinrelaia stabilit cu tabela primar . Noua tabel poate fi creat i cu ajutorul unui tablou,ce conine numele, tipul, lungimea i precizia pentru fiecare cmp al tabelei. Coninutul lui va fistabilit n prealabil cu ajutorul funciei AFIELDS( ).

    Considernd situaia prezentat nfigura 1.6

    , la nivel de comenzi Visual FoxPro, avem urmtoarele:CREATE DATABASE studenti

  • 7/30/2019 54611780-Atestat-FoxPro

    17/62

    CREATE TABLE date_pers ;(nr_leg N(6) PRIMARY KEY, nume C(35), prenume C(35), adresa C(50))

    CREATE TABLE anul1 (nr_leg N(6) PRIMARY KEY REFERENCES date_pers, ;nota1 N(2), nota2 N(2), nota3 N(2), nota4 N(2), nota5 N(2))

    CREATE TABLE anul2 (nr_leg N(6) PRIMARY KEY REFERENCES date_pers, ;

    nota1 N(2), nota2 N(2), nota3 N(2), nota4 N(2), nota5 N(2))CREATE TABLE anul3 (nr_leg N(6) PRIMARY KEY REFERENCES date_pers, ;nota1 N(2), nota2 N(2), nota3 N(2), nota4 N(2), nota5 N(2))

    CREATE TABLE anul4 (nr_leg N(6) PRIMARY KEY REFERENCES date_pers, ;nota1 N(2), nota2 N(2), nota3 N(2), nota4 N(2), nota5 N(2))

    Considerm situaia dinfigura 1.8, creia i va corespunde urmtoarea secven de comenzi :

    Fig. 1.8 Relaie permanent de tipul 1:n

    CREATE DATABASE contaCREATE TABLE conturi (simbol N(8) PRIMARY KEY, ;

    tip C(1) CHECK tip="A" OR tip="P" DEFAULT "A", ;soldi N(10), debit N(10), credit N(10), soldf N(10))

    CREATE TABLE operatii (simbol N(8), data_op D(8) DEFAULT { / / }, ;

    tip_op C(1) CHECK tip_op="D" OR tip_op="C" DEFAULT "D", ;valoare N(10), ;FOREIGN KEY simbol TAG simbol REFERENCES conturi)

    CLOSE TABLESCLOSE DATABASES

    Baza de date conine tabelele i , ntre care s-a definit o relaie detipul 1:n pe baza valorilor cmpului ce apare n ambele tabele. Ambele tabele sunt indexate dupcmpul , pentru tabela primar s-a generat o etichet index de tip cheie primar, iar pentru tabelulreferit s-a creat un index normal (Regular), n conformitate cu tipul relaiei 1:n.

    Odat creat tabela , se poate apela la comenzile COPY STRUCTURE EXTENDED TO iCREATE FROM pentru a crea o nou tabel, , cu o structur identic, utiliznd urmtoareasecven de comenzi :

  • 7/30/2019 54611780-Atestat-FoxPro

    18/62

    USE COPY STRUCTURE EXTENDED TO CREATE FROM

    3. Posibiliti de indexare ulterioar crerii tabelei

    INDEX ON TAG [UNIQUE | CANDIDATE] [ASCENDING | DESCENDING]

    Comanda INDEX ON nu permite definirea unui index de tip cheie primar, foarte important nproblemele ce vizeaz integritatea referenial a tabelelor legate ntre ele prin relaii. Pe baza valorilor lui, care poate reprezenta un cmp sau o combinaie de cmpuri ale tabelei curent deschise, se poategenera o , n cadrul indexului structural ataat tabelei (.CDX), de tip unic sau candidat.

    4. Activarea unui index

    O tabel poate avea mai muli indeci asociai (etichete index), dar numai unul va fi activ la unmoment dat. Ordinea n care va fi parcurs tabela este dat de indexul activ.

    SET INDEX TO [ASCENDING | DESCENDING]

    5. Definiri ulterioare de relaii temporare ntre tabele

    Relaiile temporare sau dinamice sunt create prin comenzi introduse n programele de prelucrare, fiinddisponibile numai la rularea acestora. n afara programelor de prelucrare, aceste relaii nu exist. Printr-orelaie temporar pot fi legate att dou tabele ce fac parte dintr-o baz de date, ct i tabele independente.Spre deosebire de relaiile permanente ntre tabele legate, cele temporare nu sunt memorate n baza dedate .DBC.

    Pentru stabilirea unei relaii temporare ntre dou tabele oarecare, acestea trebuie mai nti deschise ndou zone de lucru distincte. Relaia stabilit ntre cele dou tabele nu este o relaie de egalitate, ci una desubordonare: una dintre tabele va fi primar (printe), iar cealalt referit (copil). Mutarea indicatorului denregistrri al tabelei printe pe o anumit nregistrare determin mutarea indicatorului de nregistrri altabelei copil pe nregistrarea corespunztoare, dar nu i invers.

    nainte de stabilirea relaiei, pe lng deschiderea celor dou tabele mai trebuie ndeplinit o condiie,i anume indexarea tabelei copil cu aceeai cheie de indexare cu cea a relaiei.

    OPEN DATABASE USE ORDER IN 1USE ORDER IN 2

    SELECT 1SET RELATION TO INTO 2SET SKIP TO < prelucrri >SET SKIP TOSET RELATION TOCLOSE TABLESCLOSE DATABASES

  • 7/30/2019 54611780-Atestat-FoxPro

    19/62

    face parte din structura tabelului primar , iar valorile sale se vor cuta printrevalorile cmpului din tabela referit . Pe baza valorilor din s-a definit indexul. Cu aceste considerente, se poate defini o relaie temporar ntre i conform grupului de comenzi Visual FoxPro de mai sus. Relaia dintre cele dou tabele funcioneaz nmodul urmtor: mutarea indicatorului de nregistrri din tabelul primar determin evaluarea succesiv a lui

    . n funcie de valorile acestuia, indicatorul de nregistrri al tabelului referit se va plasa pe primanregistrare pentru care valoare () = valoare ().

    Exemplificnd aceast metodologie pentru baza de date din figura 1.8, vom obine urmtoareasecven de comenzi :

    OPEN DATABASE contaUSE conturi ORDER simbol IN 1USE operatii ORDER simbol IN 2SELECT 1SET RELATION TO simbol INTO 2SET SKIP TO operatiiSET SKIP TOSET RELATION TOCLOSE TABLESCLOSE DATABASES

    1.3. Modificarea structurii tabelelor1.3. Modificarea structurii tabelelorModificarea structurii unei tabele se poate efectua n mod interactiv cu ajutorul comenziiMODIFY

    STRUCTUREsau prin intermediul comenzii SQLALTER TABLE.

    Prima comand activeaz fereastra Table Designer (figura 1.2), n cadrul creia se vizualizeaz

    structura tabelei precizate prin comand.MODIFY STRUCTURE

    n cadrul acestei ferestre se pot aduga sau terge cmpuri i se pot modifica cele existente din punctde vedere al numelui, tipului i mrimii. Totodat se poate interveni asupra indecsilor existeni precum iasupra restriciilor impuse tabelei.

    n ceea ce privete comanda SQL ALTER TABLE trebuie fcute urmtoarele precizri:

    1. Adugarea unui nou atribut

    ALTER TABLE

    ADD [COLUMN] ( [, ])[NULL | NOT NULL][CHECK [ERROR ]][DEFAULT ][PRIMARY KEY | UNIQUE][REFERENCES [TAG ]]

    Se va modifica structura tabelei specificate prin prin adugarea cmpului .Acesta va prezenta caracteristicile definite prin clauzele ataate lui n sintaza comenzii.

    2. tergerea unui atribut

    ALTER TABLE

    DROP [COLUMN]

  • 7/30/2019 54611780-Atestat-FoxPro

    20/62

    Nucleul SQL din Visual FoxPro, spre deosebire de alte sisteme de gestiune a bazelor de daterelationale, prevede posibilitatea de tergere a unui cmp din structura unei tabele.

    6. Modificarea numelui/tipului/dimensiunii unui atribut

    ALTER TABLE RENAME COLUMN TO

    ALTER TABLE ALTER [COLUMN] ( [, ])

    Este permis modificarea tipului oricrui cmp din structura unei tabele. Dac cmpul coninevalori, se va ncerca conversia acestora n conformitate cu noul tip stabilit pentru cmp. n cazul uneiincompatibiliti ntre noul tip i vechiul tip al cmpului, informaia din cmpul supus modificrii de tip seva pierde. Nu este recomandat modificarea tipului cmpurilor de tip cheie primar sau candidat.

    n ceea ce privete lungimea cmpurilor, acestea pot fi deopotriv mrite sau micorate, lamicorare trebuie avut ns n vedere trunchierea ce opereaz inevitabil.

    7. Adugarea/modificarea/anularea valorii implicite

    ALTER TABLE ALTER [COLUMN] SET DEFAULT

    ALTER TABLE ALTER [COLUMN] DROP DEFAULT

    8. NULL i neNULL

    Pentru unele atribute poate fi instituit la crearea tabelei obligativitatea valorilor nenule. n timp,aceasta poate fi modificat ntr-un sens sau n cellalt.

    ALTER TABLE ALTER [COLUMN] NULL | NOT NULL

    9. Adugarea/anularea restriciilor

    Restriciile de tip cheie primar (PRIMARY KEY), de unicitate (UNIQUE), referenial (FOREIGNKEY) i de comportament (CHECK) pot fi declarate ulterior crerii tabelei sau pot fi anulate.

    Stabilirea unei chei primare i crearea indexului corespunztor

    ALTER TABLE ADD PRIMARY KEY TAG

    Anularea cheii primare i a indexului aferent acesteia

    ALTER TABLE DROP PRIMARY KEY

    Adugarea unui index candidat

    ALTER TABLE ADD UNIQUE TAG

    Anularea unui index candidat

  • 7/30/2019 54611780-Atestat-FoxPro

    21/62

    ALTER TABLE DROP UNIQUE TAG

    Stabilirea unei noi restricii de validare pentru un cmp

    ALTER TABLE ALTER [COLUMN]

    ADD CHECK [ERROR ]

    Anularea restriciei de validare stabilite pentru un cmp

    ALTER TABLE ALTER [COLUMN]

    DROP CHECK

    Adugarea unei relaii permanente

    ALTER TABLE

    ADD FOREIGN KEY TAG REFERENCES [TAG ]

    Anularea unei relaii permanente

    ALTER TABLE DROP FOREIGN KEY TAG

    1.4 Utilizarea macrosubstituiei n referirea1.4 Utilizarea macrosubstituiei n referireatabelelor i a cmpurilor acestoratabelelor i a cmpurilor acestora

    Macrosubstituia permite printr-un mecanism de adresare indirect referirea dinamic, n timpulexecuiei comenzii, a unei tabele sau a unui cmp al acesteia.

    nfigura 1.9 se propune o baz de date i o procedur de eviden a intrrilor/ieirilor de materialct i a stocului curent. Materialul se specific cu ajutorul unui control de tip ComboBoxlegat de cmpul"cod" al tabelei "stocuri". Se vor seta corespunztor valorile proprietilor ControlSource (stocuri.cod),

    RowSource Type (6-Fields) i RowSource (stocuri.cod) ale controlului. Luarea n gestiune a unui noumaterial (tastarea unui nou cod n zona de editare a combobox-ului) implic crearea unei noi tabelecorespunztor setrilor din forma de introducere.

    procedura frmmain_Activateopen database gest_mat

    use stocuri order cod alias stocuri in 1procedura cmdInregistrare_Click

    mat = val (thisform.cbocod.text)if thisform.optiongroup1.option1.value = 1

    nume_tabela = rtrim(thisform.cbocod.text) + "_Intrari.dbf"cantitate = "Intrare"

    elsenume_tabela = rtrim(thisform.cbocod.text) + "_Iesiri.dbf"cantitate = "Iesire"

    endifif not file ((nume_tabela))

    create table &nume_tabela (cod_mat N(10), data_op D(8) default { / / },; &cantitate N(10), foreign key cod_mat tag cod_mat references stocuri)

  • 7/30/2019 54611780-Atestat-FoxPro

    22/62

    useselect 1seek matif not found( )

    append blank

    replace cod with matendifendifselect 2use &nume_tabela alias operatiiappend blankreplace cod_mat with mat,;

    &cantitate with val (thisform.txtcantitate.value),data_op with date( )select 1replace stoc with stoc + operatii.&cantitateuse in 2

    Fig. 1.9 Crearea tabelelor utiliznd macrosubstituia

    procedura cmdQuit_Clickclose tablesclose databasesthisform.release

  • 7/30/2019 54611780-Atestat-FoxPro

    23/62

    1.5 Validri la nivel de cmp i la nivel de1.5 Validri la nivel de cmp i la nivel denregistrarenregistrare

    Fig. 1.10 Tabele legate i reguli de validare

    Fig. 1.11 Definirea regulilor de validare

    Dintr-o baz de date necesar unei contabiliti informatizate fac parte i tabelele plan_ctb isolduri figura 1.10, n prima tabel fiind memorat planul de conturi, iar n cea de-a doua tabel soldurile

  • 7/30/2019 54611780-Atestat-FoxPro

    24/62

    iniiale la nceputul exerciiului contabil. ntre cele dou tabele se definete o relaie de tipul 1 :1 pe bazasimbolurilor conturilor.

    Pentru tabela plan_ctb se vor defini validri la nivel de cmp, iar pentru tabela referit soldurivalidri la nivel de nregistrare. Acestea din urm sunt impuse de faptul c, un cont de activ poate aveanumai un sold iniial debitor, iar un cont de pasiv un sold iniial creditor.

    Condiia de validare la nivel de cmp este dat de expresia

    tip_cont = Activ .or. tip_cont = Pasiv,

    iar regula impus la nivelul nregistrrilor tabelei solduri este urmtoarea :

    plan_ctb.tip_cont = Activ .and. sid >= 0 .and. sic = 0 .or.;

    plan_ctb.tip_cont = Pasiv .and. sic >= 0 .and. sid = 0

    n formularea celei de-a doua condiii s-a apelat la cmpul tip_cont al tabelei plan_ctb, acestlucru fiind posibil datorit relaiei existente ntre cele dou tabele.

    Fig. 1.12 Efectul regulii de validare definite la nivelul nregistrrilor tabelei solduri

    1.6 Crearea dinamic a bazelor de date1.6 Crearea dinamic a bazelor de dateExist situaii n care structura unei baze de date se cunoate doar n momentul execuiei unei

    aplicaiei n funcie de anumite opiuni specificate de ctre utilizator.

    Considerm urmtorul exemplu de eviden a unei situaii scolare figura 1.13. Numrul de

    discipline din fiecare an de studiu se va specifica de ctre utilizator i n funcie de acesta se vor crea tabeleleanuale de eviden scolar.

    Baza de date evid va conine tabela primar date_pers i tabele fiu anul1, anul2, anul3,anul4. n procedura de creare a bazei de date s-au utilizat macrosubstituia i comanda ALTER TABLEdeajustare a structurii tabelelor.

    procedura cmdcreare_Clicknr1 = val(thisform.text1.text)nr2 = val(thisform.text2.text)nr3 = val(thisform.text3.text)nr4 = val(thisform.text4.text)

    for i = 1 to 4nr_note = "nr"+ltrim (str(i))

  • 7/30/2019 54611780-Atestat-FoxPro

    25/62

    nume_tabela = "anul"+ltrim(str(i))create table &nume_tabela (nr_leg N(10) primary key ;

    references date_pers, n1 N(2) check n1>0 and n10 and &nume_camp

  • 7/30/2019 54611780-Atestat-FoxPro

    26/62

    2.1. Deschiderea / nchiderea unei tabele2.1. Deschiderea / nchiderea unei tabeleOrice prelucrare a unei tabele trebuie s fie precedat de operaia de deschidere a acesteia. n urma

    acestei operaii utilizatorul are acces la coninutul tabelei, adic la orice nregistrare a acesteia, cu precizareac, la un moment dat este accesibil doar o singur nregistrare, numit nregistrarea curent. De asemenea,ncheierea oricrei prelucri asupra unei tabele este marcat prin nchiderea acesteia.

    n Visual FoxPro, spre deosebire de versiunile pentru DOS i WINDOS, baza de date seconcretizeaz ntr-un fiier distinct, reprezentnd un mijloc de organizare a unui volum mare de informaientr-o structur coerent. Din punct de vedere logic, o baz de date (.DBC) reprezint o mulime de obiecteconform SGBD-ului folosit pentru gestiunea ei. In sistemul Visual FoxPro, o baz de date poate conineobiecte de tip: tabel (table) sau vedere (view).

    OPEN DATABASE USE

    [IN ][ORDER [TAG]

    [ASCENDINGDESCENDING]][ALIAS ]USE CLOSE TABLESCLOSE DATABASES

    Pentru a opera cu datele dintr-o tabel deja creat, ea trebuie mai nti deschis. La deschidere,sistemul i aloc o zon de memorie special, numit zon de lucru. n aceast zon de memorie suntmemorai o serie de parametri ai tabelei, parametri necesari gestiunii tabelei, ca de exemplu numrulnregistrrii curente, numrul total de nregistrri din tabel etc. ntr-o zon de lucru nu poate fi deschisdect o singur tabel. Lucrul cu dou sau mai multe tabele simultan implic folosirea a dou sau mai multezone de lucru distincte. Visual FoxPro posed o multitudine de zone de lucru (de ordinul zecilor de mii),

    astfel nct, practic, nu exist restricii din acest punct de vedere.Dup deschidere, asupra tabelei se pot executa o serie de operaii de prelucrare dintre care cele mai

    importante sunt: adugarea de noi nregistrri, modificarea unor date din nregistrrile existente, tergereaunor nregistrri, cutarea anumitor date, ordonarea datelor dup diferite criterii etc. Cnd se termin lucrulcu o tabel, aceasta trebuie nchis, eliberndu-se astfel zona de lucru respectiv.

    O observatie important legat de lucrul cu datele din tabele este c operaiile se efectueaz la nivelde nregistrare. Prin urmare, ntr-o tabel nu putem aduga sau terge dect o nregistrare complet. Pentru aine evidena nregistrrii curent prelucrate dintr-o tabel, sistemul folosete o variabil special, numitindicatorul de nregistrri. Aceast variabil indic totdeauna nregistrarea asupra creia va acionaurmtoarea comand.

    Pentru prelucrarea datelor din bazele de date se pot folosi dou metode:

    PRELUCRAREA

    DATELOR

    2

  • 7/30/2019 54611780-Atestat-FoxPro

    27/62

    una interactiv, constnd din utilizarea diferitelor instrumente ale mediului Visual FoxPro.Operaiile de prelucrare sunt realizate prin intermediul interfeei sistemului, sarcina utilizatoruluiconstnd n alegerea de opiuni, ntrebuinarea unor ferestre de dialog etc.; metoda este folositatunci cnd operaiile de prelucrare sunt executate de un cunosctor al mediului i nu n modrepetat (caz n care este mai avantajoas realizarea unui program, a unei forme, care s

    automatizeze operaiile respective); una prin cod sau prin intermediul limbajului FoxPro: aceast metod const n folosireadiferitelor comenzi, fie n diferite programe sau metode ale unor forme, rapoarte etc; realizareaunui sistem informatic necesit folosirea acestei metode, prin construirea unor forme, rapoarte ia altor elemente, n ale cror cmpuri sunt introduse comenzi de prelucrare a datelor din bazelede date.

    Comanda USEdeschide tabela , ce face parte din , n zona de lucru curentsau ntr-o alt zon specificat n comand. Modul de acces la coninutul tabelei, adic modalitatea n care seajunge la nregistrrile acesteia, poate fi:

    secvenial, cnd pentru obinerea unei informaii anumite trebuie s parcurgem toatenregistrrile anterioare;

    direct, cnd putem stabili unde anume pe suport este nregistrarea vizat i o utilizm fr s nepreocupm de nregistrrile anterioare; acest tip de acces este asigurat de o etichet indexadecvat ataat tabelei - ; prin indexare, ordinea fizic a nregistrrilor dintabel nu se modific, se schimb ns modul n care utilizatorul are acces la datele acesteia;prima nregistrare a tabelei indexate o constituie cea corespunztoare celei mai mici(ASCENDING)/mari (DESCENDING) valori a cheii de indexare, iar ultima nregistrare afiierului indexat este cea care conine cea mai mare (ASCENDING)/mic (DESCENDING)valoare a cheii de indexare.

    Pentru tabela nou deschis, se poate defini un pseudonume , ce va putea fi folosit ncomenzile de prelucrare a tabelei, n locul numelui acesteia.

    2.2. Accesul la baza de date2.2. Accesul la baza de date1. Detectarea nceputului respectiv a sfritului unei tabele

    Funciile logice BOF (Bottom Of File) i EOF (End Of File) permit detectarea, n parcurgereatabelei, a nceputului respectiv a sfritului acesteia.

    BOF ([ ])EOF ([ ])

    Tabela, al crei nceput respectiv sfrit se testeaz, poate fi cea curent sau cea specificat prin

    numrul zonei de lucru n care a fost deschis sau prin pseudonumele al ei. Funciile returneazvaloarea logic .T., atunci cnd indicatorul de nregistrri este poziionat la nceputul, respectiv la sfritultabelei respective.

    2. Comenzi de poziionare a indicatorului de nregistrri

    Pentru a ine evidena nregistrrii curent prelucrate dintr-o tabel, sistemul folosete o variabilspecial, numit indicatorul de nregistrri. Aceast variabil indic totdeauna nregistrarea asupra creia vaaciona urmtoarea comand.

    GO TOP | BOTTOM [IN ]

    GO [RECORD] [IN ]SKIP [] [IN ]

  • 7/30/2019 54611780-Atestat-FoxPro

    28/62

    Comenzile GO iSKIPpoziioneaz indicatorul de nregistrri, al tabelei curente sau specificate prin, ntr-o anumit poziie:

    TOP | BOTTOM : mut indicatorul de nregistrri pe prima, respectiv pe ultima nregistrare a

    tabelei; RECORD : mut indicatorul de nregistrri pe nregistrarea cu numrul de ordine dat de

    valoarea lui ; comanda SKIP fr clauza mut indicatorul de nregistrri la nregistrarea urmtoare

    celei curente; dac este o valoare pozitiv, indicatorul de nregistrare va avansa spre sfritul tabelei

    cu poziii, iar dac este negativ, deplasarea se va face spre nceputul tabelei.n cazul tabelelor indexate, prima nregistrare, ultima nregistrare, nregistrarea urmtoare irespectiv precedent sunt date de ctre eticheta index activ.

    3. Comenzi de localizare a nregistrrilor n acces secvenial

    LOCATE FOR ] [WHILE ]

    CONTINUE

    Comanda LOCATEparcurge tabela curent cutnd prima nregistrare pentru care estendeplinit. Dac comanda are succes, funcia RECNO ( ) va returna numrul nregistrrii localizate, iarfuncia FOUND ( ) va lua valoarea logic .T. DacLOCATEgsete o nregistrare, se poate folosi comandaCONTINUEpentru a cuta urmtoarele nregistrri din tabela curent care ndeplinesc condiia . La

    execuia comenzii CONTINUE, procesul de cutare continu de la nregistrarea imediat urmtoare celeigsite anterior. Comanda CONTINUEpoate fi executat repetat pn la detectarea sfritului de fiier saupn la epuizarea domeniului de cutare stabilit prin clauza a comenziiLOCATEsau pn laexecuia unei alte comenziLOCATE.

    Dac LOCATEnu gsete nici o nregistrare corespunztoare, funcia RECNO ( ) va returna ovaloare egal cu numrul total de nregistrri plus 1 (RECCOUNT ( ) + 1), iarFOUND ( ) valoarea .F. nmod implicit, comanda LOCATEcaut prima nregistrare care ndeplinete condiia n ntreagatabel. Se poate reduce domeniul de cutare (ALL) incluznd clauza n sintaxa comenzii, n unadin urmtoarele forme:NEXT,RECORD sauREST. Totodat, se poate limita cutarea incluznd clauzaWHILE n sintaxa comenzii LOCATE, aceasta avnd loc atta timp ct condiia esteadevrat.

    4. Comenzi de localizare a nregistrrilor n acces direct

    SEEK [ORDER [TAG] [ASCENDING | DESCENING]][IN ]

    Comanda SEEKcaut prima nregistrare din tabela curent sau din cea deschis n zona de lucruspecificat prin , pentru care valoarea cheii de indexare este egal cu . Cutarea se

    poate face pe baza etichetei index curente sau prin intermediul celei specificate prin .

    Dac valoarea nu se regsete printre valorile cheii de indexare, dar setarea curentSET

    NEAR are valoarea ON, prin comanda SEEK se va localiza nregistrarea corespunztoare celei maiapropiate -mai mari- valori a cheii de indexare de valoarea expresiei .

  • 7/30/2019 54611780-Atestat-FoxPro

    29/62

    Dac expresia este alfanumeric i nu se regsete exact printre valorile cheii de indexare, darsetarea curent SET EXACTare valoarea OFF,prin comandaSEEKse va localiza nregistrarea pentru care constituie un subir stng al cheii de indexare.

    Numrul nregistrrii localizate prin intermediul comenziiSEEKeste returnat de funciaRECNO ( ),iar funcia logic FOUND ( ) va lua, n aceast situaie, valoarea .T.

    5. Implementarea mecanismului de cutare secvenial i direct

    Fig. 2.1 Interfaa aplicaiei

    nregistrrile localizate prin cutare secvenial sunt vizualizate ntr-o fereastr Browse figura 2.2.

    Fig. 2.2 Cutarea secvenial. Comenzile LOCATE i CONTINUE

    procedura cmdAfisare_Click( )

    open database aplicuse magazin

    do formform2

    do formform3

    LOCATE

    CONTINUE

  • 7/30/2019 54611780-Atestat-FoxPro

    30/62

    locate for val(cod) = val(thisform.txtcod.value)do while found( ) and not eof( )

    browse noedit nodelete title "afisare"continue

    enddo

    useclose databases

    Fig. 2.3 Cutarea direct. Comanda SEEK

    Prima apariie a valorii cutate se localizeaz cu ajutorul comenzii SEEK figura 2.3, celelalteapariii urmndu-i acesteia i putndu-se identifica cu ajutorul comenzii SKIP.

    procedura cmdAfisare_Click( )open database aplicuse magazin order codrseek thisform.cbocod.valueif found( )

    do while cod = thisform.cbocod.value and not eof( )browseskip

    enddoendif

    SEEK

  • 7/30/2019 54611780-Atestat-FoxPro

    31/62

    close databases

    6. Tehnici de parcurgere a tabelelor

    Exist diferite modaliti de acces la nregistrrile unei tabele n vederea implementrii algoritmilor de

    prelucrare a datelor coninute de ctre acestea.

    comandaSCANENDSCAN

    OPEN DATABASE USE [ORDER ]SCAN [] [FOR ] WHILE ]

    [LOOP][EXIT]

    ENDSCANCLOSE TABLES

    CLOSE DATABASESComanda SCANENDSCAN realizeaz parcurgerea tabelei curente i executarea operaiilor

    pentru fiecare nregistrare a tabelei care aparine domeniului specificat prin, clauzaFOR sau WHILE.

    Se poate reduce domeniul de prelucrare (ALL) incluznd clauza n sintaxa comenzii, nuna din urmtoarele forme:NEXT,RECORD sauREST.

    Totodat, se poate limita prelucrarea nregistrrilor incluznd clauza WHILE n sintaxacomenzii SCANENDSCAN, aceasta avnd loc atta timp ct condiia este adevrat. Clauza

    FOR limiteaz prelucrarea nregistrrilor la cele care ndeplinesc condiia din cadruldomeniului luat n considerare.

    comenzileDO WHILEENDDO i FOR ENDFOR

    OPEN DATABASE USE [ORDER ]

    DO WHILE NOT EOF ( )SKIP

    ENDDO

    n = RECCOUNT ( )FOR i = 1 TO n

    SKIP

    ENDFOR

    CLOSE TABLESCLOSE DATABASES

    7.Vizualizarea coninutului tabelelor

    comenzile ? i ??

    ? | ?? [ [ PICTURE ] [FUNCTION ][ AT ]

    [, ..]]

  • 7/30/2019 54611780-Atestat-FoxPro

    32/62

    Comenzile ? i ?? afieaz rezultatul expresiilor , pe ecran, n cadrul formei sauferestrei curent active. Comanda ? face ca afiarea s aib loc de la nceputul liniei urmtoare celei curente,iar ?? determin ca aceasta s aib loc ncepnd cu poziia curent a cursorului. Prin clauza ATse poateimpune i o anumit coloan de nceput a afirii. , vor fi afiate conform formatului deafiare specificat printr-o clauz PICTURE sau FUNCTION.

    comanda @ SAY

    @,SAY [PICTURE ][FUNCTION ][SIZE ,][FONT [,]][STYLE ][COLOR COLOR SCHEME ]

    Comanda permite afiarea pe ecran, ncepnd cu o anumit poziie i ntr-un anumit format, a valoriiexpresiei .

    comenzile DISPLAYiLIST

    DISPLAY[[FIELDS] ][] [FOR ] [WHILE ][OFF][TO PRINTER | TO FILE ]

    Comanda permite vizualizarea coninutului tabelei curente, n mod implicit fiind afiat coninutulnregistrrii curente n cadrul formei sau ferestrei curent active. Se poate limita afiarea la anumite cmpuri

    prin introducerea clauzei [FIELDS] n sintaxa comenzii. Afiarea coninutul unui cmp detip memo este posibil numai prin includerea numelui acestuia n .

    Se poate extinde domeniul de afiare prin includerea clauzei n sintaxa comenzii, n unadin variantele:ALL,NEXT,RECORD sauREST.

    Totodat, se poate limita afiarea nregistrrilor incluznd clauza WHILE n sintaxacomenzii DISPLAY, aceasta avnd loc atta timp ct condiia este adevrat. Clauza FOR limiteaz afisarea nregistrrilor la acelea care ndeplinesc condiia din cadrul domeniuluiluat n considerare.

    Prin introducerea clauzei OFF n sintaxa comenzii DISPLAY se omite afiarea numerelor denregistrare n faa nregistrrilor vizualizate. Inregistrarile vizate pot fi tiprite la imprimant, prinintroducerea clauzei TO PRINTER n sintaxa comenzii sau pot fi memorate ntr-un fiier separat (clauza TO

    FILE).

    LIST[[FIELDS] ][] [FOR ] [WHILE ][OFF][TO PRINTER | TO FILE ]

    Comanda LIST este similar comenzii DISPLAY, n mod implicit fiind ns vizualizat ntregulconinut al tabelei curente.

    5. Introducerea datelor de la tastatur

  • 7/30/2019 54611780-Atestat-FoxPro

    33/62

    comenzileINPUTiACCEPT

    INPUT ACCEPT [] TO

    Comenzile permit introducerea de la tastatur a unei valorii pentru variabila , textul

    precednd pe ecran poziia de introducere a acesteia. Particularitatea comenziiACCEPTconst n faptul c,prin intermediul ei se pot introduce de la tastatur numai valori alfanumerice.

    comanda@ GETi combinaia@ SAY GET

    @,GET [PICTURE][FUNCTION ][DEFAULT ] [MESSAGE ][WHEN ][RANGE [][,]] [VALID ][FONT [,]][STYLE ][SIZE ,]

    [COLOR COLOR SCHEME ]

    Comanda permite editarea unei variabile sau a unui cmp al unei tabele fie la coordonatele specificateprin ,, fie la poziia urmtoare de pe ecran care urmeaz dupSAY(atunci cnd comenzile SAYi GET sunt grupate mpreun). O comand @GET (sau grup de comenzi @GET) este urmat de ocomand READ, care va declana citirea cmpului GET i atribuirea valorii citite lui .

    6. Adugarea unor noi nregistrri n cadrul unei tabele

    comenzile de tipAPPEND

    APPEND [BLANK] [IN ]

    Comanda adaug o nregistrare la sfritul tabelei cuente sau celei specificate prin IN. ClauzaBLANKadaug o nregistrare vid. Comanda APPEND fr BLANKeste folosit pentru adugareade nregistrri prin intermediul unei ferestre de editare.

    APPEND FROM [FIELDS ][FOR ][DELIMITED WITH TABWITHWITH BLANK][TYPE][DIFFW2MODPDOXRPDSDFSYLKWK1WK3

    WKSWR1

    WRK

    XLS]

    Tabela curent poat fi mbogit cu noi nregistrri, al cror coninut va fi preluat dintr-un alt fiierspecificat. reprezint cmpurile ale cror valori vor fi adugate n tabela curent.

    n mod implicit sunt preluate din toate nregistrrile i adugate la coninutul tabelei curente.Se poate limita setul de nregistrri din care se vor aduga la acelea care ndeplinesc o anumitcondiie . Dac fiierul surs nu este o tabel de date (.DBF), atunci trebuie specificat tipul acestuian conformitate cu opiunile oferite de ctre sintaxa general a comenzii.

    comandaINSERT -SQL

    INSERT INTO [( [, , ...] )]

    VALUES ( [,, ...])

  • 7/30/2019 54611780-Atestat-FoxPro

    34/62

    Comanda INSERT SQL adaug o nregistrare n . Cmpurile specificate ale noiinregistrri se vor completa cu valorile precizate. Dac tabela nu este deschis, ea se va deschide ntr-o nouzon de lucru, n mod exclusiv.

    7. Modificarea coninutului tabelelor

    comandaREPLACE

    REPLACE WITH [ADDITIVE][, WITH [ADDITIVE] ][][FOR ] [WHILE ]

    Comanda REPLACE actualizeaz nregistrrile tabelei curente prin nlocuirea datelor din cmpurile, , cu valorile expresiilor , Prin ataarea clauzei ADDITIVEcmpului specificat n comanda REPLACE, la coninutul curent al acestuia se va aduna valoarea

    expresiei .n mod implicit, sunt afectate cmpurile nregistrrii curente. Se poate extinde domeniul de aciune al

    comenzii prin includerea clauzei n sintaxa comenzii, n una din variantele: ALL, NEXT,RECORD sauREST.

    nregistrrile din afectate de comanda REPLACE pot fi numai acelea pentru carecondiia din clauza FOR este ndeplinit. Totodat, nlocuirea stabilit prin comanda REPLACE

    poate avea loc atta timp ct condiia este adevrat. Deoarece comanda REPLACE actualizeaz iindex-urile active, este important ca operaia de nlocuire s nu fie efectuat asupra cmpului cheie atuncicnd exist o clauz ,FOR sau WHILEefectiv.

    Pot fi actualizate prin REPLACE i cmpuri din tabele deschise n alte zone de lucru, dac pentru

    acestea se va utiliza sintaxa ..

    comanda UPDATE - SQL

    UPDATE [] SET = [, SET = ...][WHERE ]

    Modificarea valorilor cmpurilor unei tabele se poate realiza cu ajutorul comenzii UPDATE SQL.Modificrile se vor efectua n i vor afecta cmpurile , , ... ale acesteia

    conform setrilor stabilite. Prin includerea clauzei WHERE n sintaxa comenzii, se va limita domeniulnregistrrilor luate n considerare la acelea care ndeplinesc condiia .

    8. tergerea de nregistrri dintr-o tabel

    comenzileDELETEiPACK

    DELETE [] [FOR ] [WHILE ]

    Comanda marcheaz nregistrri pentru tergere din tabela curent deschis. nregistrrile marcate potfi recuperate prin comandaRECALL.

    DELETE FROM []

  • 7/30/2019 54611780-Atestat-FoxPro

    35/62

    [WHERE ]

    Din tabela specificat se vor terge logic toate nregistrrile pentru care condiia estendeplinit.

    PACK

    Comanda PACK se folosete pentru tergerea fizic a nregistrrilor care anterior au fost marcatelogic.

    9. Operaii de baz cu o tabel. Exemplificare

    Ne propunem s prezentm o variant nepretenioas de implementare a operaiilor de baz asupradatelor dintr-o tabel tabel1 cu ajutorul comenzilor prezentate n cadrul acestui paragraf figura 2.4. Pesuprafaa unei forme distincte se proiecteaz o machet de introducere a datelor cu ajutorul combinaiei

    @SAYGET. Intregul coninut al tabelei va fi vizualizat cu ajutorul unui control de tip GRID respectiv cuajutorul comenzii @SAY. In cea de-a doua variant este necesar s se implementeze algoritmul de

    parcurgere al tabelei nregistrare cu nregistrare. Totodat este implementat i operaia de tergere aanumitor nregistrri specificate.

    Fig. 2.4 Inregistrare date cu ajutorul comenzilor @SAY/GET

    procedura frminreg_Activate

    open database aplic3use tabel1opt = "d"do while upper (opt) = "D"

    append blank@ 2,2 say "Cod client:" get cod_cl picture "9999"@ 3,2 say "Nume :" get nume function "!xxxxxxxxxxxxxxx"@ 4,2 say "Prenume:" get prenume function "!xxxxxxxxxx"@ 5,2 say "Factura:" get fact picture "99999999"@ 6,2 say "Cantitate:" get cant picture "9999999999"@ 7,2 say "Pret:" get pret picture "99999999"@ 8,2 say "Data facturii:" get data_fact@ 11,2 say "Dorit sa continuati introducerea de date?D/N" get optread

  • 7/30/2019 54611780-Atestat-FoxPro

    36/62

    replace valoare with cant*pretenddouseclose databases

    Fig. 2.5 Afiarea cu ajutorul unui control de tip GRID

    procedura frmAfisare_Activateopen database aplic3use tabel1go top@ 2,1 say "Numele"@ 2,17 say "Valoare"

    @ 2,33 say "Data facturii"linie = 3do while not eof( )

    @ linie,1 say nume@ linie,17 say valoare@ linie,33 say data_factlinie = linie+1

    skipenddo

    Fig. 2.6 Afiarea cu ajutorul comenzii @SAY useclose databases

  • 7/30/2019 54611780-Atestat-FoxPro

    37/62

    Fig. 2.7 Controlul de tip Grid i operaia de tergere a nregistrrilor

    Operaia de tergere a nregistrrilor este implementat cu ajutorul unui control de tip GRID, prinintermediul cruia este vizualizat coninutul tabelei tabel1. nregistrarea ce urmeaz a fi ters seselecteaz n cadrul controlului de tip GRID prin poziionare pe o anumit linie a acestuia, iar operaiile ceurmeaz a fi executate vor fi incluse n corpul procedurii eveniment AfterRowColChange asociate grid-ului.

    procedura frmstergere_Activatepublic pozthisform.cmdstergere.visible = .F.open database aplicatie

    procedura grid1_AfterRowColChangepoz = recno( )if deleted( )

    thisform.cmdstergere.visible = .F.cls

    elsethisform.cmdstergere.visible = .T. ( * )

    endif

    Controlul de tip GRID afieaz toate nregistrrile tabelei asociate, cele terse logic prin comenzi de

    tipDELETE fiind marcate corespunztor. Distincia ntre o nregistrare efectiv i una tears logic se poateface cu ajutorul funciei logiceDELETED( ).

    procedura cmdstergere_Click ( ** )go poz@ 7,60 say "Nume: " + nume@ 8,60 say "Valoare: " + ltrim(str(valoare))thisform.command1.visible = .F.on key label del delete

    Pe ecran sunt afiate informaii extrase din nregistrarea selectat, pentru tergere urmnd a se apsa

    tasta . Conform specificrii efectuate prin comanda ON KEY LABEL, comanda DELETE va fiexecutat dup apsarea acestei taste.

    ( * )( ** )

  • 7/30/2019 54611780-Atestat-FoxPro

    38/62

    procedura cmdintoarcere_Clickclose tablesuse tabel1

    packuseclose databaseson keythisform.release

    2.3. Comenzile2.3. Comenzile BROWSEBROWSE,, CHANGECHANGE ii EDITEDITBROWSE

    [FIELDS [, ...]][FONT [, ]] [STYLE ][FOR ][FREEZE ][KEY

  • 7/30/2019 54611780-Atestat-FoxPro

    39/62

    Fereastra Browse poate fi mprit n dou subferestre (partiii) de vizualizare, limita dintre cele douferestre fiind specificat printr-un numr de coloan PARTITION . Dac se apeleaz la clauza

    LEDIT/REDIT, atunci partiia (subfereastra) stnga/dreapt va corespunde modului EDIT de afiare,partiia dreapt/stng fiind n modul standard Browse de afiare.

    n mod implicit, n bara de titlu a ferestrei Browse apare numele tabelei vizualizate. Se poate impune

    un text oarecare prin intermediul clauzei TITLE.Clauza WIDTH impune limea coloanelor de afiare din ferestra Browse, indiferent de

    dimensiunea cmpurilor tabelei. n cazul cmpurilor de dimensiuni mai mari dect , coloaneleaferente acestora vor fi prevzute cu bare de difilare pe orizontal.

    Comenzile CHANGE iEDITprezint o sintax similar lui BROWSE, fereastra de vizualizare aconinutului tabelei fiind ns diferit.

    CHANGE | EDIT[FIELDS [, ...]][FONT [, ]] [STYLE ][ [FOR ] [WHILE ][FREEZE ][KEY respectiv

    la acelea care nu ndeplinesc . n mod implicit, cmpurile de tip memo sunt ignorate de ctrecomanda SCATTER. Pentru a transfera i coninutul acestor cmpuri, se va introduce clauza MEMO nsintaxa comenzii.

    Clauza TO specific tabloul n care se copiaz coninutul cmpurilor nregistrrii curente:primul element al tabloutui va conine valoarea primului cmp, al doilea element al tabloului valoarea celuide-al doilea cmp, etc. Dac tabloul are mai multe elemente disponibile dect cmpuri n nregistrare,elementele nefolosite rmn neschimbate. Dac tabloul nu exist sau dimensiunea sa este prea mic, el estecreat automat, tipurile de date ale elementelor tabloului vor fi cele ale cmpurilor de unde se copiazconinutul. Clauza TO BLANKcreaz un tablou cu elemente vide de acelai tip i de aceeaidimensiune ca i cmpurile tabelei curente. ClauzaMEMVAR determin transferul coninutului cmpurilortabelei curente ntr-un set de variabile, pentru fiecare cmp transferat generndu-se o variabil cu acelainume ca i cmpul respectiv, de acelai tip i de aceeai dimensiune ca acesta. O astfel de variabil, obinutn urma execuiei unei comenziSCATTER, se refer utiliznd notaia

  • 7/30/2019 54611780-Atestat-FoxPro

    40/62

    M..ClauzaMEMVAR BLANKcreeaz un set de variabile fr coninut.

    GATHER FROM | MEMVAR

    [FIELDS [, ...]| FIELDS LIKE | FIELDS EXCEPT ] [MEMO]

    Comanda mut coninutul unui set de variabile sau al unor elemente de tablou n cmpurilenregistrrii curente, fiind opus comenziiSCATTER.

    2.5 Dezvoltarea aplicaiilor. Interfee vizuale2.5 Dezvoltarea aplicaiilor. Interfee vizualeO aplicaie Visual FoxPro este o aplicaie dirijat de evenimente, respectnd regulile de comportare a

    aplicaiilor sub sistemul de operare Windows. Dezvoltarea unei aplicaii ncepe cu proiectarea interfeeivizuale a acesteia i continu cu formularea procedurilor eveniment necesare implementrii aplicaiei.

    10. O aplicaie elementar cu forme de tip SDI

    Interfaa aplicaiei este proiectat n stil SDI (Single Document Interface), constnd din trei formeindependente. Forma principal conine trei butoane de comanda cmdcreare, cmdadaugare icmdvizualizare. Acestea permit utilizatorului executarea unui click pe ele pentru a ndeplini anumite aciuni.Ori de cte ori utilizatorul execut un click pe un buton de comand, procedura corespunztoareevenimentului Click este invocat. Pentru a ndeplini aciunea dorit, se va plasa codul respectiv n

    procedura evenimshameless.us.s01e10.hdtv.xvid-fqmentului Click figura 2.8.

    Se propune utilizarea comenzii CALCULATE pentru numerotarea liniilor unei facturi i ndeterminarea valorii totale a acesteia . Comanda va efectua calculele indicate de utilizator prin intermediul

    expresiilor , , , n formularea crora se pot utiliza funcii statistice i/sau financiarestandard, cum ar fiAVG, CNT,MAX,MIN,NVP, STD, SUMi VAR.

    CALCULATE [expr2 ][] [FOR ] [WHILE ][TO [ ] TO ARRAY ]

    Operaiile specificate se vor aplica asupra valorilor unor cmpuri ale tabelei curent deschise i/sauvariabile. Prelucrarea se poate limita la nregistrrile care aparin unui anumit i/sau ndeplinesco anumit condiie i/sau prelucrarea poate avea loc atta timp ct o anumit condiie rmne adevrat. Rezultatul poate fi memorat n variabile sau ntr-un tablou.

    procedura - cmdcreare_Clickcreate table linie_factura (nr_factura N(8), nr_linie N(2), cod_material N(8),;

    pret N(8),cantitate N(8))use

  • 7/30/2019 54611780-Atestat-FoxPro

    41/62

    Fig. 2.8 Evidena facturilor

    procedura - cmdadaugare_Clickdo form frmadaugarethisform.release

    procedura - cmdvizualizare_Clickdo form frmvizualizarethisform.release

    Introducerea liniilor unei facturi are loc prin intermediul unei forme distincte, pe care sunt plasatecontroale de tip caset de text. Coninutul curent al unei casete de text este dat de valoarea proprietii Valuea acesteia. Instruciunile de iniializare a formei se vor ataa procedurii evenimentActivate.

    procedura - frmadaugare_Activatethisform.txtnrfactura.value = ""thisform.txtcod.value = ""thisform.txtpret.value = ""thisform.txtcantitate.value = ""use linie_factura

    Numrul noii linii se calculeaz n funcie de poziiile existente pe factur.

    procedura - cmdinreg_Clickset talk offlinie = 0

    calculate max(nr_linie) for nr_factura = val(thisform.txtnrfactura.value) to linieappend blank

    7

  • 7/30/2019 54611780-Atestat-FoxPro

    42/62

    replace nr_factura with val(thisform.txtnrfactura.value)replace nr_linie with linie + 1replace cod_material with val(thisform.txtcod.value)replace pret with val(thisform.txtpret.value)replace cantitate with val(thisform.txtcantitate.value)thisform.txtnrfactura.value = ""thisform.txtcod.value = ""thisform.txtpret.value = ""thisform.txtcantitate.value = ""

    procedura cmdrev_Clickusethisform.releasedo form frmoptiuni

    Vizualizarea facturii specificate prin nr are loc ntr-o fereastr Browse. Totodat se va calculavaloarea total a facturii i se va afia n bara de titlu a acesteia.

    procedura frmvizualizare_Activateset talk offnr = 0total = 0use linie_factura@2,10 say "NR. FACTURA: " get nr picture '99999999'readcalculate sum(pret*cantitate) for nr = nr_factura to totaltitlu = 'Factura: ' + ltrim(str(nr)) + ' Total: ' + ltrim(str(total))

    browse fields nr_linie,cod_material,pret,cantitate nomodify noappend nodelete;title titlu for nr = nr_factura

    useclearset talk on

    2. Combinarea formelor i a ferestrelor WINDOW

    Crearea unei ferestre utilizator, specificarea atributelor i a caracteristicilor sale se realizeaz princomanda DEFINE WINDOW. Ferestrele utilizate sunt create ntr-o etap distinct activrii i afirii lor peecran prin comenzile ACTIVATE WINDOW i SHOW WINDOW. Ferestrele astfel definite i activate vorrmne afiate pe ecran pn la executarea unei comenzi DEACTIVATE WINDOW sau HIDE WINDOW.

    DEFINE WINDOW FROM TO AT SIZE [IN [WINDOW] IN SCREEN]

    ACTIVATE SHOWDEACTIVATEHIDE WINDOW

    Este implementat att operaia de nregistrare a intrrilor/ieirilor de material ct i actualizareastocului curent. Materialul se specific cu ajutorul unui control de tip list derulant ComboBoxce afieazo list cu codurile tuturor materialelor din gestiune. Cele trei controale cbocod, txtpreti txtstoc sunt legatede cmpurile tabelei stocuri, astfel nct n casetele de text s fie preluat automat informaia din

    nregistrarea ce conine codul materialului selectat.

    8

  • 7/30/2019 54611780-Atestat-FoxPro

    43/62

    Totodat, ntr-o fereastrBrowse sunt afiate operaiile de intrare/ieire pentru materialul ales. Oricemodificare n cadrul ferestreiBrowse se va reflecta i n actualizarea stocului curent dup nchiderea acesteiferestre. FereastraBrowse se va deschide n cadrul unei ferestre utilizator definite prinDEFINE WINDOW.

    Legarea unui control de un cmp dintr-o tabel deschis este posibil prin setarea corespunztoare avalorii proprietii ControlSource (stocuri.cod) a controlului respectiv. n ceea ce privete controlul de tipComboBox, lista de elemente ataat acestuia se genereaz conform specificrilor fcute prin proprietile

    RowSource Type(6-Fields) iRowSource (stocuri.cod) ale controlului.

    Fig. 2.9 Interfaa aplicaiei de gestiune a stocurilor

    procedura - frmlocaliz_Loadset talk off

    public p

    open database magazieuse stocuri order cod alias stocuri in 1use io order cod alias io in 2

    p = 0

    procedura frmlocaliz_Activateif p = 1

    wait ""endifthisform.txtpret.visible = .F.thisform.txtstoc.visible = .F.thisform.lblpret.visible = .F.

    thisform.lblstoc.visible = .F.n fereastra utilizator op se vor afia toate ntrrile/ieirile ale materialului cod_spec. Deoarece, n

    fereastra Browse se afieaz