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位数字的年份 |