Sunteți pe pagina 1din 6

Comenzi şi funcţii

1. Analizaţi funcţiile:
Obs. Referirea la o dată calendaristică pe formatul implicit se realizează prin ({^an-luna-zi})
SET DATE TO DMY dacă se doreşte utilizarea datei în formatul zi/luna/an
DATE() – data curentă
DAY(dată) – ziua (numeric) datei calendaristice
DMY(dată) – format specific datei, caractere (zi, luna, an)
DOW(dată) – nr. zilei din săptămână (duminica e prima zi)
MDY(dată) – format specific datei, caractere (luna zi, an)
MONTH(dată) – luna numeric
YEAR(dată) –anul
TIME() – ora (ora, min., sec.)
DATETIME() – data şi ora
CDOW(dată) – numele zilei din săptămână
CMONTH (dată) – numele lunii corespunzătoare
GOMONTH(dată, n) – data de peste n de luni
CTOD(şir) – conversie şir de caractere la dată
DTOC(dată) – conversie dată de caractere la şir
Exemple: DAY(CTOD(“05/05/91”))
CDOW(CTOD(“01/02/99”))
2. Analizaţi funcţiile:
LEFT (şir,n)- extrage primele n caractere din stânga ale şirului
- left(’informat’,3)
RIGHT(şir,n)- extrage primele n caractere din dreapta
- right(’informat’,3)
REPLICATE (şir,n) – scrie şirul de n ori
- replicate (’max’,4)
STR (număr) – transformă numere în şiruri de caractere
- str(123)
VAL (şir) – transformă şirul în număr (cu format caracteristic)
- val(’1.23e4’)
PI() – numărul 
RAND() – număr aleatoriu intre 0 si 1
SIGN(număr) – funcţia signum
- sign(-10); sign(10); sign(0)
SQRT(număr) – radical de ordin 2
- sqrt(16)
ASC (caracter) – codul ASCII
- asc(’A’)
CHR(număr) – inversa funcţiei ASC
- chr(65)
LEN(şir) – lungimea şirului
- len(‘luni’)
LTRIM(şir) – scoate spatiile din stânga
- ”luni”+ ltrim(‘ marti ’) +”miercuri”
RTRIM(şir) – scoate spatiile din dreapta la fel ca
- rtrim(‘luni ’)+ ”marti”
ALLTRIM(şir) – scoate spatiile de la stânga şi dreapta
- ”luni”+alltrim(‘ marti ’)+”miercuri”
UPPER(şir) – transformă în majuscule
- UPPER(”luni”)
LOWER(şir) – transformă în minuscule
- LOWER(”LUNI”)
ISLOWER(şir) – returnează T daca primul caracter este minusculă
- ISLOWER(‘acasa’); ISLOWER( ’Acasa’); ISLOWER( ‘aCasa’);
ISUPPER(şir) – returnează T daca primul caracter este majusculă
- ISUPPER(”luni”); ISUPPER(”Luni”))
ISALPHA(şir) – returnează T daca primul caracter este o litera
- isalpha(’1sir’)
ISBLANK(câmp) – returnează T daca pe câmpul respectiv nu este introdusă o valoare
- isblank(numes)
3. Suma salariilor doar dacă numele celui de-al patrulea salariat începe cu majusculă.
IIF(condiţie, expresie1, expresie2) - dacă valoarea condiţiei este .T. întoarce expresie1, altfel expresie2.
Obs. SET TALK OFF – inhibă afişarea rezultatelor în fereastra principală
4. Pentru toţi salariaţii care nu câştigă comision şi al căror nume începe cu “DO”, înlocuiţi salariul prin salariu
* nr. aleator din intervalul (0, 1).
5. Pentru salariaţii care nu sunt născuţi în 1950, adăugaţi în câmpul info cuvântul “anulat”.
Obs. Conţinutul coloanei de tip memo este afişat dacă aceasta este specificată explicit în lista de câmpuri
(DISPLAY info ALL)
Pentru a putea adăuga şi nu înlocui informaţiile din câmpul memo se poate utiliza comanda
REPLACE ADDITIVE.
REPLACE câmp WITH şir ADDITIVE FOR condiţie
REPLACE câmp WITH câmp+şir FOR condiţie
6. Ce efect are BROWSE LOCK 3? Dar BROWSE FREEZE numes?
BROWSE LOCK număr - specifică numărul de câmpuri începând din partea stângă care vor fi afişate în
partiţia stângă.
BROWSE FREEZE câmp - permite modificări doar în acest câmp; celelalte câmpuri sunt afişate, dar nu pot
fi editate.
7. Deschideţi o fereastra BROWSE asupra tabelei SAL care să afişeze codul salariatului fără a permite
modificarea lui, pe o singura coloana numele şi jobul salariatului (câmp calculat), managerul (capul de tabel
pentru această coloană să fie Manager) şi salariul asupra căruia să se facă verificarea că nu este mai mare de
1000 . Dacă salariul este invalid să se trimită un mesaj de eroare.
BROWSE FIELDS câmp :R, ; && read -only
câmp_calculat=expresie_câmpuri, ;
câmp :H= titlu_coloană, ;
câmp:V = expresie [:F] [:E = mesaj]
Obs. - Dacă expresie este adevărată atunci data introdusă este considerată corectă şi cursorul poate fi
mutat pe alt câmp. Dacă expresie este falsă atunci data introdusă este considerată incorectă şi cursorul
rămâne pe acel câmp.
- Opţiunea de verificare nu poate fi executată pentru câmpuri de tip memo.
- În mod implicit, expresie este evaluată atunci când câmpul este modificat. Pentru a realiza
verificarea şi pentru valorile deja existente în tabel se include opţiunea :F.
- Pentru a afişa un mesaj de eroare se include opţiunea :E. Mesajul de eroare dat de utilizator
înlocuieşte mesajul sistem de eroare. Mesajul utilizatorului apare doar dacă SET NOTIFY este setat
ON, iar atenţionarea sonoră dacă SET BELL este ON.
8. Adăugaţi în regim BROWSE un câmpul calculat salariu mărit, care reprezintă valoarea salariului mărită cu
20%.
9. Analizaţi comanda SORT.
SORT TO tabel
ON câmp1 [/A | /D] [/C]
[, câmp2 [/A | /D] [/C] ...]
[ASCENDING | DESCENDING]
[Scope] [FOR expresie1] [WHILE expresie2]
[FIELDS listă_câmpuri
| FIELDS LIKE var1
| FIELDS EXCEPT var2]
[NOOPTIMIZE]
tabel – numele noului tabel care va conţine datele sortate (nu este necesară specificarea extensiei)
ON câmp1 – câmpul pe care se bazează sortarea; în mod implicit sortarea este ascendentă; câmpurile de tip
memo sau general nu pot fi sortate
În tabelul sortat pot fi incluse câmpuri adiţionale după care să se realizeze sortarea: câmp2, …. Dacă
există mai multe înregistrări pentru care câmpul-criteriu are aceeaşi valoare, ordinea lor poate să nu fie
importantă, dar, de multe ori, se doreşte ca înregistrările cu aceeaşi valoare a câmpului criteriu sa fie
ordonate la rândul lor după alt criteriu.
[/A | /D] [/C] – pentru fiecare câmp inclus în noul tabel se poate specifica ordinea de sortare, ascendentă
(/A) sau descendentă (/D); în mod implicit, sortarea pentru câmpurile de tip caracter este case
sensitive; opţiunea /C poate fi combinată cu opţiunile /A şi /D (de ex. /AC sau /DC).
ASCENDING – specifică ordinea de sortare ascendentă pentru toate câmpurile care nu sunt urmate de
opţiunea /D.
DESCENDING – specifică ordinea de sortare descendentă pentru toate câmpurile care nu sunt urmate de
opţiunea /A.
Dacă este se omit opţiunile ASCENDING sau DESCENDING, în mod implicit ordinea de sortare este
ascendentă.
Scope – specifică rangul înregistrărilor ce vor fi sortate şi poate fi una din următoarele opţiuni:
ALL – acţiunea afectează toate înregistrările
NEXT număr_de înregistrări – acţiunea afectează un număr specificat de înregistrări, începând de
la înregistrarea curentă
RECORD numărul_înregistrării – acţiunea afectează doar înregistrarea specificată
REST – acţiunea afectează înregistrările începând cu înregistrarea curentă până la ultima
înregistrare din tabel
În mod implicit este ALL.
FOR expreisie1 – sunt incluse în sortare doar înregistrările pentru care expreisie1 este evaluată adevărată.
WHILE expresie2 – sunt incluse în sortare înregistrări atâta timp cât expreisie2 este evaluată adevărată.
FIELDS listă_câmpuri – specifică câmpurile din tabelul de bază care vor fi incluse în tabelul sortat; dacă
această clauză este omisă, atunci sunt incluse toate câmpurile.
FIELDS LIKE var1 – în cazul în care câmpurile din tabelul de bază se potrivesc cu var1 atunci vor fi
incluse în tabelul sortat.
FIELDS EXCEPT var2 – toate câmpurile cu excepţia celor care se potrivesc cu var2 sunt incluse în tabelul
sortat.
Clauza LIKE poate fi combinată cu EXCEPT (FIELDS LIKE var1, EXCEPT var2).
NOOPTIMIZE – dezactivează operaţiile de optimizare ale sistemului pentru SORT.
10. Sortaţi tabelul SAL după salariu în ordine crescătoare.
11. Sortaţi tabelul SAL în ordine descrescătoare a numelui, incluzând
- salariaţii care au salariul este mai mare decât 1000;
- câmpurile codsal, numes, salariu şi job (varianta 1) / câmpurile care încep cu litera C (LIKE C*) (varianta
2) ;
Sortarea se va aplica primelor 10 înregistrări din tabelul SAL.
12. Sortaţi tabelul SAL după salariu în ordine crescătoare şi în cadrul salariului descrescător codul
departamentului.
13. Să se analizeze comanda INDEX.
INDEX ON expresie TO nume_indexIDX | TAG nume_tag [OF nume_indexCDX]
[FOR condiţie]
[ASCENDING | DESCENDING]
[UNIQUE | CANDIDATE]
[ADDITIVE]
expresie – specifică un câmp sau o listă de câmpuri din tabelul curent (cheie index), pe baza cărora se va
realiza indexarea; câmpurile de tip memo nu pot fi incluse singure într-o expresie index; acestea
trebuie combinate cu alte expresii de tip şir de caractere
TO nume_indexIDX – creează un index simplu (cu extensie IDX)
TAG nume_tag [OF nume_indexCDX] – creează un index compus (un singur fişier de tip index care constă
din mai multe intrări index, tag-uri); extensia unui fişier index compus este CDX
Există două tipuri de indecşi compuşi:
- structurali (dacă nu este inclusă opţiunea OF nume_indexCDX); aceştia au acelaşi nume cu
tabelul de bază şi sunt deschişi în mod automat atunci când este deschis tabelul;
- nestructurali (dacă este inclusă opţiunea OF nume_indexCDX); aceştia trebuie deschişi
explicit, utilizând comanda SET INDEX sau clauza INDEX a comenzii USE
FOR condiţie – specifică o condiţie prin care doar înregistrările care o verifică vor fi disponibile pentru
afişare sau accesare
ASCENDING – specifică ordinea ascendentă pentru un fişier CDX
DESCENDING – specifică ordinea descendentă pentru un fişier CDX
Pentru indecşii simpli (IDX) nu se poate include DESCENDING. Ordinea descendentă se poate
specifica prin comenzile SET INDEX sau SET ORDER.
Doar un fişier index (index principal) sau un singur tag controlează ordinea de afişare a
înregistrărilor.
UNIQUE – este utilizat pentru a preveni afişarea sau accesarea înregistrărilor duplicat; o comandă cu efect
asemănător este SET UNIQUE ON
CANDIDATE – creează un tag index structural candidat; opţiunea CANDIDATE poate fi inclusă doar la
crearea indexului; previne utilizarea valorilor duplicat şi de aceea este un candidat pentru cheia
primară
ADDITIVE – menţine deschise toate fişierele de tip index create asupra tabelului de bază; dacă această
clauză este omisă, atunci crearea unui nou index determină închiderea tuturor fişierelor index
deschise anterior, cu excepţia indecşilor compuşi structurali

Obs. Un fişier index este o sortare virtuală a unui tabel, în timp ce înregistrările acestuia rămân
neschimbate.
Exemplu: Fişier indexat dupa nume:
Fişier sortat după nume:
Fişier iniţial: 3 1000
1 1000
1 3000 2 2000
2 2000
2 2000 1 3000
3 3000
3 1000

Obs. Comanda DISPLAY STATUS afişează informaţii despre toate fişierele index deschise.
Fişierul index sau tag-ul principal pot fi desemnaţi prin clauza INDEX a comenzii USE sau prin
comenzile SET INDEX şi SET ORDER.
USE tabel
[INDEX listă_indecşi | ?
[ORDER [nr_index| index_idx | [TAG] nume_tag [OF index_cdx]
[ASCENDING | DESCENDING]]]]
? - se deschide o fereastră de dialog şi se aleg indecşii
nr_index – este utilizat doar indexul cu numărul de ordine nr_index în listă_indecşi
SET INDEX TO [listă_indecşi | ? ]
[ORDER nr_index | index_idx
| [TAG] nume_tag [OF index_cdx] [ASCENDING | DESCENDING]]
[ADDITIVE]
SET ORDER TO
[nr_index | index_idx | [TAG] nume_tag [OF index_cdx]
[IN nr_arie_lucru | alias_tabel]
[ASCENDING | DESCENDING]]
14. Să se listeze salariaţii în ordine crescătoare a salariilor, utilizând un index simplu asupra tabelului.
use sal
index on salariu to isalariu.idx
browse
15. Indexaţi tabelul SAL în mod unic după numărul departamentului.
use sal
index on coddep unique to icoddep
browse
16. Indexaţi alfabetic salariaţii care s-au născut în 1950.
index on numes for year(data)=1950 to inumes
browse
17. Deschideţi cei 3 indecşi creaţi anterior. Determinaţi ca inumes.idx să devină indexul activ. Observaţi
indecşii deschişi şi pe cel activ în fereastra Data Session, efectuând click pe butonul Properties.
- implicit primul index din listă este activ
SET INDEX TO isalariu, icoddep, inumes
- indexul inumes devine activ
SET ORDER TO inumes
sau
SET INDEX TO inumes, icoddep, isalariu
sau
SET INDEX TO icoddep, inumes, isalariu ORDER inumes
18. Închideţi toţi indecşii. Modificaţi salariul unui angajat astfel încât să devină egal cu media tuturor salariilor.
Redeschideţi indexul după salariu. Cum este ordonat conţinutul tabelului?
CLOSE INDEXES, REINDEX.
close indexes
browse
calculate avg(salariu) to media
replace salariu with media for codsal=7521
browse
set index to isalariu
browse
reindex
browse

19. Să se listeze salariaţii (nume, salariu, job) în ordine alfabetică a jobului şi, apoi, în ordine descrescătoare a
salariilor.
- se vor utiliza indecşi simpli
close all
use sal
index on job to job.idx
index on salariu to salariu.idx
use sal index job.idx
browse
use sal index job.idx, salariu.idx order 2 descending
browse
use sal index job.idx, salariu.idx order 1 descending
browse

- se vor utiliza indecşi compuşi structurali


close all
use sal
index on job tag Job
index on salariu tag Salariu descending
use sal order tag Job
list numes, salariu, job
use sal order tag Salariu
list numes, salariu, job
- se vor utiliza indecşi compuşi nestructurali
close all
use sal
index on job tag Job of job_salariu.cdx
index on salariu tag Salariu of job_salariu.cdx descending additive
use sal index job_salariu.cdx
set order to tag Job
list numes, salariu, job
set order to tag Salariu
list numes, salariu, job
close all

20. Să se listeze salariaţii (nume, salariu, job) în ordine alfabetică a jobului, iar salariaţii care deţin acelaşi job
să apară în ordine descrescătoare a salariilor.

use sal
calculate max(salariu) to m
index on job + str(m-salariu) to ijobsal
browse

21. Creaţi un tabel care să conţină sumele salariilor şi ale comisioanelor câştigate de salariaţi, grupaţi pe
departamente.
TOTAL TO nume_tabel
ON nume_câmp
[FIELDS listă_câmpuri]
[Scope]
[FOR expresie1]
[WHILE expresie2]
nume_tabel specifică numele tabelului care va menţine rezultatul
nume_câmp specifică numele câmpului pe care se face gruparea; tabelul trebuie sortat sau indexat în
prealabil, după câmpul de grupare.
listă_câmpuri specifică lista de câmpuri pe care se va face totalul
close all
use sal
index on coddep to sal_coddep.idx
use sal index sal_coddep.idx
total to saltotal;
on coddep;
fields salariu,comision
use saltotal
list coddep, salariu, comision
close all

S-ar putea să vă placă și