baserunner

表达式

 

baserunner使用xBase样式的表达式。表达式可用于显示数据、构造查询、排序数据、输入或编辑数据以及用于按条件显示数据。表达式具有特定娄型的值,可以是数值、字 符、日期、逻辑值等。

表达式由常量、操作符、字段以及函数组成。最常见的是字段名,此时,表达式的的类型与字段的类型相同。若通过命令行传递表达式,应对表达式使用URL格式的编码。

数据显示表达式

在模板中的标记中使用的表达式将会被表达式的值替换。

字符或备注字段在表达式中直接使用其字段名就行。对于备注字段,你写上字段名字就行了,因为baserunner会自动将尾随的空格会掉。当你需要显示大的备注字段,你可能需要在配置文件中使用_memolength变量。

对于字符型字段,通过需要加入TRIM()或ALLTRIM()函数来去掉尾随的空格。

{text_field}
{trim(text_field)}
{alltrim(text_field)}

如果没有使用这两个函数,其输入将与字段本身的长度相同。例如,若没有使用这两个函数,对于一个长度度为25的字符字段,若其值为"test",输入将会是test后再加上21个空格。

数字型字段通过使用STR函数以字符的形式显示。

{str(numeric_field,10,2)}

上面的例子将会使数据以10位长度(含2位小数)的形式来显示,也可以使用 LTRIM()函数来去掉前置的空格。

{ltrim(str(numeric_field))}

日期型字段使用DTOC()函数来显示

{dtoc(date_field)}

日期的格式按照配置文件中_dateformat变量指定的格式进行显示。

逻辑型字段几乎都是使用IIF()函数来显示它的值(也可以直接显示它的值)

{iif(logic_field=.T.,'true ','false')}

如果字段值为真,将显示true,否则显示false。需要注意的是iif函数的第二个参数与第三个参数的长度必须相同。也可以使用HTML代码来进行显示,如:

<form>
<input type="checkbox"
{IIF(logic_field=.T.,'checked','        ')}>
</form>

这个例子显示一个选择框。如果字段的值为真,选择框被选中,否则没有被选中。当使用HTML代码时需要注意IE与Netscape浏览器的区别。

上面的例子都只是简单的显示数据库中记录的值,你还可以使用复杂的表达来显示相关的值。

数据输入表达式

当你使用表达式来输入数据(在表单中使用 %filedname命名的变量)时,表达式的值类型必须与字段的类型相同。

数据排序表达式

除了逻辑类型的任何类型的表达式。

查询与条件显示表达式

必须是逻辑类型的值。

chr_field="value"
"value"$mem_field
num_field=VAL("123")
num_field>=VAL("123")
dat_field=CTOD("01/15/1960")
log_field=.F.

表达式建立

表达式通过常量、操作符、字段以及函数来建立。baserunner支持多数的xBase表达式构造方法。

表达式常量

常时可以是数值、日期、字符或逻辑值。常用通过用在复杂的表达式之中,独立使用它们一般没有什么意义。

数值常量是数据值。

日期常具有CCYYMMDD格式。

字符常量是包含在双引号或单引号之间的字符或数字等。如果需要在其中使用引号,你需要使用另一种引号来将它括起来。

.TRUE. 与 .FALSE. 是逻辑常量。 .T. 与 .F. 是其缩写。

数据操作符

加 + 除 /
减 - 乘方 **
^
乘 *    

在数据表达式中可能使用括号来改变各种操作符的优先顺序。

字符操作符

连接1 +
连接2 -

两个操作符都可用于连接两个字符值(常量或变量),+操作符直接对两个字符进行连接,-操作符将会去掉第一个字符串后面的空格后再与第二个字符进行连接。

关系操作符

等于 = 小于等于 <=
不等于 <> or # 大于等于 >=
小于 < 包含于 $
大于 >    

除了包含于操作符用于字符量之后,其他所有的操作符都可用于数值、字符、日期值。操作结果是逻辑值。

逻辑操作符

逻辑与 .AND.
逻辑或 .OR.
逻辑非 .NOT.
用于连接两个逻辑值,其结果也是逻辑值。

表达式函数

可以使用的函数如下表:

函数 返回值 功能
ALLTRIM(char_value) Character 去字串前后空格
ASCEND(value) Special 用于排序表达式,其结果是按递升顺序排序
CHR(integer_value) Character 将数值按ASCII编码转换为字符
CTOD(char_value) Date 将按_dateformat指定格式的字 符串转换为日期类型
DATE() Date 近回当前日期,对日期类型可以使用+操作,如date()+10
DAY(date_value) Numeric 返回日期类型的日期值
DELETED() Logical 当前记录是否被删除
DESCEND(value) Special 用于排序表达式,其结果是按递减顺序排序
DTOC(date_value) Character 将按_dateformat指定格式的日期类型转换为字符串
DTOS(date_value) Character 将按CCYYMMDD格式的日期类型转换为字符串
IIF(logical_value, true_result, false_result) Character 条件块 。如果logical_value为.TRUE,则返回'true_result'值,否则返回'false_result'值。 true_result 与 false_result长度必须相同. 
LEFT(char_value, num_chars) Character 从字符串的第一个字符开始,返回指定长度的字符串
LTRIM(char_value) Character 去掉字符串中的前置空格
MONTH(date_value) Numeric 返回月份
RECCOUNT() Numeric 数据库中记录总数
RECNO() Numeric 当前记录的记录号
STOD(char_value) Date 将"CCYYMMDD"格式的字符串转换为日期
STR(number, length, decimals) Character 将数值按指定的长度和小数位数转换为字符串。
SUBSTR(char_value, start_position, num_chars) Character 从指定位置取指定长度的字符串。
TIME() Character 系统时间,格式为HH:MM:SS.
TRIM(char_value) Character 去掉尾随空格
UPPER(char_value) Character 转换为大小
VAL(char_value) Numeric 将字 符串转换为数值
YEAR(date_value) Numeric 返回4位数字的年份