Documente Academic
Documente Profesional
Documente Cultură
Seminar FoxSQL
Seminar FoxSQL
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
Valoare
Descriere
Ca i Numeric.
Integer (I)
ntre -2147483647 i
+2147483646
ntre -9*1014 i +9*1014
4B
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)
4B n tabela de date
General (G)
4B n tabela de date
Valori monetare.
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
Caractere alfanumerice.
.T. / .F.
E limitat de memoria
disponibil
E limitat de memoria
disponibil
Oracle
Principalele tipuri de date (native) cu care lucreaz Oracle sunt urmtoarele:
Data
1. Tipul numeric
Number
Marime
2. Tipul calendaristic
Date
3. Tipul caracter
Char
Varchar2 / Varchar
1-2000B
1-4000B
Valoare
Descriere
ntre -1*10-130 i
9.99...99*10125
Orice caracter
Orice caracter
NChar / NVarChar2
1-2000/4000B
Long
Pn la 2 GB
Orice informaie.
Orice informaie.
ROWID/UROWID
XMLType
URI
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:
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]]
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] ...]]
Select * from emitenti where denumire like "S%" or denumire like "S%"
Sa se afiseze cotatiile care nu corespund unui emitent (merge daca pe insert e setat ignore)
DELETE
terge nregistrrile dintr-o tabel.
Sintaxa
DELETE FROM [DatabaseName!]TableName
[WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]
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()
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
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()
?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
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
indexul creat si se afiseaza inregistrarile
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
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.
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
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
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()