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):
Adauga o
īnregistrare noua
Marcheaza
pentru stergere o īnregistrare
sterge
fizic īnregistrarea
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
|