Foxtable(狐表)用户栏目专家坐堂 → 请教设计问题


  共有23007人关注过本帖树形打印复制链接

主题:请教设计问题

帅哥哟,离线,有人找我吗?
chips
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:9 积分:135 威望:0 精华:0 注册:2008/9/12 23:05:00
  发帖心情 Post By:2008/9/21 12:15:00 [显示全部帖子]

我没打开FOXTABLE进行测试,只是针对你的问题描述谈谈:

建议收入明细表不要再增加“当月收入、当年累计收入”列,可通过其它方式单独建表后计算。另外,此处不宜用事件解决。因为这2列不是简单地从当前行记录其它字段直接计算而来,而是根据当前表的日期范围累计计算的,不能在事件中(比如DataColChanged事件) 中设置代码一触发而牵动全身,数据量大时,速度就很慢。

 

有多种方法:
1、手工利用FOXTABLE本身自有功能,直接在表中对日期进行分组,可以增加一个日期分组,分组类型设为“月”,这样每月的累计和总累计都有了,也不用表达式,不用代码,也不用事件处理。

2、利用分组统计表生成器完成统计:在命令窗口可以使用,也可以在菜单和窗体按钮中设置。

Dim b As New GroupTableBuilder("统计表1",DataTables("收入明细表"))
b.Groups.AddDef("日期",DateGroupEnum.Year,"年") '添加日期列用于分组,并用"年"代替原名称
b.Groups.AddDef("日期","月") '添加日期列用于分组,并用"月"代替原名称
b.Totals.AddDef("收入") '添加收入列用于统计
b.Build '生成统计表
MainTable = Tables("统计表1") '打开生成的统计表


3、FOXTABL表达式的聚合函数Sum(求和)功能较弱,没有条件汇总功能,只是可以统计汇总关联子表数据,比如Sum(Child.数量),所以可改用计算代码统计,这样就需要另建立一个表,包含“年份、月份、当月收入、当年累计收入”4个字段列。年份、月份可以手工填入,也可以通过设置按钮等的事件自动填入,在当月收入、当年累计收入中设计算代码进行计算即可。计算代码设为:

e.DataRow("当月收入") = DataTables("收入明细表").Compute("Sum(收入)","[日期] >= #" & Date([年份], [月份],1)  & "# and [日期] <= #",& Date([年份], [月份], DaysInMonth([年份], [月份])) & "#")

e.DataRow("当年累计收入") = DataTables("收入明细表").Compute("Sum(收入)","[日期] >= #" & Date([年份], 1,1)  & "# and [日期] <= #",& Date([年份], [月份], DaysInMonth([年份], [月份])) & "#")

4、不管是内表还是外部数据源,都可以通过建立SQL查询表得到查询结果。比如:

SELECT Year(日期)AS 年, Month(日期) AS 月, SUM(收入) AS 月收入  FROM {收入明细表} GROUP BY Year(日期), Month(日期)
以上没经过测试,只是提出来供大家研究一下。谢谢!

[此贴子已经被作者于2008-9-21 13:14:35编辑过]

版主评定:好评,获得10个金币奖励好评,获得10个金币奖励
(理由:好文章)
 回到顶部