方法有:
1、Locate: 根据字段列表和对应的字段值查找并定位, 找到返回 True.
2、Lookup: 根据字段列表和对应的字段值查找, 返回需要的字段值.
3、SetKey、GotoKey 或 SetKey、GotoNearest: 根据索引字段的值查找, 先切换状态再根据条件定位.
4、FindKey 或 FindNearest: 根据索引字段的值查找.
其中的 GotoNearest、FindNearest 在找不到的情况下会定位到近似值.
测试代码:
//准备: 窗体上放一个 ClientDataSet1 和六个 Button { 准备测试数据 } procedure TForm1.FormCreate(Sender: TObject); begin with ClientDataSet1 do begin FieldDefs.Add('ID', ftInteger); FieldDefs.Add('Name', ftString, 6); FieldDefs.Add('Age', ftWord); CreateDataSet; AppendRecord([1, '赵AB', 11]); AppendRecord([2, '钱AB', 22]); AppendRecord([3, '孙AB', 33]); AppendRecord([4, '李AB', 44]); AppendRecord([5, '赵ab', 55]); AppendRecord([6, '钱ab', 66]); AppendRecord([7, '孙ab', 77]); AppendRecord([8, '李ab', 88]); end; end; { Locate 测试 } procedure TForm1.Button1Click(Sender: TObject); begin if ClientDataSet1.Locate('Name', '赵ab', []) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 55 } if ClientDataSet1.Locate('Name', '赵ab', [loCaseInsensitive]) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 11 } if ClientDataSet1.Locate('Name', '钱a', [loPartialKey]) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 66 } if ClientDataSet1.Locate('Name', '钱a', [loCaseInsensitive,loPartialKey]) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 22 } if ClientDataSet1.Locate('Name;Age', VarArrayOf(['钱ab',66]), []) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 66 } end; { Lookup 测试 } procedure TForm1.Button2Click(Sender: TObject); var R: Variant; i: Integer; begin R := ClientDataSet1.Lookup('Name', '钱AB', 'Age'); if not VarIsNull(R) then ShowMessage(R); { 22 } R := ClientDataSet1.Lookup('Name;Age', VarArrayOf(['钱ab',66]), 'Age'); if not VarIsNull(R) then ShowMessage(R); { 66 } R := ClientDataSet1.Lookup('ID', 6, 'Name;Age'); if VarIsArray(R) then for i := VarArrayLowBound(R, 1) to VarArrayHighBound(R, 1) do ShowMessage(R[i]); { 钱ab / 66} end; { SetKey、GotoKey 测试 } procedure TForm1.Button3Click(Sender: TObject); begin ClientDataSet1.IndexFieldNames := 'Name'; ClientDataSet1.SetKey; ClientDataSet1.FieldValues['Name'] := '钱ab'; if ClientDataSet1.GotoKey then ShowMessage(ClientDataSet1.FieldValues['Age']); { 66 } end; { SetKey、GotoNearest 测试 } procedure TForm1.Button4Click(Sender: TObject); begin ClientDataSet1.IndexFieldNames := 'Name'; ClientDataSet1.SetKey; ClientDataSet1.FieldValues['Name'] := '孙'; ClientDataSet1.GotoNearest; ShowMessage(ClientDataSet1.FieldValues['Age']); { 77 } end; { FindKey 测试 } procedure TForm1.Button5Click(Sender: TObject); begin ClientDataSet1.IndexFieldNames := 'Name; Age'; if ClientDataSet1.FindKey(['赵ab']) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 55 } if ClientDataSet1.FindKey(['赵AB', 11]) then ShowMessage(ClientDataSet1.FieldValues['Age']); { 11 } end; { FindNearest 测试 } procedure TForm1.Button6Click(Sender: TObject); begin ClientDataSet1.IndexFieldNames := 'Name'; ClientDataSet1.FindNearest(['赵']); ShowMessage(ClientDataSet1.FieldValues['Age']); { 55 } end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2009-02-01 图解 CSS (11): 理解样式表的逻辑
2009-02-01 图解 CSS (10): 链接、继承、放缩、鼠标指针、其他(待补充...)
2009-02-01 图解 CSS (9): 列表