动态合成表达式之二
Foxtable专门提供了一个名为CExp的函数,可以用更清晰的方式动态合成表达式。
语法:
CExp(StrExp, V0, V1, V2, ...)
StrExp:
要合成的表达式,包含位置标记,{0}表示第一个值,{1}表示第二个值,{2}表示第三个值...
V0,V1,V2: 用于替换位置标记的值,V0替换{0},V1替换{1},V0替换{0}...
示例一
在命令窗口执行下面的代码:
Dim
exp As
String =
"{0} + {1} + {2} = {3}"
exp =
CExp(exp,1,3,5,9)
output.show(exp)
得到的结果为:1 + 3 + 5 = 9
可以看到CExp函数依次用1、3、5、9替换了{0}、{1}、{2}、{3}
示例二
定表A和表B都有产品、规格两列,我们在表A中选择了一行,希望从表B中找出相同产品、规格的行:
Dim
dr1 As
DataRow = Tables("表A").Current.DataRow
Dim
dr2 As
DataRow
Dim
exp As
String = CExp("[产品]
= '{0}' And [规格]
= '{1}'",
dr1("产品")
,dr1("规格"))
dr2 =
DataTables("表B").Find(exp)
示例三
同样要注意日期用符号#括起来,字符用符号'括起来,数字直接用,例如在命令窗口执行:
Dim
cp As
String =
"PD01"
Dim
sl As
Integer =
500
Dim
rq As
Date = Date.Today
Dim
exp As
String
exp =
CExp("[产品] = '{0}'
And [数量] > {1} And [日期] = #{2}#", cp,sl,rq)
output.show(exp)
得到的结果为:[产品] = 'PD01' And [数量] > 500 And [日期] = #2014/2/25#
如果我们不用CExp合成表达式,代码为:
Dim
cp As
String =
"PD01"
Dim
sl As
Integer =
500
Dim
rq As
Date = Date.Today
Dim
exp As
String
exp =
"[产品] = '" &
cp &
"' And [数量] > " & sl & "[日期] = #"
& rq
&
"#"
output.show(exp)
代码的长度差不多,但是使用CExp有好处,就是表达式始终是一个整体,无需分段拼接,所以代码更清晰,不容易出错。
尽管帮助文件中的例子大多使用分段拼接的方式,但我个人建议大家尽量用CExp函数,特别是新手。