使用.Seek,测试结果,然后再次.Seek
Using .Seek, testing result, then .Seek again
编辑:HansUp 的解决方案效果很好,对于将来使用它的任何人,请确保在使用它们后删除多个索引。在我的大小的表上,它们几乎是数据库大小的两倍。我最终使用的一个更好的想法是使用工作区对象创建一个临时数据库并在那里执行所有处理,只将最终数据带回实际数据库。
希望有办法做到这一点,但我还没有看到任何方法来控制 .Seek
在索引中开始查找的位置(除了使用 < 从末尾开始)。
我需要比较 2 个表格来找到薪酬调整的原始记录。问题是,在他们所有的伟大计划中,我们 SAP 模块的程序员决定从薪酬计算的输出中删除唯一的记录标识符,让我对调整的来源进行逆向工程。
我已经能够使用 .seek
匹配大部分记录,当结果可以追溯到多个记录之一时,问题就出现了(他们被迫进行了数十次纠正性支付运行以修复他们的原始代码中有错误)。
我希望做的是使用 .seek
,测试调整变量(记录支付是否已经调整为 0),如果是,再次 .seek
到下一个匹配记录在索引中。
有没有办法规定 .seek
从哪里开始比较索引条目?我可以在当前匹配之后开始后续搜索吗?
我知道我可以在初始 .seek
之后使用 .FindNext
,但我希望避免使用 .find
组方法,因为它们的速度较慢。
有什么想法吗?
Recordset.Seek
找到与您要查找的值匹配的第一条记录(如果有的话),并使该记录成为当前记录。
没有办法告诉它 Seek
第二条匹配的记录......或第一条匹配记录以外的任何记录。
但是,由于您的 Recordset
是按控制索引排序的(首先需要使用 Seek
),请使用 Recordset.MoveNext
移动到下一条记录并检查该记录的索引字段是否仍然匹配您的 Seek
值。
您可以重复 MoveNext
并检查索引字段,直到该字段的值不再与您的 Seek
值匹配。到那时,您就知道您已经检查了所有匹配的记录。
如果您是根据 <
或 <=
某个值进行查找,这意味着 Seek
从索引的末尾开始,这几乎完全相同。只需使用 MovePrevious
而不是 MoveNext
编辑:HansUp 的解决方案效果很好,对于将来使用它的任何人,请确保在使用它们后删除多个索引。在我的大小的表上,它们几乎是数据库大小的两倍。我最终使用的一个更好的想法是使用工作区对象创建一个临时数据库并在那里执行所有处理,只将最终数据带回实际数据库。
希望有办法做到这一点,但我还没有看到任何方法来控制 .Seek
在索引中开始查找的位置(除了使用 < 从末尾开始)。
我需要比较 2 个表格来找到薪酬调整的原始记录。问题是,在他们所有的伟大计划中,我们 SAP 模块的程序员决定从薪酬计算的输出中删除唯一的记录标识符,让我对调整的来源进行逆向工程。
我已经能够使用 .seek
匹配大部分记录,当结果可以追溯到多个记录之一时,问题就出现了(他们被迫进行了数十次纠正性支付运行以修复他们的原始代码中有错误)。
我希望做的是使用 .seek
,测试调整变量(记录支付是否已经调整为 0),如果是,再次 .seek
到下一个匹配记录在索引中。
有没有办法规定 .seek
从哪里开始比较索引条目?我可以在当前匹配之后开始后续搜索吗?
我知道我可以在初始 .seek
之后使用 .FindNext
,但我希望避免使用 .find
组方法,因为它们的速度较慢。
有什么想法吗?
Recordset.Seek
找到与您要查找的值匹配的第一条记录(如果有的话),并使该记录成为当前记录。
没有办法告诉它 Seek
第二条匹配的记录......或第一条匹配记录以外的任何记录。
但是,由于您的 Recordset
是按控制索引排序的(首先需要使用 Seek
),请使用 Recordset.MoveNext
移动到下一条记录并检查该记录的索引字段是否仍然匹配您的 Seek
值。
您可以重复 MoveNext
并检查索引字段,直到该字段的值不再与您的 Seek
值匹配。到那时,您就知道您已经检查了所有匹配的记录。
如果您是根据 <
或 <=
某个值进行查找,这意味着 Seek
从索引的末尾开始,这几乎完全相同。只需使用 MovePrevious
而不是 MoveNext