delphi实现dbgrideh点击列自动排序

相关组件:dbgrideh,adoquery,datasource,adoconnection

dbgrideh控件本身是支持点击列自动排列的,只要设置dbgrid.optionseh.dghautosortmarking:=true,同时设置所需实现点击自动排列的列的属性dbgrideh.columns[i].title.titlebutton:=true就可以实现了!

但是,如果数据量达到2万条,估计就会出现查询超时的状况!这就引出另外一个问题,adoquery.sql的问题了!

如果adoquery.sql里SQL语句所查询的数据量达到2万条(经我自己测试,数据2.7万)直接在grideh里显示出来的时间大概要3.4秒,如果adoquery.sql里在加上order by排序,就会超时!若筛选数据到1.5w左右就会很快,大概1到2秒就可以了

如果我在adoquery.sql里不加order by语句,而选择在adoquery.action:=true;后边加上:adoquery.sort := ’列名 DESC/ASC‘,那基本上2.7w数据量的查询时间会大大缩短!

可以用一个memo来显示查询前跟查询后,使用adoquery.sort与直接使用dbgrideh排序后adoquery.sql里的SQL语句变化,你就会知道为什么数据量多大2万的时候,dbgrideh的自动排序会超时了!那就是dbgrideh的自动排序是建立在动态修改SQL语句的基础上的!

所以,如果数据量少的,可以直接使用dbgrideh带有的排序就可以了,如果数据量大了,就得码代码了!代码很简单

在dbgrideh的ontitlebtnclick里加入以上代码就ok了,把dbgrid.optionseh.dghautosortmarking:=false,当然,不设置都可以(用if或者case都可以)!

各位大神有什么不同的建议意见,都可以发表~欢迎指教~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值