Sunteți pe pagina 1din 17

VISUAL FOXPRO

TIPURI DE DATE FoxPro Principalele tipuri de date cu care lucreaz FoxPro sunt urmtoarele: Data Mrime 1. Tipuri numerice Numeric (N) 8B n memorie; 20B n tabela de date Float (F) 8B n memorie; 20B n tabela de date Double (B) 8B Integer (I) 4B Valoare ntre -0.9E19 i +0.9E19 ntre -0.9E19 i +0.9E19 ntre -4.9E-324 i 1.79E308 ntre -2147483647 i +2147483646 ntre -9*1014 i +9*1014 1 ianuarie 1 e.n. - 31 decembrie 9999 e.n. 00:00:00 a.m.,1 ianuarie 1 A.D.- 11:59:59 p.m.,31 decembrie 9999 A.D. Orice caracter .T. / .F. E limitat de memoria disponibil E limitat de memoria disponibil Descriere Valori ntregi sau zecimale. Ca i Numeric. Valori n VMDP (virgul mobila dubl precizie). Valori ntregi. Valori monetare. Dat ce cuprinde anul, luna i ziua Dat ce cuprinde anul, luna, ziua, or, minutul i secund Caractere alfanumerice. Valoare booleana de True (.T.) sau False (.F.). Text alfanumeric de lungime nedeterminat. Legtura la un obiect (poz, sunet etc.).

Currency (Y) 8B 2. Tipuri calendaristice Date (D) 8B DateTime (T) 8B

3. Tipul caracter Character (C) 1-254B 4. Alte tipuri specifice Logical (L) 1B Memo (M) General (G) 4B n tabela de date 4B n tabela de date

Oracle Principalele tipuri de date (native) cu care lucreaz Oracle sunt urmtoarele: Data 1. Tipul numeric Number 2. Tipul calendaristic Date Marime Valoare ntre -1*10-130 i 9.99...99*10125 00:00:00 a.m.,1 ianuarie 4712 i.e.n. - 11:59:59 p.m., 31 decembrie 4712 e.n. 1-2000B 1-4000B Orice caracter Orice caracter Descriere Valori n VF (virgul fix) sau VM. Are precizie de pn la 38 de zecimale. Reine dat (zi, luna, an) i timpul (or, minut, secunda).

3. Tipul caracter Char Varchar2 / Varchar

Reine iruri de caractere cu lungime fix. Reine iruri de caractere cu lungime

NChar / NVarChar2

1-2000/4000B

Long

Pn la 2 GB

Orice caracter Unicode (AL16UTF16 sau UTF8) menionat la nceputul crerii bazei ca fiind set de caractere naionale. Orice caracter Orice informaie. Orice informaie.

variabil (reine lungimea real, nu pe cea maxim declarat). Tipuri de date rezervate pentru reprezentarea caracterelor naionale (N provine de la Naional).

Reine texte (iruri de caractere) de lungime variabil. Stocheaz cantiti mari de informaie nestructurata (text, poze, sunete etc.). Pentru informaii binare sau iruri de caractere cu lungime variabil; informaia (sunet, document etc.) nu poate fi interpretat (deci nici convertit la trecerea de la un sistem la altul). Stocheaz adresa fiecrui rnd (row) dintr-o tabel. Tip care stocheaz date XML (Extended Markup Language). Tip de dat care stocheaz URI-uri (Uniform Resource Identifiers) care fac legtura la un document sau o anume parte dintr-un document.

4. Alte tipuri specifice LOB (BLOB, Pn la 4 GB CLOB, NCLOB i BFILE) RAW/LONG RAW

ROWID/UROWID XMLType URI Orice dat de tip XML

Observaie: tipurile de date cu acelai culori sunt asemntoare.

LDD (Limbaj (Limbaj de Descriere a Datelor) Datelor) FoxPro (9.0) Se creeaza un proiect nou. (File-New-Project) Se creeaza o noua baza de date (Data-Databases-New-New Database) Putem creea tabele vizual folosind generatorul sau putem folosi script SQL.

Structura tabela

Cheia Primara:

Creare de tabele folosind script Sintaxa CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE] (FieldName1 FieldType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE] [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] [, FieldName2 ...] [, PRIMARY KEY eExpression2 TAG TagName2 |, UNIQUE eExpression3 TAG TagName3] [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] REFERENCES TableName3 [TAG TagName5]] [, CHECK lExpression2 [ERROR cMessageText2]]) | FROM ARRAY ArrayName Exemplu: Sa se creeze urmatoarea structura:

create table emitenti(; simb char(10),; denumire char(32) not null,; cf char(8) not null,; data_l date,; piata char(12) check upper(piata)='BVB' or upper(piata)='RASDAQ',; cap_soc number(10) check cap_soc>200 error "capital social prea mic",; primary key simb tag emit_pk) create table cotatii(; simb char(10),; data_c date,; vol number(10) check vol>=0 error "volumul trebuie sa fie pozitiv",; pret number(16,4) check pret>=0 error "pretul trebuie sa fie pozitiv",; primary key simb+dtoc(data_c) tag cot_pk,; foreign key simb tag c_e_fk references emitenti) Modificare structur tabele

Utilizatorul poate terge cmpuri, aduga sau insera cmpuri, poate modific lungimea sau tipul unor cmpuri. Datele existente se vor copia n nou structur prin verificarea numelui de cmp din cele dou structuri. Dac coincid, datele se vor trece pe nou structur fcndu-se conversia acolo unde este posibil la noul tip de cmp. Observaie: modificarea structurii poate duce la pierderea datelor. Modificarea structurii se poate face prin comanda ALTER TABLE (se mai folosete i comanda MODIFY STRUCTURE). Structura comenzii ALTER este asemntoare cu cea de la Oracle (dup cum o s se observe din rndurile urmtoare) i are rolul de a modifica structura unei tabele:fie prin adugare de coloane (ADD-cand se adauga trebuie precizata structura coloanei respective), sau a unei coloane (ALTER [COLUMN]; se aduga o validare SET CHECK sau se modifica un cmp, sau se renuna la valorile implicite DROP DEFULT, se anuleaz o validare DROP CHECK). De asemenea, se poate renuna la o coloan (DROP [COLUMN]), sau se poate adug / renuna la o cheie primar sau cheie extern (ADD /DROP PRIMARY KEY sau ADD/DROP Foreign KEY).Tot n cadrul comenzii alter se poate redenumi o coloan. Sintaxa ALTER TABLE TableName1 ADD | ALTER [COLUMN] FieldName1 FieldType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE] [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] Sau ALTER TABLE TableName1 ALTER [COLUMN] FieldName2 [NULL | NOT NULL] [SET DEFAULT eExpression2] [SET CHECK lExpression2 [ERROR cMessageText2]] [DROP DEFAULT] [DROP CHECK] Sau ALTER TABLE TableName1 [DROP [COLUMN] FieldName3] [SET CHECK lExpression3 [ERROR cMessageText3]] [DROP CHECK] [ADD PRIMARY KEY eExpression3 TAG TagName2] [DROP PRIMARY KEY] [ADD UNIQUE eExpression4 [TAG TagName3]] [DROP UNIQUE TAG TagName4] [ADD FOREIGN KEY [eExpression5] TAG TagName4 REFERENCES TableName2 [TAG TagName5]] [DROP FOREIGN KEY TAG TagName6 [SAVE]]

[RENAME COLUMN FieldName4 TO FieldName5] [NOVALIDATE] Exemple Alter table emitenti drop primary key Alter table emitenti add primary key simb tag emit_pk Alter table emitenti drop column piata Alter table emitenti add column piata char(12) Alter table emitenti alter column denumire char(35) not null Alter table emitenti alter column piata set check upper(piata)='BVB' or upper(piata)='RASDAQ' Modificare tabele

ALTER TABLE TableName1 ADD | ALTER [COLUMN] FieldName1 FieldType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE] [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] sau ALTER TABLE TableName1 ALTER [COLUMN] FieldName2 [NULL | NOT NULL] [SET DEFAULT eExpression2] [SET CHECK lExpression2 [ERROR cMessageText2]] [DROP DEFAULT] [DROP CHECK] sau ALTER TABLE TableName1 [DROP [COLUMN] FieldName3] [SET CHECK lExpression3 [ERROR cMessageText3]] [DROP CHECK] [ADD PRIMARY KEY eExpression3 TAG TagName2] [DROP PRIMARY KEY] [ADD UNIQUE eExpression4 [TAG TagName3]] [DROP UNIQUE TAG TagName4] [ADD FOREIGN KEY [eExpression5] TAG TagName4 REFERENCES TableName2 [TAG TagName5]] [DROP FOREIGN KEY TAG TagName6 [SAVE]] [RENAME COLUMN FieldName4 TO FieldName5] [NOVALIDATE] Stergere tabela:

Drop table regiuni LMD (Limbajul (Limbajul de Manipulare a Datelor) Datelor)

SELECT Afieaz date din una sau mai multe tabele. Sintaxa SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] [Alias.] Select_Item [AS Column_Name] [, [Alias.] Select_Item [AS Column_Name] ...] FROM [FORCE] [DatabaseName!]Table [Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN DatabaseName!]Table [Local_Alias] [ON JoinCondition ] [[INTO Destination] | [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE JoinCondition [AND JoinCondition ...] [AND | OR FilterCondition [AND | OR FilterCondition ...]]] [GROUP BY GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]] Sa se afiseze emitentii care au simbolul TLV sau SNP

Select * from emitenti where simb in ('TLV','SNP') Sa se afiseze o singura data toate pietele pe care se tranzactioneze emitentii

select distinct piata from emitenti Sa se afiseze toti emitentii a caror denumire incepe cu S sau s

Select * from emitenti where denumire like "S%" or denumire like "S%" Se se afiseze emitentii care au pe penultima pozitie A

Select * from emitenti where denumire like "%A_"

Sa se afiseze toti emitentii care au capitalul social intre 200 si 5000

select * from emitenti where cap_soc between 200 and 5000 Sa se afiseze denumire emitent, data, cotatie (pret)

Select denumire,data_c,pret from cotatii c, emitenti e where c.simb=e.simb Sau Select denumire,data_c,pret from cotatii c inner join emitenti e on c.simb=e.simb Sa se afiseze si emitentii care nu au cotatii

Select denumire,data_c,pret from cotatii c, emitenti e where c.simb=e.simb(+) Sau Select denumire,data_c,pret from cotatii c right outer join emitenti e on c.simb=e.simb Sa se afiseze cotatiile care nu corespund unui emitent (merge daca pe insert e setat ignore)

Select denumire,data_c,pret from cotatii c left outer join emitenti e on c.simb=e.simb INSERT INSERT INTO emitenti values("TLV","Banca Transilvania","798655",DATE(),"BVB",795750) INSERT INTO emitenti values("BRD","Banca Romana de Dezvoltare","79885",DATE(),"BVB",195850) INSERT INTO cotatii VALUES ("TLV",CTOD("07-12-2009"),50000,1) INSERT INTO cotatii VALUES ("TLV",CTOD("08-12-2009"),70000,1.1) INSERT INTO cotatii VALUES ("BRD",CTOD("08-12-2009"),78000,2.5) UPDATE Modifica nregistrrile dintr-o tabel. Sintaxa UPDATE [DatabaseName1!]TableName1 SET Column_Name1 = eExpression1 [, Column_Name2 = eExpression2 ...] WHERE FilterCondition1 [AND | OR FilterCondition2 ...]] Sa se majoreze capitalul social al BRD-ului cu 10%

Update emitenti set cap_soc=cap_soc*1.10 where simb='BRD' Sa se incrementeze cotatiile de pe 01-01-2005

Update cotatii set pret=pret+0.1 where data_c=ctod("08-12-2009") Rezultatul obtinut este cel din figura urmatoare :

DELETE terge nregistrrile dintr-o tabel. Sintaxa DELETE FROM [DatabaseName!]TableName [WHERE FilterCondition1 [AND | OR FilterCondition2 ...]] Sa se stearga toate cotatiile

Delete from cotatii Sa se stearga emitentul SNP

Delete from emitenti where simb='SNP' Functii SQL Functie conversie string catre number: chr(). Functie ce returneaza data sau data+ora curenta: date() si datetime() Exemplu: select "Simbolul "+simb+"avand volumul"+str(vol) from cotatii where data_c=date() Sa se realizeze o jonctiune intre tabelele emitenti si simboluri

SELECT denumire,pret FROM emitenti e,cotatii c WHERE e.simb=c.simb Variatia neta si procentuala a pretului fata de sedinta anterioara:

select a.simb,a.pret pret_azi,i.pret pret_ieri,a.pret-i.pret net,a.pret*100/i.pret-100 procn from cotatii a; inner join cotatii i on a.simb=i.simb where i.data_c=(select max(c.data_c) from cotatii c; where c.data_c<>date() and c.simb=i.simb) and a.data_c=date() Sa se calculeze suma, media volumului de tranzactionare pe fiecare simbol.

Select simb,count(vol) nr,sum(vol) suma,avg(vol) medie from cotatii group by simb Sa se calculeze suma, media volumului de tranzactionare pentru cazurile in care volumul a fost mai mare ca 3000.

Select simb,count(vol) nr,sum(vol) suma,avg(vol) medie from cotatii where vol>3000 group by simb Sa se afiseze suma, media volumului de tranzactionare pentru cazurile in care media a fost mai mare ca 7500.

Select simb,count(vol) nr,sum(vol) suma,avg(vol) medie from cotatii group by simb having medie>7500 ATENTIE: Clauza where filtreaza inregistrarile tabelei(lor) initiale iar having filtreaza rezultatul obtinut dupa grupare. Limbajul FOX In FoXPro fiecare tabela se deschide intr-o zona de lucru denumita A, B, C sau 1, 2, EX: Sa se deschida tabela emitenti In zona A si cotatii facturi In zona B. SELECT A USE emitenti SELECT B USE cotatii SELECT A brow SELECT B Brow

Sa presupunem ca in cotatii si emitenti avem urmatoarele inregistrari:

Instructiuni Instructiune MODIFY STRUCTURE DISPLAY STRUCTURE sau LIST STRUCTURE Close tables Use cotatii Go top ?dbf() Go bottom Skip +2 Skip -2 Go top ?nume,data_c Go 3 ?simb,data_c Display sau list next 1 Display all List Brow Go top ?"Simbolul "+simb+" are pretul"+str(pret) Go top ?"Simbolul "+simb+" are pretul"+str(pret,10,4) go bottom ?simb,data_c,recno(),bof(),eof() Efect Modificarea structurii logice a unei tabele Vizualizarea structurii logice Se plaseaza indicatorul la inceputul tabelei cotatii Afiseaza tabela deschisa: cotatii Se plaseaza indicatorul la sfarsitul tabelei Se se deplaseaza peste 2 inregistrari inainte Se se deplaseaza peste 2 inregistrari inapoi TLV 12/10/05 TLV 01/23/05 Se afiseaza inregistrarea curenta TLV 01/23/05 7000 1.14 Se afiseaza intreaga tabela, in diferite formate Simbolul TLV are pretul 1 Se face rotunjire. Simbolul TLV are pretul 1.1500 In acest caz se specifica lungimea maxima a sirului si cat se se aloce pentru partea zecimala. SNP 01/03/05 4 .F. .F. Recno() returneaza nr inregistrarii curente Eof()- returneaza .T. daca este sfarsitul tabelei si .F. altfel Bof()- returneaza .T. daca este inceputul tabelei si .F. altfel Numarul inregistrarilor din tabela curenta: 4 / / 5 .F. .T. Se construieste un index care nu accepta duplicate pe simb si data_c. Se activeaza

?reccount() Go bottom Skip ?simb,data_c,recno(),bof(),eof() Index on simb+dtoc(data_c) tag cota_pk unique set order to cota_pk

list set order to go top list for pret>1.14 go top list next 2 for pret>1.14 Close tables Use emitenti Count for cap_soc>3000 to nr ?"numarul de emitenti avand capitatlul social mai mare decat 3000 este: "+str(nr) set talk off sum cap_soc to capital ?[suma capitalulilor sociale este: ],capital Average cap_soc for simb=[T] to medie ?[media capitalulilor sociale este: ],medie Average cap_soc to medie List for cap_soc>medie Use emitenti calculate min(cap_soc),sum(cap_soc),avg(cap_soc) to minm,suma,medie ?minm,suma,medie Use cotatii Replace for simb=[TLV] pret with pret*1.2 use cotatii Delete for vol<8000 brow pack sau recall all brow Zap sau Delete all Pack Use cotatii append from emitenti fields simb Stabilirea domeniului inregistrarilor:

indexul creat si se afiseaza inregistrarile sortate. Dupa afisare se dezactiveaza indexul. Afiseaza cotatiile care au pretul mai mare ca 1.14 Afiseaza cotatiile care au pretul mai mare ca 1.14 din primele doua inregistrari Afisza numarul emitentilor care au capitalul social mai mare decat 3000

Afiseaza suma capitalulilor sociale Se va folosi set talk off daca nu se doreste sa se afiseze suma de doua ori. Media capitalulilor sociale pentru societatile ce incep cu T Emitentii ce au capitalul social mai mare decat media Afiseaza minimul, suma si media capitalulilor sociale ale emitentilor

Se mareste cu 20% cotatiile pentru TLV Se sterg cotatiile cu volum mai mic decat 8000. Initial doar se marcheaza pentru stergere. Pack: stergere fizica. Recall all: se readuc inregistrarile care nu au fost sterse fizic. Se sterg fizic toate inregistrarile din tabela. Se adauga la sfaristul tabelei cotatii simbolurile din emitenti

For <conditie> se refera la inregistrarile pentru care <conditie> are valoarea .T. While <conditie> se refera la inregistrarile cuprinse intre inregistrarea curenta si prima inregistrare pentru care <conditie> este .F.

List for vol>8000 afiseaza toate inregistrarile pentru care vol>8000 Go top List while vol>8000 afiseaza pana cand intalneste un volum mai mic sau egal cu 8000 Cautare indexata: Comenzile seek si find se folosesc doar pe tabelele indexate. Exemplu:

use emitenti index on simb tag isimb seek "TLV" if found() display endif Jonctiuni Pentru a creea o legatura intre cotatii si emitenti: sele 1 use emitenti index on simb to p1 sele 2 use cotatii set relation to simb into emitenti set skip to emitenti ?relation(1) -> afiseaza pe ce s-a facut prima legatura adica: SIMB browse fields emitenti.denumire,cotatii.data_c,cotatii.pret FOR cotatii.simb='TLV' sau join with emitenti to cemit for simb=A.simb fields a.denumire,data_c,pret select * from cemit

Structuri de program FOX 1. Structura secventiala: O astfel de structura este data de o secventa de comenzi, care nu contine structurile alternative IF si CASE sau structurile repetitive (WHILE, FOR, SCAN). Atribuirea se face prin STORE sau prin =. Exemplu Store 100 to X1,X2 sau X1=100 X2=100 2. Structura alternativa If <conditie> Secventa - instructiuni 1 Else Secventa instructiuni 2 Exemplu

Clear Go top If vol>5000 ?simb," este la categoria I" else ?"este la categoria II" endif Do case Case expresie 1 Secventa 1 Case expresie 2 Secventa 2 . Case expresie n Secventa n Otherwise Secventa Endcase Input [introduceti media:] to medie do case Case between(medie,7,8.50) ?"medie buna" case between(medie,8.51,9.50) ?"medie foarte buna" case between(medie,9.51,10) otherwise ?"medie slaba" endcase 3. Structura repetitiva Cu numar cunoscut de repetitii For v=v1 to vf [step Vp] Instructiuni [exit] [loop] endfor Cu numr neconoscut de repetitii Do while <conditie> Instructiuni [loop] [exit] enddo Scan instructiune specific lucrului cu tabele- secventa se executa pentru fiecare inregistrare din tabela Scan <scop> Instructiuni [loop] [exit] endscan

loop transmite controlul instructiunii de sfarsit a secventei repetitive exit transmite controlul primei instructiuni ce urmeaza secventei

Exemple: 1. Sa se afiseze cotatiile cat si numarul lor din luna curenta folosind functia locate close tables Use cotatii Set talk off Nr=0 Locate for year(data_c)=year(date()) and month(data_c)=month(date()) Do while found() display Nr=nr+1 Continue Enddo ?"Numar total de cotatii:",nr 2. Sa se afiseze folosind o structura do while emitentii care incep cu 'P' close tables use emitenti go top clear do while NOT EOF() if like ('P*',denumire) ?denumire endif skip enddo 3. Sa se afiseze folosind scan emitentii care incep cu 'P' close tables use emitenti go top clear scan for substr(denumire,1,1)='T' ?denumire endscan 4. Sa se afiseze folosind for si iif emitentii care incep cu 'P' close tables use emitenti go top clear

for i=1 to reccount() ?iif(substr(denumire,1,1)='P',denumire,'Nu incepe cu P') skip ?replicate("-",35) endfor use

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