以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]过滤的 动态表达式  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=153756)

--  作者:ccner
--  发布时间:2020/8/21 17:00:00
--  [求助]过滤的 动态表达式
帮助文件有代码:

Tables("订单").Filter = "[产品] = \'PD01\'"  \'字符用单引号括起来

请问,如何用 列变量或者字符变量 替换 上面的 字符常量\'PD01\'?这样可以实现动态过滤吗?
[此贴子已经被作者于2020/8/21 17:00:49编辑过]

--  作者:有点蓝
--  发布时间:2020/8/21 17:06:00
--  

例如要计算某个产品的销售数量,要计算的产品名称由用户输入,假定输入的结果保存在全局变量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("规格") & "\'"