Documente Academic
Documente Profesional
Documente Cultură
CursFox PDF
CursFox PDF
Cap. I INTRODUCERE
1.1 Organizarea datelor
5
Baze de date SGBD FoxPro
7
Baze de date SGBD FoxPro
9
Baze de date SGBD FoxPro
REZUMAT (Cap. I)
10
Baze de date SGBD FoxPro
ÎNTREBĂRI
Care este cel mai utilizat tip de bază de date (din punct de
vedere conceptual)?
11
Baze de date SGBD FoxPro
12
Baze de date SGBD FoxPro
2.1 Generalităţi
Observaţie:
La proiectarea unei baze de date este recomandabil să se
utilizeze metoda interactivă (din aproape în aproape).
Dacă numărul de câmpuri necesar este prea mare, baza
de date poate fi formată din două sau mai multe fişiere care
pot fi relaţionate între ele.
14
Baze de date SGBD FoxPro
Variabile de memorie
16
Baze de date SGBD FoxPro
Câmpul este cel mai mic element al unei baze de date care
poate fi accesat, definirea câmpului presupunând specificarea
următoarelor elemente: numele câmpului, tipul câmpului,
dimensiunea câmpului.
17
Baze de date SGBD FoxPro
ÎNTREBĂRI
Ce este FoxPro?
18
Baze de date SGBD FoxPro
CREATE [<fisier>/?]
19
Baze de date SGBD FoxPro
20
Baze de date SGBD FoxPro
Exemplu:
** deschide fişierul sursa.dbf
USE sursa
** creează un nou fişier tinta1.dbf având
** aceeaşi structura cu a fişierului sursa.dbf
COPY STRUCTURE TO tinta1
** creează un nou fişier ţinta2.dbf,
** structura acestuia conţinând doar câmpurile nume şi salar
** din fişierului sursa.dbf (presupunând că şi acesta are
** doua astfel de câmpuri)
COPY STRUCTURE TO tinta2 FIELDS;
nume, salar
COPY TO <fişier>
21
Baze de date SGBD FoxPro
22
Baze de date SGBD FoxPro
SELECT 1
USE f1
SELECT 2
USE f2
SELECT 1
COPY STRUCTURE EXTENDED TO f3
CREATE nou FROM f3
DISPLAY STRUCTURE
USE
SELECT f2
USE
Observaţie :
Comanda de deschidere a unei baze de date USE
<nume_baza> determină odată cu deschiderea fişierului,
poziţionarea pointerului de înregistrare pe prima înregistrare a
fişierului care se deschide. Fiecare zonă de lucru păstrează
poziţia pointerului pentru fişierul corespunzător, memorând
poziţia în care a rămas în cadrul fişierului în urma unei
operaţii anterioare. Dacă fişierul este indexat, poziţionarea
pointerului în urma deschiderii fişierului, are loc nu pe prima
înregistrare fizica ci pe prima înregistrare logică.
23
Baze de date SGBD FoxPro
MODIFY STRUCTURE
Aceasta comanda permite revenirea la ecranul de
proiectare a structurii bazei de date pentru a realiza
modificarea de structură dorită.
24
Baze de date SGBD FoxPro
ÎNTREBĂRI
25
Baze de date SGBD FoxPro
26
Baze de date SGBD FoxPro
ÎNTREBĂRI
27
Baze de date SGBD FoxPro
28
Baze de date SGBD FoxPro
Observaţie:
Toate clauzele de tipul <scope>, FOR şi WHILE care
apar în sintaxa oricărei comenzi au aceeaşi semnificaţie ca şi
în cazul comenzii DELETE.
29
Baze de date SGBD FoxPro
ÎNTREBĂRI
30
Baze de date SGBD FoxPro
31
Baze de date SGBD FoxPro
ÎNTREBĂRI
32
Baze de date SGBD FoxPro
BROWSE [FIELDS<lista_de_câmpuri>][<scope>]
[FOR<expr_logică1>] [WHILE<expr_logică 2>]
[FREEZE <câmp>] [ KEY <expr_1>, [<expr_2>]] [LAST]
[LEDIT] [REDIT]
[NOAPPEND][NOCLEAR][NODELETE]
[NOEDIT][NOMODIFY]
[PARTITION <expr_num.>][LOCK <expr_num>]
33
Baze de date SGBD FoxPro
Clauze:
- clauza :R este folosită atunci când se doreşte doar o citire
(vizualizare) a conţinutului câmpul respectiv (read only)
Exemplu: BROWSE FIELDS nume:R
34
Baze de date SGBD FoxPro
Exemplu:
BROWSE FIELDS virsta:V=virsta>10 :F;
:E=” Virsta prea mica!”
35
Baze de date SGBD FoxPro
36
Baze de date SGBD FoxPro
37
Baze de date SGBD FoxPro
Exemple:
** calculează întreg câmpul impozit=salar*0.2
REPLACE ALL impozit WITH salar*0.2
** aceeaşi operaţie, plus înlocuire conţinutului câmpului judeţ
** cu şirul de caractere (textul) Tm pentru un prefix=057
REPLACE ALL impozit WITH salar*0.2,;
judeţ WITH “Tm” FOR prefix=057
Sintaxa:
COUNT [<scope>] [<FOR<expr_logica1>]
[WHILE< expr_logica2>] [TO<variabila>]
[NOOPTIMIZE]
38
Baze de date SGBD FoxPro
Exemplu:
USE BAZA
COUNT FOR sex=.T. TO nrbăieţi
? ' Numarul de băieţi este:' nrbăieţi
USE
Sintaxa:
SUM [<lista_expresii>][<scope>]
[<FOR<expr_logica1>][WHILE< expr_logica2>]
[TO<lista_variabile>/TO ARRAY <masiv>]
[NOOPTIMIZE]
Exemplu:
** baza de date BANCA.dbf cu câmpurile datorii,
** primiri, sex
USE BANCA
** însumări selective după un câmp
SUM datorii FOR sex=.T. TO dator1
SUM datorii FOR sex=.F. TO dator2
** însumări după o expresie formata din doua câmpuri
SUM primiri-datorii TO plus
** afişare conţinut variabilă
? plus
39
Baze de date SGBD FoxPro
Sintaxa:
AVERAGE [<lista_expresii>][<scope>]
[<FOR<expr_logica1>]
[WHILE< expr_logica2>]
[TO<lista_variabile>/
TO ARRAY <masiv>][NOOPTIMIZE]
40
Baze de date SGBD FoxPro
41
Baze de date SGBD FoxPro
42
Baze de date SGBD FoxPro
ÎNTREBĂRI
43
Baze de date SGBD FoxPro
Exemplu:
** Citire tip numeric (tipul implicit pentru INPUT)
INPUT ‘Virsta: ’ TO var1
** de la tastatura de pot introduce numere
** Citire şir de caractere
INPUT ‘Numele: ’ TO var2
** se va forţa introducerea unor caractere prin încadrarea
** între ‘ ‘ ( spre exemplu, se va tasta ‘ION’)
INPUT ‘Data nasterii’ TO var3
** pentru citirea unei date calendaristice,
** informaţia se va încadra intre acolade {}
** spre exemplu: {01/01/99}
Exemplu:
** Citire doar şir de caractere
ACCEPT ‘Numele: ’ TO var
** va apare pe ecran textul Numele, şi spre exemplu,
** se va tasta: ION
45
Baze de date SGBD FoxPro
46
Baze de date SGBD FoxPro
** ştergere ecran
CLEAR
** declararea unei valori iniţiale implicite pentru
** variabila nume de tip şir de caractere
nume=' '
** afişare mesaj şi caseta pentru scriere, începând cu
** linia 10 şi coloana 10
@10, 10 SAY 'Introduceti numele ;
persoanei'GET nume
** activare prompter de scriere de la tastatura
READ
47
Baze de date SGBD FoxPro
[VALID expr_logica>
[ERROR<expr_caracter>]]
[WHEN <conditie>]
[MESSAGE <expr_caracter>]
[COLOR SCHEME <expr_numerica1>/COLOR <lista
perechi culori>]
Exemplu:
** afişare pe patru caractere: pentru primul caracter se
** permite orice caracter alfabetic (codul A, Tabelul 2), iar
** pentru următoarele trei sunt permise sunt permise
48
Baze de date SGBD FoxPro
** doar cifre
PICTURE 'A999'
** şirul format din cele 4 caractere este centrat, şi toate
** caracterele sunt convertite în majuscule
FUNCTION 'i!'
Tabel 1
Cod SEMNIFICAŢIE
FUNCTION
A Permite numai caractere alfabetice
Aliniază la stânga datele numerice în interiorul
B
câmpului de ieşire
După un număr pozitiv se afişează CR. Se
C foloseşte doar pentru SAY şi pentru date
numerice
Foloseşte formatul de dată calendaristică curent,
D
stabilit prin comanda SET DATE
Editează date calendaristice cu formatul
E
European
I Centrează textul în interiorul câmpului
J Aliniază la dreapta textul de ieşire din câmp
Selectează întregul câmp pentru editare când se
K
mută cursorul în acest câmp
Afişează zerouri în faţa punctului zecimal (în
L locul spaţiilor)în ieşirile numerice. Se foloseşte
doar pentru date numerice.
Permite selectarea unui element al listei ca
valoare pentru variabila citită cu comanda GET.
Elementele listei sunt separate prin virgulă şi
pot fi parcurse (în timpul citirii câmpului
respectiv) folosind tasta SPACE sau tastând
M<lista>
prima literă a elementului de selectat.
Terminarea editării câmpului este semnalată
prin apăsarea tastei Enter. Se foloseşte doar
pentru comanda GET, la citirea şirurilor de
caractere.
La utilizarea unui şir de caractere conţinând şi
alte caractere decât coduri PICTURE, acestea
R vor fi afişate pe ecran, dar nu vor fi depozitate
în variabila de citit. Se folosesc doar pentru date
de tip şir de caractere.
S<n> Limitează lăţimea de afişare la <n> caractere,
49
Baze de date SGBD FoxPro
Tabel 2
Cod (clauza)
SEMNIFICAŢIE
PICTURE
Permite introducerea doar a caracterelor
A
alfabetice
W Permite doar date de tip logic
N Permite doar litere şi cifre
X Permite orice caractere
Permite doar caracterele Y, y, N, n (de la “Yes”
Y
şi “No”) trecându-le la majuscule
Cu date de tip şir de caractere permite doar cifre
9
iar cu date numerice permite cifre şi semne.
# Permite cifre, blancuri şi semne
Afişează simbolul monetar curent definit cu
$ comanda SET CURRENCY. La fel ca la codul
FUNCTION corespunzător.
* Se afişează asteriscuri în faţa valorilor numerice
Converteşte literele în majuscule, neafectând
!
alte caractere
. Specifică poziţia punctului zecimal
50
Baze de date SGBD FoxPro
Exemplu:
@ 1,1 SAY 'Virsta persoanei: ' GET virsta;
DEFAULT 0 PICTURE '999' RANGE 0,100
READ
51
Baze de date SGBD FoxPro
Exemplu:
** câmpul GET virsta este un câmp al bazei de date active
@ 1,1 SAY 'Virsta persoanei: ' GET virsta;
DEFAULT 0 PICTURE '999' VALID virsta>0;
ERROR ' Virsta NEGATIVA!'
READ
Exemplu:
var1=0
@ 1,1 SAY 'introduce-ti datele: '
@ 2,1 GET var1 PICTURE '999'
** citirea şi memorare în var2 se face doar daca valoarea
** citita şi memorat în var1 este diferita de zero
@ 3,1 GET var2 DEFAULT 0 PICTURE '999';
WHEN var1<>0
** un singur READ pentru ambele SAY (citire multipla)
READ
52
Baze de date SGBD FoxPro
Exemplu:
** fie baza de date BAZA cu câmpurile NUME, VIRSTA,
** DATA (calendaristica)
USE BAZA
** adăugare articol vid şi mutare pointer înregistrare pe
** acest ultim articol
APPEND BLANK
** citirea unui nume de max. 10 caractere majuscule
@1,1 SAY 'Introdu numele' GET NUME;
PICTURE '!!!!!!!!!!'
** citire virsta valida
@2,1 SAY 'Introdu virsta' GET VIRSTA;
PICTURE '99' VALID VIRSTA>0;
ERROR 'Virsta negativa! '
** citire data naşterii valida (funcţia DATE() returnează
** data curentă)
@3,1 SAY 'Introdu data nasterii' GET DATA;
VALID data<DATE()ERROR 'Data din viitor! '
** activare citire multipla pe toate cele trei SAY
READ
53
Baze de date SGBD FoxPro
54
Baze de date SGBD FoxPro
var=' '
@ 1,1 SAY ‘Nume’GET var COLOR g/w, R/B
READ
** sau folosind comanda SET COLOR TO
** citire de la tastatura cu coloare alba (White) pe fond Negru
SET COLOR TO g/w,W/N
@ 1,2 GET var
READ
** citire 'parola' (scriere cu aceeaşi culoare ca a fundalului
** (roşu), deci caracterele introduse de la tastatura nu vor fi
** vizibile)
@ 5,2 SAY 'Parola: ' GET parola;
DEFAULT SPACE(20) COLOR G/W,R/R
READ
55
Baze de date SGBD FoxPro
Exemple:
** salt la linia următoare şi afişarea unui mesaj
? 'mesaj de test'
** afişare începând din poziţia curentă a rezultatului evaluării
** expresiei (9)
?? 3+6
** afişarea conţinutului unei variabile var (Ion)
var='Ion'
? var
** afişarea datei curente
? DATE()
56
Baze de date SGBD FoxPro
57
Baze de date SGBD FoxPro
58
Baze de date SGBD FoxPro
ÎNTREBĂRI
59
Baze de date SGBD FoxPro
IF<expL>
<instrucţiuni1>
[ELSE]
<instrucţiuni2>
ENDIF
60
Baze de date SGBD FoxPro
Exemplu:
SET TALK OFF
CLEAR
a=0
b=0
@4,10 SAY `Primul număr` GET a;
PICTURE `9999`
@5,10 SAY `Al doilea număr` GET b;
PICTURE `9999`
READ
IF a> b
? `Primul număr este mai mare '
** se execută când a>b
ELSE
? `Al doilea număr este mai mare sau numerele sunt egale`
** a<b
ENDIF
?
IF b<> 0
** se execută doar daca b este diferit de 0
?a,':',b,'=',a/b
ENDIF
61
Baze de date SGBD FoxPro
Exemplu:
SET TALK OFF
CLEAR
a=0
b=0
@1,10 SAY `Primul număr:` GET a;
PICTURE `9999`
@2,10 SAY `Al doilea număr:` GET b;
PICTURE `9999`
READ
şir1=`Primul număr este mai mare`
şir2=`Al doilea număr este mai mare sau;
numerele sunt egale`
? IIF (a>b, şir1, şir2)
Exemplu:
SET TALK OFF
CLEAR
a=0
b=0
@1,10 SAY `Primul număr:` GET a;
PICTURE `9999`
@2,10 SAY `Al doilea număr:` GET b;
PICTURE `9999`
READ
şir1=`Primul număr este mai mare`
şir2=`Al doilea număr este mai mare `
şir3=`Numerele sunt egale `
IF a>b
? şir1 ** a> b
ELSE
IF a<b
62
Baze de date SGBD FoxPro
? şir2 ** a <b
ELSE
? şir3 ** a = b
ENDIF
ENDIF
DO CASE
CASE <expL1>
<instrucţiuni1>
[CASE <expL2>
<instrucţiuni2>
…
CASE <expLn>
<instrucţiuniN>]
[OTHERWISE
<instrucţiuni>]
ENDCASE
Exemplu:
SET TALK OFF
CLEAR
** declarare şir cu 4 elemente
DIMENSION a[4]
a[1] = `Primăvară`
a[2] = `Vară`
a[3] = `Toamnă`
a[4] = `Iarnă`
@ 1,1 SAY 'Anotimp' GET Anotimp;
DEFAULT SPACE(15)
READ
? 'anotimpul '+Anotimp+' conţine lunile: '
DO CASE
CASE anotimp == `Primăvară`
??`Martie, Aprilie, Mai`
CASE anotimp == `Vară`
??`Iunie, Iulie, August`
CASE anotimp == `Toamnă`
??`Septembrie,Octombrie,Noiembrie`
OTHERWISE
??`Decembrie,Ianuarie, Februarie`
ENDCASE
64
Baze de date SGBD FoxPro
Sintaxa:
FOR <var> = <exp N1> TO <expN2> [STEP <expN3>]
<instrucţiuni>
[EXIT]
[LOOP]
ENDFOR │ NEXT
Exemplu: comanda
FOR i = 1 TO 4
? i
ENDFOR
65
Baze de date SGBD FoxPro
? 2
? 3
? 4
În exemplul de mai sus i este variabila contor, 1 este
valoarea iniţială a variabilei, iar 4 este valoarea finală a
acesteia. La fiecare execuţie a lui ENDFOR variabila i va fi
incrementată cu 1.
La ultima execuţie a comenzii ? i valoarea lui i va fi 4.
Execuţia lui ENDFOR are ca efect creşterea lui i cu 1, deci
valoarea lui i va fi 5, care depăşeşte valoarea finală (4).
Programul va continua cu prima instrucţie de după ENDFOR.
Comanda:
FOR i = 4 TO 1 STEP –2
? i
ENDFOR
Exemplu:
a = 3
FOR i = 1 TO a
a=10
? i*3
ENDFOR
Exemplu:
FOR i = 1 TO 10
66
Baze de date SGBD FoxPro
? i
i = 15
ENDFOR
Exemplu:
Sumă = 0
FOR i = 1 TO 15
sumă = sumă + 1
IF i = 5
EXIT
ENDIF
ENDFOR
SCAN [ NOOPTIMIZE]
[<domeniu>][FOR <expL1>][WHILE <expL2>]
[<instrucţiuni>]
[LOOP]
[EXIT]
ENDSCAN
Exemplu:
SCAN
<instrucţiuni>
ENDSCAN
68
Baze de date SGBD FoxPro
Exemplu:
sumă = 0
nr = 1
DO WHILE sumă 1000
sumă = sumă + p
nr = nr + 1
ENDDO
sumă = sumă + nr
69
Baze de date SGBD FoxPro
a = nr – 1
? ` S-au adunat primele` , a,`nr. natural`
?` S-a obţinut suma de`, sumă
Comanda
IF<expL><instrucţiuni1>
[ELSE]<instrucţiuni2>
ENDIF
permite executarea fie a unui grup de instrucţiuni, fie
(opţional) a unui alt grup de instrucţiuni, în funcţie de
rezultatul evaluării unei expresii logice.
70
Baze de date SGBD FoxPro
ÎNTREBĂRI
71
Baze de date SGBD FoxPro
Sintaxa:
LOCATE FOR <expL1> [<domeniu>]
[WHILE <expL2>]
[NOOPTIMIZE]
Exemplu:
USE BAZA
** caută primul articol care corespunde condiţiei şi muta pe el
** indicatorul de înregistrare
LOCATE FOR virsta>25
** afişează acel articol (simplă vizualizare)
DISPLAY
** afişează tabela cu indicatorul de înregistrare pe articolul
** găsit în vederea unei vizualizări sau modificări a acestuia
CHANGE
Exemplu:
USE baza
** Observaţie: funcţia FOUND() referită va fi
** tratată în continuarea paragrafului
** citeşte numele de la tastatura
ACCEPT “Numele: : TO var
** caută prima înregistrare
LOCATE FOR nume=var
** verificarea reuşitei căutării
IF FOUND()=.T.
DISPLAY
ELSE
WAIT “ Nu exista”
ENDIF
** caută până la finalul bazei de date
** EOF() returnează .T. dacă s-a ajuns la finalul bazei de date,
** altfel returneaza .F. (End Of File)
DO WHILE NOT(EOF())
CONTINUE
73
Baze de date SGBD FoxPro
IF FOUND()
DISPLAY
ENDIF
ENDDO
USE
FOUND([<expN> / <expC>])
Exemplu:
**să se găsească primii doi băieţi din baza de date
AGENDA.DBF
** închide toate fişierele din zona curenta de lucru
CLOSE ALL
USE agenda
** caută şi muta indicatorul de înregistrare
LOCATE FOR sex=.T.
? FOUND() ** returnează .T. pentru primul articol găsit
? EOF () ** este sfârşit de fişier?
DISPLAY ** afişează primul articol găsit
** caută al doilea articol şi muta indicatorul de înregistrare
CONTINUE
** funcţia RECNO() returnează numărul de ordine al
** articolului curent (în exemplul de faţă, numarul celui de-al
** doilea articol găsit)
? RECNO()
DISPLAY ** afişează al doilea articol găsit
74
Baze de date SGBD FoxPro
Exemplu:
**citeşte de la tastatura un nume într-o variabila var
INPUT 'nume' TO var
LOCATE FOR NUME=var
** dacă conţinutul variabile diferă de cel al câmpului nume
** doar prin modul de
** scriere cu litere mici sau mari, căutarea va eşua
? FOUND () ** va returna fals
** folosirea funcţiei UPPER va conduce la o căutare reuşita
LOCATE FOR upper(NUME)=upper(var)
** o soluţie deseori utilă o constituie comanda
LOCATE FOR upper(NUME)=ALLTRIM(upper(var))
SEEK <expr>
Exemplu:
CLOSE ALL
** daca exista un fişier index agenda.cdx
USE agenda INDEX agenda ORDER nume
** daca nu exista, se deschide baza şi se face indexarea
USE agenda
INDEX ON nume TAG nume
** caută şi mută indicatorul de înregistrare
SEEK 'Popescu'
** returnează pe ecran adevărat .T. în caz de căutare reuşită
?FOUND()
76
Baze de date SGBD FoxPro
77
Baze de date SGBD FoxPro
78
Baze de date SGBD FoxPro
Exemplu:
USE personal
** filtru pentru accesarea tuturor articolelor la
** care salar>1000000
SET FILTER TO salar>1000000
** afişare doar a articolelor care îndeplinesc condiţia
** de filtrare
DISPLAY ALL
** înlăturarea condiţiei de filtrare
SET FILTER TO
** afişarea tuturor articolelor bazei de date
BROWSE
Comenzile
SEEK <expr> şi
FIND <sir de caractere>
caută în baza de date activă, indexată (neapărat după câmpul
în care se face căutarea) prima înregistrare pentru care
cheia de index are valoarea <expr> (sau <şir de caractere>).
Funcţia
LOOKUP ( <câmp1 >, <expr>, <câmp2> [, <expC> ]) 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
un 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.
ÎNTREBĂRI
80
Baze de date SGBD FoxPro
COPY TO <fişier>
[FIELDS <lista_câmp>][<scope>]
[FOR<expr_logică1>] [WHILE<expr_logică2>]
[[WITH] CDX]/[[WITH]PRODUCTION]
[DELIMITED][WITH TAB/
WITH<delimitator_caracter> /WITH BLANK]
[[TYPE] FOXPLUS/DIF/MOD/SDF/SYLK/WK1/
WKS/WR1/WRK/XLS]
DIMENSION<nume_masiv1>
(<expr_numerică1>[,<expr_numerică2>])
[,<nume_masiv2>(<expr_numerică3>
[,<expr_numerică4>])]…
83
Baze de date SGBD FoxPro
sau:
DECLARE
<nume_masiv1>(<expr_numerică1>[,<expr_numerică2>])
[,<nume_masiv2>(<expr_numerică3>
[,<expr_numerică4>])]…
Exemple:
**creează un masiv unidimensional (şir) cu 10 elemente
DECLARE Alfa(10)
**declara un masiv bidimensional (matrice) cu 2 linii şi 4
coloane
DIMENSION Alfa1(2,4)
? Alfa(1)
** afişează pe ecran elementul 1 al masivului şir Alfa
? Alfa1(2,2)
** afişează pe ecran elementul de pe linia 2, coloana 2
Exemplu:
USE baza
DECLARE alfa(20,3) ** nu este necesară
** copiază în masivul alfa (având 20 de linii şi 3 coloane),
** informaţia din câmpurile nume,virsta, salar
** corespunzătoare primelor 20 de articole ale bazei de date
COPY TO ARRAY alfa FIELDS nume, virsta,;
salar
** afişează conţinutul elementului de pe linia 2,
** coloana 3 (deci practic informaţia corespunzătoare
** câmpului salar al celui de-al doilea articol al bazei de date)
? alfa(2,3)
84
Baze de date SGBD FoxPro
SCATTER [FIELDS<listă_câmpuri>][MEMO]
TO <masiv>/ TO <masiv> BLANK/MEMVAR/
MEMVAR BLANK
în care:
85
Baze de date SGBD FoxPro
GATHER FROM<masiv>/MEMVAR
[FIELDS <listă_câmpuri>][MEMO]
86
Baze de date SGBD FoxPro
Exemplu:
Se consideră baza de date arhiva.dbf, în care se doreşte
schimbarea între ele a înregistrărilor cu numerele 2 şi 4.
La această interschimbare se va folosi ca intermediar un
set de variabile, care poartă acelaşi nume cu câmpurile
corespunzătoare şi respectiv un masiv cu numele sir.
Tehnica de schimbare este dată în următoarea figura
următoare:
INREGISTRAREA 2
1-SCATTER
4 GATHER
USE arhiva
** listează articolele 2 şi 4 (funcţia RECNO()
** returnează numărul articolului curent
LIST FOR RECNO ()=2 .AND. RECNO()=4
GO TO 2
** operaţia 1: copierea înregistrării 2 în setul de variabile
SCATTER MEMVAR MEMO
GO TO 4
** operaţia 2: copierea înregistrării 4 în masivul şir
87
Baze de date SGBD FoxPro
Comanda
APPEND FROM <fişier>/?[FIELDS<lista _câmpuri>]
[FOR<expr_logică>]
[[TYPE][DELIMITED[WITH TAB
/WITH<delimitator_caracter>/WITH BLANK]]
/DIF/FW2/MOD/PDOX/RPD/SDF/SYLK/WK1/
WK3/WKS/WR1/ WRK/XLS]
permite adăugarea (importul) de înregistrări, dintr-un fişier
bază de date de alt tip, la sfârşitul bazei de date FoxPro
deschise.
Comanda
IMPORT FROM <fişier>[TYPE]FW2/MOD/PDOX/
RPD/WK1/WK3/WKS/WKR/XLS
88
Baze de date SGBD FoxPro
Comanda
EXPORT TO <fişier> [FIELDS<lista_câmpuri>][<scope>]
[FOR <expr_logica1>][WHILE <expr_logica2>]
[TYPE]FW2/MOD/PDOX/RPD/WK1/WK3/WKS/
WKR/XLS
exportă date dintr-un fişier bază de date FoxPro activ, într-un
nou fişier bază de date cu alt format.
89
Baze de date SGBD FoxPro
ÎNTREBĂRI
90
Baze de date SGBD FoxPro
92
Baze de date SGBD FoxPro
Exemplu:
USE baza1
** sortare ascendenta după câmpul nume, fără a ţine
** seama de caractere mari sau mici
SORT TO baza2 ON nume/AC
LIST ** listează articolele din baza1.dbf
USE baza 2
LIST ** listează articolele din baza2.dbf
Exemplu:
USE student.dbf
** sortează descrescător după data naşterii; pentru date
** identice, sortează ascendent după ‘prenume’; se copiază
** în noua bază de date doar articolele ordonate pentru care
** câmpul sex=.F.
SORT TO studentf ON născut /D, prenume;
ASCENDING FOR sex=.F.
USE studentf
LIST
USE
Observaţie: Scrierea unei comenzi pe mai multe rânduri
necesită caracterul “;”. Acesta arată că respectiva comandă se
continua şi pe linia următoare.
2.11.2 Indexarea
94
Baze de date SGBD FoxPro
Exemple:
** Se creează un fişier index simplu (fisier1.idx),
** cheia de indexare fiind câmpul ‘nume’
INDEX ON nume TO fisier1
** Se creează un fişier index simplu (fisier2.idx),
** cheia de indexare fiind expresia ‘nume+prenume’
INDEX ON nume+virsta TO fisier2
95
Baze de date SGBD FoxPro
Exemple:
USE baza
** Se creează un fişier index compus structural (având numele
** baza.cdx), cheia de indexare fiind botezată ‘nume’
** (indexarea facându-se după câmpul nume)
INDEX ON nume TAG nume
** Se adaugă o nouă cheie de indexare botezata ‘identitate’
** (indexarea făcându-se după expresia ‘nume+prenume’) în
** fişierul index compus structural (baza.cdx)
INDEX ON nume+prenume TAG identitate
96
Baze de date SGBD FoxPro
Exemplu:
USE baza
INDEX ON nume TO fisier ** creează fisier.idx
INDEX ON nume TAG nume ** creează baza.cdx
** creează fisier.cdx (ultimul fişier index fiind cel activ)
INDEX ON virsta TAG virsta OF fisier
CLOSE ALL ** se închid toate fişierele din zona 1
** deschide baza de date, având fişierul index simplu
** fisier.idx activ
USE baza INDEX fisier
** deschide baza de date având activă cheia nume din fişierul
** index compus structural (baza.cdx)
USE baza ORDER nume
** deschide baza de date având activă cheia virsta din fişierul
** index compus
** nestructural (fisier.cdx)
USE baza ORDER virsta OF fisier
97
Baze de date SGBD FoxPro
98
Baze de date SGBD FoxPro
99
Baze de date SGBD FoxPro
ÎNTREBĂRI
100
Baze de date SGBD FoxPro
101
Baze de date SGBD FoxPro
Exemplu:
Se considera bazele de date PERSONAL şi
SALARIAT, având ambele câmpul NUME:
Baza date PĂRINTE (zona 1) Baza date COPIL (zona 2)
Personal.dbf Salariat.dbf
având câmpurile:
NUME NUME
PRENUME VARSTA
TELEFON SALAR
ADRESA
SELECT 1
** se realizează relaţionarea după câmpul comun
SET RELATION TO nume INTO 2
** se listează corelat informaţiile din ambele baze de date
LIST Nume, Prenume, Telefon, Adresa,;
B->Vârstă, B.Salar
** se închid bazele de date
USE ** sau CLOSE
ALL
SELECT 2
USE
USE Personal
SELECT 2
USE Salariat
INDEX ON nume TO Salariat
SELECT 1
SET RELATION TO nume INTO 2
** citire de la tastatura a numelui celui căutat
@ 1,1 SAY "numele: " get variabila;
DEFAULT SPACE(20)
READ
** căutare
LOCATE ALL FOR nume=variabila
** afişare date dacă există persoana căutata
IF FOUND()
DISPLAY Nume, Prenume, Telefon, Adresa,;
B->Vârstă, B.Salar
ELSE
** afişare mesaj de căutare nereuşita
@ 5,5 SAY "Persoana nu exista"
ENDIF
CLOSE ALL
103
Baze de date SGBD FoxPro
Exemplu:
USE Personal
SELECT 2
USE Salariat
INDEX ON nume TO Salariat
SELECT 1
SET RELATION TO nume INTO 2
SET SKIP TO 2
** du-te la articolul 1 din baza părinte
GOTO 1
** afişează prima relaţie găsita
DISPLAY Nume, Prenume, Telefon, Adresa,;
B->Vârstă, B.Salar
** salt relativ (condiţionat de relaţia existenta)
SKIP
** afişează a doua relaţie găsita
DISPLAY Nume, Prenume, Telefon, Adresa,;
B->Vârstă, B.Salar
…
Stabilirea unei relaţii între două sau mai multe baze de date,
se face în FoxPro cu ajutorul comenzii:
SET RELATION TO [<exp1> INTO <expN1>/<expC1>]
[,<exp2> INTO <expN2>/<expC2>…] [ADDITIVE]
ÎNTREBĂRI
106
Baze de date SGBD FoxPro
107
Baze de date SGBD FoxPro
USE baza
SET FORMAT TO fisier.fmt
APPEND
109
Baze de date SGBD FoxPro
Exemplu:
USE BAZA
** afişare ecran cu ecran
REPORT FORM fis_rap PREVIEW
110
Baze de date SGBD FoxPro
ÎNTREBĂRI
opţiunile bara meniu vor fi afişate una după alta, separate prin
blank-uri.
Clauzele COLOR <listă_perechi_culori>/COLOR
SCHEME <exprN2> au fost deja tratate.
Observaţie: Definirea meniului rămâne în memorie până la
ştergerea acestuia cu una din comenzile RELEASE MENUS,
CLEAR MENUS, asupra cărora se va reveni.
Exemplu:
DEFINE MENU principal
DEFINE PAD opţiune1 OF principal PROMPT;
“Editare”
DEFINE PAD opţiune2 OF principal PROMPT;
“Tipărire”; KEY CTRL+T, ‘^T’
DEFINE PAD opţiune3 OF principal PROMPT;
“Căutare” BEFORE opţiune2
** sau AFTER opţiune1
ACTIVATE MENU principal
114
Baze de date SGBD FoxPro
Exemplu :
115
Baze de date SGBD FoxPro
116
Baze de date SGBD FoxPro
117
Baze de date SGBD FoxPro
ON PAD <nume_opţiune>
OF <nume_meniu principal>
[ACTIVATE POPUP <nume_submeniu>]
[ACTIVATE MENU <nume_meniu_secundar>]
118
Baze de date SGBD FoxPro
DEACTIVATE MENU
Exemplu:
set talk off
USE baza
CLEAR
** definire meniu
DEFINE MENU meniu1 MESSAGE "Meniu ;
principal"
DEFINE PAD optiune1 OF meniu1;
PROMPT "CAUTARE"
DEFINE PAD optiune2 OF meniu1;
PROMPT "TIPARIRE";
MESSAGE "Tiparire - porniti imprimanta !"
DEFINE PAD optiune3 OF meniu1;
PROMPT "SFIRSIT"
120
Baze de date SGBD FoxPro
** precizare acţiuni
ON SELECTION pad optiune1 OF meniu1;
DO proc1
ON SELECTION pad optiune2 OF meniu1; DO
proc2
ON SELECTION pad optiune3 OF meniu1
DEACTIVATE MENU
** activare meniu
ACTIVATE MENU meniu1
** aici se sare la execuţia comenzii DEACTIVATE MENU
** (Ieşire din program) ştergere meniu şi
** închidere bază de date
CLEAR MENUS
USE
RETURN
** procedură tipărire
PROCEDURE proc2
LIST TO PRINTER
WAIT "Tiparire terminata. Apasa o tasta… "
RETURN
121
Baze de date SGBD FoxPro
122
Baze de date SGBD FoxPro
Exemplu:
USE baza
DEFINE POPUP submen1 FROM 15,15 MARGIN;
PROMPT STRUCTURE
DEFINE POPUP submen2 FROM 15,25 MARGIN;
PROMPT FILE
ACTIVATE POPUP submen1
123
Baze de date SGBD FoxPro
124
Baze de date SGBD FoxPro
Exemplu:
DEFINE POPUP meniu FROM 5,5
DEFINE BAR 1 OF meniu;
PROMPT \<Modificare';
MESSAGE 'Modificare date'
DEFINE BAR 2 OF meniu PROMPT '\<Adaugare';
MESSAGE 'Adaugare date'
DEFINE BAR 3 OF meniu PROMPT '\<Stergere';
MESSAGE 'Stergere date'
DEFINE BAR 4 OF meniu PROMPT '\-'
DEFINE BAR 5 OF meniu PROMPT '\<Listare';
MESSAGE 'Vizualizare ecran'
DEFINE BAR 6 OF meniu PROMPT 'Ti\<parire';
MESSAGE 'Imprimare'
ACTIVATE POPUP meniu
CLEAR POPUPS
125
Baze de date SGBD FoxPro
126
Baze de date SGBD FoxPro
127
Baze de date SGBD FoxPro
Exemplu:
USE baza
DEFINE POPUP meniu FROM 2,1
DEFINE BAR 1 OF meniu;
PROMPT '\<Modificare'
DEFINE BAR 2 OF meniu PROMPT '\<Afisare';
MESSAGE 'Afisare cu filtrare'
DEFINE BAR 3 OF meniu PROMPT '\<Iesire';
** definire acţiune opţiuni
ON SELECTION BAR 1 OF meniu BROWSE
ON SELECTION BAR 2 OF meniu DO proc
ON SELECTION BAR 3 OF MENIU DEACTIVATE
POPUP
ACTIVATE POPUP meniu
CLEAR POPUPS
USE
RETURN
128
Baze de date SGBD FoxPro
Exemplu:
set talk off
clear
use baza1
** definire meniu bară
define menu functii
define pad submeniu of functii;
prompt "\<Submeniu"
define pad informatii of functii;
prompt "\<Informatii"
define pad iesire of functii;
prompt "I\<esire"
** activare meniu
activate menu functii
clear popups
clear menus
use
return
129
Baze de date SGBD FoxPro
** proceduri
procedure inform
hide menu
@ 1,1 say "se pot scrie orice fel de;
informatii"
wait
clear
show menu functii
return
procedure proc3
hide menu functii
hide popup submen
clear
aaaa=" "
@ 2,2 say "introduceti numele" get aaaa
read
locate all for produs=aaaa
if found()=.T.
browse redit
else
@ 10,10 say "Nu exista"
wait
endif
clear
show menu functii
show popup submen
return
130
Baze de date SGBD FoxPro
131
Baze de date SGBD FoxPro
132
Baze de date SGBD FoxPro
133
Baze de date SGBD FoxPro
134
Baze de date SGBD FoxPro
ÎNTREBĂRI
135
Baze de date SGBD FoxPro
136