Lekce 1.26
Zadßvßnφ v²raz∙ v jazycφch xBase


p°edchozφ lekce (1.25) obsah kurzu nßsledujφcφ lekce (1.27)

Pokud budeme pot°ebovat zpracovat obsah databßzov²ch polo₧ek, budeme muset pou₧φvat ve v²razech p°φmo syntaxi jazyk∙ xBase. Jsou to jazyky a systΘmy, kterΘ jsou p°φmo urΦeny pro zpracovßnφ databßzφ stejnΘho typu, kter² se pou₧φvß i v systΘmu KLONDAIK. Jednß se o Dbase, FoxPro a Clipper, kterΘ prod∞laly dlouholet² v²voj. StejnΘ v²razy v syntaxi jazyk∙ xBase budeme muset pou₧φvat i my p°i nastavovßnφ podmφnek, filtr∙ a indexovßnφ.

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)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz