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