我在做一程序时,用到了TIMER控件定时扫描数据库SQL SERVER(1秒),但是中间执行时间有时不止一秒,我就在TIMER的ONTIMER时间中写了这么一段
TRY
TIMER.ENABLE:=FALSE
FINALLY
TIMER.ENABLE:=TRUE
这样解决了上一次数据库操作还未结束,下一次操作有进来的问题。
现在我想问的是:我在TRYFINALLY中用ADO访问,但是如果在一次查询数据库的时候,由于数据量大(40万条数据),时间耗费比较多(1分钟左右),我的整个界面就好象死了一样,没有反映了。我怎么办?
TRY
TIMER.ENABLE:=FALSE
FINALLY
TIMER.ENABLE:=TRUE
这样解决了上一次数据库操作还未结束,下一次操作有进来的问题。
现在我想问的是:我在TRYFINALLY中用ADO访问,但是如果在一次查询数据库的时候,由于数据量大(40万条数据),时间耗费比较多(1分钟左右),我的整个界面就好象死了一样,没有反映了。我怎么办?
解决方案 »
- 动态创建的TImage,在关闭窗体时候报错,请问如何解决
- 请教一个计算面积的算法问题
- 弱问如何在程序中集成windows的或google的桌面搜索或如何实现文件内容搜索功能?
- 在李维Delphi2006讲座会上发的试用盘竟然是张空盘!!!!!!!!!
- 自动连接到服务器
- Delphi 8.0中出现的新问题??菜鸟提问!高手请回答!!
- 在导入控件时遇到问题,请帮忙看看。。
- 我在修改dataSet是老是提示:readonly dataset??!!!!
- 怎样确定Tcombobox选中了哪个ITEM STRING?
- 我有一问。
- 讨论:perform(),sendmessage(),postmessage()区别
- TClientDataSet在增加时出错!!急!!
1、不要一次获取太多的数据40万条。就是400条人处理还需要很长的时间,所以你每次最好处理一小部分数据。
2、如果操作的数据与前台没有交互,那么使用存储过程处理,这样可以充分利用服务器的资源。
3、如果想前台有响应,你可以考虑使用多线程操作数据库,这样你的前台就不会没有相应了。
4、如果操作频率很标准,最好通过服务器端机型处理。在中可以内建的JOB功能让数据库自动去完成操作,根本不需要人为干预,不知道SQL Server中有没有类似的功能。
5、如果表的记录总在不但的增加中,那么最好定期重构索引,这样也能提高效率。
但如果你一定要这样做的话,我有两种方法:
1.用多线程去完成操作(如果你特别需要的话)
2.在作AdoQuery.Open之前让应用程序交出控制权(Application.HandleMessage),处理完费时的操作后再归还控制权(Application.ProcessMessage)
注意数据同步的问题。
他能节省时间
速度能提高一些
你也可以用一些加速语句
比如
with等