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.

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)

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