查看一下Delphi的Table.Locate函数的源代码,发现它也是用Filter进行查找的,
只不过是直接调用BDE的Filter函数。找到一条记录以后,再取消Filter……。
除了上面提的设Filter然后做书签数组来记录满足条件的记录之外,
你可以自己实现一个Locate以满足需要,例:
function MyLocate(DataSet: TDataSet; KeyFields: string; KeyValues: Variant; Options: TLocateOptions; GoForward: boolean): boolean;
begin
DataSet.DisableControls;
if GoForward then
begin
Next;
while not MyMatch(DataSet,KeyFields,KeyValues,Options) and not DataSet.EOF do Next;
Result:=not DataSet.EOF;
end
else begin
Prev;
while not MyMatch(DataSet,KeyFields,KeyValues,Options) and not DataSet.BOF do Prev;
Result:=not DataSet.BOF;
end;
DataSet.EnableControls;
end;
至于这个MyMatch,给定一个数据集,查找的字段和关键字,确定数据集的当前记录是
否满足条件,不算是很复杂吧?:)