主表AfterScroll事件中加入:dbgrideh2.SumList.RecalcAll后dbgrideh2显示变得好慢(回必给份)(100)

  • 主题发起人 主题发起人 zhengjp
  • 开始时间 开始时间
Z

zhengjp

Unregistered / Unconfirmed
GUEST, unregistred user!
主从表设计,用ADOdataset实现,从表用dbgrideh显示,为了统计我在主表ADOdataset的AfterScroll事件中加入:dbgrideh2.SumList.RecalcAll;当从表数据快到10万条的时候,显示变得有点慢.尤其是先点一下主表的“最后一条”,在去点“上一条”或其它记录时,dbgrideh显示数据非常慢,可以清楚看到数据在慢慢显示,但把AfterScroll事件中dbgrideh2.SumList.RecalcAll去掉就OK!各位像这处情况如何处理!
 
滚动一次都要计算那么多,不管怎么用都会慢的如果把统计单独放到一个线程里,这样就不影响dbGrid的显示了
 
没有人遇到这个种情况吗?应当不可能,从表到10万是很正常的情况撒..
 
你把dbgrideh2.SumList.RecalcAll放到其它地方,比如DBGridEh1SelectionChanged~~1楼说的正确~~
 
TO:LoveHui 滚动一次计算那么多是什么意思?就算你点主表最后一条,dbgrideh2.SumList.RecalcAll也只计算一次从表,这时从表最多也就30多条记录撒!
 
楼主理解错误了~~你设置断点追踪一下AfterScroll事件下的代码肯定执行了不止1遍!
 
这种情况,最好的处理办法是在进入AfterScroll事件中,先屏蔽掉当前事件,执行完后再恢复。
 
1)各位,像你们在做表单的形式的界面时,表格的最下一行都是合计数撒!用dbgrideh控件的话,要想合计数随主表变化只有在AfterScroll事件中加入:dbgrideh2.SumList.RecalcAll还有别的方式吗?2)"楼主理解错误了~~你设置断点追踪一下AfterScroll事件下的代码肯定执行了不止1遍!"我用showmessage('a')跟踪了一下,点一下最后条,只显示了一次喔!可能我对控件了解不够!期等你们的建议!
 
楼主的问题,如果不是数据集本身的AfterScroll引起,也是另外的事件引起大量的重复计算,产生的慢。你应该跟踪测试,当dbgrideh2.SumList.RecalcAll时,会触发数据集的什么事件,再把他屏蔽。
 
To:獐子岛 首先:thanks跟有多个从表有关系吗?我一个主表联了最少5个从表,每个从表最少有30多条记录!用adoquery控件会不会比ADOdataset好一些?AfterScroll件件中就只有:{dbgrideh3.SumList.RecalcAll;dbgrideh2.SumList.RecalcAll;dbgrideh4.SumList.RecalcAll;}把这段去,测试快多了~奇怪的是:把这段去掉后,点一下最后一条,或拖动很多主表数据,可感觉得到grideh变慢!但不是太慢,呵呵
 
AfterScroll件件中:ADOdataset1.DisableControls;dbgrideh3.SumList.RecalcAll;dbgrideh2.SumList.RecalcAll;dbgrideh4.SumList.RecalcAll;ADOdataset1.EnableControls;
 
加DisableControls;EnableControls; 效果一样这两个方法有什么作用?
 
DisableControls方法 是在程序修改或后台有刷新记录的时候切断数据组件,如TTABLE、ADOQUERY等等与组件数据源的联系。如果没有切断,数据源中只要一有数据的改动,尤其是批量改动的话,每一笔的改动都会更新窗口中数据浏览组件的显示,这样会急剧减慢处理过程而且浪费时间。EnableControls的作用相反,用来恢复TTABLE等组件与DATASOURCE的联系,并促使数据浏览组件更新显示。
 
TO:de410 谢谢了!我把其中一个从表断开掉了,程序就飞快了!这个从表有8万多条记录!你在做主从表时是怎么来做的!像从表多而且每个从表的记录也多的时候,有什么建议!如果不行我可能考虑清除一些记录,或比较多的表用存贮过程试一下,把任务分担到服务器上,看结果怎么样
 
思路和你差不多,只是没在afterscroll中处理过什么动作~~
 
你用的表格控件是什么,是不是grideh在处理大量数据时有问题?不用那个语句,就是刷新不了汇总数据!我在主表的afterscroll是也就处理那个一个动作.从表没有任何动作
 
我用的是dbgrid,功能比较单一~~试试在dbgrideh2.DataSource的DataSourceDataChange下处理~~
 
我查看了一下别的表单,如果主从表,从表比较少的没有问题! 我这个界面从表比较多~算了结贴了!非常感谢各位的参与~~
 
多人接受答案了。
 
后退
顶部