Sunteți pe pagina 1din 127

Ctlin Tnase

FoxPro - Note de curs

Noiuni generale
O COLECIE de date reprezint un set de date privitoare la o anumit entitate (fenomen, proces, obiect, colectivitate etc.). De exemplu, un catalog este o colecie de date privitoare la un colectiv de elevi. Obiectele unei colecii pot fi identificate prin nume sau poziie. ntre obiectele unei colecii sau ntre colecii pot exista relaii care pot determina anumite structuri ce permit simplificarea prelucrrii. O relaie unidirecional permite obinerea unei valori plecnd numai de la o componentcolecie (printe). O relaie bidirecional permite obinerea acelorai date plecnd de la ambele colecii (printefiu). O STRUCTUR DE DATE = o colecie pe care s-au definit relaii i care permite selectarea i identificarea elementelor. Accesul la o dat oarecare a unei colecii poate fi: 1 secvenial implic parcurgerea tuturor datelor ce preced data solicitat; 2 direct presupune determinarea poziiei datei solicitate. Operaii asupra unei structuri 1 creare (memorare pe un suport a datelor); 2 consultare (acces la date pentru prelucrare); 3 actualizare (adugri, tergeri, modificri de componente); 4 copiere (duplicarea structurii pe un alt suport); 5 ventilare (desfacerea structurii n dou sau mai multe structuri); 6 fuzionare (combinarea a dou sau mai multe structuri); 7 sortare (aranjarea datelor dup anumite criterii). O structur poate fi: - omogen (datele sale sunt de acelai tip) - neomogen (datele sunt de tipuri diferite) - static (obiectele structurii rmn nemodificate i n aceeai ordine) - dinamic (structura se modific). Datele pot fi organizate n: 1 fiiere de aplicaii gestionate de Limbaje De Programare (LDP) algoritmice (COBOL, Fortran, Pascal, C). Dezavantaje: Datele pot fi accesate doar cu ajutorul programelor scrise pentru anumite cerine. Modificarea unei date presupune modificarea tuturor fiierelor care conin data respectiv. 2 sisteme de fiiere programele care au legturi ntre ele gestioneaz n comun aceleai fiiere. O anumit dat este definit i prelucrat doar ntr-un singur loc. Dezavantaj: dependena dintre modul de organizare a datelor i programul care exploateaz aceste date (reorganizarea datelor presupune rescrierea unor poriuni de program sau a ntregului program). 3 baze de date (BD) colecii unice la care pot avea acces diveri utilizatori, nu numai programatori, pentru consultri sau modificri ale datelor. BD sunt devenit independente de programele care descriu structura logic a datelor. Un sistem de gestiune a bazelor de date (SGBD) ofer un sistem de proceduri (set de programe) de gestionare, care permit accesul la date att al programatorilor, ct i al altor categorii de utilizatori. Un SGBD este un sistem informatic specializat n prelucrarea unui volum mare de date. Dicionarul BD (catalogul sistemului sau repertoarul datelor) = fiier de descriere global a BD, ce conine informaii despre structurarea datelor i restriciile lor. Lucrul cu BD se face exclusiv prin acest dicionar. Este posibil astfel o gestiune independent a structurii BD, care se numete nivel virtual de organizare a datelor. Exist dou niveluri de independen: 1 independen logic (permite modificarea structurii virtuale, fr modificarea programelor de aplicaie); 2 independen fizic (permite modificarea organizrii fizice, pe suport, a datelor, fr schimbarea structurii virtuale, respectiv a programelor de aplicaii).

Ctlin Tnase

FoxPro - Note de curs

Banca de date = un sistem de BD interdependente, mpreun cu instrumentele informatice folosite pentru exploatarea acestor BD. Organizarea BD sub form de tabele (relaii modelul relaional), a permis utilizatorului s nu se mai preocupe de descrierea cilor de acces la date, aceast sarcin revenind sistemului. Bazele de date distribuite (BDD) permit gestionarea coleciilor mari de date n reele de calculatoare. Se trece de la BD integrate sau mono-user (aflate pe un singur calculator), la BD clientserver (care permit exploatarea n comun a datelor de ctre mai muli utilizatori). SGBD moderne permit prelucrarea paralel (interogri simple, dar numeroase, mpreun cu interogri complexe ale unui volum mare de date). Aceste SGBD faciliteaz: - mprirea unei interogri complexe n module executate de mai multe procesoare; - dirijarea unei interogri simple ctre procesorul legat de discurile ce conin informaia solicitat. BD actuale permit nu numai stocarea informaiilor, ci i operarea cu informaii de toate tipurile (multimedia). Sistemele de BD orientate obiect mbin tehnologia BD relaionale cu tehnologia LDP orientate obiect. BD deductive (baze de cunotine) au aprut ca necesitate a folosirii logicii predicatelor ca metod de introducere a raionamentelor artificiale n sistemele informatice. Depozitul de date (Data Warehouse) = o stocare centralizat a datelor pentru analiz, interogare, luarea deciziilor i stabilirea strategiilor unei firme. BD inteligente mbin tehnologiile clasice ale BD cu Programarea Orientat Obiect - POO, sistemele expert, sistemele hipermedia i regsirea on-line a informaiei.

Baze de date (BD)


BD = o colecie de date operaionale (o colecie de date interconectate, mpreun cu descrierea lor). BD au aprut din necesitatea stocrii i prelucrrii unui volum crescnd de informaii cu ajutorul sistemelor de calcul. Proprietile BD 1 Independena datelor fa de programele de aplicaie (nivelul de descriere este separat de nivelul de utilizare). 2 Redundan minim (datele se memoreaz ntr-un singur loc). 3 Securitatea datelor protecie contra accesrilor neautorizate, tergerilor, distrugerilor 4 Integritatea datelor asigurarea corectitudinii datelor, posibilitatea refacerii versiunilor anterioare. 5 Transparen utilizarea BD, fr cunoaterea ntregii complexiti. 6 Limbaje de cereri pentru selectarea datelor solicitate. 7 Diversitatea criteriilor de regsire a datelor. 8 Faciliti multiuser accesarea datelor din mai multe noduri ale unei reele, de ctre mai muli useri. 9 Accesibilitate accesul la date cu eficien maxim. Tipuri de structuri La sistemele clasice de organizare a datelor existau dou niveluri de organizare: logic i fizic. La BD, apare i nivelul virtual sau extern. Structura virtual (global, extern) se refer la toate datele necesare tuturor utilizatorilor unei BD, n condiii de redundan minim controlat. Acest nivel (date legturi proprieti) este descris ntr-o SCHEM CONCEPTUAL unic, memorat pe un suport fizic i apelat la orice solicitare de date de ctre un program. Schema este realizat de administratorul BD i descrie informaiile din BD. Structura logic = forma n care un user vede datele. Structura logic este descris de o SUBSCHEM. Structura fizic (intern, nivelul elementar) = modul de memorare a datelor pe un suport (disc, band). La acest nivel, structura se numete SCHEM INTERN. Schema memorat se numete model conceptual. Autonomia datelor = posibilitatea modificrii structurii unui nivel, fr a afecta structura nivelurilor superioare. Exist:

Ctlin Tnase

FoxPro - Note de curs

autonomie fizic modificarea arhitecturii BD la nivel intern (fizic), fr schimbarea schemei conceptuale i rescrierea programelor de exploatare a BD. Se face pentru creterea vitezei, portarea BD pe alte sisteme etc. autonomie logic modificarea schemei conceptuale, conform unor noi cerine, fr a rescrie programele de aplicaie. Se face mai greu deoarece programele sunt dependente de structura logic a datelor pe care le consult. O entitate (o clas de obiecte) desemneaz obiecte similare ca structur, dar care se pot deosebi prin trsturi specifice. Entitatea are anumite atribute, care pot defini complet obiectul. Exemplu: entitatea AUTOMOBIL poate fi descris prin atributele: model, tip-motor, form-caroserie, nr. de portiere etc. Din alt punct de vedere, poate fi descris prin: serie-motor, firma productoare, pre etc. Observaie: entitatea va deveni tabel ntr-o baz de date. Atributul (proprietatea) va deveni cmp al tabelului. Instanele entitilor (claselor de obiecte) reprezint un context particular al entitilor (tabelelor) i sunt reprezentate prin nregistrri sau linii (rnduri) ale unui tabel. Pentru fiecare atribut (cmp) trebuie s se stabileasc: domeniul de valori posibile (tipul de date), dac atributul are o valoare implicit sau dac este obligatoriu (adic valoarea s poate fi necunoscut sau neaplicabil pentru anumite instante). Familia de caracteristici = lista atributelor unei entiti. Identificatorul unic (UID) poate fi format din: o valoare sau o combinaie de valori. i permite utilizatorului s identifice n mod unic o anumit instan (nregistrare). Atunci cnd un UID este alctuit dintr-un singur atribut, se numete simplu. Dac un UID este alctuit dintr-o combinaie de atribute, se numete compus. Un UID creat special pentru a numerota unic fiecare instan (nregistrare) se numete artificial. Uneori UID este o combinaie dintre un atribut i o relaie. Pot exista mai muli UID. unul este ales ca UID primar (ex. student ID); ceilali UID sunt numii secundari. Cheia = un atribut (set de atribute) care identific n mod unic realizarea unei entiti. Fiecare entitate (tabel) trebuie s conin unul sau mai multe atribute (cmpuri) care identific unic o instana (nregistrarea, linia), numit cheie primar (primary key). O relaie este o asociere ntre entiti (tabele). Asocierea este de regul asimetric. ntre atributele (nregistrrile) unei entiti (tabele) se pot stabili relaii: A - Binare (presupun existena unui domeniu i a unui codomeniu): 1 1 (unu la unu / one-to-one) unei realizri din domeniu i corespunde o singur realizare din codomeniu sau unei instane (nregistrri) a primei entiti (tabele) i poate corespunde o singur instan din cea de-a doua. 1 n (unu la muli / one-to-many) unei realizri din domeniu i corespunde una sau mai multe realizri din codomeniu sau unei instane (nregistrri) a primei entiti i pot corespunde mai multe instane din cea de-a doua. Reciproca nu este valabil. n n (muli la muli / many-to-many) - unei realizri din domeniu i corespund mai multe realizri din codomeniu i invers) sau unei instane (nregistrri) a primei entiti i pot corespunde mai multe instane din cea de-a doua i invers. Acest tip de relaie se poate dovedi dificil de identificat i de rezolvat n anumite situaii. B - n-are. Asocierile dintre entiti reprezint partea dificil n crearea unei aplicaii pentru exploatarea BD. Transcrierea relaiilor dintre entiti (tabele) se face prin intermediul atributelor (cmpurilor) i al cheilor.

Ctlin Tnase

FoxPro - Note de curs

Modele conceptuale de

baze de date

Sunt instrumente pentru descrierea datelor, a relaiilor dintre ele i a restriciilor la care sunt supuse. 1 Modelul ierarhic entitile sunt ierarhizate ntr-o structur de tip arbore. Dezavantaje: tergerea unui nod (de exemplu, nodul CLASE) implic tergerea tuturor descendenilor lui (la noi, nodul ELEVI), iar adugarea unui nod implic reorganizarea ntregii BD. SCOALA CLASE ELEVI 2 Modelul reea dispare restricia ca un fiu s aib doar un singur printe. Se pot folosi pointeri pentru realizarea legturilor din reeaua de entiti. SCOLI OBIECTE PROFESORI

CLASE

OBIECTE

PROFESORI

3 Modelul relaional (elaborat de Edgar Frank "Ted" Codd, 1923 - 2003) entitile se organizeaz n tabele simple, bidimensionale, fr legturi fixe. Relaiile se stabilesc prin asocierea ntre ele a unor cmpuri cheie ale fiecrei tabele. O asociere dintre 2 tabele se face printr-o tabel nou numit RELAII, unde apar cmpuri din ambele tabele. n modelul relaional (care a revoluionat lumea BD), totul se reduce la tabele. CLASE cls 12C diriginte Popa OBIECTE Cod-ob nume M mate RELATII Cls 12C Cod-ob m

4 Modelul obiect Datele se organizeaz sub forma unui graf. Unei linii din tabela relaional i corespunde un nod n graf. 5 Modelul obiect-relaional ntr-un model orientat obiect, toate obiectele se stocheaz ntr-o memorie heap, existnd referine ntre ele. La BD relaionale, o relaie se pstreaz separat. Modelul obiect-relaional pstreaz compatibilitatea cu programele SQL (Structural Query Language). Se pstreaz tehnologiile relaionale, dar se includ elemente de POO (Programare Orientat Obiect). Tendine Modelele anterioare pot exploata structuri regulate de date. Apare necesitatea interogrii unor date cu structuri neregulate. Motivaii: n BD biologice, structura se schimb foarte des se renun la modelele relaionale n favoarea reprezentrii arborescente a datelor. Apare i necesitatea de integra informaii provenite din surse diferite, rezultnd o informaie care nu are o structur rigid. Interogarea unor structuri neregulate este legat i de Internet: paginile HTML (HyperText Markup Language) ale unui site (locaie) pot fi privite ca o BD nestandard. A aprut un nou domeniu n organizarea datelor: date semistructurate. Datele se reprezint prin grafuri. Nodurile corespund obiectelor, iar arcele atributelor. Exemplu: la interogarea datelor n Internet, nodurile corespund paginilor HTML, iar arcele (atributele) corespund hyperlink-urilor.

Ctlin Tnase

FoxPro - Note de curs

SGBD
Au aprut n anii 60. Un SGBD = un set de programe destinate exploatrii unei BD (interogri, actualizri). Funcii: 1 Definirea datelor la nivel conceptual 2 Definirea i realizarea structurilor fizice de date 3 Realizarea independenei dintre structura conceptual i programe 4 Crearea i exploatarea BD 5 Controlul integritii BD 6 Confidenialitatea datelor din BD 7 Accesul simultan al mai multor utilizatori la datele BD 8 Securitatea datelor (salvri de siguran, reducerea riscului distrugerii datelor la apariia defectelor hardware sau cderi de tensiune). Arhitectura unui SGBD 1 Monitorul (gestionarul) BD leag datele fizice (de pe suport) din BD de programe. Are urmtoarele funcii: Legtura cu SGF (Sistemul de Gestiune a Fiierelor) al SO, pentru a valida operaiile de citire-scriere din sau n BD Validarea datelor conform restriciilor impuse de administratorul BD Securitatea datelor Accesul la date se face cu verificarea drepturilor de acces pentru fiecare user. Salvare i restaurare n cazul unor accidente (cderi de tensiune, erori de programare, distrugerea suprafeei magnetice). Datele sunt reastaurate n forma de dinaintea accidentului. Prelucrri concurente controlul accesului simultan al mai multor useri. 2 Procesorul de consultare traduce instruciunile limbajului de acces n instruciuni elementare pentru gestionarea BD. 3 Compilatorul pentru Limbajul de Manipulare a Datelor (LMD) permite interogarea (manipularea) BD (crearea, consultarea, actualizarea, cutarea, sortarea datelor). LMD permite dialogul userului cu BD. LMD pot fi: Neprocedurale userul precizeaz doar ce date sunt necesare, fr a indica procedurile de acces. Procedurale - userul precizeaz att ce date sunt necesare, ct i procedurile de acces 4 Compilatorul pentru Limbajul de Descriere a Datelor (LDD) permite descrierea structurii datelor, a legturilor dintre entiti, a condiiilor de validare i acces. Prin LDD, SCHEMA i SUBSCHEMELE se traduc i se memoreaz n dicionarul de date. Funciile LDD: Descrierea logic a BD i a subschemelor fiecrui user. Identificarea SCHEMEI Specificarea fiierelor de date i a legturilor dintre ele. Definirea restriciilor la care se supun datele. Definirea parolelor (cheilor) de acces Definirea metodelor de exploatare a fiierelor Definirea procedurilor de criptare (pentru generarea cheilor de acces) Definirea modului de localizare a entitilor Definirea tipului unei date. Utilizatorii SGBD pot fi: 1 Administratorul BD care: Definete SCHEMA Definete metodele de acces la date Modific arhitectura i organizarea BD Autorizeaz accesul la date

Ctlin Tnase

FoxPro - Note de curs

Stabilete restriciile de integritate ale BD Asigur legtura cu userii Alege strategii de salvare-restaurare a datelor Urmrete performanele BD 2 Specialiti n organizarea datelor (ingineri de sistem, administratori de reea, programatori) 3 Analiti care particip la proiectarea aplicaiilor informatice 4 Programatori ce exploateaz BD 5 Neprogramatori ce acceseaz datele prin limbaje de interogare (SQL) 6 Hackeri specialiti soft i hard care acceseaz fraudulos BD. Relaia SGBD SO poate fi: 1 SGBD poate fi implementat peste SO pe care-l controleaz (SGBD actuale) 2 SGBD se afl la acelai nivel cu SO (funciile SGBD i SO se integreaz n acelai sistem) 3 SGBD este plasat sub SO care preia toate funciile de intrare-ieire 4 SGBD preia complet toate funciile SO. user SGBD SO hard user SGBD SO hard user SO SGBD hard user SGBD hard

Tipuri de SGBD 1 Dup mrime: Mici medii (sub 1.000.000 de nregistrri) Mari 2 Dup modelul structural: Ierarhice Reea Relaionale Orientate obiect Obiect-relaionale 3 Dup domeniul de utilizare: Informare-documentare Conducere a produciei Gestiune economic 4 Dup destinaie: Publice Private 5 Dup distribuirea resurselor Cu resurse integrate Cu resurse distribuite teritorial 6 Dup orientare: Generalizate Specializate 7 Dup modul de exploatare (utilizare): Prelucrare pe loturi Interactive Mixte 8 Dup limbajele folosite: Autonome (cu limbaje proprii) Cu limbaj gazd

Ctlin Tnase

FoxPro - Note de curs

Reprezentani ai SGBDR Primele ncercri pentru realizarea unui SGBDR aparin firmei IBM care au lansat (n anii 19741978) produsul SystemR, urmat de DB2. Compania Relation Software dezvolt un produs bazat pe limbajul SQL, numit Oracle (lansat n 1979). Avantajul a constat n orientarea ctre minicalculatoarele Vax, mult mai ieftine dect mainframe-urile IBM. n prezent, firma Oracle este liderul produselor software dedicate mediilor de lucru cu baze de date. n aceeai perioad, mai amintim Ingres, Query By Exemple, RDMS. Pn n anii 80, SGBDR au fost umbrite de bazele de date reea, datorit vitezei mai mici, un parametru esenial n sistemele confruntate cu cererile a sute sau mii de utilizatori. Creterea vitezelor de lucru i LDP de generaie 4 au lrgit segmentul ocupat de SGBDR, n prezent ocupnd cca 60 % din pia. Pentru mainframe-uri i minicalculatoare care permit accesul a mii de utilizatori, S.O. este UNIX. Piaa SGBDR pentru UNIX este mprit de Oracle, Informix, Sybase, Ingres, Progress, IBM.. Pentru accesul simultan a 20-30 utilizatori din ntreprinderi mici i mijlocii, exist produse dedicate sistemelor de operare Windows NT (2000, XP), Novell, OS/2, dintre cele mai cunoscute fiind Oracle. Pentru microcalculatoare, pentru utilizatori individuali, neprofesioniti sau ca medii de lucru n staiile client din reelele unei ntreprinderi, exist produse create pentru MS-DOS i Windows: dBASE, FoxBase, Paradox, Clipper, FoxPro, Access, File Maker Pro.

BD relaionale
Asocieri de termeni: O relaie = o tabel O realizare = o linie sau o nregistrare sau un tuplu Un atribut = o coloan sau un cmp. Exemplu: considerm tabela (relaia) AGENDA NUME tabel = nume relaie (nume entitate) AGENDA Nume Popa Albu Prenume Ion Emil Telefon 123456 654321 Adresa Moineti Bacu ANTET (CAP) tabel = familia de caracteristici NUME coloan = o caracteristic (un atribut) a (al) entitii (tabelei) COLOAN (cmp) = domeniul caracteristicii

LINIE (nregistrare) = o realizare de entitate

Principalele operaii specifice prelucrrii tabelelor / bazelor de date sunt: 1 - adugarea de noi nregistrri n tabel 2 - modificarea structurii tabelei 3 - tergerea logic i fizic a nregistrrilor 4 - sortarea (ordonarea) nregistrrilor 5 - cutarea unor nregistrri 6 - vizualizarea coninutului tabelei 7 - efectuarea de calcule statistice 8 - interogarea structurii (selectarea unor articole din tabele, pe baza unor criterii) 9 - completarea unor rapoarte (extragerea datelor din tabele i/sau interogri pentru tiprire la imprimant sau pentru afiarea pe ecranul monitorului).

Ctlin Tnase

FoxPro - Note de curs

Cheia primar (primary key) a unei tabele (relaii) = o coloan (un atribut) care identific unic (fr ambiguitate), fiecare linie a tabelei (relaiei). Fiecare cheie primar cuprinde o singur coloan sau un set de coloane. Oricare dou rnduri (linii) dintr-o table nu pot avea aceeai valoare n acele coloane. n funcie de felul n care este conceput, un tabel poate avea mai multe chei unice, dar cel mult o singur cheie primar. O cheie unic trebuie s identifice toate rndurile posibile care exist ntr-o tabel i nu doar rndurile care exist la un moment dat. Ex.: CNP, ISBN etc. O cheie primar este un caz particular al cheii unice. Diferena major este c pentru cheile unice, constraint-ul NOT NULL implicit nu este aplicat automat, pe cnd la cheile primare, este. Astfel, valorile din coloanele care au chei unice pot fi sau nu NULLE. O alt diferen este c primary key trebuie definite, folosind o alt sintax. Cheile unice, precum i cheile primare se pot numi i chei strine (foreign keys). Cheia strin (foreign keys) sau extern = o coloan (un grup de atribute) care leag linii din 2 tabele (relaii). Altfel spus, o cheie strin este un constraint referenial ntre dou tabele. Cheia strin identific o coloan sau un set de coloane ntr-un tabel care face referin la o coloan sau un set de coloane dintr-un alt tabel. Coloanele din tabelul care face referina trebuie s fie cheie primar n tabelul la care se face referina. Astfel, o linie (un rnd) din tabelul care face referina nu poate conine valori care nu exist n tabelul la care se face referina. Tabelul care face referina i tabelul la care se face referina pot fi acelai tabel, adic cheia strin face referire la acelai tabel. O astfel de chei strin este cunoscut drept cheie strin de autoreferire sau cheie strin recursiv. Un tabel poate avea mai multe chei strine i fiecare dintre acestea poate avea un tabel de referin diferit. Relaiile greite dintre cheile strine i cheile primare sau n-aplicarea acestor relaii sunt adeseori cauza problemelor ce apar la bazelel de date. Spre exemplu, considerm tabelele urmtoare: CLASE Cls 12 C Diriginte Albu Ion OBIECTE Cod_Ob Nume m Mate INCADRARE Cls Cod_Ob 12 C m

Chei primare: Cls n tabela CLASE Cod_Ob n tabela OBIECTE Cheia compus Cls Cod_Ob n tabela INCADRARE Chei strine: Cls din INCADRARE (leag INCADRARE de CLASE) Cod_Ob din INCADRARE (leag INCADRARE de OBIECTE). Legtura dintre tabele este stabilit ntre o tabel printe i alta copil. La deplasarea pointerului de fiier n printe, se poziioneaz pointerul fiierului copil pe prima nregistrare (articol) care are cheia egal cu cea din printe. Relaia 1 1: un articol (linie) din tabela printe are legtur cu un singur articol din tabela copil. Relaia 1 n: unui articol din tabela printe i corepund 1 sau mai multe articole din tabela copil. Unui articol din copil i corespunde doar 1 articol din printe. Relaia n n nu se poate reprezenta n SGBDR. Ea va spart n relaii 1 1 sau 1 n. O schem relaional = set de relaii (tabele) asociate semantic prin domeniul lor de definiie i prin restricii de integritate. Schema relaional este independent n timp. Iat o schem conceptual a unei BD relaionale specific sistemului informatic al unei coli:
CLASE OBIECTE

ELEVI

INCADRARE

PROFESORI

Ctlin Tnase

FoxPro - Note de curs

Conform acestei scheme, se definesc urmtoarele tabele i legturile dintre ele: CLASE Profil Cod-Cl ELEVI Cod-Cl INCADRARE Cod-Cl Cod-Ob Cod-Prof OBIECTE Cod-Ob Nume PROFESORI Cod-Prof Nume

Nume

Spec

O clas poate avea mai muli elevi, dar un elev nu poate aparine la clase diferite. Un obiect (INFO) poate fi predat de mai muli profesori, dar la clase diferite. Un profesor poate avea mai multe obiecte pe care le pred la o clas. Chei unice: Cod-Cl (tabela Clase), Cod-Ob (tabela Obiecte), Cod-Prof (tabela Profesori) Chei strine: Cod-Cl (tabela Elevi), Cod-Cl, Cod-Ob, Cod-Prof (tabela Profesori)

Pentru pstrarea integritii unei BD, se folosete un limbaj declarativ care memoreaz, printre altele, i restriciile de integritate. Acestea se refer la: 1 Restriciile cheilor primare acestea trebuie s fie unice i nenule. 2 Restriciile refereniale apar dac o tabel este legat de alt tabel. Se formuleaz astfel: cheia strin a tabelei referite nu trebuie s aib valori care nu apar drept chei primare n tabela de referin. 3 Restricii de comportament puse pe valorile unor atribute sau dintre atribute. Exemple: 1 - Restricii de cheie: Orice valoare a coloanei (atributului) Cod-Cl trebuie s identifice unic o linie din tabela Clase. Orice valoare a coloanei (atributului) Cod-Ob trebuie s identifice unic o linie din Obiecte. Orice valoare a coloanei (atributului) Cod-Prof trebuie s identifice unic o linie din Profesori. 2 - Restricii refereniale: La adugarea unei linii n tabela INCADRARE, se verific dac: - valoarea atributului Cod-Prof exist n tabela Profesori - valoarea atributului Cod-Ob exist n tabela Obiecte - valoarea atributului Cod-Cl exist n tabela Clase La tergerea unei linii din tabela Obiecte, se vor terge liniile cu valoarea cheii Cod-Ob egal cu valoarea cheii primare terse. La tergerea unei linii din tabela Clase, se terg liniile cu valoarea cheii Cod-Cl egal cu valoarea cheii primare terse. La tergerea unei linii din tabela Profesori, se terg liniile cu valoarea cheii Cod-Prof egal cu valoarea cheii primare terse. 3 Restricii de comportament La nivel de atribut (coloan) atributul Cod-Cl va fi scris cu cifre urmate de litere: 9A, 12C. La nivel de linie dac atributul Cod-Cl este 10D 10G, profilul este altul dect INFO; altfel, este INFO.

Reguli de integritate
Modelul relaional definete mai multe reguli care nu sunt parte a formelor normale, dar sunt necesare n orice baz de date relaional. Exist dou tipuri de reguli de integritate: generale i specifice bazei de date. Reguli de integritate generale Modelul relaional specific dou tipuri integriti generale, care se aplic la toate bazele de date: integritate de entitate i integritate referenial.

Ctlin Tnase

FoxPro - Note de curs

a - Integritatea de entitate spune c o cheie primar nu poate conine valori Null (inexistente). b - Integritatea referenial spune c o baz de date nu are voie s conin chei strine care nu au o cheie primar corespondent. Aceasta implic: un rnd nu se poate aduga unui tabel cu o cheie strin, dect dac valoarea referit exist n tabelul respectiv; dac o valoare dintr-un tabel care este referit printr-o cheie strin se modific sau ntreaga nregistrare este tears, rndurile corespunztoare din tabelul cu cheia strin nu trebuie s rmn orfane. Pe baza definiiilor din modelul relaional, trei opiuni sunt disponibile, atunci cnd o cheie primar i schimb valoarea sau rndul care o conine este ters: modificarea este strict interzis; pentru actualizri, modificarea este propagat n cascad la toate tabelele dependente. La tergere, rndurile din toate tabelele dependente vor fi terse i ele; pentru tergere, cheile strine dependente vor primi valoarea Null. Reguli de integritate specifice bazei de date Toate regulile de integritate care nu sunt de entitate sau refereniale se grupeaz sub termenul specific bazei de date sau specific unei afaceri. Acest tip de regul este specific fiecrei baze de date n parte i vine din regulile procesului care s-a modelat. Aceste reguli sunt la fel de importante ca i cele discutate pn acum, ele mpiedicnd stocarea unor date false n baz. Imaginea sau tabela virtual (View) = o relaie dinamic definit pe baza unei expresii relaionale dintre atributele (cmpurile, coloanele) tabelelor. Tabela virtual nu pstreaz coninutul tabelelor de baz, ci doar schema. Dup ce a fost definit, tabela virtual este memorat n BD i se actualizeaz simultan cu celelalte tabele din BD. Orice modificare a datelor n tabela surs se reflect i n tabela virtual. Tabela virtual permite prezentarea doar a anumitor date din BD, oferind un mijloc de securitate fa de unii utilizatori. Exemplu: Plecnd de la tabelele ELEVI i CLASE de mai sus, definim tabela virtual PROFIL, care conine doar numele elevilor i profilul. ELEVI Cod-Cl 12A 12D Nume Albu Negru CLASE Profil Info Filologie Cod-Cl 12A 12D PROFIL Nume Albu Negru Profil Info Filologie

Trigger-ele (procedurile stocate) = secvene de program care se ncarc automat n memorie la deschiderea BD. Un trigger (sau un declanator) se folosete pentru validarea tabelelor, a valorilor unor atribute etc.

Forme normale
La proiectarea unei BD relaionale, se definesc entitile i relaiile dintre ele, apoi tabelele care vor memora datele din entiti i relaiile dintre ele. La construirea tabelelor, trebuie evitate anomaliile de actualizare i dificultile de prelucrare. O tabel este o relaie (este corect ntocmit) dac ndeplinete urmtoarele condiii: 1 Are nume distinct ntr-o BD 2 Fiecare celul a tabelei conine o valoare unic 3 Fiecare coloan (atribut) are nume unic 4 Valorile din coloane (valorile atributelor) aparin domeniului de definiie 5 Ordinea coloanelor (atributelor) n tabel nu are importan 6 Liniile sunt distincte ntre ele 7 Ordinea liniilor nu are importan

10

Ctlin Tnase

FoxPro - Note de curs

Unele tabele (relaii) sunt mai bine structurate dect altele. Normalizarea = operaia prin care se creeaz tabele mai bine structurate, eliminnd unele dificulti (anomalii) de actualizare (adugare) a datelor. Normalizarea = operaia de spargere a unei tabele (relaii) care prezint anomalii n alte tabele (relaii). Normalizarea este bazat pe noiunea de dependen funcional (legtura dintre 2 atribute, din care al 2-lea se poate determina dac se cunoate primul). Exemplu: dac tim numele unui elev, putem afla clasa. Atributul clasa este dependent funcional de atributul nume, ceea ce se noteaz prin nume >>> clasa. Prima form normal se identific cu noiunea (definiia) de relaie. Prin eliminarea cmpurilor care se repet, se ajunge la prima form normal. O relaie (tabel) este n a 2-a form normal dac toate atributele non-cheie sunt dependente de ntreaga cheie. O relaie care are doar

chei simple este n a doua form normal. O relaie (tabel) se afl n a 3-a form normal dac se afl n a 2-a i nu prezint dependene tranzitive.

Observaie: Nici o form normal nu garanteaz c s-au eliminat toate anomaliile. Rezolvarea relaiilor many to many n vederea implementrii fizice a modelului conceptual, este important ca relaiile Many to Many (MM) s fie rezolvate. ntr-o relaie M - M exist cel puin un atribut (nregistrare) care descrie relaia. Crend a treia entitate (tabel), numit entitate de intersecie, se creeaz un loc pentru acel atribut. Pai : Se creeaz entitatea (tabela) de legtur; Se creeaz noile relaii (tabele); Se dau nume acestor relaii (tabele); Dac e cazul, se adaug atribute (cmpuri) n entitatea (tabela) de legtur; Se creeaz un UID pentru entitatea (tabela) de intersecie. Exemplu: Fie tabela urmtoare: FACTURI Com Furniz Adresa Cod-P1 Cod-P2 Cod-P3 Cod-P4 Cantit Valoare 123 F1 Bc A2 B3 C4 10 1000 321 F2 Is C4 20 2000 Se verific dac tabela este o relaie, conform condiiilor de mai sus: - nu exist linii identice - nu sunt valori de tipuri diferite n coloane - cheia este Com (numrul unei comenzi) Se elimin cmpurile care se repet (la noi Cod-P1, Cod-P, Cod-P3, Cod-P4), pe care le nlocuim cu un singur cmp (Cod-Prod). Adugm i cmpul Pre pentru fiecare produs i se ajunge la prima form normal. FACTURI Com Furniz Adresa Cod-Prod Cantit Pret Valoare 123 F1 Bc A2 10 100 1000 123 F1 Bc B3 10 200 1000 123 F1 Bc C4 10 300 1000 321 F2 Is C4 20 300 2000 Observaie: Cheia Com, care n tabela precedent era suficient pentru a identifica n mod unic fiecare linie, nu mai satisface aceast cerin n noua tabel (se repet valorile 123 pe trei linii). Rezult c, n noua tabel, trebuie s folosim o cheie compus, de exemplu, cheia va fi grupul ( Com,

11

Ctlin Tnase

FoxPro - Note de curs

Cod-Prod). Avem combinaiile: 123-A2, 123-B3 i 123-C4, care se disting ntre ele, deci grupul (ComCodProd) ndeplinete cerinele pentru a fi cheie unic. Dar, pentru ca tabela s se gseasc n a doua form normal, este necesar s avem chei

unice simple, i nu compuse, ca n cazul de mai sus.


De asemenea, observm c atributele non-cheie (Cant, Valoare) nu sunt dependente de ntreaga cheie. Dependenele funcionale sunt: (Com CodProd) >>> Cant, Comanda >>> Valoare. Deci, tabela nu se afl n a 2-a form normal. Prin normalizare, spargem tabela n alte 2 tabele: COMENZI Com Furniz 123 F1 321 F2 Adresa Bc Is Valoare 1000 2000 PRODUSE Com Cod-Prod 123 A2 123 B3 123 C4 321 C4 Cant 10 10 10 20 Pret 100 200 300 300

Pentru a ajunge la a 3-a form normal, trebuie s nlturm dependenele tranzitive. Observm c, n tabela COMENZI, cheia unic este Com. tiind numrul comenzii, aflm numele furnizorului (Com >>> Furniz). tiind numele furnizorul, aflm adresa (Furniz >>> Adresa). Ar rezulta, prin tranzitivitate, c Adresa depinde funcional de Com, adic am avea dependena tranzitiv Com >>> Adresa. Normaliznd, eliminm dependena tranzitiv i obinem alte dou tabele: FURNIZORI COMENZI Cod-Furniz Adresa Com Furniz Valoare F1 Bc 123 F1 1000 F2 Is 321 F2 2000 S-a ajuns astfel la a 3-a form normal. ntreaga BD va fi format din trei tabele: COMENZI Com Furniz 123 F1 321 F2 Valoare 1000 2000 PRODUSE Com Cod-Prod 123 A2 123 B3 123 C4 321 C4 Cant 10 10 10 20 Pret 100 200 300 300 FURNIZORI Cod-Furniz Adresa F1 Bc F2 Is

Limbaje relaionale
naintea consacrrii SGBDR, se foloseau limbaje procedurale pentru extragerea informaiilor din BD. Trebuia s se precizeze att care sunt datele solicitate, precum i metodele de cutare. Limbajele neprocedurale de interogare (dedicate SGBDR) presupun doar precizarea datelor care se caut. Operaia de cutare cade n sarcina SGBD. Tipuri de limbaje relaionale: 1 Ansambliste bazate pe teoria ansamblurilor (SQL) 2 Predicative bazate pe teoria predicatelor a orientate asupra tuplurilor (ALPHA, QUEL) b orientate pe domenii: - non-grafice consultarea se face n sistem linie de comand (FQL) - grafice consultarea se face interactiv (QBE)

12

Ctlin Tnase

FoxPro - Note de curs

Faciliti oferite n lucrul cu baze de date Scurt caracterizare a FoxPro pentru MS-DOS
1 - FoxPro este un sistem de gestiune a bazelor de date (SGBD) relaional. SGBD relaionale au posibilitatea realizrii de legturi ntre dou sau mai multe baze de date (BD), legturi ce permit accesarea simultan a unor date, care se afl ntr-o anumit relaie, din baze de date diferite. Astfel, programatorul este scutit de sarcina de a cuta, n toate bazele de date, acele informaii care corespund unor criterii de referin, aceast operaie fiind realizat automat de ctre SGBD. 2 - O alt facilitate nou prevzut la SGBD-urile moderne se refer la o tehnic de interogare a BD (extragerea de informaii din BD). Aceast tehnic, numit SQL (Structural Query Language) este un limbaj neprocedural pentru interogarea BD. ntr-un limbaj neprocedural nu este necesar descrierea algoritmului de rezolvare a unei probleme, ci doar specificarea complet a datelor problemei, urmnd ca, pe baza acestora, sistemul s rezolve problema dat. 3 - Microsoft FoxPro este i un mediu de programare, care permite crearea de aplicaii (programe) care ruleaz pe platforme multiple, cum ar fi MS-DOS i Windows (o aplicaie care ruleaz pe mai multe platforme este referit ca o cross platform application). De remarcat c fiecare nou versiune FoxPro le ncorporeaz pe cele precedente, le dezvolt, astfel nct programele scrise ntr-o versiune mai veche pot fi rulate n noile versiuni. Un SGBD trebuie s asigure: definirea (crearea) bazei de date (BD) introducerea i adugarea datelor modificarea i prelucrarea unor date existente tergerea unor date organizarea (ordonarea) BD interogarea BD i extragerea datelor stocate generarea de rapoarte. Microsoft FoxPro 2.5 este unul dintre cele mai simple i mai puternice SGBD relaionale, dotat cu o interfa agreabil, complet i uor de utilizat, dispunnd de toate utilitarele necesare crerii de aplicaii care satisfac cele mai exigente cerine. Microsoft FoxPro 2.5 for MS-DOS a aprut n 1993 sub egida corporaiei Microsoft. Aceast versiune este mai rapid dect FoxPro/LAN 2.0 (dezvoltat de Fox Software) i aduce urmtoarele nouti i mbuntiri: - suport expandat pentru produsul pe 32 de bii - suport pentru importarea de fiiere Microsoft Excel 3.0 i 4.0, precum i Paradox 3.5 i 4.0 - noi comenzi, funcii, variabile de memorie, directive - creterea mrimii unei nregistrri, care poate include pn la 65.000 Bytes - permite crearea de aplicaii (programe) care ruleaz pe platforme multiple (Windows, MS-DOS). Exist dou versiuni disponibile: Standard i Extended (extins). Versiunea standard ruleaz pe calculatoarele dotate cu microprocesoarele 8088/8086 sau 286. Versiunea extins este un produs pe 32 de bii, exploateaz capacitile microprocesoarelor 386, 486... i folosete toate memoriile extinse disponibile, ceea ce duce la o vitez de execuie mai mare. Pentru procesarea bazelor de date foarte mari (de exemplu, pentru mai mult de 500.000 de nregistrri) se recomand versiunea extins. Specificaii tehnice: Numrul maxim de nregistrri/fiier: 1 miliard Numrul maxim de cmpuri/nregistrare: 255 Numrul maxim de caractere/cmp: 65.000 Numrul maxim de caractere/cmp memo: 254 Numrul de baze de date deschise simultan: 25 (Standard) i 255 (Extended) Numrul maxim de fiiere deschise simultan: 99

13

Ctlin Tnase

FoxPro - Note de curs

Numrul maxim de caractere/nregistrare: 65.000 Mrimea maxim a cmpurilor ir de caractere: 254 Mrimea maxim a cmpurilor numerice: 20 Numrul maxim de caractere pentru numele cmpurilor: 10 Numrul de zecimale folosite n calcule: 16 Numrul maxim de caractere/cheie de indexare (.IDX): 100 Numrul maxim de caractere/cheie de indexare (.CDX): 240 Numrul maxim de fiiere index deschise/baza de date: nelimitat Cerinele sistemului: un calculator IBM PC sau compatibil cu un microprocesor 8088 sau superior (pentru versiunea standard) sau 386 SX sau superior (pentru versiunea extins) 640 K RAM (recomandabil 2 MB) pentru versiunea standard sau 3 MB pentru versiunea extins DOS 3.1 sau versiuni ulterioare mouse, imprimant, recomandabil un coprocesor matematic. setarea numrului de fiiere simultane n CONFIG.SYS mai mare sau egal cu 40. FOXPRO se gsete, de regul, n directorul FOX sau FPD25 sau FOXPRO25. Lansarea n execuie este asigurat de ctre fiierul executabil FOX.EXE, deci comanda de lansare, care trebuie dat la prompterul DOS, este FOX urmat de ENTER. Ieirea din FoxPro: meniul File (Alt+F), Quit sau se scrie n fereastra de comenzi Quit urmat de ENTER. ATENIE: n nici un caz NU se recomand resetarea sistemului deoarece bazele de date sau indecii aflai n utilizare pot fi afectai sau distrui.

Interfaa FoxPro 2.5 (2.6) pentru MS-DOS


Dup lansare, pe ecran se afieaz 3 zone: 1 - Bara de meniuri, pe prima linie a ecranului. Din aceste meniuri se pot selecta comenzi care se pot lansa direct. Deschiderea unui meniu se face fie click cu mouse-ul, fie cu Alt + litera aprins. 2 - Suprafaa de lucru (desktop) - fundalul pe care snt afiate unele rezultate ale comenzilor Fox. 3 - Fereastra de comenzi (o fereastr de dialog) poriune de ecran ncadrat ntr-un dreptunghi. Fereastra poate fi deplasat cu mouse-ul: click pe linia de chenar a ferestrei, n care scrie Command, i cu butonul de mouse apsat, se deplaseaz fereastra. Deplasarea se poate face i din meniul Window, Move, sgei, ENTER (pentru stabilirea poziiei finale).

Cursor

Indicator de pozitie

Butonul de nchidere

Butonul de extindere

Butonul de dimensionare

14

Ctlin Tnase

FoxPro - Note de curs

Fereastra de comenzi conine: Butonul de nchidere (stnga-sus). De exemplu, un click pe butonul de nchidere i fereastra de comand dispare. Se readuce pe ecran cu CTRL + F2 sau Window, Command. Fereastra se poate nchide i din meniul File, Close sau din meniul Window, Hide. Butonul de dimensionare (punctul din dreapta-jos): click pe acest buton i, meninnd apsat butonul stng al mouse-ului, se modific dimensiunile ferestrei prin deplasarea mouse-ului. Butonul de extindere (colul din dreapta-sus). Un click pe acest buton mrete fereastra de comand la aproape tot ecranul. Rmne vizibil bara de meniuri. Un nou click pe butonul de extindere readuce fereastra de comand la dimensiunile iniiale. Se poate obine un efect identic i din meniul Window, Zoom. Barele cu butoane (sgei) de defilare stnga-dreapta i sus-jos (ultimele apar doar dup umplerea ferestrei de comand. Acionate cu mouse-ul, permit deplasarea n direcia dorit. Indicatoare de poziie pe orizontal i pe vertical Toate butoanele (indicatoarele) snt acionate cu mouse-ul. Pentru tergerea ecranului, se scrie n fereastra de comanda CLEAR sau, din meniul Window, selectm opiunea Clear.

Interfaa Visual FoxPro

Meniuri contextuale

Fiind o aplicaie Windows, n Visual FoxPro ntlnim att elemente (obiecte vizuale) comune tuturor ferestrelor Windows (bara de titlu, bara de meniuri, barele cu butoane pentru operaii, barele de unelte - Tools Bars), bara de stare (Status Bar), barele de defilare, meniuri, liste derulante, ct i elemente specifice FoxPro (fereastra de comenzi - Command, suprafaa de lucru desktop). Meniurile se acceseaz cu Alt + Litera subliniat (aprins) sau click cu mouse-ul. Se observ c interfaa Visual FoxPro este asemntoare cu aceea a versiunii 2.5 (2.6) pentru MSDOS, dar aduce, n plus, elemente specifice mediului Windows. Meniul contextual - se deschide cu click-dreapta pe un obiect i afieaz o serie de opiuni dependente de context (dependente de obiectul pe care s-a dat click-dreapta). Pe parcursul execuiei, ntlnim urmtoarele tipuri de ferestre: Fereastra de comenzi Command n care se introduc comenzi directe ce se execut imediat. Ferestre de dialog n care se pot selecta opiuni sau obiecte pentru realizarea unei aciuni (de exemplu, ferestrele Open, Save As). Ferestre de proiectare n care se editeaz programe, rapoarte Ferestre de mesaje afieaz informaii sau avertismente i permit continuarea sau abandonarea aciunii curente.

15

Ctlin Tnase

FoxPro - Note de curs

Controale (obiecte de control) Casete de text (editare), casete de validare (check box sau comutatoare), liste, butoane de comand. List ascuns Caset de text (editare)

Butoane de comenzi

Casete de validare (check box) Configurarea mediului Visual FoxPro Setrile pot fi: Temporare (se pierd la prsirea Fox) Permanente (se memoreaz n fiiere de configurare) Parametrii de configurare pot fi stabilii: prin comenzi SET (scrise n fereastra de comenzi); din meniul Tools, Options. n fereastra Options apar mai multe tab-uri (fie, seciuni, etichete) care permit stabilirea parametrilor de configurare. De exemplu, n tab-ul View, activai (bifai) Clock, pentru afiarea ceasului ntr-o fereastr Fox. De asemenea, activai Status bar, pentru afiarea barei de stare la baza ferestrei Fox. Pentru obiectele vizuale care sunt create de utilizator ntr-un proiect sunt asociate proprieti implicite (atribute, condiii, evenimente), care pot fi modificate, n funcie de scopul propus.

Moduri de lucru (comand, program, asistat)


LDP algoritmice (Pascal, C, Fortran, Basic) impun scrierea unui program, compilarea (interpretarea), lansarea n execuie. Acesta este modul de lucru program. Mediul FoxPro, n toate variantele sale, ofer mai multe moduri de lucru:

1 Modul de lucru comand (interpretativ)


Comenzile-linie introduse n fereastra de comenzi (Command) vor fi executate imediat la Enter, dac sunt corecte din punct de vedere sintactic sau dac fac referire la obiecte valide/existente. Dac apar erori de sintax sau dac se fac referiri la obiecte inexistente, se vor afia mesaje de eroare / informare corespunztoare. De exemplu, unul dintre cele mai frecvente mesaje de eroare este: Unrecognized command verb, care semnaleaz o eroare de sintax. Comenzile-linie sunt formate din: - VERB (comanda propriu-zis) - Clauze (directive) care particularizeaz comportamentul comenzii

16

Ctlin Tnase

FoxPro - Note de curs

Sintaxa general a unei comenzi-linie este: < VERB > [ < Clauza 1 > ] [ < Clauza 2 > ] sau VERB [ Clauza 1 ] [ Clauza 2 ] Observaii: A - Caracterele <, >, [, ] care apar n descrierea sintaxei unei comenzi nu se scriu n fereastra de comenzi. Ele au urmtoarele semnificaii: <, > ncadreaz un ir de caractere care trebuie scris [, ] ncadreaz un ir de caractere opional Caracterele <, > se scriu n expresii relaionale (atunci cnd se compar diverse valori). B Poziiile clauzelor nu sunt fixe. De exemplu, putem scrie: LIST FIELDS nume, prenume FOR clasa = 12 sau LIST FOR clasa = 12 FIELDS nume, prenume n acest exemplu: VERBUL este LIST (se afl pe prima poziie n linia de comand) Clauzele sunt FOR clasa = 12 respectiv FIELDS nume, prenume Efectul acestei comenzi const n afiarea numelor i prenumelor elevilor din clasa a 12-a. C - Fereastra Command memoreaz istoricul comenzilor introduse n sesiunea Fox curent. O comand poate fi relansat aducnd cursorul (cu sgeile) n dreptul ei i tastnd Enter. D - VERBUL (comanda) se poate prescurta la primele 4 caractere. De exemplu, putem scrie: DELE n loc de DELETE RECO n loc de RECORD MODI n loc de MODIFY STRU n loc de STRUCTURE Nu se admit prescurtri dect la VERBE, nu i la numele cmpurilor sau altor entiti. E - Din Fox se pot lansa comenzi DOS astfel: ! comanda DOS sau RUN comanda DOS Exemple: ! DIR C:\*.DBF && se afieaz toate fiierele .DBF din rdcina discului C: RUN DEL C:\TESTE\*.DBF && se terg toate fiierele .DBF din directorul TESTE Iat cteva comenzi pentru fiiere i directoare: 1 Schimbarea directorului curent: SET DEFAULT TO <director> Exemple: SET DEFAULT TO C:\FOX\Proiecte && se schimb directorul n C:\FOX\Proiecte ! CD C:\FOX\Proiecte && acelai efect, dar cu comanda CD din DOS 2 Specificarea cilor de cutare (specificarea unei liste de directoare), dac un fiier apelat ntr-o comand nu se gsete n directorul curent: SET PATH TO <list directori> Exemplu: SET PATH TO C:\ , C:\FOX , C:\FOX\Proiecte && se stabilesc cele 3 ci de cutare. 3 Afiarea listei de fiiere cu baze de datedin directorul curent sau din alt director specificat: Varianta a: DIR [ [ ON ] <disc> ] [ <director> ] [ <sablon> ] [ TO PRINTER / TO FILE <nume fisier.TXT>]

17

Ctlin Tnase

FoxPro - Note de curs

Observaii: DIR fr parametri afieaz coninutul directorului curent. Clauza ON permite specificarea discului sau directorului care va fi listat. ablonul limiteaz lista la un grup de fiiere Rezultatul comenzii este directat (dirijat) n mod implicit spre ecran. Clauza TO PRINTER, respectiv TO FILE permite redirectarea rezultatului spre imprimant, respectiv spre un fiier text.

Varianta b: LIST FILES / DISPLAY FILES [ [ ON <disc> ] [ LIKE [ <sablon> ] ] [ TO PRINTER / TO FILE <nume fisier.TXT>] Observaii: Clauzele ON i TO au aceleai semnificaii ca mai sus Clauza LIKE specific directorul sau ablonul pentru un grup. Comanda DISPLAY, spre deosebire de LIST, face o pauz la umplerea unui ecran, continuarea afirii fiind posibil prin apsarea unei taste (de exemplu, Enter) Exemple: DIR && se afieaz lista bazelor de date din directorul curent DIR ON C:\FOX\Proiecte\*.TXT && afieaz toate fiierele .TXT din calea C:\FOX\Proiecte LIST FILES LIKE *.* && afieaz toate fiierele din directorul curent LIST FILES && afieaz toate bazele de date din directorul curent 4 Copierea fiierelor COPY FILE <fisier 1 . * > TO <fisier 2 . * > Exemple: COPY FILE C:\FOX\*.PRG A: && se copiaz toate fiierele program din C:\FOX pe A: ! COPY C:\FOX\*.PRG A: && comanda DOS echivalent Observaii: n paralel cu copierea, se poate face i redenumirea unui fiier: Exemplu: COPY FILE C:\salarii.txt A:\acte.doc && salarii.txt s-a copiat i redenumit n acte.doc Exist pericolul ca, prin copiere, s se distrug un fiier existent, dac are acelai nume cu fiierul destinaie din comanda COPY. Comanda SET SAFETY ON avertizeaz n acest sens. 5 Redenumirea unui fiier se poate face i cu comanda RENAME <fisier 1 . *> TO <fisier 2 . *> Observaii: Noul nume (fisier 2) nu trebuie s existe. Vechiul fiier (fisier 1) nu trebuie s fie deschis. Exemplu: RENAME C:\FOX\Proiecte\salarii.txt TO C:\FOX\Proiecte\acte.doc 6 tergerea fiierelor: Varianta a ERASE <fisier .* > Varianta b DELETE FILE <fisier . * > Varianta c ! DEL <fisier.*> && Comanda DOS echivalent Exemple: ERASE C:\FOX\Proiecte\*.txt DELETE FILE C:\FOX\Proiecte\*.txt DEL C:\FOX\Proiecte\*.txt 7 Afiarea coninutului unui fiier text ASCII: TYPE <fisier.*> [ TO PRINTER / TO FILE <fisier.txt> ] [ NUMBER ]

18

Ctlin Tnase

FoxPro - Note de curs

Observaii: Clauza NUMBER servete numerelor de linie pentru textele programelor surs. Dac lansm i comanda SET HEADING ON, se vor afia i numrul paginii, numele fiierului i data. Funcii utile n lucrul cu fiiere sau directoare: 1 CURDIR ( ) afieaz (returneaz) numele directorului curent (CURRENT DIRECTORY) 2 FILE ( < fisier> ) returneaz TRUE dac <fisier> este gsit pe disc. Exemple: ? CURDIR ( ) && care este directorul curent ? ? FILE (AGENDA.DBF) && caut fiierul AGENDA.DBF i dac este gsit afieaz .T. 3 GETFILE ( ) deschide o fereastr pentru selectarea direct a unui fiier (echivalent cu deschiderea meniului File, i selectarea opiunii Open). 4 GETDIR ( ) deschide o fereastr pentru selectarea direct a unui director. Exemplu: CD GETDIR ( ) && schimb directorul (CD) n directorul ales interactiv (GETDIR)

2 Modul de lucru program


FoxPro dispune de: un editor de texte pentru scrierea programelor surs compilator depanator link-editor n Fox se poate apela att la programarea clasic (structurat i modular), ct i la POO. Programele scrise n Fox sunt fiiere de comenzi cu extensia .PRG. Pentru crearea sau modificarea unui program surs se scrie comanda MODIFY COMMAND fisier.PRG sau MODI COMM fisier.PRG Se va deschide fereastra editorului de texte n care se va redacta programul surs. Lansarea n execuie a programului se face cu comanda: DO fisier.PRG Observaii: a) - Programul se execut pn la sfritul fiierului sau pn la apariia comenzii RETURN, care determin revenirea n fereastra de comenzi. b) - Doar n programe se pot folosi comenzi multi-linie. c) - O linie poate avea cel mult 1024 caractere. d) - Un program poate apela un subprogram (funcie sau procedur) standard sau definit de utilizator. Lansarea unui subprogram se face tot cu comanda DO. La terminarea execuiei subprogramului, se revine n programul apelant sau n fereastra de comenzi. e) - Nu exist separatori ntre liniile de comand. f) - Fragmentarea unei comenzi (scierea comenzii pe dou sau mai multe linii) se face cu caracterul ; (punct i virgul). g) - Comentariile (poriuni de text ignorate de calculator, dar care nlesnesc nelegerea programelor) snt introduse n program astfel: - precedate de un asterisc ( * ) - naintea unei comenzi FOX (la nceputul liniei de comand) - precedate de simbolurile && - dup o comand FOX Simbolurile * i && se pot introduce fie n fereastra de comenzi (Command), fie n programele FOX.

19

Ctlin Tnase

FoxPro - Note de curs

Exemple: Command * Se vor introduce datele GOTO 20 && nregistrarea 20 devine curent h) - Semnul de ntrebare "?" este folosit pentru afiarea pe ecran a unor rezultate. S precizm c simbolurile (comenzile) - pe linie nou pentru ? - la poziia cursorului (pe linia curent) - pentru ??. Simbolul ??? precizeaz caracterele care sunt trimise direct la imprimant. Exemplu: ??? Mesaj && irul de caractere Mesaj este trimis direct la imprimant. Mai multe detalii despre structura programelor i instruciunile coninute vor fi prezentate n capitolul Editarea, compilarea i rularea unui program.

? | ??

evalueaz expresii i afieaz rezultatele:

Programe de validare i de aciune


Prin validare nelegem operaia de verificare a corectitudinii datelor. O dat se consider corect dac respect o serie de condiii aritmetice sau logice prestabilite. Validarea datelor presupune precizarea urmtoarelor elemente: 1 - Condiiile de verificat 2 - Aciunile care trebuie executate, atunci cnd data este corect sau incorect 3 - Modul de semnalare a erorilor i structura mesajelor 4 - Modul de corecie a erorilor 5 - Modul de reintroducere a articolelor, dup corecia acestora Validarea se poate face la nivel de cmp (un cmp respect propriile sale condiii), la nivel de articol (respectarea unor relaii ntre cmpurile aceluiai articol), la nivelul mai multor articole (respectarea unor relaii ntre cmpurile unor articole diferite, completitudinea pe pachete de documente, corectitudinea unor totaluri pe pachete) sau la nivel de fiier (completitudine, corectitudinea unor totaluri pe fiier). Cele mai importante validri la nivel de cmpuri i la nivel de articol se refer la: 1 - Existen 2 - Natur 3 - Lungime 4 - Semn 5 - Apartenea la o mulime sau list de valori 6 - Respectarea unor corelaii aritmetice sau logice ntre cmpuri Dac o dat nu ndeplinete toate condiiile stabilite, se consider eroare i se solicit reintroducerea ei. Introducerea se poate repeta fie pn se obine o dat corect, fie pn cnd se depete un numr prestabilit de reintroduceri. Cnd un cmp este corect, se trece la inroducerea i validarea urmtorului cmp. Cnd articolul este corect, se scrie n suportul extern i se trece la urmtorul articol. Pentru a construi structura repetitiv, necesar relurii introducerii cmpului, se utilizeaz o variabil semafor (de tip boolean) ER, care ia valoarea: 1 - dac a fost eroare (nu s-a ndeplinit un criteriu de validare din mulimea C1, C2, , Cn), sau 0 - n caz contrar. Desigur, seminificaiile valorilor 0 i 1 pot fi inversate.

20

Ctlin Tnase

FoxPro - Note de curs

VALIDAREA EXISTENEI O dat se consider existent, dac n cmpul corespunztor ei nu se introduce doar irul vid. Verificarea existenei se realizeaz n funcie de semnificaia tastei ENTER, la citirea diverselor tipuri de date: a - Pentru date de tip numeric - rol de separator, fiind ignorat la citire; b - Pentru date de tip caracter - furnizeaz codul ASCII al caracterului CR (#13); c - Pentru date de tip ir (STRING) - rol de terminator. Analiza presupune c datele sunt introduse cmp cu cmp. Avnd n vedere c ENTER este ignorat la citirea datelor numerice, iar la citirea ntr-o variabil de tip caracter se solicit un nou ENTER, rezult c, indiferent de tipul datei, singura posibilitate de verificare a existenei este citirea n variabile STRING, la care numai prin apsarea tastei ENTER se genereaz transferul irului vid. Dac lungimea irului = 0, se consider c data nu a fost introdus. Dac lungimea irului este diferit de zero, se va proceda astfel: a - Pentru date numerice, valoarea irului va fi convertit ntr-un numr, folosind funcia VAL (sir); b Pentru date de tip caracter sau STRING, se aplic funiile specifice acestor tipuri de date (de exemplu, LEN etc.) c Pentru date calendaristice, se aplic funciile DTOC, DTOS, de exemplu, ale cror semnificaii au fost prezentate anterior. VALIDAREA LUNGIMII Lungimea unei date externe (introdus de la tastatur) se poate determina numai dac citirea se face ntr-o variabil ir (STRING). Dac datele introduse nu sunt de tip ir, ele vor fi convertite n iruri, pentru determinarea lungimii. Dup introducere, se testeaz lungimea irului efectiv, folosind funcia LEN. Dac lungimea nu ndeplinete condiia impus (de regul, s fie egal cu o valoare prestabilit), data se consider eronat. Dac data este corect, se va proceda similar validrii de existen. De fapt, validarea de existen este un caz particular al validrii de lungime: lungimea datei s fie diferit de 0. VALIDAREA NATURII Datele pot avea urmtoarele naturi: Alfabetic Numeric Alfanumeric n cmpul extern al unei date numerice pot s apar: semnul, cifrele 09, punctul zecimal i caracterele cu rol de spatiu. Validarea de numericitete se realizeaz fie direct, prin procedurile de citire, fie utiliznd procedura de conversie VAL. a) Validarea direct prin citire se bazeaz pe faptul c procedurile de citire genereaz eroare i ntrerup execuia programului, dac n timpul conversiei irului introdus de la terminal se depisteaz un caracter care nu face parte din mulimea admis pentru tipurile numerice. b) Validarea prin conversii proprii presupune introducerea datei numerice ntr-o variabil de tip STRING, urmat de conversia cu procedura VAL. n cmpul extern al unei date alfabetice pot s apar: caracterele A - Z, a - z, spaiul i, eventual, alte caractere (de exemplu -). Pentru datele numerice i alfabetice se pot construi proceduri de validare a naturii. Validarea naturii alfabetice se realizeaz prin verificarea naturii fiecrui caracter din irul citit (prin expresii relaionale sau prin expresii cu mulimi). VALIDAREA APARTENENEI LA O MULIME Verificarea apartenenei unei date numerice la o mulime prestabilit de valori se realizeaz fie prin expresii cu mulimi, dac mulimea este ordinal i se poate defini un literal de tip mulime, fie prin expresii relaionale, dac mulimea este real sau nu se poate defini o constant mulime.

21

Ctlin Tnase

FoxPro - Note de curs

Programele de aciune sunt specifice fiecrei probleme n parte i presupun efecturarea unor operaii cu un grad oarecare de complexitate. Sunt luate n discuie aciuni precum crearea de noi tabele, modificri ale structurilor unor tabele, introduceri de date n tabele, afiarea unor date care ndeplinesc anumite cerine etc. Programele de aciune sunt scrise, n principal, cu ajutorul operatorilor, instruciunilor i funciilor pe care mediul de programare Fox le pune la dispoziie. Dac aceste instrumente sunt insuficiente, utilizatorul i poate crea propriile funcii care pot fi apelate n programul de aciune principal. Secvenele de cod care compun funciile utilizator pot fi pri componente ale programului principal sau se pot regsi pe disc sub forma unor fiiere cu extensia .PRG, acestea fiind apelate din programul principal.

3 Modul de lucru asistat (interactiv, vizual)


Permite alegerea unei aciuni cu ajutorul ferestrelor, opiunilor, meniurilor, controalelor. Astfel, se pot scrie programe, fr cunoaterea sintaxei limbajului, dar cunoscnd cu exactitate paii care trebuie parcuri n timpul operrii cu ferestre, opiuni, meniuri, controale. Observaii: a) - Un mediu Visual de programare (Visual C++, Visual FoxPro, Visual Basic, Delphi), ofer urmtoarele instrumente de lucru: - Designers generatoare - Builders constructori - Wizards asisteni (vrjitori) b) - Efectele aciunilor programatorului se pot vizualiza permanent. c) - FoxPro este un mediu RAD (Rapid Application Development) ce permite o proiectare vizual a interfeei, spre deosebire de LDP tradiionale. Mai multe detalii vor fi prezentate n capitolul Mediul de programare Vixual Fox - Proiecte (Project Manager).

22

Ctlin Tnase

FoxPro - Note de curs

n Visual FoxPro La crearea tabelelor care aparin BD, trebuie s se precizeze att numele cmpurilor (coloanelor, rubricilor) care compun tabelele, ct i tipurile acestor cmpuri (tipurile datelor care vor fi incluse n coloanele tabelelor). De exemplu, dac dorim s crem tabela AGENDA.DBF pe discul C:\, scriem n fereastra de comenzi (Command) linia de comand: CREATE C:\AGENDA.DBF Se va deschide fereastra de dialog Table Designer de mai jos, n care: n rubrica Name, introducem numele cmpurilor (coloanelor) tabelei Din lista ascuns Type, selectm tipul fiecrui cmp. Implicit, Fox propune tipul Character, dar, deschiznd lista, putem alege un alt tip. n rubrica Width, stabilim dimensiunea cmpului, exprimat n numr de caractere (implicit 10) n rubrica Decimal, stabilim numrul de zecimale (n cazul datelor de tip numeric)

Tipuri de date

S prezentm, pe scurt, cteva dintre aceste tipuri. 1 Tipul Character Se alege pentru cmpurile de tip ir de caractere. Exist un puternic set de funcii care se adreseaz acestui tip de date. irurile se includ ntre apostrofuri, ghilimele sau paranteze ptrate. De exemplu, dac n tabel exist o nregistrare (sau mai multe) cu numele Albu, pentru a se afia toate nregistrrile cu numele Albu, scriem una dintre comenzile: LIST FOR nume = 'Albu' LIST FOR nume = Albu LIST FOR nume = [Albu] Operatori i funcii pentru iruri irurile de caractere pot intra n diverse relaii (<, >, # etc.), pot face obiectul unor funcii specializate pentru iruri sau pot constitui elemente distincte ale unor relaii. Operatori de concatenare Operator FoxPro Semnificaie Concatenare de iruri. Blancurile (spaiile) de la sfritul primului ir vor rmne n acelai loc, dup care se adaug, n continuare, cel de-al doilea ir Concatenare de iruri. Blancurile (spaiile) de la sfritul primului ir se vor aduga la sfritul celor dou iruri

+ -

Exemple: [Albu ] + Ion >>> Albu Ion [Albu ] Ion >>> AlbuIon

&& blancul a rmas pe poziia iniial && blancul a fost mutat la sfritul irului rezultant

23

Ctlin Tnase

FoxPro - Note de curs

Operatori relaionali Stabilesc n ce relaie se afl un termen al expresiei fa de altul. Operator FoxPro Semnificaie Identic cu == Egal cu = Mai mic dect < Mai mic sau egal cu <= Mai mare dect > Mai mare sau egal cu >= Diferit <>, #, != Inclus n $ Exemple: ? 'Alb' < 'Albu' ? 'Alb' > 'Albu' ? 'Alb' = 'Albu' ? 'Alb' <> 'Albu' ? 'Alb' = = 'Albu' ? 'Alb' = = 'Alb' ? 'Alb' $ 'Albu' Funcii pentru iruri Funcia LEN (sir) SUBSTR (sir, poz, lung)

>>> >>> >>> >>> >>> >>> >>>

T (TRUE) F (FALSE) F T F T T (TRUE)

LEFT (sir, n) RIGHT (sir, n) LTRIM (sir) RTRIM (sir) ALLTRIM (sir) AT (subsir, sir)

LOWER (sir) UPPER (sir) PROPER (sir) VAL (sir)

OCCURS (subsir, sir)

Descriere Returneaz lungimea irului sir. Exemplu: LEN (Albu) >>> 4 Extrage un subir dintr-un ir, ncepnd de la o poziie poz, pe lungimea lung. Exemplu: SUBSTR (CARTE, 2, 4) >>> ARTE Extrage n caractere din stnga irului Exemplu: LEFT (Albu, 3) >>> Alb Extrage n caractere din dreapta irului Exemplu: RIGHT (Volga, 4) >>> olga Elimin spaiile de la stnga irului Exemplu: LTRIM ( Albu) >>> Albu Elimin spaiile de la dreapta irului Exemplu: RTRIM (Albu ) >>> Albu Elimin spaiile din ambele pri ale irului Exemplu: ALLTRIM ( Albu ) >>> Albu Indic poziia unui subir ntr-un ir Exemplu: ? AT ('Alb', 'Albu') >>> 1 ? AT ('Alb', 'Harap Alb') >>> 7 Convertete literele mari n litere mici Exemplu: ? LOWER (CARTE) >>> carte Convertete literele mici n litere mari Exemplu: ? UPPER (carte) >>> CARTE Convertete iniialele cuvintelor n litere mari Exemplu: ? PROPER (albu ion) >>> Albu Ion Convertete un sir ntr-un numr. irul trebuie s conin cifre. Exemple: ? VAL (1234) >>> 1234 ? VAL (ALBU) >>> 0 Numr apariiile unui subir ntr-un ir Exemplu: OCCURS (ce, cercetare) >>> 2

24

Ctlin Tnase

FoxPro - Note de curs

2 Tipul Numeric Se alege pentru prelucrarea cmpurilor cu date de tip numeric. Dup domeniul de valori pe care le pot lua cmpurile sau variabilele, avem urmtoarele variante: Tip cmp Numeric Float Double Integer Mrime (Bytes) folosit pentru valori ntregi sau 8 bytes reale (fracii) date numerice exprimate n virgul 4 bytes mobil simpl precizie (VMSP) date numerice exprimate n virgul 8 bytes mobil dubl precizie (VMDP) Valori ntregi 4 bytes Descriere Domeniu de valori ntre 0.9 E 18 i + 0.9 E 19.

ntre 4.9 E 324 i 1.79 E 308 ntre 2.147.483.647 2.147.483.647 i

Currency

Valori monetare

8 bytes

ntre - 922337203685477.5807 i 922337203685477.5807 sau ntre - 9 x 10 la puterea a 14-a i 9 x 10 la puterea a 14-a

Operatori relaionali Operator FoxPro = < <= > >= <>, #, != Operatori aritmetici Operator FoxPro + * / ** sau ^

Semnificaie Egal cu Mai mic dect Mai mic sau egal cu Mai mare dect Mai mare sau egal cu Diferit

Semnificaie Sum Diferen Produs mprire Ridicare la putere Exemple: ? 10**2 >>> 100 ? 10 ^ 2 >>> 100 Modulo ntoarce restul mpririi ntregului A la ntregul B. Are acelai efect ca i funcia MOD (A, B ) Exemple: ? 16 % 10 >>> 6 ? MOD (16,10) >>> 6

Funcii matematice Funcia ABS (nr) MOD (A, B) ROUND (nr, zec) Descriere Calculeaz valoarea absolut a unui nr Exemplu: ? ABS (-15.4) >>> 15.4 Modulo ntoarce restul mpririi ntregului A la ntregul B. Exemplu: MOD (16, 10) = 6 Se rotunjete nr la un numr de zecimale zec Exemplu: ROUND (12.345678, 3) = 12.346

25

Ctlin Tnase

FoxPro - Note de curs

INT (nr) CEILING (nr) FLOOR (nr) STR (nr, dimens, zec)

Calculeaz partea ntreag a nr Exemplu: INT (2.3) = 2; INT (2.78) = 2 Rotunjire (aproximare) la cel mai apropiat (cel mai mic) ntreg >= nr Exemplu: ? CEILING (2.2) = 3 Rotunjire (aproximare) la cel mai apropiat (cel mai mare) ntreg <= nr Exemplu: ? FLOOR (2.2) = 2 Transform un numr nr ntr-un ir de lungime dimens, alocnd zec poziii zecimale Exemple: ? STR (1234.5678, 10, 2) = 1234.57 ? STR (1234.5678, 5, 2) = 1234 ? STR (1234.5678, 6, 2) = 1234.6 i

3 Tipurile

Date

DateTime

Tipul Date se folosete pentru prelucrarea cmpurilor (valorilor) de tip dat calendaristic. Tipul Date Time se folosete pentru a valori ce conin att data calendaristic, precum i ora. Funcii standard asociate Funcia DATE ( ) TIME ( ) DATETIME ( ) DAY (<expr. Dat>) Descriere Afieaz (ntoarce, returneaz) data curent Exemplu: ? DATE ( ) >>> 10 / 20 / 03 adic 20 oct 2003 Afieaz timpul (ora) sistemului Exemplu: ? TIME ( ) >>> 06:17:31 AM (ora 6 dimineaa) Afieaz att data curent, ct i ora Exemplu: ? DATETIME ( ) >>> 10 / 20 / 03 06:17:31 AM Extrage numrul zilei din <expresie dat> Exemple: n FOX pentru DOS: ? DAY ( { 10 / 21 / 03 } ) >>> 21 (formatul datei este LL / ZZ / AN) sau STORE { 10 / 21 / 03 } TO data (data este numele unei variabile) ? DAY (data) >>> 21 n Visual FOX: ? DAY ( {^ 2003-10-21} ) >>> 21 (formatul datei: AAAA - LL - ZZ) sau STORE {^ 2003-10-21} to data (data este numele unei variabile) ? DAY ( data) >>> 21 Extrage numrul lunii din <expresie dat> Exemple: n FOX pentru DOS: ? MONTH ( { 10 / 21 / 03 } ) >>> 10 (formatul datei este LL / ZZ / AN) sau STORE { 10 / 21 / 03 } TO data (data este numele unei variabile) ? MONTH (data) >>> 10 n Visual FOX: ? MONTH ( {^ 2003-10-21} ) >>> 10 (formatul datei: AAAA - LL ZZ) sau STORE {^ 2003-10-21} to data (data este numele unei variabile) ? MONTH ( data) >>> 10

MONTH (<expr. Dat>)

26

Ctlin Tnase

FoxPro - Note de curs

YEAR (<expr. Dat>)

CMONTH (<expr Dat>)

DTOS (<expr. Dat>)

DTOC (<expr. Dat> [,1] )

Extrage numrul anului din <expresie dat> Exemple: n FOX pentru DOS: ? YEAR ( { 10 / 21 / 03 } ) >>> 2003 (formatul datei este LL / ZZ / AN) sau STORE { 10 / 21 / 03 } TO data (data este numele unei variabile) ? YEAR (data) >>> 2003 n Visual FOX: ? YEAR ( {^ 2003-10-21} ) >>> 2003 (formatul datei: AAAA - LL ZZ) sau STORE {^ 2003-10-21} to data (data este numele unei variabile) ? YEAR ( data) >>> 2003 Afieaz numele lunii din <expresie dat>. Returneaz un ir de caractere (de aici i numele funciei CMONTH) Exemple: n FOX pentru DOS: ? CMONTH ({10 / 21 / 03}) >>> October (formatul datei: LL / ZZ / AN) sau STORE { {10 / 21 / 03} ) to data (data este numele unei variabile) ? CMONTH ( data) >>> October n Visual FOX: ? CMONTH ({ ^ 2003-10-21}) >>> October (formatul datei: AAAA LL - ZZ) sau STORE {^ 2003-10-21} to data (data este numele unei variabile) ? CMONTH ( data) >>> October Convertete Data calendaristic ntr-un ir de caractere n formatul YYYYMMDD. Exemple: n FOX pentru DOS: ? DTOS ( {10 / 21 / 2003} ) >>> 20031021 sau STORE { {10 / 21 / 03} ) to data (data este numele unei variabile) ? DTOS ( data) >>> 20031021 n Visual FOX: ? DTOS ({ ^ 2003-10-21}) >>> 20031021 (formatul datei este AAAA LL - ZZ) sau STORE {^ 2003-10-21} to data (data este numele unei variabile) ? DTOS ( data) >>> 20031021 Convertete Data calendaristic ntr-un ir de caractere. Dac se precizeaz i argumentul 1, care este opional, irul returnat va avea forma AAAALLZZ (la fel ca la aplicarea funciei DTOS) Exemple: n FOX pentru DOS: ? DTOC ( {10 / 21 / 2003} ) >>> 10 / 21 / 2003 ? DTOC ( {10 / 21 / 2003}, 1 ) >>> 20031021 sau

27

Ctlin Tnase

FoxPro - Note de curs

CTOD ( <exp C> )

STORE { {10 / 21 / 03} ) to data (data este numele unei variabile) ? DTOC ( data) >>> 10 / 21 / 2003 ? DTOC ( data, 1) >>> 20031021 sau ? DTOC ( DATE ()) >>> 10 / 21 / 2003 ? DTOC ( DATE (), 1) >>> 20031021 n Visual FOX: ? DTOC ({ ^ 2003-10-21}) >>> 10 / 21 / 2003 ? DTOC ({ ^ 2003-10-21}, 1) >>> 20031021 sau STORE {^ 2003-10-21} to data (data este numele unei variabile) ? DTOC ( data) >>> 10 / 21 / 2003 ? DTOC ( data, 1) >>> 20031021 sau ? DTOC ( DATE ()) >>> 10 / 21 / 2003 ? DTOC ( DATE (), 1) >>> 20031021 Transform o expresie Caracter ntr-o expresie Dat Exemple: n FOX pentru DOS i n Visual FOX:: ? CTOD ( 10.21.2003 ) >>> 10 / 21 / 2003 ? CTOD ( 10 / 21 / 2003 ) >>> 10 / 21 / 2003

4 Tipul Logical Este caracteristic doar datelor (variabile i cmpuri) care pot lua numai valorile TRUE (.T.) i FALSE (.F.). Exemple: ?2<3 are ca rezultat . T . ?2>3 are ca rezultat . F . Operatori logici Mai muli termeni logici pot fi grupai (cu ajutorul parantezelor) sau li se pot aplica operatori specifici. Operator FoxPro Paranteze ( ) ! sau NOT AND OR Semnificaie Grupeaz expresii logice Negaie logic SI logic SAU logic

Operatorul logic ! (sau NOT) determin ca elementul logic cruia i se aplic s fie transformat n opusul su. Operatorul logic AND determin ca eventualele condiii ce snt legate s fie indeplinite simultan. Operatorul logic OR determin ca eventualele condiii ce snt legate s fie ndeplinite fiecare, pe rnd. Exemple: ? (2 < 3) AND (2 > 3) ? (2 < 3) OR (2 > 3) ? NOT (2 < 3) AND (2 > 3) ? NOT ((2 < 3) AND (2 > 3)) && && && && are ca rezultat are ca rezultat are ca rezultat are ca rezultat .F. .T. .F. .T.

28

Ctlin Tnase

FoxPro - Note de curs

Alte funcii aplicate diferitelor tipuri de date:


Descriere Determin MAXIMUL dintre expresiile exp 1, exp 2, Exemplu: ? MAX (25, 14, 73) >>> 73 Determin MINIMUL dintre expresiile exp 1, exp 2, MIN ( exp 1, exp 2, ) Exemplu: ? MIN (25, 14, 73) >>> 14 Returneaz litera corespunztoare tipului de dat al expresiei caracter TYPE ( expC ) expC. ATENIE: exp C se scrie ntre apostrofuri sau ntre ghilimele. n cazul unor expresii de tip ir de caractere se vor folosi att ghilimelele ct i apostrofurile. Exemple: ? TYPE ( ' Alexa ' ) >>> C ? TYPE ( " 'Alexa ' " ) >>> C ? TYPE ( 'Alexa ' ) >>> U (Undefined type of expression) ? TYPE ( ' (12 * 3) + 4 ' ) >>> N ? TYPE ( ' DATE( ) ' ) >>> D ? TYPE ( ' .F. OR .T. ' ) >>> L ? TYPE ( ' TOTAL = 42 ') >>> U (Undefined type of expression) ? TYPE ( ' $ 19.99 ') >>> Y (Currency) IIF ( exp L, exp 1, exp 2 ) Testeaz o expresie LOGIC exp L. Dac exp L este adevrat, rezultatul va fi exp 1, iar dac exp L este fals, rezultatul va fi exp 2. Exemple: IIF (2 < 3, corect, incorect) >>> corect BETWEEN ( exp 1, exp 2, Testeaz dac exp 1 aparine intervalului exp2, exp 3. Exemplu: exp 3 ) ? BETWEEN ( 12, 10, 20 ) >>> . T . Testeaz daca exp este vid. EMPTY ( exp ) Exemple: ? EMPTY ( ) >>> . T . ? EMPTY ( ) >>> . T . ? EMPTY ( {//} ) >>> . T . ? EMPTY ( {12//} ) >>> . T . ? EMPTY ( {/12/} ) >>> . T . ? EMPTY ( {//12} ) >>> . T . ? EMPTY ( {12/12/} ) >>> . F . ? EMPTY ( 5 ) >>> . F . INLIST ( exp 1, exp 2, ) Testeaz dac exp 1 aparine listei formate din expresiile exp 2, Exemple: ? INLIST ( 4, 1, 2, 3, 4, 5 ) >>> . T . ? INLIST ( 6, 1, 2, 3, 4, 5 ) >>> . F . ? INLIST ( Alexa, Popa, Alexa, Albu ) >>> . T . ? INLIST ( Rosu, Popa, Alexa, Albu ) >>> . F . Funcia MAX ( exp 1, exp 2, )

Cmpurile de tip Memo


Uneori, la memorarea datelor ntr-o tabel (BD), apar situaii cnd cantitatea de informaii ce trebuie stocat ntr-un cmp difer foarte mult de la o nregistrare la alta. De exemplu, cmpul Adresa poate conine adrese exprimate printr-un numr mic de caractere, dar i adrese lungi. La dimensionarea acestui cmp ar trebui s se in seama de adresa cea mai lung, deci s se rezerve 40 50 de caractere pentru fiecare adres, chiar dac acest spaiu va fi ocupat parial de majoritatea adreselor. Pentru a evita

29

Ctlin Tnase

FoxPro - Note de curs

acest neajuns, se apeleaz la tipul Memo, care permite memorarea unor cantiti variabile de informaii (permite memorarea unor texte cu lungime variabil). Unele funcii specifice tipului de date C (Character) se pot aplica i datelor de tip Memo. La definirea structurii unei tabele (BD) cu cmpuri de tip Memo, se va crea un fiier nou n care se vor nregistra informaiile din cmpul Memo. Noul fiier are acelai nume ca i tabela creia i se asociaz, are extensia .FPT i se deschide simultan cu tabela asociat. Pentru a putea depune informaii ntr-un cmp Memo, se poate proceda n mai multe moduri: 1 Se stabilete o nregistrare drept nregistrare curent, dup care se se lanseaz comanda: MODIFY MEMO < list cmpuri > Exemplu: S presupunem c dorim s scriem adresele n cmpuri Memo: GOTO 1 sau GO 1 sau 1 Enter && nregistrarea 1 devine curent MODIFY MEMO adresa Se deschide o fereastr Memo n care adugm datele pentru nregistrarea 1, pe care le vom salva cu CTRL + W. Exemplu: Presupunem c dorim s scriem adresele n cmpuri Memo: GOTO 2 sau GO 2 sau 2 Enter && nregistrarea 2 devine curent MODIFY MEMO adresa Se deschide o fereastr Memo n care adugm datele pentru nregistrarea 2, pe care le vom salva cu CTRL + W. Se procedeaz n mod analog pentru urmtoarele nregistrri. 2 Deschidem fereastra tabelei cu BROWSE, plasm marcajul pe o nregistrare (aceasta devine curent), cu TAB plasm marcajul pe cmpul Memo, apoi tastm CTRL + Page Up sau CTRL + Page Down sau CTRL + Home, se deschide fereastra Memo, introducem datele i le salvm (nchidem fereastra Memo) cu CTRL + W. 3 - Se stabilete o nregistrare drept nregistrare curent, dup care se se lanseaz comanda: APPEND MEMO < cmp Memo > FROM < fiier > [ OVERWRITE ]

prin care prelum date dintr-un fiier de pe disc i le depunem n cmpul Memo. Clauza OVERWRITE permite suprascrierea datelor din cmpul Memo cu datele din fiier. Implicit (dac lipsete clauza OVERWRITE), datele din fiier se adaug celor existente n cmpul Memo. Transferul de date se poate face i invers: dintr-un cmp Memo, ntr-un fiier pe disc, cu comanda: COPY MEMO < nume cmp Memo > TO < fiier > [ ADDITIVE ] Clauza ADDITIVE permite adugarea datelor din cmpul Memo la datele existente n fiier, fr ca datele fiierului s fie afectate. n caz contrar, datele din fiier se pierd (snt suprascrise de cele din cmpul Memo). Exemple: GOTO 4 && nregistrarea 4 devine curent APPEND MEMO adresa FROM C:\prieteni.TXT GOTO 9 COPY MEMO adresa TO c:\date.TXT ADDITIVE

30

Ctlin Tnase

FoxPro - Note de curs

Pentru a deschide (edita) un cmp Memo, procedm astfel: BROWSE - deschidem fereastra tabelei (BD) Plasm marcajul pe o nregistrare, care devine curent Plasm cursorul pe cmpul de tip Memo al nregistrrii curente Tastm CTRL + Page Up sau CTRL + Page Down sau CTRL + Home sau dublu-click cu mouseul i se deschide fereastra Memo.

Cmpurile de tip General


Un cmp de tip General permite memorarea imaginilor grafice sau a altor obiecte, prin tehnica OLE (Object Linking and Embeding legare i ncorporare de obiecte). OLE este o tehnic de comunicare ntre aplicaii, prin care o aplicaie client poate folosi servicii de la o aplicaie server. De exemplu, ntr-un document Word pot fi incluse i manipulate imagini create sau editate cu aplicaia Paint. Aplicaia Paint este o aplicaie server, pentru aplicaia Word (aplicaie client, care beneficiaz de serviciile alicaiei server, Paint). n FOX pot fi stocate i manipulate obiecte (imagini, sunete, texte, tabele etc.) n cmpuri de tip General. Obiectele, create sau editate de alte aplicaii Windows, pot fi pstrate n cmpul General prin LEGARE (Linking) sau NCORPORARE (Embeding). n ambele cazuri, ntre BD i aplicaia server (aplicaia surs cea cu care a fost creat obiectul) se stabilete o legtur, care permite apelarea, direct din FOX, a aplicaiei server, n momentul n care dorim editarea (deschiderea) obiectului. Introducerea unui obiect ntr-un cmp General se face cu comanda: APPEND GENERAL < cmp General > FROM < fiier > [ LINK ]

Comanda NCORPOREAZ, n cmpul General al nregistrrii curente, o copie a fiierului < fiier >. Clauza LINK va LEGA fiierul de BD. Presupunem c am creat o tabel cu un cmp Poza de tip General, n care am stocat deja imagini, prin comanda de mai sus. Pentru a vizualiz cmpul Poza al unei nregistrri (curente), procedm astfel: - BROWSE - deschidem fereastra tabelei (BD) - Plasm marcajul pe o nregistrare, care devine curent - Plasm cursorul pe cmpul Poza, de tip General, al nregistrrii curente - Tastm CTRL + Page Up sau CTRL + Page Down sau CTRL + Home sau dublu-click cu mouseul i se afieaz obiectul. Exemplu: Fie o tabel (BD) n care avem un cmp Poza de tip General. Pentru nregistrrile 1, 2 i 3 dispunem de cte o poz (fiier grafic .BMP). Pentru a se asocia celor 3 nregistrri cte o poz, scriem: GOTO 1 && nregistrarea 1 devine curent APPEND GENERAL Poza FROM C:\1.BMP GOTO 2 && nregistrarea 2 devine curent APPEND GENERAL Poza FROM C:\2.BMP GOTO 3 && nregistrarea 3 devine curent APPEND GENERAL Poza FROM C:\3.BMP

Variabile
O variabil este o dat folosit ntr-un program. O variabil utilizator este o zon de memorie creia i se asociaz: - un nume (un ir de caractere alfanumerice; de exemplu: x, y, prenume, total24, suma33, ) - un tip (tipul variabilei este asociat odat cu valoarea; de exemplu: x = 15, x este de tip N) - o valoare (valoarea atribuit unei variabile stabilete, n mod implicit, i tipul variabilei).

31

Ctlin Tnase

FoxPro - Note de curs

Variabilele pot fi: A - Locale (private) au sens (sunt vzute) doar ntr-o subunitate (funcie, procedur) a programului Declararea variabilelor locale (private) se face astfel: PRIVATE < list de variabile > sau PRIVATE ALL [ LIKE < ablon > | EXCEPT < ablon > ] Clauza ALL LIKE declar locale toate variabilele care verific un < ablon > (verific anumite condiii). Clauza ALL EXCEPT declar locale toate variabilele cu excepia celor care verific un < ablon > Exemplu: *** Program demonstrativ PRIVATE *** x = 10 y = 15 DO VALORI ? x, y

&& Afieaz 10, 100 && Dup apelul procedurii VALORI, x fiind PRIVATE (local), nu && transmite valoarea n exterior. Variabila y fiind GLOBAL, dup && apelul procedurii, transmite valoarea n exteriorul procedurii.

PROCEDURE VALORI PRIVATE x x = 50 y = 100 ? x, y RETURN

&& se declar variabila x ca variabil local

&& Afieaz 50, 100. Valorile primite n procedur sunt afiate, aici, && neschimbate

B - Globale (publice) sunt vizibile (recunoscute) n toate subunitile programului. Declararea variabilelor globale (publice) se face astfel: PUBLIC < list de variabile > Exemplu: PUBLIC x, y x = 10 y = 15 DO VALORI ? x, y

&& Se afieaz x = 50, y = 100

PROCEDURE VALORI PRIVATE x x = 50 y = 100 ? x, y && Se afieaz x = 10, y = 100 RETURN

32

Ctlin Tnase

FoxPro - Note de curs

Comenzi pentru variabile


Comanda Variabila = expresie Descriere Atribuire: se atribuie variabilei valoarea expresiei Exemple: X = 12 * 5 / 16 Y = 57 * X + 12 && n expresia lui Y, X trebuie s fie cunoscut Permite introducerea (citirea) unei valori de la tastatur n variabila var. INPUT [ mesaj ] TO var Tipul valorii introduse stabilete i tipul variabilei var. Exemple: INPUT "Introduceti numele = " TO nume Mesajul Introduceti numele = precizeaz ce (aciune) avem de fcut. Dac dorim s dm variabilei nume valoarea ir de caractere Alex, vom scrie Alex (folosim delimitatorii ghilimele) ? nume >>> Alex INPUT "Introduceti x = " TO x Introducem 55.4 ?x >>> 55.4 ACCEPT [ mesaj ] TO var Citete de la tastatur, n variabila var, o valoare de tip ir de caractere Exemple: ACCEPT "Dati x = " TO x Introducem 12 ? TYPE ('x') >>> C (dei am introdus de la tastatur 12, tipul expresiei este C (ir de caractere) STORE expr TO lista de Atribuiri multiple ale expr ctre lista de variabile Exemple: variabile STORE 7 TO x, y, z ?x >>> 7 ?y >>> 7 ?z >>> 7 ? TYPE (x) >>> N STORE mesaj TO x, y, z ?x >>> mesaj ?y >>> mesaj ?z >>> mesaj ? TYPE (x) >>> C OBSERVAIE: Iniial, x, y, z au primit valori ntregi. Prin atribuirea ctre x, y, z a irului mesaj, x, y, z i pierd calitatea de variabile numerice ntregi i devin variabile de tip caracter (ir de caractere). RELEASE list variab terge lista de variabile sau toate variabilele. sau Exemple: X = 12 RELEASE ALL Y = 14 Z = 16 ?x >>> 12 ?y >>> 14 ?z >>> 16 RELEASE x && se terge x ?x >>> Variable x is not found RELEASE ALL && se terg toate variabilele rmase (y i z) Salvarea variabilelor n fisier . mem de pe disc SAVE TO fisier . mem

33

Ctlin Tnase

FoxPro - Note de curs

Refacerea (restaurarea) variabilelor din fisier . mem n zona de lucru RESTORE FROM fisier . mem Exemple: x = 11 y = 22 ?x >>> 11 ?y >>> 22 SAVE TO C:\variab.mem RELEASE ALL && se terg variabilele x i y ?x >>> Variable x is not found ?y >>> Variable y is not found RESTORE FROM C:\variab.mem ?x >>> 11 ?y >>> 22 Editeaz o variabil sau un cmp al unei tabele, la poziia lin, col de pe @ lin, col GET variab ecran. Exemplu: X = 12 @ 4, 6 GET x && la linia 4, coloana 6 se afieaz valoarea lui x Afieaz expresiile din list pe linia curent, ncepnd de la coloana col. ? lista expresii AT col Exemple: ? "Albu" AT 12 && se afieaz irul Albu la coloana 12 ? 3*4 AT 20 && se afieaz rezultatul 12 la coloana 20 ? Pretul = , 4*5 AT 22 && se afieaz Preul = 20 la coloana 22 Afieaz expresie ncepnd din poziia lin, col @ lin, col SAY expresie Exeple: @ 12, 14 SAY "text" && n poziia 12, 14 se afieaz text @ 13, 15 SAY 25 * 5 && se afieaz 125 la poziia 123, 15 WAIT [ mesaj ] TO Introduce o pauz n program i afieaz (opional) un mesaj, eventual variab [ WINDOW | ntr-o fereastr (WINDOW). Tasta apsat se transmite ctre variab. Exemple: NOWAIT ] a). WAIT "Introduceti x = " TO x Se introduce o cifr sau o liter, care se transmite ctre variabila x. De exemplu, apsm 4 ? x >>> 4 b). WAIT "Introduceti x = " TO x WINDOW Efect asemntor, dar introducerea valorii pentru x se face ntr-o fereastr. Clauza NOWAIT continu execuia programului imediat dup afiarea mesajului. Dac se omite NOWAIT, se face o pauz pn cnd mesajul dispare prin apsarea unei taste sau printr-un click de mouse. c). WAIT "Introduceti x = " TO x WINDOW NOWAIT Aici este inutil s scriem TO x, deoarece nu se ateapt apsarea unei taste. Afieaz un mesaj ntr-o caset care se va nchide cu click pe OK. Funcia MESSAGEBOX nu apare n Fox 2.5 Exemple: MESSAGEBOX ("Introduceti datele") MESSAGEBOX (12 * 3)

MESSAGEBOX ( mesaj )

34

Ctlin Tnase

FoxPro - Note de curs

Comenzi pentru imprimant


SET PRINTER ON | OFF Activeaz sau dezactiveaz imprimanta. SET DEVICE TO Direcionarea comenzii @ ctre imprimant, respectiv ctre ecran. PRINTER | TO SCREEN

Tablouri (masive de date)


Sunt structuri neomogene (pot conine date de tipuri diferite) i pot avea cel mult 2 dimensiuni. Astfel, n programele Fox se pot ntlni doar vectori i matrici. Declararea tablourilor: DIMENSION | DECLARE < nume tablou (dim 1 [, dim 2 ] ) > Pentru a declara o variabil global de tip tablou, scriem: PUBLIC ARRAY < lista de variabile tablou > La declararea dimensiunii, elementele unui tablou se iniializeaz n mod automat (implicit) cu .F. Exemple: DIMENSION X (3) && S-a declarat un vector cu 3 elemente ? X (1) && Se afieaz .F. && Iniializare implicit ? x (2) && Se afieaz .F. && Iniializare implicit ? x (3) && Se afieaz .F. && Iniializare implicit DIMENSION A (3,2) ? A (1, 1) ? A (1, 2) . ? A (3, 2) && S-a declarat o matrice cu 3 x 2 elemente && Se afieaz .F. && Iniializare implicit && Se afieaz .F. && Iniializare implicit && Se afieaz .F. && Iniializare implicit

Tabloul poate fi redimensionat pe parcursul programului, fr ca prin aceasta s se reiniializeze elementele. Exemple: a). Vectori DIMENSION x (3) x (1) = 7 x (2) = 25 x (3) = 49 DIMENSION x (5) && Redimensionare vector x ? x (1) && Se afieaz 7 ? x (2) && Se afieaz 25 ? x (3) && Se afieaz 49 ? x (4) && Se afieaz .F. && Iniializare implicit ? x (5) && Se afieaz .F. && Iniializare implicit b). Matrici DIMENSION A (1, 1) = 5 A (1, 2) = 8 A (2, 1) = 16 A (2, 2) = 34 DIMENSION ? A (1, 1) ? A (1, 2) ? A (1, 3) ? A (2, 1)

A (2, 2)

A (3, 3) >>> 5 >>> 8 >>> >>> 16

&& Redimensionare matrice

.F.

&& Iniializare implicit

35

Ctlin Tnase

FoxPro - Note de curs

? A (2, 2) ? A (2, 3) ? A (3, 1) ? A (3, 2) ? A (3, 3)

>>> >>> >>> >>> >>>

34 .F. .F. .F. .F. && Iniializare implicit && Iniializare implicit && Iniializare implicit && Iniializare implicit

Iniializarea simultan a tuturor elementelor unui tablou se poate face cu comanda STORE < valoare > TO < nume tablou > Exemplu: DIMENSION x (3) STORE 45 TO x ? x (1) ? x (2) ? x (3)

&& Se afieaz 45 && Se afieaz 45 && Se afieaz 45

Funcii aplicate tablourilor Funcia ALEN ( tabl [, n] ) Descriere Determin: numrul de elemente din tablou, dac atributul n lipsete sau n= 0 numrul de linii, dac n = 1 numrul de coloane, dac n = 2 Exemple: DIMENSION X (3) ALEN (X) >>> 3 ALEN (X, 0) >>> 3 ALEN (X, 1) >>> 3 ALEN (X, 2) >>> 0 DIMENSION A (3, 2) ALEN (A) >>> 6 ALEN (A, 0) >>> 6 ALEN (A, 1) >>> 3 ALEN (A, 2) >>> 2 Insereaz, n poziia poz, ntr-un vector, un element, dac n lipsete ntr-o matrice, o linie, dac n = 1 o coloan, dac n = 2 Inserarea unui element, linie sau coloan nu modific dimensiunea tabloului. n schimb, n poziia unde are loc inserarea, elementele sunt iniializate cu .F. Exemple: n cazul unui vector: DIMENSION X (4) X (1) = 11 X (2) = 12 X (3) = 13 X (4) = 14 AINS (X, 2) && Se insereaz un element, n poziia 2 X (1) = 11 X (2) = .F. X (3) = 13 X (4) = 14 n cazul unei matrici: DIMENSION A (3, 3)

AINS ( tabl, poz [, n] )

36

Ctlin Tnase

FoxPro - Note de curs

A (1,1) = 11 A (1,2) = 12 A (1,3) = 13 A (2,1) = 21 A (2,2) = 22 A (2,3) = 23 A (3,1) = 31 A (3,2) = 32 A (3,3) = 33 AINS (A, 3, 2) && Se insereaz, n poziia 3, o coloan (n = 2) A (1,1) = 11 A (1,2) = 12 A (1,3) = .F. A (2,1) = 21 A (2,2) = 22 A (2,3) = .F. A (3,1) = 31 A (3,2) = 32 A (3,3) = .F. terge, n poziia poz, ADEL (tabl, poz [, n] ) ntr-un vector, un element, dac n lipsete ntr-o matrice, o linie, dac n = 1 o coloan, dac n = 2 tergerea unui element, linie sau coloan nu modific dimensiunea tabloului. n schimb, n poziia unde are loc tergerea, elementele din dreapta (sau de dedesubt) sunt deplasate spre stnga (sau n sus), iar elementele de pe ultima poziie se iniializeaz cu .F. Exemple: n cazul unui vector: DIMENSION x (4) X (1) = 11 X (2) = 12 X (3) = 13 X (4) = 14 ADEL (X, 1) && Se terge un element, n poziia 1 X (1) = 12 X (2) = 13 X (3) = 14 X (4) = .F. ADEL (X, 2) && Se terge nc un element, n poziia 2 X (1) = 12 X (2) = 14 X (3) = .F. X (4) = .F. n cazul unei matrici: DIMENSION A (3, 3) A(1,1) = 11 A(1,2) = 12 A(1,3) = 13 A(2,1) = 21 A(2,2) = 22 A(2,3) = 23 A(3,1) = 31 A(3,2) = 32 A(3,3) = 33 ADEL (A, 3, 2) && Se terge, n poziia 3, o coloan (n = 2) A(1,1) = 11 A(1,2) = 12 A(1,3) = .F. A(2,1) = 21 A(2,2) = 22 A(2,3) = .F. A(3,1) = 31 A(3,2) = 32 A(3,3) = .F. ADEL (A, 2, 2) && Se terge, n poziia 2, o coloan (n = 2) A(1,1) = 11 A(1,2) = .F. A(1,3) = .F. A(2,1) = 21 A(2,2) = .F. A(2,3) = .F. A(3,1) = 31 A(3,2) = .F. A(3,3) = .F. ASCAN (tabl, exp [,poz Caut, n tabloul tabl, expresia exp, ncepnd de la poziia poz, pe lungimea Lung i indic poziia expresiei n tablou [,Lung]] ) Exemple: Pentru vectorul X, respectiv matricea A de mai sus, avem: ? ASCAN (x, 12) >>> 1 ? ASCAN (A, 21) >>> 1 ? ASCAN (A, 11) >>> 4 Copiaz elementele din tabloul T1 n tabloul T2 ncepnd cu poziia poz, ACOPY ( T1, T2 [,poz pe lungimea Lung. [,Lung]] ) Exemplu: DIMENSION X (4) X (1) = 11 X (2) = 12 X (3) = 13 X (4) = 14 DIMENSION Y (4) ACOPY (X, Y) && Se copiaz vectorul X n vectorul Y Y (1) = 11 Y (2) = 12 Y (3) = 13 Y (4) = 14 Analog se procedeaz i pentru matrici.

37

Ctlin Tnase

FoxPro - Note de curs

ASORT ( T [, poz [,Lung Sorteaz un tablou T, ncepnd de la poziia poz, pe lungimea Lung [, n]]] ) Cresctor (dac n = 0) Descresctor (dac n <> 0) Exemple: DIMENSION X (4) X (1) = 11 X (2) = 12 X (3) = 13 X (4) = 14 ASORT (X, 1, 4, 1) && Se sorteaz vectorul X de la poziia 1, pe toat lungimea (4), n sens descresctor (n=1). Dup sortare, avem: X (1) = 14 X (2) = 13 X (3) = 12 X (4) = 11

Macrosubstituie (expresie nume)


Este un procedeu de folosire a coninutului unei variabile, ntr-o comand, ca identificator . Macrosubstituia se simbolizeaz prin & (ampersand) scris naintea numelui de variabil. Macrosubstituia se mai numete i expresie-nume pentru c ea ateapt un nume sau un identificator. Expresiile-nume pot conine: nume de fiiere, de ferestre, de aliasuri, numere de zone etc. Exemple: 1). alfa = 'elevi' && aici, vaiabila alfa primete, prin atribuire, valoarea-ir elevi beta = alfa && aici, vaiabila beta primete, prin atribuire, valoarea-ir alfa ? alfa >>> elevi ? beta >>> alfa ? &beta >>> elevi && coninutul lui alfa (irul elevi) se transmite lui beta 2). alfa = 5 beta = 'alfa' ? alfa ? beta ? &beta && aici, vaiabila alfa primete, prin atribuire, valoarea numeric 5 && aici, vaiabila beta primete, prin atribuire, valoarea-ir alfa >>> 5 >>> alfa >>> 5 && coninutul lui alfa (5) se transmite lui beta

Zone de lucru
O tabel (BD), dup ce a fost creat, poate fi exploatat pe viitor, fr a fi necesar crearea ei din nou. Ea trebuie doar s fie deschis. Acest lucru presupune c, n memoria RAM a calculatorului, s se rezerve o zon n care s se poat memora toate informaiile necesare utilizrii tabelei (BD). FoxPro 2.5 pentru MS-DOS, n versiunea Standard, poate manipula simultan 25 de astfel de zone, deci 25 de baze de date. n FoxPro 2.5 versiunea Extended se pot deschide i manipula baze de date n 255 de zone de lucru. n Visual FoxPro exist 32767 zone de lucru. ALIAS-ul unei tabele = un pseudonim, o prescurtare prin care se reprezint att tabela (BD), ct i zona de lucru. La deschiderea unei BD ntr-o zon de lucru, acesteia i se atribuie un nume pe care l vom numi ALIAS. Deci, tabela (BD) deschis n zona de lucru va putea fi identificat i prin aliasul ei. Atunci cnd se deschide un tabel, FoxPro folosete automat numele fiierului ca alias implicit. Exemplu: Dac se deschide tabelul Clieni ntr-o zon de lucru disponibil (zona 1) cu ajutorul comenzilor urmtoare, tabelului i va fi asociat aliasul implicit clieni: SELECT 1 USE clieni Pentru identificarea unei zone de lucru se folosesc: - literele A - J sau numerele 1 - 10, pentru primele 10 zone - numerele 1 - 25 - un ALIAS.

38

Ctlin Tnase

FoxPro - Note de curs

Deschiderea unei BD ntr-o anumit zon de lucru atribuie acestei zone o denumire asociat, numit ALIAS, denumire ce poate fi invocat (indicat, apelat) atunci cnd se fac referiri la zona respectiv. Selectarea unei zone de lucru se face cu comanda: SELECT nr. zon sau, dac n zona respectiv este deschis o BD, se poate specifica drept parametru alias-ul, bazei de date: SELECT alias Alias-urile implicite n versiunea Standard snt asignate astfel: A-J pentru zonele 1 - 10 W11 - W25 pentru zonele 11 - 25 Alias-urile implicite n versiunea Extended snt asignate astfel: A-J pentru zonele 1 - 10 W11 - W255 pentru zonele 11 - 255 La un moment dat, doar una din cele 25 de zone de lucru ale FoxPro este curent. Aceasta nseamn c o anumit comand, n interiorul creia nu s-a specificat explicit tabela (BD) la care se refer, va aciona asupra BD din zona de lucru curent. La pornirea FoxPro, zona de lucru curent va fi zona A sau 1. Aceasta se poate schimba cu comanda SELECT care are sintaxa: SELECT <expresie numeric> | <expresie ir de caractere> unde: - expresie numeric - reprezint numrul zonei de lucru ce va fi activat - expresie ir de caractere - reprezint aliasul tabelei (BD) deschise n acea zon de lucru. Exemplu: SELECT 1 (numrul zonei) sau SELECT A (aliasul zonei) SELECT CLIENTI (numele BD) Dac n zona de lucru 2 avem deschis BD DEBITE, pentru selectarea acestei zone de lucru putem folosi comenzile echivalente: SELECT 2 SELECT B SELECT DEBITE Zona de lucru 2 devine, astfel, zona de lucru curent. Ultima zon selectat se numete zon curent. Pentru a afla care este zona de lucru curent se folosete funcia SELECT ( ) care returneaz numrul zonei de lucru curente. Comanda SELECT 0 deschide prima zon liber.

Aliasul unei tabele (BD)


Identificarea unei tabele (BD) se face: - prin intermediul zonei de lucru n care ea a fost deschis - prin aliasul tabelei (BD). La deschiderea unei tabele (BD), acesteia i se atribuie un nume, prin care tabela (BD) se identific i care poart numele de ALIAS. Atribuirea aliasului unei tabele (BD) se face: a - fie de ctre programator, b - fie de ctre FoxPro (dac programatorul a omis acest lucru). a - Un alias definit de utilizator const din maximum 254 de caractere (litere, cifre sau liniue de subliniere) i trebuie s nceap cu o liter sau o liniu de subliniere. Dac un alias furnizat de utilizator conine un caracter nepermis, FoxPro creaz automat un alias.

39

Ctlin Tnase

FoxPro - Note de curs

Stabilirea unui alias de ctre programator se face cu comanda USE <nume tabel> ALIAS <alias> n care <alias> = aliasul (numele) ce se atribuie bazei de date. Exemple: SELECT 1 USE Clienti ALIAS cli n acest caz, pentru a face referire la tabela deschis (Clienti), se va folosi aliasul atribuit (n exemplul de mai sus, cli). SELECT agenda n B ALIAS tabel SELECT tabel && se deschide tabela (BD) AGENDA n zona B, && atribuindu-i-se aliasul tabel && se selecteaz zona de lucru 2, prin aliasul tabel && al tabelei (BD) AGENDA din aceasta zon de lucru

b - Utilizarea aliasurilor atribuite de Visual FoxPro FoxPro atribuie automat un alias unei tabele dac se deschide simultan aceeai tabel n mai multe zone de lucru, prin includerea clauzei AGAIN n cadrul comenzii USE, i nu se indic un alias la deschiderea tabelei n fiecare zon de lucru sau dac survine un conflict ntre aliasuri. Aliasurile implicite din primele 10 zone de lucru au asociate literele de la A la J. Aliasurile atribuite n zonele de lucru de la 11 la 32767 pornesc de la W11 pn la W32767. Aceste aliasuri pot fi folosite pentru a indica tabela deschis n zona de lucru, la fel ca orice alias implicit sau definit de utilizator.

Deschiderea i nchiderea unei tabele (BD)


S presupunem c am creat anterior una sau mai multe tabele (baze de date) (de exemplu AGENDA.DBF, CLIENTI.DBF). Pentru lucrul cu acestea, este necesar, mai nti, deschiderea lor n zone de lucru ale FoxPro. O tabel se poate deschide ntr-o zon de memorie, numit zon de lucru (work area). ntr-o zon de lucru se poate deschide, la un moment dat, doar o singur tabel. Deschiderea unei tabele se poate face cu comanda: USE sau, mai simplu: fiier.DBF [ n nr. zon ] [ ALIAS nume alias ] [ AGAIN ] USE fiier.DBF [ n nr. zon ]

Clauza AGAIN permite deschiderea aceleiai tabele n dou sau mai multe zone de lucru. Operaiile sau comenzile lansate au efect asupra tebelei din zona curent. nchiderea unei singure tabele se face cu comanda: USE [ n nr. zon ] nchiderea tabelelor (BD) se poate face i cu comenzile CLOSE ALL i CLOSE DATABASE, dar acestea, pe lng bazele de date, nchid i alte fiiere sau ferestre, deci trebuie utilizate cu atenie. CLOSE ALL - nchide toate fiierele din toate zonele de lucru i selecteaz zona de lucru 1. CLOSE DATABASE - nchide toate bazele de date i selecteaz zona de lucru 1 Observaii: 1. Dac la deschiderea unei tabele (BD), n zona de lucru exista anterior o alt tabel (BD), cea veche este nchis automat naintea deschiderii celei noi. 2. Comanda USE fr nici un parametru nchide eventuala tabel (BD) deschis n zona de lucru curent. Exemple: ? SELECT ( ) SELECT 1

&& afieaz zona de lucru curent && stabilete zona de lucru curent 1

40

Ctlin Tnase

FoxPro - Note de curs

USE agenda USE USE agenda IN 2

&& s-a deschis BD AGENDA.DBF n zona de lucru 1 && s-a nchis BD din zona curent && s-a deschis BD n zona de lucru 2, chiar dac zona de lucru && curent a fost i rmne 1, pn cnd se va selecta o alt zon de && lucru cu SELECT USE n 2 && se nchide tabela din zona 2 S deschidem o tabel (BD) simultan n dou zone de lucru: SELECT A && se selecteaz zona de lucru 1 USE agenda && se deschide BD n zona 1 USE agenda n 2 AGAIN && se deschide agenda i n zona 2 USE n 2 && se nchide BD din zona 2 USE && se nchide BD din zona curent (1) Pentru a testa dac o zon de lucru este liber sau nu, se folosete funcia USED ( ) Exemple: SELECT A USE agenda n 4 USE agenda AGAIN ? USED ( ) && testeaz folosirea zonei de lucru 1 ? USED (2) && testeaz folosirea zonei de lucru 2 ? USED ('agenda') && testeaz dac exist BD cu aliasul agenda, deschis ntr-o && zon de lucru Pentru a afla ce tabel (BD) este deschis ntr-o anumit zon de lucru se folosete funcia DBF ( ) Dac nu este deschis nici o BD n zona de lucru specificat, se va returna irul vid. Exemple: SELECT A USE agenda ? DBF ( ) => C:\agenda.dbf ? DBF ('agenda') sau ? DBF (agenda) => C:\agenda.dbf ? DBF ('a') sau ? DBF (a) => C:\agenda.dbf ? DBF (1) => C:\agenda.dbf

Referirea la tabele deschise n alte zone de lucru


Se poate face referire la cmpuri aparinnd unor tabele deschise n alte zone de lucru, plasnd nainte de numele cmpului aliasul urmat de un punct "." sau de operatorul "->" : ALIAS . cmp Exemplu: Dac dintr-o zon de lucru oarecare se dorete accesarea cmpului manager din tabela Utilizatori, deschis ntr-o alt zon cu aliasul Clieni, se poate folosi urmtoarea notaie: Clieni . manager sau Clieni -> manager

41

Ctlin Tnase

FoxPro - Note de curs

Crearea

tabelelor

O baz de date (BD) este format din una sau mai multe tabele, ntre care exist diverse relaii (BD relaionale). Crearea unei tabele se poate face astfel:

A - n FOX sub MS-DOS:


a). File, New, Database, se deschide fereastra de specificare a structurii unei BD care primete numele implicit Untitled. b). Se scrie, n fereastra de comenzi,comanda CREATE. - se deschide un dialog n care ni se propune numele UNTITLED pentru viitoarea tabel; de regul, modificm acest nume; Observatie: Dac de la nceput nu se precizeaz numele BD, calculatorul va cere acest nume. - n zonele Drive i Directory stabilim discul i directorul n care se va crea tabela; n caz contrar, se aleg discul i directorul curente. - Se d click pe butonul << Create >> i se deschide fereastra de specificare a structurii, ca la punctul a). c). Se scrie, n fereastra de comenzi, comanda CREATE [d:] [path] nume fiier [.DBF] Extensia .DBF este facultativ. Ea se ataeaz n mod automat. Exemplu: CREATE C:\AGENDA n acest fel, specificm de la nceput locul unde se va crea tabela, fr a mai ine cont de calea curent n care se lucreaz. i n acest caz, se deschide fereastra de specificare a structurii, ca la punctele a) i b), n care vom defini structura noii tabele (stabilim capul de tabel). n aceast etap, stabilim structura (scheletul) tabelei (BD) (cte coloane, dimensiunea coloanelor i tipul datelor ce se vor memora). Precizm pentru fiecare cmp (coloan) - numele cmpului - tipul datelor din cmpul respectiv - dimensiunea cmpului Deplasarea n interioarul ferestrei de specificare a structurii se face cu TAB sau cu sgeile. - n rubrica Name, stabilim numele cmpurilor. Numele vor avea cel mult 10 caractere. Exemple: Nume, Prenume, Data_N, Den_Prod, Cod_Pers - n rubrica Type, stabilim un tip pentru fiecare cmp, selectnd un tip din lista ascuns a acestei rubrici: - n rubrica Width, stabilim dimensiunea fiecrui cmp (coloane) din tabel. Dimensiunea se exprim n numr de caractere- n rubrica Dec, stabilim numrul de zecimale (doar la cmpurile de tip numeric). Dup stabilirea structurii, o vom salva pe disc n fiierul AGENDA.DBF tastnd CTRL + W sau dnd click pe buronul << OK >>. Imediat, se deschide fereastra de dialog Input data records now ? Yes No

42

Ctlin Tnase

FoxPro - Note de curs

Dac alegem No, structura tabelei se salveaz pe disc, n fiierul AGENDA.DBF, dar adugarea nregistrrilor n tabel se va face printr-o comand ulterioar (de exemplu APPEND sau BROWSE). De aceea vom rspunde Yes. Astfel, se va deschide o fereastr n care apare o prim machet a unei nregistrri pe care o completm. Pe msur ce completm o nregistrare, se genereaz o nou nregistrare vid. Toate nregistrrile vor avea aceeai structur (conin cmpurile Nume, Prenume, Telefon, Adresa, Data_N). d). CREATE TABLE < nume fisier DBF > ( <nume cmp 1> < tip cmp 1> ( <dimensiune cmp 1> ) , <nume cmp 2> < tip cmp 2> ( <dimensiune cmp 2> ) , ..... <nume cmp n> < tip cmp 1> ( <dimensiune cmp n> ) ) Exemplu: CREATE TABLE C:\AGENDA.DBF ( Nume C(15), Prenume C (15), Telefon N (13), Adresa C (40) ) Evident, aceast variant este cea mai incomod. Totui, ar putea fi unica variant, n anumite situaii (de exemplu, n modul de lucru program, atunci cnd utilizatorul programului care exploateaz baza de date nu are cunotine elementare de programare; lipsa cunotinelor utilizatorului trebuie suplinit de soluia programatorului care trebuie s prevad i o astfel de posibilitate).

B - n Visual FOX:
Se poate recurge la aceleai variante ca i n FOX sub MS-DOS (vezi punctele a, b, c, d de mai sus), cu urmtoarele deosebiri: La File, New, se deschide un dialog din care alegem Table, urmat de click pe butonul New file. Att cu File, New, Table, ct i cu comanda CREATE, se deschide fereastra de dialog Create, n care: - din lista ascuns Save n selectm calea destinaie (discul, directorul) pentru noua tabel (fiier); - n caseta de text Enter table stabilim numele viitoarei tabele (fiier); - din lista ascunsa Save as type alegem tipul viitoarei tabele (implicit .DBF, ca i n FOX sub MSDOS). - Dup ce stabilim aceste elemente, acionm butonul Save. Se va deschide fereastra de dialog Table Designer, care permite stabilirea structurii tabelei. La aceeai fereastr Table Designer se ajunge i cu comanda similar din FOX pentru MS-DOS: CREATE C:\AGENDA n seciunea (tab-ul) Fields, rubricile Name, Type, Width, Decimal au aceleai semnificaii ca i cele descrise la FOX pentru MS-DOS. Trecerea de la o rubric la alta se face cu tasta TAB sau cu mousul. Rubrica Type are mai multe opiuni dect cea similar din FOX pentru MS-DOS. Rubrica Index permite crearea unui index care are cmpul curent drept cheie. Rubrica NULL acioneaz ca un comutator pentru acceptarea sau nu a cmpurilor nule. Att n FOX pentru MS-DOS, ct i n Visual FOX, n stnga fiecrui cmp apare o dubl sgeat care permite schimbarea ordinii cmpurilor: - n FOX pentru MS-DOS i n Visual FOX - prin drag and drop, innd apsat butonul mousului pe dubla sgeat i trgnd mousul n sus sau n jos; n FOX pentru MS-DOS aducnd marcajul pe un cmp, innd apsat tasta CTRL i acionnd sgeile sus sau jos.

43

Ctlin Tnase

FoxPro - Note de curs

Dup stabilirea structurii, se apas Enter sau se d click pe butonul OK sau se acioneaz CTRL + W. Ca i n FOX pentru MS-DOS, se deschide fereastra Input records now ? din care selectm Yes. Introducem nregistrri pe care le salvm pe disc (n fiier) tot cu CTRL + W. Input data records now ? Yes No

Vizualizarea structurii unei tabele (BD)


Se face cu comenzile: DISPLAY sau LIST STRUCTURE sau cu F 5, care vor afia cmpurile tabelei, tipurile i dimensiunile lor Comenzile snt asemntoare, numai c prima face o pauz dup umplerea unui ecran cu informaii, pe cnd cea de-a doua nu face aceast pauz, pe ecran derulndu-se toate informaiile, pn la sfrit. Exemplu: SELECT A USE agenda LIST STRUCTURE sau DISPLAY STRUCTURE STRUCTURE

Modificarea structurii conceptuale


Este echivalent cu modificarea scheletului unui tabel. O tabel (BD), creat cu comanda CREATE, poate deveni incompatibil cu cerinele operatorului, mai ales, datorit faptului c structura s se dovedete incomplet sau incorect etalonat. La afiarea structurii tabelei (BD) curente cu comanda DISPLAY STRUCTURE, se poate constata dac este oportun sau nu efectuarea de modificri n structura tabelei (BD). De regul, motivele pentru care se modific structura unei tabele (BD) snt: adugarea unui nou cmp (TELEFON, VECHIME) modificarea parametrilor unor cmpuri deja existente (modificarea lungimii (Width) unor cmpuri sau stabilirea unui alt tip de date pentru un cmp sau stabilirea unui alt nume pentru un cmp, de exemplu, n locul cmpului SALAR se va scrie SALAR-BRUT) inserarea de cmpuri noi (VIRSTA, STUDII) tergerea unor cmpuri inutile. Modificarea structurii const n schimbarea denumirii cmpurilor, schimbarea tipurilor sau dimensiunilor acestora, adugarea sau tergerea de cmpuri, schimbarea ordinii cmpurilor Modificarea structurii se poate face: a). Att n FOX pentru MS-DOS, ct i n Visual FOX cu comanda MODIFY STRUCTURE b) n plus, n Visual FOX, se alege, din meniul View, opiunea Table Designer. n ambele variante, se deschide fereastra de specificare (proiectare) a structurii (respectiv Table Designer). Cu TAB i sgeile sau cu mousul, se aduce marcajul n zona unde se vor face modificri, se fac aceste modificri i se salveaz pe disc cu CTRL + W sau cu click pe OK. Apare fereastra de

44

Ctlin Tnase

FoxPro - Note de curs

interogare Make structure changes permanent ? (Facem permanente schimbrile structurii ?). Alegem Make structure changes permanent ? Yes. Pentru abandonarea operaiei de modificare se Yes No tasteaz ESC, apare o fereastr de dialog Discard structure changes ? la care rspundem cu Yes. Modificarea elementelor (nume, tip, lime) unui cmp existent se face prin scrierea peste acel cmp a noilor elemente (de exemplu, la Name, n loc de JUDET se poate scrie JUD; la Type, n loc de Character se poate trece Memo; la Width, n loc de 5 se poate scrie 10). OBSERVAIE Modificrile de structur se vor face cu mare pruden, deoarece, prin modificri neadecvate, se pot distruge date din BD n mod IRECUPERABIL. Se vor evita - schimbarea tipului unui cmp - schimbarea dimensiunii unui cmp n sens descresctor

Adugarea de noi cmpuri


Presupune o modificare de structur. Se lanseaz comanda MODIFY STRUCTURE (sau View, Table Designer), cu TAB i sgeile sau click cu mousul, se aduce marcajul n locul unde se dorete includerea unui nou cmp, se tasteaz CTRL + I (sau click pe butonul < Insert >), se genereaz un cmp nou cu numele implicit NEWFIELD, de tip Character, cu dimensiunea de 10. Se schimb numele cmpului (din NEWFIELD ntr-un nume mai sugestiv), se schimb (eventual) tipul i dimensiunea. Noua structur modificat se salveaz cu CTRL + W (sau click pe OK), Yes. Adugarea unui cmp suplimentar, la sfritul tabelei (BD), se face prin poziionarea, n coloana Name, dup ultimul cmp definit i completarea datelor cmpului dorit. Apoi, cmpul recent introdus poate fi mutat n structur n alt poziie.

Mutarea unui cmp


Presupune, de asemenea, o modificare de structur. n FOX pentru MS-DOS: - Se lanseaz comanda MODIFY STRUCTURE - Cu TAB i sgeile (sau click cu mousul), se aduce marcajul pe cmpul care trebuie mutat, apoi - a) - se ine apsat tasta CTRL i se acioneat sgeile sus sau jos sau - b) - click pe dubla sgeat din stnga rubricii Name, inem apsat butonul mouse-ului i tragem n sus sau n jos. n Visual FOX: - Se lanseaz comanda MODIFY STRUCTURE sau View, Table Designer - Click pe dubla sgeat din stnga rubricii Name, inem apsat butonul mouse-ului i tragem n sus sau n jos. Observaie: n FOX pentru MS-DOS, mutarea provizorie a unui cmp al tabelei se face, n fereastra Browse, cu opiunea MOVE FIELD, astfel: - USE fiier .DBF sau File, Open (se deschide fiierul). - Lansm comanda BROWSE. Pe bara superioar de meniuri, n dreapta-sus, apare meniul Browse. - Plasm cursorul pe cmpul care trebuie mutat. - Deschidem meniul Browse (ALT-B), selectm opiunea Move Field => cmpul curent se marcheaz. - Cu sgeile deplasm acest cmp n poziia dorit.

45

Ctlin Tnase

FoxPro - Note de curs

Se opereaz n fereastra Browse, dup care se nchide fereastra. La redeschiderea ferestrei Browse, cmpul se va gsi n poziia iniial. n concluzie, o mutare definitiv a cmpului n structura tabelei (BD) se face printr-o modificare de structur cu MODIFY STRUCTURE. -

Redimensionarea unui cmp


Se face tot prin modificarea structurii tabelei (BD). Se lanseaz comanda MODIFY STRUCTURE (sau, n Visual FOX, View, Table Designer), cu TAB i sgeile sau click cu mousul, se aduce marcajul pe cmpul a crui dimensiume trebuie schimbat, accesm rubrica Width, introducem noua dimensiune a cmpului, apoi se salveaz noua structur modificat cu CTRL + W (sau click pe OK), Yes. Observaie: Redimensionarea provizorie a unui cmp se poate face, n fereastra Browse, cu opiunea SIZE FIELD: - USE fiier .DBF sau File, Open (se deschide fiierul). - Lansm comanda BROWSE. Pe bara superioar de meniuri, n dreapta-sus, apare meniul Browse. - Plasm cursorul pe cmpul care trebuie redimensionat. - Deschidem meniul Browse (ALT-B), selectm opiunea SIZE FIELD => cmpul curent se marcheaz. - Cu sgeile redimensionm acest cmp. - Se opereaz n fereastra Browse, dup care se nchide fereastra. La redeschiderea ferestrei Browse, cmpul va avea dimensiunea iniial. n concluzie, o redimensionare definitiv a cmpului n structura tabelei (BD) se face printr-o modificare de structur cu MODIFY STRUCTURE.

tergerea unor cmpuri


Presupune tot o modificare de structur. Se lanseaz comanda MODIFY STRUCTURE (sau View, Table Designer), cu TAB i sgeile sau click cu mousul, se aduce marcajul pe cmpul inutil, se tasteaz CTRL + D (sau click cu mousul pe butonul < Delete >). Noua structur modificat se salveaz cu CTRL + W (sau click pe OK), Yes. Atentie! La tergere unui cmp, nu se cere confirmarea, dar dup tergere se poate reface cmpul ters cu File, Revert, nainte de a salva noua structur pe disc cu CTRL + W.

Poziionarea n interiorul unei BD


Dac se d comanda DISPLAY, calculatorul afieaz o singur nregistrare. Aceast nregistrare se numete curent. Oricare din nregistrrile BD poate deveni curent. Poziionarea pe o anume nregistrare se face cu comanda: GOTO n sau GO n sau n urmat de ENTER unde n reprezint numrul de ordine al nregistrrii care va deveni curent, prin acest procedeu. Comanda GOTO dispune de dou forme particulare: GOTO TOP - prima nregistrare devine curent GOTO BOTTOM - ultima nregistrare devine curent Deplasarea de la o nregistrare la alta se poate face cu comanda SKIP n Aceast comand realizeaz un salt peste n nregistrri, pornind de la cea curent. Dac n are semnul "-", atunci saltul se face napoi. Dac n lipsete, sistemul va realiza un salt peste o singur nregistrare (similar cu SKIP 1).

46

Ctlin Tnase

FoxPro - Note de curs

Cutarea secvenial n baza de date


Presupune localizarea unei nregistrri care satisface o condiie i poziionarea pointerului de fiier pe prima nregistrare care satisface aceast condiie. Cutarea se face n toat baza de date sau se poate indica un domeniu de cutare. Implicit, domeniul de cutare este ALL. Comanda de cutare este: LOCATE FOR < condiie > [ domeniu ] Poziionarea pe urmtoarea nregistrare care respect condiia se face cu CONTINUE Exemplu: LOCATE FOR Nume = Alexa Se va localiza prim nregistrare al crui cmp Nume este reprezentat de irul de caractere Alexa. Afiarea acestei nregistrri se va face cu BROWSE. Comanda LOOKUP ( < cmp1 >, < expresie >, < cmp2 >) ntoarce valoarea cmpului < cmp 1 > din prima nregistrare unde < cmp 2 > are valoare egal cu < expresie >. Altfel, se ntoarce irul vid. Exemplu: Dorim s aflm numele unei persoane care are prenumele Ana: LOOKUP ( Nume, Ana, Prenume ) Se afieaz cmpul Nume al primei nregistrri care are Prenumele Ana Funcia RECNO ( ) ntoarce numrul nregistrrii curente. Exemplu: ? RECNO ( ) Funciile logice EOF ( ) i BOF ( ) ntorc TRUE dac sntem poziionai la sfritul fiierului respectiv naintea primei nregistrri. Exemple: ? EOF ( ) ? BOF ( )

Adugarea nregistrrilor (articolelor) n tabele (ncrcarea sau popularea cu date)


Raiunea crerii unei BD este de a putea depozita n ea date care pot fi ulterior accesate i prelucrate. A Adugarea se poate face imediat dup crearea tabelei (fiierului .DBF), rspunznd Yes la apariia ferestrei de interogare Input data records now ? B Adugarea de noi nregistrri se poate face n dou moduri, n funcie de poziia pe care o va ocupa noua nregistrare n tabel: la sfritul tabelei sau n interiorul tabelei. 1 - Adugarea unei nregistrri noi la sfritul tabelei Se realizeaz cu comenzile APPEND sau BROWSE); a). - Dac se lanseaz comanda APPEND, adugarea se face ntr-o machet similar celei ntlnite la crearea tabelei. Se pot aduga oricte nregistrri. Dup adugare, salvarea nregistrrilor pe disc se face cu CTRL + W. b). - Dac se lanseaz comanda BROWSE, se deschide o fereastr n care apare coninutul tabelei, apoi se tasteaz: - CTRL + N (n FOX pentru MS-DOS) - CTRL + Y (n Visual FOX)

47

Ctlin Tnase

FoxPro - Note de curs

se creeaz, astfel, o nou nregistrare vid pe care o completm. Pentru a aduga nc o nregistrare, trebuie s retastm CTRL + N (respectiv CTRL + Y). Dup adugare, salvarea nregistrrilor pe disc se face cu CTRL + W. c). Adugarea se poate face i dintr-un alt fiier (tabel) care exist deja pe disc. Vom scrie comanda APPEND FROM <fiier.dbf> [ FOR condiie ] [ FIELDS list de cmpuri ] nainte de a lansa aceast comand, trebuie ca tabela (BD) s fie deschis. n mod implicit se preiau toate cmpurile. - Clauza FIELDS permite selectarea cmpurilor care se vor aduga. - Se vor aduga doar cmpurile care satisfac condiia din clauza FOR. Exemplu: Presupunem c pe disc exist tabela TELEFON.DBF i dorim s adugm nregistrri din aceast tabel n tabela AGENDA.DBF. Vom lansa comenzile: USE C:\AGENDA && se deschide AGENDA.DBF APPEND FROM TELEFON.DBF && se adag nregistrri din TELEFON.DBF && la sfritul tabelei AGENDA.DBF d1). n FOX pentru MS-DOS - meniul Record, Append, adugarea propriu-zis, salvarea nregistrrilor cu CTRL + W. d2). n Visual FOX lansm comanda BROWSE, se afieaz tabela, apare meniul Table din care selectm opiunea Append New Record, adugm nregistrarea i o salvm cu CTRL + W. e). Adugarea unei nregistrri vide la sfritul tabelei se face cu comanda: APPEND BLANK Un cmp vid are una dintre valorile: - 0 (zero) pentru un cmp numerix - spaiu pentru un cmp caracter - .F. (False) - pentru un cmp logic - { } sau { / / } - pentru un cmp dat calendaristic 2 - Introducerea (inserare) unei nregistrri noi n interiorul tabelei Dup poziionarea (cu GOTO) pe o anumit nregistrare, care devine curent, se poate insera o nou nregistrare nainte sau dup nregistrarea curent. Se folosete comanda: INSERT [BEFORE] [BLANK] Clauza BEFORE determin adugarea unei nregistrri noi naintea nregistrrii curente. Dac BEFORE lipsete, noua nregistrare se va insera dup nregistrarea curent Dac se specific i clauza BLANK, se adaug o nregistrare blank (vid) Exemple: USE AGENDA GOTO 2 INSERT BEFORE

&& se deschide AGENDA.DBF && nregistrarea 2 devin curent && se insereaz o nou nregistrare pe poziia 2 && (naintea vechii nregistrri 2, care se va gsi, de acum nainte, && pe poziia 3) && se insereaz o nou registrare dup poziia 2 (n poziia 3).

sau INSERT

Vizualizarea coninutului unei tabele (BD)


O tabel (BD) poate dispune, la un moment dat, de un numr foarte mare de nregistrri, ca urmare a adugrilor de date (cu comenzile APPEND sau INSERT). Aceste nregistrri pot fi vizualizate pe ecran sau pot fi tiprite la imprimant folosind comenzile LIST, DISPLAY sau BROWSE. Comanda LIST afieaz coninutul BD curente.

48

Ctlin Tnase

FoxPro - Note de curs

Sintaxa: LIST FIELDS <lista de cmpuri> FOR <condiie logic> [OFF] TO PRINTER | TO FILE <fiier> Cu ajutorul parametrului FIELDS <list de cmpuri> se poate stabili care cmpuri s fie afiate pe ecran, cel mai des nefiind necesar vizualizarea tuturor, mai ales atunci cnd numrul mare al acestora ar putea determina o gestiune incomod a ecranului. FOR <condiie logic> determin domeniul nregistrrilor ce vor fi afiate pe ecran. Se pot folosi, n locul unor condiii n care intervin operatori logici, clauzele ALL sau NEXT n. Clauza ALL determin ca LIST s afieze toate (all = tot) nregistrrile din BD, iar NEXT n va face ca LIST s afieze numai urmtoarele n nregistrri, inclusiv nregistrarea curent. Foarte uzual este stabilirea unor condiii complexe care s determine ca lista s cuprind anumite nregistrri preferate. Condiia se poate referi la oricare din cmpurile tabelei (BD), la mai multe cmpuri simultan sau la expresii care s implice cmpuri ale tabelei (BD). Exemple: USE agenda LIST && se listeaz toat BD LIST FIELDS nume, prenume && se listeaz doar cmpul indicat LIST FOR nume = "T" && afieaz toate nregistrrile al cror nume au iniiala T LIST FOR telefon = "0" && afieaz toate nregistrrile la care telefon ncepe cu 0 LIST RECORD 3 && afieaz nregistrarea 3 LIST ALL && afieaz toate nregistrrile LIST NEXT 2 && afieaz urmtoarele 2 nregistrri LIST FOR nume = "Popescu" LIST FOR nume = "Popescu" OR nume = "Vasilescu" LIST FOR nume = "Popescu" AND prenume = "Mircea" LIST FOR nume = "Popescu" AND salariul = 2000000 LIST FOR salariul > 2000000 .AND. impozit = 0 LIST FOR datanast = {24/12/2010} LIST FOR datanast = {^2010-24-12} && n Fox pentru MS-DOS && n Visual Fox, formatul datei este AAAA LL ZZ

Prezena clauzei OFF n comanda LIST determin dispariia, din formatul de afiare, a coloanei RECORD #. Dac OFF lipsete, se va aduga un cmp suplimentar, necreat cu comanda CREATE, cmp generat automat de FoxPro, n care este memorat numrul de ordine al nregistrrilor. Clauza TO PRINTER | TO FILE <fiier> stabilete dac lista va fi tiprit la imprimant sau va fi scris ntr-un fiier al crui nume se specific cu acest prilej. Absena acestei clauze determin afiarea doar pe ecran a coninutului tabelei (BD). Oricare din parametrii menionai poate lipsi. Dac lipsesc toi, LIST va afia, pe ecran, toate nregistrrile i toate cmpurile, inclusiv RECORD #. Comanda DISPLAY acioneaz asemntor cu comanda LIST. Diferena const n faptul c DISPLAY realizeaz o paginare la afiare (afiare pagin cu pagin se face o pauz dup umplerea ecranului cu informaii), iar dac este lansat fr nici un parametru, va afia numai nregistrarea curent. LIST afieaz toat tabela (BD) fr pauz, pn la sfrit. Comanda BROWSE afieaz coninutul tabelei (BD) ntr-o fereastr specific n care se pot face i modificri ale nregistrrilor (se pot opera schimbri n fiecare celul a tabelei). Dac imediat dup efectuarea modificrilor se tasteaz ESC, aceste modificri nu vor fi salvate. Fereastra n care snt dispuse nregistrrile (fereastr deschis cu BROWSE) poate fi uor inspectat folosind tastele de sgei, tastele PageUp, PageDown (pentru deplasri n sus i n jos), TAB sau ENTER (pentru deplasri spre dreapta) sau SHIFT + TAB (pentru deplasri spre stnga). n fereastra BROWSE se pot face i urmtoarele modificri: - se pot marca sau terge logic anumite nregistrri (CTRL + T) - se pot aduga noi nregistrri (CTRL + N).

49

Ctlin Tnase

FoxPro - Note de curs

Pentru ca schimbrile efectuate n fereastra pus la dispoziie de BROWSE s fie reinute (salvate) n BD, ieirea din fereastr se face cu CTRL + W. Sintaxa uzual (prescurtat) a comenzii BROWSE este: BROWSE [ FIELDS <lista de cmpuri> ]

[ FOR < condiie logic>]

Cu ajutorul parametrului FIELDS <lista de cmpuri> se poate stabili care cmpuri s fie afiate pe ecran, cel mai des nefiind necesar vizualizarea tuturor. Clauza FOR <condiie logic> determin domeniul nregistrrilor ce vor fi afiate pe ecran. Stabilirea unor condiii complexe care s determine editarea anumitor nregistrri este identic cu tehnica folosit la comanda LIST. Condiia se poate referi la oricare din cmpurile bazei de date, la mai multe cmpuri simultan sau la expresii care s implice cmpuri ale bazei de date. Cu comanda BROWSE LAST se consult ultima BD folosit. Exemple: USE agenda && se deschide AGENDA.DBF BROWSE && se consulta AGENDA.DBF BROWSE FOR nume = "Popescu" BROWSE FOR nume = "Popescu" OR nume = "Vasilescu" BROWSE FOR nume = "Popescu" AND prenume = "Mircea" BROWSE FOR nume = "Popescu" AND salariul > 200000 BROWSE FOR salariul > 2000000 AND impozit = 0 n FOX pentru MS-DOS, modificarea dimensiunilor ferestrei BROWSE se face cu CTRL + F8, iar schimbarea amplasrii ferestrei pe ecran se face cu CTRL + F7. Conferirea unor dimensiuni maxime pentru fereastr, respectiv revenirea la dimensiunile anterioare ale ferestrei se fac cu CTRL + F10 (att n FOX pentru MS-DOS, ct i n Visual FOX). O alt posibilitate de editare a coninutul tabelei (BD) este oferit de comenzile EDIT sau CHANGE, care au aceeai sintax ca i comanda BROWSE. Modul de prezentare a nregistrrilor este ns diferit, asemnndu-se, oarecum, cu aspectul ferestrei afiat de comanda APPEND. De exemplu, s considerm tabela SITUATIE, cu cmpurile Clasa, Diriginte, Liceu. Lansnd comanda SITUATIE Clasa Diriginte Liceu Spiru EDIT FIELDS Liceu Liceu 12A Popa Spiru Cobalcescu Liceu se va deschide o fereastr 12B Albu Cobalcescu Spiru Liceu similar celei afiate de 12C Negru Spiru Lazar Liceu comanda APPEND, n care 12D Rosu Lazar apare doar cmpul indicat n comanda EDIT (n cazul de fa, doar cmpul Liceu). n mod analog, lansnd comenzile: EDIT FIELDS Diriginte i EDIT FIELDS Clasa Diriginte Diriginte Diriginte Diriginte Popa Albu Negru Rosu Clasa Clasa Clasa Clasa Clasa Diriginte Clasa Diriginte Clasa Diriginte Clasa Diriginte 12A 12B 12C 12D 12A Popa 12B Albu 12C Negru 12D Rosu

se vor deschide ferestrele figurate alturat, oferindu-se posibilitatea modificrii informaiilor din aceste cmpuri. Desigur, lansnd comenzi EDIT sau CHANGE, pot fi editate mai multe cmpuri simultan. De exemplu, scriind comanda EDIT FIELDS Clasa, Diriginte se va deschide o fereastr n care se pot modifica ambele cmpuri indicate n comand (Clasa, Diriginte).

50

Ctlin Tnase

FoxPro - Note de curs

Selectarea cmpurilor (filtrarea structurii)


Este o operaie prin care, dintr-o mulime numeroas de cmpuri ale unei tabele (BD) se vor reine spre afiare doar o parte din aceste cmpuri, celelalte neprezentnd interes. Doar cmpurile selectate vor fi active. Selectarea cmpurilor se face cu comanda: SET FIELDS TO <list de cmpuri > Exemplu: Dac avem o tabel cu cmpurile Nume, Prenume, Telefon, Adresa, Vrsta, Data_N i, la un moment dat, ne intereseaz doar cmpurile Nume i Prenume, vom scrie: SET FIELDS TO Nume, Prenume Comenzile LIST sau BROWSE vor afia doar aceste dou cmpuri. Dezactivarea seleciei listei de cmpuri se face cu comanda: SET FIELDS OFF Reactivarea seleciei listei de cmpuri se face cu comanda: SET FIELDS ON tergerea listei de cmpuri se face cu comanda: SET FIELDS TO Selectarea tuturor cmpurilor se face cu comanda: SET FIELDS TO ALL

Filtrarea nregistrrilor (articolelor)


Este operaia prin care se vor selecta anumite nregistrri care ndeplinesc anumite condiii i asupra crora vor avea efect comenzile. Selectarea nregistrrilor se face cu comanda: SET FILTER TO < condiie > Se deschide, astfel, un filtru pe baza de date, care va fi activ pn la nchiderea bazei de date (cu USE, CLOSE DATABASE, CLOSE ALL) sau pn se nchide filtrul cu comanda SET FILTER TO Exemple: SET FILTER TO Nume = Popa && Selectarea nregistrrilor cu numele Popa LIST sau BROWSE && Se afieaz doar nregistrrile cu numele Popa SET FILTER TO && Se anuleaz filtrul anterior LIST sau BROWSE && Se afieaz toate nregistrrile

Modificarea (corecia) datelor


Se face cu comanda: REPLACE <cmp 1> WITH < expr. 1> [ cmp 2 WITH expr. 2 ] [ domeniu ] [ FOR condiie ] care nlocuiete valoarea existent n cmp 1 cu valoarea expresiei expr. 1, valoarea existent n cmp 2 cu valoarea expresiei expr. 2 .a.m.d. Domeniul implicit este nregistrarea curent. Clauza FOR < condiie > precizeaz condiia pe care trebuie s o satisfac nregistrrile care se vor nlocui.

51

Ctlin Tnase

FoxPro - Note de curs

Exemple: Presupunem c avem o tabel creia i lipsete o rubric NR_CRT. Nume Ailincai Albu Ionescu Popescu Stefanescu Vasilescu Prenume Petru Mihai Ion Popa Ion Vasile Marca 320 215 403 101 203 15 Salariu 2150000 4500000 3500000 3500000 3000000 2500000 Funcie portar contabil dulgher vinzator contabil timplar

Adugm aceast rubric cu: MODIFY STRUCTURE Cu TAB i sgeile aducem marcajul n poziia unde trebuie introdus rubrica CTRL + I - Crem noul cmp, cruia i stabilim Numele NR_CRT, Tipul Numeric, Lungimea de 5 CTRL + W, Yes - Salvm noua structur Evident, rubrica NR_CRT nu conine nimic. O putem completa foarte simplu astfel: REPLACE NR_CRT WITH RECNO ( ) ALL nregistrrile

Se nlocuiete fiecare cmp NR_CRT cu numrul de ordine (RECNO) pentru toate (ALL). Se obine tabela: NR_CRT 1. 2. 3. 4. 5. 6. Nume Ailincai Albu Ionescu Popescu Stefanescu Vasilescu Prenume Petru Mihai Ion Popa Ion Vasile Marca 320 215 403 101 203 15 Salariu 2150000 4500000 3500000 3500000 3000000 2500000 Funcie portar contabil dulgher vinzator contabil timplar

Alt nlocuire: Vom nlocui funcia de contabil cu funcia de economist: REPLACE Functie WITH economist FOR Functie = contabil ALL

Actualizarea interactiv a tabelelor se poate face i cu comanda BROWSE, direct n fereastra care se deschide la lansarea acestei comenzi. Dup actualizarea datelor din tabel, se salveaz noul coninut al tabelei cu CTRL + W.

tergerea nregistrrilor din tabel (BD)


Pe parcursul exploatrii unei tabele (BD), anumite nregistrri pot deveni inutile. tregerea nregistrrilor din tabel se face n dou etape, corespunztoare celor dou tipuri de tergeri: 1 tergerea LOGIC a nregistrrilor (marcarea sau selectarea) este o operaie nedistructiv, care pregtete nregistrrile pentru o eventual tergere definitiv (fizic). nregistrrile terse logic vor fi marcate, n stnga primului cmp afiat - cu asterisk ( * ), la afiarea cu LIST sau DISPLAY - cu un punct, la afiarea cu BROWSE. tergerea logic a nregistrrilor se face: a Cu comanda DELETE, indicnd domeniul de nregistrri care va fi ters.

52

Ctlin Tnase

FoxPro - Note de curs

Sintaxa: DELETE [ domeniu ] [ FOR <condiie> ] unde <condiie> reprezint oricare din condiiile studiate anterior. Dac domeniu lipsete, comanda se va adresa nregistrrii curente. b Cu CTRL + T, n fereastra BROWSE. Observaie: n interiorul ferestrei BROWSE, se poate elimina marcarea (se anuleaz tergerea logic) tot cu CTRL + T. n acest fel, punctul situat n stnga nregistrrii dispare. Dac anumite nregistrri au fost marcate pentru tergere, din greeal, cu comanda DELETE, se poate anula acest lucru prin folosirea comenzii RECALL. Sintaxa: RECALL [ domeniu ] [ FOR <condiie> ] unde <condiie> reprezint oricare din condiiile studiate anterior. Dac domeniu lipsete, comanda se va adresa nregistrrii curente. 2 tergerea FIZIC (definitiv) a nregistrrilor terse logic anterior (marcate) se face cu comanda PACK. tergerea fizic este o operaie distructiv i de aceea trebuie fcut cu pruden. Atentie ! nregistrrile terse fizic nu mai pot fi recuperate cu comanda RECALL. Comanda ZAP terge definitiv toate nregistrrile dintr-o tabel, fr ca n prealabil nregistrrile s fie marcate (slectate printr-o operaie de tergere logic). Exemple: USE agenda && se deschide AGENDA.DBF DELETE RECORD 11 && se terge logic nregistrarea 11; marcajul * se va vedea la LIST DELETE NEXT 2 && se terg logic urmtoarele 2 nregistrri, inclusiv nregistrarea 11 Dac apoi introducem: PACK && se terg definitiv (fizic) nregistrrile 11 i 12 Dac vom introduce, imediat dup DELETE, comanda RECALL RECORD 11 - se recupereaz nregistrarea 11 (se scoate marcajul *) DELETE ALL && se terg logic (se marcheaz cu *) toate nregistrrile RECALL ALL && recupereaz toate nregistrrile DELETE FOR nume = "Popescu" DELETE FOR nume = "Popescu" OR nume = "Vasilescu" DELETE FOR nume = "Popescu" AND prenume = "Ion" DELETE FOR nume = "Popescu" AND salariul > 2000000 DELETE FOR datanast = {10 / 10 / 1970} DELETE FOR salariul > 2000000 AND impozit = 0 RECALL FOR nume = "Popescu" RECALL FOR nume = "Popescu" OR nume = "Vasilescu" RECALL FOR nume = "Popescu" AND prenume = "Ion" RECALL FOR nume = "Popescu" AND salariul > 2000000 RECALL FOR salariul > 2000000 AND impozit = 0

Ordonarea (sortarea sau indexarea) nregistrrilor


Pentru a localiza rapid nregistrrile dintr-o tabel (BD), este necesar ca acestea s fie dispuse ntro anumit ordine, preferat de cel care interogheaz BD. O tabel (BD) este ordonat dup un anumit criteriu, dac fiecare nregistrare a acesteia respect criteriul dat, n raport cu nregistrrile anterioare i posterioare. n FoxPro exist dou metode de ordonare a unei BD: 1. Ordonarea (SORTAREA) propriu-zis a BD presupune schimbarea ntre ele a nregistrrilor, dup un anumit criteriu. n acest caz se obine o nou BD (un fiier DBF), care conine aceleai nregistrri ca i BD iniial, dar n ordinea dorit. Se vor crea tot attea noi fiiere (tabele) cte criterii de

53

Ctlin Tnase

FoxPro - Note de curs

sortare se solicit prin cte o comand SORT distinct. Sortarea are ca efect rearanjarea fizic a nregistrrilor unei tabele, depunndu-le n alt tabel. Noua tabel (fiier DBF) obinut prin sortare poate fi consultat i prelucrat ca oricare alt tabel. Sortarea se face cu comanda SORT ON nume cmp TO numefiier.DBF sau SORT ON <cheie> TO <numefiier.DBF> [ ASCENDING | DESCENDING ] Criteriul de ordonare este format din una sau mai multe chei. O cheie este un cmp al tabelei. Se pot folosi toate cmpurile, cu excepia celor de tip Memo sau General. Clauzele ASCENDING respectiv DESCENDING specific sensul ordonrii. Exemple: Presupunem c avem baza de date AGENDA.DBF USE agenda && se deschide AGENDA.DBF BROWSE && se afieaz AGENDA.DBF n forma nesortat SORT ON nume TO ag-nume.dbf && se creeaz o nou BD cu numele AG-NUM.DBF, care && conine nregistrrile din AGENDA.DBF dar ordonate && dup cmpul "nume" SORT ON prenume TO ag-pren.DBF && se creeaz o nou BD cu numele AG-PREN.DBF care && conine nregistrrile din AGENDA.DBF, dar ordonate && dup cmpul "prenume" USE AG-NUM && se deschide BD AG-NUM.DBF BROWSE && se consult aceast BD USE AG-PREN && se deschide BD AG-PREN.DBF BROWSE && se consult i aceast BD 2. INDEXAREA BD - presupune crearea unui fiier-index, care NU conine nregistrrile BD, ci memoreaz numai ordinea acestora (conine informaii despre ordinea nregistrrilor n BD). Indexarea (ordonarea) nu implic modificarea nregistrrilor sau a poziiilor acestora. Calculatorul i face un tabel auxiliar n care noteaz ordinea nregistrrilor n funcie de criteriul specificat de noi pentru ordonare. INDEXAREA este metoda cea mai eficient de ordonare a BD. Sistemul FoxPro permite mai multe tipuri de indexare: indexarea simpl (conine o singur cheie de ordonare) indexarea compus nestructural (conine mai multe chei de ordonare) indexarea compus structural (conine mai multe chei de ordonare) Cel mai recomandat procedeu de indexare este ultimul, deoarece fiierele index care apar n urma indexrii vor fi automat deschise i ntreinute de sistem, fr specificarea expres a utilizatorului, iar performanele atinse de o astfel de indexare snt superioare celorlalte. Indexarea este o metod rapid de accesare a datelor ordonate, deoarece nu presupune duplicarea acestora i depunerea lor ntr-o alt tabel (aa cum se ntmpl la sortare). Un alt avantaj al indexrii const n posibilitatea folosirii expresiilor drept criteriu de ordonare. Comanda pentru indexarea compus structural este: INDEX ON <expresie> TAG <etichet> [ FOR < condiie > ] sau INDEX ON cmp TAG etichet [ ASCENDING | DESCENDING ] sau INDEX ON <cheia de indexare> TAG <etichet asociat cheii> unde: - <expresie> = cheia de indexare (poate fi un cmp al BD, o asociere de cmpuri sau o expresie n care intervin unul sau mai multe cmpuri din baza de date).

54

Ctlin Tnase

FoxPro - Note de curs

<eticheta> = un ir de caractere (un cuvnt) asociat cheii de indexare prin care se poate apela ulterior acest criteriu de indexare. n urma lansrii acestei comenzi, ia natere un fiier index cu acelai nume cu fiierul DBF asupra cruia se opereaz indexarea, dar cu extensia .CDX. De exemplu, dac avem tabela (baza de date) SALARII.DBF: Nume Ailincai Albu Ionescu Popescu Stefanescu Vasilescu Prenume Petru Mihai Ion Popa Ion Vasile Marca 320 215 403 101 203 15 Salariu 2150000 4500000 3500000 3500000 3000000 2500000 Funcie portar vopsitor dulgher vinzator muncitor timplar

1 2 3 4 5 6

i dorim s sortm dup Marca, vom scrie: USE salarii && se deschide BD INDEX ON MARCA TAG M && se stabilete criteriul de indexare Imediat, se creeaz un fiier-index SALARII.CDX i se vor ordona nregistrrile n ordinea cresctoare a mrcilor, astfel nct, la o comand BROWSE se vor afia nregistrrile n ordinea: Nume Vasilescu Popescu Stefanescu Albu Ailincai Ionescu Prenume Vasile Popa Ion Mihai Petru Ion Marca 15 101 203 215 320 403 Salariu 2500000 3500000 3000000 4500000 2150000 3500000 Funcie timplar vinzator muncitor vopsitor portar dulgher

6 4 5 2 1 3

Parcurgerea ordonat dup Salariu se face prin construirea unui index care s rein numrul nregistrrii din tabel i criteriul Salariu. Indexarea realizeaz o legtur logic ntre index i fiierul de date prin numrul de ordine al nregistrrii. Atenie ! Se observ c pe prima poziie este nregistrarea 6 Vasilescu Dup o indexare putem fi indui n eroare de poziia unei nregistrri n tabel: dac nu vedem numrul de ordine al nregistrrii, am putea crede c Vasilescu este nregistrarea nr. 1, astfel c, dac dorim s tergem nregistrarea Vasilescu i scriem DELETE RECORD 1 nu se va terge din tabel Vasilescu, ci Ailincai, adic nregistrarea cu numrul de ordine 1 n tabela original. Pentru a evita acest neajuns, o variant de revenire la ordinea iniial a nregistrrilor n tabel const n tergerea fiierului-index SALARII.CDX (operaie care anuleaz, ns, toate operaiile de indexare anterioare). Analog indexrii dup MARCA, putem s ordonm i dup NUME sau PRENUME. Indecii se depun n fiiere index (.CDX) asociate tabelei. O tabel poate avea mai muli indeci, dar numai unul este, la un moment dat, activ i determin criteriul de parcurgere a tabelei. INDEX ON NUME TAG N INDEX ON PRENUME TAG P Lansnd comenzi BROWSE dup fiecare indexare fcut, se poate constata c BD a fost ordonat dup criteriul ales. Etichetele M, N, P arat criteriul dup care se face ordonarea (indexarea)

55

Ctlin Tnase

FoxPro - Note de curs

Avnd deschise, pentru o BD, mai multe fiiere index simple sau compuse, cu mai multe etichete, pentru a schimba criteriul de ordonare (pentru a schimba ordinea nregistrrilor, deci pentru a selecta alt fiier index activ sau alt etichet activ, respectiv pentru a specifica numele indexului activ), se folosesc comenzile: SET ORDER TO <eticheta> sau SET ORDER TO TAG <eticheta> sau USE < nume fiier tabel.DBF > ORDER < etichet > Pentru o tabel (BD) se pot crea mai multe etichete, fiecare putnd fi invocat la un moment dat cu comanda: SET ORDER TO <eticheta> Eticheta indicat de aceast comand va stabili ordinea n care vor fi prezentate nregistrrile, la o eventual comend de afiare a coninutului tabelei (BD). Exemple: SET ORDER TO n && se stabilete indexarea dup eticheta N (nume) BROWSE && se afieaz BD ordonat dup "nume" SET ORDER TO m && se stabileste indexarea dup eticheta M (marca) BROWSE && se afieaz BD ordonat dup "marca" SET ORDER TO p && se stabilete indexarea dup eticheta P (prenume) BROWSE && se afieaz BD ordonat dup "prenume" Pentru a numra criteriile de indexare dintr-o anumit zon de memorie, folosim funcia: TAGCOUNT ( [ nr. zon ] ) Exemplu: ? TAGCOUNT ( [ 1 ] ) && numr reperele index (criteriile de indexare) din zona 1

tergerea unui index se face cu comanda: DELETE TAG < etichet >

Dup tergerea tuturor indecilor, tabela (BD) va avea nregistrrile dispuse n ordinea iniial (ordine anterioar primei indexri).

Cutarea rapid i poziionarea n tabela indexat


Pentru accesarea rapid a tabelei, aceasta trebuie s fie indexat dup expresia de cutare. Cutarea rapid se face cu comenzile FIND i SEEK. FIND folosete drept expresie de cutare o constant. SEEK realizeaz cutarea printr-o variabil. Sintaxele celor dou comenzi snt: FIND < expresie caracter > respectiv SEEK ( < expresie > ) Cutarea se oprete la prima nregistrare din tabel care are cheia de indexare egal cu valoarea expresiei. Dac nregistrarea nu exist (cutare a nu a avut succes), se mut pointerul de fiier pe EOF. Exemple: USE c:\Agenda.DBF INDEX ON Nume TAG n INDEX ON Prenume TAG p SET ORDER TO n FIND Albu && irul cutat nu se scrie ntre apostrofuri sau ghilimele

56

Ctlin Tnase

FoxPro - Note de curs

BROWSE ? FOUND () SET ORDER TO p FIND Iulian BROWSE ? FOUND () SET ORDER TO n var1 = 'Albu' SEEK (var) BROWSE SET ORDER TO p Var2 = 'Iulian' SEEK (var2) BROWSE

&& poziionare pe prima nregistrare cu Numele = Albu && se va afia .T. dac a fost gsit nregistrarea sau .F. dac nu && irul cutat nu se scrie ntre apostrofuri sau ghilimele && poziionare pe prima nregistrare cu Prenumele = Iulian && se va afia .T. dac a fost gsit nregistrarea sau .F. dac nu

sau

SEEK (Albu) && poziionare pe prima nregistrare cu Numele = Albu

sau

SEEK (Iulian) && poziionare pe prima nregistrare cu Prenumele = Iulian

Duplicarea unei tabele


S-a vzut c, prin sortare, are loc i o duplicare a tabelei. Copierea (duplicarea) ntregului coninut al tabelei (sau doar a unei pri a tabelei) ntr-o alt tabel se poate face i cu comanda: COPY TO < fiier.DBF > [ FIELDS < list cmpuri > ] [ STRUCTURE ] [ domeniu] [ FOR < condiie > ]

< fiier.DBF > este noul fiier rezultat n urma duplicrii Clauza FIELDS < list de cmpuri > precizeaz care vor fi cmpurile copiate < domeniu > indic domeniul de nregistrri care se vor copia Clauza FOR < condiie > precizeaz condiia pe care trebuie s o satisfac nregistrrile Clauza STRUCTURE are ca efect copierea structurii tabelei surs n tabela destinaie. Exemple: USE C:\AGENDA.DBF COPY TO C:\NOU.DBF STRUCTURE && Se copiaz structura tabelei AGENDA n tabela NOU COPY TO C:\NOU-1.DBF FIELDS Nume, Prenume COPY TO C:\NOU-2.DBF FOR Nume = Popa COPY TO C:\NOU-3.DBF FIELDS Nume, Prenume FOR Nume = Popa

Relaii ntre tabele


O baz de date relaional conine mai multe tabele ntre care se pot stabili relaii de tipurile: 1 1 (unu la unu) - adic unei realizri din domeniu i corespunde o realizare unic din codomeniu. Mai clar: unei nregistrri dintr-o prim tabel printe i corespunde, n mod unic, o nregistrare dintr-o alt tabel copil, astfel nct, mutarea indicatorului de nregistrri pe o anumit nregistrare din tabela printe s aib ca efect mutarea automat a indicatorului de nregistrri din tabela copil pe nregistrarea corespunztoare cu aceeai valoare a unui cmp. Dac nu este gsit nregistrarea n tabela copil, indicatorul de nregistrri este poziionat la sfritul tabelei copil. 1 n (unu la muli) - adic unei realizri din domeniu i corespund una sau mai multe realizri din codomeniu. Sau: unei nregistrri din tabela printe i corespund mai multe nregistrri din tabela copil. Relaia 1 n funcioneaz astfel: la poziionarea pe o nregistrare din tabela printe, se leag toate nregistrrile din tabela copil cu aceeai valoare a cheii.

57

Ctlin Tnase

FoxPro - Note de curs

1. 2. 3. 4. 5. 6. 7.

Condiii pentru stabilirea corect a relaiilor: Ambele tabele (printe i copil) trebuie s fie deschise naintea comenzii de stabilire a relaiei. Tabela printe se deschide n zona curent, iar tabela copil se deschide n alt zon. Tabela printe trebuie s fie ultima selectat. Din zona printe se va emite comanda de relaionare. Tot din zona printe se va lansa i comanda de afiare (BROWSE sau LIST). Ambele tabele au cmpuri comune. Tabela copil este indexat dup cmpul comun. O tabel nu poate fi i printe i copil al uneia i aceleiai tabele. O tabel poate fi legat de mai multe tabele prin chei distincte. Legturile unei tabele se numeroteaz n ordinea definirii lor.

Stabilirea unor relaii temporare ntre tabele


Cnd se stabilesc relaii temporare ntre tabele, se determin indicatorul de nregistrri al uneia dintre tabele (tabela fiu sau copil) s urmreasc n mod automat micrile indicatorului de nregistrri al celeilalte tabele (tabela printe). Astfel, se poate selecta o nregistrare din partea "una" (printe) a unei relaii i se obine automat acces la nregistrrile asociate din partea "mai multe" (fiu) a relaiei. Dac se utilizeaz un formular pentru a lucra cu tabelele respective, se pot stoca relaiile ca parte a mediului de date pentru formularul respectiv. Pentru a crea relaii temporare ntre tabele, se poate proceda astfel : Varianta A - n fereastra Data Session se selecteaz tabelele i se folosete butonul Relations pentru a crea relaiile (legturile); sau Varianta B - Se pot utiliza zonele de lucru i aliasurile tabelelor pentru a stabili relaii ntre dou tabele deschise, prin intermediul comenzii SET RELATION. Sintaxa general a comenzii SET RELATION este: SET RELATION TO [ nume cmp 1 INTO nr. zon COPIL 1 | Alias Tabel COPIL 1 [, nume cmp 2 INTO nr. zon COPIL 2 | Alias Tabel COPIL 2 ... ] [ n nr. zon COPIL | Alias Tabel COPIL ] [ ADDITIVE ] ] Comanda SET RELATION stabilete o relaie ntre un tabel deschis n zona de lucru curent selectat (PRINTE) i un tabel deschis ntr-o alt zon de lucru (COPIL sau FIU). De obicei, tabelele asociate au un cmp comun, iar expresia utilizat pentru a stabili relaia este chiar expresia de indexare a indexului de control al tabelului fiu. Exemplu: Clienti Facturi S considerm dou Cod_client Nume Adresa Cod_client Factura Data tabele Clienti i Popa Arad 1234 11.09.2010 23 12 Facturi ale cror Alexa Bacau 2345 13.10.2010 12 45 structuri sunt Luca Iasi 3456 15.09.2010 45 23 prezentate alturat: 4567 23.11.2010 45 Se pot lega tabelele 5678 27.12.2010 45 Clienti i Facturi 6789 12.12.2010 12 astfel nct, atunci 7890 15.11.2010 23 cnd indicatorul de nregistrri din tabelul Clieni ajunge n dreptul unui anumit client, indicatorul de nregistrri din tabelul Facturi s se poziioneze pe nregistrarea care are acelai identificator pentru client. Unui client i se pot emite mai multe facturi. Stabilind o relaie pe baza cmpului comun (Cod_client )al tabelelor de Clienti i Facturi se pot vedea imediat toate facturile corespunztoare fiecrui client. Secvena de cod urmtoare folosete cmpul Cod_client, care este comun celor dou

58

Ctlin Tnase

FoxPro - Note de curs

tabele i creeaz o relaie ntre acestea, pe baza cmpului Cod_client din tabelul Clienti i a etichetei de index Cod_client din tabelul Facturi.
USE USE Clienti IN 1 Facturi IN 2 && Clienti = tabela && Facturi = tabela PARINTE FIU

SELECT 1 INDEX ON

&& sau SELECT Clienti - Selectm zona 1


Cod_client TAG C && Indexm tabela Clienti dup cmpul Cod_client

SELECT 2 INDEX ON Cod_client TAG SET ORDER TO TAG C SELECT SET 1 TO

&& sau SELECT Facturi - Selectm zona 2


C && Indexm tabela Facturi dup cmpul Cod_client

&& Specificm ordinea de indexare n zona 2 (tabela copil) && sau SELECT Clienti - Selectm tabela PARINTE

RELATION

cod_client INTO

Facturi

Pentru a vedea efectul mutrii indicatorului de nregistrare n tabela copil, simultan cu deplasarea indicatorului n tabela printe, trebuie s deschidem dou ferestre Browse (ale celor dou tabele). SELECT 1 && sau SELECT Clienti - Selectm tabela PARINTE BROWSE NOWAIT && Deschidem fereastra Browse din zona printe i && redimensionm (micorm) fereastra cu mousul, && pentru ca pe ecran s fie vizibile ambele ferestre Click n fereastra de comenzi, pentru a scrie urmtoarele dou comenzi (fereastra Browse a tabelei printe rmne deschis). SELECT 2 && sau SELECT Facturi - Selectm tabela FIU
BROWSE NOWAIT

Acum, deplasarea marcajului n fereastra printe (Clienti) are ca efect deplasarea indicatorului n fereastra copil (Facturi). Reamintim: Clauza NOWAIT continu execuia programului imediat dup afiarea mesajului. Observaie: Fereastra Data Session afieaz cele dou tabele deschise, precum i relaiile stabilite cu ajutorul comenzii SET RELATION. n exemplul precedent s-a stabilit o singur relaie ntre dou tabele. Din sintaxa comenzii SET RELATION se desprinde faptul c aceasta se poate folosi pentru a stabili relaii multiple ntre un tabel printe i mai multe tabele copil (fiu). Crearea unor relaii ntre nregistrrile dintr-un singur tabel Exist posibilitatea crerii de relaii ntre nregistrrile unui singur tabel, atunci cnd toate informaiile necesare sunt stocate doar n acest tabel. Acestea se numesc relaii de autorefereniere. Pentru a crea o relaie de autorefereniere, se deschide de dou ori acelai tabel: o dat ntr-o anumit zon de lucru, iar a doua oar, cu ajutorul clauzei AGAIN a comenzi USE, ntr-o alt zon de lucru. Apoi se utilizeaz un index care s asocieze nregistrrile. Exemplu: Se consider un tabel Personal a crui structur este prezentat alturat. La navigarea prin tabelul Personal, pe msur ce se mut indicatorul de nregistrri de la un Sef la altul (n cazul nostru, Albu i Zota), se dorete vizualizarea angajailor din subordinea fiecrui ef. Se vor lansa urmtoarele comenzi: Cod_pers 12 23 34 45 56 67 78 89 90 Nume Albu Zota Manea Rosu Cristea Popa Fenea Iorga Dacian Prenume Ion Costel Alex Mirel Costel Viorel Gelu Dorin Costel Funcie Sef sectie 1 Sef sectie 2 Contabil Electrician Sudor Tamplar Dulgher Forjor Croitor Sef Albu Zota Albu Zota Albu Albu Zota Zota Zota

59

Ctlin Tnase SELECT 1 USE Personal ALIAS manager SELECT 2 USE Personal AGAIN ALIAS subordonat SELECT 1 INDEX ON Sef TAG S SET ORDER TO S SELECT 2 INDEX ON Sef TAG S SELECT manager SET RELATION TO Sef INTO subordonat BROWSE SELECT subordonat BROWSE

FoxPro - Note de curs

Atunci cnd se mut indicatorul de nregistrare n feresatra BROWSE a tabelului manager, fereastra BROWSE a tabelului subordonat este actualizat astfel nct s afieze numai subordonaii unui anumit Sef. Stabilirea (crearea) unei relaii de tip 1 1 ntre tabela printe i tabela copil se face cu comanda: SET RELATION TO <nume cmp comun> INTO <alias tabel COPIL> Deseori, o tabel copil conine mai multe nregistrri care corespund unei singure nregistrri din tabela printe (de exemplu, mai muli elevi au acelai diriginte) Stabilirea (crearea) unei relaii de tip 1 n ntre tabela printe i tabela copil se face cu comenzile: SET RELATION TO <nume cmp comun> INTO <alias tabel COPIL> SET SKIP TO <alias tabel COPIL> nti se creeaz o relaie ntre tabelele printe i copil cu comanda SET RELATION TO. Comanda suplimentar SET SKIP TO <alias tabel COPIL> creeaz o relaie 1 n (unu la mai muli) ntre tabelele printe i copil. Exemple: A Stabilirea relaiei ELEVI Clasa - ( 1 1 ) -> PROFESOR (Relaia 1 1 ntre ELEVI i PROFESOR, dup cmpul Clasa)

Pentru fiecare elev se va afia numele dirigintelui su. Fie tabela printe ELEVI, pe care o vom deschide n zona 1 de memorie. Fie tabela copil PROFESOR, pe care o vom deschide n zona 2 de memorie. Cele dou tabele, nc neindexate, au configuraiile: ELEVI Nume Enea Albu Negru Iorga Dobre PROFESOR Dirig Clasa 12 C Puscasu V. 09 B Munteanu I. 10 B Barbu V. 11 A Fenea G. 10 A Negru T.

Prenume Sorin Ion Ana Dorin Dan

Clasa 10 B 12 C 09 B 11 A 10 B

60

Ctlin Tnase

FoxPro - Note de curs

Observm c, n ambele tabele, exist un cmp comun, Clasa. CLOSE DATABASES USE ELEVI IN 1 && Tabela printe ELEVI se deschide n zona 1 USE PROFESOR IN 2 && Tabela copil PROFESOR se deschide n zona 2 SELECT 1 && Selectm zona 1 INDEX ON Clasa TAG C && Indexm tabela ELEVI dup cmpul Clasa SELECT 2 && Selectm zona 2 INDEX ON Clasa TAG C && Indexm tabela PROFESOR tot dup cmpul Clasa SET ORDER TO TAG C && Specificm ordinea de indexare n zona 2 (tabela copil) SELECT 1 && Selectm zona printe (trebuie s fie ultima selectat) SET RELATION TO Clasa INTO PROFESOR Sau SET RELATION TO Clasa INTO 2 && Creare relaie ntre tabela printe i tabela copil PROFESOR && din zona 2 Pentru a vedea efectul mutrii indicatorului de nregistrare n tabela copil, simultan cu deplasarea indicatorului n tabela printe, trebuie s deschidem dou ferestre Browse (ale celor dou tabele). SELECT 1 BROWSE && Selectm zona printe && Deschidem fereastra Browse din zona printe i redimensionm (micorm) fereastra && cu mousul, pentru ca pe ecran s fie vizibile ambele ferestre

Click n fereastra de comenzi, pentru a scrie urmtoarele dou comenzi (fereastra Browse a tabelei printe rmne deschis). SELECT 2 BROWSE && Selectm zona copil && Deschidem fereastra Browse din zona copil i redimensionm fereastra cu mousul fereastra printe (ELEVI) are ca efect deplasarea indicatorului n PROFESOR Dirig Clasa 09 B Munteanu I. 10 A Negru T. 10 B Barbu V. 11 A Fenea G. 12 C Puscasu V.

Deplasarea marcajului n fereastra copil (PROFESOR). ELEVI Nume Prenume Negru Ana Enea Sorin Dobre Dan Iorga Dorin Albu Ion

Clasa 09 B 10 B 10 B 11 A 12 C

Se observ c ambele tabele snt ordonate dup Clasa. n rezumat, dac cele dou tabele snt deja indexate dup cmpul Clasa, putem scrie, pe scurt: USE ELEVI IN 1 USE PROFESOR IN 2 ORDER C SELECT 1 SET RELATION TO Clasa INTO 2 && Tabela printe && Tabela copil indexat dup Clasa (eticheta C )

OBSERVAIE: Pentru afiarea cu LIST a unui cmp dintr-o anumit zon de memorie, putem folosi sintaxa: LIST alias zon . cmp Sau LIST alias zon -> cmp

61

Ctlin Tnase

FoxPro - Note de curs

Astfel, putem scrie: LIST A. Clasa, sau LIST A -> Clasa, A -> Nume, B -> Dirig Se vor afia cmpurile Clasa i Nume din zona 1 (cu aliasul A), respectiv cmpul Dirig din zona 2 (B). Lucrurile pot fi privite i invers: B Stabilirea relaiei PROFESOR Clasa - ( 1 1 ) -> ELEVI (Relaia 1 1 ntre PROFESOR i ELEVI, dup cmpul Clasa) Pentru fiecare diriginte indicatorul de nregistrri se va poziiona pe numele primului elev al su. Acum, considerm c tabela printe este PROFESOR i o vom deschide n zona 1 de memorie, iar tabela copil este ELEVI i o vom deschide n zona 2 de memorie. CLOSE DATABASES USE PROFESOR IN 1 && Tabela printe PROFESOR se deschide n zona 1 USE ELEVI IN 2 && Tabela copil ELEVI se deschide n zona 2 SELECT 1 && Selectm zona 1 INDEX ON Clasa TAG C && Indexm tabela PROFESOR dup cmpul Clasa SELECT 2 && Selectm zona 2 INDEX ON Clasa TAG C && Indexm tabela ELEVI tot dup cmpul Clasa SET ORDER TO TAG C && Specificm ordinea de indexare n zona 2 (tabela copil) SELECT 1 && Selectm zona printe SET RELATION TO Clasa INTO ELEVI Sau SET RELATION TO Clasa INTO 2 && Creare relaie ntre tabela printe i tabela copil ELEVI && din zona 2 Redeschidem cele dou ferestre Browse (ale celor dou tabele), pentru a vedea efectul mutrii indicatorului de nregistrare n tabela copil, o dat cu deplasarea indicatorului n tabela printe. SELECT 1 BROWSE && Selectm zona printe && Deschidem fereastra Browse din zona printe i redimensionm (micorm) fereastra && cu mousul pentru ca pe ecran s fie vizibile ambele ferestre A.Nume, B.Dirig

Click n fereastra de comenzi pentru a scrie urmtoarele dou comenzi (fereastra Browse a tabelei printe rmne deschis). SELECT 2 BROWSE && Selectm zona copil && Deschidem fereastra Browse din zona copil i redimensionm fereastra cu mousul LIST A. Clasa, A.Nume, B.Dirig PROFESOR Dirig Clasa 09 B Munteanu I. 10 A Negru T. 10 B Barbu V. 11 A Fenea G. 12 C Puscasu V. ELEVI Nume Negru Enea Dobre Iorga Albu Prenume Ana Sorin Dan Dorin Ion Clasa 09 B 10 B 10 B 11 A 12 C

Afiarea se poate face i cu comanda Deplasarea marcajului n fereastra printe (PROFESOR) are ca efect deplasarea indicatorului n fereastra copil (ELEVI).

62

Ctlin Tnase

FoxPro - Note de curs

n rezumat, dac cele dou tabele sunt deja indexate dup cmpul Clasa, putem scrie, pe scurt: USE PROFESOR IN 1 && Tabela printe USE ELEVI IN 2 ORDER C && Tabela copil indexat dup Clasa (eticheta C ) SELECT 1 SET RELATION TO Clasa INTO 2 C Stabilirea relaiei PROFESOR - Clasa - ( 1 n ) -> ELEVI (Relaia 1 n ntre PROFESOR i ELEVI, dup cmpul Clasa) Pentru fiecare diriginte se va afia lista elevilor si.

USE PROFESOR IN 1 && Tabela printe USE ELEVI IN 2 ORDER C && Tabela copil indexat dup Clasa (eticheta C ) SELECT 1 && Ultima selectat este zona printe SET RELATION TO Clasa INTO 2 SET SKIP TO 2 PROFESOR Dirig Clasa 09 B Munteanu I. 10 A Negru T. 10 B Barbu V. 11 A Fenea G. 12 C Puscasu V. ELEVI Nume Negru Enea Dobre Iorga Albu Prenume Ana Sorin Dan Dorin Ion Clasa 09 B 10 B 10 B 11 A 12 C

D -

Stabilirea relaiei ELEVI Clasa - ( 1 1 ) -> PROFESOR - Clasa ( 1 1 ) -> SALI Pentru fiecare elev se va afia dirigintele i sala n care nva elevul. Vom avea trei tabele: ELEVI, PROFESOR i SALI, n care trebuie s apar cmpul comun Toate tabelele trebuie s fie indexate dup cmpul comun Clasa.

Clasa.

Tabela ELEVI este printe pentru tabela PROFESOR, care, la rndul ei, este printe pentru SALI. ELEVI Nume Negru Enea Dobre Iorga Albu Prenume Ana Sorin Dan Dorin Ion Clasa 09 B 10 B 10 B 11 A 12 C PROFESOR Dirig Clasa 09 B Munteanu I. 10 A Negru T. 10 B Barbu V. 11 A Fenea G. 12 C Puscasu V. SALI Clasa 09 B 10 A 10 B 11 A 12 C Sala 19 08 11 04 03

Presupunnd indexate dup Clasa toate cele 3 tabele, putem scrie: USE ELEVI IN 1 USE PROFESOR n 2 ORDER C USE SALI IN 3 ORDER C SELECT 1 SET RELATION TO Clasa INTO 2 SELECT 2 SET RELATION TO Clasa INTO 3 SELECT 1 && Selectm zona printe ELEVI

63

Ctlin Tnase

FoxPro - Note de curs

&& Deschidem fereastra Browse din zona printe i redimensionm (micorm) fereastra && cu mousul pentru ca pe ecran s fie vizibile cele 3 ferestre Click n fereastra de comenzi pentru a scrie urmtoarele dou comenzi (fereastra Browse a tabelei printe rmne deschis). BROWSE SELECT 2 BROWSE && Selectm zona 2, unde este deschis PROFESOR (copil pentru ELEVI, dar && printe pentru SALI) && Deschidem fereastra Browse din zona copil i redimensionm fereastra cu mousul

Click n fereastra de comenzi pentru a scrie urmtoarele dou comenzi (fereastra Browse a tabelei printe rmne deschis). SELECT 3 BROWSE && Selectm zona 3, unde este deschis SALI (copil pentru PROFESOR) && Deschidem fereastra Browse din zona copil i redimensionm fereastra cu mousul

Deplasarea marcajului n fereastra printe (ELEVI) are ca efect deplasarea indicatorului n fereastra copil (PROFESOR), respectiv n fereastra SALI. Afiarea cu LIST se poate face astfel: LIST A.Nume, A. Clasa, B.Clasa, C.Sala sau LIST A -> Nume, A -> Clasa, B -> Clasa, C -> Sala Ambele variante de afiare (cu BROWSE sau cu LIST) au avantaje i dezavantaje. E Stabilirea relaiei ELEVI ( n n ) -> PROFESOR Dorim s afim profesorii unui elev. Datele se gsesc ntr-o relaie n n, adic un elev are mai muli profesori, un profesor pred la mai muli elevi. Evident, trebuie s mai folosim o tabel suplimentar numit OBIECTE, care are cmpurile Nume obiect, Cod obiect, Cod clas. Astfel, un ELEV are un anumit OBIECT la care pred un PROFESOR. Aceast relaie se exprim astfel: ELEVI Clasa ( 1 - n ) -> OBIECTE CodProf ( 1 1 ) -> PROFESOR ELEVI Nume Negru Enea Dobre Iorga Albu Clasa 10 B 10 B 10 B 11 A 11 A OBIECTE Obiect Clasa 10 B Rom 10 B Mate 10 B Fiz 11 A Rom 11 A Mate 11 A Fiz CodProf 1 2 3 1 2 4 PROFESOR CodProf Nume 1 POPA 2 ALEXA 3 ENEA 4 ALBU

Indexm ELEVI dup Clasa. Indexm OBIECTE tot dup Clasa. Indexm OBIECTE i dup CodProf. Indexm PROFESOR dup CodProf. SELECT 1 INDEX ON SELECT 2 INDEX ON INDEX ON SELECT 3 INDEX ON

Clasa TAG C Clasa TAG C CodProf TAG Codp CodProf TAG codp

64

Ctlin Tnase

FoxPro - Note de curs

USE ELEVI IN 1 USE OBIECTE IN 2 ORDER C USE PROFESOR IN 3 ORDER codp SELECT 1 SET RELATION TO Clasa INTO 2 SET SKIP TO 2 && Relaie 1 n ntre ELEVI i OBIECTE SELECT 2 SET RELATION TO CodProf INTO 3 SELECT 1 BROWSE SELECT 2 BROWSE SELECT 3 BROWSE

&& Redimensionm fereastra Browse

&& Redimensionm fereastra Browse

Sau, mai clar: SELECT 1 LIST A.Nume, B.Obiect, C.Nume FOR A.Nume = Negru Se afieaz Obiectele i Profesorii elevului Negru. sau SELECT 1 && NU UITAI: Ultima selectat trebuie s fie zona printe. && Altfel, nu se obin rezultatele ateptate. DISPLAY A.Nume, B.Obiect, C.Nume ALL OFF (Reamintim: clauza OFF invalideaz afiarea numrului de ordine al nregistrrilor)

Stabilirea unor relaii persistente ntre tabele


Relaiile persistente ntre tabele sunt relaii ntre tabelele aparinnd unei baze de date, care sunt stocate n fiierul bazei de date i sunt folosite automat drept condiii implicite de jonciune n ferestrele Query Designer i View Designer. Sunt afiate n Database Designer ca linii de legtur ntre indecii tabelelor, sunt afiate n Data Enviromnent Designer ca relaii implicite pentru formulare i rapoarte i sunt folosite pentru a stoca informaii despre integritatea referenial. Se deosebesc de relaiile temporare (create cu SET RELATION) prin faptul c nu trebuie s fie create de fiecare dat cnd se folosesc tabelele. Not: Datorit faptului c relaiile persistente nu controleaz relaiile dintre indicatorii nregistrrilor din tabele, cnd se dezvolt aplicaii Visual FoxPro se folosesc att relaii temporare (SET RELATION), ct i relaii persistente. Relaiile persistente se stabilesc ntre indeci, nu ntre cmpuri, ceea ce permite legarea tabelelor pe baza unei expresii simple sau complexe compuse din indeci. n Database Designer se alege numele indexului care se dorete legat i se trage cu mouse-ul peste numele indexului din tabelul legat. Relaiile persistente apar n Database Designer ca linii care unesc tabelele legate. De regul, relaiile persistente sunt create folosind indecii din cheile primar i extern. Tipul etichetei de index sau al cheii determin tipul relaiei persistente care se poate crea. Trebuie folosit o etichet index sau o cheie primar sau candidat pentru partea "unu" a relaiei unu-la-mai-multe, iar pentru partea "mai multe" se folosete o cheie sau o etichet de index obinuit.

65

Ctlin Tnase

FoxPro - Note de curs

tergerea unei relaii persistente ntre tabele n Database Designer, se execut clik pe linia de relaie ntre dou tabele i se apas tasta DELETE.

Generarea integritii refereniale


Generarea integritii refereniale presupune crearea unui set de reguli care s pstreze relaiile definite ntre tabele atunci cnd se insereaz sau se terg nregistrri. Respectarea integritii refereniale presupune c Visual FoxPro va mpiedica: 1. adugarea unei nregistrri la un tabel legat, atunci cnd nu exist nici o nregistrare asociat n tabelul primar, 2. modificarea de valori n tabelul primar care ar duce la apariia de nregistrri fr printe n tabelul asociat sau 3. tergerea de nregistrri din tabelul primar atunci cnd exist nregistrri asociate. Visual FoxPro furnizeaz un generator de integritate referenial (RI - Referential Integrity Builder) care permite: 1. determinarea tipurilor de reguli ce se doresc ntrite, 2. tabelele pentru care regulile trebuie ntrite i 3. evenimentele de sistem care impun mediului s verifice respectarea regulilor de integritate referenial. Generatorul RI gestioneaz mai multe niveluri de tergere i actualizri n cascad i este instrumentul cel mai potrivit pentru generarea integritii refereniale. n Database Designer , se selecteaz Referential Integrity din meniul Database.

Prin folosirea generatorului de integritate referenial n scopul de a crea regulile pentru baze de date, Visual FoxPro genereaz cod care ntrete regulile de integritate referenial, cod salvat sub form de declanatoare care conin referine la procedurile stocate. Acest cod poate fi vizualizat deschiznd editorul de text pentru procedurile stocate. Not: Dac se intervine n arhitectura bazei de date, prin modificarea tabeleor sau a indecilor folosii ntr-o relaie persistent, va trebui rulat din nou generatorul RI, nainte de a folosi baza de date. Aceasta determin revizuirea codului procedurilor stocate i a declanatoarelor tabelelor folosite, pentru a ntri integritatea referenial, astfel nct aceasta s reflecte noua arhitectur. Regulile de integritate sunt importante pentru a proteja baza de date mpotriva posibilelor inconsistene. Dac este necesar, putem produce un proiect fizic de baz de date, pentru a putea vedea mai uor ce reguli sunt necesare. Vom considera 5 tipuri de reguli de integritate: necesitatea datelor, reguli asupra domeniului atributelor,

66

Ctlin Tnase

FoxPro - Note de curs

integritatea entitilor, integritatea referinelor, regulile ntreprinderii.


Necesitatea datelor Exist atribute care nu pot conine valoarea nul, ci trebuie s aib totdeauna o valoare. De exemplu fiecare cheltuial nregistrat trebuie s aib asociat un furnizor al serviciilor sau al obiectelor ce se pltesc prin acea cheltuial. Aceste reguli deja le-am identificat, cnd am documentat atributele n pasul 1.3. Reguli asupra domeniului atributelor. Unele atribute au un domeniu de definiie bine definit. Aceste domenii trebuie respectate. Domeniile de definiie au fost deja identificate cnd am documentat domeniile atributelor n pasul 1.2. Integritatea entitilor Cheia primar a entitilor nu poate lua valori nule. De exemplu fiecare furnizor trebuie s aib un cod diferit de zero. Aceste reguli au fost deja identificate, cnd am documentat cheile primare n pasul 1.5. Integritatea referinelor Cheia strina din tipul de entitate fiu face ligtura cu o entitate din tipul de entitate printe. Deci, dac cheia strin conine o valoare, ea trebuie neaprat s se regseasc i n tipul de entitate printe. De exemplu tipul de entitate Cheltuieli conine cheia strin Cod_furnizor, care se refer la Furnizori(Cod_furnizor). Dac aceast cheie nu este nul, atunci trebuie s gsim un furnizor care s aib acel cod. Prima ntrebare pe care trebuie s ne-o ponem este: Poate fi cheia strin nul? n cazul exemplului nostru asta ar nsemna c exist cheltuieli care nu se prtesc nimnui. Aceste cazuri nu sunt admise de lege, deci nu putem avea valoare nul n cheia strin din tipul de entitate Cheltuieli. n general dac pariciparea tipului de entitate fiu este total, atunci nu putem avea valoare nul n cheia strin. n caz contrar putem avea valoare nul. Pentru a demonstra diferitele cazuri la definirea acestor reguli, folosim relaia de mai sus dintre Furnizori i Cheltuieli, care este de tipul 1:M. Considerm urmtoarele cazuri: Cazul 1: Inserarea unei entiti n tipul de entitate fiu (Cheltuieli): Pentru a verifica integritatea referinei, verificm dac atributele din componena cheii strine (Cod_furnizor) sunt vide, sau s existe entitate n tipul de entitate printe care s aib valoare cheii primare egal cu valoare cheii strine. Cazul 2: tergerea unei entiti din tipul de entitate fiu (Cheltuieli): tergerea unei entiti din tipul de entitate fiu nu creeaz probleme la integritatea referinelor. Cazul 3: Actualizarea cheii strine n tipul de entitate fiu (Cheltuieli): Acest caz este similar cazului 1. Cazul 4: Stergerea unei entiti din tipul de entitate printe (Furnizori): Dac se terge o entitate din tipul de entitate printe, integritatea referinelor se stric n cazul n care exist entiti n tipul de entitate fiu, care se refer la entitatea tears. Exist strategii severe de a rezolva integritatea referinelor: FR ACIUNE Neacceptarea tergerii unei entiti din tipul de entitate printe, dac acesta este referit de o entitate din tipul de entitate fiu. n cazul nostru, nu se accept tergerea furnizorului, dac el are o factur de ncasat. CASCAD Dac o entitate din tipul de entitate printe este tears, se terg automat toate entitiile din tipurile de entiti fiu. Dac tipurile de entiti fiu au i ei la rndul lor alte tipuri de entiti fiu, se va efectua tergerea n cascad n toate tipurile de entiti fiu, pn la ultimul nivel. Cu alte cuvinte, dac se terge un furnizor, atunci automat se terge fiacare factur pe carea are de ncasat acest furnizor. SETARE LA NUL Dac o entitate din tipul de entitate printe se terge, atunci se vor seta la valoare nul toate cheile strine ai tipurilor de entiti fiu n cascad pn la ultimul nivel. n exemplul nortru, dac se terge un furnizor, atunci se vor seta la valoare nul toate referinele la acest furnizor n tipul

67

Ctlin Tnase

FoxPro - Note de curs

de entitate Cheltuieli. Acesta nseamn c nu vom tii ca anumite cheltuieli la ce furnizor trebuie pltite. SETARE IMPLICIT Este analog cazului de setare la nul, cu diferena c aici se seteaz cheia strin la o valoare implicit n loc de valoare nul. n exemplul nostru putem seta cheia strin din Cheltuieli la o valoare a cheii primare din Furnizori, care s conin un furnizor predefinit - de exemplu cu numele de Furnizor ters. FR MODIFICARE n cazul tergerii unei entiti din tipul de antitate printe, nu se actualizeaz deloc cheile strine din tipurile de entiti fiu. Cazul 6: Modificarea cheii primare n tipul de entitate printe (Furnizori): Dac se modific cheia primar din tipul de entitate printe, integritatea referinelor se stric. Pentru meninerea integritii, se pot folosii toate cazurile descrise mai sus, dar cel mai indicat este folosirea cazului CASCAD. Regulile ntreprinderii. n final evideniem acele reguli care sunt date de realitatea ce se va modela n baza de date. Documentarea tuturor regulilor de integritate. Trecem toate regulile de integritate n dicionarul de date.

Comanda JOIN
Creeaz o tabel nou (fiier .DBF), prin reunirea a dou tabele (fiiere .DBF) existente: - tabela curent (deschis n zona de lucru curent) i - o a doua tabel deschis ntr-o alt zon de lucru, identificat prin numrul zonei de lucru (work area) sau prin alias. Clienti Cod_client Nume Adresa Sintaxa: Popa Arad 23 Vanea Mirel 679 JOIN WITH <nr zon> | <alias> TO <nume fisier Alexa Bacau 12 NOU.DBF> FOR <condiie> Helgiu Florin 934 Luca Iasi 45 Exemplu: Considerm dou tabele Clienti i Facturi. n zona 1, deschidem tabela Clienti.DBF Facturi n zona 2, deschidem tabela Facturi.DBF Cod_client Factura Data 1234 11.09.2010 12 Din zona 1, lansm comanda JOIN, prin care crem o nou 2345 13.10.2010 45 tabela C:\FISIERNOU.DBF, care conine doar cmpurile: 2323 17.11.2010 453 Cod_Client din tabela Clienti (Clienti . Cod_Client) i 3456 15.09.2010 23 Data din tabela Facturi (Facturi . Data), 4567 23.11.2010 45 aceste cmpuri trebuind s verifice i condiia 5678 27.12.2010 45 Clienti . Cod_Client = Facturi . Cod_Client 4545 23.12.2010 816 adic, n noua tabel se vor copia doar acele nregistrri care 6789 12.12.2010 12 au cmpul Cod_Client identic n cele dou tabele (Clienti i 7890 15.11.2010 23 Facturi) care se reunesc (Altfel spus, se vor prelua din cele dou tabele doar nregistrrile al cror Cod_client se FISIERNOU.DBF regsete n ambele tabele). Cod_client Data 11.09.2010 12 Secvena de comenzi care determin obinerea noii tabele 12.12.2010 12 este: 15.09.2010 23 15.11.2010 23 USE C:\CLIENTI.DBF IN 1 13.10.2010 45 USE C:\FACTURI.DBF IN 2 23.11.2010 45 SELECT 1 27.12.2010 45

68

Ctlin Tnase

FoxPro - Note de curs

JOIN WITH FACTURI TO C:\FISIERNOU.DBF FIELDS Clienti . Cod_Client, Facturi . Data FOR Clienti . Cod_Client = Facturi . Cod_Client ncrcm noua tabel n zona 3: USE C:\FISIERNOU.DBF IN 3 Afim noua tabel cu BROWSE.

Transferul de date ntre tabele Fox i alte structuri 1 Importul


de date dintr-un tablou (masiv) de date

Tablourile (masivele) de date snt preferabile fiierelor, deoarece viteza de accesare a memoriei RAM (unde se stocheaz tablourile) este mult mai mare dect viteza de accesare a discului (unde se memoreaz fiierele). De aceea, ordonarea unui tablou este mult mai rapid dect ordonarea unui fiier. Pentru importul de date dintr-un tablou (masiv) ntr-o tabel activ se folosesc comenzile: APPEND FROM ARRAY <nume masiv > i GATHER FROM <nume masiv> a) - Comanda APPEND FROM ARRAY adaug, la tabela activ, nregistrri ce se preiau dintr-un masiv. Sintaxa: APPEND FROM ARRAY <nume masiv > [ FOR <condiie> ] [ FIELDS <list cmpuri> ] Dac masivul este un vector, se consider c fiecare element al vectorului corespunde unui cmp al tabelei, copierea fcndu-se astfel: - primul element din vector se copiaz n primul cmp din tabel - al doilea element din vector se copiaz n al doilea cmp din tabel .a.m.d. Dac vectorul are mai multe elemente dect numrul de cmpuri ale tabelei, restul elementelor se ignor. Dac vectorul are mai puine elemente dect numrul de cmpuri ale tabelei, restul cmpurilor se iniializeaz cu valorile implicite: - irurile de caractere se iniializeaz cu spaii - numerele se iniializeaz cu 0 - datele calendaristice se iniializeaz cu date vide - cmpurile logice se iniializeaz cu .F. n acest caz se va aduga o singur nregistrare n tabel. TABELA Exemplu: Vector V Cmp 1 Cmp 2 Cmp 3 CREATE c:\tabela 12 12 14 16 Definim o tabel cu 3 cmpuri numerice 14 DIMENSION V [5] 16 V [1] = 12 18 V [2] = 14 20 V [3] = 16 V [4] = 18 Se vor transfera doar primele 3 elemente V [5] = 20 din vector n tabel. APPEND FROM ARRAY V BROWSE Dac masivul este o matrice (masiv bidimensional), se va aduga cte o nregistrare pentru fiecare linie a matricii. Fiecare linie a matricii este tratat ca un vector, deci copierea se va face ca la vectori.

69

Ctlin Tnase

FoxPro - Note de curs

Exemplu: DIMENSION mat [4,4] mat [1,1] = 11 mat [1,2] = 12 mat [2,1] = 21 mat [2,2] = 22 mat [3,1] = 31 mat [3,2] = 32 mat [4,1] = 41 mat [4,2] = 42 BROWSE CREATE c:\Tabela1 Definim o tabel cu 3 cmpuri numerice APPEND FROM ARRAY mat BROWSE

mat [1,3] = 13 mat [2,3] = 23 mat [3,3] = 33 mat [4,3] = 43

mat [1,4] = 14 mat [2,4] = 24 mat [3,4] = 34 mat [4,4] = 44

TABELA 1
Cmp_1 Cmp_2 Cmp_3

11 21 31 41

12 22 32 42

13 23 33 43

Valorile 14, 24, 34, 44 nu s-au transfera n Tabela1. Clauza FIELDS determin copierea doar a cmpurilor specificate n clauz. Clauza FOR determin domeniul de nregistrri din tabel. Dac tipul elementului din masiv nu este compatibil cu tipul cmpului din tabel unde trebuie s se copieze, FOX va ncerca transformarea elementului din masiv ntr-o valoare de tipul cmpului. Dac transformarea nu este posibil, cmpul ia valoarea implicit. b). Comanda GATHER are urmtoarea sintax: GATHER FROM <nume masiv > [ FIELDS <list cmpuri> ] Copierea se face astfel: primul element din masiv se copiaz n primul cmp al nregistrrii curente, al doilea element n al doilea cmp .a.m.d. pn la terminarea elementelor masivului sau cmpurilor nregistrrii curente. Clauza FIELDS determin copierea doar a cmpurilor specificate n clauz. Exemplu: Considernd aceeai matrice mat [4, 4] definit n exemplul anterior, dac vom scrie CREATE c:\Tabela2 Definim o tabel cu 3 cmpuri numerice GATHER FROM mat BROWSE TABELA 2
Cmp_1 Cmp_2 Cmp_3

11

12

13

Se observ c, din matricea mat, s-au transferat doar 3 elemente din 4 de pe prima linie a matricii n cmpurile nregistrrii curente (nregistrarea 1) a tabelei. Dac vom stabili o alt nregistrare drept nregistrare curent (cu GOTO), la aplicarea comenzii GATHER, n noua nregistrare se vor prelua elemente tot de pe prima linie a matricii, i se vor suprascrie eventualele valori existente n nregistrarea curent a tabelei.

70

Ctlin Tnase

FoxPro - Note de curs

2 Exportul

de date ntr-un masiv (tablou vector, matrice) de date

Pentru exportul de date din tabela activ ntr-un masiv se folosesc comenzile: COPY TO ARRAY <nume masiv> i SCATTER TO <nume masiv> a) - Comanda COPY TO ARRAY are sintaxa: COPY TO ARRAY <nume masiv> [ FIELDS < list cmpuri > ] [ domeniu ] [ FOR condiie ] COPY TO ARRAY este operaia invers comenzii APPEND FROM ARRAY. Masivul n care se va face copierea trebuie s existe (s fie declarat). Copierea se face astfel: Pentru vectori se va copia o singur nregistrare din tabel: - primul cmp n primul element al vectorului - al doilea cmp n al doilea element .a.m.d. Dac vectorul are mai multe elemente dect numrul de cmpuri, restul elementelor din vector rmn neschimbate. Pentru matrici, fiecare nregistrare se va copia pe cte o linie a matricii, copierea unei nregistrri fcndu-se analog celei de la vectori. - Dac numrul nregistrrilor este mai mare dect numrul liniilor matricii, restul nregistrrilor nu se vor copia. - Dac numrul nregistrrilor este mai mic dect numrul liniilor matricii, liniile din matrice care nu au corespondent n tabel vor rmne neschimbate. b) Opus comenzii GATHER este comanda SCATTER, care copiaz cmpurile nregistrrii curente din tabela activ ntr-un masiv (vector sau matrice). Sintaxa: SCATTER [ FIELDS <list de cmpuri> ] TO < nume masiv> Clauza FIELDS specific ce cmpuri din nregistrarea curent se vor copia n masiv. Copierea se face astfel: primul cmp al nregistrrii curente n primul element din masiv, al doilea cmp n al doilea element .a.m.d. pn la terminarea elementelor masivului sau cmpurilor nregistrrii curente. Dac masivul nu exist, atunci se va crea unul nainte copierii.

3 Importul / exportul

de date de la / ctre alte tipuri de fiiere Trensferul de date ntre tabelele Fox i alte tipuri de fiiere se face cu comenzile: a) - APPEND FORM <fiier> TYPE <tip fiier> Se import datele din fiierul <fiier> al crui tip este indicat n <tip fiier>. Exemplu: Presupun c exist un fiier Caiet.XLS, n rdcina C:, precum i o tabel Tabela1.DBF. USE C:\Tabela1 && Se deschide Tabela.DBF APPEND FROM C:\Caiet.XLS TYPE XLS Se adaug, la Tabela1.DBF, coninutul fiierului Caiet.XLS. b) - COPY TO <fiier> TYPE <tip fiier> Transfer datele dintr-o tabel .DBF n alt tip de fiier.

71

Ctlin Tnase

FoxPro - Note de curs

Exemplu: Presupun c exist un fiier Caiet.XLS, n rdcina C:, precum i o tabel Tabela1.DBF. USE C:\Tabela1 && Se deschide Tabela.DBF COPY TO C:\Caiet.XLS TYPE XLS Se adaug coninutul fiierului Tabela1.DBF n Caiet.XLS. c). IMPORT FROM <fiier> TYPE XLS | PDX | WRK | WKS Se face importul i conversia unui fiier de alt tip ntr-un fiier .DBF Exemplu: IMPORT FROM BROWSE

c:\excel-1.xls

TYPE

xls

d). EXPORT TO <fiier> [ FIELDS <list cmpuri> ] [ domeniu ] [ FOR condiie ] [ TYPE ] XLS | PDX | WRK | WKS Realizeaz exportul i conversia unui fiier .DBF ntr-un alt tip de fiier. Tipurile de fiiere snt indicate n clauza TYPE. Exemplu: EXPORT TO BROWSE

c:\excel-1.xls TYPE xls

Observaie La APPEND, COPY, IMPORT, EXPORT fiierul Caiet.XLS trebuie s fie nchis.

Prelucrri statistice i financiare asupra datelor tabelei


Sunt efectuate pentru extragerea unor informaii privitoare la datele din tabele, ntr-un timp ct mai scurt. 1 Numrarea nregistrrilor (articolelor) COUNT [ TO var ] [ domeniu] [ FOR condiie]

Se numr nregistrrile din tabela curent. Dac apare clauza TO <var>, rezultatul numrrii este stocat n variabila indicat. Exemple: USE C:\CLASA.DBF COUNT FOR Nume = Popescu AND Nota_Rom = 10 Se numr toate articolele cu Numele Popescu i Nota la Romn = 10. COUNT TO Nr ? Total nregistrri = , Nr Se numr toate nregistrrile i se reine rezultatul n variabila Nr, apoi se afieaz valoarea variabilei Nr. 2 nsumarea valorilor unor cmpuri numerice SUM [ list cmpuri ] [ TO <list variabile> ] [ domeniu ] [ FOR condiie ]

72

Ctlin Tnase

FoxPro - Note de curs

Exemple: Considerm tabelele PRETURI, respectiv MAGAZINE: PRETURI MAGAZINE Produs Firma Lei Dolari Euro Produs Firma CD-ROM Sony 150 50 35 CD-ROM Sony HDD Seagate 420 140 105 HDD Seagate RAM Pioneer 180 60 45 RAM Pioneer HDD Western 360 120 90 HDD Western RAM Taiwan 160 35 40 RAM Taiwan CD-ROM Philips 140 34 35 CD-ROM Philips

Mag1 3 4 5 3 2 5

Mag2 2 3 2 4 3 2

USE C:\PRETURI.DBF SUM Lei TO L ? Total Lei = , L Se nsumeaz pe vertical toate valorile cmpului Lei i se depune rezultatul n variabila L, apoi se afieaz valoarea variabilei L. SUM Lei, Dolari, Euro TO L, D, E ? Total Lei = , L ? Total Dolari = , L ? Total Euro = , L SUM Lei FOR Lei > 300 TO S3 ? S3 = , S3 Valorile sumelor se depun n variabilele L, D, E, respectiv S3, apoi se afieaz. SUM Lei FOR Produs = CD-ROM && Atenie la scriere!! Se face distincie ntre literele mari SUM Lei FOR Firma = Sony && i mici SUM Lei FOR Firma = Seagate AND Produs = HDD nsumarea valorilor numerice se poate face i pe orizontal. De exemplu, dorim s nsumm numrul de HDD Seagate vndute de cele dou magazine (Mag1 i Mag2): USE C:\ MAGAZINE.DBF SUM Mag1 + Mag2 FOR Firma = Seagate AND Produs = HDD 3 Media aritmetic Calculul mediei aritmetice a valorilor unor expresii se face cu comanda: AVERAGE <list expresii > [ TO <list variabile> ] [ domeniu ] [ FOR condiie ] Exemple: Considernd tabela PRETURI de mai sus, putem scrie: AVERAGE Lei FOR FIRMA = Sony TO son ? son AVERAGE Lei FOR Produs = CD-ROM TO CD ? CD && Se depune rezultatul n variabila son

&& Se depune rezultatul n variabila CD

73

Ctlin Tnase

FoxPro - Note de curs

4 Funcia CALCULATE are sintaxa: CALCULATE [ list expresii ] [ TO list variabile ] [ domeniu ] [ FOR condiie ] Se calculeaz valorile mai multeor expresii care se depun ntr-o list de variabile. ntr-o expresie pot intra funciile: - AVG ( expresie numeric ) calculul mediei aritmetice a expresiei ce poate conine cmpuri numerice ale tabelei active - CNT ( ) - numr articole selectate din tabela activ - SUM ( expresie numeric ) nsumeaz valorile expresiei ce poate conine cmpuri ale tabelei active - MAX ( expresie ) determin maximul expresiei calculat pentru fiecare articol selectat al tabelei active - MIN ( expresie ) determin minimul expresiei calculat pentru fiecare articol selectat al tabelei active Exemplu: Pentru tabela PRETURI de mai sus, calculm: - numrul total de articole - pretul maxim - pretul minim - valoarea medie, n lei, a produsului CD-ROM CALCULATE CNT ( ), MAX (Lei), MIN ( Lei ), AVG ( Lei ) FOR Produs = CD-ROM

5 Comanda TOTAL are sintaxa: TOTAL ON <cheie> TO <fiier nou.dbf> [ FIELDS list cmpuri ] [domeniu] [ FOR condiie] Comanda TOTAL creeaz o nou tabel (fiier nou.dbf) care are aceeai structur ca a tabelei curente. n tabela curent se aplic o indexare dup un anumit criteriu (cheie). Aplicnd comanda TOTAL, tabela curent este parcurs integral, iar n tabela nou creat (fiier nou.dbf) se adaug un articol (o nregistrare) pentru fiecare grup de articole din tabela curent care au aceeai valoare a cheii. Cheie poate fi numele unui cmp. Exemplu: USE C:\PRETURI.DBF INDEX ON Firma TAG F && cheia de indexare este cmpul Firma TOTAL ON Firma TO C:\TOTALURI FIELDS Lei Se fac totalurile cmpului Lei, pentru toate firmele. TOTAL ON Firma TO C:\TOTALURI FIELDS Lei FOR Firma = Sony Se face totalul cmpului Lei, doar pentru firma Sony. USE && se nchide tabela curent USE C:\TOTALURI.DBF BROWSE && se ncarc spre consultare tabela TOTALURI

Funcii financiare
1 PAYMENT ( < expN 1 >, < expN 2 >, < expN 3 > ) Calculeaz mrimea restituirilor periodice (lunare) pentru acoperirea unei sume < expN 1 >, cu dobnd constant < expN 2 >, pe un numr dat de luni < expN 3 >.

74

Ctlin Tnase

FoxPro - Note de curs

Exemplu: S presupunem c am mprumutat de la o banc o sum de 1.000.000 lei (< expN 1 >). Banca practic o dobnd de 1 % (< expN 2 >). Suma trebuie rambursat n 36 rate lunare (< expN 3 >). Vom scrie: N1 = 1000000 N2 = 0.01 N3 = 36 ? PAYMENT ( N1, N2, N3 ) => 33.214,31 sau ? PAYMENT ( 1000000, 0.01, 36 ) => 33.214,31 Deci, pentru acoperirea mprumutului de 1.000.000, n 36 de luni, la o banc unde dobnda practicat este de 1 %, trebuie s returnm lunar 33.214,31 lei. 2 FV ( < expN 1 >, < expN 2 >, < expN 3 > ) Funcia FV (Future Value) calculeaz valoarea viitoare a unei depuneri regulate <expN 1>, cu o cretere cu o dobnd constant < expN 2 >, pe o perioad dat de < expN 3 >. Exemplu: Deschidem un cont la o banc. Evident, la deschidere contul este gol. Depunem la banc, lunar, suma de 1.000.000 (< expN 1 >). Banca practic o dobnd constant de 1 % (< expN 2 >). Ne intereseaz care este suma pe care o vom avea n cont dup 36 de luni (< expN 3 >). Vom scrie: N1 = 1000000 N2 = 0.01 N3 = 36 ? FV ( N1, N2, N3 ) => 43.076.878,6 sau ? FV ( 1000000, 0.01, 36 ) => 43.076.878,36 3 PV ( < expN 1 >, < expN 2 >, < expN 3 > ) Funcia PV (Present Value) calculeaz valoarea la zi a unei investiii ce se constituie printr-o depunere regulat cu suma constant < expN 1 >, la o banc unde se practic o dobnd fixat <expN 2>, depunerea fcndu-se ntr-un numr de luni dat de < expN 3 >. Exemplu: Avem un cont la o banc unde se practic o dobnd fixat de 1 % (<expN 2>). Ne intereseaz ce sum am putea acoperi din acest cont (ct trebuie s fie contul n prezent), astfel nct, pltind lunar, din cont, suma de 1.000.000 lei (<expN 1>), contul s fie gol dup 36 de luni (<expN 3>). N1 = 1000000 N2 = 0.01 N3 = 36 ? PV ( N1, N2, N3 ) => 30.107.505,04 sau ? PV ( 1000000, 0.01, 36 ) => 30.107.505,04 Deci, contul trebuie s fie, n prezent, 30.107.505,04 lei, astfel ca dup 36 de luni contul s fie gol, scond din el, lunar, 1.000.000 lei, la o banc unde dobnda acordat este de 1%.

75

Ctlin Tnase

FoxPro - Note de curs

Limbajul SQL

(Structural Query Language) - Caracterizare

Este un limbaj neprocedural. Se adreseaz nespecialitilor n calculatoare. Este asemntor limbajului natural i descrie datele solicitate, nu i procedeele de cutare. Accesul la date (interogare, tergere, inserare, modificare) se face n mod declarativ. Alegerea celui mai potrivit program imperativ echivalent cade n sarcina unei componente a SGBD numit optimizator. SQL folosete un numr mic de comenzi. Comenzile au exprimri sintactice foarte flexibile datorit numrului mare de opiuni din sintaxa comenzii. SQL permite interogarea BD, fr a cunoate limbajul propriu al SGBD. SQL s-a impus ca standard industrial. SQL nu permite orice fel de acces la datele BD: - nu are comenzi pentru traducerea structurilor alternative sau repetitive - nu ofer posibilitatea lucrului cu obiecte vizuale De aceea, SQL este considerat un sub-limbaj orientat pe lucrul cu BD (limbaj din generaia a 4-a de limbaje). Toate mediile comerciale orientate pe prelucrarea BD (Oracle, DB2, SyBase, Informix, Tandem) implementeaz mici variaii ale standardului SQL. Un utilizator poate interoga o BD oarecare, dac aceasta are implementat SQL, fr a cunoate limbajul propriu al unui SGBD anume. Dintre cele mai cunoscute comenzi ale limbajului SQL, utilizate pentru interogarea BD, amintim: SELECT, INSERT, UPDATE, DELETE, Query Designer. O interogare (cerere) presupune o solicitare de date, n mod direct, fr a indica modul de obinere. Interogrile servesc la selectarea unor articole din tabele, pe baza unor criterii. Articolele selectate pot fi afiate ntr-o ordine stabilit de utilizator. Exist posibilitatea combinrii datelor provenite din mai multe tabele asociate, deci rezultatele interogrii pot fi vizualizate ntr-o singur fereastr. O cerere SQL se poate lansa din fereastra de comenzi (Command) sau dintr-un program FoxPro (pentru c ea funcioneaz ca orice alt comand), dar se poate proiecta interactiv cu ajutorul utilitarului Query Designer. O interogare se poate defini cu comanda SQL SELECT care permite specificarea datelor ce vor constitui ieirea din interogare, precum i sursa acestora. Modul de obinere a datelor revine n sarcina optimizatorului de cereri (Rushmore). Comanda SQL SELECT precizeaz cmpurile, constantele, expresiile de afiat ntr-un rezultat al interogrii. Sintaxa comenzii SELECT: SELECT [ ALL | DISTINCT ] [ col 1 [ AS nume ], col 2 [ AS nume ], ] FROM < list fiiere > [ INTO < destinaie > / TO FILE < fiier .DBF > ] [ WHERE < condiie > ] [ GROUP BY < list chei > [ HAVING < condiie > ] ] [ ORDER BY < expresie de ordonare > ] Clauzele ALL | DISTINCT permit prelucrarea tuturor nregistrrilor (ALL) sau doar a articolelor unice (DISTINCT). Clauza col 1 [AS nume] definete coloanele care vor constitui ieirea din interogare. Coloanele pot primi alt nume prin clauza AS nume.

76

Ctlin Tnase

FoxPro - Note de curs

Coloanele pot fi: - cmpuri ale tabelelor definite prin clauza FROM, - expresii, - constante, - funcii utilizator. - funcii standard: MAX, MIN, COUNT, AVG, COUNT. Clauza FROM < list fiiere > specific lista fiierelor de intrare n prelucrare. Exemple: Considernd o baz de date COAL format din tabelele ELEVI i CLASA. Cererea SELECT Nume FROM ELEVI specific numele tuturor elevilor din tabela (fiierul) ELEVI. Cererea SELECT DISTINCT cls AS cod_clasa FROM ELEVI specific numele claselor distincte din coal, din tabela (fiierul) ELEVI. Cererea SELECT ALL FORM ELEVI specific tot coninutul fiierului ELEVI. Cererea SELECT * FORM ELEVI specific tot coninutul fiierului ELEVI. Cererea SELECT AVG (med) AS med_gen FROM ELEVI specific media general a elevilor. Cererea SELECT COUNT ( * ) AS nr_elevi FORM ELEVI specific Numrul elevilor din coal. Cererea SELECT COUNT (DISTINCT cls) FROM ELEVI specific Numrul claselor din coal. Clauzele INTO <destinaie> / TO FILE <fiier .DBF> specific destinaia rezultatelor: INTO determin forma de stocare a datelor; lipsa clauzei INTO permite afiarea ntr-o fereastr BROWSE a datelor. Clauza INTO este prioritar. TO se folosete cnd lipsete INTO; destinaia poate fi TO File, TO Screen, TO Printer. Exemple: SELECT cls, Nume FROM ELEVI TO Printer Scrierea elevilor claselor la imprimant. SELECT cod, nume FROM ELEVI INTO dbf AUXELEVI.DBF Se copiaz doar numele i codul elevilor ntr-o alt tabel (AUXELEVI.DBF). Clauza WHERE < condiie> permite introducerea legturilor ntre tabele precum i introducerea filtrelor. Condiia < condiie > impune sistemului FoxPro includerea unor nregistrri n rezultatele cererii (interogrii). Exemple: Afiarea elevilor cu medii ntre 8 i 10 din clasa 12A: SELECT nume, med FROM ELEVI WHERE med BETWEEN 8 AND 10 AND cls = 12A Afiarea elevilor cu media 10 i a numelor diriginilor lor: SELECT ELEVI . nume, ELEVI . cls, CLASE . diriginte FORM ELEVI, CLASE ; WHERE ELEVI . med = 10 AND ELEVI . cls = CLASE . cls Afiarea elevilor dirigintelui Dirig, introdus de la tastatur: ACCEPT Dai numele dirigintelui = TO Dirig SELECT ELEVI . nume, ELEVI . med FORM ELEVI, CLASE ; WHERE CLASE . cls = ELEVI . cls AND CLASE . Diriginte = Dirig Clauza GROUP BY < list chei > permite gruparea rezultatelor dup o list de cmpuri. Exemplu: Afiarea elevilor cu media 10, pentru fiecare clas, precum i numele diriginilor lor: SELECT ELEVI . cls, CLASE . Diriginte, ELEVI . Nume FROM ELEVI, CLASE ; WHERE ELEVI . cls = CLASE . cls AND ELEVI . med = 10 GROUP BY cls

77

Ctlin Tnase

FoxPro - Note de curs

Clauza HAVING < condiie > permite introducerea unor restricii n afiarea grupului. Exemplu: Determinarea numrului elevilor pe clase, dar numai de la profilul INFO: SELECT ELEVI . cls, COUNT ( * ) FROM ELEVI, CLASE ; WHERE ELEVI . cls = CLASE . cls ; GROUP BY cls HAVING CLASE . Profil = INFO Clauza ORDER BY < expresie de ordonare > specific expresia de ordonare, precum i sensul ordonrii (ASC / DESC). Exemplu: S se alctuiasc lista alfabetic a elevilor dirigintelui Popa: SELECT ELEVI . Nume FROM ELEVI, CLASE ; WHERE ELEVI . cls = CLASE . cls AND CLASE . Diriginte = Popa ; ORDER BY ELEVI . Nume ASC Comanda SQL INSERT adaug o nou nregistrare la sfritul unei tabele care conine valorile cmpurilor specificate. Comanda SQL INSERT are urmtoarele variante de sintax: 1 - INSERT INTO < nume fiier DBF > [ ( Nume cmp 1 [ , Nume cmp 2, ...] ) ] VALUES (Expresie 1 [ , Expresie 2, ...] ) Permite inserarea unor valori n cmpurile specificate ale tabelei. 2 - INSERT INTO < nume fiier DBF > FROM ARRAY < Nume Tablou > | FROM MEMVAR | FROM NAME < Nume Obiect > Permite inserarea coninutului unor elemente dintr-un Tablou, o Variabil de Memorie sau o proprietate a unui Obiect legat de (care face referire la) numele unui cmp din tabel. Comanda SQL UPDATE Actualizeaz nregistrrile unei tabele (Nume Tabel) cu noile valori. UPDATE < Nume Tabel > SET Nume Coloan 1 = Expresie 1 [ , Nume Coloan 2 = Expresie 2 ... ] [ FROM [ FORCE ] Nume Tabel [ [, ...] | [ JOIN [ Nume Tabel ] ] ] WHERE Condiie de Filtrare 1 [ AND | OR Condiie de Filtrare 2 ... ] Nume Coloan 1, 2, specific numele coloanelor din tabel ce urmeaz a se actualiza cu noile valori (Expresie 1, 2, ) Clauza FROM permite includerea unor surse de date multiple pentru operaia de actualizare cu UPDATE (specific una sau mai multe tabele ce conin date de actualizat). Dac este omis clauza FORCE, Visual FoxPro va ncerca optimizarea operaiei de actualizare. Clauza JOIN permite reunirea mai multor tabele secundare n operaia de actualizare. Clauza WHERE specific una sau mai multe condiii de filtrare pe care nregistrrile trebuie s le satisfac n operaia de actualizare. Comanda SQL DELETE Marcheaz nregistrrile pentru tergere (realizeaz o tergere LOGIC a nregistrrilor). nregistrrile marcate pentru tergere NU sunt terse FIZIC din tabel, dect dup aplicarea comenzii PACK. nregistrrile marcate pentru tergere pot fi recuperate prin aplicarea comenzii RECALL.

78

Ctlin Tnase

FoxPro - Note de curs

Sintaxa comenzii SQL DELETE: DELETE [ Nume Tabel ] FROM [FORCE] List Tabele [ [ , List Tabele... ] | [JOIN [ List Tabele] ] ] WHERE Condiie de Filtrare 1 [ AND | OR Condiie de Filtrare 2 ... ] Nume Tabel este numele tabelei n care se opereaz. Clauza FROM specific una sau mai multe liste de tabele incluse n operaia de tergere LOGIC a datelor. Clauza FORCE determin reunirea liste de tabele n ordinea n care apar ele n clauza FROM. Dac este omis clauza FORCE, Visual FoxPro va ncerca optimizarea operaiei de tergere. Clauza WHERE specific una sau mai multe condiii de filtrare pe care nregistrrile trebuie s le satisfac n operaia de tergere.

Query Designer (generatorul de interogri)


Pentru proiectarea (crearea) vizual sau modificarea interogrilor, se folosete Query Designer. Cnd Query Designer este activ, meniul Query i bara de instrumente Query Designer toolbar sunt vizibile. Query Designer (generatorul de interogri) este o interfa pentru realizarea interactiv a interogrilor (cererilor) SELECT SQL. Crearea unui fiier de cereri (a unei interogri) se poate face interactiv astfel: Varianta 1 - prin deschiderea ecranului de proiecte Query Designer (meniul File, New, Query) Varianta 2 - prin comanda CREATE / MODIFY QUERY < Nume Fiier QPR > n ambele cazuri, se va crea un fiier cu extensia .QPR, numit fiier de cereri i care va fi executat cu comanda DO < Nume Fiier QPR > CLASE Clasa Diriginte Liceu Exemplu: Fie tabela CLASE figurat alturat. Vom crea o 12A Albu Spiru interogare (cerere) pentru a afia dirigintele clasei 12C. 12B Popa Lazar Etape: 12C Enea Spiru 1 - Meniul File, New, Query, butonul Wizard 12D Dobre Lazar 2 n prima fereastr care apare, selectm Query Wizard, OK 3 Step 1 Select Fields: - n rubrica Databases and Tables, selectm tabela CLASE - n rubrica Available Fields, selectm Clasa i Diriginte (cele dou cmpuri selectate trebuie s apar n fereastra Selected fields, Next 4 Step 3 Filter Records: - Field CLASE . CLASA, Operator = Equal, scriu 12C n rubrica Value, Next 5 Step 4 Sort Records: - Din rubrica Available Fields, adugm (cu butonul Add), CLASE . Clasa - Next, Next, Finish 6 Dm nume interogrii, de exemplu, Dirig12C.QPR, alegem calea (folderul) destinaie, de exemplu C:\, Save 7 CLOSE ALL. ntr-o sesiune Fox ulterioar, File, Open, All files, Query deschidem (ncrcm) interogarea Dirig12C.QPR, acionm butonul Clasa Diriginte Run (figurat pe bara de butoane ca ! ), se deschide fereastr Query, 12C Enea care prezint efectele interogrii. Dac vom lansa comanda MODIFY QUERY c:\dirig12c.qpr se deschide o fereastr n care apare scris codul echivalent aciunilor noastrea anterioare:

79

Ctlin Tnase

FoxPro - Note de curs

SELECT CLASE.Clasa,CLASE.Diriginte; FROM C:\CLASE.DBF CLASE; WHERE (CLASE.CLASA='12C'); ORDER BY CLASE.Clasa,CLASE.Diriginte Cu alte cuvinte, acelai efect (aceeai interogare) se putea obine i scriind direct, n fereastra Command, codul SQL de mai sus, n care se observ modul de apelare a comenzii SQL SELECT. Evident, se prefer aciunile descrise prin paii anteriori (Query Wizard). S mai precizm c afiarea dirigintelui clasei 12 C se poate face i scriind dir ect (n fereastra Command) urmtoarea comand Fox: BROWSE FIELDS CLASA, Diriginte FOR CLASA = 12C

Editarea, compilarea i rularea unui program


Dup scrierea (redactarea sau editarea) unui program (folosind comanda MODIFY COMMAND, aa cum s-a artat la Modul de lucru program), nainte de lansarea n execuie (rularea) programului, se poate recurge la compilarea acestuia: din meniul Program, selectm opiunea Compile, se deschide o fereastr din care trebuie s alegem numele fiierului program (un fiier cu extensia .PRG) i calea (path = discul, directorul/subdirectorul n care se gsete fiierul program). Dac programul conine erori sintactice sau de alt natur, Fox va crea imediat un fiier-EROARE cu extensia .ERR, n care vor fi scrise toate mesajele de eroare. Fiierul-EROARE este un fiier text care poate fi citit (deschis, consultat) cu un editor de texte simplu (de exemplu, NotePad). Dac programul nu conine erori, el poate fi executat. Lansarea n execuie (rularea) programului se poate face astfel: A - scriem n fereastra de comenzi comanda DO Nume Program . PRG B - din meniul Program, selectm opiunea Do, se deschide o fereastr din care trebuie s alegem numele fiierului program (un fiier cu extensia .PRG) i calea (path = discul, directorul/subdirectorul n care se gsete fiierul program).

Instruciuni
Rezolvarea unor probleme de complexitate mai mare nu se poate face doar prin executarea succesiv a unor comenzi introduse (lansate) n fereastra Command. De aceea sunt necesare instruciuni structurate i funcii (standard sau utilizator) incluse n programe. Aa cum s-a precizat anterior, doar n programe se pot folosi comenzi multi-linie. Cu alte cuvinte, doar ntr-un program pot fi scrise instruciuni structurate pe mai multe linii. Mediul FoxPro pune la dispoziie toate facilitile specifice programrii structurate care permit: - executarea condiionat a unor instruciuni, n funcie de rezultatul evalurii unei expresii logice; - executarea de mai multe ori (n mod repetat) a unui grup de instruciuni. Desigur, la scrierea unui program intereseaz: 1 - Instruciunile de citire cu ajutorul cror se pot introduce date n program 2 - Instruciunile de prelucrare 3 - Instruciunile de scriere cu ajutorul cror se pot extrage date (rezultate intermediare sau finale) din program. Pentru operaiile de citire / scriere, se folosesc instruciunile simple ?, ??, ??? care au fost prezentate, dar i instruciunile INPUT, ACCEPT, ale cror semnificaii vor fi prezentate la capitolul Comenzi pentru variabile. Instruciunile de prelucrare pot fi: A - Instruciuni condiionale (IF, DO CASE) B - Instruciuni repetitive (DO WHILE, FOR, SCAN, LOOP, EXIT ) S le descriem, n continuare.

80

Ctlin Tnase

FoxPro - Note de curs

A - Instruciuni condiionale
Instruciunea IF ENDIF Are semnificaia cunoscut din programarea structurat: este o instruciune care presupune execuia condiionat a unei secvene de instruciuni sa a alteia, n funcie de starea unei condiii care poate fi adevrat sau fals. Sintaxa instruciunii:

IF < CONDIIE (expresie logic) > < secvena 1 > [ ELSE ] < secvena 2 > ENDIF
Etape: - Se testeaz CONDIIA - Dac este adevrat, se execut <secvena 1> - Dac este fals: - dac exist i clauza ELSE, se execut <secvena 2> - dac NU exist clauza ELSE, instruciunea IF se ncheie i se continu execuia programului cu urmtoarele instruciuni, dac acestea exist. CLASE Clasa Diriginte Exemplu: Considernd tabela CLASE (figurat alturat), urmtorul program 12A Albu va stabili dac numele unui diriginte introdus de la tastatur este dirigintele 12B Popa clasei 12B sau al altei clase. 12C Enea 12D Dobre Lansm comanda MODIFY COMMAND c:\program.prg n fereastra care se deschide, scriem programul urmtor: USE C:\CLASE.DBF ACCEPT 'Dati numele Dirigintelui = ' TO Dirig IF Dirig = 'Popa' ? Dirig, ' este diriginte la 12 B' ELSE ? Dirig, ' NU este diriginte la 12 B' ENDIF Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda DO c:\program.prg

81

Ctlin Tnase

FoxPro - Note de curs

Instruciunea DO CASE ENDCASE Aceast instruciune permite selectarea unei singure variante dintr-un grup de dou sau mai multe variante posibile. DO CASE implementeaz structura de control de tip selecie multipl. Sintaxa instruciunii:

DO CASE CASE

< expresie logic 1 > < secvena 1 > CASE < expresie logic 2 > < secvena 2 > CASE < expresie logic n > < secvena n >

[ OTHERWISE <secvena alternativ > ] ENDCASE


Din corpul seleciei, se va selecta spre executie acea secven pentru care expresia logic are valoarea TRUE. Execuia comenzii presupune urmtoarele etape: - Se testeaz (evalueaz) expresia logic 1 i a - dac are valoarea TRUE, se execut secvena 1; b - dac are valoare FALSE, se trece la urmtoarele expresii logice. - Dup gsirea primei expresii logice cu valoarea TRUE i executarea secvenei corespunztoare, se ncheie instruciunea DO CASE i se continu programul cu urmtoarele instruciuni. - Dac niciuna dintre expresiile logice testate NU are valoarea TRUE, atunci: a dac n corpul seleciei NU exist clauza OTHERWISE, instruciunea DO CASE se ncheie; b dac n corpul seleciei EXIST clauza OTHERWISE, se va executa secvena alternativ, dup care instruciunea DO CASE se ncheie. CLASE Clasa Exemplu: Considernd tabela CLASE (figurat alturat), urmtorul program 12A va preciza numele dirigintelui unei clase introduse de la tastatur. 12B Lansm comanda 12C MODIFY COMMAND c:\program.prg 12D n fereastra care se deschide, scriem programul urmtor: USE C:\CLASE.DBF ACCEPT 'Introduceti clasa = ' TO VarClasa LOCATE FOR Clasa = VarClasa DO CASE CASE VarClasa = '12A' ?'La 12 A, diriginte este ', Diriginte CASE VarClasa = '12B' ?'La 12 B, diriginte este ', Diriginte CASE VarClasa = '12C' ?'La 12 C, diriginte este ', Diriginte CASE VarClasa = '12D' ?'La 12 D, diriginte este ', Diriginte OTHERWISE ?'Clasa indicata nu apartine liceului' ENDCASE Diriginte Albu Popa Enea Dobre

82

Ctlin Tnase

FoxPro - Note de curs

Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda: DO c:\program.prg

B - Instruciuni repetitive
Permit executarea repetat a unei secvene de instruciuni. Instruciunea DO WHILE ENDDO Este folosit pentru bucle (repetiii) cu un numr nedefinit (necunoscut) de pai, repetarea unei secvene fiind dependent de starea unei condiii. Sintaxa instruciunii:

DO WHILE < CONDIIE (expresie logic) > < secven > [ EXIT ] [ LOOP ] ENDDO
Secvena se va executa att timp ct condiia este adevrat. Clauza EXIT determin ncheierea forat a instruciunii DO WHILE (ieirea din bucl) i continuarea cu prima instruciune de dup ENDDO, indiferent de starea condiiei (TRUE sau FALSE). Clauza LOOP determin: - saltul peste instruciunile dintre LOOP i ENDDO - reevaluarea Condiiei - repetarea secvenei, dac se mai respect Condiia. Exemplu: S calculm suma primelor 100 de numere naturale. Lansm comanda MODIFY COMMAND c:\program.prg n fereastra care se deschide, scriem programul urmtor: suma = 0 termen = 1 DO WHILE termen <= 100 suma = suma + termen ?'Termen = ', Termen, ' Suma = ', suma termen = termen + 1 ENDDO ?'Suma = ', Suma Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda: DO c:\program.prg

83

Ctlin Tnase

FoxPro - Note de curs

Instruciunea FOR ENDFOR Este folosit pentru bucle (repetiii) cu un numr cunoscut de pai, repetarea unei secvene fiind dependent de starea unei condiii. Sintaxa instruciunii:

FOR contor = Vi TO Vf < secvena > [ EXIT ] [ LOOP ] ENDFOR | NEXT

[ STEP pas ]

Contor, Vi i Vf sunt de acelai tip (Numeric). Contor este o variabil simpl care ia valori ntre Vi i Vf. Pasul implicit este = 1. n Fox, instruciunea FOR poate opera i pentru pai diferii de 1, situaie n care se va preciza valoarea pasului dup clauza STEP. Instruciunea FOR se ncheie atunci cnd Contorul depete Vf. Clauza EXIT determin ncheierea forat a instruciunii FOR (ieirea din bucl) i continuarea cu prima instruciune de dup ENDFOR, indiferent de valoarea Contorului. Clauza LOOP determin: - saltul peste instruciunile dintre LOOP i ENDFOR - majorarea Contorului - repetarea secvenei, dac se mai respect Condiia. Exemplu: S se calculeze suma primelor 7 numere naturale. Varianta 1:Lansm comanda: MODIFY COMMAND c:\program.prg n fereastra care se deschide, scriem programul urmtor: suma = 0 FOR i = 1 TO 100 suma = suma + i IF i = 7 EXIT ENDIF ENDFOR ?'Suma = ', Suma Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda: DO c:\program.prg Varianta 2:Lansm comanda: MODIFY COMMAND c:\program.prg n fereastra care se deschide, scriem programul urmtor: suma = 0 FOR i = 1 TO 100 IF i > 7 LOOP ENDIF suma = suma + i ENDFOR ? 'Suma = ', Suma Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda: DO c:\program.prg Se observ noua poziie a instruciunii suma = suma + i (DUPA instruciunea IF).

84

Ctlin Tnase

FoxPro - Note de curs

Instruciunea

SCAN ENDSCAN

Instruciunea SCAN parcurge tabela curent i execut < secvena de instruciuni > pentru fiecare nregistrare din domeniul indicat prin < domeniu > sau clauza FOR sau clauza WHILE. Clauzele LOOP i EXIT au aceleai semnificaiile precizate la instruciunea FOR ENDFOR. Sintaxa instruciunii:

SCAN [ < domeniu > ] < secvena de instruciuni > [ FOR condiie 1 (expresie logic 1) ] [ WHILE condiie 2 (expresie logic 2)] [ LOOP ] [ EXIT ] ENDSCAN
Exemplu: SCAN < instruciuni > ENDSCAN are acelai efect cu FOR i = 1 TO RECCOUNT ( ) GOTO i < instruciuni > ENDFOR Exemplu: Considernd tabela CLASE figurat alturat, s n locuim numele liceului SH cu Spiru Haret. CLASE Lansm comanda: Clasa Liceu MODIFY COMMAND c:\program.prg 12A SH n fereastra care se deschide, scriem programul urmtor: 12B Lazar SCAN 12C SH IF Liceu = 'SH' 12D SH REPLACE Liceu WITH "Spiru Haret" ENDIF ENDSCAN Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda: DO c:\program.prg

Funcii i proceduri Funcii standard


n capitolul Tipuri de date sunt prezentate cele mai importante funcii standard, specifice fiecrui tip de date.

Funcii i proceduri definite de utilizator


(definire, apel, transmiterea informaiilor prin parametri) Aplicaiile (programele) de dimensiuni mari presupun lansarea un program (subprogram) din interiorul altui program (subprogram), folosind comanda DO.

85

Ctlin Tnase

FoxPro - Note de curs

Pe msur ce crete dimensiunea unui program (crete numrul liniilor de program), testarea i depanarea programului devin din ce n ce mai dificile, datorit: - numrului mare de variabile - numrului mare de linii de program - numrului mare de instruciuni i a legturilor dintre ele. Apare ca necesar gruparea unor instruciuni n module separate, care rezolv a anumit parte a problemei, aceste module fiind independente ntre ele. Aceste module pot fi create astfel: Varianta A Modulele sunt create n interiorul programului (fiierului program) curent, formnd aa numitele proceduri i funcii definite de utilizator (UDF = User Defined Functions). Independena modulelor fa de restul programului i fa de celelalte module permite executarea n mod repetat a modulelor, prin apelarea lor lor n diverse puncte ale programului. De remarcat faptul c definiiile funciilor i procedurilor utilizator trebuie s se gseasc la SFRITUL programului curent, dup ultima instruciune a programului (spre deosebire de alte medii de programare Pascal, C, Fortran etc., la care definiiile de subprograme trebuie s apar la nceputul programului, n seciunea sa declarativ). O funcie definit de utilizator primete un set de parametri de la programul apelant i returneaz acestuia o singur valoare, ca rezultat al prelucrrii. Funcia poate intra n componena unei expresii de calcul (ca operand), n membrul drept al unei atribuiri sau ntr-o comand de afiare. O procedur definit de utilizator primete un set de parametri de la programul apelant, realizeaz anumite prelucrri, dup care se revine n programul apelant. Procedura NU poate intra n componena unei expresii de calcul (ca operand), n membrul drept al unei atribuiri sau ntr-o comand de afiare. Procedura se comport analog unei comenzi standard din FoxPro: va fi apelat pe o linie individual. La definirea unei funcii sau proceduri se stabilesc: - parametrii care se primesc spre prelucrare - instruciunile de prelucrare - rezultatele ce se vor extrage (transmite ctre programul apelant) dup prelucrare. O funcie se definete ntr-o comand FUNCTION, astfel: FUNCTION <Nume funcie > [ PARAMETERS ] Instruciuni de prelucrare RETURN <Nume funcie> [ ENDFUNC ] O procedur se definete ntr-o comand PROCEDURE, astfel: PROCEDURE <Nume procedur > [ PARAMETERS ] Instruciuni de prelucrare [ ENDPROC ] Se observ c nu sunt obligatorii clauzele ENDFUNC i ENDPROC, deoarece funciile i procedurile se definesc la sfritul programului curent, dup o definiie de funcie sau procedur nemaiurmnd nimic sau urmnd o alt funcie / procedur care se delimiteaz de instruciunile precedente prin antetul introdus de cuvintele cheie FUNCTION, respectiv PROCEDURE. La apelarea unei funcii sau proceduri, apare doar numele funciei sau procedurii, nsoit eventual de lista de parametri ce se vor transmite fucniei sau procedurii. Variabilele definite n interiorul funciei sau procedurii au caracter local (sunt necunoscute programului apelant). Apelul unei funcii se face prin numele acesteia urmat, ntre paranteze rotunde, de parametrii prin care se comunic cu funcia.

86

Ctlin Tnase

FoxPro - Note de curs

O procedur se execut (se apeleaz) prin comanda DO urmat de numele procedurii. Parametrii prin care programul comunic cu procedura se introduc n lista clauzei WITH. Exemple: n programul curent, vom defini, la sfritul programului: - o funcie FACTORIAL, pe care o putem apela de cte ori este necesar, - o procedur MESAJE. Lansm comanda: MODIFY COMMAND c:\program.prg n fereastra care se deschide, scriem programul urmtor: ? ? ? ? 'FACTORIAL 'Factorial 'Factorial 'Factorial (4) (4) (6) (8) = = = = ', ', ', ', FACTORIAL FACTORIAL FACTORIAL FACTORIAL (4) (4) (6) (8)

n = 4 k = 3 Combinari = FACTORIAL (n) / (FACTORIAL (k) * FACTORIAL (n-k) ) ?'Combinari de ',n,' luate cate ', k,' = ', Combinari DO MESAJE FUNCTION FACTORIAL PARAMETERS n f = 1 FOR i = 1 TO n f = f * i ENDFOR FACTORIAL = f RETURN FACTORIAL ENDFUNC PROCEDURE MESAJE ?'Mesaj 1' ?'Mesaj 2' ?'........' ?'Mesaj n' ENDPROC Salvm programul cu CTRL + W (fereastra de editare a programului se nchide). Lansm n execuie programul cu comanda: DO c:\program.prg

Varianta B Modulele sunt create sub forma unor fiiere cu extensia .PRG, salvate pe disc
alturi de programul principal. Aceste fiiere sunt lansate n execui cu comanda DO, n mod similar cu lansarea n execuie a programului principal, i se comport precum comenzile predefinite ale mediului Fox.

87

Ctlin Tnase

FoxPro - Note de curs

Mediul de programare Microsoft Visual FoxPro Elemente de Programare Orientat spre Obiecte (POO)
Un obiect este un element (o fereastr, un buton radio, un comutator etc.) pentru care se pot defini: - Proprieti - Evenimente care pot aciona asupra obiectului - Metode - operaii (funcii) asociate obiectului sau aciuni de rspuns la evenimentele care apar. n Windows, principalul obiect (element de interfa) este fereastra, care poate conine alte obiecte (comutatoare, liste, butoane de comand etc.). O Proprietate = un atribut al obiectului i stabilete caracteristicile de aspect sau de comportament pentru obiectul respectiv. Un Eveniment = o activitate iniiat de S.O. (eveniment intern) sau de utilizator (eveniment extern) la care obiectul tie s reacioneze. O Metod = este o procedur asociat obiectului. Deosebirea dintre metode i evenimente: metodele pot exista i pot fi apelate indiferent de apariia evenimentelor. Evenimentele pot avea asociate anumite proceduri, aciuni care se vor executa ori de cte ori se produce evenimentul respectiv. Metodele sunt asociate i legate de obiectele de care aparin. De exemplu, o metod asociat pentru selectarea unei ferestre poate schimba culoarea de fond sau poziia acesteia. Prin proprieti, obiectele pot s difere ntre ele. Exemplu: dou butoane pot avea dimensiuni diferite, poziii diferite pe ecran, alte texte explicative etc., dar se comport la fel (rspund la aceleai evenimente prin aceleai aciuni). Spunem c aparin aceleiai clase.

Proiecte (Project Manager)


Crearea unui Proiect n Visual Fox Gestiunea fiierelor i directoarelor cu care se opereaz ntr-o aplicaie Fox complex este o sarcin dificil. Pentru a le gestiona i pentru a crea un proiect plecnd de la aceste fiiere (componente), se folosete utilitarul Project Builder, care se lanseaz astfel: Varianta 1 - Scriem comanda: CREATE PROJECT < Nume Fiierului Proiect . PJX > Varianta 2 - Accesm meniul File, New, Project, New File, scriem numele fiierului i extensia .PJX, Enter. Se va afia fereastra de administrare a proiectului (Project Manager), n care, n tab-ul All, apar toate componentele proiectului (Data, Documents, Class Librairies, Code, Other) i subcomponentele lor (Database, Free Table, Queries ). Project Manager afieaz un arbore cu directoare standard care conin fiiere de diverse naturi, grupate dup tipuri. Project Builder nu creeaz pe disc aceast structur de directoare, ci afieaz o grupare fcut dup tipul fiierelor, n cadrul proiectului. Pentru a regsi uor fiierele asociate unei aplicaii, este preferabil s ne crem noi, pe disc, o structur de directori asemntoare celei afiate de Project Builder. Dnd click pe un obiect al

88

Ctlin Tnase

FoxPro - Note de curs

arborelui, se vor afia, n partea inferioar a ferestrei: o scurt descriere a fiierelor, n rubrica Description (colul stnga-jos); calea n care se gsesc fiierele, n rubrica Path (colul stnga-jos). Aceste directoare conin: Data baze de date (DBC), tabele (DBF), interogri (QPR) Documents formulare (SCX), rapoarte (FRX), etichete (LBX) Class biblioteci de clase (VCX) Code programe i proceduri (PRG, FXP) Other meniuri (.MPX), fiiere auxiliare (BMP). Folosind Project Builder (Project Manager), se poate crea o aplicaie executabil i, de asemenea, se poate lucra uor cu fiierele aplicaiei. Crearea componentelor proiectului: - Tabelele (Data, Free Tables) - Formularele (Documents, Forms) - Programele (Code, Programs) Varianta 1 - prin fereastra de comenzi (de exemplu, cu comenzile CREATE INTREBARI.DBF sau Modify Command Test1.PRG) sau Varianta 2 - direct din Project Manager (acionnd butonul New). O component existent deja pe disc (Tabel, Formular) se poate aduga la proiect acionnd butonul Add, apoi cutnd componenta (fiierul) pe disc. ATENIE !!! Dup crearea unui formular cu Form Wizard, NU VOM REDENUMI NICIUN TABEL !!!!! Dac redenumim, apare mesajul ALIAS .. NOT FOUND. Acelai mesaj apare i dac fluxul de control al programului este INCORECT. De asemenea, nu se va face o referire la o tabel (prin comenzi USE, SELECT) din codul unui FORMULAR (codul asociat unui buton dintr-un formular, de exemplu). Invers este permis: un FORMULAR poate fi lansat dintr-un program n care pot s apar i referiri la o tabel. Dup modificri fcute n structura proiectului, acionm butonul Build, Rebuild Project. Dac apare mesajul fisierul .PJT missing or invalid, crem un nou proiect cu aceleai obiecte. n caz contrar, chiar dac aparent proiectul este funcional, nu se poate crea fiierul EXE. Crearea unui fiier executabil (EXE File), plecnd de la un Proiect Visual Fox

1 - Se stabilesc toate componentele proiectului : Se adaug Programele (fiierele . PRG), Tabelele (fiierele .DBF), Formularele (fiierele .SCX),

89

Ctlin Tnase

FoxPro - Note de curs

2 - Se stabilete programul principal (MAIN.PRG): n Project Manager, zona Programs, clickdreapta pe unul dintre programele din list (de ex., MAIN.PRG), Set Main. n caz contrar, executabilul generat NU AFIEAZ NIMIC. Exist o tentativ de lansare i att. 3 - Dac programul principal (MAIN.PRG) conine un formular (FORM), dup un apel de FORM, programul trebuie s conin comanda READ EVENTS (comanda READ EVENTS Start event processing - lanseaz procesarea evenimentelor). Exemplu: DO FORM MAIN READ EVENTS Ultima etap a proiectului (de exemplu, codul asociat butonului Exit, cu care se prsete programul) trebuie s conin ThisForm.Release CLEAR EVENTS QUIT && nchidere/prsire formular && Parasire Fox

CLEAR EVENTS oprete toate evenimentele pornite cu READ EVENTS. Programul va continua cu ceea ce este dup READ EVENTS. 4 - Se acioneaz butonul Build, click pe Build, apare fereastra Build Options, n zona Build Action selectm Build Executable (n Visual Fox 6.0) / Win 32 executable (n Visual Fox 9.0), se d numele fiierului executabil i calea n care va fi salvat (de ex., proj1.EXE va fi salvat n C:\ ). OBSERVAII 1 - ATENIE la Ierarhia componentelor programului i la stabilirea cu precizie a etapelor de execuie. Din programul principal MAIN sunt lansate celelalte etapele de execuie. 2 - Dac se INCLUD tabele n proiect, atunci proiectul poate fi rulat independent de tabele, din orice folder. Dar, dac o tabel este INCLUS, apare mesajul Aceast tabel este Read-Only i nu poate fi editat, adic NU SE POATE SCRIE / TERGE / MODIFICA nimic din tabel (DEZAVANTAJ). Recurgem la aceast variant (tabel INCLUS n proiect), dac NU este necesar modificarea unei tabele (proiecte doar de consultare a tabelelor situaie ntlnit la afiarea rezultatelor unui examen). 3 - Dac se EXCLUD tabele din proiect, atunci proiectul NU poate fi rulat independent de tabele, din orice folder. Tabelele trebuie s se gseasc N ACELAI FOLDER cu fiierul EXECUTABIL. Preferm aceast variant, dac dorim s SCRIEM / TERGEM / MODIFICM nregistrri. Tabelele care sunt EXCLUSE apar n Project Manager ca n figura alturat. Vor fi incluse toate celelalte componente n proiect. n folderul proiectului se vor gsi: executabilul i tabelele (eventual fiierele Proiect1.pjx i Proiect1.PJT), pentru eventuale modificri. Se construiete un ablon al proiectului i se schimb doar tabelele (bazele de date) cu care opereaz. - Pentru a INCLUDE / EXCLUDE tabele n proiect, n fereastra Project Manager, click-dreapta pe tabel, Include / Exclude. - Pentru a afla detalii despre obiectele proiectului: meniul Project, Project Info (sau click-dreapta pe oricare dintre componentele proiectului (Forms, Documents, ), Project Info. Componentele care nu sunt incluse n proiect sunt NEBIFATE.

90

Ctlin Tnase

FoxPro - Note de curs

Adugarea unui Icon la proiect La crearea unui fiier executabil (.EXE), se va ataa icon-ul nou, care va nlocui icon-ul creat iniial de Fox. n fereastra Project Information (meniul Project, Project Info), tab-ul Project, se bifeaz Attach Icon, se execut click pe butonul Icon i se d calea ctre fiierul-Icon (un fiier cu extensia .ICO, creat de utilizator cu un soft special de proiectare a icon-urilor). n urma acestor aciuni, fiierul proj1.EXE va avea iconul asociat de noi, n loc de iconul implicit:

Formulare (Form Designer Generatorul de formulare/machete ecran)


Formularele sunt elemente de interfa cu una sau mai multe ferestre care permit introducerea articolelor ntr-o tabel, cu ajutorul unui ablon afiat pe ecran, dar i vizualizarea, navigarea ntre articolele deja introduse, precum i editarea articolelor din tabel. Fox realizeaz o legtur (nlnuire) ntre formular i tabel: informaia tastat n formular va fi memorat n tabela asociat formularului. Formularele pot afia cte un singur articol odat, astfel c introducerea de valori n cmpurile articolului afiat va fi foarte simpl i sigur. Formularele pot afia articolele ntr-o ordine definit de utilizator i permit selectarea numai a articolelor care ndeplinesc anumite criterii. Se poate folosi un singur formular pentru a introduce articole simultan n mai multe tabele. Formularele au o bar de instrumente prevzut cu butoane de comand, pentru parcurgerea articolelor deja introduse, precum i un buton pentru introducerea unui articol nou. Pe bar se afieaz numrul articolului actual, precum i numrul total de articole. CLASE Liceu Clasa Spiru 12B S considerm tabelul CLASE.DBF figurat Spiru 12C alturat. Pentru crearea unui formular, procedm Spiru 12A astfel: Varianta 1 n fereastra de comenzi (Command), scriem comanda: Crearea unui formular. Caracteristici CREATE FORM C:\FormCLASE.SCX Din comanda de mai sus rezult c formularul se va regsi pe disc sub forma unui fiier cu extensia .SCX. Numele FormCLASE sugereaz un formular asociat tabelei CLASE. Varianta 2 Pentru a evita fereastra de comenzi i, implicit, eventualele erori de scriere (sintax), procedm astfel: 1 - Meniul File, New, Form 2 - A - Dac se acioneaz butonul New File: 2-A-1 - Se deschide fereastra Form Designer (fereastra de proiectare a formularului) care permite construirea unui formular de la zero, conform preferinelor utilizatorului, incluznd pe suprafaa formularului obiectele puse la dispoziie de butoanele de pe bara Form Controls (este o variant de lucru mai dificil). 2-A-2 Pe bara superioar de meniuri apare meniul Form, din care selectm opiunea Quick Form. Acelai efect se obine i dac se acioneaz butonul Form Builder de pe bara de instrumente Form Designer (vezi figura urmtoare). Diriginte Barbu Cernea Albu Elev Bran Cehan Alexa

91

Ctlin Tnase

FoxPro - Note de curs

2 - B - Dac se acioneaz butonul Wizard, se construiete un formular parcurgnd urmtorii pai: 2-B-1 - Din fereastra Wizard Selection, alegem Form Wizard. 2-B-2 - n fereastra Form Wizard Step 1 Select Fields, - din zona Databases and Tables, selectm tabela care va fi asociat formularului (de exemplu, CLASE.DBF). De menionat c pot fi asociate formularului mai multe tabele. - din zona Available Fields, selectm cmpurile care vor fi prezente n formular (de exemplu, Clasa, Diriginte, Elev) 2-B-3 - n fereastra Form Wizard Step 2 Choose Form Style, alegem un tip de formular 2-B-4 - n fereastra Form Wizard Step 3 Sort Records alegem cmpul dup care dorim s se efectueze o eventual sortare a datelor (de exemplu, Clasa) 2-B-5 - n fereastra Form Wizard Step 4 Finish, stabilim Numele formularului (de exemplu, Formular culegere date). 2-B-6 - Dup acionarea butonului Finish, n fereastra Save As, stabilim numele fiierului n care va fi salvat formularul pe disc (un fiier cu extensia .SCX, de exemplu, FormularCLASE.SCX). Apoi: 3 - n Project Manager, accesm seciunea Documents, Forms, Add, adugm formularul FormularCLASE n proiect 4 - n Project Manager, accesm seciunea Documents, Forms, Click pe FormularCLASE, Modify, se deschide fereastra Form Designer (fereastra de proiectare a formularului), efectum eventuale modificri. 5 - n fereastra Properties, care se deschide alturi de formular, stabilim proprietile asociate formularului. Apoi salvm configuraia curent a formularului (butonul Save sau meniul File, Save). 6 - Pentru a aduga i alte cmpuri pe suprafaa formularului, tragem spre dreapta fereastra Form Designer (n care este deschis formularul), pentru a vedea i fereastra Project Manager, apoi: - n Project Manager, din zona Data, deschidem cu click pe ( + ) Free Tables - deschidem cu click pe ( + ) tabela din care dorim s includem cmpuri n formular - tragem (drag and drop) pe suprafaa formularului cmpurile dorite. 7 - Salvm formularul (cu butonul Save). ATENIE ! Pe suprafaa formularului trebuie s existe cel puin un cmp din tabela CLASE, altfel, la lansarea n execuie a formularului, se va semnala mesaj de eroare.

Lansarea n execuie a formularului


Varianta A - n fereastra de comenzi (Command) scriem: DO FORM < NumeFiierFormular . SCX >. Varianta B - Meniul Program, Do, se stabilesc calea i numele formularului (un fiier cu extensia .SCX) Varianta C - n Project Manager, click pe formular, Run.

Utilizarea controalelor (butoane de comand, butoane radio, butoane de tip caset cu incrementare, casete de validare, casete de text, casete de editare, imagini, liste etc.)
Pentru proiectarea / modificarea unui formular, Visual Fox ofer urmtoarele instrumente: 1 - Fereastra Project Manager, care faciliteaz accesul la un formular inclus n proiect 2 - Fereastra de proiectare a formularului (Form Designer), pe suprafaa creia este plasat formularul n curs de proiectare / modificare. Pe suprafaa formularului vor fi plasate controalele necesare. 3 - Bara de instrumente (Form Designer). Semnificaiile butoanelor sale sunt indicate n figur. Afiarea/ascunderea acestei bare se programeaz din meniul View, Toolbars, Form Designer. 4 - Fereastra de proprieti Properties.

92

Ctlin Tnase

FoxPro - Note de curs

Properties Window

Code Window

Color Palette Toolbar

Set Tab Order Data Environment Form Controls Toolbar Layout Toolbar

Auto Format Form Builder

n figura urmtoare este prezentat mediul de lucru pentru proiectarea unui formular. Se observ

n partea dreapt fereastra de proprieti (Properties).

Obiecte de control sau de interfa (Controale)


Controalele sunt puse la dispoziie de bara Form Controls (afiarea/ascunderea barei se programeaz din meniul View, Toolbars, Form Controls). Select Object
View Classes Command Button

Image Timer

Shape Container
Separator

Command Group
Page Frame

Label Text Box Edit Box

Option Group

Grid

Line

Button Lock

Check Box Combo Box

Spinner List Box

ActiveX ActiveX

Builder Lock

Hyperlink

93

Ctlin Tnase

FoxPro - Note de curs

Select Object Label EditBox CommandGroup CheckBox ListBox Grid Timer


ActiveX (OLE Container) Control

View Classes TextBox CommandButton OptionButton ComboBox Spinner Image PageFrame


ActiveX (OLEBound) Control

Line Container HyperLink BuilderLock


Semnificaiile butoanelor (controalelor)

Chenare, Cercuri, Elipse Separator ButtonLock

Select Object Permite selectarea mai multor obiecte de control: click pe butonul Select Object, apoi selectm mai multe obiecte alturate ntr-o caset (box) trasat cu mouse-ul n jurul obiectelor. Label Obiect de tip mesaj. EditBox Zon de editare Permite introducerea textelor lungi. CommandGroup Grup de butoane de comand (Declanator) CheckBox Caset de validare (Comutator) ListBox Liste deschise - Afieaz mai multe elemente dintre care se poate selecta doar unul. Grid Grile Sunt obiecte de tip container. Se folosesc pentru introducerea mai comod a articolelor ntr-o tabel. Timer Ceas Permite msurarea intervalelor de timp la care trebuie executat o anumit aciune (de exemplu, afiarea unor mesaje care solicit alegerea unei opiuni). OLE Container Control Deschide fereastra de dialog Insert Object, pentru crearea/includerea unui obiect. Line Trasare linie. Container Obiect care poate include alte obiecte. HyperLink Creeaz un obiect hiperlink (obiect cu capabiliti de navigare) View Classes Permite accesul la bibliotecile de clase. TextBox Caset de text, pentru texte explicative. CommandButton - Buton de comand (Declanator) OptionButton Buton Radio (Buton de Opiune) Se folosete pentru selectarea rapid a unei singure valori dintre cele afiate. ComboBox - Liste nchise prezint o fereastr cu un singur element i o bar de derulare. La deschidere, se afieaz toat lista i se permite selectarea unei valori. Spinner Contor Sunt cmpuri de editare a valorilor numerice, cu verificarea apartenenei la un interval. Creterea sau scderea valorii se face dnd click pe butoanele corespunztoare. Trebuie fixate valorile maxim (proprietatea Spinner High Value) i minim (proprietatea Spinner Low Value) pe care le poate lua contorul. Pasul de variaie se fixeaz prin Increment. Control Source specific numele variabilei sau al cmpului unde este memorat valoarea obiectului, dup pierderea focusului (intei). Image Permite importarea unei imagini dintr-un fiier grafic (. BMP).

94

Ctlin Tnase

FoxPro - Note de curs

PageFrame Set de pagini Asigur centralizarea informaiilor n acelai formular i sistematizarea lor pe pagini distincte. OLE Bound Control Permite afiarea unui obiect OLE (Excel, Word) ntr-un cmp oarecare sau tabel. Chenare, Cercuri, Elipse Trasare obiecte grafice. Separator Creeaz un obiect separator care introduce spaii ntre controale. BuilderLock comut n modul de generare, apelnd sau ieind din utilitarul Builder. Trebuie spus c putem proiecta manual fiecare obiect de control, plasndu-l pe suprafaa de lucru, conturnd dimensiunea i fixndu-i proprietile n fereastra Properties. O alt modalitate este s folosim un asistent (numit Builder) care prezint ecrane de dialog pentru construirea rapid a obiectului. Acest lucru nu este posibil chiar pentru toate obiectele, dar pentru majoritatea se poate. ButtonLock permite adugarea de instane multiple ale aceluiai obiect e control. Manevra obinuit pentru crearea unui obiect de control este selectarea butonului corespunztor de pe bara Form Controls i executarea manevrei drag & drop pe suprafaa de lucru a formularului. Dac dorim plasarea aceluiai obiect de control, se poate folosi ButtonLock: selectm ButtonLock, apoi selectm butonul dorit (CheckBox, de exemplu). Se execut drag & drop pentru o instan, click pentru a doua etc.

Fixarea proprietilor
Pentru fiecare obiect plasat pe formular, se pot observa caracteristici n fereastra Properties (o fereastr comun tuturor obiectelor). Fereastra Properties permite: vizualizarea proprietilor introducerea codului pentru metode i evenimente. Fereastra Properties se poate deschide: - cu click-dreapta pe suprafaa ferestrei Form Designer, Properties. - cu click-dreapta pe suprafaa oricrui control din fereastra Form Designer, Properties. - acionnd butonul Properties Window de pe Toolbar. - acionnd butonul Properties Window de pe bara de instrumente Form Designer. Fereastra Properties afieaz pe prima linie numele obiectului curent, pentru care se pot stabili proprieti diferite de cele existente n fereastr. Deschiznd lista ascuns, se va afia ierarhia de obiecte din formularul curent. Fereastra Properties are: 1 - mai multe tab-uri: - All - afiarea tuturor proprietilor; - Data - afiarea proprietilor legate de date; - Method afiarea metodelor; - Layout proprieti legate de aspect (culori, font); - Other alte proprieti. 2 - o zon de afiare cu dou coloane: - prima pentru numele caracteristicii, - a doua pentru valoarea sa.

95

Ctlin Tnase

FoxPro - Note de curs

Iat cteva proprieti i metode mai des folosite (din tab-ul All): Closable, Movable, MaxButton, MinButton, ControlBox Dac sunt fixate pe valoarea T (TRUE), dau ferestrei proprietile de a fi nchis, mutat, de a avea butoane de maximizare, minimizare i meniul standard (din colul stnga-sus). Destroy - este o metod apelat la eliminarea formularului de pe ecran. Init - este o metod apelat la crearea formularului. (la rulare). Ea preia parametrii de rulare ai formularului trimii acestuia de programul apelant. Deci, prima linie a acestei proceduri va conine comanda Parameters. Load - este o metod apelat imediat dup crearea formularului i poate conine comenzi de deschidere a unor tabele sau de iniializare a unor variabile. WindowType specific modul de rulare a unui formular. - Valoarea 0 (zero) indic un formular normal (nemodal), care poate preda controlul altor ferestre deschise simultan pe ecran - Valoarea 1 indic un formular modal, care nu permite trecerea la alt formular. Forma modal se folosete atunci cnd exist un program care transmite un parametru formularului, l deschide i ateapt un rspuns la terminarea lucrului cu acesta. Comunicarea programului cu formularul se face prin parametri, dar numai dac fereastra este de tip modal. Unload este o metod apelat la distrugerea obiectului din memorie; este ultima metod.

Stabilirea ierarhizrii obiectelor din formular


Stabilirea ordinii (ierarhiei) obiectelor de control din formular se face cu butonul Set Tab Order de pe bara Form Designer (sau din meniul View, opiunea Tab Order, Assign Interactivelly sau Assign by List). Dup apsarea butonului Tab Order, fiecare obiect va avea ataat un numr de ordine. Schimbarea acestuia se face dnd click pe obiecte, n ordinea dorit, noul numr de ordine fiind figurat cu rou.

Stabilirea rspunsului la evenimente


Dac programul principal (MAIN.PRG) conine apelul la un formular (FORM), dup un apel de FORM, programul trebuie s conin comanda READ EVENTS (comanda READ EVENTS Start event processing - lanseaz procesarea evenimentelor). Programul va continua cu ceea ce urmeaz dup READ EVENTS. Exemplu: DO FORM NumeFormular && apelarea/lansarea formularului READ EVENTS Ultima etap a proiectului presupune prsirea programului (proiectului), prin acionarea butonului Exit. De aceea, se impune ca butonului Exit s i se asocieze codul: ThisForm.Release CLEAR EVENTS QUIT && nchidere/prsire formular && Parasire Fox

Comanda CLEAR EVENTS oprete toate evenimentele pornite cu READ EVENTS.

96

Ctlin Tnase

FoxPro - Note de curs

Proprieti i metode generale ale obiectelor de interfa Name specific numele obiectului Top, Left, Width, Height stabilesc poziia i dimensiunile obiectului Caption d titlu obiectului AutoCenter plasare automat n centrul ecranului Show vizualizarea pe ecran Hide ascunderea obiectului Activate metod: atunci cnd se poziioneaz cursorul pe obiect Deactivate metod: atunci cnd se pred controlul altui obiect GotFocus evenimentul prin care obiectul primete controlul (devine activ) LostFocus evenimentul prin care obiectul pierde controlul SetFocus evenimentul de fixare a controlului ctre un anumit obiect.

Rapoarte (Report Designer)


Rapoartele (sau situaiile finale) servesc la extragerea datelor din tabele i/sau interogri pentru tiprirea lor la imprimant sau afiarea lor pe ecranul monitorului. Articolele unui raport pot fi grupate i sortate. Rapoartele pot conine anteturi i subsoluri de pagin (afiate la nceputul i la sfritul fiecrei pagini, n care pot fi introduse; de exemplu, nume de cmpuri, numrul paginii curente) precum i un antet i un subsol de raport (afiate pe prima, respectiv ultima pagin a raportului, n care se pot include, de exemplu, sigla unei instituii, un rezumat al tuturor datelor, ca sum a volorilor dintr-un cmp specificat). Crearea / modificarea (editarea) unui raport Varianta 1 n fereastra de comenzi (Command), scriem comanda: CREATE / MODIFY REPORT < NumeFiierRaport . FRX > Varianta 2 Meniul File, New, Report, 2-A - Dac se acioneaz butonul New File: 2-A-1 - Se deschide fereastra Report Designer (fereastra de proiectare a raportului), se genereaz un raport vid care se construiete de la zero (o variant mai dificil). 2-A-2 Dup ce se genereaz un raport vid, pe bara de meniuri apare meniul Report, din care selectm opiunea Quick Report, se stabilete aspectul raportului (Field Layout), se definitiveaz raportul, se salveaz sub forma unui fiier cu extensia .FRX. 2-B - Dac se acioneaz butonul Wizard, se construiete un raport parcurgnd urmtorii pai: 2-B-1 - Din fereastra Wizard Selection, alegem Report Wizard, 2-B-2 n fereastra Report Wizard Step 1 Select Fields, - din zona Databases and Tables, selectm tabela care va fi asociat raportului (de exemplu, CLASE.DBF). De menionat c pot fi asociate raportului mai multe tabele. - din zona Available Fields, selectm cmpurile care vor fi prezente n raport (de exemplu, Clasa, Diriginte, Elev). 2-B-3 n fereastra Report Wizard Step 2 Group Records, selectm un cmp (de exemplu, Clasa), dup care se va face gruparea datelor. 2-B-4 - n fereastra Report Wizard Step 3 Choose Report Style, alegem un tip de raport. 2-B-5 - n fereastra Report Wizard Step 4 Define Report Layout alegem orientarea paginii raportului (Portrait sau Landscape). 2-B-6 - n fereastra Report Wizard Step 5 Sort Records, selectm un cmp dup care se va face sortarea (de exemplu, Diriginte) 2-B-7 - n fereastra Report Wizard Step 6 Finish, stabilim Titlul raportului (de exemplu, Situatia elevilor pe CLASE).

97

Ctlin Tnase

FoxPro - Note de curs

2-B-8 - Dup acionarea butonului Finish, n fereastra Save As, stabilim numele fiierului sub care va fi salvat raportul pe disc (un fiier cu extensia .FRX, de exemplu, RaportCLASE . FRX). Apoi: 3 - n Project Manager, accesm seciunea Documents, Reports, Add, adugm raportul RaportCLASE n proiect. 4 - n Project Manager, accesm seciunea Documents, Reports, Click pe RaportCLASE, Modify, se deschide fereastra Report Designer (fereastra de proiectare a raportului), efectum eventuale modificri. 5 - n fereastra Properties care se deschide alturi de raport, stabilim proprietile asociate raportului. Apoi salvm configuraia curent a raportului (butonul Save sau meniul File, Save). 6 - Pentru a aduga i alte cmpuri pe suprafaa raportului, tragem spre dreapta fereastra Report Designer (n care este deschis raportul), pentru a vedea i fereastra Project Manager, apoi: - n Project Manager, din zona Data, deschidem cu click pe ( + ) Free Tables - deschidem cu click pe ( + ) tabela din care dorim s includem cmpuri n raport - tragem (prin drag and drop) pe suprafaa raportului cmpurile dorite. 7 - Salvm raportul (cu butonul Save sau meniul File, Save). Raportul poate fi vizualizat anticipat (previzualizat), nainte de tiprirea la imprimant, astfel: - Click-dreapta pe suprafaa raportului, Print Preview - n fereastra Project Manager, click pe numele raportului, butonul Preview - Meniul View, Preview - Click pe butonul Print Preview de pe Toolbar.

Etichete (Label Designer)


Etichetele (Labels) reprezint o alt form de afiare a datelor. Etichetele pot avea declarat o dimensiune ca numr de linii i coloane, pot fi afiate cte una sau mai multe pe limea hrtiei. Iat cteva situaii n care se apeleaz la etichete: - crearea crilor de vizit; - proiectarea fluturailor cu informaii privind salariul fiecrei persoane dintr-o instituie; - scrierea adreselor pe coletelor potale; - scrierea etichetelor unor produse (de exemplu, medicamente) expuse vnzrii etc. Etichetele sunt o form special de raport i pot fi proiectate cu ajutorul aplicaiei (utilitarului) Label Designer (Generatorul de etichete), un utilitar asemntor cu Report Designer, care ofer aceleai instrumente de lucru (meniu, fereastr de proiectare). Se deosebete de Report Designer prin mrimea paginii folosite: - Report Designer seteaz o pagin ntreag, - Label Designer seteaz o mrime adaptat ncadrrii informaiilor din etichet. Lansarea (apelarea) generatorului de etichete (Label Designer) Varianta 1 - n fereastra de comenzi (Command) scriem comanda: CREATE / MODIFY LABEL < Nume fiier eticheta . LBX > Se deschide un ecran de proiectare asemntor celui de la generatorul de rapoarte (doar dimensiunile difer). Varianta 2 Meniul File, New, Label 2-A Acionnd butonul New File, se deschide aceeai fereastr de proiectare ca n varianta 1. 2-B Acionnd butonul Wizard, se parcurg paii: 2-B-1 n fereastra Label Wizard Step 1 Select Tables: - din zona Databases and Tables, selectm tabela care va fi asociat etichetei (de exemplu, CLASE.DBF). De menionat c pot fi asociate etichetei mai multe tabele. 2-B-2 n fereastra Label Wizard Step 2 Choose Label Type: - stabilim unitatea de msur (English sau Metric) - alegem un tip de etichet 2-B-3 n fereastra Label Wizard Step 3 Define Layout: - din rubrica Available Fields, selectm cmpurile care se vor plasa pe etichet

98

Ctlin Tnase

FoxPro - Note de curs

- n caseta Text se poate introduce un text suplimentar (explicativ) care se va intercala ntre cmpurile tabelei 2-B-4 n fereastra Label Wizard Step 4 Sort Records stabilim criteriul (cmpul) dup care vor fi sortate etichetele (de exemplu, Nume) 2-B-5 n fereastra Label Wizard Step 5 Finish, acionnd butonul Preview, previzualizm eticheta, 2-B-6 Dup acionarea butonului Finish, n fereastra Save As, stabilim numele fiierului sub care va fi salvat eticheta pe disc (un fiier cu extensia .LBX, de exemplu, EticheteELEVI . LBX).

Meniuri (Menu Builder)


Meniul este un element de interfa necesar unei aplicaii informatice. Meniul este un ansamblu de opiuni pus la dispoziia utilizatorului. Prin meniu se controleaz ntreaga aplicaie. Meniul principal este plasat pe prima linie a ecranului, peste sau n completarea meniului sistem (meniul de control sau standard, din colul stnga-sus). Este de preferat ca orice operaie s se poat declana de ctre utilizator prin alegerea ei dintre opiunile meniului. Meniurile pot fi: - grafice sau de tip text; - orizontale sau verticale. Lansarea (apelarea) generatorului de meniuri (Menu Builder) Varianta 1 - n fereastra de comenzi (Command) scriem comanda: CREATE / MODIFY MENU < Nume fiier Meniu . MNX >

Varianta 2 Meniul File, New, Menu, butonul New File n ambele variante, se procedeaz dup cum urmeaz: A - Se deschide fereastra New Menu din care se poate alege un tip de meniu, acionnd unul dintre butoanele: - Menu pentru un meniu Clasic - plasat pe prima linie a ecranului, peste sau n completarea meniului sistem - Shortcut pentru un meniu de dimensiuni mai mici, plasat n fereastra utilizatorului. B Se deschide fereastra de proiectare a meniului (Menu Designer), n care vom indica: - Numele opiunilor - Operaiile declanate de alegerea acestora - Caracteristicile globale ale meniului. Pe baza specificrilor fcute n fereastra Menu Builder, se va genera un fiier (Nume fiier Meniu . MNX) care, prin lansarea n execuie, va activa meniul. La lansarea sa, generatorul de meniuri (Menu Builder) deschide o fereastr de proiectare (Menu Designer) i afieaz, pe bara superioar de meniuri (pe prima linie), meniul Menu care permite: - construirea rapid a unui meniu asemntor celui standard, selectnd opiunea Quick Menu. - inserarea opiunilor (Insert Item) - inserarea submeniurilor (Insert Bar) - tergerea opiunilor (Delete Items) Opiunea Generate permite transformarea proiectului de meniu ntr-un fiier executabil. Previzualizarea proiectului (meniului) se face selectnd Preview.

99

Ctlin Tnase

FoxPro - Note de curs

n fereastra de proiectare (Menu Designer) se procedeaz astfel: 1 - n rubrica Prompt, se introduc Numele opiunilor (pad-urile) barei de meniuri. 2 - Din lista ascuns (rubrica) Result se selecteaz Tipul aciunii declanate, care poate fi: 2-a - Submenu - pentru crearea unui submeniu (tipul aciunii implicite); 2-b - Command - pentru a se asocia o comand cu opiunea; 2-c - Procedure - pentru a se asocia o procedur cu opiunea (se va scrie cod); 2-c - Pad Name - numele intern al unei opiuni.

Fiecare opiune poate fi numit sau editat local n zona alturat. 3 Acionnd butonul Options, se deschide fereastra Prompt Options n care, pentru fiecare opiune, se pot stabili cteva caracteristici: 3-a Tasta direct de selecie - Shortcut 3-b Condiia ca opiunea s fie srit Skip For 3-c Mesajul explicativ pe linia de stare (status bar) la selectarea opiunii - Message 3-d Comentarii ale proiectantului Comment. 4 Fixarea caracteristicilor globale ale meniului se face accesnd meniul View, opiunea General Options. Se deschide o fereastr n care: 4-a n zona Location, stabilim poziia meniului, relativ la linia zero a meniului sistem: - Replace meniul utilizator nlocuiete meniul sistem - Append - meniul utilizator se adaug la meniul sistem - Before / After - meniul utilizator se adaug nainte / dup meniul sistem. 4-b - n zona Menu Code, se poate defini un cod de iniializare (Setup) care se va executa la crearea meniului i de finalizare (Cleanup), executat la tergerea meniului de pe ecran. 4-c Butonul Edit permite scrierea unei proceduri ce se va executa la activarea meniului. 5 Generarea programului: accesm meniul Menu, opiunea Generate, se d numele fiierului-meniu care va avea extensia . MPR. Dup generare, fiierul-meniu (programul) poate fi executat cu comanda DO (accesm meniul Program, opiunea Do), localiznd pe disc fiierul-meniu cu extensia .MPR. Lansarea n execuie a fiierului-meniu se face astfel: Varianta 1 - cu comanda DO Nume Fiier Meniu . MNX Varianta 2 - Meniul Program, opiunea Do, localizm fiierul-meniu (Nume fiier Meniu . MNX) pe disc, acionm butonul Do. Varianta 3 n fereastra Project Manager (dup integrarea meniului utilizator n proiectul curent), n tab-ul All, Other, Menus, click pe meniul utilizator, Run.

Observaii 1 Meniul sistem este oricnd disponibil, dac se folosete comanda SET SYSMENU AUTOMATIC 2 Pentru activarea meniului Browse sau a altor operaii, se folosete tasta F 10. 3 Dac exist setarea SET SYSMENU OFF, atunci meniul sistem este dezactivat.

100

Ctlin Tnase

FoxPro - Note de curs

4 Revenirea la afiarea meniului sistem Fox, atunci cnd s-a terminat execuia operaiilor din meniul utilizatorului, se face cu comanda SET SYSMENU TO DEFAULT. Exemplu: S adugm pe bara superioar de meniuri (Toolbar) nc dou meniuri denumite generic Meniu 1 i Meniu 2, care au trei, respectiv dou opiuni, ca n figura alturat (desigur, aceste denumiri vor fi schimbate, adaptate cerinelor aplicaiei Fox). Cele dou meniuri vor fi ataate dup meniurile existente deja (dup meniul Help). Meniu 1 Opiunea 1-1 Opiunea 1-2 Opiunea 1-3 Meniu 2 Opiunea 2-1 Opiunea 2-2

Etape: - File, New, Menu, New File, alegem tipul Menu. - n fereastra de proiectare a meniului (Menu Designer), executm paii: - n rubrica Prompt, scriem numele primului meniu, Meniu 1. - Din rubrica Result, alegem tipul Submenu. - Click pe butonul Create din dreapta rubricii Result => noul meniu este adugat n lista Menu level. - Revenim n rubrica Prompt i scriem numele celui de-al doilea meniu, Meniu 2. - Din rubrica Result, alegem tipul Submenu. - Click pe butonul Create din dreapta rubricii Result => noul meniu este adugat n lista Menu level. - Din lista Menu level, selectm Menu Bar. - n rubrica Prompt, click pe Meniu 1, acionm butonul Create, crem cele 3 opiuni: - Opiunea 1-1, Result - selectm tipul Procedure click pe butonul Edit, se deschide o fereastr n care se scrie codul asociat Opiunii 1-1. Efectul este simular cu al unei proceduri Fox. De exemplu, pentru Opiunea 1-1, scriem: USE C:\ CLASE . DBF BROWSE salvm acest cod cu CTRL + W La activarea (lansarea) Opiunii 1-1 din meniul Meniul 1, se va accesa tabela CLASE . DBF (USE C:\ CLASE . DBF) i se va afia (Browse) coninutul ei. - Opiunea 1-2, Result - selectm tipul Procedure - Opiunea 1-3, Result - selectm tipul Procedure Pentru fiecare Opiune / Procedur se va scrie cte un cod. - Din lista Menu level, selectm Menu Bar. - n rubrica Prompt, click pe Meniu 2, acionm butonul Create, crem cele 2 opiuni, pentru al doilea meniu: - Opiunea 2-1, Result - selectm tipul Procedure - Opiunea 2-2, Result - selectm tipul Procedure - Accesm meniul View, opiunea General Options, n zona Location, stabilim locul noilor meniuri, de exemplu, After, din lista ascuns imediat alturat, selectm Help. - Salvm ntreaga construcie: meniul File, Save, dm numele fiierului, de exemplu, C:\ menu2.MNX. - Accesm meniul Menu, opiunea Generate, n caseta de text Output File dm numele fiierului meniu (de exemplu, C:\menu2.MPR), acionm butonul Generate. - Lansm n execuie fiierul-meniu C:\MENU2.MPR: accesm meniul Program, opiunea DO, localizm pe disc fiierul MENU2.MPR => cele dou meniuri create anterior apar pe bara superioar de meniuri, dup meniul Help. Adugarea altor opiuni la unul dintre meniurile existente: - Din lista Menu level, selectm Menu Bar. - n rubrica Prompt, click pe Meniul respectiv, acionm butonul Edit, crem alte opiuni.

101

Ctlin Tnase

FoxPro - Note de curs

Adugarea altor meniuri: - Din lista Menu level, selectm Menu Bar - n rubrica Prompt, adugm noul Meniu, acionm butonul Create. Iat un exemplu pur demonstrativ. S proiectm urmtoarea aplicaie Fox, folosind meniuri utilizator: 1 S afim elevii claselor 12 A, 12 B, 12 C 2 S afim participanii la olimpiadele de Matematic i Fizic de la cele 3 clase 3 S includem pe bara de meniuri 3 meniuri-utilizator: - Clase - Olimpiade - Ieire Rezolvare: 1 Crem cele 3 tabele 12A.DBF, 12B.DBF, 12C.DBF. 2 Introducem date n cele 3 tabele. 3 Crem tabelele OlimpiadaMatematica.DBF i OlimpiadaFizica.DBF. 4 Introducem date n cele 2 tabele. 5 Crem cele 3 meniuri (Clase, Olimpiade, Iesire) cu opiunile lor. Pentru toate opiunile, din rubrica Result, selectm tipul Procedure. 6 n meniul Clase: - la opiunea 12 A, acionm butonul Create i Clase Olimpiade Iesire scriem codul : 12 A Matematic Prsire program USE c:\12A.DBF 12 B Fizic Prsire FOX BROWSE 12 C - la opiunea 12 B, acionm butonul Create i scriem codul : USE c:\12B.DBF BROWSE - la opiunea 12 C, acionm butonul Create i scriem codul : USE c:\12C.DBF BROWSE 7 n meniul Olimpiade: - la opiunea Matematica, acionm butonul Create i scriem codul : USE c:\olimpiadamatematica.dbf BROWSE - la opiunea Fizica, acionm butonul Create i scriem codul : USE c:\olimpiadamatematica.dbf BROWSE 8 n meniul Iesire: - la opiunea Prsire Program, acionm butonul Create i scriem codul : CLOSE ALL && se inchid toate tabelele SET SYSMENU TO DEFAULT && se sterge meniul-utilizator - la opiunea Prsire FOX, acionm butonul Create i scriem codul : CLOSE ALL && se inchid toate tabelele SET SYSMENU TO default && se sterge meniul-utilizator QUIT && se paraseste FOX 9 Salvm aplicaia-meniu: meniul File, Save As, C:\meniuclaseolimpiade.MNX 10 Generm meniul: Meniul Menu, Generate, C:\meniuclaseolimpiade.MPR 11 Lansm n execuie aplicaia-meniu: meniul Program, Do, localizm pe disc fiierul C:\meniuclaseolimpiade. MPR 12 Accesm meniurile-utilizator.

102

Ctlin Tnase

FoxPro - Note de curs

Prezentarea unei aplicaii Proiect de gestiune a datelor specifice unui domeniu de interes practic.
AGENDA S crem un proiect denumit AGENDAProiect, Nume Prenume Telefon Adresa asociat unei tabele AGENDA.DBF. Popa Ion 34343343 Arad Proiectul va include: Enea Cornel 7565656 Husi - Tabela AGENDA.DBF, cu cmpurile Nume, Albu Ion 12112121 Iasi Prenume, Telefon, Adresa. - Un fiier-meniu AGENDAMeniu.MPR, care va crea, pe Toolbar, dou meniuri-utilizator AGENDA i Ieire, cu opiunile: AGENDA Adrese Telefoane Agenda completa Introducere date Ieire Prsire Program Prsire FOX - Un formular AGENDAFormular.SCX pentru introducerea de date noi. Formularul va fi apelat din meniul-utilizator AGENDA, cu opiunea Introducere date. - Programul principal AGENDAMain.PRG Dup definitivarea proiectului, vom crea un fiier executabil AGENDAProiect.EXE. Etapele construirii (edificrii) proiectului: 1 - Crem tabela C:\AGENDA.DBF i adugm primele nregistrri. CREATE C:\AGENDA.DBF Stabilim structura tabelei Input data records now ? Yes Introducem nregistrrile, le salvm cu CTRL + W 2 Crem formularul AGENDAFormular.SCX: meniul File, New, Form, Wizard, Form Wizard, apoi: n fereastra Step 1 Select Fields: n zona Databases and Tables, localizm tabela AGENDA.DBF n zona Available Fields, selectm (toate) cmpurile care trebuie s apar n Formular n fereastra Step 2 Choose Form Style, alegem un tip de formular, de exemplu Embossed n fereastra Step 3 Sort Records, stabilim un criteriu de sortare, de exemplu dup Nume n fereastra Step 4 Finish, n caseta Type a Title scriem Titlul formularului (de exemplu, Formular Culegere Date), apoi acionm butonul Finish n fereastra Save As, dm nume fiierului-Formular (C:\ AGENDAFormular.SCX), Save. 2 - Crem fiierul-meniu AGENDAMeniu.MPR: meniul File, New, Menu, New File, Menu, n fereastra de proiectare a meniului (Menu Designer), adugm cele dou meniuri-utilizator AGENDA i Ieire. 3 - n meniul AGENDA, adugm opiunile Adrese, Telefoane, Agenda completa, Introducere date.

103

Ctlin Tnase

FoxPro - Note de curs

4 - n meniul AGENDA: - La opiunea Adrese, acionm butonul Create i scriem codul : USE C:\AGENDA.DBF INDEX C:\AGENDA.CDX REINDEX SET ORDER TO TAG N BROWSE FIELDS Nume, Adresa CLEAR CLOSE TABLES all - La opiunea Telefoane, acionm butonul Create i scriem codul: USE C:\AGENDA.DBF INDEX C:\AGENDA.CDX REINDEX SET ORDER TO TAG N BROWSE FIELDS Nume, Telefon CLEAR CLOSE TABLES all - La opiunea Agenda Complet, acionm butonul Create i scriem codul: USE C:\AGENDA.DBF INDEX C:\AGENDA.CDX REINDEX SET ORDER TO TAG N BROWSE FIELDS Nume, Prenume, Telefon, Adresa CLEAR CLOSE TABLES all - La opiunea Introducere date, acionm butonul Create i scriem codul CLOSE TABLES all USE DO FORM C:\AGENDAFORMULAR.SCX && Apelm Formularul Culegere Date READ EVENTS 5 - n meniul Iesire: - la opiunea Prsire Program, acionm butonul Create i scriem codul : CLOSE ALL && se inchid toate tabelele SET SYSMENU TO DEFAULT && se sterge meniul-utilizator - la opiunea Prsire FOX, acionm butonul Create i scriem codul : CLOSE ALL && se inchid toate tabelele SET SYSMENU TO default && se sterge meniul-utilizator QUIT && se paraseste FOX 6 Salvm aplicaia-meniu: meniul File, Save As, C:\AGENDAMeniu.MNX 7 Generm meniul: Meniul Menu, Generate, C:\ AGENDAMeniu.MPR 8 Crem programul principal AGENDAMain.PRG: n fereastra de comenzi (Command) scriem comanda: MODIFY COMMAND C:\ AGENDAMain.PRG apoi adugm codul programului principal: CLOSE ALL CLEAR SET DATE TO DMY SET CENTURY ON USE C:\AGENDA.DBF INDEX C:\AGENDA.CDX REINDEX

104

Ctlin Tnase

FoxPro - Note de curs

?'Pentru operare, accesati meniurile AGENDA si Iesire' ? ' ' ?'Apasati ENTER' WAIT CLEAR DO C:\AgendaMeniu.mpr READ EVENTS && Lansare Meniu-Utilizator

Salvm acest program cu CTRL + W. 9 - Crem proiectul AGENDAProiect : meniul File, New, Project, New File, dm numele proiectului AGENDAProiect . PJX, se deschide fereastra Project Manager, n care adugm toate componentele proiectului: - n tab-ul All: n zona Data\Free Tables, click pe butonul Add, localizm tabela C:\AGENDA.DBF. n zona Code\Programs, click pe butonul Add, localizm fiierul-program C:\AGENDAMain.PRG. n zona Documents\Forms, click pe butonul Add, localizm fiierul C:\AGENDAFormular.SCX. Click pe AGENDAFormular, butonul Modify, click-dreapta pe bara de navigare a formularului (Top, Prev, Next ), Edit, bara devine editabil, dublu-click pe butonul Exit de pe bar, se deschide o fereastr n care scriem codul: ThisForm.Release && La apsarea butonului Exit al Formularului, se trece controlul de la formular la alte obiecte Salvm i nchidem fereastra (cu ESC) Salvm Formularul n zona Other\Menus, click pe butonul Add, localizm fiierul C:\AGENDAMeniu.MPR.

10 Dup integrarea acestor componente n proiect, n fereastra Project Manager, acionm butonul Build, apare fereastra Build Options, n zona Build Action selectm Build Executable (n Visual Fox 6.0) / Win 32 executable (n Visual Fox 9.0), se d numele fiierului executabil i calea n care va fi salvat (de ex., C:\AGENDAProiect.EXE). 11 - Se lanseaz n execuie C:\AGENDAProiect.EXE.

105

Ctlin Tnase

FoxPro - Note de curs

Dezvoltarea profesional n domeniul IT


Crearea unui CV
Seciunile importante ale unui CV: 1 - Nume, prenume, adres, telefon, adresa de e-mail n aceast seciune, nicio alt informaie nu este cerut. - Dac i vei schimba adresa, noteaz pn cnd este valabil cea curent. - Dac nu poi rspunde la telefon n timpul cursurilor, scrie i un numr de telefon unde i pot fi lsate mesaje. - Dac incluzi i o adres de pagin WEB personal, asigur-te c formatul este unul profesional. 2 - Obiectivul de carier/obiectivul pentru poziia solicitat - Pentru locurile de munc cu program redus sau pentru diversele colaborri, obiectivul de carier nu este esenial. El ofer totui angajatorului o idee despre ce ai de gnd s faci. - Pentru slujbele permanente, pe baz de contract de munc, obiectivul personal pentru postul vizat este esenial. - "Obiectivul de carier" se ntinde pe o perioad mai mare de timp, n timp ce obiectivul personal pentru postul vizat se refer la primii pai pe care i vei face n organizaie. - Obiectivele trebuie formulate n termeni de genul "ce poi s faci pentru un angajator" i nu "ce poate angajatorul s fac pentru tine". Evit expresiile ca "...unde mi voi putea folosi cunotinele i aptitudinile pentru a-mi lrgi nivelul de expertiza n...". - Obiectivul trebuie formulat dup locul de munc pe care l vrei acum sau dup aria n care vei lucra. 3 - Sumarul calificrilor - Este poate CEA MAI IMPORTANT COMPONENT a CV-ului. Seciunea va oferi o imagine concis asupra calificrilor tale, innd seam de obiectivele declarate de tine. - Aici vrea orice angajator s ajung, atunci cnd citete un CV. n aceast seciune, angajatorul va regsi n tine persoana ideal pentru postul pe care l ofer, va regsi avantajele competitive pe care le pui la dispoziie. - Mergi pe urmele experienei tale de munc, a celei din poziia de voluntar i/sau pe baza unor activiti extracurriculare n termeni de durat, scop, obiective atinse etc. - Dac nu ai experien relevant, accentueaz aptitudinile pe care le-ai dezvoltat n termenii relaiilor interpersonale, organizaionale etc. - Experiena pe care o ai, innd seam de obiectivul declarat. - Cunotinele tale, relaionat la numeroasele componente i aspecte ale postului spre care aspiri. - Aptitudini pe care le ai pentru a indeplini efectiv cerinele locului de munc. - Baza academic pe care o ai - completeaz experiena practic acumulat. - Caracteristicile i atitudinile tale personale, aa cum sunt ele cerute de locul de munc solicitat. 4 - Sumarul aptitudinilor - Aceasta seciune este esenial n cazul CV-urilor care omit obiectivul pentru poziia solicitat i a sumarului calificrilor. Ea va fi inserat imediat dup seciunea "Nume i Adres". - Are n componen 3-6 subpuncte care subliniaz cele mai relevante puncte forte pe care le deii pentru locul de munc solicitat. Descrie avantajele tale competitive - valorile pe care le oferi.

106

Ctlin Tnase

FoxPro - Note de curs

- Mergi pe urmele experienei tale de munc, a celei din poziia de voluntar i/sau pe baza unor activiti extracurriculare, n termeni de durat, scop, obiective atinse etc. Dac nu ai experien relevant, accentueaz aptitudinile pe care le-ai dezvoltat n termenii relaiilor interpersonale, organizaionale etc. - Formele de educaie/training formale sau profesionale. Poate fi folositor s menionezi i cunoaterea altor limbi (englez, francez, german etc.). - Principalele arii n care posezi abiliti (ex. utilizarea calculatorului, instrumentare tiinific etc.). - Caracteristicile tale personale care sunt cerute de poziia pe care o solicii (ex. entuziasm, flexibilitate, atenie la detalii etc.). 5 - Educaia - Studenii n anii terminali vor scrie n CV dac sunt studeni n sistem de stat sau privat, diploma pe care urmeaz s o obin, disciplina pe care i focalizeaz interesele, universitatea, anul nceperii facultii, diversele titluri obinute sau spre care aspir. - Nu este necesar s treci n CV coala primar i gimnaziul absolvit, dect dac au fost instituii prestigioase. - Menioneaz liceul absolvit, diploma obinut, data i, dac doreti, poi scrie i specializarea obinut. - Numele diplomelor obinute nu se abreviaz. - Toate etapele educaionale vor fi scrise n ordine invers absolvirii lor (cea mai recent prima). 6 - Cursuri Relevante O sub-seciune este cea a cursurilor care au relevan n raport cu locul de munc dorit. Alege 6-10 cursuri care au legtur cu obiectivul declarat. Dac unul dintre cursuri nu aduce, prin titlul lui, informaii relevante cu privire la legtura cu obiectivul declarat, explic separat de ce a fost introdus n list. Lista va trebui "aranjat" n ordinea prioritilor. n orice caz, evit enumerarea haotic. Poate avea aspect tabelar pentru o mai bun citire. 7 - Proiecte n aceast sub-seciune pot fi scrise proiectele relevante, rapoartele, tezele etc. pe care le-ai pregtit. 8 - Experiena IT & C - Vor fi menionate att cunotinele teoretice, ct i cele practice. Poate fi realizat un tabel cu seciunile: Hardware, Operating Systems, Software, Limbaje de programare. 9 - Experiena profesional - CV-ul cronologic este cea mai acceptat form pentru sublinierea experienei profesionale. - ncearc acest format pentru nceput. - Dac nu poi s subliniezi punctele tale forte nc de pe prima pagin, ncearc un CV cronologic modificat. Dac nici acesta nu ajut, ncearc CV-ul funcional.

10 - Cercetare tiinific, certificare - Prezint o list a calificrilor, innd cont de obiectivul postului. Dac adaugi i date, ordinea va fi cea invers cronologic. 11 - Premii, burse - Menioneaz numele premiului, numele instituiei care i-a acordat premiul i data. - Menioneaz premiile importante, att cele obinute n facultate, ct i cele obinute n liceu. - Explic ce nseamn acel premiu, dac cititorul nu poate nelege importana.

107

Ctlin Tnase

FoxPro - Note de curs

12 - Articole publicate - Vor fi menionate numai articolele aprute n revistele care ar trebui s prezinte interes pentru angajator. - Menioneaz ce anume a fost publicat i ce a fost trimis spre publicare. - Menioneaz documentele pe care le-ai prezentat din poziia de invitat special sau vorbitor invitat n cadrul diverselor conferine, seminarii etc. 13 - Limbi strine - Menioneaz n primul rnd limbile n care poi vorbi fluent i n care poi s i desfori activitatea. - Menioneaz dac poi s vorbeti i/sau s scrii n limba respectiv. 14 - Activitati/ interese - Activitile desfurate ca voluntar pot fi incluse n mai multe moduri, n funcie de mesajul pe care vrei s-l transmii. Poi s incluzi activitile de voluntariat n aceast seciune, dac vrei s demonstrezi modul de petrecere a timpului liber. - Dac vrei s subliniezi chiar activitile n cauz, poi s creezi o seciune separat, numit "Activiti voluntare". Aici vei putea s mentonezi i organizaiile sub umbrela crora ii desfori activitatea de voluntar, contribuiile pe care le aduci etc. ncepe fiecare punct din lista ta cu un verb. - Poi s incluzi activitatea de voluntariat i n cadrul seciunii care descrie experiena de munc, dac activitile prestate i pot crea avantaje (ex. Assistant Manager - volunteer). - Organizarea activitilor va fi fcut n ordine invers cronologic. - La finalul acestei seciuni, poi s incluzi interesele tale. n general, angajatorii vor s tie cum i petreci timpul liber. 15 Referine / mapa personal - Nota: "referine la cerere" arat caracterul opional al acestora. Adugai numele persoanei care v recomand, dac ea este bine cunoscut de ctre angajator. El va dori s v ntlneasc datorit prezenei respectivei persoane. - Fr nume de referin n CV, va trebui s te "vinzi" singur n faa angajatorului. Trebuie s tii c, n general, persoanele care i dau referinele nu vor fi deranjate cu telefoane inutile. - Persoana aleas s-i dea referinele trebuie ntrebat dac accept folosirea numelui sau n CV. De asemenea, trebuie s te asiguri ce va spune n cazul n care va fi contactat telefonic de angajator. i va meniona punctele puternice sau pe cele slabe? - Dac un angajator cere o map personal (ex. grafic design, proiectare) va trebui s o prezini. Ca s o prezini, trebuie s o ai. Realizarea unei mape personale ia ceva timp, aa c trebuie pregtit continuu.

Alte trucuri pentru redactarea unui CV: * Poi s omii informaii personale ca: vrst, naionalitate sau starea civil. * Dac aplici pentru o slujba n care acestea conteaz, atunci adaug-le la nceputul CV-ului. * Nu scrie "Curriculum Vitae" sau "Resume" la nceputul CV-ului tu. Nici data la care i-ai scris CV-ul. * Asigur-te c numele tu este scris n partea de sus a fiecrei pagini. * Include numrul paginilor pe toate paginile, cu excepia primei, de preferat n partea de sus a paginii.

108

Ctlin Tnase

FoxPro - Note de curs

* Folosete un dicionar pentru nelegerea clar a aptitudinilor/abilitilor cerute de locul de munc i a contribuiilor pe care le poi aduce tu n cadrul companiei. * Verific prima forma pentru acuratee. Vezi dac nu ai omis ceva. Verific ultima form pentru greeli, chiar nainte de a o tipri. * Pstreaz toate notiele pe care le-ai folosit la realizarea CV-ului. * Un CV trebuie pstrat la zi. De aceea, va fi nevoie s-l completezi din timp n timp.

Reguli de susinere a unui interviu


Cnd aplici pentru un post, ncepi s te gndeti cum va decurge interviul cu angajatorul. Caui s te documentezi, i ntrebi cunoscuii i apelezi la experiena altora pentru a obine succesul. Iat ce ai de fcut: cnd de prezini la un interviu de angajare, este indicat s fii sigur pe tine, s-i cunoti foarte bine punctele forte i s tii cum s pui problema. Iat ce altceva e bine s tii: 1 - Rspunsuri ct mai scurte i concise n cazul n care i se cere s dai mai multe detalii, poi s i dezvoli rspunsul, dar caut s nu depeti dou-trei minute pentru fiecare ntrebare. Testeaz-te i verific timpul aproximativ de care ai nevoie pentru a rspunde la o ntrebare ct mai complet. 2 - Include, n prezentarea ta, date concrete, cuantificabile Intervievaii au tendina de a prezenta generaliti. Din pcate, asemenea generaliti nu reusesc s conving de faptul c solicitantul este o persoan activ. Include informaii msurabile, definitorii pentru tine ca individ i nu pentru orice alt persoan, furnizeaz detalii despre realizrile tale, atunci cnd se discut punctele tale forte. 3 - Repet punctele forte de trei ori Este extrem de important ca tu s te simi n largul tu, confortabil i ncreztor, atunci cnd vorbeti despre atuurile tale. Explic modul n care punctele forte relaioneaz cu obiectivele companiei sau ale departamentului. Dac i vei repeta punctele forte, cei care te ascult i le vor reaminti i, dac le susii cu argumente cuantificabile, vor fi mult mai uor de crezut. 4 - Pregtete cinci sau mai multe poveti de succes n pregtirea pentru interviuri, f-i o list cu abilitile tale, cu elementele-cheie pe care mizezi i te bazezi. Apoi, reflecteaz la locurile de munc din trecut i alege unul sau dou cazuri n care ai folosit cu succes aceste competene care te recomand. 5 - Imagineaz-te singur, pe tine nsui, n echipa lor Aliaz-te tu nsui cu viitorul angajator, folosindu-i numele i produsele sau serviciile. De exemplu, Ca membru al, a analiza cu atenie..i a.. Gndete ca membru al echipei i caut s vezi cum teai potrivi cu mediul respectiv. Ai grij s nu faci sau s spui ceva care ar putea ofensa sau care ar putea fi perceput ca un aspect negativ. Cercetrile tale te vor ajuta n acest domeniu. 6 - Aparena conteaz Ceea ce lai s se vad, ca i cum ai spune ceva, este la fel de important cu ceea ce spui. Studiile au artat c 65% din mesajul transmis este non-verbal: gesturile, aspectul fizic, mbrcmintea sunt elemente extrem de influente n timpul unui interviu pentru un loc de munc.

109

Ctlin Tnase

FoxPro - Note de curs

7 - Pune ntrebri la interviu Tipul de ntrebri pe care le pui i modul n care i formulezi ntrebrile pot face o impresie foarte puternic asupra intervievatorului. ntrebrile necesit o bun pregtire n prealabil. Noteaz-i ntrebri specifice, care consideri tu c necesit o lmurire din partea celui care i ia interviu i, pe parcursul acestuia, caut oportuniti pentru a le adresa celor care te ascult. Nu ntreba despre salariu sau beneficii! Procesul de interviu este o strad cu dou sensuri pe care tu i intervievatorul v evaluai reciproc, pentru a determina dac exist o coresponden adecvat ntre tine i locul de munc pe care l solicii. 8 - Caut s menii o conversaie fluent, fr timpi mori Prin meninerea contient a unui dialog susinut, n loc de un monolog, vei fi perceput pozitiv. Folosete ntrebri feedback la sfritul rspunsurilor tale, pentru a obliga la o continuitate a conversaiei. Nu uita de limbajul trupului i de intonaia vocii, pentru a crea o atmosfer ct mai plcut. 9 - Documenteaz-te cu privire la activitatea companiei Studiaz temeinic profilul companiei la care mergi la interviu, care este linia de produse, care sunt eventualii concureni. Cercetrile i vor furniza date care te vor ajuta s decizi dac eti, cu adevrat, interesat s ocupi un post n compania respectiv. 10 - ine un jurnal al interviurilor Ct mai curnd posibil, scrie un rezumat a ceea ce s-a ntamplat n timpul interviului avut. Revizuiete-i prezentarea. Noteaz n jurnal atitudinile i modul n care ai rspuns la ntrebri. Ai pus cele mai potrivite ntrebri pentru a obine informaiile de care aveai nevoie? Ce ai face diferit la un interviu urmtor? Pregtete i trimite o scurt scrisoare de mulumire. Gndete-te ce ai putea face tu pentru compania respectiv. Datorit importanei sale, interviul necesit o pregtire n avans. Doar tu eti cel care e capabil s influeneze pozitiv rezultatul unui interviu. Tu trebuie s contientizezi faptul c, n momentul n care te prezini la un interviu, trebuie s i mobilizezi toate atuurile, pentru a-i nvinge concurena. Pentru a reui acest lucru, trebuie s fii sigur c ai luat n considerare tipul de job dorit, te-ai ntrebat de ce i-l doreti i ct de calificat eti pentru el. Nu uita s ii seam i de realitate: job-ul respectiv este el accesibil, poate fi dobndit ? Sfat: nainte de a te prezenta la un interviu, analizeaz foarte bine ce presupune postul respectiv. Tehnici de instruire profesional Indiferent ce tehnici de pregtire sunt selectate, programele de pregtire nu pot avea succes, dac angajaii nu vor s nvee. Astfel, acetia trebuie s-i recunoasc deficienele i s vad oferta de pregtire ca pe un mijloc de a le remedia. Oamenii care susin c nu au nimic de nvat nu vor profita de pe urma pregtirii. Programele de pregtire ar trebui s se dezvolte treptat i s nu suprasolicite capacitile intelectuale ale angajailor. Programul fiecrui participant la curs trebuie s fie monitorizat regulat, iar angajaii trebuie s fie capabili ei nii s se evalueze. La elaborarea unui program de pregtire, este de preferat ca metodele de pregtire s fie ct mai variate i mai interesante i s implice angajaii n planificarea cursului pe ct posibil. Progresul nu trebuie ateptat n prea puin timp; eecul n alocarea unui timp insuficient pentru asimilarea materialului poate avea repercusiuni pe termen lung. Alte principii de baz ale nvrii sunt acelea c angajatului trebuie s i se prezinte obiectivele clar definite; s se bucure de experiena nvrii i, astfel, s devin

110

Ctlin Tnase

FoxPro - Note de curs

implicat i s-i manifeste adeziunea la program; s fie capabil s transpun abilitile nvate n relaie cu o sarcin i s completeze alte sarcini similare. Un mare numr de tehnici de pregtire sunt disponibile, incluznd urmtoarele aspecte: nivelul existent al aptitudinilor angajailor, costul pregtirii (incluznd faptul c, n unele cazuri, instruirea se face cu sectoare de producie) i importana sa pentru nevoile slujbei i obiectivelor mai largi ale pregtirii. Coaching (predarea) necesit un cadru didactic cu experien, care s transmit cunotinte i are la baz contractul dintre dou persoane. Adesea, const ntr-o demonstraie, urmat de imitarea de ctre salariat a ceea ce instructorul a realizat. nvarea este imediat, direct, iar instructorul are un interes personal fa de salariat. Ritmul predrii poate varia, pentru a se adapta capacitii salariatului de a absorbi informaia. nvarea este relativ informal. Participanii ating progresiv niveluri din ce n ce mai mari ale aptitudinilor. Iniial, sunt demonstrate sarcinile simple i, dup ce acestea sunt bine stpnite, urmeaz cele mai complicate. Salariatul este strns legat de procesul de nvare, iar instructorul este disponibil s remedieze eventualele greeli ce pot aprea. Angajatul poate repeta operaiile dificile, poate pune ntrebri i poate ctiga gradat / treptat ncredere, pe msur ce procesul de pregtire de deruleaz. Pe lng aceste avantaje, exist i dezavantaje: o demonstraie este ratat atunci cnd cursantul nu reuete s se concentreze n momentele importante i trebuie s se repete, iar n al doilea rnd, un instructor incompetent va preda metode de munca incorecte. O abordare paralel presupune c elevul s nvee anumite lucruri n mod independent i apoi s fie chestionat de un instructor. Aceasta evideniaz golurile n cunotinele elevului, dar i poate afecta ncrederea n sine. De aceea, nainte de a aborda aceast tehnic de pregtire, ntre profesor i elev trebuie s existe un raport adecvat, favorabil. Discovery training Aceast metod necesit ca angajaii s investigheze i s descopere principiile fundamentale ale muncii lor i cum s obin cele mai bune rezultate. Profesorii ocup loc n spate, supraveghind ntr-o mai mic msur ritmul de realizare al temelor. Angajaii nva cum s pun ntrebri corecte, la fel de bine cum gsesc rspunsuri. Avantajele sunt, n primul rnd, relevante pentru slujba angajatului, iar n al doilea rnd, abilitatea trainerilor de a evalua abilitile investigative i analitice ale salariailor, precum i competena lor tehnic, iar n al treilea rnd, faptul c rezultatele programelor de training investigative sunt utile pentru mbuntirea eficienei la locul de munc. Totui, aceste programe pot fi scumpe, greu de pregtit i dificil de administrat, iar output-urile pozitive nu pot fi garantate. Pentru a ntocmi o schema de nvare n sistem discovery, se cere specialistului s defineasc toate caracteristicile unei sarcini (sau post), cunotinele i aptitudinile pe care le consider necesare pentru ndeplinirea sa. Apoi, specialistul este pus s sugereze surse de informaii necesare pentru a transmite o analiz (colegi, manuale tehnice etc.), dup care impune un orar de lucru i monitorizeaz progresul. ntr-un fel, alocarea unei sume individuale unui salariat este o aplicaie a nvrii n sistem discovery. Salariatului i sunt atribuite sarcini pe care trebuie s le ndeplineasc singur, iar rezultatele sunt exprimate de un instructor care comenteaz calitatea muncii i care acord note, pentru a cuantifica progresul nregistrat. Skills analysis (analiza aptitudinilor) Un muncitor ndemanatic i experimentat este selectat, iar modul su de lucru este analizat. Aceast analiz formeaz o specificaie pentru trainingul celorlali muncitori, cu listri detaliate ale tuturor sarcinilor pe care trebuie s le ndeplineasc i caracteristicile cerute pentru a le ndeplini cu succes. Detaliile pot fi extrem de precise, chiar pn la descrierea micrilor minii, degetului i piciorului. Metoda este ieftin i uor de neles i aplicat. Totui, practicile de munc curente sunt transmise de la o generaie la alta, iar trainingul care rezult din aceste exerciii poate fi superficial.

111

Ctlin Tnase

FoxPro - Note de curs

Tehnicile descrise sunt analize ale sarcinilor care au n vedere standardul de aptitudini i comportament necesar, pentru a realiza o slujb, iar analizele greelilor diagnosticheaz greelile care apar n mod curent, atunci cnd se realizeaz anumite activiti. Job rotation (rotaia pe posturi) n cazurile n care angajaii i schimb n mod frecvent slujbele, programele de experien permit acestora s capete o nelegere global a organizaiei. Aceasta ar trebui s-i nzestreze angajaii n vederea ocuprii unor poziii ct mai nalte. Transferurile sunt orizontale i sunt, de obicei, destinate s familiarizeze salariaii cu un anumit tip de munc, mai degrab dect s devin expert ntr-un anumit domeniu. Micrile sunt plnuite nainte i intervin relativ frecvent pentru a stimula interesul i motivaia. Rotaia pe posturi extinde perspectivele individuale, ncurajeaz loialitatea fa de firm i ajut salariaii s se confrunte cu problemele specifice ce intervin n anumite departamente. Dezavantajele metodei: experiena ctigat ntr-o scurt perioad ntr-un departament poate ca, n realitate, s nu merite efortul; observaii ntmpltoare cu privire la munca altcuiva pot imprima atitudini neateptate; amplasamentele sunt, de obicei, predominante ntr-un plan de dezvoltare a personalului, care pot s nu se potriveasca cu nevoile unui anumit individ; n timpul desfurrii muncii, personalul poate primi activiti ordinare, de nivel sczut, din performanele crora nu se aleg cu nimic. Programul de rotaie pe posturi trebuie s fie monitorizat cu grij i periodic. Persoane responsabile trebuie s fie puse n locul salariatului, n timpul ederii sale n fiecare departament i ar trebui s existe o list de verificare cu privire la experiena, cunotinele necesare i activitatea ce trebuie ndeplinit, n funcie de care poate fi evaluat progresul (nvrii) salariatului. Este posibil ca salariatului s i se dea anumite sarcini de ndeplinit, n cadrul fiecrui departament i s i se cear s pregteasc un raport corespunztor. Programmed learing (nvarea programat) Este alctuit din prezentarea materialului introductiv n uniti mici, urmat imediat de o list de ntrebri la care salariatul trebuie s rspund corect, nainte de a trece la o munc mai dificil. ntrebrile sunt o parte integrant a unei scheme i sunt, de obicei, elaborate astfel nct nu este posibil s realizezi programul, fr s rspunzi la ele. Cadrele sunt cu grij ordonate ntr-o progresie logic de cunotine i niveluri de dificultate. Avantajele sunt c salariaii pot deveni activi, prin implicarea n procesul de nvare i-i pot face trainingul independent, fr prezena unui instructor. Cu toate acestea, nu exist instructor imediat disponibil s-i ndrume, dac-i pierd interesul, iar pregtirea unor materiale poate fi extrem de scump, n special cnd subiectul se schimb n mod constant, astfel nct sunt necesare actualizri periodice. Dintre tehnicile de vorbire n public amintim: prelegerea, dezbaterea discuia, brainstorming, studiul de caz, demonstraia. Prelegerile (conferinele) sunt expuneri verbale ale unor seturi de fapte i opinii predeterminate, ntr-un mediu controlat, de obicei fr participarea activ a salariailor. Calitatea unei expuneri depinde, n mare masur, de ct de bine s-a pregtit persoana n cauz i de propriile abiliti n prezentarea performanei. Prezentatorii incoereni sunt ineficieni. n egal msur, oratorii buni au un impact minim asupra participanilor care nu sunt dispui s nvee. O prelegere trebuie s sublinieze punctele majore, din moment ce numai o parte din problemele abordate (cel mult 25%) sunt reinute de audien. Majoritatea oamenilor au dificulti n ceea ce privete concentrarea la o prelegere mai lung de 1 or. Cunotinele transmise n acest mod pot fi ntrite i consolidate cu ajutorul materialelor. Din pcate, elevii care tiu c materialele vor fi distribuite, este posibil s nu acorde atenie complet i, dei ei intenioneaz ntotdeauna s studieze materialul primit, o mare parte din el rmne necitit.

112

Ctlin Tnase

FoxPro - Note de curs

Prelegerile rmn principalul mijloc de instruire al multor programe educaionale i de pregtire. Sunt ieftine, se pot adresa unui public larg i sunt recunoscute, n general, ca o metod adecvat de predare. Pentru susinerea unei prelegeri, sunt necesare 3 lucruri: s o pregteti, s-i planifici prezentarea i s realizezi transmiterea informaiilor. Pregtirea implic listarea punctelor principale ale expunerii, selectarea prioritilor i detalierea lor. Planificarea presupune selectarea locului de ntlnire i a momentului potrivit al desfurrii i punerea laolalt a materialelor necesare prezentrii. Prezentarea n sine se refer la mijloacele de exprimare, cum conduci audiena cu ajutorul materialelor i alte aspecte ale prezentrii.

Reguli n susinerea unei prelegeri


Pentru alegerea persoanelor celor mai potrivite care trebuie s ocupe un anumit post, se pot folosi diverse metode de selecie, a cror valabilitate e suficient de mare n practica uzual. Dintre acestea, amintim: referintele, centrele de evaluare, chestionarul, examenul medical, contractul de management. Deseori, testele sunt grupate ntr-o gam de utilizare n selecia pentru un post. Acest fenomen este cunoscut sub numele de centrul de evaluare. n acest context, candidaii sunt supui unei game de teste, fiecare strns legat de unul sau mai multe aspecte ale postului. Centrul de evaluare ncearc s dezvolte un grad nalt de validitate a previzionrii privind abilitatea candidatului de a ocupa postul n cauz. Concret, un centru de evaluare poate dura cteva zile i implic alocarea de resurse considerabile. Aceasta poate include mas i cazare oferite ctorva analiti bine pregtii. Centrele de evaluare se justific numai dac : postul face parte din managerul de vrf costurile pot fi uor absorbite gradul de valabilitate previzionrii pe care l ofer e destul de mare. Metoda centrelor de evaluare a fost aplicata prima dat de AT&T, apoi de I.B.M. i Kodak. Corporaiile ce folosesc aceast metod, s-au unit ntr-o asociaie i realizeaz schimburi periodice de experien. Astfel, se studiaz comportamentul candidailor n situaii unice. Scenariul detaliat permite candidailor s cunoasc, n mod continuu, att rezultatul concurenilor, ct i pe cele proprii. Bateriile de programe propuse de specialiti permit evaluarea candidailor, pentru fiecare zi de sarcin i aptitudine de conducere. n acest context, se pot evalua urmtoarele aspecte : organizarea corespondenei ; formularea unor documente n scis ; redactarea unor prelegeri ; dezbaterile n grup ; asumarea de rol ; jocuri de managenent.

Redactarea unei prelegeri Dac tema e liber, timpul alocat va fi mai mic; dac tema e stabilit de observatori, timpul va fi de 30 min. Candidatului i se pun la dispoziie informaiile necesare, iar prelegerea se susine n faa observatorilor. naintea susinerii unei prezentri publice, sunt indicate anumite exerciii care s ajute n susinerea discursului public. Acestea sunt exerciii de respiraie, exerciii de nclzire a vocii i exerciii de nclzire a muchilor feei.

113

Ctlin Tnase

FoxPro - Note de curs

De asemenea, se impune familiarizarea participanilor cu elementele teoretice ale susinerii de prezentri publice, elemente de limbaj nonverbal i paraverbal care s le ofere instrumentele eseniale pentru susinerea unei prezentari de succes. Exerciiile i studiile de caz contribuie decisiv la mbuntirea abilitilor de prezentare. Exist mai multe metode de transmitere de informaii/cunotine, dintre care dou ofer mai mult, n ceea ce privete eficacitatea: prelegerea i discuia, deoarece adulii contribuie la transmiterea de informaii, oferind din experiena lor de via, istoria personal etc. Predarea este pentru ei o combinaie ntre a nsui i a mprti. Trebuie s nsueasc ceea ce le lipsete, pentru a veni n ntmpinarea provocrilor din prezent i din viitor. Pe de alt parte, trebuie s mprteasc ceea ce au, pentru ca alii s nvee din succesul lor din trecut i din prezent i, de ce nu, din eecurile lor. O bun modalitate n care adulii pot nsui cunotinele necesare este prin folosirea eficient a prelegerii. Cuvntul-cheie este eficiena. (Toi am experimentat prelegeri ineficiente, pe care le-am putea descrie ca fiind discursuri ilogice i irelevante, ce par s nu se mai sfreasc.) Prelegerea este cea mai eficient atunci cnd prezint informaii relevante ntr-o manier ordonat. Eficiena prelegerii poate fi amplificat lund n calcul urmtoarele elemente: 1. Pregtete cu atenie prelegerea, urmrind o predare clar i fiind sensibil la nevoile auditorilor. 2. Folosete elemente vizuale (plane, tabl i cret, foi de hrtie etc.) pentru a-i ajuta pe auditori s vad lecia, precum i s o aud. 3. Prezint prelegerea ct mai concis (10-20 de minute). Prelegerile mai lungi pot fi mprite n mai multe etape, iar ntre acestea se pot pune ntrebri, poate fi prezentat un rezumat sau chiar se poate servi o cafea. Chiar i o prelegere eficient are limitele ei. Uneori, cel care susine prelegerea trebuie s se opreasc din vorbit i s nceap s asculte. Aici are valoare discuia, ca metod. (Toi am experimentat discuii ineficiente pe care le-am putea descrie ca fiind vorbrii din ce n ce mai inutile.) Discuia este cea mai eficient atunci cnd ajut la clarificarea, mbuntirea sau corectarea informaiei, a ideilor sau a sentimentelor. Eficiena discuiei poate fi amplificat lund n calcul urmtoarele elemente: 1. Planific s permii discuii care vin n sprijinul studiului de caz. 2. Caut contribuia tuturor auditorilor. Limiteaz-i cu amabilitate pe cei care contribuie frecvent i ncurajeaz-i pe cei mai rezervai. Toi au ceva de mprtit. 3. Folosete timpul i intensitatea discuiei, astfel nct s menii interesul tuturor auditorilor i s-i ajui s nsueasc din mprtire. 4. Pregtete ntrebri potrivite care i vor conduce pe auditori ctre obiectivele propuse. Prelegerea i discuia le ofer adulilor oportunitatea de a nsui i a mprti. Folosirea echilibrat i neleapt a acestor metode poate avea un impact pozitiv asupra adulilor din grupul int. Pentru a susine o prelegere cu maxim eficien, trebuie s avem n vedere urmtoarele aspecte: 1. Pregtirea unei prezentri publice De ce fac EU prezentarea Cui fac prezentarea - audiena i analiza acesteia Contextul n care fac prezentarea Caracteristicile unei prezentri bune Coninutul informaional al unei prezentri Structurarea informaiei din prezentare Prezentarea video (Slide Show i Flipchart) 2. Elemente de limbaj al trupului i limbaj paraverbal Vestimentaie Postura corpului Folosirea minilor Mimica feei Poziionarea n sal a lectorului Limbaj Paraverbal

114

Ctlin Tnase

FoxPro - Note de curs

3. Cteva reguli n ceea ce privete vorbitul n public Contactul vizual Tiprituri ajuttoare Folosirea umorului Interaciunea cu sala Tratarea persoanelor dificile din audien Ticuri verbale 4. Tips & tricks, nainte de susinerea unui discurs Cum reacioneaz organismul n faa stresului Evit s i faci probleme singur() Cnd se ntampl ceva neprevzut... 5. Exerciii, studii de caz, jocuri de rol i susinerea de prezentri Exerciii de cunoatere a participanilor Exerciii de respiraie Exerciii pentru nclzirea vocii i dicie Exerciiu pentru controlul atitudinii Studii de caz - Urmrirea i comentarea unor prezentri publice (video) Fiecare participant susine o prezentare la alegere (cu nregistrare video) Fiecare participant susine o prezentare la alegere (cu nregistrare video), iar colegii joac diverse tipuri de persoane Prelegerea de succes Etapele prelegerii Pregtirea prelegerii Expunerea Feedback-ul Analiza i concluziile pentru viitor Pregtirea prelegerii Stabilirea obiectivelor Alegerea formatului Pregtirea materialelor auxiliare Formatul materialelor auxiliare Expunerea Coninutul prelegerii Titlul Deschiderea Ancora - captarea interesului Cuvinte care asigur o ancor solid Ancora - scenariul Corpul expunerii Informarea Echilibrul prezentrii Integrarea Evidenierea aspectelor importate Rezumatul final Procesul expunerii Primul moment

115

Ctlin Tnase

FoxPro - Note de curs

Privirea Zmbetul Vocea Cuvintele mbrcmintea inuta Dispunerea scaunelor S prezentm elementele principale care determin succesul unei prelegeri. Integrarea acestora n cadrul propriilor noastre prezentri i prelegeri reprezint o condiie necesar, nu ns i suficient. Fie c suntem mai talentai sau mai puin talentai, calea spre succesul prelegerilor noastre are un singur nume: antrenamentul. S vedem n continuare care sunt elementele-cheie ale unei prelegeri reuite. Etapele prelegerii Din punct de vedere temporal, vorbim despre pregtirea prelegerii, expunerea, feedback-ul i analiza i concluziile pentru viitor. Pregtirea prelegerii Fiecare i poate construi propriul su mod de a pregti o prelegere, ntre cele dou extreme: prelegerea minuioas, pn la cel mai mic amnunt, cu mult antrenament anterior de memorare a textului i

prelegerea intuitiv, n care sunt cunoscute doar elementele eseniale de coninut, restul fiind lsat pe seama inspiraiei de moment. O structur prea rigid dezavantajeaz aspectul relaiei cu publicul i ar putea da senzaia unui monolog citit de pe prompter. Lipsa unei structuri poate da impresia de superficialitate i neseriozitate. Optimul se afl undeva la mijloc: o structur predefinit, cu obiective clare i cu materiale ajuttoare pregtite anterior susinut de o disponibilitate spre flexibilitate. Expunerea Este momentul cel mai fierbinte, atunci cnd ne ntlnim i comunicm publicului. Feedback-ul Ne-am pregtit prelegerea i am susinut-o. Este momentul s vedem dac ceea ce am vrut s comunicm a fost bine neles. Putem face acest lucru n fiecare moment, urmrind reacia celor prezeni. Ne putem da seama dac sunt interesai de ceea ce le spunem sau se plictisesc. Apoi, putem face acest lucru n spaiul rezervat ntrebrilor i rspunsurilor, cnd avem un bun prilej s observm n ce msur ne-am ndeplinit obiectivele. Dup ce prelegerea s-a ncheiat, putem gsi o modalitate de a primi feedback referitor la modul n care am prezentat materialul, att din punctul de vedere al coninutului, ct i din punctul de vedere al procesului (modul de prezentare). Putem ntreba direct unele dintre persoanele care au asistat la prezentare sau putem folosi un formular pentru feedback. De asemenea, putem folosi camera de filmat. Analiza i concluziile pentru viitor Fiecare prelegere pe care o susinem este o oportunitate de perfecionare. Progresul este mai rapid dac ncheiem un ciclu complet al nvrii. Ne-am nsuit elementele teoretice, am planificat prelegerea, am susinut-o i am primit feedback. Pentru a ncheia ciclul, avem nevoie de a integra experiena dobndit i a o folosi n viitor. Vom folosi experiena proaspt acumulat pentru a face modificrile sau completrile necesare n

116

Ctlin Tnase

FoxPro - Note de curs

prelegerea noastr. Poate c am fcut unele greeli. S nvm din ele i s mergem mai departe. Toi cei care nva, fac greeli i toi cei care fac greeli pot nva, cu condiia s doreasc i s accepte acest lucru. Dac ne este greu s vorbim despre greeli, putem gndi astfel: Nu exist eec, exist rezultat. Aadar, am inut o prelegere, am obinut rezultate, le analizm pentru a ne perfeciona i continum. Pregtirea prelegerii Stabilirea obiectivelor Este foarte important ca obiectivele prelegerii s fie bine stabilite dinainte. De asemenea, este la fel de important ca aceste obiective s rmn vii n atenia noastr n timpul expunerii. Dac nu avem obiective bine precizate, suntem la voia ntmplrii. Dac nu le avem n atenie n timpul expunerii, exist pericolul de a ne abate de la drumul propus, mai ales n timpul dialogului cu publicul. n funcie de scopul urmrit, distingem dou categorii de prelegeri: a - informale sau educaionale i b - de convingere. Prelegerea educaional are drept scop transmiterea de informaii dintr-un anumit domeniu. Scopul principal al unei astfel de prelegeri este ca auditoriul s neleag materialul prezentat i s deschid orizonturi spre un studiu aprofundat. Prelegerea de convingere are ca scop determinarea publicului s treac la o aciune dorit de noi. De exemplu, prezentarea unui nou produs sau prezentarea propriei firme cu scopul de a atrage noi clieni. Alegerea formatului O prelegere poate avea dou pri: prezentarea informaiilor i seciunea ntrebri-irspunsuri. O astfel de prelegere o numim bidirecional. Pot fi, ns, prelegeri unidirecionale, n care exist numai prima parte, prezentarea informaiilor. Prezentarea informaiilor este fcut de lector, are un caracter unidirecional (de la lector ctre auditoriu). Sunt persoane care afirm c aceast etap nu trebuie s dureze mai mult de 15 minute. De ce? Pentru c un adult i poate menine atenia concentrat, n medie, 13 minute. Seciunea ntrebri-i-rspunsuri este foarte important, deoarece ofer un feedback la prima parte. n cazul unei prelegeri educaionale, este foarte important de a oferi spaiu pentru ntrebri de clarificare din partea auditoriului. Este foarte important s fie creat o ambian care s ncurajeze punerea ntrebrilor. Faptul c cineva nu a neles ce am comunicat trebuie asumat ca o responsabilitate proprie: noi suntem cei care nu am transmis mesajul suficient de clar, pe limba celuilalt. Astfel, cresc ansele de ndeplinire a obiectivelor prelegerii. De exemplu, dac reprom persoanei care pune ntrebarea c nu a fost suficient de atent, se va altera relaia. n plus, celelalte persoane care aveau intenia de a pune ntrebri se pot rzgndi. Aadar, de ce am reproa? De cele mai multe ori, reproul apare ca o modalitate de aprare: noi am prezentat destul de clar problema (doar suntem cei mai buni, nu?), persoana care nu a neles este vinovat. Or, nu acesta este obiectivul. Sau poate c este? Trebuie s ne decidem ce vrem, aadar, de la bun nceput: vrem s facem tot ce ne st n putin pentru ca ceilali s neleag ce avem de spus sau vrem s demonstrm ct de buni i competeni suntem. Adevrul este c amndou lucrurile sunt posibile. Din punctul meu de vedere, adevrata competen este de a-i face pe ceilali s neleag. Ori de cte ori transmitem mesajul Privii ct de buni suntem direct sau mai puin direct, vorbim de fapt despre propriile noastre ndoieli cum c am fi competeni. Pregtirea materialelor auxiliare Materialele auxiliare au un dublu avantaj. n primul rnd, acestea asigur o mai mare claritate

117

Ctlin Tnase

FoxPro - Note de curs

prezentrii prin folosirea unor imagini, schie, sau grafice. n al doilea rnd, materialele auxiliare menin permanent n prim plan harta prelegerii, att pentru noi, cei care prezentm, ct i pentru cei din public. Materialele auxiliare pot fi de mai multe feluri. Dintre cele mai folosite, menionm: folii transparente pentru retroproiector, plane gata desenate de diferite mrimi, videocasetofonul, sau videoproiectorul conectat la calculator. Fiecare dintre aceste mijloace prezint avantaje i dezavantaje. Cele mai spectaculoase sunt prezentrile care folosesc judicios videoproiectorul conectat la calculator. Cnd folosim materialele auxiliare, este indicat s nu uitm un lucru esenial: aceste mat eriale sunt doar auxiliare, nu mai mult. S nu uitm c noi suntem cei care facem prezentarea, nu calculatorul sau retroproiectorul. Oamenii au venit s ne vad i s ne asculte pe noi n primul rnd, nu calculatorul sau retroproiectorul. nainte de a pregti prelegerea, este necesar s culegem informaii despre posibilitile tehnice ale slii. n funcie de acestea, dar i n funcie de obiectivele prelegerii i de particularitile i ateptrile auditoriul, despre care, de asemenea, trebuie s ne informm. Ideal este ca prelegerea s fie pregtit n mai multe variante, cel puin dou. De exemplu, cu calculatorul i cu ajutorul retroproiectorului. De asemenea, trebuie s fim pregtii i pentru situaii speciale, cum ar fi o pan de curent. n aceast situaie, trebuie s fim capabili s continum expunerea cu ajutorul unei table sau flipchart. Cnd am prezentat prima mea prelegere cu ajutorul calculatorului, am avut neplcuta surpriz s am probleme legate de o incomplet instalare a softului necesar. Evident, acest lucru putea fi evitat dac a fi fcut o prob nainte. Nu a fost posibil, din cauza faptului c videoproiectorul a venit n ultimul moment. Nu aveam nici tabl, nici flipchart. ntr-o astfel de situaie neplcut, am lungit puin deschiderea vorbind despre scopul prelegerii, dnd o imagine global a prelegerii ceva mai extins i captnd interesul incluznd povestioare pline de umor, care aveau legtur cu subiectul. Apoi am nceput expunerea propriu-zis. Acest lucru a fost dificil pentru c reperele expunerii le aveam numai pe calculator. ntre timp, lucrurile au fost puse la punct i am putut folosi i materialul auxiliar. Din aceast experien, am nvat urmtoarele lucruri: 1 o scurt verificare i repetiie nainte de expunere este util; 2 reperele prelegerii le putem pregti pe o foaie separat; 3 este important s nu intrm n panic atunci cnd lucrurile nu merg aa cum ne ateptm; 4 expunerea trebuie pregtit n cel puin dou moduri diferite; 5 povestioarele trebuie i ele pregtite dinainte. Formatul materialelor auxiliare Fiecare plan (slide) trebuie s conin i s respecte urmtoarele: 1 un titlu care s specifice la ce se refer slide-ul; 2 informaiile relevante structurate cu ajutorul numerelor, literelor sau buletts-urilor; 3 este indicat folosirea att a literelor mari ct i a literelor mici; 4 utilizarea culorilor ajut, evitnd scrierea textului cu rou i folosirea simultan a culorilor rou i verde pe acelai grafic; 5 se recomand culoare alb sau galben pe fond albastru; 6 regula lui 7: nu mai mult de 7 linii pe slide i nu mai mult de 6 cuvinte pe linie; 7 folosirea concomitent a imaginilor sau graficelor plasate la stnga i a textului plasat la dreapta; 8 fiecare slide trebuie prezentat ntr-un interval de timp cuprins ntre un minut i jumtate i dou minute;

118

Ctlin Tnase

FoxPro - Note de curs

Expunerea Coninutul expunerii Vom considera prelegerea constituit din patru pri distincte: titlul, deschiderea, corpul expunerii i rezumatul final. 1 - Titlul Titlul prelegerii este foarte important, deoarece acesta va fi reinut n primul rnd. Titlul trebuie s fie scurt i semnificativ. 2 - Deschiderea Deschiderea este esenial. Publicul este foarte curios s afle despre ce este vorba. Deschiderea este decisiv pentru captarea interesului i pentru constituirea unei bune relaii cu publicul. Se spune c Nu ai niciodat o a doua ans s faci o bun prim impresie. Evident, unele persoane care iau parte la prelegere pot avea deja un interes pentru care au venit. Deschiderea confirm sau nu acest lucru. Deschiderea trebuie s includ enunarea scopului prelegerii, prezentarea structurii prelegerii i realizarea unei ancore care s capteze interesul publicului. Scopul prelegerii Scopul prelegerii trebuie enunat prin cteva (1-3) fraze scurte care s aminteasc sau s clarifice ce urmeaz s prezentm. De exemplu, putem spune Obiectivul acestei prelegeri este de a nelege elementele determin succesul unei prelegeri, n cazul unei prelegeri de informare. Sau, putem spune n cele ce urmeaz, voi cuta s obin aprobarea dumneavoastr n ceea ce privete noul plan de investiii dac este vorba de o prelegere de convingere. Structura prelegerii Prezentarea structurii prelegerii are avantajul de a oferi o imagine de ansamblu. Acest lucru mpiedic rtcirea publicului pe parcursul expunerii, deoarece li se ofer att destinaia prelegerii (scopul) ct i harta drumului ce va fi parcurs (structura). Bineneles, este de datoria celui care prezint s joace rolul de ghid pe tot parcursul prelegerii. Structura prelegerii care se prezint n cadrul deschiderii trebuie s aib nu mai mult de 3 elemente, pentru a fi mai uor reinute. Evident, fiecare dintre acestea pot fi la rndul detaliate. n cadrul deschiderii este bine s ne oprim la cele trei puncte principale, rafinarea acestora folosindu-ne pentru o mai eficient gestionare a expunerii propriu-zise. Captarea interesului - ancora Ancora este foarte important pentru o prelegere deoarece este modalitatea de captare a ateniei auditoriului. Pentru a realiza acest lucru, este necesar s rspundem ntrebrilor fireti pe care i le pune, direct sau indirect, fiecare persoan care ne ascult: Ce au toate acestea de-a face cu mine?, Ce beneficiu am eu? Pentru a rspunde la aceste ntrebri, este necesar s cunoatem dorine oamenilor. Principalele dorine pe care le au oamenii sunt urmtoarele: 1 2 3 4 5 de a fi performani; de a ctiga bani; de a fi n siguran; de a fi recunoscui; de a simplifica.

119

Ctlin Tnase

FoxPro - Note de curs

Pentru a ancora o persoan, este nevoie de a rspunde unei dintre dorinele sale principale. n cadrul deschiderii, ne putem adresa mai multor dorine. De regul, avem n vedere o dorin principal i cel mult dou dorine secundare. Iat cteva exemple preluate din cartea lui Gisele Commarmond i Alain Exiga, Arta de a comunica i de a convinge. A fi performant: Recunoaterea vocal, grafic 3D, teleconferine pe PC. Acestea sunt noile tehnologii care vor face diferena ntre ctigtori i ceilali. Noul procesor AMD este cel mai performant procesor PC n momentul de fa. Datorit lui vei fi stpnul viitorului. A ctiga bani: S ateptai s se fac noapte pentru a telefona mai ieftin este ceva de necrezut. Tarif unic: 38 ceni pe minut. Pe viitor putei telefona mai ieftin 24 ore din 24. Aadar, pentru a telefona mai ieftin, ncepei prin a suna chiar acum la Apel gratuit. De ce s continui s plteti prea scump? A te simi n siguran: Titlu cu litere mari: ncredere. Subtitlu: Certitudinea unei prezene constante lng dumneavoastr. Text: Clienii notri au garania c vor beneficia de asistena noastr fr ntrerupere. A fi recunoscut: Pentru cei care s-au sturat s fie ca toi ceilali. Banca BHE v face o ofert ieit din comun, de a v trata ca pe un client unic. Cu BHE nu vei mai fi un simplu numr. A simplifica: Imagine: o palm deschis. Text: V este de ajuns un singur instrument pentru a dispune de toate serviciile Internet. Nu avei nevoie nici mcar de o mn. Un deget ajunge pentru a instala i a configura Eye-box-ul. Eye-box tie s fac totul. Cu mult mai simplu. Cuvinte care asigur o ancor solid A fi performant: competitiv, eficient, a ctiga, lider, numrul 1, puternic, primul, rapid, rezultate, a reui, solid. A ctiga bani: cadou, gratis, economie, reducere, ofert , a investi, ieftin, reducere. A fi recunoscut: liber, la alegerea voastr, mobil, personalizat, calitate, fr angajament, valoare, dumneavoastr, dac l dorii. A te simi n siguran: la adpost, asigurare, ncredere, securitate, siguran, garantat, protecie, dovedit, fr risc, sigur, calm. A simplifica: confort, comod, de prima dat , uor, pe loc, simplu, fr efort, fr grij, linitit. Scenariul Pentru captarea ateniei i crearea unei ancore, cel mai utilizat este mecanismul tensiune destindere aciune. Pentru realizarea acestui mecanism, sunt folosite n mod frecvent scenarii care au la baz urmtoarele elemente: 1. Beneficiul. Avantajele sau rezultatele dorite; 2. O problem sau un obstacol (sau mai multe); 3. O soluie sau mijloace de depire a obstacolelor; 4. Aciunea ce duce la obinerea beneficiului. Cu ajutorul acestor elemente de baz se construiete scenariul ancorrii. Din toat multitudinea de scenarii folosite, dou sunt foarte des ntlnite: scenariul problem-soluie i scenariul dorinsatisfacie. Exemple: 1 Problem-soluie: V-ai sturat s pierdei timpul la cozi pentru a plti factura telefonic, factura de electricitate i toate celelalte facturi? Noi v oferim soluie: serviciul de pli prin cardul bancar. 2 Dorin-satisfacie: Cine nu-i dorete satisfacia pe care o poate tri vizionnd un film pe

120

Ctlin Tnase

FoxPro - Note de curs

ecranul plat al noului model X? Dorina dumneavoastr este deja satisfcut. Doar 300.000 lei pe lun. Nu-i aa c e puin? 3 - Corpul prelegerii Indiferent de tipul i scopul prelegerii, expunerea trebuie s ndeplineasc urmtoarele condiii: s informeze, s pstreze un echilibru ntre fapte i analogii, metafore i poveti, s ofere oportunitatea integrrii informaiilor i s scoat n eviden elementele capitale. Informarea Informarea auditoriului trebuie fcut cu grij. Muli dintre noi cdem n capcana de a oferi prea multe detalii. Rolul prelegerii este de a oferi imaginea de ansamblu, de a clarifica elementele principale ale problemei. Este practic imposibil ca o persoan s poate nelege totul n cel mai mic detaliu n timpul prelegerii. Pentru detalii, pentru mai mult profunzime, putem pune la dispoziia publicului materiale tiprite pe care le vom oferi la finalul prelegerii. Nu la nceput, deoarece exist pericolul pierderii contactului, unele persoane fiind tentate s citeasc materialele oferite. Aadar, este esenial s alegem informaiile cele mai relevante pe care urmeaz s le prezentm. La fel de important este modul n care le prezentm. Informaiile reprezint coninutul, modul de prezentare reprezint procesul. Dac ne gndim c prelegerea noastr este un cadou pe care-l oferim publicului, atunci trebuie s nelegem c plcerea de a-l deschide este cu att mai mare cu ct ambalajul este mai atrgtor. Ambalajul, care mbrac coninutul prelegerii, reprezint procesul. Procesul de prezentare este definit de modul n care interacionm cu publicul. Din acest punct de vedere sunt importante ambiana oferit (spaiul, lumina, temperatura, ambiana sonor), modul de aranjare a scaunelor, vocea, micarea scenic. Vom reveni mai trziu asupra acestui aspect. Echilibrul prezentrii Noi, omenii, suntem diferii. Unora ne plac faptele concrete, date, cifre, procentaje, exemple concrete, reete precise de punere n practic. Altora ne plac povetile, imaginile sugestive, exemple preluate din experiena unor persoane cunoscute. Pentru a oferi echilibru i claritate, este bine s folosim n expunerea noastr, pe lng date precise, cifre i procentaje verificate cu rigurozitate, analogii, comparaii i s nsoim informaiile pe care le oferim cu imagini sugestive. Integrarea Chiar dac reuim cu succes s prezentm informaiile cele mai importante, pstrnd echilibru ntre rigurozitatea cifrelor i cldura figurilor de stil, a povetilor deconectante i a metaforelor, este posibil s nu fie suficient. Muli dintre cei care ne ascult se pot ntreba: i ce dac?, Ce are asta de-a face cu mine?, La ce-mi folosesc mie toate acestea?. ntrebri ct se poate de justificate. Pentru a rspunde la aceste ntrebri, trebuie ca n prelegerea noastr s avem n vedere aspectul integrrii informaiilor prezentate n contextul experienei publicului i al situaiei n care se afl acesta. Putem face acest lucru alegnd exemplificri care au legtur cu activitile persoanelor din public. Avem nevoie pentru aceasta de informaii despre cei care ne ascult, informaii pe care trebuie s le obinem nainte de nceperea prelegerii. Fr integrare, prelegerea poate fi excelent, ns irelevant pentru public. 4 - Rezumatul final Scopul rezumatului final este de a scoate n eviden elementele principale i relevante ale prelegerii. n general, oamenii i aduc aminte cu uurin lucrurile prezentate la nceputul i la sfritul unei prelegeri. Totodat, ei rein lucrurile care au o relevan deosebit pentru ei nii, care se aliniaz nevoilor i intereselor lor. De aceea, este esenial s acordm o atenie deosebit deschiderii i

121

Ctlin Tnase

FoxPro - Note de curs

rezumatului final, precum i ancorrii. Procesul expunerii Comunicarea uman are loc pe trei canale diferite: verbal, paraverbal i limbajul corpului. Verbalul (cuvntul) este suportul coninutului comunicrii, n timp ce paraverbalul i limbajul corpului definesc planul relaiei. n cazul unei prelegeri, dac relaia cu publicul este bun, avem mai multe anse de a inspira ncredere, de capta interesul i de a convinge. n caz contrar, orict de bune i de valoroase ar fi informaiile transmise, exist riscul s nu provoace un impact deosebit asupra publicului. Pentru a ne ctiga o ct mai mare simpatie din partea celor care ne ascult, trebuie s transmitem celorlali c le vrem binele i ne intereseaz persoanele lor. Totodat, trebuie s convingem c tim despre ce vorbim i c vrem s le vorbim lor. n cele ce urmeaz, vom analiza elementele de baz care ne sporesc ansele de a crea o relaie bun cu auditoriul. Primul moment Primul contact este foarte important. Pentru reuita acestuia, trebuie s inem seama de trei elemente: privirea, sursul i cuvntul magic voi. Privirea Trebuie ca, pe ct posibil, s privim fiecare persoan n parte. De asemenea, este bine s avem n vedere faptul c un contact vizual prelungit ar putea s creeze o stare de disconfort pentru anumite persoane. Aadar, dac e posibil, vom privi fiecare persoan n parte, iar dac numrul de persoane este mare, vom privi pe rnd n diferitele zone ale slii. Este cunoscut tehnica numit tergtorul de parbriz care const n a mtura cu privirea toat sala. Din acest punct de vedere, a vrea s atrag atenia asupra unui lucru important: este bine s privim persoana, nu s ne facem c o privim. Este la fel ca n cazul ascultrii: ne putem face c ascultm, putem mima acest lucru, dar e mai bine s ascultm pentru a nelege. Mimarea nu aduce ctiguri reale. Pn la urm, acest lucru se observ. Aadar, vom privi cu atenie ct mai multe persoane din sal pentru a observa cum se simt ele cu informaiile pe care le furnizm. Provoac sau nu interes, sunt sau nu crezute, persoanele ne ascult sau nu cu plcere. Este un feedback foarte util pentru noi, cei care inem prelegerea, pentru a ne ajusta modul n care prezentm. De exemplu, o persoan se poate plictisi pentru c nu nelege sau pentru c nu i-am captat atenia descoperind ce interese are. Poate c folosim prea multe cifre sau poate c suntem prea serioi. Cnd observm acest lucru, ne putem ntreba dac nu este cazul s prezentm un exemplu concret, s facem o comparaie sau s spunem o istorioar cu haz. Dimpotriv, dac observm mai multe persoane serioase care se ncrunt uor, ar putea fi vorba de persoane cu competene n domeniu care ateapt detalii precise, cifre i fapte. n acest caz, ne putem gndi dac am pstrat echilibrul ntre cifre, fapte i exemple i dac nu cumva am exagerat cu povetile. Aceste lucruri vin cu experiena. Ceea ce este important este faptul c toate aceste feedback-uri nonverbale sau verbale le putem folosi n favoarea noastr. Exist tendina, natural pentru cei dintre noi mai puin experimentai sau mai puin ncreztori n noi, s ne simim atacai de astfel de semnale. Este o atitudine care nu favorizeaz nici bunul mers al prelegerii, nici propriul nostru progres. n loc s ne concentrm pe obiectivele prelegerii, este foarte probabil s ne preocupm de aprarea imaginii atacate. Zmbetul Zmbetul este un semn de ncredere, de destindere, de bunvoin, ce demonstreaz c suntem bine pregtii i avem plcerea de a le vorbi celor din faa noastr. n plus, zmbetul face ca privirea noastr s nu fie aspr sau scruttoare. Totui, exist momente cnd zmbetul nu ne este la ndemn. Pentru a zmbi n aceste momente, avem nevoie s exersm zmbetul. Pn atunci, este bine s zmbim doar atunci cnd simim c zmbetul

122

Ctlin Tnase

FoxPro - Note de curs

vine din interiorul nostru. Este mai bine s fim autentici dect s zmbim forat. Ce nseamn un zmbet forat putem vede la unele prezentatoare de televiziune, sau la unii oameni politici. Vocea Vocea trebuie s fie clar, suficient de ridicat pentru a fi auzit n bune condiii de toat lume. Trebuie s evitm monotonia. n egal msur, nu este de dorit s exagerm cu schimbrile de tonalitate i prea multe inflexiuni. Ritmul trebuie s fie ceva mai lent dect atunci cnd avem o discuie obinuit, pentru a oferi suficient timp publicului s digere ceea ce spunem. Cuvintele Atunci cnd vorbim, putem folosi o limb vie, sau o limb moart. Limba vie este caracterizat de 1 folosirea frazelor scurte (cu cel mult 15 cuvinte); 2 folosirea cuvintelor scurte (3 silabe); 3 folosirea verbelor de aciune: a propune, a evolua, a dobndi, a utiliza, a aciona, a face, a privi, a oferi etc.; 4 eliminarea cuvintelor de prisos sau pompoase i a clieelor; 5 folosirea limbajului simurilor: a vedea, a auzi, a simi. n ceea ce privete limbajul simurilor, este bine s ne amintim c fiecare dintre noi avem un sim predominant, de regul unul dintre cele trei menionate mai sus: vzul, auzul, kinestezicul. Cei care au ca sim predominant vzul se vor simi acas atunci cnd sunt folosite urmtoarele cuvinte: orbitor, ceos, licritor, imens, limpede, luminos, transparent, minuscul, laser, licrire, ntunecat, tulbure, prim-plan, reflex, a sri n ochi, a zri, viziune, clarviziune, a scruta, spectacol, imagine, poz. Se vor simi bine dac vor desena, scrie la tabl, vor privi poze, imagini, diagrame, scheme. Cei care au ca sim predominant auzul, se vor simi acas atunci cnd sunt folosite urmtoarele cuvinte: zgomotos, surd, silenios, detonare, armonie, urlet, orchestr, petard, ascultare, rsuntor, clipocit, zornit, tunet, plesnet, trosnet, a ciuli urechile, a zbrni, a bate, a sufla, tic-tac, hrmlaie. Cei care au ca simul kinestezic predominant, se vor simi acas atunci cnd sunt folosite urmtoarele cuvinte: catifelat, jucu, tensionat, contact, elan, aspru, blnd, glacial, greoi, picant, ameeal, suplu, mobil, destins, rigid, a avea frisoane, a comprima, a nghea, a pipi, a palpa, a respira, a strnge, a nlemni. Le place s fie n micare, s fac ceva, s primeasc eantioane. mbrcmintea n cazul n care publicul nostru va fi format n mare parte din bancheri, ne vom mbrca, evident, cu un costum sobru i vom adopta mai degrab o inut serioas. n cazul n care vorbim unor oameni care lucreaz n publicitate sau unor sportivi, ne vom gndi la o inut mai lejer, chiar sportiv. Ceea ce este important, este s inem cont de public, dar i de noi nine. S folosim hainele care ne reprezint, s fim noi nine. inuta Trebuie s evitm s ne ascundem n spatele unui pupitru sau al unei catedre. Vom fi dinamici, ne vom mica ntr-un mod ct mai natural cu putin prin ncpere. Avem grij s nu exagerm, s nu ne agitm prea mult, doar de dragul de a ne mica. n principiu, este bine s nu ne aezm nici pe scaun, nici pe mas. Dispunerea scaunelor Pentru a crea o relaie bun cu publicul, este necesar s avem un contact vizual i auditiv

123

Ctlin Tnase

FoxPro - Note de curs

corespunztor. n funcie de numrul persoanelor care asist la prelegerea noastr, avem mai multe variante, astfel nct s ne adresm tuturor persoanelor prezente i s avem contact vizual cu acestea. Evidenierea aspectelor importate innd cont c memoria uman are limitele ei (n condiii de stres, uitm repede, cu uurin o mulime de lucruri), este necesar s scoatem n eviden lucrurile importante ale prelegerii. Vom face acest lucru pe tot parcursul prelegerii subliniind elementele relevante care definesc structura expunerii. Putem scoate n eviden aspectele importante 1 folosind cuvinte ca: elemente cheie, critic, deosebit de important, crucial, capital, relevant; 2 rezumnd i concluzionnd de mai multe ori pe parcursul unei prelegeri; 3 folosind ntrebri retorice i pauze: S ne gndim cteva clipe, s ne ntrebm; 4 folosind cu msur umorul. ntrebri i rspunsuri Scopul principal al seciunii de ntrebri i rspunsuri este de a verifica ndeplinirea obiectivelor prelegerii. Am comunicat informaiile avnd tot timpul n atenie obiectivele propuse. Acum, este timpul de a verifica ct i ce au neles cei care ne-au ascultat. Unii recomand ca timpul pe care-l rezervm acestei seciuni s fie de circa trei ori mai mare dect timpul destinat expunerii. Aa cum am mai precizat, timpul expunerii trebuie s fie de circa 15 minute, durata medie la care un adult poate fi atent. n acest caz, seciunea de ntrebri i rspunsuri va dura circa 45 de minute. Modalitatea clasic este de a prelua o ntrebare i de a da un rspuns. Trebuie s cutm ca acesta s fie ct mai clar i mai concis. Motivul prezenei noastre nu este acela de a rspunde la ntrebri, ci de a convinge sau de a furniza informaii noi, de a educa. Studiile efectuate au evideniat faptul c, n majoritatea cazurilor, persoanele ce au asistat la prelegeri au cutat rspunsul n prima fraz primit. Restul, de cele mai multe ori, a fost umplutur. Puin diferit este situaia prelegerilor de informare (educative), cum ar fi cursurile. n acest caz, dac este cazul, se pot da rspunsuri mai detaliate. n ambele cazuri, este foarte important s ne adresm tuturor persoanelor prezente, nu numai persoanei care a ntrebat. De regul, sunt patru tipuri de ntrebri pe care le pun oamenii n mod curent: 1 ntrebrile de informare, prin care persoana caut obinerea unor informaii de detaliu, care nu au fost oferite n timpul prelegerii. 2 ntrebrile de clarificare, prin care persoana caut s neleag mai bine despre ce este vorba. Dei au fost furnizate toate informaiile, persoana nu a neles. 3 ntrebrile care exprim ndoieli. Lucrurile sunt clare, persoana a neles despre ce este vorba, dar nu are nc ncredere. 4 ntrebrile de testare. Persoana a neles, are ncredere n ceea ce s-a prezentat, dar nu are nc ncredere n noi sau n firma noastr i ne testeaz. Este bine s privim fiecare ntrebare ca o msur a distanei dintre locul n care se afl persoana i locul unde am dori noi s se afle. Prin rspunsul pe care-l oferim, cutm s micorm aceast distan. Dup ce am furnizat un rspuns clar i concis, vom testa efectul acestuia punnd o ntrebare test. Ne putem da seama de tipul ntrebrii att din coninut, dar mai ales innd cont de limbajul nonverbal. Dup ce am rspuns unei ntrebri de informare, putem ntreba: Am rspuns ntrebrii dumneavoastr?, Suntei mulumit cu rspunsul pe care vi l-am oferit? Dup ce am rspuns unei ntrebri de clarificare, putem ntreba: Acum este clar pentru dumneavoastr?, nelegei ce vreau s spun?

124

Ctlin Tnase

FoxPro - Note de curs

Dup ce am rspuns unei ntrebri care exprim o ndoial, ntrebri de genul celor enunate mai sus nu sunt relevante, deoarece persoana ar putea rspunde afirmativ, chiar dac simte altfel. De aceea, este mai eficient s ntrebm: V simii n siguran cu rspunsul meu?, Rspunsul meu nltur reinerile (ndoielile) dumneavoastr? Se poate ntmpla ca prima ntrebare s ntrzie s apar. Putem trece peste acest moment, spunnd ceva de genul: de multe ori sunt ntrebat Concluzie Avem acum o idee de ce unele prelegeri au succes, iar altele nu. Pentru a reui, trebuie s facem urmtorul pas: exersarea. Aadar, s aplicm cele de mai sus n prelegerile pe care le susinem. Pentru a ne antrena, trebuie s ne crem singuri oportunitile de a susine prezentri sau prelegeri. Dac nu facem acest lucru, ocazia real ce ni se va oferi cndva ne va prinde nepregtii. Cum spunea Winston Churchil, Pentru fiecare om vine momentul cnd ansa i va surde. El doar trebuie s fie pregtit. S ne antrenm, aadar. S profitm de fiecare ocazie ce ni se ofer, iar dac nu, s ne crem singuri aceste anse. S fim pregtii ca primele noastre prezentri s nu fie perfecte. Vom face greeli. Dar, oare, este posibil s nvm fr a face greeli? Cine se teme de greeli, nu progreseaz. S ne antrenm, s inem prelegeri, s ne expunem greelii, s cerem feedback de la public pentru a le descoperi. S nvm din greeli. Aceasta este cea mai sigur cale de a progresa i ne ofer hri utile pentru drumul pe care dorim s-l parcurgem. Harta nu este drumul. Este o diferen enorm ntre a ne imagina c mergem urmrind drumul pe hart i a cltori efectiv. Putem face acest lucru ntre noi, apelnd la prietenii sau colegii interesai s ne asculte. i vom asculta la rndul nostru i i vom ajuta s se perfecioneze. De cele mai multe ori, ne este team de reacia publicului. Este firesc s fie aa, mai ales c am crescut ntr-un mediu educaional critic, n care reproul era (i nc mai este) considerat un factor motivaional. Fals, nimeni nu poate progresa autentic ntr-un mediu definit de reprouri, de evidenierea lucrurilor care nu sunt fcute bine. Dimpotriv, ambiana pozitiv definit de sublinierea lucrurilor bine fcute este calea progresului autentic. Principii de lucru n echip Crearea unei echipe reprezint un sistem de mbuntire a colegialitii de munc dintre membrii unei colectiviti care conlucreaz i determin urmtoarele: rezolvarea problemelor, luarea de decizii, diminuarea conflictelor. Toate aceste elemente, n cazul nerezolvrii lor, nu permit atingerea unui el final. Acest tip de conlucrare este utilizat n cadrul unor companii ce conin mai multe brane industriale. Fiecare membru din cadrul companiei trebuie s fie clar informat ce are de realizat i care este scopul final pe care i-ar dori s l ating compania. De exemplu, s lum n discuie un proiect foarte amplu, cum ar fi elaborarea unui sistem de operare (Windows, Linux etc.). La un astfel de proiect particip foarte muli programatori (de ordinul miilor), uneori din ri diferite. Cu ct numrul de participani este mai mare, cu att sarcinile pe care le au de ndeplinit sunt mai simple (mai puin extinse), astfel nct timpul de realizare a produsului final se scurteaz. n majoritatea cazurilor, din motive de securitate, un participant la un astfel de proiect nu tie care sunt sarcinile celorlali participani. n cadrul acestui tip de participare, echipele nu sunt create cu scopul de a realiza ceva simplu, ci procese mult mai complexe, n care soluia gsit nu este numai una. Se pronun mai multe idei, dintre

125

Ctlin Tnase

FoxPro - Note de curs

care este aleas ideea cea mai rezonabil, de o calitate superioar gndirii numai a unui singur individ. n cazul unui singur individ, se pot genera idei eronate, care se poate extinde nesatisfactor, iar n interiorul unei echipe sunt definite i lmurite toate ideile propuse de membri, iar cele greite sunt eliminate din start. Deciziile sunt propulsate i dezvoltate mai departe de toi membrii echipei. Membrii echipei i asum responsabiliti mult mai mari i sunt gata de rspundere, dar oricum sunt cunoscute graniele acestor riscuri asumate. Modul ales pentru rezolvarea unei probleme este bine argumentat i motivat. La acest tip de conlucrare, membrii echipei nva unul de la altul, ceea ce determin o nvare mai rapid a metodelor i procedeelor utilizate. n mare msur, lucru n echip a devenit parte integrant pentru multe companii. Avantajele acestui tip de colaborare sunt: - scopul i rolul fiecrui membru este bine determinat; - analiza membrilor echipelor i evaluarea comportamentului fiecruia; - modul de strngere rapid a echipelor sau a conductorilor acestora; - promovarea unui lider nou din interiorul echipelor; - soluionarea conflictelor din interior i eliminarea comportamentelor neadecvate; - aprobarea preferinelor i modurilor de munc. A fi eficient ntr-o echip nseamn presupune
A lucra i contribui la atingerea unui set de scopuri i obiective ale echipei. A recunoate cum competenele i punctele forte ale celorlali contribuie la cldirea unei echipe eficiente. A demonstra iniiativ i a contribui la obinerea rezultatelor. A manifesta promptitudine n ajutarea celorlali membri ai echipei n gsirea soluiilor, pentru a obine rezultatele scontate. A accepta i oferi feedback ntr-un mod constructiv i sensibil. A nelege rolul greelilor i al conflictelor n promovarea dezvoltrii echipei.

Lucrul n echip reprezint modul fundamental de interaciune pentru membrii oricrei organizatii, mare sau mic. Lucrul ntr-o echip poate nsemna s lucrezi cu un grup de oameni care stau n aceeai ncpere cu tine, s lucrezi cu un grup de oameni dintr-un birou diferit sau chiar dintr-o ar diferit. Dac un grup de oameni lucreaz mpreun pentru un obiectiv comun i dac lucreaz mpreun la aceeai sarcin, atunci acetia sunt o echip, indiferent de poziia lor geografic. De ce este important pentru organizaii s ncurajeze munca eficient n echip? Lucrnd eficient mpreun, o echip poate reui lucruri pe care alii nu le pot realiza n mod individual. De ce? Nu pentru c au cei mai buni performeri individuali, ci pentru c lucreaz eficient mpreun pentru acelai scop. O echip este alcatuit dintr-un grup de membri cu competene complementare. Repetm, echipa poate lucra eficient numai dac toi membri recunosc punctele forte i competenele celorlali, pentru a maximiza potenialul echipei. Dei recunoaterea capacitilor i punctelor forte ale celorlali este important, o echip eficient va oferi posibilitatea i ca indivizii s-i dezvolte competene noi. ntr-adevr, un indicator important al unei echipe puternice este reprezentat de situaia n care membrii echipei se instruiesc reciproc pentru a dezvolta competene in domenii noi, permindu-le, prin urmare, s fie mai flexibili n modul n care i mpart sarcinile ntre ei. Este dificil s mbunatateti eficiena unei echipe dac nu este toat lumea implicat n trecerea n revist periodic a progresului lor, identificarea aspectelor pozitive i a celor care ar putea fi realizate diferit sau mai bine. Att procesele, cat i relaiile dintr-o echip pot avea un impact semnificativ asupra succesului acesteia. Tratarea relaiilor n special poate fi o problem delicat i trebuie efectuat ntr-un mod corespunztor, astfel nct feedback-ul s fie obiectiv, constructiv i s se adreseze comportamentului fiecrui individ, care de fapt este schimbtor.

126

Ctlin Tnase

FoxPro - Note de curs

n concluzie, lucrul ntr-o echip nu nseamn c relaiile vor fi ntotdeauna armonioase. Rareori se va ntmpla s deinei controlul absolut asupra celor care sunt n echipa voastr i, pe parcurs, pot interveni conflicte ntre personaliti. Conflictul n cadrul unei echipe este privit de experi ca o etap natural n progresul ctre construirea unei echipe cu adevrat performante. Conflictele apar atunci cnd indivizii dintr-o echip se simt n stare s-i exprime adevratele gnduri i sentimente i, prin urmare, sunt date la iveal diferene de opinie i principii. Recunoaterea i tratarea acestei situaii este esenial pentru progresul echipei i, de multe ori, n aceast etap, se manifest adevratele zone de dezvoltare a indivizilor, iar membrii echipei pot vorbi deschis i liber ntre ei. Recomandri 1 - Asigurai-v c toat lumea nelege clar sarcina de la nceput i c urmrete acelai obiectiv. 2 - Valorificai ideile ntregii echipe referitoare la modul n care vei atinge obiectivul. Justificai-v propriile idei i respectai opinia celorlali. 3 - Ajungei la un consens, referitor la modul n care va fi organizat munca pentru atingerea obiectivului. 4 - Oferii asisten celorlali i solicitai ajutor, dac avei nevoie. 5 - ndeplinii sarcina i pstrai-v reciproc la curent cu progresul acesteia.

127

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