Professional Documents
Culture Documents
Autor
Mat. Eugen Maftei
1
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
2
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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
Identificarea liniilor
Modelul 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 tabelelor
Pentru 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,
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
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
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”.
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
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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).
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
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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ă.
6
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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 tabelelor
Citirea 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.
7
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
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
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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ă
9
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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.
10
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Limbajul V Foxpro
Este format din comenzi. Fiecare c-da este formata din cuvinte:
• Cheie
• Utilizator
Exista clauze
• Optionale
• Obligatorii
11
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
• Functia
• Sintaxa
• Comentarii
• Exemple
Verb-comanda [clauze]
Exemplu
Setarea directorului implicit de stocare si regasire a fisierelor create cu VFP
12
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Cheltuieli N,7
Sef C,20
Sintaxa
CREATE DATABASE numebd
Syntaxa
Î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.
13
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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
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ă.
Exemple
CREATE DATABASE bdc1
CREATE DATABASE bdc2
SET DATABASE TO bdc1
CREATE tabela1
CLOSE TABLES
REMOVE TABLE tabela1
SET DATABASE TO bdc2
ADD TABLE tabela1
Deschiderea tabelelor
Zone 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 SELECT
Activează o zonă de lucru.
Sintaxa
Comanda USE
Deschide sau închide o tabelă.
14
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Sintaxa
USE [ [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.numecamp
aliaszona.numecamp
Despre indexare
Câ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.
Observaţie
Noi 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
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
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Comanda INDEX
Crează un index pentru tabela curentă
Sintaxa
Comanda CLOSE
Închide diverse tipuri de fişiere.
Sintaxa
Comanda APPEND
Adaugă una sau mai multe înregistrări la sfârşitul unei tabele.
Sintaxa
16
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
BRITISH/FRENCH dd/mm/yy
GERMAN dd.mm.yy
ITALIAN dd-mm-yy
JAPAN yy/mm/dd
TAIWAN yy/mm/dd
USA mm-dd-yy
MDY mm/dd/yy
DMY dd/mm/yy
YMD yy/mm/dd
Comenzile ? si ??
Evaluează o expresie şi afişează rezultatul evaluării
Sintaxa
{ ? | ?? } Expresie
Unde expresie este o expresie validă VFP.
Numerice: 2, -3.14
Sir de caractere:
‘ABC123’ sau “ABC123” sau “abc123”
Variabile
Marimi care isi schimba valoarea in timp. Au nume si ocupa un spatiu de memorie RAM.
Pot fi de tip:
• Numeric,
17
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
• Sir de caractere
• Data calendaristica
• Logice
Functii
Functiile 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
Expresii
O expresie este o succesiune de operanzi si operatori care respecta anumite reguli.
Operanzi definesc datele
Operatorii 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
18
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Operator Action
Exemple
+ Concatenare obisnuita.
?‘Popescu ‘+’Vasile’
- Concatenare cu eliminarea spatiilor din dreapta primului operand.
?‘Popescu ‘-’Vasile’
Expresiile Data/timp
Este formata din
• Operanzi data/timp sau numerici
• Operatorii + sau –
?Date( )+1000
?{^2012/01/01}-date()
Expresiile relationale
19
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
operad1$operand2
Expresii logice
O expresie logica este formata din una sau mai multe expresii relationale
legate prin operatorii logici: NOT, AND sau OR.
OR .T. .F.
.T. .T. .T.
.F. .T. .F.
20
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Sintaxa
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.
Exemple
LIST 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 DELETE
Marchează anumite înregistrări pentru ştergere.
Sintaxa
Domeniu:
• ALL
• RECORD nr
• REST
• NEXT nr
21
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
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.
Comanda PACK
Şterge fizic înregistrările marcate pentru ştergere din tabela curentă.
Sintaxa
PACK
Comanda RECALL
Anulează marcatorul de înregistrare ştearsă logic pentru anumite înregistrări şterse fizic din tabela
curentă.
Sintaxa
Comanda ZAP
Sterge fizic toate inregistrarile dintr-o tabela.
Sintaxa
Modificare înregistrări
Modificarea î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 EDIT
Permit afişarea şi modificarea, introducerea şi ştergerea interactvă a înregistrărilor din tabela curentă.
Sintaxa
22
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
nume_camp_calculat = expresie
Exemplu
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 REPLACE
Actualizează valorile unor câmpuri din anumite înregistrări pe baza valorilor anumitor expresii.
Sintaxa
23
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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ărilor
Citirea înregistrărilor dintr-o tabelă se poate face:
- direct (pe baza numărului de înregistrare sau a unui index),
- secvenţial.
Sintaxa
Comanda SEEK
Citeşte în mod direct prima înregistrare dintr-o tabelă pentru care un index are o
valoare precizată. Înregistrare citită devine înregistrare curentă
Sintaxa
Comanda LOCATE
Citeşte secvenţial prima înregistrare din tabela curentă care îndeplineşte o condiţie specificată în
comandă. Înregistrarea citită devine înregistrare curentă.
Sintaxa
24
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
LOCATE FOR cond_citire [domeniu]
Comanda CONTINUE
Comanda CONTINUE citeşte următoarea înregistrare care îndeplineşte condiţia din
ultima comandă LOCATE executată. . Înregistrarea citită devine înregistrare curentă.
Sintaxa
CONTINUE
Comanda SKIP
Citeş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
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
Initiere in Visual FOXPRO Autor: Eugen Maftei
www.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.
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:
26