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去了 |