Initiere in Visual FoxPro

26
Initiere in Visual FOXPRO Autor: Eugen Maftei www.cartiaz.ro – Carti si articole online gratuite de la A la Z Initiere in Visual FOXPRO Note de curs Autor Mat. Eugen Maftei 1

description

fox pro

Transcript of Initiere in Visual FoxPro

Page 1: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Initiere in Visual FOXPRONote de curs

AutorMat. Eugen Maftei

1

Page 2: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Organizarea datelor în Baze de Date (BD)

IntroducereDatele prelucrate cu ajutorul calculatorului sunt organizate, adică au o anumită

structură. Cele mai obişnuite forme de organizare a datelor sunt bazele de date. Există mai multe definiţii pentru bazele de date. Pentru început vom accepta ideea că “o bază de date este o colecţie de date structurate conform unui model de date şi care serveşte uneia sau mai multor aplicaţii”. Un model de date este un set de noţiuni, concepte şi reguli pentru structurarea şi prelucrarea datelor cu ajutorul calculatorului.

În istoria bazelor de date se cunosc mai multe modele de date:- modelul ierarhic,- modelul reţea,- modelul relaţional,- modelul obiectual.Dacă modelul ierarhic şi reţea de organizare a bazelor de date reprezintă trecutul în

istoria bazelor de date, modelul relaţional face istoria prezentului, iar modelul obiectual bate la uşa istoriei bazelor de date.

În continuare vor fi dezvoltate ideile de bază ale modelului relaţional.Modelul relaţional (fundamentat de Dr. E.F.Codd în anul 1970) se bazează pe

prelucrările ramurii matematicii cunoscută sub numele de Algebra Relaţională. Aceste prelucrări implică:

- o colecţie de obiecte numite relaţii (tabele),- un set de operatori care acţionează asupra relaţiilor pentru a produce noi relaţii.O relaţie poate fi văzută ca o tabelă (cu linii şi coloane) şi reprezentă forma principală

de organizare a datelor într-o bază de date de tip relaţional.

Organizarea datelor in tabeleTabela (relaţia) este o colecţie de date cu o anumită structură, şi are un nume prin

care se identifică. Datele dintr-o tabelă sunt organizate în linii (înregistrari).Liniile unei tabele sunt formate dintr-o succesiune de valori numerice sau nenumerice

- acelaşi număr de valori pentru fiecare linie. Valorile de pe o anumită coloană au aceeaşi semnificaţie din lumea reală.

Să presupunem că avem o tabelă, cu numele SALARIATI, în care sunt stocate date despre salariaţii unei organizaţii, după cum urmează:

110 Popescu Ion Bucuresti 20.04.1975 Director 3500 350 10130 Ionescu Petre Cluj 05.10.1979 Cont.sef 3000 300 10120 Georgescu Vasile Iasi 11.11.1969 Programator 3000 400 20. . . . . . . . . . . .

Analizând datele din tabela SALARIATI se poate aprecia că:- valorile de pe prima coloană au semnificaţia de Marcă Salariat- valorile de pe a 2-a coloană au semnificaţia de Nume Salariat,- valorile de pe a 3-a coloană au semnificaţia de Prenume Salariat,- valorile de pe a 4-a coloană au semnificaţia de Locul de Naşterii,- valorile de pe a 5-a coloană au seminificaţia de Data Naşterii,- valorile de pe a 6-a coloană au semnificaţia de Funcţia,

2

Page 3: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

- valorile de pe a 7-a coloană au semnificaţia de Salar,- valorile de pe a 8-a coloană au semnificaţia de Spor,- valorile de pe ultima coloană au semnificaţia de Cod Servici

Semnificaţia valorilor de pe o linie se exprimă prin noţiunea (conceptul) de Câmp. Câmpul este cea mai mica unitate informaţională, identificabilă şi accesibilă, utilizată în structurarea (organizarea) datelor. Mulţimea câmpurilor definesc structura tabelei, iar valorile care formează o linie reprezintă valorile câmpurilor din structura tabelei.

În general un câmp este caracterizat prin:- nume (prin care se identifică şi se face referire),- t ipul câmpului, prin care se defineşte natura valorilor care se pot memora în

câmp (numerică, şir de caractere, dată calendaristică, etc.)- lungime (dimensiune) câmp, care defineşte numărul maxim de caractere a

celei mai mari valori a câmpului,

Identificarea liniilorModelul relaţional permite identificarea liniilor dintr-o tabelă prin conceptual de cheie

primară (index primar). Cheia primară este formată dintr-un câmp sau grup de câmpuri a cărui valori identifică în mod unic liniile într-o tabelă. Nu sunt admise două linii în tabelă pentru care câmpul sau grupul de câmpuri declarat cheie primară (index primar) să aibă aceeaşi valoare.

Organizarea tabelelorPentru a organiza o colecţie de date sub forma unei tabele, mai întâi trebuie să definim

structura tabelei. A defini structura a unei tabele înseamnă a specifica, cel puţin:- numele tabelei,- câmpurile tabelei, iar pentru fiecare câmp să se specifice:

. numele câmpului,

. tipul câmpului,

. lungimea câmpului,

În aceste condiţii structura tabelei SALARIATI ar putea fi definită în felul următor:Nume tabelă: SALARIATI

Coloane: CODS N,3NUMES C,10PRENS C,15LOCNAST C,12DATAN DFUNCTIA C,10SALAR N,5SPOR N,4CODSERV N,2

După descrierea structurii unei tabele, tabela poate fi populată cu date (adică se pot introduce linii în tabelă).

Atenţie. Faceţi diferenţa dintre stuctura unei tabele şi datele tabelei (aşa cum faceţi deosebirea dintre proiectul unei case şi casa propriu-zisă).

3

Page 4: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Asupra datelor unei tabele se pot efectua următoarele operaţii:- introducerea (memorarea) de noi linii,- ştergerea anumitor linii,- modificarea liniilor, adică modificarea valorilor anumitor câmpuri de pe anumite

linii,- citirea (regăsirea, localizarea) anumitor linii din tabelă în vederea prelucrării

datelor din aceste linii.

Asupra structurii unei tabele se pot face urmatoarele operaţii:- introducerea de noi câmpuri,- ştergerea unor câmpuri,- modificarea caracteristicilor anumitor câmpuri,

Organizarea datelor în baze de date relaţionaleÎn modelul relaţional, o bază de date poate fi considerată “o colecţie de una sau mai

multe tabele dependente între ele, care servesc uneia sau mai multor aplicaţii”. Pentru a înţelege mai bine noţiunea de baza de date să definim, mai întâi, "ce se înţelege prin tabele dependendente?".

Fie 2 tabele T1 şi T2. Spunem ca tabelele T1 şi T2 sunt dependente sau în corespondenţă, dacă oricărei linii din tabela T1 îi corespunde cel puţin o linie din tabela T2. În acest caz, T1 reprezintă "tabela părinte", tabela T2 reprezintă "tabela copil", iar dependenţa dintre aceste tabele este reprezentată prin diagrama din Figura 1.

Atenţie. UneleSGD-urii (ex. Visual FOXPRO) folosesc termenul de relaţie, probabil mai sugestiv, în locul termenilor de corespondenţă sau dependenţă. În acest curs vor fi utilizaţi termenii de corespondeţă sau dependenţă pentru a se evita confuzia cu termenul de relaţie utilizat de E.F.Cod pentru tabelă. Dacă am utiliza termenul de relaţie am fi tentaţi, uneori, să utilizăm expresia “relaţia dintre relaţii”.

Figura 1 Diagrama dependenţei a două tabele

Dacă oricărei linii din tabela T1 îi corespunde o singură linie din tabela T2 atunci corespondenţa dintre cele doua tabele este tipul 1:1 (unu la unu) (Figura 2.A).

4

Page 5: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Dacă există linii din tabela T1 cărora le pot corespunde mai multe linii din tabela T2 atunci corespondenţa dintre cele doua tabele este de tipul 1:N (unu la mai mulţi sau 1 la N) (Figura 2.B).

Figura 2 Dependenţe 1:1 şi 1:N

Definirea dependenţelor

Maniera cea utilizată pentru definirea dependenţelor dintre două tabele este aceea a definirii unui câmp de legătură. Câmpul de legătură este format din una sau mai multe câmpuri, care apar în structura ambelor tabele cu aceeaşi semnificaţie sau semnificaţii echivalente în lumea reală. Unei linii părinte din tabela părinte îi va corespunde linia sau liniile fiu din tabela copil, pentru care câmpul de legătură din liniile copil are aceeaşi valoare cu câmpul de legătură din linia părinte.

Între tabele unei baze de date relaţională pot fi definite două categorii de dependenţe:- dependenţe permanente,- dependenţe temporare.

Dependenţele permanente

Dependenţele permanente au o durată mare de existenţă, chiar atât timp cât există baza de date, dacă se doreşte. Rolul dependenţelor permanente este acela de a defini condiţii de integritate referenţială, care au la bază principiul că "într-o tabelă copil nu trebuie să existe nici o linie care să nu corespundă unei linii din tabela părinte" (nu sunt admişi copii fără părinţi, adică copii orfani).

Condiţia de integritate referenţială permite existenţa de liniii în tabela părinte cărora nu le corespund nici o linie în tebela copil. În general, în această situaţie se atribuie ca linie copil o linie vidă.

Dependenţele temporare

Dependenţele temporare, după cum sugerează şi denumirea sunt cu caracter temporar. O dependenţă temporară este definită pentru a simplifica prelucrările care implică date din mai multe tabele dependente. Dependenţele temporare pot de tipul părinte/copil de tipul1:1 sau 1:N. În cazul dependenţelor de tipul părinte/copil între două tabele A şi B pot să apară situaţii de genul:

- o prelucrare poate să ceară ca tabela A să fie părinte şi tabela B să fie copil,- iar altă prelucrare să ceară tabela B părinte şi tabelă A copil.

ObservaţieÎn cazul mai multor tabele dependente între ele, indiferent de tipul dependenţei, pot să

apară următoarele situaţii: 5

Page 6: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

- o tabelă să fie tată la mai multe tabele fiu,- o tabelă să fie tabelă fiu pentru mai multe tabele tată,- o tabelă să fie fiu în raport cu o tabelă şi să fie tată în raport cu altă tabelă.

Structura unei baze de date

Dacă la începuturile organizării datelor în baze de date, o bază de date conţinea numai date, astăzi bazele de date permit ca pe lângă date să conţină şi alte tipuri de informaţii cum ar fi cod de programe, forme, rapoarte, etc.. Din aceste motive o bază de date poate fi privită ca un container în care pot fi stocate obiecte de diverse tipuri , gestionată de un instrument software specializat, numit Sistem de Gestiune a Bazelor de Date (SGBD), care serveşte uneia sau mai multor aplicaţii utilizator. Obiectele pot fi de tip:

- tabelă, vedere,- cod program,- formă , raport, etc..

O bază de date relaţională trebuie să respecte o serie de reguli, printre care:- o bază de date relaţională apare ca o colecţie de tabele (relaţii),- două tabele dintr-o bază de date nu pot avea acelaşi nume,- într-o tabelă nu sunt admise duplicatele (doua linii identice),- ordinea liniilor dintr-o tabelă este nesemnificativă,- ordinea coloanelor dintr-o tabelă este nesemnificativă,- valorile de pe coloane sunt atomice (nedecompozabile),- liniile dintr-o tabelă pot fi identificate prin intermediul valorilor unei coloane sau a

mai multor coloane, care pot forma aşa numitele chei unice sau chei primare ,- reducerea la maximum a redundanţelor,- operaţiile asupra datelor din tabele se execută prin intermediul operatorilor

relaţionali,- limbajul utilizat pentru regăsirea şi întreţinerea datelor este un limbaj ne-

procedural, prin care nu se cere utilizatorului să definească căile de acces la date sau să cunoască structura fizică a datelor.

Rolul dependenţelor permanente între tabeleDependenţele permanente sunt utilizate, în majoritatea bazelor de date relaţionale,

pentru definirea condiţiilor de integritate referenţială.Dacă între două tabele s-a definit o dependenţă permanentă, părinte/copil, atunci

condiţia de integritate referenţială, definită pe tabele, afectează următoarele operaţii:- Introducerea de noi linii în tabela copil. Orice linie nouă pentru tabela copil este

acceptată, dacă valoarea cîmpului de legătură se regăseşte printre valorile campului de legătură din liniile tabelei părinte, ceea ce însemnă că pentru linia copil din tabela copil există o linie părinte în tabela părinte. Dacă valoarea câmpului de legătură nu se regăseşte printre valorile câmpului de legătură din liniile tabelei părinte, linia nu este acceptată în tabela copil.

- Ştergerea de linii din tabela tată. Dacă unei linii parinte din tabela parinte nu-i corespunde nici o linie copil în tabela copil, atunci linia din tabela parinte poate fi

6

Page 7: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

ştearsă. Dacă unei linii parinte din tabela parinte îi corespunde cel puţin o linie copil în tabela copil, atunci poate fi întreprinsă una din următoarele acţiuni:

. linia din tabela parinte nu se şterge,

. ştergerea liniei parinte este însoţită de ştergerea liniilor copil corespunzătoare din tabela copil: are loc fenomenul de ştergerea în cascadă.

- Modificarea valorilor câmpului de legătură din tabela tată. Dacă unei linii parinte din tabela parinte nu-i corespunde nici o linie copil în tabela copil, atunci valoarea câmpului de legătură din linia părinte poate fi modificată. Dacă unei linii părinte din tabela parinte îi corespunde cel puţin o linie copil în tabela copil, atunci poate exista una din următoarele situaţii:

. nu se poate modifica valoarea câmpului de legătură din linia parinte,

. modificarea valorii câmpului de legătură din linia parinte este însoţită de modificarea cu aceeaşi valoare a câmpului de legătură din liniile copil corespunzătoare din tabela copil: are loc fenomenul de modificare în

cascadă.- Modificarea valorilor câmpului de legătură din tabela copil. La modificarea

valorii câmpului de legătură dintr-o linie a tabelei copil poate să apară una din situaţiile:

. dacă noua valoare a câmpuluii de legătură nu se regăseşte printre valorile câmpului de legătură din liniile tabelei părinte, atunci noua valoare nu este acceptată,. dacă noua valoare a câmpului de legătură se regăseşte printre valorile câmpului de legătură din liniile tabelei părinte, atunci noua valoare este acceptată: deci linia copil îşi schimbă linia părinte.

Indexarea tabelelorCitirea liniiilor dintr-o tabelă se poate face în două moduri:

- în mod secvenţial,- în mod direct.

În citirea secvenţială pentru a citi linia cu numărul k trebuie citite cele k-1 linii anterioare, adică altfel zis, liniile din tabelă se citesc una dupa alta în ordinea în care ele sunt memorate în tabelă.

Prin citirea în mod direct o linie este localizată direct, fără a mai fi nevoie de citirea altor linii din tabelă. Citirea în mod direct se bazează pe aşa numitele "criterii de selecţie", care pot fi:

- numărul sau identificatorul intern al liniei în cadrul tabelei,- valorile unei coloane sau a unui grup de coloane din structura tabelei.Citirea în acces direct pe baza valorilor unui coloane sau a unui grup de coloane se

face prin tehnica indexării.

În ce constă tehnica indexarii?O coloană sau un grup de coloane din structura tabelei sunt declarate "coloană

index", prescuratat "index" sau "coloană cheie", prescurtat "cheie". Pe baza coloanei index, se crează o "tabelă index", care este formată din "înregistrări index".

În general, o înregistrare index este formată din două valori: valoarea indexului (coloanei index) şi valoarea care reprezintă numărul sau identificatorul intern (adresa liniei) al liniei corespunzătoare din tabelă (Figura. 4).

7

Page 8: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Figura 4 Înregistrarea index

În tabela index, înregistrările index sunt memorate în ordinea crescătoare sau descrescătoare a valorilor indexului (vezi exemplul din Figura 5).

Citirea în acces direct pe baza unui index, presupune faptul ca utilizatorul furnizează valoarea indexului (coloanei index) iar sistemul citeşte înregistrarea index pentru care indexul are valoarea indicată. În acest caz procesul de citire se desfaşoară în modul următor:

- mai întâi, se citeşte înregistrarea index din tabela de index, pentru care indexul are valoarea indicată (există metode de citire directă a înregistrărilor index, favorizate de faptul ca înregistrările index sunt ordonate după valoarea indexului),

- iar apoi, pe baza numărului sau identificatorului intern al liniei găsit în înregistrarea index se citeste direct înregistrarea corespunzatoare din tabelă (vezi Figura 5).

În unele situaţii indexarea este utilizată şi pentru citirea secvenţială. În acest caz, liniile nu mai sunt citite secvenţial în ordinea în care sunt memorate în tabelă, care reprezintă "ordinea fizică", ci în ordinea dată de înregistrările index din tabela de index, care reprezintă "ordinea logică". În acest caz, indexarea în citirea secvenţială, oferă o ordonare a liniilor dintr-o tabelă, fără ca liniile din tabelă să fie ordonate fizic. Citirea secvenţială a liniilor tabelei din Figura 1.5 va furniza liniile din tabelă în ordinea: 2, 4, 1, 5, 3.

Fig. 5 Tabelă index

Indecşii asociaţi unei tabele se pot defini: fie la definirea structurii tabelei, fie ulterior în mod explicit prin comenzi dedicate. Pentru o tabelă pot fi definiţi, în general, oricâţi indecşi dorim, dar aspectele legate de performanţă cer ca numărul acestora să fie redus (cel mult 2 sau 3 indecşi pentru o tabelă).

Tipuri de indecşi

În practica structurării tabelelor există următoarele tipuri (categorii) de chei (indecşi):- chei candidate (indecşi candidaţi), pentru care nu există două linii în care cheia

să aibă aceeaşi valoare: pot fi definiţi mai multe chei candidaţi pentru o tabelă,- cheie primară (indecşi primar), pentru care nu există două linii în care cheia să

aibă aceeaşi valoare: într-o tabelă poate fi definită o singură cheie primară,

8

<valoare index> <id. linie>

Page 9: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

- chei normale (indecşi normali), care admit existenţa a două sau mai multe linii în care cheia să aibă aceeaşi valoare: pot fi definiţi mai multe chei normale pentru o tabelă

Sisteme de Gestiune a Bazelor de Date (SGBD)Funcţiile unui SGBD

Pentru lucrul cu baze de date există instrumente software specializate numite generic Sisteme de Gestiune a Bazelor de Date (SGBD). Piaţa software-lui este bogată în SGBD-uri care au diverse denumiri, cum ar fi:

Visual FOXPRO, PARADOX, ACCESS, SQL-Server, Oracle, SYBASE etc.

Un SGBD pune la dispoziţia utilizatorilor o gamă largă de funcţii care asigură :- Funcţiile de bază ale SGBD-ului, cum ar fi:

. crearea şi modificarea structurii bazei de date şi a obiectelor BD,

. introducerea, ştergerea sau modificarea datelor din tabelele bazei de date,

. citirea datelor din tabelele bazei de date în vederea prelucrării lor.- Facilităţi pentru dezvoltarea de aplicaţii utilizator (crearea şi execuţia de aplicaţii

utilizator cu meniuri, forme, rapoarte, etc.).

Lucrul cu baza de date

În primul rând trebuie să ştiţi, că dacă doriţi să lucraţi în aplicaţiile dumneavoastră cu baze de date gestionate de un anumit SGBD, trebuie să achiziţionaţi acel SGBD, după care să-l instalaţi pe calculatorul dumneavoastră, sau pe un calculator din reţeaua de calculatoare unde lucraţi. Modul de instalare al unui SGBD depinde de SGBD şi de sistemul de operare sub care veţi lucra.

Din punct de vedere al numărului de utilizatori care pot accesa în acelaşi timp datele bazei de date, există:

- SGBD-uri cu baze de date locale, la care accesul la baza de date este permis numai pentru un utilizator,

- SGBD-uri cu baze de date partajate, la care accesul la baza de date este permis mai multor utilizatori.

SGBD-urile de astăzi nu mai lucrează cu bază de date locală, ci cu bază de date partajată între utilizatorii unei reţele de calculatoare.

Accesul partajat la o bază de date se bazează pe aşa numita tehnologie client-server.

9

Page 10: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

În tehnologia client-server, baza de date este memorată pe discurile unui calculator din reţea şi reprezintă baza de date server.

Clientul este orice utilizator, eventual de pe alt calculator din reţea, care doreşte să lucreze cu baza de date. Clientul este reprezentat printr-o aplicaţie utilizator sau printr-o componentă a SGBD-ului.

Figura 8 Tehnologia Client/Server

10

Page 11: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Introducere in Visual FOXPROVisual FOXPRO este un SGBD relational al firmei MicroSoft. El ofera toate facilitatile recunoscute

pentru un SGBD modern.

Lansare in executie V.FoxproDublu-clic pe pictograma

Mod lucru in V.Foxpro• Interactiv (Limbaj De Programare)• Asistat (meniului, ferestrelor de dialog, asistentilor)• Prin programe (comenzi stocate intr-un fisier text)

Limbajul V FoxproEste format din comenzi. Fiecare c-da este formata din cuvinte:

• Cheie• Utilizator

Cuvintele sunt organizate in clauze• Numai din cuvointe cheie• Numai din cuvinte utilizator• Combinati de cuvinte cheie si utilizator

Exista clauze• Optionale• Obligatorii

Se descrie o c-da, se descriu:

11

Page 12: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

• Functia• Sintaxa• Comentarii• Exemple

Metalimbajul Utilizat in sintaxe

• Cuv cheie se scriu cu majuscule• Cuv utilizator se scriu cu litere mici• Cuv se separa printr-un spatiu sau alt separator descris in sintaxa• [clauza optionala]• {clauza1 | clauza2| …}• [clauza optionala]… sau {clauza1 | clauza2| …}…

Sintaxa generala a comenzilor

Verb-comanda [clauze]

Variabilele de mediu de lucru V.Fox• nume• valori

Setarea variabilelor de mediu• asistat• prin comenzi SET cu sintaxa

SET numevar TO valoare

ExempluSetarea directorului implicit de stocare si regasire a fisierelor create cu VFP

Crearea unei bazei de date VFP

Crearea unei tabele in BD

Creati tabela SALARIATI cu structura descrisa anteriorCreati Tabela SERVICII cu urmatoarea structura

Codserv N,2Denserv C,12

12

Page 13: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Cheltuieli N,7Sef C,20

Ca sa putem stabili o relatie permanenta intre 2 tabele, trebuie ca:• tabela parinte sa fie indexata dupa campul de legatura (index primar sau candidat)• tabela copil sa fie indexata dupa campul de legatura (orice index)

Cum definim relatia?D&D (Drag and Drop) de la cheia camp de legatura din tabela

parinte (cheaia CODSERV din SERVICII) la cheia camp de legatura din tabela copil (cheaia CODSERV din SALARIATI).

Comenzi Visual FOXPRO (Sintaxe prescurtate)Comanda CREATE DATABASE

Creaza o baza de date V.FOXPRO

SintaxaCREATE DATABASE numebd

Comanda OPEN DATABASEDeschide o bază de date.

Syntaxa

OPEN DATABASE [numefis ] [{EXCLUSIVE | SHARED}] [NOUPDATE]

În numefis puteţi specifica şi calea directorului unde este stocat fişierul BD.Dacă omiteţi numele bazei de date, atunci VFP afişează o fereastră de dialog pentru a

selecta fişierul bazei de date pentru deschidere.

Starii variabilei de mediu EXCLUSIVE:• ON, atunci deschiderea este exclusive• OFF, atunci deschiderea este partajat

13

Page 14: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Baza de date curentăMai multe baze de date pot fi deschise la un momen dat, dar numai una poate fi BD

curentă. O serie de comenzi (ADD TABLE, MODIFY DATABASE, etc.) sau funcţii operează pe baza de date curentă.

O bază de date poate fi făcută curentă:• Prin comanda SET DATABASE TO• Prin alegerea ei din lista expandabilă, din trusa standard a lui VFP

Comanda SET DATABASE TO are sintaxa:

SET DATABASE TO [numebd]

Unde numebd este numele unei BD deschisă, care se doreşte să devină curentăSET DATABASE TO face ca nici obază de date să nu fie curentă.

ExempleCREATE DATABASE bdc1CREATE DATABASE bdc2SET DATABASE TO bdc1CREATE tabela1 CLOSE TABLES REMOVE TABLE tabela1SET DATABASE TO bdc2ADD TABLE tabela1

Deschiderea tabelelorZone de lucru în VFP

Pentru deschiderea tabelelor VFP utilizează nişte zone de memorie internă numite zone de lucru. O tabelă se deschide într-o zonă de lucru, iar într-o zonă de lucru nu se dechide decât o singură tabelă. În zona de lucru sunt memorate informaţii despre tabela deschisă în zonă. Zonele de lucru sunt identificate printr-un număr (1,2,3, …), iar primele 10 zone de lucru mai pot fi identificate printr-un alias de forma A, B, C, …, J. Pot fi cel mult 32767 zone de lucru.

La un moment dat o singură zonă este zonă de lucru curentă sau zonă de lucru activă. Când o zonă de lucru este curentă, atunci tabela deschisă în ea este tabelă curentă. Unele comenzi lucrează pe tabela curentă, sau au ca bază de lucru tabela curentă.

Comanda SELECTActivează o zonă de lucru.

Sintaxa

SELECT {idzonă | aliastabelă}

Comanda USEDeschide sau închide o tabelă.

14

Page 15: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

SintaxaUSE [ [numebd.]numetabelă [IN idzona] [ALIAS aliastabelă]

[{EXCLUSIVE | SHARED}] [NOUPDATE] ]Comanda USE fără nici o clauză, închide tabela curentă.

Aliasul tabelei sau aliasul zonei de lucru (pentru primele 10 zone de lucru) sunt necesare la referirea campurilor dintr-o tabela care nu este tabela curenta, dupa sintaxa:

aliastabela.numecampaliaszona.numecamp

Despre indexareCând un câmp sau o combinaţie de campuri este declarată câmp index sau câmp cheie este generată o

tabelă numită tabela de index (pe scurt index), care este formata din inregistrări index. Câmpul sau combinaţia de câmpuri index, reprezintă aşa numita expresie index.

O inregistrare index este formata din dou valori

Valoare expresie index Numarul inregistrariiInregistrarile index sunt stocate în index. în ordinea ascendă sau descendentă a

valorilor expresiei index.

Tabela index TabelaA 3 (1) … B ……B 1 (2) … D ……C 5 (3) … A ……D 2 (4) … E …….E 4 (5) … C …….

Stocarea unui index (tabelă index) se poate face:• Într-un fişier mono-index (cu orice nume şi extensia .IDX)• În fişierul multi-index structurat care are acelasi nume cu numele tabelei, dar cu extensia .CDX• Într-un fişier multi-index utilizator, cu orice nume şi extensia .CDX

ObservaţieNoi vom lucra cu indecsi stocati in fisierul multi-index structurat.Fişierul multi-index structurat se deschide automat când se deschide tabela.

Utilitatea indecşilor• Definirea dependentelor permanente• Definirea dependentelor temporare• Citirea directă a înregistrărilor• Citirea secvenţială a înregistrărilor

Ordinea înregistrarilor dintr-o tabelă poate fi:• Ordine fizică, care corespunde ordinii de stocare a înregistrărilor în tabelă.• Ordinea logică, care corespunde ordinii dată de un index.

De cele mai multe ori, pentru ca un index să fie utilizat într-o prelucrare trebuie ca el să fie făcut index activ sau index master.

15

Page 16: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Comanda INDEXCrează un index pentru tabela curentă

Sintaxa de creare a unui index stocat în fişierul multi-index structurat

INDEX ON expresie TO TAG numeindex [FOR cond_sel_înr_ind] [{ASCENDING | DESCENDING}][{UNIQUE | CANDIDATE}]

Dacă nu este specificată ordonarea, implicit este ASCENDING.Dacă nu este specificat tipul indexului, atunci, implicit, el este regular (normal)

Comanda SET ORDER TOActivează un index sau face un index, index master.

Sintaxa

SET ORDER TO [ [TAG] numeindex ] [IN {idzona | aliastab}]

SET ORDER TO anulează indexul master.

Comanda CLOSEÎnchide diverse tipuri de fişiere. Sintaxa

CLOSE {ALL | DATABASES [ALL] | TABLES [ALL]}

Comanda APPENDAdaugă una sau mai multe înregistrări la sfârşitul unei tabele.

Sintaxa

APPEND [BLANK] [IN { idzonă | aliastabelă}]

Setari Data calendaristica

SET CENTURY ON | OFF

SET DATE { AMERICAN | ANSI | BRITISH | FRENCH | GERMAN| ITALIAN | JAPAN | TAIWAN | USA | MDY | DMY | YMD }

SemnificatiiAMERICAN mm/dd/yyANSI yy.mm.dd

16

Page 17: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

BRITISH/FRENCH dd/mm/yyGERMAN dd.mm.yyITALIAN dd-mm-yyJAPAN yy/mm/ddTAIWAN yy/mm/ddUSA mm-dd-yyMDY mm/dd/yyDMY dd/mm/yyYMD yy/mm/dd

Exemplu: SET DATE BRITISH

Comenzile ? si ??Evaluează o expresie şi afişează rezultatul evaluării

Sintaxa

{ ? | ?? } Expresie

Unde expresie este o expresie validă VFP.

? Expresie execută retur-de-car înainte de afişarea rezultatului evaluării expresiei.

?? Expresie nu execută un retur-de-car înainte de afişarea rezultatului evaluării expresiei.

Datele cu care lucreaza V.FOXPRO

• Tabele, inregistrari, campuri, valori de campuri• Constante• Variabile• Functii• Expresii

ConstanteMarimi care nu-si modifica valoarea in timp

Numerice: 2, -3.14

Sir de caractere:‘ABC123’ sau “ABC123” sau “abc123”

Data calendaristica si timp:

Format: {^aaaa/ll/zz} {^aaaa/ll/zz hh:mm:ss}Exemplu {^2012/01/01} {^2012/01/01 14:50:30}

Logice: .T. sau .F.

VariabileMarimi care isi schimba valoarea in timp. Au nume si ocupa un spatiu de memorie RAM.Pot fi de tip:

• Numeric,

17

Page 18: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

• Sir de caractere• Data calendaristica• Logice

FunctiiFunctiile sunt subprograme ce executa anumite prelucrari si returneaza o valoare.Unor functii li se pot transmite date pe care aceastea le prelucreaza. Transmiterea de date se face prin

asa numitii parametrii ai functiei.Apelul functiei:

numefct([parametri])Tipuri de functii:

• Numerice,• Sir de caractere• Data-timp• Logice• De conversie

Functia DATE() returneaza data din sistemul de calcul.

ExpresiiO expresie este o succesiune de operanzi si operatori care respecta anumite reguli.Operanzi definesc dateleOperatorii definesc operatiile care se executa asupra operanzilor

Tipuri de expresii• Numerice• Sir de caractere• Data/timp• Relationale• Logice

Expresii Numerice• Operanzi numerici (campuri, constante, variabile,functii)• Operatori aritmetici

Operatori Numerici

Operator Actiune Exemplu( ) Groupare in subexpresii ?(4-3) * (12/2)**, ^ Ridicare la putere ? 3 ** 2 ? 3 ^ 2*, / Inmultire si impartire ? 2 * 7 ? 14 / 7% Modulo (restul) ? 15 % 4+, - Adunarea si scaderea ? 4 + 15

18

Page 19: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Expresiile sir de caractere O expresie de tip sir de caractere este formata din:

• Operatorii de concatenare +, -. • Operanzi de tip sir de caractere

Operator ActionExemple

+ Concatenare obisnuita.

?‘Popescu ‘+’Vasile’- Concatenare cu eliminarea spatiilor din dreapta primului operand.

?‘Popescu ‘-’Vasile’

Expresiile Data/timpEste formata din

• Operanzi data/timp sau numerici

• Operatorii + sau –

Operator Actiune Code+ Addition datacal+nr Datacal

– Subtraction datacal-nr Datacal datacal1-datacal2 Nrzile

?Date( )+1000?{^2012/01/01}-date()

Expresiile relationale

Este formata din• 2 operanzi de acelasi tip• legati printr/un operator de comparare (relational)

O expresie relationala are una din valorile .T. sau .F.

Relational OperatorsOperator Action Code< mai mic ? 23 < 54> mai mare ? 1 > 2 = egal ? ‘ABC’ =’abc’<>, #, !=diferit ? .T. <> .F.<= mai mic egal cu ? {^1993/01/01} <= {^1992/01/01}>= mai mare egal cu ? 32 >= 32.5$ inclus in ?‘pop’$’prtopopescu’

19

Page 20: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

operad1$operand2

? 'escu' $ 'popescu' are valoarea .T.? 'dan' $ ‘davidescu’ are valoarea .F.

Expresii logice

O expresie logica este formata din una sau mai multe expresii relationale legate prin operatorii logici: NOT, AND sau OR.

Operator Action Code( ) grupare subexpresii cVar AND (cVar2 AND cVAR3)NOT negare logica IF NOT cVarA = cVarB

IF ! nVar1 = nVar2AND AND logic (SI) lVar0 AND lVar9OR OR logic (SAU) lVarX OR lVarY

NOT .T. .F..F. .T.

AND .T. .F. .T. .T. .F. .F. .F. .F.

OR .T. .F. .T. .T. .T. .F. .T. .F.

Comenzile DISPLAY şi LISTAfişează valori de câmpuri sau expresii din înregistrările tabelei curente.

20

Page 21: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Sintaxa

{ DISPLAY | LIST } [listă_câmpuri_expresii] [domeniu]

[FOR expr_sel] [OFF] [NOCONSOLE]

[{TO PRINTER [PROMPT] | TO FILE numefis_ies}]Comentarii

listă_câmpuri_expresii este listă de câmpuri şi/sau expresii, separate prin virgulă, a căror valori se doresc a se afişa. Dacă nu este specificată sunt afişate valorile tuturor câmpurilor din tabela curentă.

Conţinutul câmpului memo nu este afişat decât în cazul în care este specificat explicit în listă. Dimensiunea de afişare a câmpurilor memo este determinată de parametrul MEMOWIDTH.

domeniu specifică mulţimea de înregistrări din tabela curentă pe care va lucra comanda. Clauza domeniu poate avea una din valorile:

• ALL, • NEXT nr_înregistrari, • RECORD nr_înregistrare, • REST.

ExempleLIST NUMES, PRENS, SALAR+SPOR OFF for codserv=10 AND SALAR>1000

LIST NUMES, PRENS, SALAR+SPOR OFF for ‘escu’$numes

LIST NUMES, PRENS, (DATE()-datanast)/365 TO FILE FISSAL

LIST RECORD 2

Ştergerea de înregistrăriŞtergerea înregistrărilor dintr-o tabelă se face în doi paşi:

- Ştergerea logică sau marcarea înregistrărilor pentru ştergere. - Ştergerea fizică.

Comanda DELETEMarchează anumite înregistrări pentru ştergere.

Sintaxa

DELETE [domeniu] [FOR exprlog] [IN {idzona | aliastab}]

Domeniu:• ALL• RECORD nr• REST• NEXT nr 21

Page 22: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Dacă domeniu nu este specificat, comanda lucrează pe înregistrarea curentă.

Functia DELETED()Funcţia DELETED([IN {idzona | aliastab}]) returnează valoarea .T. dacă înregistrarea este marcată

pentru ştergere şi valoarea .F. dacă înregistrarea nu este marcată pentru ştergere.

Exemplu pentru afişarea înregistrărilor marcate pentru ştergereLIST FOR DELETED()

Comanda PACKŞterge fizic înregistrările marcate pentru ştergere din tabela curentă.

Sintaxa

PACK

Comanda RECALLAnulează marcatorul de înregistrare ştearsă logic pentru anumite înregistrări şterse fizic din tabela

curentă.

Sintaxa

RECALL [domeniu] [FOR exprsel]

Dacă domeniu nu este specificat , implicit este înregistrarea curentă.

Comanda ZAPSterge fizic toate inregistrarile dintr-o tabela.

Sintaxa

ZAP [IN {idzona | aliastab}]

Dacă variabila SAFETY este pe ON, atunci Visual FoxPro întreabă dacă doriţi să ştergeţi înregistrările tabelei currente.

Modificare înregistrăriModificarea înregistrărilor dintr-o tabelă, adică modificarea valorilor anumitor câmpuri din anumite

înregistrări, se poate face:• Interactiv (prin c-zile BROWSE sau EDIT)

• Automat pe baza unor expresii (prin c-da REPLACE)

Comenzile BROWSE şi EDITPermit afişarea şi modificarea, introducerea şi ştergerea interactvă a înregistrărilor din tabela curentă.

Sintaxa

22

Page 23: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

{ BROWSE | EDIT } [FIELDS listă_câmpuri][FOR expr_sel] [FREEZE numecâmp][NOAPPEND] [NODELETE] [{NOEDIT | NOMODIFY}][TITLE titlu]

listă_câmpuri poate fi o listă de:• câmpuri din structura tabelei curente sau a unor tabele în relaţie cu tabela curentă,• câmpuri calculate,

separate prin virgulă.

Un câmp din listă poate fi urmat de opţiunile:

[:R] [:H = constantasircar]

Unde :R defineşte câmp Read-Only:H defineşte un titlu pentru coloană.

Câmpuri calculate (Calculated Fields…) Un câmp calculat este un câmp Read-Only, a cărui valoare se calculează pe baza unei expresii valide VFP.

nume_camp_calculat = expresie

Exemplu

BROWSE FIELDS numes:H=’Nume salariat’, prens:R:H=’Prenume salariat’ ,castig=salar+spor:H=’Total castig’

Expr_sel din clauza FOR este o expresie logica. Vor fi afisate date numai din inregistrarile pentru care expresia este adevarata.

Prin clauza FREEZE puteti specifica campul pe care sa fie pozitionat, tot timpul, cursorul de editare.

Comanda REPLACEActualizează valorile unor câmpuri din anumite înregistrări pe baza valorilor anumitor expresii.

Sintaxa

REPLACE numecamp1 WITH expresie1 [ADDITIVE][, numecamp2 WITH expresie2 [ADDITIVE]] ... [domeniu] [FOR condselinr]

Numecamp1, numecamp2, … sunt numele câmpurilor a căror valori se vor modifica cu valorile expresiilor expresie1, expresie2, … .

Domeniu dacă nu este specificat este înregistrarea curentă.

23

Page 24: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

ADDITIVE adaugă valoarea la sfârşitul valorii existente pentru câmpul memo.

Citirea înregistrărilorCitirea înregistrărilor dintr-o tabelă se poate face:- direct (pe baza numărului de înregistrare sau a unui index),- secvenţial.

Comanda GOTO (GO)Citeşte o înregistrare dintr-o tabelă pe baza numărului de înregistrare. Înregistrarea

citită devine înregistrare curentă în tabelă.

Sintaxa

GOTO [RECORD] nrinr [IN {idzona | aliastab}]

– Sau –

GOTO { TOP | BOTTOM} [IN {idzona | aliastab}]

Comanda SEEKCiteşte în mod direct prima înregistrare dintr-o tabelă pentru care un index are o

valoare precizată. Înregistrare citită devine înregistrare curentă

Sintaxa

SEEK val_expr_ind [ORDER [TAG] numeind ][IN {idzona | aliastab}]

Dacă SEEK găseşte o înregistrare, atunci:• RECNO( ) returnează numărul înregistrării citite • FOUND( ) returnează Adevărat (.T.), • EOF( ) returnează Fals (.F.).

Dacă SEEK nu găseşte nici o înregistrare, atunci:• RECNO( ) returnează numărul de înregistrării din tabelă plus 1 • FOUND( ) returnează False (.F.), • EOF( ) returnează Adevărat (.T.).

Comanda LOCATECiteşte secvenţial prima înregistrare din tabela curentă care îndeplineşte o condiţie specificată în

comandă. Înregistrarea citită devine înregistrare curentă.

Sintaxa

24

Page 25: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

LOCATE FOR cond_citire [domeniu]

Dacă LOCATE găseşte o înregistrare, atunci:• RECNO( ) returnează numărul înregistrării citite • FOUND( ) returnează Adevărat (.T.), • EOF( ) returnează Fals (.F.).

Dacă LOCATE nu găseşte nici o înregistrare, atunci:• RECNO( ) returnează numărul de înregistrării din tabelă plus 1 • FOUND( ) returnează False (.F.), • EOF( ) returnează Adevărat (.T.).

După ce LOCATE găseşte înregistrarea puteţi executa o comandă CONTINUE pentru a citi următoarea înregistrare care îndeplineşte condiţia din LOCATE. Comanda CONTINUE

Comanda CONTINUE citeşte următoarea înregistrare care îndeplineşte condiţia din ultima comandă LOCATE executată. . Înregistrarea citită devine înregistrare curentă.

SintaxaCONTINUE

Comanda SKIPCiteşte o înregistare printr-un salt înainte sau înapoi cu un număr de înregistrări dintr-

o tabelă. Înregistrarea citită devine înregistrare curentă.

Sintaxa

SKIP [nr_salt_inr] [IN {idzona | aliastab}]Comentarii

Nr_sal_inr specifică numărul de înregistrări sărite faţă de înregistrarea curentă, dintr-o tabelă, până la înregistrarea citită:

- Dacă valoarea este pozitivă, saltul se face spre sfârşitul tabelei (înainte),- Dacă valoarea este negativă, saltul se face spre începutul tabelei (înapoi).

Dacă nr_sal_inr nu este specificat, atunci este 1 (unu).Dacă înregistrarea curentă este ultima înregistrare din tabelă, atunci un SKIP înainte determină

ca:- RECNO( ) să returneze o valoare cu 1 mai mare decât numărul înregistrărilor din tabelă,- EOF( ) să returneze Adevărat (.T.),

Dacă înregistrarea curentă este prima înregistrare din tabelă, atunci un SKIP -1 determină ca:- RECNO( ) să returneze valoare 1,- BOF( ) să returneze Adevărat (.T.),

Observaţie

25

Page 26: Initiere in Visual FoxPro

Initiere in Visual FOXPRO Autor: Eugen Mafteiwww.cartiaz.ro – Carti si articole online gratuite de la A la Z

Dacă tabela pe care lucrează comenzile GO TOP, GO BOTTOM, LOCATE, CONTINUE şi SKIP sunt controlate de un index master, atunci aceste comenzi respectă secvenţa (ordinea) înregistrărilor dată de indexul master.

Relatii temporare intre tabele

Cerinte• Toate tabelele trebuie sa fie deschise in zone de lucru diferite• Tabelele trebuie sa fie indexate dupa campul de legatura si indexul

respectiv trebuie sa fie index master• Tabela parinte trebuie sa fie tabela curenta

Pentru Relatia de tipul 1:1 scrieti o comanda SET RELATION cu urmatoarea sintaxa:

SET RELATION TO[campleg1_tata INTO {idzonafiu1 | aliastabfiu1}][campleg2_tata INTO {idzonafiu2 | aliastabfiu2}] . . .

[ADDITIVE]

Pentru Relatia de tipul 1: Pentru Relatia de tipul 1:1 scrieti o comanda SET RELATION cu urmatoarea sintaxa: scrieti o comanda SET RELATION cu urmatoarea sintaxa:

SET SKIP TO [aliasfiu1 [, aliasfiu2] ...

26