p°edchozφ lekce (1.25) | obsah kurzu | nßsledujφcφ lekce (1.27) |
V²razy v jazycφch xBase mohou vracet v²sledky logickΘho, °et∞zcovΘho nebo numerickΘho typu. Pro p°φmΘ vyhodnocovßnφ obsahu databßzφ lze pou₧φt volßnφ funkcφ DbfEvalLog pro zφskßnφ logickΘho v²sledku, DbfEvalNum pro zφskßnφ numerickΘho v²sledku a DbfEvalStr pro zφskßnφ °et∞zcovΘho v²sledku. Parametrem uveden²ch funkcφ je v₧dy °et∞zec obsahujφcφ v²raz zadan² v syntaxi jazyk∙ xBase.
V²razy jazyk∙ xBase se zadßvajφ jako °et∞zce, kterΘ obsahujφ p°φmo po₧adovan²
v²raz. Ve v²razech se pou₧φvajφ funkce a jmΘna polo₧ek databßze spojenß operßtory. Ve
v²razech se p°i zßpisu jmen funkcφ a nßzv∙ databßzov²ch polo₧ek nerozliÜujφ velkß a malß
pφsmena. Pro spojovßnφ v²raz∙ se pou₧φvß nßsledujφcφch operßtor∙:
.AND. a zßrove≥
.OR. nebo
.NOT. negace
NejjednoduÜÜφ jsou logickΘ v²razy, ve kter²ch v∞tÜinou zjiÜ¥ujeme obsah polo₧ek
databßze. Pokud zadßte chybn² v²raz, bude vrßcena hodnota False.
Procedure Test;
var log : boolean;
begin
{cena je v∞tÜφ, ne₧ 100}
log := DbfEvalLog('CENA>100');
{cena je v∞tÜφ ne₧ 100 a zßrove≥ menÜφ nebo rovna 200}
log := DbfEvalLog('CENA>100.AND.CENA<=200');
{cena je menÜφ ne₧ 100 nebo obsah polo₧ky TYP je 'DISK'}
log := DbfEvalLog('CENA<100.OR.TYP="DISK"');
{prvnφ t°i pφsmena obsahu polo₧ky NAZEV jsou 'FAX'}
log := DbfEvalLog('SUBSTR(NAZEV,1,3)= "FAX"');
end;
Jak jste si jist∞ vÜimli, lze jednφm vyhodnocenφm kontrolovat obsah n∞kolika polo₧ek,
navφc odliÜnΘho typu. Pozor si budete muset dßvat, pokud budete chtφt zadat obsah
°et∞zce. Pou₧φt budete muset kombinaci znak∙ apostrof a uvozovka. Viz v²Üe uveden²
p°φklad.
Podobn²m zp∙sobem lze vyhodnocovat i v²razy vracejφcφ numerickΘ v²sledky. Pokud
zadßte chybn² v²raz, bude vrßcena nulovß hodnota.
{hodnota polo₧ky CENA}
Writeln(DbfEvalNum('CENA'));
{v²poΦet ceny vΦetn∞ DPH}
Writeln(DbfEvalNum('CENA/100*(100+DPH)'));
{dΘlka databßzovΘ polo₧ky NAZEV}
Writeln(DbfEvalNum('LEN(NAZEV)'));
{pozice v²skytu znaku 'A' v polo₧ce NAZEV}
Writeln(DbfEvalNum('AT("A",NAZEV)'));
Lze takΘ samoz°ejm∞ vyhodnocovat v²razy obsahujφcφ v²sledek typu °et∞zec. Pokud
zadßte chybn² v²raz bude vrßcen prßzdn² °et∞zec.
{hodnota polo₧ky NAZEV}
Writeln(DbfEvalStr('NAZEV'));
{prvnφch deset znak∙ polo₧ky NAZEV}
Writeln(DbfEvalStr('SUBSTR(NAZEV,1,10)'));
{obsah polo₧ky NAZEV p°eveden² na velkß pφsmena}
Writeln(DbfEvalStr('UPPER(NAZEV)'));
{cena vΦetn∞ DPH p°evedenß na °et∞zec}
Writeln(DbfEvalStr('STR(CENA/100*(100+DPH),12,2)'));
Jak ji₧ bylo uvedeno, vracφ chybn∞ uveden² v²raz svou implicitnφ hodnotu. Stane se tak
v p°φpad∞, ₧e je uveden nap°φklad chybn² v²raz xBase, neexistujφcφ jmΘno polo₧ky
databßze a podobn∞. Implicitnφ hodnota je vrßcena pokud pou₧ijete volßnφ v²Üe
uveden²ch funkcφ a nebudete mφt v aktußlnφ datovΘ oblasti otev°enou ₧ßdnou databßzi.
Pokud budete chtφt prov∞°it sprßvnost zadanΘho v²razu, m∙₧ete pou₧φt funkci
DbfEvalTest, kterß v²raz nejen prov∞°φ, ale souΦasn∞ takΘ vracφ typ pou₧itΘho v²razu.
p°edchozφ lekce (1.25) | obsah kurzu | nßsledujφcφ lekce (1.27) |