加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:05:51 所属栏目:大数据 来源:网络整理
导读:我在使用Delphi2010在Paradox 7表中设置二级索引的范围时遇到问题. 相关领域是: FeatureType(int); YMax(int); XMax(int); YMin(int); Xmin(int). 二级索引按此顺序包含所有这些字段. 我使用像这样的SetRange语句进行了测试(不需要添加所有字段值,假设休息
我在使用Delphi2010在Paradox 7表中设置二级索引的范围时遇到问题.

相关领域是:

FeatureType(int); YMax(int); XMax(int); YMin(int); Xmin(int).
二级索引按此顺序包含所有这些字段.

我使用像这样的SetRange语句进行了测试(不需要添加所有字段值,假设休息为NULL并且包含所有值):

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

并试图通过添加约束得到0结果:

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

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

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

更新

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

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

解决方法

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

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

如果YMax字段位于280110400..285103294之间,并且该值与边框(280110400或285103294)不匹配,则无需进一步检查即将其进入结果集.在这种情况下,不检查剩余的索引字段.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读