动态合成表达式之二

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函数,特别是新手。


本页地址:http://www.foxtable.com/webhelp/topics/2919.htm