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) |