方法有:
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;