Documente Academic
Documente Profesional
Documente Cultură
… Înregistrări
****************
2
Baze de date – Mediul FoxPro for Windows
„work area”). FoxProW poate manipula mai multe baze de date simultan, deci acesta
dispune de mai multe zone de lucru, 225 la număr, în care se deschid bazele de date
respective. Asocierea bazelor de date în zonele de lucru este controlată de programator,
acesta având la dispoziţie comenzi şi funcţii specializate în acest scop.
După deschiderea unei baze de date( într-o zonă de lucru) se poate trece la lucrul
cu aceasta , adică vom putea :
- să preluăm date din baza de date;
- să modificăm date deja existente;
- să adăugăm noi date;
- să ştergem date din baza de date etc.
După terminarea lucrului cu baza de date urmează închiderea acesteia, operaţie ce
constă în :
- desfacerea legăturii dintre zona de lucru şi baza de date;
- eliberarea memoriei alocate la deschidere ( eliberarea zonei de lucru);
- închiderea fişierului bazei de date, memorând modificările efectuate
de la deschidere până în acest moment.
Acesta ar fi pe scurt modul de lucru cu o bază de date, urmând ca în continuare să
trecem la studiul efectiv al comenzilor şi funcţiilor ce realizează aceste operaţii.
1.2. Zone de lucru
Pentru manipularea bazelor de date, FoxProW foloseşte zonele de lucru 225 la
număr, în care acesta depune informaţiile necesare efectuării operaţiilor cu clauzele de
date respective.
Pentru identificarea zonelor de lucru se folosesc două metode:
- primele 10 zone de lucru se identifică prin litere de la A la J, adică
primele 10 litere din alfabet ;
- pentru toate celelalte zone de lucru putem folosi pentru identificare
numerele de la 1 la 225.
La un moment dat, din cele 225 zone de lucru ale FoxProW-ului, una singură
este curentă. Aceasta înseamnă că o anumită comandă, în interiorul căreia nu s-a
specificat explicit baza de date la care se referă, va acţiona asupra bazei de date deschisă
în zona de lucru curentă.
3
Baze de date – Mediul FoxPro for Windows
4
Baze de date – Mediul FoxPro for Windows
5
Baze de date – Mediul FoxPro for Windows
L - - logic
M - - memo
N n d Numeric, de lăţime n, cu d zecimale
G - - General
P - - Imagine
6
Baze de date – Mediul FoxPro for Windows
trebuie introdusă în comandă când se deschide o bază de date care a mai fost deschisă
anterior şi în altă zonă de lucru .
Observaţie : dacă la deschiderea unei baze de date în zona de lucru există deschisă
anterior o altă bază de date , cea veche este închisă automat înainte de deschiderea celei
noi.
Clauza NOUPDATE se introduce pentru a proteja baza de date la scriere, adică
pentru a nu permite modificarea acesteia (nici conţinutul şi nici structura nu se poate
modifica ).Baza de date poate fi totuşi vizualizată (atât conţinutul cât şi structura) fără a i
se aduce schimbări.
Exemplu
SELECT a
USE mfixe NOUPDATE
NOTE se deschide baza de date mfixe în zona a doar ;
pentru citire
USE se închide baza de date
În sintaxa comenzii mai există patru clauze:
-INDEX – se referă la „indexarea bazei de date”
-SHARE şi EXCLUSIVE- folosite la lucrul în reţea cu baza de date ;
-ALIAS- se referă la aliasul atribuit de utilizator bazei de date
Închiderea bazelor de date se poate realiza şi cu comenzile CLOSE ALL şi CLOSE
DATABASE, dar acestea pe lângă bazele de date închid şi alte fişiere, ferestre, deci
trebuie utilizate cu atenţie. CLOSE ALL, cu sintaxa :
CLOSE ALL
închide toate fişierele deschise, deci şi bazele de date din toate zonele de lucru, şi
selectează zona de lucru 1. De asemenea CLOSE ALL închide şi unele ferestre.
Comanda CLOSE DATABASE, având sintaxa :
CLOSE DATABASE
închide toate bazele de date şi selectează zona de lucru 1. Şi această comandă închide, pe
lângă bazele de date şi alte fişiere ( cum ar fi fişierele index de ex.) .
Pentru a obţine informaţii despre zonele de lucru ale FoxProW-ului şi bazele de
date deschise în acestea se vor folosi două funcţii USED ( ) şi DBF ( ). Prima dintre
acestea este USED ( ), ne informează dacă o zonă de lucru este liberă sau este ocupată de
o bază de date. Cu o sintaxă de forma :
7
Baze de date – Mediul FoxPro for Windows
SELECT a
USE mfixe
? DBF (’ mfixe’)
C:\FOXPROW \MFIXE.DBF
? DBF (’a’)
C:\FOXPROW \MFIXE.DBF
? DBF (1)
C:\FOXPROW\MFIXE.DBF
? DBF (2) = = ’’
.T.
USE.
8
Baze de date – Mediul FoxPro for Windows
9
Baze de date – Mediul FoxPro for Windows
realizează modificarea structurii bazei de date active prin deschiderea unei ferestre de
dialog, aceeaşi ca la crearea bazei de date, unde se pot realiza modificările dorite.
După efectuarea modificărilor, FoxProW copiază conţinutul bazei de date vechi în
baza nouă de date, cu modificările respective, operaţie transparentă pentru utilizator.
Vizualizarea structurii unei baze de date se face cu comenzile DISPLAY
STRUCTURE sau LIST STRUCTURE .
DISPLAY STRUCTURE [ IN <expN> <expC>]
[TO PRINTER [ PROMPT] TO FILE <fişier>]
[NOCONSOLE]
10
Baze de date – Mediul FoxPro for Windows
<expN> sau <expC> modifică zona de lucru, respectiv baza de date, la care se referă
comanda. În mod implicit afişarea se face pe ecran. Dacă se specifică opţiunea
NOCONSOLE, afişarea pe ecran este inhibată. În paralel cu afişarea pe ecran, dacă
aceasta nu este inhibată, se pot trimite aceleaşi informaţii şi la imprimantă în cazul
folosirii clauzei TO PRINTER, şi în fişierul <fişier> în cazul utilizării TO FILE. Cele
două clauze TO PRINTER şi TO FILE, se exclud reciproc.
Un alt mod de a crea o bază de date îl reprezintă comanda COPY STRUCTURE
care creează o bază de date nouă, cu aceeaşi structură (sau asemănătoare)cu a celei
deschise în zona de lucru curentă . Sintaxa comenzii este :
COPY STRUCTURE TO <fişier>
[FIELDS <listă câmpuri>]
[ [WITH CDX [ WITH ] PRODUCTION] ]
unde <fişier> reprezintă fişierul noii baze de date. Clauza FIELDS are ca efect copierea
în baza nouă de date doar a câmpurilor specificate în lista de câmpuri care urmează
clauzei .
Mai există o modalitate de transmitere a unei structuri a bazei de date şi anume,
printr-o bază de date intermediară, în care se încarcă structura de copiat. Comanda
folosită este COPY STRUCTURE EXTENDED, cu următoarea sintaxă:
COPY STRUCTURE EXTENDED TO <fişier>
[FIELDS <listă câmpuri > ]
Structura bazei de date se copiază în înregistrările unei noi baze de date <fişier> care
are o structură fixă formată din patru câmpuri :
-FIELD_ NAME ( nume câmp ), de tip şir de caractere, în care se depozitează numele
câmpurilor structurii;
-FIELD _TYPE ( tip câmp ), tot de tip şir de caractere, de lungime 1, în care se
depozitează un caracter ce corespunde tipului structurii (C-şir de caractere, N- numeric,
F-real, D-dată calendaristică, L –logic , M- memo, G-general, P- imagine);
-FIELD_LEN (lungime câmp), de tip numeric care memorează lăţimea(lungimea)
fiecărui câmp al structurii;
-FIELD_DEC (poziţii zecimale câmp), de tip numeric, în care se depozitează numărul de
poziţii zecimale când este cazul .
11
Baze de date – Mediul FoxPro for Windows
12
Baze de date – Mediul FoxPro for Windows
CLOSE ALL
USE mfixe
? FSIZE ( ’denumire’)
NOTE afişează latimea celui de-al 2-lea camp;
al bazei de date
30
USE
Vom da acum un exemplu de simulare a comenzii LIST STRUCTURE (DISPLAY
STRUCTURE) folosind şi funcţiile prezentate în acest paragraf.
13
Baze de date – Mediul FoxPro for Windows
Exemplu
CLOSE ALL
USE mfixe
? ’Structura bazei de date :’ ‚DBF ( )
? ’camp’, ’nume’, ’latime’
total = 0
FOR i =1 TO FCOUNT ( )
? i, FIELD(i), TYPE( ) , FSIZE ( FIELD (i) )
total = total + FSIZE ( FIELD(i))
ENDFOR
? ’** Total **’ ‚ total +1
USE
14
Baze de date – Mediul FoxPro for Windows
15
Baze de date – Mediul FoxPro for Windows
Fără clauza BLANK comanda determină deschiderea unei ferestre de editare în care
utilizatorul poate introduce, câmp cu câmp, datele înregistrării ce se va adăuga.
Saltul la câmpul următor se realizează fie prin apăsarea tastei Enter, fie când
câmpul se completează în întregime. După introducerea ultimului câmp se sare la
următoarea înregistrare ce se va adăuga. Pentru a edita un câmp de tip memo, când
cursorul se află în câmpul respectiv, se apasă combinaţia Ctrl+ PageDown, după care se
intră într-o fereastră de editare a câmpului memo. Ieşirea cu salvare din această fereastră
se face cu combinaţia de taste Ctrl + Enter. Terminarea introducerii tuturor înregistrărilor
se realizează acţionând Ctrl + Enter, fereastra de editare închizându-se după aceasta .
Cea de-a doua metodă de adăugare a unei înregistrări noi la o bază de date o
reprezintă inserarea înregistrării în interiorul bazei de date folosind comanda INSERT.
Comanda INSERT are următoarea sintaxă:
INSERT [ BEFORE] [BLANK]
şi are ca efect inserarea unei înregistrări noi, după înregistrarea curentă. Dacă se
specifică clauza BLANK se adaugă o înregistrare blank, astfel se deschide o fereastră de
editare pentru introducerea interactivă a conţinutului noii înregistrări. Clauza BEFORE
determină adăugarea unei înregistrări noi înaintea înregistrării curente astfel :
INSERT BEFORE
INSERT
Exemplu
USE mfixe_n
GOTO 2 se pozitionează indicatorul de ;
inregistrări pe inregistrarea 2
INSERT BEFORE se insereaza o noua inregistrare;
in pozitia 2
LIST
USE
16
Baze de date – Mediul FoxPro for Windows
17
Baze de date – Mediul FoxPro for Windows
Clauza FIELDS are ca efect afişarea spre editare doar a câmpurilor specificate în
<listă câmpuri> în ordinea apariţiei lor pe listă. Dacă această clauză lipseşte, sunt afişate
spre editare toate câmpurile bazei de date.
Această listă reprezintă o înşiruire de câmpuri ale unei baze de date sau calculate,
separate prin virgulă, având următoarea sintaxă:
<câmp 1> [ :R]
[ :V= <expr 1> [: F] [ :E = <expC>] ]
[ :P= <expC>]
[ :B= <expr2>, <expr3> [:F] ]
[:H=<expC3>]
[:W=<expL1> ]
[, <câmp 2> [ :R] …]
în lista de câmpuri pot fi incluse şi câmpuri ale unei baze de date deschisă într-o altă zonă
de lucru decât cea curentă.
Câmpurile calculate reprezintă câmpuri din fereastra de editare, create prin evaluarea
unei expresii şi afişate în fereastra respectivă ca un câmp de sine stătător. Aceste câmpuri
se pot doar vizualiza, dar nu se pot modifica. Sintaxa de definiţie a unui câmp calculat
este :
Exemplu <nume câmp calculat > = <expr>
Având baza de date MFIXE, vom deschide o fereastră de editare în care vom afişa
doar câmpurile COD, VECHIME, STARE. Primul şi ultimul sunt câmpuri simple ale
bazei de date, VECHIME fiind un câmp calculat în funcţie de data instalării (câmpul
DATA_INST din baza de date ) şi data curentă.
CLOSE ALL
USE mfixe
CHANGE FIELDS cod, vechime = (DATE ( ) – data_inst) / 365, stare
USE
În sintaxă observăm posibilitatea ataşării fiecărui câmp, a uneia sau mai multor opţiuni.
:R- câmpul se poate vizualiza nu şi modifica;
:V= <expr1> permite validarea câmpului introdus.
:F- se foloseşte pentru a forţa evaluarea expresiei <expr1>, şi deci validarea chiar şi
atunci când se trece cu cursorul prin câmp fără modificarea conţinutului acestuia .
18
Baze de date – Mediul FoxPro for Windows
:E= <expC1> se foloseşte pentru ca mesajul afişat în caz de eroare să fie altul decât cel
implicit, şi anume <expC1>.
:B= <expr2>, <expr3> se foloseşte pentru a specifica intervalul în care trebuie să se afle
valoarea din câmp pentru editare, <expr2> reprezintă limita inferioară, iar
<expr3>reprezintă limita superioară .
:P=<expC2> se poate specifica cod PICTURE, care va fi prezentat la comanda GET.
:H=<expC3> numele câmpului ce se afişează la partea superioară a ferestrei de editare va
fi înlocuit cu <expC3>;
:W=<expL1> se permite intrarea în editarea câmpului doar dacă expresia
logică<expL1>este evaluată la valoarea .T.;
Clauza FREEZE se foloseşte pentru a selecta spre modificare un singur câmp, şi
anume <câmp> restul fiind afişate în fereastra de editare fără a se permite editarea lor.
Clauza KEY se foloseşte pe baze de date indexate pentru limitarea mulţimii
înregistrărilor afişate în fereastra Change, la cele pentru care valoarea cheii de indexare
se află în intervalul ( <expr1>, <expr2>).
Clauza NOAPPEND, prezentă în comanda CHANGE, opreşte utilizatorul de a
adăuga înregistrări noi la baza de date, din fereastra de editare.
Clauza NOEDIT şi NOMODIFY sunt două clauze care se exclud şi care nu permit
modificarea înregistrărilor bazei de date, ci vor permite doar vizualizarea acestora .
Atenţie ! –ieşirea din fereastra de editare cu combinaţia de taste Ctrl+End salvează
configuraţia ferestrei, iar ieşirea cu combinaţia de taste Ctrl+Q nu realizează această
salvare.
Clauza PREFERENCE determină salvarea atributelor ferestrei de editare Change în
fişierul de resurse FoxProW sub numele dat prin şirul de caractere <expC3>.
Partiţionarea ferestrei de editare Change se realizează cu ajutorul clauzei LPARTITION
cursorul va fi poziţionat iniţial în primul câmp al partiţiei din partea stângă.
Clauza NOWAIT este disponibilă numai în interiorul unui program, adică nu se
poate introduce când comanda este dată în mod interpretativ în fereastra de comenzi.
Folosind clauza TIMEOUT, programatorul specifică prin expresia numerică ce urmează
clauzei numărul de secunde cât FoxProW va aştepta pentru introducerea datelor în
fereastra de editare.
19
Baze de date – Mediul FoxPro for Windows
Clauza SAVE este folosită pentru a păstra fereastra de editare pe ecran şi după
ieşirea din comanda CHANGE. Această clauză este disponibilă doar în programele
FoxProW, neputându-se introduce în fereastra de comenzi .
Clauza WIDTH este folosită pentru a limita numărul de caractere afişate pentru un
câmp. Nu este afectată lăţimea câmpului în baza de date.
Spre deosebire de fereastra de editare CHANGE, unde câmpurile sunt afişate unul
sub altul în cadrul aceleiaşi înregistrări, în fereastra de editare Browse aceste câmpuri
sunt aşezate pe orizontală, unul lângă altul.
Sintaxa comenzii BROWSE este următoarea :
BROWSE
[FIELD3 <listă câmpuri>]
[FONT <expC1> [, <expN1> ] ]
[STYLE <expC2>]
[FOR <expL1>]
[FORMAT]
[FREEZE <câmp>]
[KEY <expr1> [ , <expr2>]]
[LAST]
[LEDIT] [REDIT]
[LOCK <expN2>]
[LPARTITION]
[NOAPPEND] [NOCLEAR] [NODELETE]
[NOEDIT NOMODIFY]
[NOLGRID ] [NORGRID]
[NOLINK] [NOMENU] [ NOOPTIMIZE]
[NOREFRESH] [NORMAL] [NOWAIT]
[PARTITION <expN3>]
[PREFERENCE <expC3>]
[REST ] [SAVE]
[TIMEOUT <expN4>]
[TITLE <expC4>]
[VALID [:F] <expL2> [ERROR <expC5>] ]
[WHEN <expL3>]
[WIDTH <expN5>]
[ [WINDOW] <nume fereastră 1>]
[IN [WINDOW] <nume fereastră2> IN SCREEN] ]
[COLOR <listă perechi culori>
COLOR SCHEME <expN6> ]
Clauza LEDIT prezentă în comanda BROWSE face ca partiţia stângă să fie afişată în
format Change, iar prezenţa clauzei REDIT are acelaşi efect asupra partiţiei drepte.
20
Baze de date – Mediul FoxPro for Windows
21
Baze de date – Mediul FoxPro for Windows
USE mfixe
DISPLAY ALL
USE
Clauza FIELDS se foloseşte cu scopul de a afişa doar câmpurile specificate în <listă
câmpuri> în ordinea apariţiei lor în această listă.
<domeniu>, FOR şi WHILE determină domeniul înregistrărilor ce vor fi afişate cu
comanda DISPLAY.
Prezenţa clauzei OFF în format determină dispariţia din formatul de afişare a
coloanei 0 reprezentând numărul de ordine al înregistrărilor din baza de date.
Clauza NOCONSOLE este utilizată când se afişează la imprimantă sau într-un fişier
pe disc şi nu se doreşte modificarea conţinutului ecranului.
Comanda LIST este asemănătoare cu DISPLAY(are aceeaşi sintaxă cu aceleaşi
semnificaţii ale clauzelor), cu următoarele diferenţe ;
-domeniul implicit al înregistrărilor pentru comanda DISPLAY este NEXT 1( adică
înregistrarea curentă ) pe când cel al comenzii LIST este ALL( toate înregistrările)
-comanda DISPLAY are ca efect afişarea conţinutului bazei de date, ecran cu ecran,
trecerea de la un ecran la altul făcându-se după apăsarea unei taste. La comanda LIST
afişarea este continuă, pauza dintre ecrane lipsind ;
22
Baze de date – Mediul FoxPro for Windows
USE mfixe
SET HEADING ON
LIST se afiseaza un antet
SET HEADING OFF
LIST se afiseaza fara antet
USE
23
Baze de date – Mediul FoxPro for Windows
în care <expN1>reprezintă numărul de înregistrări peste care se sare, acesta poate fi atât
pozitiv cât şi negativ.
Dacă se sare peste ultima înregistrare a bazei de date indicatorul de înregistrări va
conţine numărul de înregistrări plus 1, iar funcţia EOF ( ) va returna valoarea .T. în cazul
saltului înaintea primei înregistrări funcţia BOF ( ) va returna valoarea .T.
<expN2> sau <expC> specifică baza de date la care se referă funcţia, prin zona de lucru
în care este deschisă (<expN2>) sau prin aliasul corespunzător (<expC> ).
Comanda SKIP este echivalentă cu SKIP 1.
Funcţiile BOF ( ) şi EOF ( ) au sintaxele:
24
Baze de date – Mediul FoxPro for Windows
25
Baze de date – Mediul FoxPro for Windows
RECALL
[ <domeniu > ] [ FOR <expL1>] [WHILE <expL2>]
[NOOPTIMIZE]
Până acum am prezentat ştergerea logică a înregistrărilor, adică marcarea lor pentru
ştergere. Pentru ca o înregistrare să fie eliminată fizic din baza de date aceasta trebuie
ştearsă la nivel fizic. Pentru ştergerea la nivel fizic se foloseşte comanda PACK :
PACK [MEMO] [DBF]
Ea realizează ştergerea fizică a tuturor înregistrărilor marcate pentru ştergere din
baza de date activă.
Atenţie ! :după aplicarea comenzii PACK asupra unei baze de date, înregistrările nu mai
pot fi refăcute; ştergerile sunt permanente. Comanda PACK poate fi întreruptă prin
acţionarea tastei ESCAPE, baza de date originală fiind refăcută.
O altă comandă cu privire la ştergerea înregistrărilor din baza de date este comanda
ZAP, cu sintaxa :
ZAP
Comanda şterge fizic toate înregistrările din baza de date activă fiind echivalentă cu
secvenţa de instrucţiuni:
DELETE ALL
PACK
Ori de câte ori se doreşte golirea totală a unei baze de date este recomandată
folosirea comenzii ZAP, care este mult mai rapidă decât secvenţa anterioară de
instrucţiuni.
Atenţie!:- ca şi la comanda PACK, înregistrările şterse cu comanda ZAP nu mai pot fi
refăcute adică ştergerea este fizică.
Înainte de execuţia comenzii, dacă opţiunea SAFETY este SET ON se va mai afişa un
mesaj de ştergere a confirmărilor.
26
Baze de date – Mediul FoxPro for Windows
27
Baze de date – Mediul FoxPro for Windows
28
Baze de date – Mediul FoxPro for Windows
Într-o bază de date pot exista mai multe înregistrări ce respectă condiţia dată. Prima
dintre acestea va fi găsită folosind LOCATE: Următoarele vor fi găsite prin intermediul
comenzii CONTINUE :
CONTINUE
Comanda găseşte următoarea înregistrare care respectă condiţia specificată în
ultima comandă LOCATE aplicată bazei de date active. Testarea reuşitei sau nereuşitei
căutării se face ca la comanda LOCATE, cu ajutorul funcţiilor RECNO ( ) , FOUND( ),
şi EOF.
Un alt tip de căutare într-o bază de date este realizat cu funcţia LOOKUP( ) .
Aceasta caută într-o bază de date prima apariţie a unei expresii date. În caz de
reuşită indicatorul de înregistrări se poziţionează pe înregistrarea în care a fost găsită
expresia, funcţia returnând valoarea unui anumit câmp al înregistrării respective. În caz
de nereuşită indicatorul de înregistrări se poziţionează după ultima înregistrare a bazei de
date, iar funcţia va returna şirul vid.
Sintaxa funcţiei este:
LOOKUP (<câmp 1>, <expr1>, <câmp2> [, <expC>] )
în care ;
<câmp1> reprezintă câmpul a cărei valoare va fi returnată de funcţie, în caz de căutare
terminată cu succes;
<expr> specifică expresia de căutat în baza de date;
<câmp2> se foloseşte pentru a realiza căutarea expresiei numai în acest câmp;
<expC> este utilizată pentru baze de date indexate;
Rezultatul este de tip şir de caractere, numeric, logic sau dată calendaristică, în funcţie de
tipul câmpului returnat.
Exemplu Să se afişeze numele primului mijloc fix din baza de date MFIXE.
CLOSE ALL
USE mfixe
LIST
? LOOKUP (denumire, .F., stare)
? RECNO ( )
? ? denumire
3 Autocamion M100
USE
29