Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Utilizarea operatorilor, functiilor si a expresiilor

baze de date



+ Font mai mare | - Font mai mic



Utilizarea operatorilor, functiilor si a expresiilor

In aceasta lucrare de laborator sunt abordate urmatoarele probleme:



Ce sunt operatorii, funtiile si expresiile si cum pot fi utilizate;

Tipuri de operatori;

Tipuri de functii;

Modalitatile de creare a unor expresii;

Operatori speciali si expresii.

Operatorii, functiile si expresiile sunt elemente fundamentale pentru operatiile Acces. Aceste operatii includ introducerea criteriilor in interogari, crearea campurilor calculate in forme si crearea controalelor totalizatoare in rapoarte.

Operatori

Operatorii permit adunarea valorilor numerice, compararea acestora, concatenarea sirurilor si crearea unor expresii relationale complexe. Ei sunt utilizati pentru a informa Access ca va fi realizata o operatie specifica pe baza a unuia sau a mai multor item-uri. De asemenea, MSAccess utilizeaza o serie de operatori speciali pentru identificarea obiectelor. Operatorii pot fi de urmatoarele tipuri:

Operatori aritmetici;

Operatori relationali;

Operatori pe siruri;

Operatori logici;

Operatori combinati.

Operatorii sunt utilizati de fiecare data cind sunt create ecuatii. In Access ei sunt utilizati pentru a specifica reguli de validare a datelor, pentru a crea cimpuri calculate sau pentru a specifica criterii in interogari. Citeva exemple de operatori intalniti sunt: "=", "&", "And", "Like", "

Operatori aritmetici

Sunt in numar de 7 si sunt: * (inmultirea), + (adunarea), - (scaderea), / (impartirea), (impartirea intreaga), ^ (ridicarea la putere) si Mod (Modulo). Prin definitie, operatorii aritmetici opereaza pe valori numerice. Acestea pot fi variabile de memorie sau continutul unui camp. In plus, valorile numerice pot fi folosite individual sau in combinatie, pentru a crea expresii complexe.

Operatorul de inmultire - un exemplu simplu de utilizare a acestui operator este in calcularea unei facturi. Pentru a obtine o valoare este necesar sa se inmulteasca numarul de articole cu valoarea pretului unitar: [Pret]*[Cantitate]. De remarcat faptul ca numele campurilor sunt incluse in paranteze patrate, aceasta fiicnd notatia standard in utilizarea numelor de campuri in expresii.

Operatorul de adunare - daca se doreste adunarea a doua valori numerice intr-un camp, acest lucru se face prin: [Valoare]+[Valoare_TVA]. Aceasta formula aduna cei doi operanzi si plaseaza rezultatul in obiectul care contine formula. Pe langa operatia de adunare, operatorul de adunare poate fi folosit si pentru concatenarea a doua siruri de caractere. De exemplu, pentru a concatena numele si prenumele unei personae se va utiliza [Nume]+[Prenume]. De remarcat ca aceeasi operatie de concatenare a sirurilor se poate realiza si cu ajutorul operatorului "&".

Operatorul de scadere - un exemplu de utilizare este cel in care se calculeaza valoarea totala a unei comenzi: [Valoare]-([Valoare]*[Discount]). Parantezele joaca un rol important in lucrul cu operatorii.

Operatorul de impartire - este utilizat pentru impartirea a doua valori numerice, plasand rezultatul in locatia dorita;

Impartirea intreaga- in acest caz, valorile de impartit se rotunjesc la intregi, se divid cei doi intregi si se rotunjeste rezultatul. De exemplu:

Impartire normala Impartire intreaga

100/6=16.667 1006=16

100.9/6.6=15.277 100.96.6=14

Access-ul nu dispune de o functie specifica de rotunjire. Acest operator poate fi folosit pentru rotunjirea oricarui numar. De exemplu, . Dupa cum se poate observa, numerele avand x.5 vor fi rotunjite la valoarea intreaga inferioara, iar cele mai mari decat valoarea mentionata se vor rotunji la valoarea intreaga superioara. Acesta inseamna ca 6.5 devine 6, iar 6.6 devine 7.

Operatorul exponential - permite ridicarea la putere a unui numar;

Operatorul Mod- operatorul returneaza restul impartirii a doua valori numerice intregi. Exemple:

1 Mod 4 = 1 3 Mod 22 = 3

-3 Mod -22 = -3 -22 Mod -45 = 22

-22 Mod +3 = -1 +22 Mod -3 = +1

Se poate observa ca semnul primului operand determina semnul raspunsului. Atunci cand operatorul este aplicat la doi operanzi cu semne diferite, Access preia semnul primului operand, converteste ambele numere la pozitiv, efectueaza operatia Modulo si atribuie semnul preluat rezultatului. Ca si impartirea intreaga, acest operator va rotunji operanzii inaintea realizarii operatiei Modulo.

Operatorii relationali

Sunt in numar de sase. Acestia sunt: " (egal), "<> " (diferit), "<" (mai mic), "<=" (mai mic sau egal), ">" (mai mare), ">=" (mai mare sau egal). Acesti operatori returneaza o valoare logica True sau False, sau Null (valoarea este necunoscuta). In fapt, Access returneaza o valoare numerica pentru ecuatiile in care sunt implicati operatorii relationali: -1 pentru True si 0 pentru False

Daca in una din partile implicate in relatie apare Null, atunci rezultatul va fi intotdeauna Null

Exemple de utilizare a operatorilor relationali:

[DataNasterii]=Date()

[TipAnimal]="Pisica"

[TipAnimal]<>"Pisica"

[Greutate]<=45

[Varsta]>3

[Greutate]>=45

[Lungime]<100

Operatori pe siruri

MSAccess dispune de doi operatori pe siruri:

& concatenare

Like similar cu.

Operatorul de concatenare uneste doua sau mai multe obiecte intr-un sir resultant. Acest operator lucreaza in acelasi mod cu operatorul de adunare; totusi, spre deosebire de acesta, operatorul & forteaza intotdeauna concatenarea a doua siruri. De exemplu

[Nume] & [Prenume]

va avea ca rezultat un singur sir. Se poate observa ca spatiile nu sunt adaugate in mod automat, ceea ce inseamna ca operatia de concatenare va trebui scrisa:

[Nume] & " " & [Prenume]

Operatorul de concatenare poate concatena si siruri cu obiecte de tip data sau valoare numerica. Utilizarea acestui operator elimina necesitatea utilizarii unor functii speciale de conversie a datei sau a valorilor numerice la siruri. Sa presupunem ca se dispune de un camp numeric, reprezentand numarul si de un sir de caractere, ce reprezinta strada si se doreste construirea unei expresii continand valorile ambelor campuri. Pentru aceasta se va introduce:

[Numar] & " " &[Strada]

Exista posibilitatea ca intr-un raport sa fie necesar sa se introduca numele operatorului si data si timpul cand a fost realizat raportul. Sintaxa de realizare a acestui lucru este:

"Acest raport a fost realizat " & Now() & "by" & [NumeOperator].

Utilizarea oepratorului cu Null: daca ambele obiecte sunt Null, atunci rezultatul va fi Null. Daca umai unul dintreobiecte este Null, atunci MSAccess converteste acest obiect la un sir de caractere de lungime 0 si realizeaza concatenarea.

Operatorul Like

Operatorul Like compara doua siruri pe baza wildcard-urilor. El determina daca unul dintre obiecte se regaseste in celalalt obiect. Rezultatul operatiei este: True False sau Null. Sintaxa de baza a utilizarii acestui obiect este:

expresie object Like pattern object

Astfel, daca expresie obiect se regaseste in pattern obiect, va fi returnat True. Daca unul dintre obiecte este Null, rezultatul va fi Null

Acest operator furnizeaza un instrument puternic si flexibil de comparare a sirurilor. Pattern object poate contine wildcard-uri pentru marirea flexibilitatii. Daca se doreste acest lucru, wildcard-urile trebuie incluse intre paranteze. De exemplu:

"AB*Co" Like "AB[*]C"

Wildcard-urile utilizate sunt:

un singur carater (A-Z, 0-9);

un numar oarecare de caractere;

orice cifra (0-9)

[lista]

orice caracter din lista;

[!lista]

orice caracter care nu face parte din lista.

Exemple de utilizare a operatorului Like:

[Nume] Like "M[ou]*" - va returna True daca numele va incepe cu Mo sau cu Mu;

[Raspuns] Like "[!e-zE-Z] - va returna True daca Raspuns este A, B, C, D, a, b, c, d;

"AB2001" Like "AB####" va returna True (sunt cautate literele AB si orice combinatie de 4 cifre);

"89ABCDEFG"    Like "?9A*F*" va returna True. Este cautat orice caracter in prima pozitie a sirului, 9A in urmatoarele doua pozitii, un F undeva dupa A si orice dupa F.

"ABCD" Like "ab*" va returna False, deoarece MSAccess este Case sensitive (face diferentierea intre caracterele litere mari si mici);

"#10 Marasesti" Like "[#]*Marasesti" va returna True. Primul caracter trebuie sa fie #, iar ultima parte trebuie sa fie Marasesti.

Operatorii logici

MSAccess utilizeaza sase operatori logici, utilizati pentru setarea conditiilor in expresii. La fel ca si operatorii relationali, acesti operatori returneaza fie o valoare logica, fie Null. Acestia sunt: And (Si logic), Or (Sau logic), Eqv (Echivalenta logica), Imp (implicatia logica), Xor (Sau exclusiv) si Not (Negatia).

Operatorul    And (Si logic)

Acest operator este utilizat pentru realizare unei conjuntii intre doua obiecte. Sintaxa generala este:

obiect expresie 1 And obiect expresie 2

Exemplu: [judet]="SV" And [Cod]= "5800" va returna daca ambele conditii sunt adevarate. Reultatele aplicarii oepratorului sunt prezentate in tabelul urmator:

Expresie 1

Expresie 2

Rezultat returnat

True

True

True

True

False

False

True

Null

Null

False

True

False

False

False

False

False

Null

False

Null

True

Null

Null

False

False

Null

Null

Null

Operatorul Or (Sau logic)

Prin utilizarea acestui operator se realizeaza o disjuntie intre doua obiecte. Sintaxa generala este:

obiect expresie 1 Or obiect expresie 2

Exemple:

[TipAnimal]="caine" Or [Culoare]="negru" va returna True daca animalul este un caine sau daca este negru;

[Prenume]="Ion" Or [Prenume]="Vasile"

Expresie 1

Expresie 2

Rezultat returnat

True

True

True

True

False

True

True

Null

True

False

True

True

False

False

False

False

Null

Null

Null

True

True

Null

False

Null

Null

Null

Null

Operatorul Eqv (Echivalenta logica)

Realizeaza o echivalenta logica a doua obiecte. Sintaxa generala este:

obiect expresie 1 Or obiect expresie 2

Exemple:

[Prenume]="Vasile" Eqv [TipAnimal]="pisica" va returna True daca prenumele este Vasile si animalul este pisica.

Daca nici una dintre conditii nu este Null si daca in ambele parti ale echivalentei conditiile sunt aceleasi, atunci operatorul va returna True

Expresie 1

Expresie 2

Rezultat returnat

True

True

True

True

False

False

True

Null

Null

False

True

False

False

False

True

False

Null

Null

Null

True

Null

Null

False

Null

Null

Null

Null

Operatorul Imp (implicatia logica)

Acest operator este utilizat pentru a determina implicatia logica intre doua obiecte.

obiect expresie 1 Imp obiect expresie 2

Exemplu:

[Prenume]="Vasile" Imp [TipAnimal]="pisica"

Acest exemplu va returna:

daca prenumele este Vasile si animalul este o pisica, rezultatul este True

daca prenumele este Null si animalul este o pisica, rezultatul este True

daca prenumele nu este Vasile si animalul este Null, pisica sau orice altceva, reultatul este True

Acesta este unul din cei mai complecsi operatori booleeni. Modalitatea cea mai usoara de intelegere a lui este urmatoarea: daca in partea dreapta a operatorului conditia este True, iar in partea dreapta conditia este False, atunci rezultatul este False (singurul caz in care este False; vezi tabelul de mai jos).

Expresie 1

Expresie 2

Rezultat returnat

True

True

True

True

False

False

True

Null

Null

False

True

True

False

False

True

False

Null

True

Null

True

True

Null

False

Null

Null

Null

Null

Operatorul Xor (Sau exclusiv)

Realizeaza o excludere logica a doua obiecte.

obiect expresie 1 Xor obiect expresie 2

Exemplu:

[Prenume]="Vasile" Xor [TipAnimal]="pisica"

Reultatul va fi True daca prenumele este Vasile si animalul nu este o pisica. De asemenea, operatorul va returna True daca prenumele nu este Vasile si animalul este o pisica.

Expresie 1

Expresie 2

Rezultat returnat

True

True

False

True

False

True

True

Null

Null

False

True

True

False

False

False

False

Null

Null

Null

True

Null

Null

False

Null

Null

Null

Null

Daca oricare dintre expresii este Null, rezultatul returnat va fi Null

Operatorul Not (Negatia)

Este utilizat pentru negarea unui obiect. Returneaza negatul rezultatului logic al unei expresii. Sintaxa generala este:

Not expresie

Exemplu:

Not [Salariu]>=2500000 va returna True daca salariul este mai mic decat 2500000.

Operatori combinati

MSAccess pune la dispozitia utilizatorilor trei operatori combinati:

Between And Range

In Lista

Is Cuvant rezervat

Operatorul Between And

Acest operator poate fi utilizat pentru a determina daca un obiect se gaseste intr-o anumita plaja de valori. Sintaxa generala este:

obiect expresie 1 Between Valoare 1 And Valoare 2

In cazul in care valoarea valoarea obiectului expresie este antre cele doua valori, rezultatul returnat va fi True

Exemplu:

IIF([Valoare] Between 0 And 10000000, "Livreaza in 30 zile", "Livreaza acum")

Obs. Functia IIF este IF imediat.

Operatorul In

Acest operator este utilizat pentru a determina daca un obiect se regaseste intr-o lista de valori. Sintaxa este:

obiect expresie In (valoare1, valoare2, valoare3, )

returnand True daca obiect expresie se regaseste in lista.

Exemplu:

IIF([TipAnimal] In ("Cat", "Dog"), "obisnuit", "neobisnuit")

Operatorul Is

Acest operator este utilizat numai pentru a determina daca un obiect este Null sau nu. Sintaxa generala este:

Is Null

Exemplu:

IIF([Nume] Is Null, "Introduceti numele clientului", "")

Precedenta operatorilor

Atunci cand se lucreaza cu expresii complexe care implica multi operatori, MSAccess trebuie sa determine care va fi ordinea de evaluare a acestora. In acest scop, MSAccess dispune de o ordine predeterminata, denumita precedenta operatorilor. MSAccess va respecta intotdeauna aceasta ordine, exceptie facand cazurile in care sunt folosite parantezele. Precedenta este determinata mai intai pe categorii de operatori. Astfel, ordinea de evaluare a operatorilor este: operatori aritmetici, de comparatie si logici.

In cazul fiecarei dintre aceste categorii, se poate pune in evidenta o ordine de evaluare. Astfel:

Operatori aritmetici: ridicarea la putere, negarea, inmultirea si impartirea, impartirea intreaga, modulo, adunarea si scaderea, concatenarea sirurilor;

Operatori de comparare: equal, not equal, <, >, <=, >=, Like;

Operatori logici: Not, And, Or, Xor, Eqv, Imp.

Functii

Functiile sunt secvente de program care returneaza o valoare (prin definitie). Valoarea returnata poate fi un sir, o valoare logica sau numerica (functie de tipul functiei). MSAccess pune la dispozitie o multitudine de functii utilizabile in tabele, interogari, forme si rapoarte. De aemenea, utilizatorii isi pot defini propriile functii (UFD=User defined function), utilizand Access Basic Language.

Functiile Access realizeaza operatii specializate, si, de cele mai multe ori, sunt parte integrata a MSAccess. Astfel, functiile pot fi folosite pentru (De exemplu): determinarea unei valori implicite intr-un tabel, plasarea datei si a orei intr-un raport, conversia intre diverse tipuri de date, operatii financiare, determinarea starii unui obiect, manipularea sirurilor, afisarea unui camp intr-un anumit format, tratarea unui eveniment, efectuarea de calcule cu diverse tipuri de date (date, siruri, valori numerice etc.).

Unele dintre functii necesita apelarea cu argumente (valori furnizate functiilor la executia acestora). Functiile pot fi usor identificate, dupa denumirea lor fiind plasate paranteze rotunde. Daca functia utilizeaza argumente, acestea vor fi plasate intre paranteze. Dintre functii pot fi specificate:

Functia

Returneaza

Time()   

ora sistemului, in format HH:MM:SS AM/PM;

Now()   

data si ora curente;

DateDiff()   

Diferenta dintre doua date;

Avg()

Media aritmetica a unui obiect;

Rnd()

Un numar aleator;

Trim()

Returneaza sirul obtinut prin eliminarea spatiilor de la inceputul si sfarsitul sirului primit ca argument;

Ucase()

Converteste literele mici in litere mari;

DLookUp()

un camp, pe baza baleierii altui camp;

Format()

Expresie, cu formatul specificat de utilizator;

Tipuri de functii

Tipurile de functii furnizate de MSAccess pot fi clasificate in urmatoarele categorii:

de conversie

Chr() - returneaza un caracter pe baza codului ANSI;

Chr(65) = "A"

Asc() - returneaza codul ANSI a unui caracter; Asc("A") = 65;

Str() - returneaza o valoare numerica, ca sir; Str(92.314) = "92.314"

Val() - returneaza o valoare numerica dintr-un sir; Val("123.34") = 123.34; Val("10 negri mititei")= 10;

DateSerial() - returneaza o data pe baza a trei criterii; DateSerial(99,12,11) returneaza 12/11/99;

Format() - returneaza o expresie in formatul dorit de utilizator; Format(1234.56, "$#,##0.##;;") returneaza $1,234.56<

Format("Next", ">") returneaza NEXT;

Format("123456789", "@@@-@@-@@@@") returneaza 123-45-6789;

Format(#12/25/99#, "d-mmmm-yyyy") returneaza 25-December-1999;

data/

timp

Now();

Time() - returneaza timpul in format 12 ore;

Time$() - returneaza timpul in format 24 ore;

DateDiff() / returneaza diferenta dintre doua date;

DateDiff("ww", #12/1/91#,#1/1/93#) returneaza 56 de saptamani;

DateDiff("q", #5/21/92#,#1/1/93#) returneaza 3 trimestre;

SQL

Avg() - media;

Sum();

Min();

Financiare

SLN() - functie de calcul a deprecierii;

PV() - valoarea curenta a unei rente;

NPV() - valoarea neta curenta;

Matematice;

Abs() - valoare absoluta;

Int();

Fix() - determina intregul unui numar negativ;

Rnd(); Sgn(); Sqr();

De manipulare a sirurilor

Left() - caracterele de la stanga unui sir;

Right() - caracterele de la dreapta unui sir;

Mid() - returneaza un sir, pornind din interiorul sirului primit ca argument;

Len() - returneaza lungimea unui sir;

InStr() - returneaza pozitia din sir a uni caracter;

InStr("ABCDEFGDCBA", "C")=3

InStr(4, "ABCDEFGDCBA", "C")=9

InStr(4, "ABCDEFGDCBA", "f")=0

InStr(4, "ABCDEFGDCBA", "f",1)=6; A se consulta help-ul;

Lcase()/Ucase() - transforma in litere mici/mari

Ltrim()/Rtrim() - elimina spatiile de la stanga/dreapta unui sir;

De domeniu

Un domeniu reprezinta un set de inregistrari continute intr-un tabel, interogare, expresie SQL.

DAvg() - returneaza media unui set de valori;

DCount() - returneaza un numar de inregistrari;

DCount("*", "Clienti") returneaza numarul de inregistrari din Clienti;

DCount("[TipAnimal]", "Animal", "[TipAnimal]='Pisica'") returneaza numarul de inregistrari corespunzator categoriei pisici;

DFirst() - returneaza prima inregistrare intr-un domeniu;

DFirst("[Nume]", "Client","[CodCLient] Like ,'A*' ") returneaza primul client care are codul incepand cu A;

DLookUp() - returneaza un camp, pe baza consultarii;

DLookUp("[Nume]", "Client","[CodCLient]='AR001' ") - returneaza numele clientului cu codul AR001;

Expresii

O expresie este definita ca un simbol, semn, figura sau set de simboluri care prezinta sau reprezinta un fapt algebric ca o cantitate sau operatie. O expresie este utilizata de MSAccess pentru obtinerea unor informatii specifice. MSAccess evalueaza o expresie de cate ori este utilizata. Daca expresia este prezenta intr-o forma sau raport, ea este recalculata la fiecare reactualizare, acest lucru asigurand acuratetea rezultatelor. Daca o expresie este utilizata drept criteriu intr-o interogare, expresia este evaluata de fiecare data cand este executata interogarea, asigurandu-se astfel ca criteriul reflecta orice schimbare, adaugare sau stergere de inregistrari de la ultima executie a interogarii. Daca o expresie este utilizata ca o regula de validare intr-un tabel, MSAccess executa evaluarea de fiecare data cand este accesat campul respectiv, verificand daca valoarea este acceptata; acesta expresie se poate baza pe valoarea altui camp.

Exemple:

=[Nume]& " " & [Prenume]

=[Valoare]-[Valoare]*[Discount]

<25

=Date()+30

[Casatorit]=Yes

[Casatorit]=No And DateDiff("m",Now(),[DataNasterii])>200

[DataNasterii] Between 1/88 and 12/99

=DLookUp("[NumeAnimal]","Animal", "[IdAnimal]=Forms![Client si Animal]![IdAnimal]")

Not "Zambia"

Like "[D-H]*"

Dupa cum se poate observa, o expresie poate contine unul sau mai multe dintre urmatoarele elemente: operatori (>, =, *, And, Or, Not, Like etc.), nume de obiecte (Forms![Client si Animal], [AdresaClient] etc.), functii (Date(), DLookUp(), DateDiff() etc.), valori literale (100, Jan., 1988, "Pisica", "[A-D]*") si constante (Yes, No, Null True False

Exemplu: [UrmData]=Date()+30 in care: = este un operator, Date() este o functie, este un operator si 30 este valoare literala.

MSAccess insereaza in mod automat o serie de caractere atunci cand se schimba focus-ul. Astfel:

[ ] pentru numele controalelor ce nu contin spatii;

pentru date (recunoscute dupa format);

"" pentru texte ce nu contin spatii sau semne de punctuatie.

Operatori speciali

MSAccess pune la dispozitie doi operatori speciali: "." si "!". In timpul lucrului, exista o diversitate de moduri de a afisa si de a accesa un obiect. De exemplu, se poate utiliza un camp si continutul lui. Obiectul camp poate fi present intr-o multitudine de forme si rapoarte, utilizand aceeasi referinta - numele obiectului. Acesti operatori speciali permit sa se specifice MSAccess care sunt obiectele cu care trebuie sa lucreze, ei fiind simboluri care identifica si mentin claritatea in determinarea obiectelor vehiculate.

Operatorul "!"

Acest simbol este utilizat in conjunctie cu o serie de cuvinte cheie ale MSAccess. Unul dintre acestea este Forms. Cand Forms este combinat cu "!" i se specifica MSAccess care obiect din forma va fi utilizat.

Exemplu: sa presupunem ca avem campul DataNasterii in doua forme, [Client si Animal] si [Specificatii]. Daca se doreste referirea la campul DataNasterii din forma [Specificatii], acest lucru se realizeaza prin Forms![Specificatii]![DataNasterii]

Identificatorul "!" este totdeauna urmat de un nume de obiect. Acesta este definit prin utilizarea numele unei forme, a unui raport, camp sau alt control creat.

Operatorul "."

Este un simbol uitlizat in conjunctie cu operatori de identificare expresii. In mod normal, este plasat imediat dupa un obiect definit. Spre deosebire de operatorul anterior, de cele mai multe ori identifica o proprietate a obiectului specificat.

Exemplu: Forms![Specificatii]![DataNasterii].Visible

De asemenea, in anumite circumstante, poate fi utilizat pentru accesarea unei valori a unui camp, asociata cu un tabel specific.

Exemplu: [Animale].[Nume]

Cu ajutorul ultimilor doi operatori prezentati, poate fi regasit orice obiect, precum si valorile asociate proprietatilor sale.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1336
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved