【问题标题】:Delphi TClientDataSet, maximum number of fields per indexDelphi TClientDataSet,每个索引的最大字段数
【发布时间】:2012-01-10 17:57:49
【问题描述】:

我有一个简单的 Delphi (2007) 过程,它给定一个 TDataSet 和一个(子)字段列表返回一个新的 TClientDataSet,它具有来自给定 TDataSet 的不同值

这很好用。

在我的过程中,我使用 TClientDataSet 索引来填充不同的值。 它既快速又简单。

问题是TClientDataSet 索引支持最多16 个 字段。 如果您添加更多它们,它们将被静默忽略。

我在数据集中需要超过 16 个字段(因此在索引中)。

有什么解决办法吗?一些黑客? 也许一些开源库可以用作解决方法?

我正在离线工作,所以我必须在内存中完成。数据集的大小不是巨大

【问题讨论】:

  • 在添加新索引之前,是否可以在处理后删除每个索引?
  • 我想象的是您有一个 TDataset,并且您想要删除重复项。为此,您已经在 TClientDataset 中设置了一个索引,并且您只是复制所有内容,依靠索引来检测和丢弃重复的行。我对吗?联系SELECT DISTINCT * FROM Table不是更简单更直接吗?
  • @RobKennedy 是的,我想删除重复项。实际上创建一个没有重复和更少字段的新数据集。我与数据库分离。这就是为什么我不能运行 SELECT DISTINCT
  • @MikeW 我不明白你的问题。在我的过程中,我只需要创建一个索引。例如,我的初始数据集有 10 个字段。我需要对 5 个字段进行区分;所以我创建了一个包含 5 个字段和 5 个字段的索引的新数据集。
  • 为什么投反对票?我对这个主题进行了研究。请告诉我你的理由

标签: delphi indexing delphi-2007 tclientdataset


【解决方案1】:

如果您需要在超过 16 个字段中获得不同的记录,并且希望使用索引来保持快速,则需要考虑连接其中的一些字段。例如:

测试字段 字段 1 字段 2 字段 3 字段 4 苹果~香蕉~胡萝卜~甜甜圈 苹果香蕉胡萝卜甜甜圈

在测试字段上创建您的索引。

如果您的其他字段的总长度超过了文本字段的最大长度,您可能需要创建多个测试字段。

【讨论】:

  • 感谢您的建议。我想知道其他一些解决方案,因为我有许多不同的字段类型(浮动、日期时间)。如果出现其他提示,我将等待
  • 您不需要将所有现有字段转换为文本字段。当您创建“测试字段”时,您会希望它成为整数字段的文本表示形式。
  • 从来不想,正如我向 MikeW 指出的那样。我关心的是获得正确的文本表示和连接的过程。除了我的担心之外,我会寻求这个解决方案并尝试发现任何副作用
【解决方案2】:

您可以将 TClientDataSet 换成 JVCL 中的 TjvCsvDataset。它可以用作客户端数据集的纯“内存数据集”替代品,无需在磁盘上读取或写入任何 CSV 文件。

它在设计上不太像客户端数据集。我不确定客户端数据集中的所有这些“索引”会给您带来什么好处,除了您不能拥有没有索引定义的字段,但如果这就是您所需要的,您可以设置 TJvCsvDataSet .FieldDef property = 'Field1,Field2,.....FieldN' 然后打开数据集并向数据集添加任意数量的行。它实际上受限于您可以在 32 位进程中寻址的内存量。

【讨论】:

  • 感谢您的回答 Warren P 并为我指出 TjvCsvDataset。我不确定我是否理解您所指的“所有这些索引”;我只需要一个索引(如果您愿意,可以使用主键)来帮助我计算原始(大,具有重复值)数据集的不同值。我查看了 JvCsvData.pas(通过源代码找到了您的一些不错的评论:)并检查了内部算法:InternalFindByKey 的实现进行了顺序扫描并且不使用索引。我认为这应该不如 TClientDataset 方法快。
  • 你是对的,JvCsvDataSet 没有内部索引。但是,如果您愿意,没有什么能阻止您对其进行子类化和构建索引。 (每个索引一个简单的字典对象,将提供对字段值的快速索引查找,即'TextValue1' --> Row3。)。哎呀,没有什么能阻止你从外部索引 ClientDataSet。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多