Curs 2- Visual Foxpro
exploatarea bazelor de date
În mod tipic, bazele de date si tabelele aferente se creaza o singura data . Dupa aceea, utilizatorul si programatorul exploateaza datele de acolo (de fapt pentru asta se creaza baza de date). Operatiile uzuale sunt : deschiderea bazei de date 656y248g , afisarea completa sau partiala a datelor, modificarea sau stergerea înregistrarilor din tabele, afisarea ordonata a lor, cautarea unor date în tabele, etc. Pentru aceasta , SGBD pune la dispozitie o serie de comenzi specifice pe care le vom discuta mai departe.
1. Deschiderea bazelor de date si a tabelelor
Bazele de date si elementele componente, la nivelul sistemului de operare sunt memorate în fisiere. Conform regulilor sistemului de operare, dupa crearea unui fisier, acesta poate fi prelucrat daca este deschis. Aceasta regula o întâlnim si la prelucrarea bazelor de date . Prin urmare, pentru a putea opera cu datele din b.d. si din tabele va trebui sa le deschideti.
Deschiderea bazei de date 656y248g se poate face în mai multe moduri :
se selecteaza meniul File, comanda Open, apoi se selecteaza categoria Database si în final se alege directorul si baza de date respectiva.
se tasteaza ( în fereastra de comanda ) OPEN DATABASE .Comanda poate fi urmata de numele bazei de date sau fara nume, în acest caz se începe un dialog între utilizator si computer pentru selectarea bazei de date .
Observatie: 1. Se pot deschide mai multe baze de date simultan.
Dupa deschidere, constructorul de tabel nu este totdeauna afisat . Afisarea explicita a acestuia se poate face cu MODIFY DATABASE.
Dupa deschiderea bazei de date 656y248g , trebuie deschise tabelele componente pentru a avea acces la date. Deschiderea unui tabel se face în mod similar :
se selecteaza meniul File, comanda Open, apoi se selecteaza categoria Table si în final se alege directorul si tabelul de date respectiv.
se tasteaza ( în fereastra de comanda ) USE nume sau USE ? .Comanda poate fi urmata de numele tabelului sau de ?, în acest caz se începe un dialog între utilizator si computer pentru selectarea tabelelor.
Tabelele libere se pot deschide în mod similar.
De foarte multe ori utilizatorul doreste sa lucreze ( simultan ) cu mai multe tabele. Din pacate , daca le deschide pe rând , numai ultimul ramâne accesibil, celelalte închizându-se automat. Pentru astfel de situatii, exista mai multe zone de lucru identificate prin numere ( în numar de 32767) , în fiecare zona putându-se deschide un tabel împreuna cu fisierele index asociate. Pentru a deschide un tabel (liber sau legat de baza de date) într-o zona de lucru se poate tasta în fereastra de comanda :
SELECT n
USE numetabel
sau
USE numetabel IN n [ALIAS pseudonume]
unde n reprezinta numarul zonei de lucru.
Selectarea zonei de lucru se poate face dupa aceea prin comanda SELECT n .
De asemenea,
deschiderea tabelelor în zone de lucru se mai poate face si din meniul Window, optiunea Data Session, dupa care apare o fereastra
numita Data Session cu ajutorul
careia se selecteaza tabelele în zonele de lucru, ca în figura de mai
jos :
![]() |
|||
![]() |
|||
Observatie : a. Comenzile care se tasteaza în fereastra de comanda se pot folosi si în sursele de program .
b. Se poate deschide un tabel de mai multe ori folosind comanda Use nume In 1 AGAIN.
c. Daca baza de date sau tabelul nu se gasesc în directorul curent ( care este de obicei directorul în care este instalat Visual Foxpro ), se poate scrie calea completa ce permite localizarea lor. De asemenea, se poate schimba directorul de lucru folosind comanda SET DIRECTORY TO nume. De exemplu, se poate tasta SET DIRECTORY TO C:\Salariati.
d. O baza de date se închide cu comanda CLOSE DATABASE , iar un tabel deschis într-o zona cu USE sau USE IN zona. De asemenea, închiderea tabelelor se poate face si cu comanda Close Table.
e. Accesarea câmpurilor bazelor de date deschise în mai multe zone de lucru, se poate face si prin numele bazei de date urmat de punct si numele câmpului : Angajati.Nume sau Functii.Cod .
Trebuie retinut faptul ca prelucrarea datelor într-o tabela se face la nivel de înregistrare, în sensul ca la un moment dat este prelucrata o singura înregistrare . Din acest motiv , sistemul tine evidenta înregistrarii curente, a celei care se prelucreaza, folosind un indicator de înregistrare . Acest indicator care îi spune sistemului cu ce înregistrare sa lucreze sau unde sa modifice date , este la pozitionat la deschiderea tabelului la început. El este mutat de obicei pe înregistrarea urmatoare, dupa o prelucrare a înregistrarii curente. Totusi indicatorul poate fi mutat explicit cu ajutorul comenzilor GOTO si SKIP astfel :
GOTO n (se pozitioneaza la începutul înregistrarii n) sau
GOTO TOP (se pozitioneaza la începutul tabelului) sau
GOTO BOTTOM (se pozitioneaza la sfârsitul tabelului )
urmate eventual de optiunea IN tabela ce precizeaza explicit la care tabel se aplica,
respectiv SKIP n IN tabela care sare peste n înregistrari ( n este pozitiv sau negativ).
Atentie, daca este deschisa o fereastra de editare ( cu Browse, cu Append, cu Edit se poate face pozitionarea manuala sau cu ajutorul comenzii Goto Record din meniul Table. exista si o functie , numita RecNo() , care poate fi folosita pentru a numarul înregistrarii curente .
2. Adaugarea de noi înregistrari în tabele
Desi utilizatorul poate introduce în momentul crearii tabelului înregistrari, exista o comanda dedicata pe care o poate apela în fereastra de comanda sau în program :
APPEND
De asemenea, exista doua comenzii, folosite mai ales în programe , ce permit adaugarea de înregistrari goale : APPEND BLANK si INSERT BLANK .
3. Editarea continutului tabelelor . Comenzile BROWSE si EDIT.
Utilizatorul are la dispozitie o comanda universala, numita BROWSE, care poate fi folosita pentru realizarea diferitelor operatii de prelucrare asupra datelor din tabele. Comanda poate fi pornita din meniul rapid (ce se obtine apasând butonul dreapta pe obiectul tabel) fie tastând comanda în fereastra de comanda.sablonul general de utilizare (simplificat):
BROWSE [lista câmpuri] [WIDTH latime] [FOR conditie ] [NOEDIT] [NODELETE] [NOAPPEND] .
Se observa aparitia unor argumente suplimentare , care nu sunt obligatorii : lista câmpuri permite afisarea în tabel doar a anumitor coloane, Width precizeaza latimea maxima a coloanelor, iar celelalte optiuni protejeaza tabelul la operatiile precizate.
Comanda permite afisarea datelor sub forma tabelara, apoi permite modificarea valorilor din câmpuri ( cu comenzile de editare cunoscute). De asemenea, se pot adauga înregistrari noi tastînd CTRL +Y sau alegând comanda APPEND NEW RECORD din meniul TABLE ( atentie meniul Table apare doar când deschideti fereastra BROWSE):
![]() |
|||
|
|||
|
![]() |
![]() |
|
Se pot sterge, de asemenea, înregistrari din tabel. stergerea înregistrarilor se face în doua etape : marcarea lor si stergerea lor fizica . Marcarea se face tastând CTRL+T (dupa ce am pozitionat indicatorul pe aceea înregistrare- cu tastele cursor, PgUp, PgDown). Dupa cum se observa din figura de mai sus, se poate folosi si comanda DELETE RECORDS , din meniul TABLE. stergerea fizica (deci pierderea definitiva a acelei înregistrari ) se face fie tastând comanda PACK în fereastra de comanda, fie alegând comanda REMOVE DELETED RECORDS, din meniul TABLE.
Comanda BROWSE are o varianta similara numita EDIT, ce permite acelasi lucru.
4. Afisarea continutului unui tabel - comanda LIST.
Sistemele pentru baze de date ( inclusiv Visual Foxpro) au foarte multe instrumente de afisarea a datelor. Am prezentat o metoda simpli , tabelara, cu Browse . De asemenea , exista o varianta , tot simpla si rapida , pe care utlizatorul o poate folosi rapid pentru a afisa continutul tabelului, varianta mostenita din versiunile mai vechi de FoxPro. Comanda respectiva se numeste LIST (sau DISPLAY) si se poate folosi sub urmatoarea forma :
LIST lista câmpuri] [grup nregistrariri] [FOR conditie] [WHILE conditie]
[TO PRINTER|TO FILE][NOCONSOLE]
În mod implicit se afiseaza toate câmpurile, în schimb se pot preciza câmpurile care se vor afisa . Domeniu precizeaza grupul de înregistrari care se vor afisa, domeniu putând lua urmatoarele valori: ALL, NEXT n, RECORD n, REST . Optiunile FOR si WHILE, permit filtrarea înregistrarilor conform conditiei precizate. Ultimele optiuni permit afisarea datelor si la imprimanta sau în fisier .
Exemple: 1. USE cursanti
LIST nume, prenume
2. USE cursanti
DISPLAY
USE cursanti
LIST FOR Datan >
USE cursanti
LIST Nume, Prenume TO PRINTER NOCONSOLE
USE cursanti
LIST Nume,Prenume,Medie To Lista.txt
Trebuie totusi sa mentionam ca exista o solutie mult mai buna, ce se foloseste mai ales pentru sisteme informatice (adica pentru aplicatii). Ea consta în folosirea rapoartelor (subiectul se va discuta mai târziu).
stergerea înregistrarilor din tabele -comanda DELETE
Alaturi de adaugare si modificare, stergerea reprezinta una din operatiile des întânite în lucrul cu tabelele. stergerea este folosita pentru a elimina datele unei înregistrari din tabel. stergerea unei înregistrari se poate face fie la nivel logic ( înregistrarea nu este propriu-zis stearsa, ci este marcata pentru stergere), fie la nivel fizic (înregistrarea este stearsa fizic din tabela). Am prezentat deja o solutie cu BROWSE. Exista, însa , o comanda dedicata numita DELETE, ce se poate tasta în fereastra de comanda sau scrie în programe:
DELETE grup înregistrari] [FOR conditie] [WHILE conditie]
În mod implicit, daca nu se foloseste nici un parametru, se va marca pentru stergere înregistrarea curenta. Puteti sa precizati grupul de înregistrari prin domeniu (domeniu poate lua acelasi valori cu cele precizate anterior la comanda LIST ) sau prin conditii. Dupa marcarea înregistrarilor , ele pot fi sterse definitiv din tabel cu ajutorul comenzii PACK (tastata în fereastra de comanda).
Exemple: 1. USE cursanti
DELETE
USE cursanti
DELETE FOR Datan >
PACK.
USE cursanti
DELETE RECORD 3
PACK.
Observatie: O înregistrare marcata pentru stergere, poate fi recuperata cu ajutorul comenzii RECALL sau cu ajutorul optiunii Recall Records din meniul Table (vezi figura anterioara). Însa, daca s-a aplicat comanda Pack, înregistrarile nu mai pot fi recuperate.
Modificarea continutului unei tabel.
Modificarea valorilor din câmpuri se poate face în mai multe moduri. O solutie , este oferita de comnezile BROWSE si EDIT. De asemenea, si comanda APPEND permite modificarea valorilor din câmpuri. Totusi exista o comanda dedicata, folosita mai ales în programe, cu ajutorul careia se modifica valorile din câmpuri . Comanda se numeste REPLACE si are sintaxa :
REPLACE [domeniu] câmp1 WITH valoare1, ., câmpn WITH valoaren
[FOR conditie] [WHILE conditie]
Comanda înlocuieste vechea valoare din câmpurile precizate cu o valoare noua. Daca nu se precizeaza domeniu, comanda se aplica doar la înregistrarea curenta , altfel la grupul precizat de domeniu.Clauzele For si WHILE permit filtrarea grupului de înregistrari prin conditii .
Exemple: 1. USE cursanti
REPLACE ALL MEDIE WITH (Obiect1+Obiect2)/2
USE salariati
REPLACE ALL Salariu WITH 1.5 * Salariu
REPLACE ALL Sanatate WITH 0.07 *Salariu
USE cursanti
REPLACE ALL Situatie WITH 'PROMOVAT' FOR Ob1>=5 AND Ob2>=5
În programe, mai ales când se fac calcule , comanda este foarte utila, deoarece modificarea unui câmp nu se poate face direct prin atribuire ci doar cu REPLACE.
O alta tehnica de modificare a continutului înregistrarilor este data de comenzile SCATTER si GATHER . Prin intermediul acestor doua comenzi se poate realiza transferul între înregistrarea curenta a tabelei sau un set de variabile.
Comanda GATHER realizeaza transferul de la tablou sau de la setul de variabile la tabela, iar SCATTER realizeaza transferul invers. Comanda GATHER are sintaxa:
GATHER FROM tablou
GATHER MEMVAR
prima preia datele din tabloul specificat în înregistrarea curenta , iar cea de-a doua forma foloseste ca sursa de date un set special de variabile, cu acelasi nume ca si câmpurile tabelei. Accesul la setul de variabile (creat cu comanda SCATTER cu clauza MEMVAR) se face prin constructia : m. nume variabila. Comanda GATHER poate contine clauza FIELDS , urmata de o lista de câmpuri care se vor copia în înregistrarea curenta a tabelei active . Daca se doreste si copierea câmpurilor memo, trebuie adaugata si optiunea MEMO.
Comanda SCATTER, este opusa comenzii anterioare, ea copiind câmpurile înregistrarii curente din tabela activa într-un tablou sau într-un set de variabile. Sintaxa comenzii este :
SCATTER TO tablou
sau
SCATTER MEMVAR
si aici se pot folosi clauzele FIELDS si MEMO, cu acelasi scop.
6. Cautarea datelor -comanda LOCATE
O alta operatie utila, mai ales în cazul tabelelor mari, este cea de cautare a unei înregistrari care respecta o anumita conditie. Comanda este LOCATE si are sintaxa :
LOCATE FOR conditie domeniu] [WHILE conditie ]
Ea încearca localizarea primei înregistrari din tabel ce verifica conditia din FOR . Grupul de înregistrari n care se cauta , este cel dat de domeniu si WHILE, implicit fiind ALL. Daca aceasta înregistrare exista, indicatorul de acces la fisier se va pozitiona pe aceasta. Utilizatorul poate afla daca înregistrarea exista, folosind functia FOUND(), functie care returneaza TRUE în cazul gasirii sau FALSE în caz de esec. Se poate continua cautarea , în ideea de gasi alte înregistrari asemanatoare, cu ajutorul comenzii CONTINUE.
Exemplu :
USE cursanti
LOCATE FOR Nume='POPESCU'
IF Found()
DISP
ENDIF
Calcule statistice cu datele din tabele- comenzile SUM, COUNT
Pe lânga cautarea si consultarea datelor din tabele, în aplicatiile practice avem nevoie si de calcule cu valorile câmpurilor. De exemplu, ne intereseaza sa stim care este totalul salariilor brute sau cât este impozitul total ce trebuie virat. De asemenea, ne intereseaza câti angajati nu sunt platitori de impozit. Toate aceste lucruri constau de fapt în operatii statistice asupra înregistrarilor din tabele : însumarea valorii câmpurilor din tabele, contorizarea înregistrarilor ce îndeplinesc o anumita proprietate . Exista comenzii dedicate ce pot sa dea raspuns la întrebarile anterioare.
Calcularea numarului de înregistrari care respecta o anumita conditie se realizeaza cu ajutorul comenzii COUNT , cu sintaxa :
COUNT [domeniu] FOR conditie TO variabila
Exemplu : USE ANGAJAŢI
COUNT FOR Impozit=.T. TO Nr
?Nr
O alta operatie utila este aceea de însumare a valorilor unor câmpuri numerice. Pentru aceasta folosim comanda SUM cu sintaxa :
SUM [domeniu] expresie1, expresie2,., expresien TO v1,v2,.,vn [FOR conditie]
Exemplu :a. USE ANGAJAŢI
SUM VenitBrut TO TotalBrut
?TotalBrut
b. USE ANGAJAŢI
SUM Impozit TO TotalImpozit FOR Tip_Ang='T'
?TotalImpozit
Exista o varianta particulara a comenzii SUM , numita AVERAGE, ce se poate folosi pentru a calcula media aritmetica a unor câmpuri.
Exemplu :a. USE ANGAJAŢI
AVERAGE SalBrut TO SalariuMediu
?SalariuMediu
De asemenea, pentru calcule statistice mai complexe, exista o comanda mai complexa numita CALCULATE . Aceasta poate fi urmata de o lista de expresii care sunt calculate pe baza datelor din tabela. În aceste expresii pot fi incluse o serie de functii statistice, cu urmatoarele semnificatii:
AVG(expresie )- calculeaza media aritmetica a valorilor expresiei respective (pentru fiecare înregistrare ), expresie care poate contine câmpuri numerice ale tabelei.
CNT() - returneaza numarul de înregistrari prelucrate.
MAX(expresie), respectiv MIN (expresie) - returneaza expresia cea mai mare , respectiv cea mai mica.
SUM(expresie) - calculeaza suma valorilor expresiilor .
Sintaxa generala a lui CALCULATE este :
CALCULATE functii TO VARIABILE [FOR conditie]
Exemplu :a. USE ANGAJAŢI
CALCULATE MAX(VenitBrut) TO MAXVenitBrut
?MAXVenitBrut
8. Ordonarea datelor din tabele :
Nimeni nu se asteapta ca utlizatorii sa introduca datele gata sortate, gata aranjate. Din acest motiv, de multe ori avem nevoie sa vedem datele într-o anumita ordine. O alta operatie uzuala, regasirea informatiilor, se poate face mult mai comod în listele ordonate.
S.G.B.D.-ul Visual Foxpro ofera doua solutii legate de ordonarea unei tabele :
ordonarea fizica a tabelei - consta în crearea unei noi tabele cu datele din prima tabela , tabela ordonata dupa un criteriu precizat
indexarea unei tabele - aceasta consta în crearea unui fisier suplimentar , numit index, care sa contina informatii cu privire la ordinea înregistrarilor tabelei. Tabela ramâne fizic în aceeasi ordine, dar este "vazuta" si accesata conform ordinii din fisierul index .
Sortarea fizica a tabelelor :
Ordonarea fizica si crearea unei noi tabele ordonate se face cu ajutorul comenzii SORT. Aceasta are sintaxa :
SORT [domeniu] ON câmp1 /A sau /D , ., câmpn /A sau /D TO TabelaNoua
FOR conditie
Exemplu : a. USE ANGAJAŢI
SORT On Nume TO LAngajati
USE Langajati
BROWSE
b. USE ANGAJAŢI
SORT On DataAng/D, Nume/A TO LAngajati
USE Langajati
LIST NUME, DataAng
c. USE Candidati
SORT On Medie/D, Ob1/D To Admisi
FIELDS Nume, Prenume, Ob1, Ob2, Medie FOR Ob1>=5 .AND. Ob2>=5 USE Admisi
BROWSE
SORT On Medie/D, Ob1/D To Respinsi
FIELDS Nume, Prenume, Ob1, Ob2, Medie FOR Ob1 <5 .OR. Ob2<5
USE Respinsi
Sortarea logica ( indexarea ) tabelelor
A doua metoda, care este mai performanta ca si ordonarea fizica ( datorita timpului care se pierde, a spatiului consumat, etc) si este folosita mai ales la realizarea legaturilor dintre tabele, consta în crearea unui fisier separat ( numit index) asociat tabelei, fisier index care sa pastreaza ordinea înregistrarilor . Accesarea înregistrarilor din tabela se face prin intermediul indexului, în ordinea data de fisierul index. .
De exemplu :
Carti.cdx Carti.dbf
Titlu |
Pozitie |
Nr. înreg |
Titlu |
Autor |
Nr. pag. |
|
Amintiri din copil. |
Ion |
Liviu. R. | ||||
Ion |
Amintiri din copilarie |
Ion Creanga | ||||
Insula misterioasa |
Morometii |
Marin Preda | ||||
Morometii |
Insula misterioasa |
Jules Verne |
Daca se doreste afisarea datelor, sistemul se uita în fisierul index si de acolo afiseaza mai întâi inregistrarea de pe pozitia 2 (ce o gaseste în tabelul carti.dbf), apoi înregistrarea 1,4 si în final 3.
Folosirii fisierelor index aduce câteva avantaje : timp redus de obtinere a listelor ordonate, daca se fac actualizari în tabel , fisierul index este actualizat automat , spatiul de memorie consumat este mai mic .
Pentru a lucra cu indecsi, trebuie parcurse mai multe etape de lucru :
a. se creaza fisierul index asociat tabelei, precizând criteriile de ordonare dorite .
b. deschiderea (activarea) indexului respectiv , adica activarea criteriului de ordonare .
c. accesarea datelor din tabele ( conform ordinii din index).
d. închiderea indexului ( eventual închiderea tabelei de care este legat indexul).
Crearea indexului se poate face la crearea tabelelui , cu ajutorul constructorului de tabele sau cu ajutorul unor comenzi dedicate . De asemenea , se poate reveni asupra structurii cu ajutorul comenzuii MODIFY si se pot adauga indecsi.
Observatie :
Sa consideram tabelul anterior carti.dbf, având urmatoarea forma :
CodC |
Titlu |
Autor |
NrPag |
DataI |
C(5) |
C(20) |
C(30) |
N(6) |
D |
Ion |
Liviu. R. | |||
Amintiri din copilarie |
Ion Creanga | |||
Morometii |
Marin Preda | |||
Insula misterioasa |
Jules Verne |
aca dorim sa vedem continutul tabelului ordonat , dupa mai multe criterii , va trebui sa cream mai multe fisiere index. De exemplu, daca dorim o lista alfabetica dupa Titlu , va trebui creat un index ( am vazut în cursul 1 de Visual Foxpro cum se face acest lucru), a carui expresie de indexare sa contina coloana Titlu. În schimb, daca dorim sa avem liste ordonate alfabetic dupa autor si daca un autor are mai multe carti , acestea sa fie afisate dupa Titlu, indexul va contine expresia Autor+Titlu. O alta situatie , putin mai complicata apare daca se doreste obtinerea unor criterii de ordonare care depind de coloane ale caror tipuri de date sunt diferite . De exemplu, daca se doreste o lista dupa data intrarii iar daca sunt carti intrate în aceeasi data sa apara alfabetic dupa titlu, expresia de indexare nu va fi doar DataI+Titlu ( se va semnala eroare). Conform regulilor din Foxpro , o expresie contine membrii de acelasi tip, prin urmare va trebui convertit unul din câmpuri la tipul celuilalt. Cel mai simplu este sa se converteasca totul la tipul sir de caractere. Pentru exemplul anterior, ar trebui folosita urmatoarea expresei de indexare Dtos(DataI)+Titlu (Dtos este o functie care converteste "logic" o data calendaristica la tipul sir de caractere ). Un alt exemplu similar, ar fi acela când se combina coloane ce au valori numerice cu coloane ce au valori sir de caractere , cum ar fi o lista ordonata dupa numarul de pagini si , în caz ca sunt mai multe carti cu acelasi numar de pagina , alfabetic . Pentru un astfel de caz , se va folosi expresia Str(NrPag)+Titlu.
Activarea indexului dorit (pot fi mai multe criterii de ordonare ) se poate face cu ajutorul comenzii SET ORDER TO numeindex [IN tabela]. Exista o functie numita ORDER(tabela) , care poate spune care este indexul activ .
Dupa deschiderea indexului, orice operatie de afisare, modificare sau stergere se fac via index. Mai mult, orice modificare a datelor în tabela cu date are ca efect modificarea datelor în fisierul index ( lucru neplacut în cazul ordonarii fizice a tabelelor ).
Un alt avantaj al ordonarii logice , este legat de cautarea mai rapida a datelor cu ajutorul unei alte comenzi numite SEEK. Aceasta se foloseste sub forma SEEK expresie , unde expresie este o valoare legata de cheia de cautare .
Exemplu : USE Angajati
SET ORDER TO NUME
SEEK 'POPESCU'
IF FOUND()
DISPLAY
ENDIF
9.Copierea structurii unui tabel în alt tabel . Adaugarea de date din alte tabele.
O alta comanda , mostenita din vechiul Foxpro , este cea de multiplicare a structurii unei tabel într-un alt tabel. Trebuie sa precizam ca Visual Foxpro, ofera si alte solutii mai performante legate de acest subiect ( care se vor discuta mai târziu).
Copierea structurii se face cu comanda COPY STRUCTURE, cu sintaxa :
COPY STRUCTURE to NouTabel FIELDS lista câmpuri ]
Exemplu : USE Angajati
COPY STRU TO TEMP
De asemenea , se pot adauga înregistrari dintr-un tabel în alt tabel , folosind comanda APPEND FROM cu sintaxa :
APPEND FROM Tabel FOR conditie] FIELDS lista câmpuri
Exemplu :a. USE Angajati
COPY STRU TO TEMP
USE TEMP
APPEND FROM ANGAJATI
BROWSE
b. USE Angajati
COPY STRU TO TEMP FIELDS Nume,Prenume,Salariu
USE TEMP
APPEND FROM ANGAJATI FIELDS Nume,Prenume,Salariu
BROWSE
c. USE Candidati
COPY STRU TO Admisi FIELDS Nume,Prenume,Ob1,Ob2,Medie
COPY STRU TO Respinsi FIELDS Nume,Prenume,Ob1,Ob2,Medie
USE Admisi
APPEND FROM Candidati FIELDS Nume,Prenume,Ob1,Ob2,Medie
FOR Ob1>=5 .AND. Ob2>=5
USE Respinsi
APPEND FROM Candidati FIELDS Nume,Prenume,Ob1,Ob2,Medie
FOR Ob1<5 .OR. Ob2<5
BROWSE
|