Office中国论坛/Access中国论坛

标题: 合计类别为“01”记录的数量,如何做? [打印本页]

作者: aydl1014    时间: 2005-9-30 00:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: LucasLynn    时间: 2005-9-30 03:49


=Sum([数量]*([记录类别]="01")*(-1))

但是效率不见得比DSum高,域聚合函数的效率还是很不错的。

[此贴子已经被作者于2005-9-29 19:49:40编辑过]


作者: aydl1014    时间: 2005-9-30 18:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: LucasLynn    时间: 2005-9-30 19:54
以下是引用aydl1014在2005-9-30 10:23:00的发言:

我是这样想的,打开窗体显示的记录是经过筛选得来的,这一步已经筛选过一次了。再在“窗体页脚”中加个文本框筛选数据源表所有记录并挑出类别为“01”的数量进行合计,又重复筛选一次。这样当数据源表记录多的情况下,打开这个窗体时会很慢。

目前这个窗体打开已经很慢了。所以我想打开窗体时筛选一次,然后在这一次筛选出的记录上合计它的“01”类别的数量。

既然=Sum([数量]*([记录类别]="01")*(-1))不比Dsum高,那我还是想想其他方法吧,比如增加“临时表”。

不管如何,先谢谢你!



因为Sum正是从当前记录集中获取数据。如果是你描述的这种情况,报表本身的数据是整个域一个很小的子集,那么Sum的执行效率完全可能超过DSum。你可以尝试一下采用Sum,然后在大数据量环境下进行一个对比测试,看看效果如何。

另外,窗体打开慢并不一定是因为DSum,DSum采用了优秀的算法,我和cg1版主曾经在10万条记录的数量级上进行过测试,发现DSum的执行效率比我们预计中要高得多,我和cg1的结论是在Access应用级别上(百万记录之内),DSum完全够用了,如果程序速度慢,很有可能是别的原因造成的,比方说算法上的问题。

[此贴子已经被作者于2005-9-30 11:56:20编辑过]


作者: aydl1014    时间: 2005-9-30 19:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: LucasLynn    时间: 2005-9-30 20:02
以下是引用aydl1014在2005-9-30 11:59:00的发言:



可能稍快一点,不过感觉不太大。

我新增加了一个分类别汇总查询,从这个查询中取值,稍好一点。

呵呵,想省劲没成功!

谢谢回复!



是的,DSum本身效率就很高,占用的计算时间很少,再怎么优化也不会有太大的感觉。

如果你的程序还是很慢,可以试着发上来(保留少量样本数据),让大家帮你分析一下效率的瓶颈在哪里。
作者: aydl1014    时间: 2005-9-30 23:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: LucasLynn    时间: 2005-9-30 23:42
以下是引用aydl1014在2005-9-30 15:39:00的发言:



哦,不用了,我学Access都是用在工作中,说句不谦虚的话,是给我们现在用的“业务系统”打补丁。这套程序查询很多,但是真正实用的查询就很少,太多时候需要自己导成EXCEL自已整理。

“业务程序”后台数据库是SQL Server2000,主要数据表中的记录实在很多。我以链接表的方式连过去,所以每次处理时,需要筛选大量数据(以订单表为例,需要先把订单主表和订单明细表通过“订单ID”联合起来,再筛选出本月的订单。要知道,我们一天的订单大概在10000份,每份订单平均有六行记录,即六个品种)。所以我做的东东以这些表为数据源,就会慢一些。如果再在这个窗体上再筛选,就更慢了。

你用的Access 2000还是2003?如果要用链接表,最好用2002以后的版本,因为微软公布过2000存在链接表效率低下的BUG。
作者: aydl1014    时间: 2005-10-1 00:51
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3