You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TDataset.Locate方法搜索DBGrid绑定数据集的所有字段内容

TDataset全字段搜索实现方案说明

结论

TDataset.Locate方法可以满足大部分场景的全字段搜索定位需求,仅特殊匹配逻辑需要自定义代码实现。

原生Locate方法适用场景

如果你的搜索规则是所有字段同时匹配对应搜索值,直接用原生方法即可,具体使用方式如下:

  • 方法语法:Locate('字段1;字段2;字段3;字段4;字段5', VarArrayOf(['搜索值1','搜索值2','搜索值3','搜索值4','搜索值5']), [loCaseInsensitive, loPartialKey])
  • 参数说明:
    • 第一个参数传入所有需要搜索的字段名,用分号分隔
    • 第二个参数按字段顺序传入对应要匹配的搜索值,多个值用可变数组包装
    • 第三个参数配置匹配规则:
      • loCaseInsensitive:忽略大小写
      • loPartialKey:允许部分匹配,即只要字段内容包含搜索值即可命中,不需要完全相等
  • 方法返回布尔值代表是否找到匹配项,找到后Dataset会自动跳转到对应记录行,绑定的DBGrid会自动高亮对应行。

需要自定义代码的场景

如果你的搜索规则是只要任意一个字段包含指定搜索文本就算命中,原生Locate方法不支持这种跨字段的或逻辑匹配,需要自己编写遍历逻辑:

function SearchAllFields(Dataset: TDataset; SearchText: string): Boolean;
var
  I: Integer;
  Field: TField;
begin
  Result := False;
  Dataset.DisableControls;
  try
    Dataset.First;
    while not Dataset.Eof do
    begin
      for I := 0 to Dataset.FieldCount - 1 do
      begin
        Field := Dataset.Fields[I];
        if Pos(UpperCase(SearchText), UpperCase(Field.AsString)) > 0 then
        begin
          Result := True;
          Exit;
        end;
      end;
      Dataset.Next;
    end;
  finally
    Dataset.EnableControls;
  end;
end;

调用上述函数后如果返回True,Dataset已经定位到匹配记录,DBGrid会自动同步显示。

内容的提问来源于stack exchange,提问作者tcxbalage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:36:03