Foxpro
Cautarea rapida si pozitionare in baza de dateUna din functiile importante ale unui SGBD este accesarea rapida a bazei de date. Cautarea si pozitionarea pe un anumit articol se poate face prin mai multe comenzi si functii. Reamintim comanda LOCATE (cauta secvential un articol care verifica o conditie indicata in clauza FOR pe domeniul precizat), CONTINUE (reia cautarea in continuarea fisierului, pozitionandu-se pe urmatorul articol care verifica conditia), functia LOOKUP (cauta si pozitioneaza). Alte posibilitati de cautare rapida sunt dependente de starea de indexare a bazei de date. 1. Comanda FIND permite cautarea intr-o baza de date indexata a primului articol care are cheia de indexare egala cu expresia de cautare:
Cautarea se opreste la primul articol gasit, sau la sfarsitul fisierului. <exp-sir> din comanda este incadrata obligatoriu de delimitatorii de sir, daca expresia de cautare incepe cu spatii. 2. Comanda SEEK permite cautarea intr-o baza de date indexata a primului articol care are aceeasi valoare a cheii de indexare cu a expresiei din comanda:
Comanda SEEK se executa intocmai ca si comanda FIND, numai ca <exp> de cautare nu mai este neaparat un sir ci poate fi orice variabila, constanta sau expresie in general. Cautarea se opreste la primul articol din baza de date care are cheia de indexare egala cu valoarea expresiei – daca o astfel de inregistrare exista – sau la sfarsitul fisierului. Exemplu: CLOSE ALL USE mijloacef INDEX mijloacef ORDER tcod SEEK “C1 “ ? FOUND ( ) . T . ? EOF ( ) . F . ? RECNO ( ) ? RECNO ( 0 ) DISPLAY USE Functii de test asupra succesului sau insuccesului cautarii sunt. 1) functia FOUND() (intoarce .T. daca articolul s-a gasit) 2) functia EOF() (intoarce .T. daca articolul nu s-a gasit) 3. Functii de cautare: SEEK (<exp>[,<nr-zona>/<alias>]) cauta prima inregistrare pentru care cheia de indexare este egala cu <exp>. Daca se gaseste functia, intoarce valoarea .T., iar indicatorul de inregistrari se va pozitiona pe inregistrarea gasita. Daca nu se gaseste articolul dorit, functia va intoarce valoarea .F., iar indicatorul de inregistrare se va afla dupa ultimul articol. Functia SEEK inlocuieste secventa: - .SEEK<exp> - ?.FOUND() Calcule statistice cu datele din bazele de dateScopul principal pentru care sunt create bazele de date il reprezinta obtinerea intr-un timp cat mai scurt, a unor informatii cu privire la datele continute in bazele de date. Aceste informatii pot fi de natura diferita, mai detaliate, sau mai sintetizate, sub forma de liste, tabele, sau simple valori, informatii statistice, totalizatoare. Comanda COUNT numara inregistrarile din domeniul specificat prin < domeniu >, FOR si WHILE, depunand rezultatul in variabila < var >, care va fi creata in cazul cand nu exista anterior executiei comenzii.
Exemplu: numararea mijloacelor fixe a caror valoare depaseste 10000000 se face prin urmatoarea secventa de comenzi: CLOSE ALL USE mijloacef COUNT FOR valoare > 10000000 TO nrmijloacef ? “ In vaza de date avem “ , nrmijloacef, “ mijloace fixe “ ? “ cu valoare mai mare decat 10000000 “ In baza de date avem 3 mijloace fixe
Cu valoare mai mare decat 10000000 USE Comanda numara articolele din baza de date activa si, daca este prezenta clauza TO <var>, depune rezultatul in variabila specificata. Clauzele <domeniu>, FOR, WHILE limiteaza actiunea comenzii. Observatie: Afisarea pe ecran a rezultatelor diferitelor comenzi dBASE (FoxPro) depinde de comutatorul SET TALK ON/OFF. Pentru valoarea OFF se inhiba afisarea rezultatelor. Un alt tip de calcul ce se poate efectua asupra unei baze de date este sumarea valorii unor campuri numerice, din inregistrarile selectate. Comanda folosita este SUM si are sintaxa:
Comanda permite insumarea valorilor fiecarei expresii in parte pentru toate articolelel bazei de date active din domeniul precizat in <domeniu>, care verifica conditia din FOR si/sau conditia din clauza WHILE. Clauza <lista-exp> contine expresii cu campuri ale bazei de date active. Rezultatul poate fi afisat direct pe ecran (! atentie la starea comenzii SET TALK!), depus intr-o lista de variabile sau intr-un tablou (clauza TO ARRAY). Implicit se vor insuma toate campurile numerice ale bazei de date si rezultatele se vor afisa pe ecran. Exemplu: avand baza de date mijloacef.dbf, sa se calculeze procentul valoric al amortizarii relativ la valoarea totala a mijloacelor fixe: USE mijloacef SUM amortizare TO val_am SUM VALOARE to val_tot ? “ S-a amortizat “ , val_am / val_tot * 100, “ % “ ? “ din valoarea totala a mijloacelor fixe “ S-a amortizat 42.33 % din valoarea totala a mijloacelor fixe USE O comanda asemanatoare cu comanda SUM este AVERAGE
Comanda permite calculul mediei aritmetice a valorilor expresiilor din <lista-exp>, pentru articolele din baza de date activa care se incadreaza in domeniul precizat si verifica conditiile din FOR si WHILE. Clauza <lista-expr> contine expresii avand campuri ale bazei de date. Parametrul TO <lista-var> contine lista de variabile in care se depun valorile mediilor calculate. Rezultatele pot fi depuse si intr-un tablou (clauza TO ARRAY). Daca lipsesc toate clauzele, se va face media tuturor valorilor campurilor numerice, iar rezultatul se va afisa pe ecran (daca SET TALK este ON). Exemplu: sa se calculeze valoarea medie a unui automobil folosind datele din baza de date mijloacef. USE MIJLOACEF AVERAGE VALOARE FOR UPPER ( SUBSTR ( cod, 1 ,1 )) = “ A “ TO medie ? “ Valoarea medie a unui automobil: “ , medie Valoarea medie a unui automobil: 5432000 USE Acelasi lucru se poate realiza si folosind comenzile SUM si COUNT, cu ajutorul carora se poate simula comanda AVERAGE: USE MIJLOACEF SUM VALOARE FOR UPPER ( SUBSTR ( cod, 1 ,1 )) = “ A “ TO val_tot COUNT FOR UPPER ( SUBSTR ( cod, 1 ,1 )) = “ A “ TO nr_auto medie = val_tot / nr_auto ? “ Valoarea medie a unui automobil: “ , medie Valoarea medie a unui automobil: 5432000 USE Pentru o serie de calcule financiare si statistice asupra campurilor bazei de date se foloseste comanda CALCULATE, cu urmatoarea sintaxa:
Comanda poate calcula valorile mai multor expresii, pe care le depune intr-o lista de variabile sau intr-un tablou. Diferenta fata de comenzile anterioare consta in continutul expresiilor din <lista-exp>. In alcatuirea unei expresii pot intra urmatoarele functii: 1. AVG(<expn>): permite calculul mediei aritmetice a expresiei <expn> ce poate contine campuri numerile ale bazei de date active; 2. CNT(): permite numararea articolelor selectate din baza de date activa; 3. SUM(<expn>): permite insumarea valorilor expresiei <expn> ce contine campuri numerice a bazei de date; 4. MAX(<exp>): extrage cea mai mare valoare a expresiei <expn> calculata pentru fiecare articol selectat al bazei de date active; 5. MIN(<exp>): extrage cea mai mica valoare a expresiei calculata pentru fiecare articol selectat al bazei de date active. Exemplu: sa presupunem ca avem o baza de date in care am stocat rezultatele unei experiente, valori numerice. Vom lua spre exemplu urmatoarea serie de valori: 13, 47, 35, 9, 89, 123, 75, depozitate in campul numar al bazei de date NUMERE.DBF USE numere CALCULATE avg ( numar ) TO media ? “ Media numerelor este : “ , media CALCULATE cnt ( ) TO nr_inreg ? “ Numarul de valori este : “ , nr_inreg CALCULATE max ( numar ) , min ( numar ) , sum ( numar ) ; TO maxim, minim, suma ? “ Valoarea maxima este : “ , maxim ? “ Valoarea minima este : “ , minim ? “ Suma numerelor : “ , suma CALCULATE npv ( 0.1, numar, 100 ) TO val_p ? “ Valoarea prezenta este : “ , val_p CALCULATE std ( numar ) TO dev_std, ? “ Deviatia standard este : “ , dev_std ? “ Abaterea patratica medie este “ , ab_patr USE Un alt tip de rapoarte obtinute dintr-o baza de date este reprezentat de listele totalizatoare. Comnda care realizeaza acest total este urmatoarea:
TOTAL creaza o noua baza de date numita <fis.dbf> cu aceeasi structura ca a bazei de date active. Baza de date activa este parcursa in intregime si pentru fiecare grup de articole care au aceeasi valoare a expresiei <cheie>, se adauga in baza de date <fis.dbf> cate un articol cu cheia unica a grupului si avand in campurile numerice specificate in clauza FIELDS (sau toate campurile numerice daca lipseste clauza FIELDS) valoarea insumata a valorilor fiecarui articol din grup in campul respectiv. Exemplu: pentru a afla suma de bani platita de fiecare persoana din baza de date PLATI .DBF, se foloseste programul: CLOSE ALL USE plati INDEX ON platitor TAG platitor ORDER 1 TOTAL TO totplati ON platitor SELECT 2 USE totplati LIST SELECT 1 CLOSE ALL Pentru cele trei inregistrari din baza de date, se va genera in baza de date totalizatoare TOTPLATI.DBF inregistrarea care va contine suma totalizatoare.
|