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


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

主题:请教设计问题

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


加好友 发短信
等级:幼狐 帖子:109 积分:962 威望:0 精华:0 注册:2008/9/6 15:28:00
请教设计问题  发帖心情 Post By:2008/9/20 20:50:00 [只看该作者]

计划设计一个表,其中有两列为[当月收入]和[当年累计收入],当年累计收入是按当月收入进行累加的,比如说一月份,[当月收入]为2000,那么[当年累计收入]也为2000,2月份[当月收入]为3000,[当年累计收入]就为5000,以此类推.
想请教的问题:1,[当年累计收入]列是以表达式计算还是以代码来计算?
                  2,代码计算和属性事件计算,有哪些区别?
                  3,如以代码来计算,该怎么写呢?与事件的写法应该是一致的吧.
帮助基本上看完一遍,但还是不知从哪下手.烦请高手赐教.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table

[此贴子已经被作者于2008-9-21 8:00:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hbfnmxb
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:559 积分:6330 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2008/9/21 1:17:00 [只看该作者]

应该先设计一个样表,这样说,让人不好懂

 回到顶部
帅哥哟,离线,有人找我吗?
cowpoke
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:109 积分:962 威望:0 精华:0 注册:2008/9/6 15:28:00
  发帖心情 Post By:2008/9/21 8:02:00 [只看该作者]

文件已上传.
找了半天,好像函数已不能有条件的进行求和了.
[此贴子已经被作者于2008-9-21 10:06:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cowpoke
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:109 积分:962 威望:0 精华:0 注册:2008/9/6 15:28:00
  发帖心情 Post By:2008/9/21 11:37:00 [只看该作者]

自己顶一下

 回到顶部
帅哥哟,离线,有人找我吗?
chips
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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个金币奖励
(理由:好文章)
 回到顶部
帅哥哟,离线,有人找我吗?
cowpoke
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:109 积分:962 威望:0 精华:0 注册:2008/9/6 15:28:00
  发帖心情 Post By:2008/9/21 12:28:00 [只看该作者]

谢谢指点.
感觉这个狐表的代码计算好难理解,看似那个sql的命令容易理解一些,真有种滞身在河中的感觉.
真不知老六为何要把表达式的函数设置的如此简单.
[此贴子已经被作者于2008-9-21 12:29:23编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
smileboy
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 好心情 一级勋章
等级:超级版主 帖子:715 积分:5564 威望:0 精华:1 注册:2008/8/31 20:45:00
  发帖心情 Post By:2008/9/21 13:07:00 [只看该作者]

以下是引用cowpoke在2008-9-21 12:28:00的发言:
谢谢指点.
感觉这个狐表的代码计算好难理解,看似那个sql的命令容易理解一些,真有种滞身在河中的感觉.
真不知老六为何要把表达式的函数设置的如此简单.
[此贴子已经被作者于2008-9-21 12:29:23编辑过]

不是老六,而是微软就这些函数


 回到顶部
美女呀,离线,留言给我吧!
狐仙
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:53 积分:404 威望:0 精华:1 注册:2008/9/10 13:52:00
  发帖心情 Post By:2008/9/21 13:19:00 [只看该作者]

老六能不能自己写一点函数加上去呢?

不要一动不动就说易表是个特例,不能做一个与易表一样简单的狐表了。

图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
cowpoke
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:109 积分:962 威望:0 精华:0 注册:2008/9/6 15:28:00
  发帖心情 Post By:2008/9/21 23:03:00 [只看该作者]

我也这样想呢,那些代码都可以搞出来,为何就搞不出个函数来呢.就光一个for条件的函数,用代码得一大摞,而函数简单明了.

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/9/22 8:32:00 [只看该作者]

以下是引用狐仙在2008-9-21 13:19:00的发言:
老六能不能自己写一点函数加上去呢?

不要一动不动就说易表是个特例,不能做一个与易表一样简单的狐表了。

图片点击可在新窗口打开查看


这个函数谁也加不了,除非不用表达式列,要加函数只能微软加的了。
再说5楼的代码其实并不复杂啊,而且不管那种方案,效率都比易表高多了。


 回到顶部