Delphi7-TClientDataSet: 查找

TClientDataSet[12]: 查找

方法有:
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;
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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 Delphi 7新特性 1.1 安装 1.2 新特性 1.3 IDE的改进 第2章 Delphi 7组件简介 2.1 VCL 2.2 Delphi 7组件 2.3 可视组件的通用属性和事件 第3章 常用组件 3.1 文本相关组件 3.2 按钮和复选框 3.3 分组组件 3.4 菜单组件 3.5 图形组件 3.6 文件选择组件 3.7 网格组件 第4章 Data Access组件页 4.1 TDataSource组件 4.2 TClientDataSet组件 4.3 TDataSetProvider组件 4.4 TXMLTransform组件 4.5 TXMLTransformProvider组件 4.6 TXMLTransformClient组件 4.7 XMLMapper实用程序 第5章 Data Controls组件页 5.1 共同属性 5.2 TDBGrid组件 5.3 TDBNavigator组件 5.4 TDBText组件 5.5 TDBEdit组件 5.6 TDBMemo组件 5.7 TDBImage组件 5.8 TDDBListBox组件 5.9 TDBComboBox组件 5.10 TDBCheckBox组件 5.11 TDBRadioGroup组件 5.12 TdBLookkupListBox组件 5.13 TDBLookkupComboBox组件 5.14 TDBRichEdit组件 5.15 TDBCtrlGrid组件 5.16 TDBChart组件 第6章 dbExpress组件页 6.1 TSQLConnection组件 6.2 TSQLDataSet组件 6.3 TSQLQuery组件 6.4 TSQLTable组件 6.5 TSQLStoredProc组件 6.6 TSQLMonitor组件 6.7 TSimpleDataSet组件 6.8 实例——使用dbExpress方式连接Oracle数据库 6.9 实例——建立双平台运行的应用程序 第7章 BDE组件页 7.1 TTable组件 7.2 TQuery组件 7.3 TDataBase组件 7.4 TBatchMove组件 7.5 TUpdateSQL组件 7.6 综合应用实例 第8章 ADO组件页 8.1 TADOConnection组件 8.2 TADOCommand组件 8.3 TADODataSet组件 8.4 TADOTable组件 8.5 TADOQuery组件 8.6 TADOStoredProc组件 8.7 TRDSConnection组件 8.8 实例——应用TADOConnection和TADODataSet组件 8.9 实例——应用TADOConnection和TADOTable组件 8.10 实例——应用TADOConnection和TADOQuery组件 8.11 实例——应用TADOConnection、TADODataSet和TADOCommand组件 第9章 Decision Cube组件页 9.1 TDecisionCube组件 9.2 TDecisionQuery组件 9.3 TDecisionSource组件 9.4 TDecisionPivot组件 9.5 TDecisionGrid组件 9.6 TDecisionGraph组件 9.7 实例——应用Decision Cube组件页 第10章 Dialogs组件页 10.1 TOpenDialog组件 10.2 TSaveDialog组件 10.3 TOpenPicTureDialog组件 10.4 TSavePicTureDialog组件 10.5 TFontDialog组件 10.6 TColorDialog组件 10.7 TFindDialog组件 10.8 TReplaceDialog组件 10.9 TPrintDialog组件 10.10 TPrinterSetupDialog组件 10.11 TPageSetupDialog组件 第11章 Rave组件页 11.1 TRvProject组件 11.2 TRvSystem组件 11.3 TRvNDRWriter组件 11.4 TRvCustomConnection组件 11.5 TRvDataSetConnection组件 11.6 TRvTableConnection组件 11.7 TRvQueryConnection组件 11.8 TRvRenderPrinter组件 11.9 TRvRenderPreview组件 11.10 TRvRenderPDF组件 11.11 TRvRenderHTML组件 11.12 TRvRenderRTF组件 11.13 TRvRenderText组件 11.14 实例——建立Rave报表 11.15 实例——获取报表列表和预览报表 第12章 InterBase组件页 12.1 InterBase组件页 12.2 InterBase Admin组件页 12.3 InterBase组件页应用实例 第13章 Server组件页 13.1 Word和Excel程序对象 13.2 ToleServer组件 13.3 实例——在Delphi操作Word 13.4 实例——使用TWordDocument组件连接Word自动化服务器 13.5 实例——建立与Excel连接 13.6 实例——以OLE方式建立与Excel连接 第14章 Internet组件页 14.1 Web服务器应用程序的结构 14.2 TWebDispatcher组件 14.3 TPageProducer组件 14.4 TDataSetPageProducer组件 14.5 TQueryTableProducer组件 14.6 TDataSetTableProducer组件 14.7 TSQLQueryTableProducer组件 14.8 TTcpClient组件 14.9 TTcpServer组件 14.10 TUdpSocket组件 14.11 TXMLDocument组件 14.12 TWebBrowser组件 14.13 建立Web服务器应用程序 14.14 访问数据库 14.15 调试Web服务器应用程序 14.16 实例——实现数据库查询的Web服务器应用程序 14.17 实例——实现动态参数查询 14.18 实例——Web服务器应用程序 14.19 综合实例——使用Socket的“网上对话”程序 第15章 WebSnap组件页 15.1 WebSnap概述 15.2 WebSnap结构 15.3 WebSnap组件页的常用组件 15.4 WebSnap组件页的数据库组件 15.5 WebSnap组件页的访问控制组件 第16章 WebServices组件页 16.1 HTTPRIO组件 16.2 HTTPReqResp组件 16.3 OPToSoapDomConvert组件 16.4 SoapConnection组件 16.5 HTTPSoapDispatcher组件 16.6 WSDLHTMLPublish组件 16.7 HTTPSoapPascalInvoker组件 16.8 实例——应用Web Service组件页 第17章 Indy组件集 17.1 Indy Clients组件页 17.2 Indy Servers组件页 17.3 Indy Intercepts组件页 17.4 Indy I/O Handlers组件页 17.5 Indy Misc组件页 17.6 Indy组件集应用实例 第18章 IntraWeb组件页 18.1 概述 18.2 IW Standard组件页 18.3 IW Data组件页 18.4 IW Client Side组件页 18.5 IW Control组件页 18.6 IW组件应用实例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值