使用计算字段速度太慢了,有没有办法改进呢? (100分)

J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个录入界面,是用DBGRID搞得,内容基本如下:

编码 名称 价格 数量 金额

在这个表单里只有编码和数量(我只需要输入编码和数量即可),
于是我在ADOQuery里设了三个计算字段,以放名称和价格,金额通过计算得到,
在编码字段的ONCHANGE过程里写代码取得名称和价格(分别在不同的表)。当只有
几条记录时还看不出来,记录数一多,特别是我需要通过遍历这个表取得合计金额,
速度简单不能忍受,请问有什么好的办法解决吗?

注:我不能用SQL取得合计金额,因为我的ADOquery是用的批量存贮的方式进行的,
在没有点击存盘之前,这些记录是不会存到数据库里的。而我的合计值需要每次录入或
修改都要时时计算。
 
我发现速度之所以慢是出在名称以及价格值的取得上,这两个值分别在不同的表。
至于遍历统计合计金额,速度并不慢,五、六十条记录都在可忍受的范围内。

 
你把编码字段加上索引,既然要查询它.
 
to xeen:肯定有索引啊,名称字典表,价格字典表都有索引的。

而且问题好象也不是说这些查询语句慢,如果我只需查询一次,然后把值“赋”给这些计算
字段,速度就不会慢的,可我试了一下,在编码字段离开后执行查询过程再
fieldbyname('Temp_namefield').text := vname;
好象是可以了,可一移动记录值就不在了,发现计算字段是每次刷新都要去取值,
否则就......,估计这就是速度慢的主要原因了,执行了大量重复的查询语句。

可我怎么解决呢?各种办法试了几个小时都没折。又不能用临时表的办法解决,:(。
 
而且这个计算字段会时时要去计算,烦啊。比如:
我输入第一个编码1001时,执行过程得出品名链条,单价38.50,然后我APPEND一条记录
它又要去执行一遍过程...........
 
没人理我?
让我自个自娱自乐?
 
把名称、价格关联起来建一个视图。可以提高速度。
 
把 dataset.AutoCalcFields设为False也能好点.
 
既是用ADOQuery,直接将计算在其SQL语句中完成不就行了。
select a.编码,b.名称,c.价格,a.数量,(a.数量*c.价格) from 数量表 a,名称表 b
价格表 c where a.编码=b.编码 and a.编码=c.编码
 
还是老实点用程序来解决吧!
 
多人接受答案了。
 
顶部