Documente Academic
Documente Profesional
Documente Cultură
net/publication/320519029
CITATION READS
1 192
2 authors:
All content following this page was uploaded by Adrian Runceanu on 20 October 2017.
Referenţi ştiinţifici:
BAZE DE DATE –
O ABORDARE
VISUAL FOXPRO
Bibliogr.
ISBN 978-973-144-235-8
Coperta şi design:
Irina Gorea
irina.gorea@ymail.com
Baze de date – o abordare Visual Foxpro
Cuprins
Introducere 4
Capitolul 1. Sisteme de gestiune a bazelor de date 5
1.1. BAZE DE DATE. NOŢIUNI GENERALE 5
1.1.1. Sisteme de baze de date 5
1.1.2. Baze de date 6
1.1.3. Principalele concepte din teoria relaţională 8
1.2. Sisteme de gestiune a bazelor de date – Visual Foxpro 9
1.2.1. Caracteristici generale 9
1.2.2. Funcţiile SGBD-ului Visual Foxpro 12
Capitolul 2. SGBD-ul Visual Foxpro 13
2.1. Prezentarea sistemului Visual-Foxpro 13
2.2. Evoluţia sistemului Visual-Foxpro 14
2.3. Noutăţi Visual-Foxpro faţă de Foxpro 2.6 16
2.4. Lansarea. Meniul Visual-Foxpro 18
2.5. Comenzi pentru crearea şi modificarea structurii unei 22
tabele
2.5.1. Comanda CREATE 22
2.5.2. Comanda MODIFY STRUCTURE 22
2.5.3. Deschiderea şi închiderea unei tabele 23
2.5.4. Vizualizarea informaţiilor dintr-o tabelă 23
2.6. Tipuri de date 24
2.6.1. Tipurile de date numerice 25
2.6.2. Tipul şir de caractere 29
Capitolul 3. Căutare. Sortare. Actualizare 34
3.1. Căutare şi poziţionare 34
3.2. Sortare şi duplicare (copiere) 36
3.3. Comenzi de actualizare înregistrări 37
Capitolul 4. Indexare şi căutare rapidă 45
1
Baze de date
4.1. Indexare 45
4.2. Căutare 50
Capitolul 5. Prelucrări statistice şi financiare. Utilizarea câmpurilor 52
Memo şi General
5.1. Prelucrări statistice şi financiare. 52
5.2. Utilizarea câmpurilor Memo şi General 58
Capitolul 6. Programarea structurată în Visual-Foxpro 61
6.1. Comenzi specifice programelor 61
6.1.1. Crearea unui fişier text sau fişier program, 62
utilizând meniul System
6.1.2. Salvarea unui fişier de tip text sau de tip program 63
6.1.3. Deschiderea unui fişier existent 64
6.1.4. Crearea unui fişier text sau program utilizând o 64
comandă specifică
6.1.5. compilarea şi lansarea ăn execuşie a unui 65
program sursă
6.2. Comenzi pentru programarea structurată 66
6.2.1. Structura alternativă: IF ... ENDIF 66
6.2.2. Structura alternativă: DO …ENDCASE 68
6.2.3. Structura repetitivă cu test iniţial: 69
DOWHILE…ENDDO
6.2.4. Structura repetitivă cu număr cunoscut de paşi: 71
FOR…ENDFOR
6.2.5. Structura repetitivă: SCAN…ENDSCAN 72
6.2.6. Comanda CANCEL 73
6.2.7. Comanda SUSPEND 73
6.2.8. Comanda QUIT 73
Capitolul 7. Operaţii de actualizare a tabelelor 75
7.1. Comenzi pentru introducerea şi afişarea datelor 75
7.2. Programe de actualizare 78
Capitolul 8. Funcţii şi proceduri definite de utilizator. Ferestre. 84
8.1. Funcţii şi proceduri definite de utilizator. 84
8.2. Ferestre definite de utilizatorr. 87
Capitolul 9. Meniuri definite de utilizator 90
Capitolul 10. Limbajul SQL 99
Capitolul 11. Proiectarea vizuală a interogărilor 108
2
Visual Foxpro
3
Baze de date
Introducere
- prin versiunile cele mai recente, este conceput să lucreze sub mediile
WINDOWS, MAC şi UNIX. Visual FOXPRO versiunea 6.0 poate fi
implementat pe microcalculatoare care necesită 6 MB RAM;
4
Visual Foxpro
Capitolul 1
SISTEME DE GESTIUNE A BAZELOR DE DATE
5
Baze de date
6
Visual Foxpro
7
Baze de date
TUPLUL este linia dîntr-o relaţie şi nu are nume. Valorile dintr-un tuplu
aparţin produsului cartezian dintre domeniile relaţiei.
8
Visual Foxpro
FoxPro în versiunile 2.5 şi 2.6 este conceput pentru a lucra fie sub
sistemele de operare DOS sau UNIX (în modul de lucru caracter), fie sub
WINDOWS sau MACINTOSH (în modul de lucru grafic).
Din concurenţa firmelor de soft Borland (cu produsele dBASE şi Para-
dox) Nantucket (cu produsul Clipper) şi Microsoft (cu produsul FoxPro) s-a
9
Baze de date
Poate importa fişiere din EXCEL versiunile 3.0, 4.0 şi 5.0, PARADOX
versiunile 3.5 şi 4.0, Multiplan, Lotus şi Symphony;
10
Visual Foxpro
11
Baze de date
12
Visual Foxpro
CAPITOLUL 2
Ca SGBD relaţional VFP este unul dintre cele mai utilizate atât în lume
cât şi în ţară noastră. El se recomandă pentru dezvoltarea aplicaţiilor cu baze
de date în instituţii şi întreprinderi mici şi mijlocii pe microcalculatoare ca staţii
de lucru individuale sau conectate in reţea locală (LAN - Local Area Network).
13
Baze de date
Faptul că VFP este unul dintre cele mai utilizate SGBD relaţionale este
demonstrat, printre altele de decizia Microsoft de a dezvolta acest produs în
mod continuu, în condiţiile în care firma avea deja un produs similar (ACCESS).
14
Visual Foxpro
În anul 1984, firma a dezvoltat produsul creând FoxPro V1.0 sub WS-
DOS. În 1991, apare FoxPro 2.0, care devenise lider autoritar al produselor de
acest gen. Versiunea 2.0 se distanţează de restul produselor de acest gen, ca
superioară, prin următoarele facilităţi: tehnica de optimizare Rushmore pentru
regăsire, tehnici de compresie a fişierelor de index (cu până la 80%), interfaţă
cu limbajul de programare universal C, instrumente şi interfeţe dintre cele mai
diverse, adăugarea unor noi elemente relaţionale (devine un SGBD minimal
relaţional).
În 1995, Microsoft lansează versiunea revoluţionară Visual FoxPro 3,
care a fost apoi urmată de versiunea 5, în 1997. Visual FoxPro 6, a fost
lansată în septembrie 1998 în cadrul pachetului Visual Studio 6.O. Acesta este
destinat specialiştilor şi conţine alături de Visual FoxPro şi alte produse tip
Visual: Basic, C++, Java ++, InterDev. Toate aceste produse, deci şi Visual
FoxPro 6, oferă compilări foarte rapide (optimizate), depanare eficientă şi
interactivă, HTML (Hyper Text Markup Language) ca interfaţă pentru aplicaţii
tip multimedia, interoperabilitate, simplitate şi compatibilitate în realizarea de
aplicaţii cu toate produsele din pachetele STUDIO şi OFFICE, dezvoltarea
aplicaţiilor în reţea în arhitecturi DNA (Distributed interNet Application)
15
Baze de date
16
Visual Foxpro
ActiveX existente deja în sistem se pot crea clase noi (începând cu VFP 5.0).
Tehnologia se încadrează în limbaje pentru scenarii (script) din generaţia a
treia de Internet, având rol de comunicare între aplicaţii la nivel de obiect.
14. O parte dintre noţiunile "tip obiect" din FoxPro 2.x sunt tratate în
Visual FoxPro ca obiecte: buloanele, imaginile (Picture), OLE.
Comenzile de I/E standard (0... SAY/GET, READ) rămân, dar apar şi obiecte
noi similare (Text Box, Label etc.).
17
Baze de date
SGBD-ul Visual Foxpro 6.0 face parte din pachetul de aplicaţii Visual Studio
6.0 şi poate fi lansat în execuţie din meniul Programs, submeniul Visual Studio
6.0, aplicaţia Visual Foxpro 6.0. Odata lansat în execuţie, apărea fereastra
sistem, care are următoarele elemente:
18
Visual Foxpro
19
Baze de date
20
Visual Foxpro
21
Baze de date
2.5.1. Pentru a crea o tabela, fără a utiliza meniul system, putem folosi
comanda:
CREATE <nume.DBF>
2.5.2. Pentru a modifica structura unei baze de date deja create, vom folosi
următoarea comandă:
MODIFY STRUCTURE
<nume_bd.DBF>
Exemplu: Pentru a modifica baza de date STUDENTI.DBF, vom
scrie în fereastra de comenzi, următoarea comandă:
MODIFY STRUCTURE STUDENTI.DBF
Efectul acestei comenzi va fi apariţia ferestrei iniţiale de introducere a
structurii bazei de date, cu ajutorul căreia putem să modificăm, să adăugăm
sau să ştergem câmpuri ale bazei de date. După introducerea modificărilor
dorite, în baza de date toate informaţiile vor fi modificate în funcţie de noua
structură.
Exemplu: Dacă dorim să introducem un nou câmp cu denumirea CNP (Cod
Numeric Personal), de tip Numeric, dimensiune maximă 13, vom adăuga acest
câmp la sfârşit, sau între câmpurile deja existente. Apoi, prîntr-o comandă de
editare şi modificare vom introduce noile informaţiile pentru fiecare
înregistrare a tabelei. Modificarea structurii tabelei poate duce la pierderea
informaţiilor din baza de date.
22
Visual Foxpro
Închiderea unei singure tabele se face prin utilizarea comenzii CLOSE ALL:
CLOSE ALL
23
Baze de date
Toate înregistrările
Toate înregistrările fără numă înregistrării
Doar câmpurile nume, prenume şi media
Studenţii din doar din grupa 116A
În fereastra de comenzi, scriem în ordine următoarele comenzi:
USE STUDENTI.DBF
LIST && Comanda LIST are domeniul implicit ALL
GO TOP && Se pozitioneaza pe prima înregistrare
LIST OFF
GO TOP
LIST FIELDS NUME, PRENUME, MEDIA && clauza FIELDS specifica
denumirile câmpurilor dorite pentru afisare
GO TOP
LIST FOR GRUPA=’116A’ && valorile de tip character se scriu intre ’ ’
24
Visual Foxpro
Operator Semnificaţie
() paranteze pentru gruparea expresiilor
**, ^ ridicare la putere
*, /, % înmulţire, împărţire, modulo (restul împărţirii)
+, - adunare, scădere
25
Baze de date
Operator Semnificaţie
< mai mic
> mai mare
<= mai mic sau egal
>= mai mare sau egal
== egal cu
<>, !=, != diferit
? MOD(46,3)
1
? MOD(25.0,5.0)
0
Funcţia ABS() care returnează valoarea absolută a unui număr, are
următoarea sintaxă:
ABS(<expN>)
Exemplu:
?ABS(12.34)
12.34
26
Visual Foxpro
?ABS(-12.34)
12.34
Exemplu:
? SIGN(14)
1
? SIGN(-14)
-1
? SIGN(0)
0
Funcţia INT() returnează partea întreagă a unei expresii numerice:
Exemplu: INT(<expN>)
?INT(45.89)
45
?INT(-8.34)
-8
x=12.34
?’Partea fractionara a numarului ’,x,’ este ’,x-INT(x)
27
Baze de date
EXP(<expN>)
returnează exponenţiala: ex
LOG(<expN>)
returnează logaritm natural: lnx
LOG10(<expN>)
returnează logaritm zecimal log(x)
SQRT(<expN>)
returnează radical din x
SIN(<expN>)
returnează sinus(x)
COS(<expN>)
returnează cosinus(x)
TAN(<expN>)
returnează tangenta de x
28
Visual Foxpro
Operator Semnificaţie
+ operator de concatenare simplu
- operator de concatenare special
Exemplu: CHR(<expN>)
?CHR(49)
1
?CHR(65)==’A’
.T.
Exemplu:
30
Visual Foxpro
?ASC(‘A’)
65
?ASC(‘salt’)==ASC(‘student’)
.T.
Observaţie: Funcţiile CHR şi ASC sunt funcţii care au acţiuni inverse. Astfel se
pot scrie următoarele expresii:
Exemplu:
?’A’==CHR(ASC(‘A’))
.T.
?65==ASC(CHR(65))
.T.
SUBSTR(<expC>,<expN1>[,<expN2>])
31
Baze de date
Dacă <expN2> lipseşte, atunci subşirul se întinde până la sfârşitul şirului dat.
Exemplu:
?SUBSTR(‘VISUAL’,2,3)
ISU
?SUBSTR(‘SGBD VISUAL FOXPRO’,6)
VISUAL FOXPRO
LEFT(<expC>,<expN>) RIGHT(<expC>,<expN>)
Exemplu:
?LEFT(‘BAZE DE DATE’,4)
BAZE
?RIGHT(‘BAZE DE DATE’,4)
DATE
Se poate crea un şir din alt şir prin repetarea şirului dat de un număr de ori
specificat – folosind funcţiile REPLICATE() şi SPACE():
32
Visual Foxpro
REPLICATE(<expC>,<expN>)
Exemplu:
?REPLICATE(‘R ’,6)
RRRRRR
Exemplu: SPACE(<expN>)
‘ ‘
Alte funcţii care prelucrează şiruri de caractere:
Funcţie Semnificaţie
LEN(<expC>) returnează lungimea şirului dat ca parametru
ISALPHA(<expC>) returnează adevărat dacă şirul de caractere
începe cu un caracter de tip alfabetic, altfel fals
ISDIGIT(<expC>) returnează adevărat dacă şirul de caractere
începe cu o cifră, altfel fals
ISLOWER(<expC>) returnează adevărat dacă şirul de caractere
începe cu o literă mică, altfel fals
ISUPPER(<expC>) returnează adevărat dacă şirul de caractere
începe cu o literă mare, altfel fals
LOWER(expC) transformă toate majusculele în litere mici, restul
caracterelor rămânând neschimbate
UPPER(expC) transformă toate literele mici, în litere mari, restul
caracterelor rămânând neschimbate
PROPER(<expC>) transformă primul caracter dintr-un cuvânt în
majusculă (literă), iar restul în litere mici
LIKE(<expC1>,<expC2>) caută dacă expresia <expC1> se află în
<expC2>, dacă se află returnează adevărat, altfel
fals
33
Baze de date
Capitolul 3
Informaţiile într-o tabelă a unei baze de date pot fi cautate şi/sau localizate
în mod secvenţial (dacă informaţiile nu sunt ordonate) sau într-un mod mai
rapid pe baza unui index (atunci când tabela este indexată). Prezentăm în
continuare câteva comenzi şi funcţii de poziţionare pe anumite înregistrări:
CONTINUE
Functia LOOKUP(<câmp1>,<expresie>,<câmp2>)
34
Visual Foxpro
?LOOKUP(NUME,’116b’,GRUPA)
POPESCU
Functia FOUND()
Este o funcţie de tip logic care returnează valoarea .T. dacă înregistrarea
dorită a fost găsită, sau .F. în caz contrar.
GOTO <n>
GO BOTTOM/TOP
Comanda GOTO poziţionează fizic cursorul de înregistrare, pe înregistrarea
cu numărul de ordine <nr>. Folosind BOTTOM sau TOP, se poate face
poziţionarea pe înregistrarea de la începutul tabelei sau pe înregistrarea de la
sfârşitul ei.
SKIP [+/-] <nr>
Functia RECNO()
35
Baze de date
Folosind clauzele [/A] [/D] sau [/C] se poate specifica pentru fiecare
câmp în parte sensul ordonării: [/A] = crescător, [/D] = descrescător sau
[/C] = se foloseşte atunci când nu ne interesează tipul literei (litera mare
sau litera mica).
Clauzele ASCENDING / DESCENDING se folosesc pentru toată tabela,
având tot semnificaţia de sortarea crescătoare / descrescătoare.
Celelalte clauze au aceeaşi semnificaţie ca şi alte comenzi prezentate
anterior.
36
Visual Foxpro
COPY TO STUD2.DBF
USE && inchidem baza de date curenta
USE STUD2.DBF && deschidem noua baza
LIST && afisam informatiile din aceasta baza
37
Baze de date
Pentru a adăuga înregistrări într-o tabela a unei baze de date, se pot utiliza
mai multe comenzi în funcţie de anume dorim să efectuăm. Astfel, se pot
adăuga interactiv noi înregistrări (folosind comanda BROWSE), se pot adăuga
date dintr-un masiv (tablou aflat în memorie), se pot adăuga date dîntr-o altă
tabela Foxpro, sau dintr-un alt tip de fişier (Excel, Text, etc). Deocamdată
prezentăm doar trei astfel de modaliaţi de adăugare:
APPEND [BLANK]
38
Visual Foxpro
COPY TO STUD2.DBF
APPEND FROM STUD2
LIST && afisam informatiile din baza STUDENT
Exemplu:
39
Baze de date
40
Visual Foxpro
41
Baze de date
42
Visual Foxpro
Exemplu:
LIST
USE
Exemplu:
43
Baze de date
44
Visual Foxpro
Capitolul 4
Indexare şi căutare rapidă
45
Baze de date
46
Visual Foxpro
Exemplu:
47
Baze de date
48
Visual Foxpro
În tab-ul
INDEXES, se poate
observa că a apărut
automat indexul
nume şi ordinea de
indexare “”.
49
Baze de date
SEEK <expresie>
50
Visual Foxpro
SEEK(<expresie>)
51
Baze de date
Capitolul 5
Prelucrări statistice şi financiare.
Utilizarea câmpurilor de tip Memo şi General
Pentru a calcula valorile medii ale unor expresii de tip numeric, putem
folosi comanda AVERAGE, care are următoarea sintaxă:
54
Visual Foxpro
55
Baze de date
FV(<expN1>,<expN2>,<expN3>)
Calculează valoarea viitoare a unei depuneri regulate <expN1> cu o
creştere constantă în cadrul unei investiţii, cu o dobândă fixă <expN2> pe o
perioada dată <expN3>.
56
Visual Foxpro
PV(<expN1>,<expN2>,<expN3>)
PAYMENT(<expN1>,<expN2>,<expN3>)
57
?PAYMENT(50000000, 0.01, 24)
2353673.61
Baze de date
Pentru a rezolva acest aspect, se poate utiliza tip de date MEMO, care
reţine toate aceste informaţii într-un fişier separat, care este poarta acelaşi
nume cu al tabelei respectice (şi are extensia .FPT) şi care asociază fiecarei
înregistrări un spaţiu se memorie special. Acest fişier de deschide automat cu
tabela căruia îi este asociat.
58
Visual Foxpro
Apoi cu comanda
BROWSE, putem
adăuga informaţii în
tabela respective,
observând că toate
înregistrările au iniţial
în dreptul câmpului
ADRESA, scris
“memo”, iar după
introducerea datelor pe
rând în fiecare
înregistrare în parte, vor avea scris “Memo”.
Introducerea informaţiilor în câmpul de tip memo se face utilizând
combinaţia de taste CTRL+Home, în dreptul fiecărei înregistrări, după aceasta
apare o fereastră în care putem introduce valorile dorite, iar salvarea
informaţiilor dorite se efectuează prin închiderea ferestrei cu combinaţia de
taste CTRL+W (sau CTRL+End).
Comenzi specifice:
59
Baze de date
60
Visual Foxpro
61
Baze de date
Capitolul 6
Programare structurată (clasică) în Visual Foxpro
62
Visual Foxpro
edita un fişier text, sau opţiunea Program pentru a edita un fişier de tip
program. În momentul alegerii primei opţiuni va aparea pe ecran o fereastră
de editare cu numele File1, sau cu numele Program1, în cazul alegerii celei
de-a doua opţiuni. Automat, se va scrie de către sistemul Foxpro, în fereastra
de comenzi, o comandă specifică fiecărei operaţii în parte (MODIFY FILE sau
MODIFY COMMAND, comenzi pe care le vom detalia la punctul următor).
Acesta este un exemplu de afişare în cazul în care dorim editarea unui fişier
de tip program.
Memorarea informaţiilor din fişierul nou creat se poate face prin alegerea
opţiunii Save As tot din meniul FILE, care va determina apariţia unei ferestre
de dialog, în care se va alege numele dorit pentru fişierul respectiv. Pentru a
salva un fişier de tip text se va folosi extensia .TXT, respectiv extensia .PRG
pentru un fişier de tip program. După salvarea fişierului, acesta se poate
închide cu ajutorul opţiunii Close, tot din meniul FILE, sau folosind
combinaţia de taste CTRL+W.
63
Baze de date
Tot din meniul FILE se alege opţiunea Open, care va deschide fereastra
de dialog Open File din care se poate alege opţiunea Program pentru un
program sursă sau opţiunea File pentru un fişier text.
64
Visual Foxpro
Pentru a putea executa un program, acesta trebuie mai întâi compilat prin
alegerea opţiunii COMPILE din meniul PROGRAM, operaţie în urma căreia
rezultă un program în cod obiect cu extensia .FXP. Dacă la compilare rezultă
erori, acestea trebuie înlăturate şi programul recompilat.
DO <program/procedura> [WITH
<lista_de_parametrii>][IN <nume_fisier>]
65
Baze de date
IF <conditie>
<instructiuni_1>
[ELSE
<instructiuni_2>]
ENDIF
66
Visual Foxpro
IF a>0
?” Variabila ”,a,” este pozitiva”
ELSE
?”Variabila ”,a,” nu este pozitiva”
ENDIF
IF a>b
?” Variabila ”,a,” este mai mare decat variabila ”,b
ELSE
IF a=b
?”Cele doua variabile sunt egale”
ELSE
?”Variabila ”,b,” este mai mare decat variabila ”,a
ENDIF
ENDIF
Funcţia IIF()
67
Baze de date
IIF(<conditie>,<valoare_1>, <valoare_2>)
68
Visual Foxpro
Dacă nici una din condiţii nu ar fost îndeplinit, atunci apar două situaţii:
Exemplu: x=10
DO CASE
CASE x=1
?”Avem valoarea 1”
CASE x=5
?”Avem valoarea 5”
CASE x=10
?”Avem valoarea 10”
OTHERWISE
?”Avem o valoare negativa”
ENDCASE
DO WHILE <conditie>
Comanda DO WHILE…ENDDO are <instructiuni>
următoarea sintaxă: [LOOP]
[EXIT]
ENDDO
69
Baze de date
produs=1
i=1
DO WHILE i<=5
produs=produs*i
i=i+1
ENDDO
?”Produsul primelor 5 numere naturale este”, produs
INPUT “dati n = ” TO n
prim=.T.
i=2
DO WHILE i<=CEILING(n/2)
IF MOD(n,i)=0
prim=.F.
ENDIF
i=i+1
ENDDO
IF prim=.T.
?”numarul “,n,” este prim”
ELSE
?”numarul ”,n,” nu este prim”
ENDIF
70
Visual Foxpro
71
Baze de date
suma=0 suma=0
FOR i=1 TO 10 FOR i=1 TO 10
suma=suma+1 IF i=5
IF i=5 LOOP
EXIT ENDIF
ENDIF suma=suma+1
ENDFOR ENDFOR
SCAN
[<domeniu>] [FOR <conditie1>] [WHILE
<conditie2>]
<instructiuni>
[LOOP]
[EXIT]
ENDSCAN
72
Visual Foxpro
FOR i=1 TO
SCAN ca efect
RECCOUNT()
<comenzi>
GOTO i
ENDSCAN
<comenzi>
ENDFOR
DO WHILE NOT
EOF()
<comenzi>
SKIP
ENDDO
73
Baze de date
74
Visual Foxpro
Capitolul 7
Operaţii de actualizare a tabelelor
Cea mai folosită metodă pentru operaţiile de intrare / ieşire este un grup
de comenzi:
@ - SAY - GET - READ
0,0 0,125
X 45,0 45,125
75
Baze de date
Exemplu:
76
Visual Foxpro
MMARCA=0
@5,20 SAY “Introduceti marca ” GET MMARCA RANGE
1000,2000 ERROR “A-TI GRESIT (tastati valori intre 1000 şi
2000)” PICTURE “9999”
READ
?MMARCA
SET CONSOLE ON
TEXT
================================
UNIVERSITATEA “CONSTANTIN BRANCUSI”
FACULTATEA DE INGINERIE
SECTIA DE AUTOMATICA
================================
ENDTEXT
77
Baze de date
78
Visual Foxpro
79
Baze de date
clear
use stocuri order cod_prod
opt='D'
do while upper(opt)='D'
clear
store 0 to vcod_prod,vcant
store space(20) to vden_prod
store space(5) to vum
@10,10 say "Dati codul produsului care urmeaza sa
fie adăugat " get vcod_prod picture "99999"
read
seek vcod_prod
if not found()
@15,10 say "Dati denumirea produsului " get
vden_prod function "!"
@16,10 say "Dati cantitatea " get vcant
picture "999999999"
@17,10 say "Dati unitatea de masura " get
vum function "!"
read
append blank
replace cod_prod with vcod_prod, den_prod
with vden_prod, stoc with vcant, um with vum
else
@20,10 say " Produsul deja exista, vom
adăuga cantitatea "
@21,10 say "Dati cantitatea " get vcant picture
"999999999"
read
replace stoc with stoc+vcant
endif
opt=space(1)
@40,15 say "Doriti sa continuati? [D/N]" get opt
function "!"
read
enddo
use
case optiune="M"
&& operatia de modificare
clear
use stocuri order cod_prod
opt='D'
do while upper(opt)='D'
clear
store 0 to vcod_prod
80
Visual Foxpro
81
Baze de date
if not found()
@15,10 say "Produsul nu exista in tabela"
wait "apasa o tasta pentru continuare"
else
@21,25 say "denumire "
@21,45 say den_prod
@22,25 say "stoc "
@22,45 say stoc
@23,25 say "um "
@23,45 say um
store space(1) to opt1
@30,10 say "Doriti sa stergeti? [D/N]" get
opt1 function "!"
read
if upper(opt1)="D"
delete
endif
endif
store space(1) to opt
@40,15 say "Doriti sa continuati? [D/N]" get opt
function "!"
read
enddo
use
case optiune="V"
clear
&& operatia de vizualizare
use stocuri order cod_prod
@15,10 say "====== LISTA STOCURI ========="
@16,10 say "---------------------------------------------------"
@17,10 say "| COD | DENUMIRE | STOC | UNITATE |"
@18,10 say "| PRODUS | PRODUS | | DE MASURA |"
@19,10 say "--------------------------------------------------"
go top
k=20
do while not eof()
@k,15 say cod_prod picture "99999"
@k,35 say den_prod picture
"XXXXXXXXXXXXXXXXXXXX"
@k,50 say stoc picture "999999999"
@k,55 say um picture "XXXXX"
k=k+1
if k>40
wait "Pentru continuare apasati o tasta"
k=20
82
Visual Foxpro
83
Baze de date
Capitolul 8
Functii şi proceduri definite de utilizator.
Ferestre.
FUNCTION <nume_functie>
[PARAMETERS
<lista_parametri_formali>]
<comenzi>
RETURN <expresie>
[ENDFUNC]
84
Visual Foxpro
n=6
k=3
combin=FACT(n)/(FACT(k)*FACT(n-k))
FUNCTION FACT
PARAMETERS n
F=1
FOR i=1 TO n
F=F*i
ENDFOR
RETURN F
PROCEDURE <nume_procedura>
[PARAMETERS
<lista_parametri_formali>]
<comenzi>
[ENDPROC]
Comunicarea între procedura şi programul apelant se face prin
intermediul parametrilor. Apelul unei proceduri se face cu ajutorul comenzii:
DO nume_procedura [WITH
<lista_parametri_efectivi>]
85
Baze de date
CLEAR
n=0
@5,10 SAY "DATI NUMARUL N= " GET N
READ
DO FIBO WITH N
WAIT "Sfarsit program "
PROCEDURE FIBO
PARAMETERS N
a=1
@10,10 SAY "primul termen "
@11,10 SAY a
b=1
@12,10 SAY "al doilea termen "
@13,10 SAY b
i=3
j=14
DO WHILE i<=N
c=a+b
@j,10 SAY "termenul "
@j+1,10 SAY c
i=i+1
j=j+2
a=b
b=c
&& wait
ENDDO
WAIT "apasati o tasta pentru terminare"
RETURN
86
Visual Foxpro
0,0 0,125
X 45,0 45,125
Modul de lucru cu ferestrele utilizator este următorul:
se definesc ferestrele cu ajutorul comenzii DEFINE WINDOW şi se
precizeaza şi dimensiunile şi poziţia pe ecran
ferestrele se afişează pe ecran cu ajutorul comenzilor ACTIVATE
WINDOW sau SHOW WINDOW
ferestrele se îinlătură de pe ecran cu ajutorul comenzilor DEACTIVATE
WINDOW sau HIDE WINDOW
pentru înlăturarea ferestrelor din memorie şi implicit de pe ecran, se pot
folosi comenzile CLEAR WINDOW şi RELEASE WINDOW.
87
Baze de date
Exemplu:
88
Visual Foxpro
CLEAR
SET TALK OFF
USE PERSONAL
&& definim fereastra pentru punctul 1)
DEFINE WINDOW f1 FROM 2,2 TO 20,120
&& definim fereastra pentru punctul 2)
DEFINE WINDOW f2 FROM 30,2 TO 40,120
&& activam fereastra f1
ACTIVATE WINDOW f1
?"Lista persoanelor descrescator dupa data nasterii"
SORT TO PERSORT ON SECTIA, DATA_N /D
USE
USE PERSORT
LIST
WAIT "apasa o tasta pentru continuare"
DEACTIVATE WINDOW f1
USE
89
Baze de date
Capitolul 9
Meniuri definite de utilizator
opţiune
bara
opţiune
submeniu
90
Visual Foxpro
91
Baze de date
9.4. Pentru definirea opţiunilor unui submeniu (meniu vertical) definit anterior
cu o comandă DEFINE POPUP, se va folosi comanda DEFINE BAR, care
are următoarea sintaxă:
92
Visual Foxpro
93
Baze de date
Observaţie:
a) Se vede că fiecare
litera care a fost
precedată de
combinaţia ‘\<’ apărea
ca fiind subliniată şi
opţiunea respectivă se
poate selecta prin
combinaţia de taste CTRL+litera respectivă.
9.5. Definirea unei bare de meniu sau a unui meniu vertical, nu este suficientă
pentru a lucra cu aceste elemente. Mai trebuie să fie şi activate aceste
meniuri, cu ajutorul unor comenzi specializate.
94
Visual Foxpro
ON PAD <nume_optiune> OF
<nume_meniu_orizontal_1>
[ACTIVATE POPUP <nume_meniu_vertical> |
ACTIVATE MENU <nume_meniu_orizontal_2> ]
95
Baze de date
Soluţie:
96
Visual Foxpro
97
Baze de date
RETURN
PROCEDURE Prap
DO CASE
CASE BAR()=1
DO lista1
CASE BAR()=3
DO lista2
ENDCASE
RETURN
PROCEDURE Pexit
DO CASE
CASE BAR()=1
CLEAR
DEACTIVATE MENU
CANCEL
CASE BAR()=3
QUIT
ENDCASE
RETURN
98
Visual Foxpro
Capitolul 10
Limbajul SQL
99
Baze de date
SQL s-a impus ca standard industrial, dintre mai multe astfel de propuneri
(1986, ANSI, ISO). Toate SGBD-urile comerciale (ORACLE, DB2, Informix,
Sybase, Tandem) implementează mici variaţii ale acestui standard. Avantajul
constă în faptul că utilizatorii finali pot interoga o bază oarecare dacă are
implementat SQL, fără a cunoaşte limbajul propriu SGBD.
100
Visual Foxpro
101
Baze de date
CNP Numeric 13
ADRESA Memo 4
CAMIN Logical 1
MEDIA Numeric 5 2
Exemplu1:
Pentru a adăuga un atribut care să reţină informaţia referitoare la anul
de studiu în care se află studentul, în tabela STUDENT, se poate utiliza
comanda ALTER TABLE, astfel:
ALTER TABLE STUDENT ADD AN C(2)
102
Visual Foxpro
Exemplu2:
Pentru a şterge o coloană, folosim clauza DROP urmată de numele
coloanei respective:
Forma de bază a comenzii SELECT este compusă din trei clauze: SELECT,
FROM şi WHERE, astfel:
SELECT <lista_de_atribute>
FROM <lista_de_tabele>
WHERE <conditie>
unde
<lista_de_atribute> este o listă de atribute (câmpuri) ale căror valori se
obţin prin interogare
<lista_de_tabele> este o listă de nume de tabele necesare în procesul
de interogare
103
Baze de date
SELECT *.* ;
FROM PERSONAL
SELECT *;
FROM PERSONAL;
WHERE SECTIA=2
104
Visual Foxpro
SELECT *;
FROM PERSONAL;
WHERE SECTIA=3 AND SALARIU=2500000
SELECT *;
FROM PERSONAL;
WHERE (FUNCTIA=’ECON’ OR FUNCTIA=’ING’) AND
SECTIA=2
SELECT *;
FROM PERSONAL;
WHERE FUNCTIA=’ECON’ AND SECTIA=7 AND
SALARIU>=3400000
105
Baze de date
SELECT SUM(SALARIU);
FROM PERSONAL
106
Visual Foxpro
107
Baze de date
Capitolul 11
Proiectarea vizuala a interogărilor
108
Visual Foxpro
dintre un câmp al tabelei şi alte câmpuri de date ale aceluiaşi tabel. Dacă se
optează pentru această opţiune paşii ce trebuiesc parcurşi sunt următorii:
în prima fereastră se selectează tabela şi câmpurile ce dorim a fi
folosite în interogarea încrucişată. Nu pot fi selectate câmpuri decât
dîntr-o singură tabelă şi trebuie alese minim trei. Se acţionează
butonul NEXT pentru a trece la pasul doi;
în a doua fereastră se va specifica modalitatea de afişare a câmpurilor
pe coloană, pe rând, respectiv ceea ce dorim să avem în interiorul
acestui tabel cu dublă ieşire. Se acţionează butonul NEXT pentru a
trece la pasul următor;
în a treia fereastră de dialog se va specifica ce dorim să, facem cu
informaţiile existente în interiorul tabelului cu dublă ieşire în cazul în
care există duplicate pe câmpurile din ROW sau COLUMN (SUM,
MIN, MAX, AVERAGE, COUNT). De asemenea putem opta pentru
afişarea sau nu a unui grad de subtotal (subtotalul apare pe coloana
din dreapta). Se acţionează butonul NEXT pentru a trece la pasul
următor;
în a patra fereastră se stabileşte modul de salvare a interogării
respective. Se acţionează butonul FINIS pentru a putea salva
interogarea în directorul în care dorim să apară.
109
Baze de date
110
Visual Foxpro
111
Baze de date
112
Visual Foxpro
113
Baze de date
114
Visual Foxpro
115
Baze de date
Capitolul 12
Crearea formularelor
116
Visual Foxpro
117
Baze de date
a
p
a
t
r
a
Formularul Elevi
Al doilea mod de lucru pentru crearea unui formular este acela de ,,unu-
la-mai-mulţi". Acesta creează un formular ce aşează înregistrările "părinte"
individuale şi a tuturor fiilor acestora. Câmpurile tabelei "părinte" apar de
obicei în partea de sus, iar cele ale tabelei "copil" în partea de jos a
formularului.
118
Visual Foxpro
119
Baze de date
Deoarece într-un formular trebuie incluse câmpuri din una sau mai
multe tabele, atunci se procedează astfel: din submeniul View se va alege
opţiunea Data Environment, apoi după selectare va apare caseta de dialog
Data Environment sub următoarea formă (alături va avea caseta de dialog Add
Table or View):
120
Visual Foxpro
121
Baze de date
122
Visual Foxpro
List Box -creează un control List Box, utilizată la afişarea unei liste
din care utilizatorul poate selecta o anumită înregistrare. Lista poate
conţine valori din mai multe câmpuri ale diferitelor tabele utilizate la
realizarea formularului. De menţionat, că aceste informaţii sunt
afişate în acelaşi timp;
123
Baze de date
124
Visual Foxpro
Fereastra Properites
Fereastra Properties, după cum se poate observa este alcătuită din cinci
cadre de pagină (All, Data, Methods, Layout şi Other).
În cadrul acesteia se definesc proprietăţile globale ale formularului cum
ar fi: culoare fundalului, dimensiunea formularului, culoarea şi mărimea
obiectelor, titlul formularului, diferitele evenimente ce caracterizează un obiect,
metodele utilizate în cadrul formularului respectiv, poziţia formularului pe
ecran, etc. Pentru a afişa proprietăţile unui anumit obiect, acesta trebuie în
prealabil selectat.
125
Baze de date
Tipul obiectului
126
Visual Foxpro
-
- cel de-al patrulea element este reprezentat de o listă a proprietăţilor. Aceste
două coloane afişează toate proprietăţile obiectului selectat în momentul
activării acestei ferestre (Properties). Pe coloana din stânga nu se pot face
modificări, iar pe coloana din dreapta, valorile proprietăţilor ce sunt deja
afişate, pot fi schimbate în timpul proiectării formularului, acestea devenind
setări curente. De menţionat este şi faptul că unele proprietăţi sunt deja
predefinite, utilizatorul alegând din valorile posibile pe cea corespunzătoare.
127
Baze de date
Capitolul 13
Crearea rapoartelor
128
Visual Foxpro
129
Baze de date
130
Visual Foxpro
următoare:
Optând în continuare pentru crearea unui raport ce nu are la bază un
asistent (Wizard), adică o creare în mod direct, va trebui să definim fereastra
de dialog ce va apare după activarea butonului New Report. Pe ecran va
apare o fereastră aşa cum rezultă din figura:
131
Baze de date
132
Visual Foxpro
133
Baze de date
134
Visual Foxpro
Capitolul 14
Proiectarea vizuală a meniurilor şi a barelor de
instrumente
135
Baze de date
14.3.Proiectantul de Meniuri
136
Visual Foxpro
137
Baze de date
138
Visual Foxpro
139
Baze de date
Buton de mutare
140
Visual Foxpro
sau dezactiva articolele de meniu pentru a avea mai mult control asupra
sistemului.
141
Baze de date
sunt combinaţii ale tastelor CTRL sau ALT cu alte taste. De exemplu, se poate
crea un nou fişier Visual FoxPro apăsând tastele CTRL+N.
Pentru a specifica o tastă de comandă rapidă pentru un meniu sau un
articol de meniu se efectuează paşii:
1. În cadrul coloanei Prompt, se selectează titlul meniului sau al
articolului de meniu.
2. În cadrul coloanei Options, se selectează butonul care afişează
caseta de dialog Prompt Options
3. În cadrul casetei Key Label, se apasă o combinaţie de taste pentru a
crea un set de taste de comandă rapidă. Dacă un articol de meniu nu
are asociată o tastă de comandă rapidă, Visual FoxPro afişează
mesajul "(press the key)" în cadrul casetei Key Label.
4. În caseta Key Text, se adaugă textul care trebuie să apară lângă
articolul de meniu. În mod implicit, Visual FoxPro repetă tastele de
comandă rapidă din caseta Key Label în caseta Key Text. Cu toate
acestea, textul din caseta Key Text poate fi modificat dacă se doreşte
ca aplicaţia să afişeze un alt text. De pildă, dacă atât Key Label cât şi
Key Text sunt CTRL+R, valoarea Key Text poate fi modificată în ^R.
142
Visual Foxpro
Introduceţi comanda
143
Baze de date
Capitolul 1.
Funcţiile SGBD-ului Visual Foxpro. Tipuri de fişiere Visual
Foxpro. Limitele SGBD-ului Visual Foxpro.
144
Visual Foxpro
145
Baze de date
146
Visual Foxpro
147
Baze de date
148
Visual Foxpro
149
Baze de date
Submeniul Format
contine urmatoarele optiuni
care apar atunci cand se
apeleaza o optiune din modul
de lucru Designers (editarea
unui program, realizarea unui
formular sau a unui raport,
etc.):
150
Visual Foxpro
151
Baze de date
Snap to Grid Atunci cand dorim sa mutam obiectele din cadrul unui
formular sau raport, coltul din stanga sus al acestora se
repozitioneaza in cea mai apropriata intersectie a retelei
dupa eliberarea butonului de mouse
Set Grid Scale Stabileste distanta dintre liniile orizontale şi verticale din
cadrul unui formular sau raport
Submeniul Tools
contine urmatoarele
optiuni:
152
Visual Foxpro
153
Baze de date
Submeniul Window
contine urmatoarele
optiuni:
154
Visual Foxpro
Submeniul Help
contine urmatoarele
optiuni:
155
Baze de date
156
Visual Foxpro
Capitolul 2
Comenzi de actualizare.
157
Baze de date
BROWSE LOCK 3
158
Visual Foxpro
159
Baze de date
2. Cautare şi pozitionare
160
Visual Foxpro
3. Sortare şi duplicare
USE STUDENT
SORT TO STUD1 ON GRUPA/D, MEDIA/A FOR CNP >=
‘1212121212121’
USE
USE STUD1
BROWSE
161
Baze de date
4. Comenzi de actualizare
USE PERSONAL
Rezolvare: REPLACE ALL SALARIU WITH SALARIU +
SALARIU*10/100 FOR SECTIA=2
LIST
162
Visual Foxpro
163
Baze de date
Capitolul 3
Citirea informaţiilor de la tastatură şi memorarea lor în
variabile de memorie.
Indexarea tabelelor, tipuri de indecşi.
Căutare şi poziţionare rapidă în tabele indexate.
INPUT “Dati n= ” TO n
?n &&afisam valoarea memorata in n
164
Visual Foxpro
Exemplu:
2. Indexarea tabelelor
USE STUDENT
INDEX ON STR(MATRICOL)+NUME TAG INDEX1
LIST
165
Baze de date
USE PRODUSE
INDEX ON DENUMIRE+STR(COD,5) TO INDEX2 UNIQUE
LIST
USE CARTE
INDEX ON RTRIM(TITLU) TAG TITLU FOR
BETWEEN(AN_AP,1990,2000)
LIST
USE CARTE
INDEX ON STR(PRET)+STR(AN_AP,4) TAG INDEX1 FOR
UPPER(EDITURA)=”L&S INFORMAT”
LIST
166
Visual Foxpro
167
Baze de date
168
Visual Foxpro
Capitolul 4
Prelucrări statistice şi financiare.
Se cer următoarele:
USE REPART.DBF
INDEX ON NUME TAG NUME
COUNT TO NR
?”NUMARUL DE PRODUSE DISTINCTE ESTE ”,NR
169
Baze de date
170
Visual Foxpro
171
Baze de date
Capitolul 5
Programare structurată (clasică) în Visual Foxpro
172
Visual Foxpro
use personal
set talk off
clear
do while not eof()
if salariu>=3000000
replace marca with marca+marca*0.2
endif
skip
enddo
list
wait 'apasa o tasta pentru terminare '
use
d) Să se scrie un program cu ajutorul căruia să se localizeze persoana cu
MARCA 1234, iar în cazul când este gasită să modifice salariul indexându-l cu
15%, iar prenumele să devină "ION"; în cazul în care nu se gaseşte să se
afişeze un mesaj de avertisment "Lipsa MARCA în tabelă". Să se afişeze
conţinutul tabelei înainte şi după modificare.
Rezolvare: USE PERSONAL
SET TALK OFF
LIST
WAIT 'TABELA INAINTE DE MODIFICARE'
SCAN
LOCATE FOR MARCA=1234
IF FOUND()
REPLACE SALARIU WITH SALARIU+SALARIU*15/100
REPLACE PRENUME WITH 'ION'
DISPLAY
WAIT
ELSE
WAIT 'LIPSA MARCA IN TABELA'
ENDIF
ENDSCAN
LIST
WAIT 'TABELA DUPA MODIFICARE'
USE
173
Baze de date
Rezolvare:
use PERSOANE
set talk off
clear
list
wait
input “Introduceti numele persoanei care se sterge ” to num
for i=1 to reccount()
goto i
if nume=num
delete
pack
list
wait ‘apasa o tasta pentru continuare’
else
wait 'persoana cu acest nume NU exista '
endif
endfor
use
174
Visual Foxpro
b) marcarea studenţilor care au picat un examen (una din cele şase note să
fie <5.00)
c) afişarea separată a studenţilor (nume, prenume şi medie) care au trecut
sesiunea şi a celor restanţieri.
&& punctul b)
use studenti
?"Lista studentilor restantieri"
delete all for (nota1<5.00) or (nota2<5.00) or (nota3<5.00) or (nota4<5.00)
or (nota5<5.00) or (nota6<5.00)
list fields nume,prenume,nota1,nota2,nota3,nota4,nota5,nota6 for
(nota1<5.00) or (nota2<5.00) or (nota3<5.00) or (nota4<5.00) or
(nota5<5.00) or (nota6<5.00)
wait "apasa o tasta pentru trecerea la punctul urmator"
&& punctul c)
?"Lista studentilor admisi"
use studenti
list fields nume,prenume,media for media>=5.00
wait "apasa o tasta"
?"Lista studentilor restantieri"
scan
if media<5.00
display fields nume,prenume,media
endif
endscan
wait"apasa o tasta pentru terminare"
use
175
Baze de date
Probleme propuse:
176
Visual Foxpro
Capitolul 6
Programare structurată (clasică) în Visual Foxpro – operaţii
de actualizare înregistrări în tabele
Rezolvare:
În funcţie de alegerea unei opţiuni dintr-un meniu dat, se execută operaţia
selectată. Astfel:
Operaţia de adăugare - se citeşte codul unui produs şi se caută
acesta în tabelă. Dacă nu se gaseşte, atunci se citesc informaţiile care
trebuie depuse în tabelă şi se adăugă acestea la sfârşitul tabelei. Dacă
este găsit, atunci se presupune că se realizează o intrare în stoc, astfel
se citeşte doar cantitatea şi se adăugă la stocul deja existent.
Operaţia de modificare – se citeşte codul unui produs şi se caută în
tabelă. Dacă nu este găsit, atunci se afişeaza un mesaj corespunzător.
Dacă este găsit, atunci se afişeaza valorile tuturor câmpurilor existente
în tabelă şi apoi se citesc noile valori ale câmpurilor care vor fi asociate
codului respectiv.
177
Baze de date
178
Visual Foxpro
179
Baze de date
180
Visual Foxpro
delete
endif
endif
store space(1) to opt
@40,15 say "Doriti sa continuati? [D/N]" get opt
function "!"
read
enddo
use
case optiune="V"
clear
&& operatia de vizualizare
use stocuri order cod_prod
@15,10 say "==== LISTA STOCURI ============"
@16,10 say "--------------------------------------------------"
@17,10 say "|COD |DENUMIRE | STOC | UNITATE |"
@18,10 say "| PRODUS | PRODUS | | DE MASURA |"
@19,10 say "--------------------------------------------------"
go top
k=20
do while not eof()
@k,15 say cod_prod picture "99999"
@k,35 say den_prod picture
"XXXXXXXXXXXXXXXXXXXX"
@k,50 say stoc picture "999999999"
@k,55 say um picture "XXXXX"
k=k+1
if k>40
wait "Pentru continuare apasati o tasta"
k=20
@6,1 clear to 24,79
endif
skip
enddo
use
case optiune="T"
EXIT
otherwise
?"A-ti ales o optiune gresita"
loop
endcase
enddo
181
Baze de date
Exemplu 2:
Se consideră tabela STUDENTI.DBF, cu următoarea
structură: GRUPA C(4), NUME C(20), PRENUME C(20), N_ALGEBRA N(2),
N_BAZE N(2), N_ANALIZA N(2), N_TS N(2), N_LIMBAJE N(2), MEDIA N(5,2)
unde N_ALGEBRA reprezintă nota la algebră, N_BAZE reprezintă nota la baze
de date, N_ANALIZA reprezintă nota la analiză matematică, N_TS reprezintă
nota la teoria sistemelor, iar N_LIMBAJE reprezintă nota la limbaje de
programare. Iniţial table este vidă. Câmpul MEDIA se calculează pe baza
notelor la cele cinci materii. Se cere să se realizeze următoarele operaţii de
actualizare:
Introducerea informaţiilor în tabelă, prin program
Adăugarea unui nou student la cerere
Vizualizarea conţinutului tabelei
Rezolvare:
clear
set talk off
USE STUDENTI
nr=0
@10,10 say "Dati numarul de studenti care vreti sa-i introduceti " get
nr
read
for i=1 to nr
vgrupa=space(4)
vnume=space(20)
vprenume=space(20)
valgebra=0
vbaze=0
vanaliza=0
vts=0
vlimbaje=0
@11,10 say "Grupa " get vgrupa
@12,10 say "Numele " get vnume
@13,10 say "Prenumele " get vprenume
182
Visual Foxpro
183
Baze de date
Probleme propuse:
184
Visual Foxpro
Cumpărare valută
Vânzare valută
Total încasări
185
Baze de date
Capitolul 7
Funcţii şi proceduri utilizator. Ferestre.
Soluţie:
186
Visual Foxpro
deactivate window f1
procedure ADĂUGARE
clear
append blank
@30,20 say "Titlu: " get titlu
@35,20 say "Autor " get autor
@40,20 say "An aparitie" get an_apar
read
return
procedure ELIMINARE
clear
an={//}
@40,20 say "Dati anul " get an
read
delete for an_apar=an
pack
return
procedure IESIRE
clear
use
set talk on
clear all
cancel
return
Soluţie:
187
Baze de date
function cmmdc
parameters a,b
do while a<>b
if a>b
a=a-b
else
if a<b
b=b-a
endif
endif
enddo
return a
Soluţie:
188
Visual Foxpro
procedure DEPUNERE
append blank
replace nume with vnume, fel_tranz with vtranz, suma_tranz
with vsuma
return
procedure RESTITUIRE
if vsuma*10>SUMA()
@20,20 say "suma nu poate fi restituita"
else
append blank
replace nume with vnume, fel_tranz with vtranz,
suma_tranz with vsuma
endif
return
function SUMA
sum(suma_tranz) to x for fel_tranz="depunere"
sum(suma_tranz) to y for fel_tranz="restituire"
return x-y
Probleme propuse:
189
Baze de date
categoria camerei, LIBER – câmp care arată dacă camera este sau nu liberă.
Camerele pot fi de trei categorii: 1,2 sau 3. Să se afişeze, pentru un turist care
a venit, toate camerele libere corespunzătoare fiecărei categorii, iar în cazul în
care nu există să se spună pe ce dată se eliberează prima cameră.
190
Visual Foxpro
Capitolul 8
Meniuri definite de către utilizator
Soluţie:
m2='D'
set status off
set talk off
do while m2 $ 'Dd'
clear
m1=0
&& meniu orizontal
@1,2 say "FISIERELE: "
DEFINE MENU men1 BAR AT LINE 4
DEFINE PAD pad1 OF men1 PROMPT "1 - produse"
191
Baze de date
close all
deactivate menu men1
deactivate popup pop1
deactivate window f1
procedure select_meniu
use
do case
case PAD()="pad1"
USE PRODUSE
case PAD()="pad2"
USE BENEF
case PAD()="pad3"
192
Visual Foxpro
USE CONTRAC
case PAD()="pad4"
m1=1
endcase
return
procedure select_popup
do case
case BAR() = 1
do adaug
case BAR() = 2
do modif
case BAR() = 3
do sterg
case BAR() = 4
DEACTIVATE POPUP pop1
endcase
return
procedure adaug
procedure modif
procedure sterg
return
2,5
Raport1 Raport2
Raport3 Raport4
Soluţie:
193
Baze de date
@2,5 to 9,23
@3,6 to 5,22
@6,6 to 8,22
@4,14 say "|"
@7,14 say "|"
@4,7 PROMPT "Raport1"
@4,15 PROMPT "Raport2"
@7,7 PROMPT "Raport3"
@7,15 PROMPT "Raport4"
MENU TO m1
DO CASE
CASE m1=1
CASE m1=2
CASE m1=3
CASE m1=4
m=1
ENDCASE
enddo
Mustar Inghetata
Maioneza Papanasi
Pizza Italiana
Masline
Siciliana
pepperoni
194
Visual Foxpro
Soluţie:
procedure alegere
activate window f1
clear
do case
case popup()="burger"
@0,0 say "Comanda: "+popup()
195
Baze de date
Probleme propuse:
Problema 1
Să se construiască meniul următor:
1,2
lista1
lista2
lista3
20,20
adăugare stergere
modificare iesire
196
Visual Foxpro
Adăugare 20,50
Modificare
Optiunea nu
este activa
Stergere
30,75
Iesire
197
Baze de date
Capitolul 9
Limbajul SQL
1. Submeniul Actualizări
2. Submeniul Interogări
198
Visual Foxpro
3. Submeniul Ieşire
Opţiunea Adăugari
Opţiunea Modificări
199
Baze de date
Opţiunea Ştergeri
Opţiunea Interogare1
Opţiunea
Interogare2
200
Visual Foxpro
Opţiunea Interogare3
Opţiunea Interogare4
201
Baze de date
Opţiunea Interogare5
Opţiunea Interogare6
202
Visual Foxpro
Opţiunea Interogare7
Opţiunea Interogare8
203
Baze de date
204
Visual Foxpro
PROCEDURE Pact
DO CASE
CASE BAR()=1
DO adaug
CASE BAR()=2
DO modif
CASE BAR()=3
DO sterg
ENDCASE
RETURN
PROCEDURE Pinterog
DO CASE
CASE BAR()=1
&& interogare salariu intre 1000000 şi 2000000
SELECT nume, sectia, salariu
FROM angajati
WHERE salariu BETWEEN 1000000 AND 2000000
CASE BAR()=2
&& interogare
use
use sectii
SELECT sectia, n_sectie
FROM sectii ORDER BY nr_dept
use
CASE BAR()=3
&& interogare
use angajati
SELECT * FROM angajati
WHERE nr_dept IN (1,2) ORDER BY nume
205
Baze de date
CASE BAR()=4
&& interogare
SELECT nume, salariu
FROM angajati
WHERE functie = 'inginer' AND nr_dept = 2
CASE BAR()=5
&& interogare
SELECT nume, salariu
FROM angajati
WHERE nume LIKE '%POP%' OR nume LIKE '%ION%'
CASE BAR()=6
&& Afisati lista angajatilor şi salariile marite cu 15%
SELECT nr_dept, nume, round(salariu*1.15,2) sal_nou
FROM angajati
CASE BAR()=7
&& Gasiti salariul minim, salariul maxim şi salariul mediu
al tuturor angajatilor
SELECT MAX(salariu), MIN(salariu), AVG(salariu)
FROM angajati
CASE BAR()=8
&& Afisati salariul mediu pentru fiecare tip de functie
SELECT functie, AVG(salariu) AVERAGE
FROM angajati
GROUP BY functie
ENDCASE
RETURN
PROCEDURE Piesire
DO CASE
CASE BAR()=1
CLEAR
DEACTIVATE MENU
CANCEL
CASE BAR()=3
QUIT
ENDCASE
RETURN
&& -------------------------------------
procedure adaug
&& adăugarea a mai multor înregistrări noi
set status off
clear
&& indexam tabela dupa câmpul MARCA ca sa putem accesa rapid
fiecare înregistrare
206
Visual Foxpro
207
Baze de date
&& -------------------------------------
procedure modif
browse
return
&& -------------------------------------
procedure sterg
&& stergerea unei înregistrări
set status off
clear
&& indexam tabela dupa câmpul MARCA ca sa putem accesa rapid
fiecare înregistrare
index on marca tag marca
vmarca=0
optiune="D"
@2,2 say "Program de stergere"
do while optiune="D"
&& se citeste o înregistrare care eventual va fi stearsa
@5,25 say "dati marca care va fi stearsa " get vmarca pict
"9999"
read
seek vmarca
if found()
delete
pack
wait "înregistrarea a fost stearsa!"
else
wait "înregistrarea nu exista in tabela!"
@27,25 say "Mai doriti stergere? [D/N] " get optiune
read
if optiune="N"
cancel
endif
endif
enddo
return
208
Visual Foxpro
Capitolul 10
Probleme rezolvate şi probleme propuse
1. PROBLEME REZOLVATE
==========MACHETA==========
* NRAUTO:
* MARCA AUTO:
* CAPACITATE CILINDRU:
==========================
REZOLVARE :
209
Baze de date
210
Visual Foxpro
REZOLVARE :
211
Baze de date
******************************************************
* *
* AGENDA DE TELEFON *
* PROGRAMUL SIMULEAZA O AGENDA ELECTRONICA DE TELEFOANE
* *
* *
******************************************************
2004
endtext
wait' '
deactivate window f1
procedure proc_meniu
do case
case bar()=1
do p_actu
case bar()=2
do p_modi
case bar()=3
do p_caut
case bar()=4
do p_exit
endcase
212
Visual Foxpro
retu
&&========================================
proc p_actu
CLEAR
use agenda
@ 1,1 to 11,52 double
store " " to a_nume, a_prenume, a_adresa,
a_nr_tel, a_data, A_ORAS
@ 3,2 SAY " NUME " get a_nume picture "!!!!!!!!!!!!!!!!!!!!"
@ 4,2 say " PRENUME " get a_prenume picture "!!!!!!!!!!!!!!!!!!!!"
@ 5,2 say " ADRESA " get a_adresa picture
"STR.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
@ 6,2 say " Nr TELEFON " get a_nr_tel picture "999/9999999"
@ 7,2 say " DATA NASTERII " get a_data picture "99/99/9999"
@ 8,2 SAY " ORASUL " GET A_ORAS PICTURE "!!!!!!!!!!!!!!!!!!!!"
read
@ 10,2 say " DORITI SALVAREA DATELOR PE DISC "
define popup act from 7,35
defi bar 1 of act prompt " YES "
defi bar 2 of act prompt " NO "
on selec popup act do act
acti popup act
retu
&&========================================
procedure act
use agenda
do case
case bar()=1
n=reccount()
a_datan=ctod(a_data)
if a_datan > date() .or. val(left (a_data,2)) > 31 .or.
val(substr(a_data,4,2)) > 12
@ 10,2 say " IMPOSIBIL "
wait ""
clear
deact popup
endif
i=1
do while i<=n
if a_nume=nume .and. a_prenume = prenume .and. a_datan =
data_nas
@ 10,2 say " ACEASTA DATA MAI EXISTA IN ACESTA BAZA DE
DATE "
213
Baze de date
wait ""
clear
deacti popup
endif
go i
i=i+1
enddo
go bottom
append blank
replace nume with a_nume
replace prenume with a_prenume
replace adresa with a_adresa
replace nrtel with a_nr_tel
replace data_nas with a_datan
REplace oras with a_oras
do sort
deac popup
case bar()=2
clear
deacti popup
endcase
return
&&========================================
proc p_modi
USE AGenda
browse
do sort
return
&&========================================
proc p_caut
clear
defi popup caut from 0,0
defi bar 1 of caut prompt " NUME "
DEfi bar 2 of caut prompt " PRENUME "
defi bar 3 of caut prompt " ADRESA "
defi bar 4 of caut prompt " DATA NASTERII "
defi bar 5 of caut prompt " Nr. TELEFON "
on selec popup caut do caut1
activate popup caut
retur
&&========================================
proc caut1
214
Visual Foxpro
do case
case bar()=1
do nume
case bar()=2
do prenume
case bar()=3
do adresa
case bar()=4
do data_nase
case bar()=5
do nr
endcase
return
&&========================================
proc nume
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA TOATE PERSOANELE CU
NUMELE INTRODUS DE D-VOASTRA "
NUM1=" "
?
?
@ 12,2 SAY " INTRODUCETI NUMELE " GET num1 PICTURE
"!!!!!!!!!!!!!!!!!!!!"
READ
n=reccount()
clear
i=0
wqw=1
z=0
q=0
k=0
define window ert from 10,10 to 32,100 panel color g+/bg
activate wind ert
do while i<n
i=i+1
go i
if k/6=int(k/6) .AND. K<>0
wait "APASATI O TASTA PENTRU PAGINA URMATOARE DE
INREGISTRARI"
clear
k=0
Q=0
endif
215
Baze de date
if nume=num1
do scc
endif
enddo
wait "APASATI O TASTA PENTRU A CONTINUA"
CLEAR WIND
DEACT WIND ERT
clear
if z=0
@ 11,1 say " NU S-A GASIT NICI O PERSOANA CU NUMELE
INTRODUS DE D-VOASTRA"
wait ""
ENDIF
clear
deactivate popup
return
&&========================================
proc sort
clear
use agenda
!del aged.dbf
sort to aged on nume /a,prenume /a
use
!del agenda.dbf
use aged
sort to agenda on nume /a ,prenume /a
close all
retu
&&========================================
PROC scc
@ 0,30 say " GASITI "
@ 2+q,3 get nume
@ 3+q,3 get prenume
@ 2+q,30 get adresa
@ 3+q,30 get data_nas
@ 3+q,50 get nrtel
@ 2+q,0 get wqw picture "99"
@ 4+q,30 get oras picture "!!!!!!!!!!!!!!!!!!!!"
k=k+1
q=q+3
wqw=wqw+1
z=z+1
retu
216
Visual Foxpro
&&========================================
proc prenume
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA TOATE PERSOANELE CU
PRENUMELE INTRODUS DE D-VOASTRA"
pren1=" "
@ 12,2 say " INTRODUCETI PRENUMELE " GET PREN1 picture
"!!!!!!!!!!!!!!!!!!!!"
read
n=reccount()
clear
i=0
q=0
k=0
wqw=1
z=0
define window zxc from 10,10 to 32,100 panel color g+/bg
acti wind zxc
go top
do while i<n
i=i+1
goto i
if k/6=int(k/6) .and. k<>0
wait "APASATI O TASTA PENTRU PAGINA URMATOARE"
CLEAR
k=0
Q=0
endif
if pren1=prenume
do scc
endif
enddo
wait "APASA O TASTA PENTRU A CONTINUA "
CLEAR WIND
deactivate wind zxc
clear
if z=0
@ 11,1 say "NU S-A GASIT NICI O PERSOANA CU PRENUMELE
INTRODUS DE D-VOASTRA"
wait ""
ENDIF
clear
deact popup
217
Baze de date
retu
&&========================================
proc adresa
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA PERSOANELE CARE LOCUIESC
PE STRADA INTRODUSA DE D-VOASTRA "
ADRESA1=" "
@ 12,2 say " INTRODUCETI NUMELE STRAZII " GET ADRESA1
PICTURE "!!!!!!!!!!!!!!!!!!!!"
READ
n=reccount()
qu=" "
ss=" "
clear
ww=1
do while ww<=20
if substr (adresa1,ww,1)=" "
ss=substr(adresa1,1,ww-1)
exit
endif
ww=ww+1
enddo
i=0
q=0
k=0
wqw=1
z=0
define window mnb from 10,10 to 32,100 panel color g+/bg
acti wind mnb
do while i<n
i=i+1
go i
if k/5=int(k/5) .and. k<>0
wait " APASATI O TASTA PENTRU PAGINA URMATOARE "
CLEAR
k=0
Q=0
endif
qq=5
ass=upper(adresa)
do while qq<=20
if substr(ass,qq,1)=" "
qu=substr(ass,5,qq-5)
exit
218
Visual Foxpro
endif
qq=qq+1
enddo
if ss=qu .and. len(qu)=len(ss)
do scc
endif
enddo
wait " APASA O TASTA PENTRU A CONTINUA "
CLEAR WIND
deac wind mnb
clear
if z=0
@ 11,1 say " NU S-A GASIT NICI O PERSOANA CU NUMELE STRAZII
INTRODUS DE D-VOASTRA"
WAIT ""
ENDIF
clear
deact popup
retu
&&========================================
proc data_nase
use agenda
clear
@ 10,0 say " CALCULATORUL VA CAUTA TOATE PERSOANELE CU
DATA DE NASTERE INTRODUSA DE D-VOASTRA"
DATA=" "
@ 12,2 SAY "INTRODUCETI DATA DE NASTERE "GET DATA PICTURE
"99/99/9999"
READ
N=reccount()
clear
i=0
q=0
k=0
wqw=1
z=0
define window asd from 10,10 to 32,100 panel color g+/bg
acti wind asd
do while i<n
i=i+1
go i
if k/5=int(k/5) .and. k<>0
wait " APASATI O TASTA PENTRU PAGINA URMATOARE "
CLEAR
219
Baze de date
K=0
endif
qaz=DTOC(data_NAS)
if data=QAZ
do scc
endif
enddo
wait " APASA O TASTA PENTRU A CONTINUA "
CLEAR
DEACT WIND ASD
CLEAR
IF Z=0
@ 11,1 SAY " NU S-A GASIT NICI O PERSOANA CU DATA DE NASTERE
INTRODUSA DE D-VOASTRA"
WAIT ""
CLEAR
ENDIF
DEACT POPUP
RETU
&&========================================
PROC NR
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA TOATE PERSOANELE CARE AU
NR. DE TELEFON INTRODUS DE D-VOASTRA"
NR=" "
@ 12,2 SAY " INTRODUCETI NUMARUL " GET NR PICTURE
"999/9999999"
READ
N=RECCOUNT()
CLEAR
I=0
Q=0
K=0
WQW=1
Z=0
define window wsx from 10,10 to 32,100 panel color g+/bg
ACTI WIND WSX
DO WHILE I<N
I=I+1
GO I
IF K/5=INT(K/5) .AND. K<>0
WAIT " APASA O TASTA PENTRU PAGINA URMATOARE "
CLEAR
220
Visual Foxpro
K=0
ENDIF
IF NR=NRTEL
DO SCC
ENDIF
ENDDO
WAIT " APASA O TASTA PENTRU A CONTINUA "
CLEAR
DEACT WIND WSX
CLEAR
IF Z=0
@ 11,1 SAY " NU S-A GASIT NICI O PERSOANA CU NR DE TELEFON
INTRODUS DE D-VOASTRA"
WAIT ""
CLEAR
ENDIF
DEACT POPUP
RETU
&&========================================
PROC P_EXIT
CLEAR
CLOSE ALL
DEFI POPUP Y FROM 10,50
DEFI BAR 1 OF Y PROMPT " PARASIREA FOXPRO-ULUI "
DEFI BAR 2 OF Y PROMPT " PARASIREA PROGRAMULUI "
ON SELECT POPUP Y DO EW
ACTI POPUP Y
DEACT POPUP
RETU
&&========================================
PROC EW
DO CASE
CASE BAR()=1
QUIT
CASE BAR()=2
DEACT POPUP
ENDCASE
RETURN
221
Baze de date
2. PROBLEME PROPUSE
Se cer următoarele :
Să se afişeze numărul de persoane care au acelaşi nume cu cel
precizat de utilizător de la tastatură;
Să se afişeze numele şi prenumele persoanei al cărui număr de
telefon este citit de utilizător de la tastatură;
Să se ordoneze tabela după câmpurile nume şi prenume
222
Visual Foxpro
Capitolul 11
Teste grilă rezolvate. Teste grilă propuse.
USE STUDENTI
MODIFY STRUCTURE
223
Baze de date
4. Se dă secvenţa de comenzi :
Care afirmaţii sunt adevărate ?
a) se poate actualiza structura tabelei STUDENTI
b) este greşită comanda MODIFY STRUCTURE
c) creeaza şi poate doar modifica structura tabelei STUDENTI
d) doar modifica câmpuri în tabela STUDENTI
e) modifică datele din tabela curentă
Răspuns: a)
5. Comenzile utilizate pentru accesul direct după cheie sunt :
a) SEEK
b) FIND
c) GOTO
d) LOCATE şi CONTINUE
e) SKIP
Răspunsuri: a) şi b)
6. Comanda USE se foloseşte pentru :
a) a deschide o tabelă
b) a deschide indecşii asociaţi tabelei
c) a deschide o vedere
d) a închide tabela deschisă anterior
e) a deschide o bază de date
Răspunsuri: a), b), c) şi d)
7. Comanda GOTO se foloseşte pentru regăsirea înregistrărilor :
a) secvenţial
b) direct după cheie
c) după numărul de realizare a înregistrării
d) dinamic
e) direct după cheie şi după numărul de realizare a înregistrărilor
Răspuns: c)
224
Visual Foxpro
USE STUDENTI
8. Spuneţi care este efectul execuţiei
INDEX ON MATRICOL
următoarelor comenzi : TO STUD
m1=101
SEEK m1
DISPLAY
CONTINUE
DISPLAY
225
Baze de date
USE STUDENTI
13. Se consideră următoarea secvenţă de comenzi : GO 3
Care din afirmaţii este adevărată ? APPEND BLANK
a) adăugă un număr de înregistrări dorit de utilizator
b) adăugă o înregistrare după cea curentă
c) adăugă o înregistrare la sfârşitul tabelei curente
d) adăugă o înregistrare după cea cu numărul de ordine 3
e) adăugă 3 întregistrări
Răspuns: c)
14. Se consideră următoarea secvenţă de comenzi :
USE STUDENTI
DISPLAY
REPLACE RECORD 3 FOR MATRICOL=123 PRENUME WITH
“COSTEL“
DISPLAY
226
Visual Foxpro
227
Baze de date
Răspuns: c)
17. Să se specifice care din structurile de mai jos este o structură repetitivă :
a) IF...ENDIF
b) DO CASE...ENDCASE
c) DO WHILE…ENDDO
d) FOR…ENDFOR
e) SCAN…ENDSCAN
Răspuns: c), d) şi e)
a=10
18. Se consideră următoarea secvenţă de b=a**2
program : IF b<101
? 10
Ce valori se afişează ?
ELSE
a) 100 IF b>101
b) 111 ? 111
c) nu se afişează nimic
ELSE
?b
d) 10 ENDIF
e) b ENDIF
a=0
Răspuns: d)
@10,10 SAY “a = ” GET a
19. Ce va afişa următoarea READ
secvenţă de program, dacă IF a = 10
? a+1
de la tastatura se dă
ELSE
valoarea 123 ? IF a=124
a) 122 @20,10 SAY “Orice valoare”
b) 124 ELSE
IF a > 234
c) 234
?a
d) Orice valoare ELSE
e) 123 ? a-1
ENDIF
Răspuns: a)
ENDIF
ENDIF
228
Visual Foxpro
229
Baze de date
230
Visual Foxpro
e. numărul 10
231
Baze de date
7. Exemplu următor :
STORE ‘&X’ TO X
? &X
a. afişează pe ecran “&&X”
b. afişează pe ecran "&X"
c. generează un mesaj de eroare. & nu se foloseşte în comanda STORE
d. generează un mesaj de eroare. O variabilă nu poate fi referită
recursiv într-o macrosubstituţie
e. afişează pe ecran “X"
10. Se da secvenţa:
SET TALK OFF
232
Visual Foxpro
m1=0
STORE1.2 Tom1,m2,m3
m2 = 'IBM'
?m1,m2, m3
Care afirmaţii sunt adevărate ?
a. afişează valoarea 0 pentru m1
b. afişează valoarea 2 pentru m2
c. conţine o comandă greşită
d. afişează valorile 1 şi 2 pentru m3
e. afişează şirul "m1, m2, m3"
11. Se dă secvenţa:
SET TALK OFF
m1=0
STORE 1.1 TO m1,m2,m3
m3=’DELL’
? m1,m2,m3
233
Baze de date
Ce valori se afişează ?
a. 64
b. 108
c. nu se afişează nimic
d. 8
e. m1
234
Visual Foxpro
235
Baze de date
a. DELL
b. 2
c. 11
d. EROARE
e. 3
236
Visual Foxpro
m2 = ‘OK’
DO CASE
CASE m3 = 1
m2 = m1 -1
CASE m3 = 2
m2 = ‘dell’
CASE m3 = 3
m2 = m3 * 3
CASE m3 = 4
m2 = .T.
ENDCASE
Dacă se introduce de la tastatură valoarea 22 ?
a. .T.
b. 1
c. dell
d. 9
e. OK
237
Baze de date
e. defineşte un meniu
18. Comanda @5,x SAY y, unde x şi y sunt variabile întregi diferite de cinci:
a. este o comandă de intrare standard
b. scrie o valoare începând din coloana cinci
c. este o comandă de ieşire standard
d. este o comandă de citire stantard
e. este greşită pentru că apare x şi y
238
Visual Foxpro
239
Baze de date
RETURN
Care afirmaţii sunt adevărate ?
a. este greşită pentru că procedura este plasată după apel
b. este greşită pentru că nu este apelată bine
c. este greşită pentru că o structura tip CASE nu poate apare într-o procedură
d. este gresită pentru că variabila ‘m1’ se utilizează în procedură şi nu este
definită în ea
e. este greşită o comandă GO
240
Visual Foxpro
m2=2
DO p2
?’Terminat’
PROC p2
DO p2
m1=m1/m2
PROC p2
m2=m1/m2
PROC p3
m3=22
DO p1
m3=m3+m2
RETURN
Care afirmaţii sunt adevărate ?
a. procedura ‘p1’ trebuie situată după procedura ‘p3’
b. imbricarea comenzilor de apel se face pe mai multe niveluri
c. variabila ‘m2’ este paramentru de intrare în procedura ‘p3’
d. variabilele ‘m1’ şi ‘m3’ sunt ambele parametri de intrare în procedura ‘p1’
e. este greşita secvenţa
241
Baze de date
RETU
Care afirmaţii sunt adevărate ?
a. procedura ‘p1’ este greşită pentru că nu are RETURN
b. procedura ‘p2’ este greşită pentru că foloseşte variabila ‘m2’ pe care nu a
definit-o
c. procedura ‘p2’ este greşită pentru că foloseşte variabila ‘m3’ pe care nu a
definit-o
d. comanda PUBLIC nu există în FoxPro
e. secvenţa este un program modularizat
242
Visual Foxpro
243
Baze de date
244
Visual Foxpro
245
Baze de date
246
Visual Foxpro
36. Se dă secvenţa :
USE STUDENTI
MODI STRU
Care afirmaţii sunt adevărate?
a. se pot modifica şi adăuga attribute din/în tabela STUDENTI
b. se poate şterge un câmp din tabela STUDENTI
c. se poate modifica numele tabelei STUDENTI
d. se poate modifica numele unui câmp din tabela STUDENTI
e. conţine o comandă greşită
247
Baze de date
e. atributul memo se salvează într-un fişier (.fpt) şi tabela într-un fişier de tip
(.dbf)
248
Visual Foxpro
e. SET ORDER
249
Baze de date
c. INSERT
d. REPLACE
e. UPDATE
47. Se dă secvenţa :
USE STUDENTI
GO 3
APPEND BLANK
Care afirmaţii sunt adevărate ?
a. adaugă o înregistrare la sfârşitul tabelei curente
b. adaugă un numar de înregistrări dorit de utilizator
c. adaugă o înregistrare după cea curentă
d. adaugă o înregistrare după cea cu numărul de ordine 3
e. adaugă o înregistrare vidă
48. Se da secvenţa :
USE STUDENTI
SKIP 2
APPEND
DISPLAY
Care afirmaţii sunt adevărate ?
a. conţine o comandă greşită
250
Visual Foxpro
49. Se dă secvenţa :
USE STUDENTI
DISPLAY
REPLACE RECORD 3 FOR cod=22 GRUPA WITH ‘112A’
Care afirmaţii sunt adevărate ?
a. modifică în primele 3 înregistrări ‘cod’ cu 22 şi ‘grupa’ cu 112A
b. modifică înregistrarea a treia dacă cod=22
c. modifică trei înregistrări
d. conţine o comandă greşită
e. şterge logic a treia înregistrare
50. Se dă secvenţa :
USE STUDENTI
PACK
DELETE NEXT 2
GO TOP
LIST
Care afirmaţii sunt adevărate ?
a. şterge fizic primele două înregistrări
b. şterge logic şi fizic doar a doua înregistrare
c. şterge fizic doar a doua înregistrare
d. şterge logic doar a doua înregistrare
e. şterge logic primele două înregistrări
251
Baze de date
Bibliografie
252
Visual Foxpro
253
Baze de date
Soluţii
1. b 26. e.
2. a. 27. b.
3. a 28. a.,b.,c.,d.,e.
4. b 29. a.
5. a 30. c. si e.
6. c,d,e 31. c. si d.
7. d 32. nici un răspuns corect
8. a,b,d 33. b. si c.
9. c,e 34. a, c, d
10. nici una 35. a, b, e
11. d 36. a, b, d
12. b 37. b, c, d, e
13. d 38. e
14. a 39. d, e
15. nici un răspuns corect 40. a, b, c
16. c 41. c
17. a. 42. a, b, c
18. c. 43. e
19. e. 44. a, e
20. nici un răspuns corect 45. a
21. b. si d. 46. a, b
22. a. si e. 47. a, e
23. nici un răspuns corect 48. b, c
24. c. 49. b
25. b. si c. 50. e
254