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.
Sub Test
'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 Sub
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) |