使用.Seek,测试结果,然后再次查询

时间:2016-05-03 17:04:49

标签: ms-access access-vba ms-access-2010 ms-access-2013

编辑:HansUp的解决方案非常有用,对于将来使用此解决方案的任何人来说,确保在使用后删除多个索引。在我的大小的表上,他们几乎是数据库大小的两倍。我最终使用的一个更好的想法是使用工作空间对象创建一个临时数据库,并在那里执行所有处理,只将最终数据带回实际数据库。

希望有一种方法可以做到这一点,但我还没有看到任何方法来控制.Seek在索引中开始查看的位置(除了使用<从最后开始)。

我需要比较2个表来找到薪酬调整的原始记录。问题是,在他们的所有计划中,SAP模块的程序员决定从薪酬计算的输出中删除唯一的记录标识符,让我进行逆向工程,调整来自哪里。

我能够使用.seek匹配大多数记录,当结果可以追溯到多个记录中的一个时出现问题(他们被迫进行了数十次纠正性付费运行以修复错误他们的原始代码。)

我希望做的是使用.seek,测试一个调整变量(已经将记录支付调整为0),如果是,则再次.seek到下一个匹配记录索引。

有没有办法规定.seek开始比较索引条目的位置?我的后续搜索可以在当前比赛后开始吗?

我知道我可以在初始.FindNext之后使用.seek,但由于其性质较慢,我希望避免.find组方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

Recordset.Seek找到与您正在寻找的值匹配的第一条记录(如果有的话),并将该记录作为当前记录。

没有办法告诉它Seek匹配的第二条记录......或第一条匹配记录以外的任何记录。

但是,由于您的Recordset是由控制索引排序的(首先需要使用Seek),因此请使用Recordset.MoveNext移至下一条记录并检查是否该记录的索引字段仍与您的Seek值匹配。

您可以重复MoveNext并检查索引字段,直到该字段的值不再与您的Seek值匹配为止。那时,您知道已经检查了所有匹配的记录。

如果您正在寻找基于<<=的某个值,这意味着Seek从索引的末尾开始,则几乎完全相同。只需使用MovePrevious代替MoveNext