Delphi fetchondemand在clientdataset中不工作

Delphi fetchondemand在clientdataset中不工作,delphi,fetch,delphi-xe5,client-dataset,Delphi,Fetch,Delphi Xe5,Client Dataset,拥有一个xml格式的500.000记录数据库,尝试在xe5 Delphi 64位应用程序(ClientDataSet)中使用。如果我完全阅读它,它需要超过4GB的内存。尝试使用fetchondemand=False和PacketRecords=5000属性(如文档所述),但根本不起作用。应用程序对这些更改不敏感。有人能帮我吗?感谢所有阅读我的问题并试图帮助我的人。最后,我找到了一个演示,其中清楚地解释了机制。解决方案非常简单:当需要使用fetchondemand时,必须涉及两个数据集,以限制使用

拥有一个xml格式的500.000记录数据库,尝试在xe5 Delphi 64位应用程序(ClientDataSet)中使用。如果我完全阅读它,它需要超过4GB的内存。尝试使用fetchondemand=False和PacketRecords=5000属性(如文档所述),但根本不起作用。应用程序对这些更改不敏感。有人能帮我吗?

感谢所有阅读我的问题并试图帮助我的人。最后,我找到了一个演示,其中清楚地解释了机制。解决方案非常简单:当需要使用fetchondemand时,必须涉及两个数据集,以限制使用的内存。具有默认设置(True和-1)的第一个数据集指向XML数据库,数据提供程序指向此数据集,第二个数据集(其fetchondemand属性设置为False,数据包设置为在一个数据包中提取的所需记录号)指向数据提供程序,数据感知网格只指向第二个数据集。程序员必须使用GetNextPacket过程编码分页机制,以便用网格解析整个XML数据库

很抱歉用这样一个愚蠢的问题打扰你,希望答案能帮助所有像我一样不清楚这个机制的人

再次感谢大家,


Laszlo

你能编辑这个并发布一些代码来重现这个问题吗?你确定你的意思不是FetchOnDemand=True(让CD注意到PacketRecords的正值)?无论如何,我可能是错的,但我不希望这些属性中的任何一个会影响从XML加载数据,因为我认为获取记录是由与CD相关联的提供程序介导的,我认为提供程序不会参与从XML加载。@MasonWheeler认为不需要任何代码,因为如果我加载所有记录,应用程序就会工作。我的问题是“只”使用内存,这就是为什么我想控制一条记录要加载多少条记录fetch@Laszlo:你也可以张贴;设计模式保存为DFM文件,而DFM文件(通常,除非您弄乱了项目设置)是一种文本格式。@Laszlo:您错过了我请求的要点。请编辑您的问题,并在DFM和PAS端发布实际代码,足以让我们阅读的人能够在本地复制。否则,我们很难凭直觉神奇地知道问题可能是什么。