以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  [求助]relationrow是何函数  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=9728)

--  作者:qxwx
--  发布时间:2007/9/24 18:01:00
--  [求助]relationrow是何函数
如题

-=-=-=- 以下内容由 qxwx2007年09月24日 09:17pm 时添加 -=-=-=-
是系统变量?哪有解释?
--  作者:Czy
--  发布时间:2007/9/24 18:07:00
--  
RelationRow是变量
--  作者:wjq1072
--  发布时间:2007/9/24 22:32:00
--  
提高统计速度
尽量避免重算全表

假定我们有一个仓管系统,该系统由三个表组成,分别为进仓、出仓、结存。
显然,对于每一种产品,总的进仓数量减去总的出仓数量,就是结存数量,所以“结存”表中数量列的刷新公式为:
Sumfor("进仓", "数量", "产品", "=", [产品]) - Sumfor("出仓","数量","产品","=",[产品])

以后我们需要得到最新结存数据的时候,只需重算“结存”表即可。但是如果有5000种产品,进出仓记录有上10万条,那么重算整个结存表可能需要数十分钟才能完成,很少有人能够忍受这种漫长的等待。

下面我们来改进一下这个系统:
1、在“进仓”表和“结存”表之间、“出仓”表和“结存”表之间通过“产品”列建立关联。
2、将“进仓”表数量列的操作公式设为:
if([结存!RelationRow]>0, RecalcRow("结存",[结存!RelationRow]),True)
3、将“出仓”表数量列的操作公式设为:
if([结存!RelationRow]>0, RecalcRow("结存",[结存!RelationRow]),True)

上述公式的含义是,一旦有进出仓,就立即重算“结存”表中对应的行。这样我们在某产品有进出仓的时候,即时计算出了该产品的结存,整个结存表的数据随时都是最新的,无须在需要最新结存数据的时候去花费几十分钟重算整个结存表,效率大为提高。

避免重算操作公式

除非确有必要,否则重算表、行、列的时候,应该仅仅重算刷新公式,而避免重算操作公式。几乎所有的重算函数,包括RecalcGrid、RecalcRow、RecalcRGrid、RecalcCol都有一个可选参数,该参数如果设为1,将忽略操作公式。