有没有一个能够快速处理大数据集的DBGrid组件?

3
大型数据集,数百万条记录,需要特殊编程才能在DBGrids中保持速度。 我想知道是否有任何现成的Delphi组件(DBGrids)可以自动完成这项工作?
例如:一些数据库具有获取前X个记录(例如100个记录)的功能。 当我向下滚动到底部时,我希望自动获取下一个100个记录。 相反,当我到达开头时,我希望获取前面的100个记录。 我知道我可以编写程序来实现此目的,但将该功能传播到DBGrid控件肯定是可能的,从而使DBGrid进行缓冲。 这将节省相当多的编程工作 - 您只需设置“缓冲区大小”即可。
5个回答

4
你可能想要看一下奇妙的(免费、开源、双重许可证为MPL 1.1和GPL,因此可用于闭源应用程序)Virtual TreeView及其用户提供的后代(向下滚动页面查找这些内容)。
编辑以反映问题的编辑:Virtual TreeView不仅允许您处理数百万个节点而无需将它们保存在内存中,而且实际上这是使用它的首选方式。当需要数据时,您通过事件回调提供数据,并且可以告诉树缓存该数据(或不缓存)。
哦,当然它还有一个网格/报表模式,可以作为表格运行(只需将GridExtensions属性设置为True)。

3
NextGrid是一款适用于Delphi的轻量级、快速且外观优美的网格控件。
处理大量单元格时,NextGrid可以在不降低速度的情况下处理非常大量的单元格。添加、修改和删除数据的速度不取决于单元格数量。在NextGrid演示中,您可以看到NextGrid如何快速处理100,000行和10列= 1,000,000个单元格。详情请见:http://www.bergsoft.net/component/next-grid/features.htm

3
我建议您查看 Developer Express QuantumGrid Suite。 (@birger: 你刚刚比我快了一点;-) ) 那么,我不只是重复答案,这里有更多的解释:
DevExpress Grid使用数据控制器来控制绑定到网格的数据,其中之一就是您要查找的模式:
引用: 当使用网格模式时,仅将固定数量的数据集记录加载到内存中。因为只检索了数据集的有限记录集,所以在网格模式下禁用自动排序、过滤和汇总计算(必须手动控制)。默认情况下,此模式处于禁用状态,并且ExpressDataController加载数据集中的所有记录。
它确实有一些缺点,这些缺点似乎很明显:如果您没有所有记录,您就无法进行摘要、排序或过滤。

谢谢您提供这个信息,通过谷歌很难找到。 :) - Johan Bresler
感谢您指出DevExpress产品的缺点(无法过滤、排序和汇总),尤其是它比这里提到的其他替代品要贵得多。而且这个缺点并不明显——这些虚拟数据集的整个重点在于服务器端完成了大量工作;控件只是操作SQL以便通过网络拉取所需数据。 - DarthGizka

2

1

抱歉,我刚看到你对Neftalí的评论。

如果您想每次获取100条记录,然后获取下一个100条,这项工作涉及数据库访问组件,请查看devart组件,它们提供直接访问大多数常用数据库的组件,并且具有您所要求的功能和更多:

http://www.devart.com/products-vcl.html


我希望DBGrid进行缓冲。 - Johan Bresler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接