gpt4 book ai didi

delphi - Paradox SetRange 在查询 3 个字段时未提供正确的结果

转载 作者:行者123 更新时间:2023-12-03 15:45:33 26 4
gpt4 key购买 nike

我在使用 Delphi2010 在 Paradox 7 表中设置二级索引范围时遇到问题。

相关字段是:

特征类型(int); Y 最大 (int); X 最大 (int); YMin(int); Xmin(整数)。二级索引按此顺序包含所有这些字段。

我使用像这样的 SetRange 语句进行测试(不需要添加所有字段值,其余部分假定为 NULL 并且包含所有值):

table1.IndexName := 'YMaxIndex';
table1.SetRange([101, 280110400],[101, 285103294]); //386236 records

并尝试通过添加约束来获得 0 结果:

table1.IndexName := 'YMaxIndex';
table1.SetRange([101, 280110400, 1],[101, 285103294, 1]); //386236 records

但仍然得到 3863236,在检查表中 XMax 字段的值时,这显然是不正确的。

有人可以向我解释一下我对 Paradox 索引和 SetRange 的不理解吗?我经常使用类似的代码,但不一定用 3 个字段指定范围。

更新

请参阅下面 Uwe 的回复。最终的代码解决方案如下(XMax 的新范围):

Table1.SetRange([101,280110400], [101,285103294]);
Table1.Filter := 'XMax > 100000 and XMax < 110000';
Table1.Filtered := true;

最佳答案

索引范围始终被视为所有字段的整体,而不是单独查找每个字段。结果集将包含这些范围之间的每条记录。按给定顺序对每个索引字段进行比较。

在您的情况下,它将检查记录的FeatureType是否位于101..101之间。如果该字段包含 101,则将其考虑在内。由于字段值位于范围的边界,因此将检查下一个字段。

如果 YMax 字段位于 280110400..285103294 之间,并且该值与边界不匹配(280110400 或 285103294),则会将其纳入结果集中,而不进行任何进一步检查。在这种情况下,不会检查剩余的索引字段。

您尝试获取的结果只能通过过滤条件或适当的 SQL Select 子句实现。

关于delphi - Paradox SetRange 在查询 3 个字段时未提供正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6148270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com