【发布时间】:2014-07-02 11:29:42
【问题描述】:
我在TClientDataset 和TStringField 字段中出现Insufficient memory 错误。我需要使用从 0 到 8000 的字符串长度 - 但在填写 TClientDataset 之前不知道长度是多少。
那么,TStringField 可以用动态的Size 创建吗?
附:最初的任务是将 TDBGrid 复制到 TClientDataset。
【问题讨论】:
-
问题不在于 TClientDataSet 是否可以为其从其提供者读取的记录分配可变大小的缓冲区等,因为它必须大量分配这些缓冲区?答案是肯定的,这将是令人惊讶的。由于(在 D7 中)函数 TCustomClientDataSet.AllocRecordBuffer: PChar; 在我看来不太可能开始结果 := AllocMem(FRecBufSize);结尾; - 但这是虚拟的,所以你总是可以编写自己的自定义后代。
-
根据我从您那里看到的与此相关的两个问题,我认为您正在尝试以非常不正确的方式使用 CDS。如果您使用 CDS 的设计用途,则不会出现您所询问的任何问题。恐怕我不知道你想要完成什么,因为你所描述的只是它出了问题的事情。
-
Ken,问题很简单:Size = 8000 的 TStringField 过多会引发
Insufficient memory错误。我对所有组件的使用完全符合客户的任务。 -
请不要因为内存不足而将您的问题标记为“内存泄漏”。
-
嗯...它可以完成“客户的任务”,但这并不意味着您选择了正确的类来执行此操作(或正确使用它)。我可以用锤子完成打螺丝的任务;仅仅因为我可以让它工作并不意味着它是这样做的正确方法。
标签: delphi tclientdataset tstringfield