捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:使用原生ADO对数据进行分页显示
litterhawk 30683 2007/8/4 14:19:32
C/S和B/S还是有很多不同的,在delphi里你可以用Visual ListView的方式去分页啊,每次调用SQL语句取得客户端能看到的一部分。这样可以吗?那么用dbexpress呢?
lczh8420 29454 2007/5/16 16:03:41
这样效果是一样的.没有达到分页的最终目的.
因为你使用的方法其实已经一次性把10万条数据取出到adotable了.所以在取出10万条记录时候所花的时间是不变的.而且取出10万条数据到应用端的内存消耗一样.只是显示的方式不一样罢了(修改pagesize的效果相同).
最好的办法是使用存储过程写分页.
lijianfu 25654 2006/8/25 15:46:34
都是MS惹的祸,用MYSQL作库算了!
jasonmale 25328 2006/8/8 17:22:15
为了探讨楼主技术方面的可行性,我把我原先使用的方法修改成使用楼主的方法(基本上使用的都是ADO原生代码,我也下了一个ADO帮助文件研究了一下),然后在后台建立一个表,插入了100多万笔记录,当在浏览第一页时(我基本不去取pageCount,仅仅设定PageSize,取PageCount会更慢,这里仅仅测试OPEN),系统战用内存还能接收,虽然比较大。但速度真的不能忍受,除非把后台数据服务器修改为IBM小型机,并且内存足够大。
所以我个人认为,对于小型数据资源,楼主介绍使用ADO自己的分页技术也可行,但对于海量数据处理、服务器比较差或者网络连接比较少(非INTERNET)的的情况,就谨慎使用了。

顺便说一句,大家讨论技术可以,就事论事。当然楼主批评鄙人的一些观点,我接受,因为可能老了,往往会用经验去下结论,这是不对的,我们学习技术,要多去实践,才能在实践中学会很多。感谢各位的技术探讨,永不认输的精神值得我们学习,我们用提倡用实践去证明一切可能。
共勉!
kinneng 25289 2006/8/6 5:24:31
to cjrb
用StringGrid显示十万条可以做到跟十条的时间没有分别,关键就是当前显示什么数据
就填充什么数据进StringGrid的数据缓冲区Stringlist,这点DBGrid做的最好,就算是
亿万条数据,它也只取当前显示的几条,速度快慢是数据库的事。
kinneng 25287 2006/8/6 5:02:13
我要的就是VCL那种效果,原生ADO要得到这效果,就要加上很多楼主觉得讨厌的东西,
还是省点心用VCL算了,以免客户觉得软件弱智不收货,就麻烦了,Eof是出界标志,
将当前行移到最后一行,并不触发Eof,只有继续往下移,出错之后,Eof才会触发,
Bof 也是这样。
cjrb 25252 2006/8/4 9:06:10
这种分页也是有好处的

用StringGrid显示十万条跟十条的时间也差很多

看环境,看数据量,看应用,

每一种都有其优劣。
yaoyl 25243 2006/8/3 15:48:48
靠,两位高手在华山顶峰论剑啊,让我等菜鸟学习了.
cljcyd 25238 2006/8/3 10:25:53
鼓励发贴,支持发表不同意见,BS打击发贴者。
vvyang 25236 2006/8/3 9:54:28
To jasonmale:
  也谢谢您在 6 楼的回复,如果言语不敬还请包涵。您说的方法我是会的,我的这个帖子仅仅是讨论ADO的分页机制,没有想代替其他方法的意思,不要误解。毕竟分页已经成为 ADO 的一个属性,应该还是有它的用途的。
vvyang 25235 2006/8/3 9:45:12
To szkingrose:
  谢谢您的回复,我认同您的看法,这种方法确实不能提高查询效率(我在3楼的回贴中已经说明),而且ADO分页的本质仅仅是游标的移动,没有太多的技术含量;我发这个贴只是想让更多的人关心一下原生的ADO,因为 Delphi 的 ADOExpress 并不完整,更没有代替其他方法的意思,不要误解,呵呵。
vvyang 25234 2006/8/3 9:38:33
To zbluecn:
  貌似“和疯狗一样咬着不放”的人是阁下哦,我已经说了停止攻击,可是您还在后面连发4个贴,您是君子,真正的伪君子...
  我现在正在打疫苗,因为被 zbluecn 咬了,呵呵...
szkingrose 25232 2006/8/3 9:01:52
这种做法效率并不高,也是客户端取出了全部数据。
真正的做法是在服务器端就可以取出数据,而不是在客户端分页,分页只是一个实现方式,不是手段和技术。
我们谈技术,不谈别的。
楼上楼的和楼主不要吵了。
认同顶一下,不认同心里BS一下吧,也不见得人人都是高手,对吧。
也没有必要相互踩别人,握手一下吧。
szkingrose 25231 2006/8/3 9:00:24
  rst.Active := True;
  rst.Recordset.PageSize := PAGE_SIZE;
  sgData.ColCount := rst.FieldCount + 1;
  for i := 0 to rst.FieldCount - 1 do
  begin
    sgData.ColWidths[i + 1] := rst.Fields[i].DisplayWidth * Canvas.TextWidth('0');
    sgData.Cells[i + 1, 0] := rst.Fields[i].DisplayName;
  end;
  sgData.Cells[0, 0] := '序号';
  PageNo := 1;

这种做法效率并不高,也是客户端取出了全部数据。
真正的做法是在服务器端就可以取出数据,而分在客户进行分页。
我们谈技术,不谈别的。
楼上楼的和楼主不要吵了。
认同顶一下,不认同心里BS一下吧,也不见得人人都是高手,对吧。
也没有必要相互踩别人,握手一下吧。
zbluecn 25222 2006/8/2 16:40:59
我不是说我错了吗 
怎么还和疯狗一样咬着不放阿
得了 您爱怎么回怎么回 我是不说话了。
这是我对这篇文章的最后一个回复。
在这之前我以为那个。。充其量是个小人,没有想到竟然是动物!
小人我还可以反驳,但是对于动物来说 被狗咬了难道还能咬回去吗

我在也不回复了。。呵呵 我认输!!
vvyang 25221 2006/8/2 16:02:06
To zbluecn:
  我说了停止相互攻击,您怎么给脸不要脸啊...
vvyang 25220 2006/8/2 15:59:04
To jasonmale:
   您凭什么就认为那是我的“技术出处”呢?我手头有一个 ADO21.chm 的帮助文件(Office 自带),我参考这个帮助文件是不是也不对啊?貌似 ADO21.chm 比您找到的那个还详细的说。
  我在说明里也说了,分页是编写 ASP 的一项简单技巧,网上到处都是,那我的程序的“出处”多了去了。
  据说您搞 IT 十几年了,怎么如此...呵呵,仅供参考...
zbluecn 25219 2006/8/2 15:03:13
原来楼主是<快速创建树的方法 (抛弃拙劣的数据库结构和算法)>文章的作者阿
http://www.2ccc.com/article.asp?articleid=2878
早知道我就不会贴了,我真的是自讨苦吃。 

我真的是错了 我不应该在没有看作者是谁的前提下回复!
我想jasonmale也没有注意搂住的第一个作品。如果他看了,我想也不会恢复巴!

to jasonmale
用时间看看 http://www.2ccc.com/article.asp?articleid=2878
我想对你是有一定的启发的
jasonmale 25217 2006/8/2 14:40:15
楼主的技术出处:
http://www.microsoft.com/china/msdn/archives/technic/voices/server05222000.asp
呵呵,仅供参考
zbluecn 25215 2006/8/2 12:06:55
呵呵 不吵了,细细有这个时间还不如看书呢。

玩Wow去了
第一页 上一页 下一页 最后页 有 41 条纪录 共3页 1 - 20
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表