-- 作者:yangming
-- 发布时间:2009/6/3 11:00:00
--
动态合成表达式
不少初次接触编程的用户,对于何时使用双引号,何时使用单引号,感到非常困惑。
其实很简单,代码中的字符串都是用双引号括起来的。
例如:
Dim s As String s = "abcd"
而单引号主要用于表达式,表达式可以用于计算、筛选。 表达式本身是一个字符串,所以必须用双引号括起来;表达式内部的字符串,用单引号括起来。
例如:
CurrentTable.Filter = "[产品] = \'PD01\'"
上面的代码意思是在当前表中筛选出产品为PD01的行,筛选表达式本身是一个字符串,所以用双引号括起来,表达式中的PD01也是一个字符串,是表达式的一个内部字符串,所以用单引号括起来。 表达式中的日期继续用符号#括起来,数值则不需要任何符号括起来,这些和代码中的格式是一样的,唯一不同的是字符串用单引号括起来。
例如:
CurrentTable.Filter = "[产品] = \'PD01\' And [日期] = #3/17/1999# And [折扣] = 0"
通过表达式列的Expression属性,可以动态设置其计算公式
例如:
DataTables("表A").DataCols("ID").Expression = "\'CA\' + [_Identify]"
实际编程的时候,经常要根据用户的输入,动态合成表达式。
例如:
例如要计算某个产品的销售数量,要计算的产品名称由用户输入,假定输入的结果保存在全局变量Vars("产品")中:
Dim Sum As Integer Sum = DataTables("订单").Compute("Sum(数量)", "[产品] = \'" & Vars("产品") & "\'")
Compute的第二个参数为计算条件表达式,该表达式分为三部分:
"[产品] = \'" & Vars("产品") & "\'"
假定全局变量Vars("产品")的值为PD01,组合三部分的内容后,这个表达式就等效于:
"[产品] = \'PD01\'"
假定表A和表B都有品名、型号两列,我们在表A中选择了一行,希望从表B中找出相同品名、规格的行:
Dim dr1 As DataRow = Tables("表A").Current.DataRow Dim dr2 As DataRow dr2 = DataTables("表B").Find("[品名] = \'" & dr1("品名") & "\'And [规格] = \'" & dr1("规格") & "\'")
上面代码的最后一行,初看非常难以理解。 为便于理解,我们首先来看看看正常的查找表达式:
"[品名] = \'要找品名\' And [规格] = \'要找的规格\'"
其中红色的部分要被dr1中的实际的品名和规格代替,所以最终的表达式成了:
"[品名] = \'" & dr1("品名") & "\'And [规格] = \'" & dr1("规格") & "\'"
上面都是用字符型的值作为例子,表达式中字符型的值要用单引号括起来。 如果是日期型,要用符号#括起来。 例如我们要筛选出指定月份的订单,但是因为表达式没有求得日期月份的函数,我们只能这样设置代码:
Dim StartDate As Date
\'起始日期变量 Dim EndDate As Date
\'结束日期变量 Dim Month As Integer = 6
\'指定月份 Dim Year As Integer = 1999
\'指定年份 StartDate = New Date(Year,Month,1) \'获得该月第一天 EndDate = New Date(Year,Month,Date.DaysInMonth(Year,Month)) \'获得该月最后一天 Tables("订单").Filter = "[日期] >= #"
&
StartDate
&
"# And [日期] <= #"
&
EndDate
&
"#"
如果是数值,则不需要括起来,直接使用即可。 例如假定编号列是整数型,要筛选的编号保存在全局变量Vars("编号")中:
Tables("表A").Filter = "[编号] = "
&
Vars("编号")
一定要记住表达式中的字符用单引号括起来,日期用符号#括起来,数值则不需要任何符号。 在编号为整数的情况下,有人写出了这样的代码:
Tables("表A").Filter = "[编号] = \'"
&
dr("编号") & "\'"
然后问我为什么不能执行?我想原因你应该已经知道了。
DataTable和Table都有很多属性和方法用到了表达式,我们必须掌握单引号和双引号的区别,并学会动态合成表达式,才能设计出强大而又灵活的管理系统。 贴段帮助给你,还是要多多实践,呵呵
[此贴子已经被作者于2009-6-3 11:00:23编辑过]
|