Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
计划设计一个表,其中有两列为[当月收入]和[当年累计收入],当年累计收入是按当月收入进行累加的,比如说一月份,[当月收入]为2000,那么[当年累计收入]也为2000,2月份[当月收入]为3000,[当年累计收入]就为5000,以此类推.
想请教的问题:1,[当年累计收入]列是以表达式计算还是以代码来计算?
2,代码计算和属性事件计算,有哪些区别?
3,如以代码来计算,该怎么写呢?与事件的写法应该是一致的吧.
帮助基本上看完一遍,但还是不知从哪下手.烦请高手赐教.
下载信息 [文件大小: 下载次数: ] | |
点击浏览该文件:管理项目2.table |
建议收入明细表不要再增加“当月收入、当年累计收入”列,可通过其它方式单独建表后计算。另外,此处不宜用事件解决。因为这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(日期)
以上没经过测试,只是提出来供大家研究一下。谢谢!
不是老六,而是微软就这些函数
这个函数谁也加不了,除非不用表达式列,要加函数只能微软加的了。
再说5楼的代码其实并不复杂啊,而且不管那种方案,效率都比易表高多了。