以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [讨论] 关于填充器 New Filler 里面的筛选条件 filter 中引用全局变量,如何写代码? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=3679) |
-- 作者:wcs -- 发布时间:2009/7/23 15:26:00 -- [讨论] 关于填充器 New Filler 里面的筛选条件 filter 中引用全局变量,如何写代码? 我写了这样一段代码: dim dqpz As New Filler dqpz.SourceTable = DataTables("会计凭证查询") \'指定数据来源 dqpz.SourceCols = "sszt,pzrqn,pzrqy,pzrqr,pzlx,pzdm,flxh,pzzy,kmdm,jdfx,flje,cjyh,fdzs" \'指定数据来源列 dqpz.DataTable = DataTables("会计凭证") \'指定数据接收表 dqpz.DataCols = "账套编号,年,月,日,pzlx,凭证编号,flxh,凭证摘要,科目代码,jdfx,flje,制证人,附件张数" \'指定数据接收列 dqpz.ExcludeExistValue = true dqpz.ExcludeNullValue = true dqpz.Distinct = true dqpz.filter ="pzrqn = "& vars("kn") & "and pzrqy <= "& vars("ky") & "and pzrqy >= " & vars("jy") & "pzrqr <= "& vars("kr") & "and pzrqr >= " & vars("jr") dqpz.Fill() \'填充数据系统提示dqpz.filter 有误,我删除就好了。 我想可能是双引号和单引号的问题。 请教各位! |
-- 作者:shxiaoya -- 发布时间:2009/7/23 15:38:00 -- dim dqpz As New Filler dqpz.SourceTable = DataTables("会计凭证查询") \'指定数据来源 dqpz.SourceCols = "sszt,pzrqn,pzrqy,pzrqr,pzlx,pzdm,flxh,pzzy,kmdm,jdfx,flje,cjyh,fdzs" \'指定数据来源列 dqpz.DataTable = DataTables("会计凭证") \'指定数据接收表 dqpz.DataCols = "账套编号,年,月,日,pzlx,凭证编号,flxh,凭证摘要,科目代码,jdfx,flje,制证人,附件张数" \'指定数据接收列 dqpz.ExcludeExistValue = true dqpz.ExcludeNullValue = true dqpz.Distinct = true dqpz.filter ="pzrqn = \'"& vars("kn") & "\' and pzrqy <= #"& vars("ky") & "# and pzrqy >= #" & vars("jy") & "# pzrqr <= #"& vars("kr") & "# and pzrqr >= #" & vars("jr") & "#" dqpz.Fill() \'填充数据[此贴子已经被作者于2009-7-23 15:39:45编辑过]
|
-- 作者:wcs -- 发布时间:2009/7/23 15:46:00 -- # ?? 都是整数型的,不是日期型的! |
-- 作者:yangming -- 发布时间:2009/7/23 15:47:00 -- dqpz.filter ="[pzrqn] ="& vars("kn") and "[pzrqy] <= "& vars("ky")and "[pzrqy] >= "& vars("jy") and "[pzrqr] <= "& vars("kr") and "[pzrqr] >= "& vars("jr") |
-- 作者:wcs -- 发布时间:2009/7/24 8:30:00 -- 为什么要这样子写呢? |
-- 作者:yangming -- 发布时间:2009/7/24 9:14:00 -- 看黄色背景处 不少初次接触编程的用户,对于何时使用双引号,何时使用单引号,感到非常困惑。 其实很简单,代码中的字符串都是用双引号括起来的。 例如: Dim s As String 而单引号主要用于表达式,表达式可以用于计算、筛选。 例如: 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 Compute的第二个参数为计算条件表达式,该表达式分为三部分: "[产品] = \'" & Vars("产品") & "\'" 假定全局变量Vars("产品")的值为PD01,组合三部分的内容后,这个表达式就等效于: "[产品] = \'PD01\'" 假定表A和表B都有品名、型号两列,我们在表A中选择了一行,希望从表B中找出相同品名、规格的行: Dim dr1 As DataRow = Tables("表A").Current.DataRow 上面代码的最后一行,初看非常难以理解。 "[品名] = \'要找品名\' And [规格] = \'要找的规格\'" 其中红色的部分要被dr1中的实际的品名和规格代替,所以最终的表达式成了: "[品名] = \'" & dr1("品名") & "\'And [规格] = \'" & dr1("规格") & "\'" 上面都是用字符型的值作为例子,表达式中字符型的值要用单引号括起来。 Dim StartDate As Date
\'起始日期变量 如果是数值,则不需要括起来,直接使用即可。 Tables("表A").Filter = "[编号] = " & Vars("编号") 一定要记住表达式中的字符用单引号括起来,日期用符号#括起来,数值则不需要任何符号。 Tables("表A").Filter = "[编号] = \'" & dr("编号") & "\'" 然后问我为什么不能执行?我想原因你应该已经知道了。 DataTable和Table都有很多属性和方法用到了表达式,我们必须掌握单引号和双引号的区别,并学会动态合成表达式,才能设计出强大而又灵活的管理系统。 |
-- 作者:wcs -- 发布时间:2009/7/25 0:36:00 -- 数值型的,好理解!但是字符型和日期型就有这样的情况: [此贴子已经被作者于2009-7-25 0:36:58编辑过]
|
-- 作者:yangming -- 发布时间:2009/7/25 9:52:00 -- 我的理解,全局变量不论是什么类型都是这样:Vars("编号") [此贴子已经被作者于2009-7-25 9:53:47编辑过]
|