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, );
FieldDefs.Add('Age', ftWord);
CreateDataSet;
AppendRecord([, '赵AB', ]);
AppendRecord([, '钱AB', ]);
AppendRecord([, '孙AB', ]);
AppendRecord([, '李AB', ]);
AppendRecord([, '赵ab', ]);
AppendRecord([, '钱ab', ]);
AppendRecord([, '孙ab', ]);
AppendRecord([, '李ab', ]);
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',]), []) 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',]), 'Age');
if not VarIsNull(R) then ShowMessage(R); { 66 } R := ClientDataSet1.Lookup('ID', , 'Name;Age');
if VarIsArray(R) then
for i := VarArrayLowBound(R, ) to VarArrayHighBound(R, ) 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', ]) 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;
Delphi7-TClientDataSet: 查找的更多相关文章
- Delphi TClientDataset查找定位功能
if CDSUserFunc.Locate('mod_id;res_id', VarArrayOf([UserFunc.MOD_ID, UserFunc.RES_ID]), [loCaseInsens ...
- 教程-Delphi7 自带控件安装对应表
原来的控件delphi7里何处寻? 经常有朋友提这样的问题,“我原来在delphi5或者delphi6中用的很熟的控件到哪里去了?是不是在delphi7中没有了呢?这是不是意味着我以前写的代码全都不能 ...
- cxgrid属性说明,每次用的时候费时费力查找。
由层得到数据表名: procedure TFB_PatientWaiting.cxgrdbtblvwGrid1DBTableView_MyPatienWaitingDblClick( Sender: ...
- TClientDataSet[9]: 计算字段和 State
TClientDataSet 中计算字段有两种: Calculated(计算字段).InternalCalc(内部计算字段). 两者区别是: Calculated 在每次需要时都要重新计算; Inte ...
- Delphi TClientDataSet的使用
1.TClientDataSet的基本属性和方法介绍 1).FieldDefs: 字段定义列表属性 开发者可通过单击属性编辑器中该属性编辑按钮,或在该控件上单击右键选择弹出菜单中的"Fiel ...
- TClientDataSet[5]: 读取数据
本例用到: TClientDataSet.Fields[]; { 字段集合; 它比 FieldList 有更多功能, 如可获取嵌套字段 } TClientDataSet.FieldL ...
- Delphi7目录结构----初学者参考
打开Delphi的安装目录,如C:\Program Files\Borland\Delphi7,你将会看到目录下包含了一些文件和文件夹: ² Source:存放的是Delpi提供的所有源 ...
- Delphi7目录结构
Delphi7目录结构 打开Delphi的安装目录,如C:\Program Files\Borland\Delphi7,你将会看到目录下包含了一些文件和文件夹:Source:存放的是Delpi提供的所 ...
- 在SQL2008查找某数据库中的列是否存在某个值
在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...
随机推荐
- 【linux】ubuntu修改系统时间
ubuntu修改时间步骤 ① 先把系统校验时间的程序停止掉 /lib/systemd/systemd-timesyncd systemd 开始,包括了一个名为systemd-timesyncd 的守护 ...
- Spark(一)wordcount
Spark(一)wordcount 一.新建一个scala项目 在maven中导入 <!-- https://mvnrepository.com/artifact/org.apache.spar ...
- java——从.net再学习java
到底从java中学到了什么? 1,java是由sun公司发明的,sun希望制定一些标准,具体的实现交给具体的厂商来自己实现: 2,java是开源的,第三方做了很多自己的一些组件实现,比如: 很多时候, ...
- chrome上一些好用的插件
1. Super Auto Refresh Plus - 这个插件可以自动刷新网页 2. 屏蔽百度推广 - 这个插件可以屏蔽百度搜索的推广广告
- linux下top命令的使用
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 视图参数含义 top视图分为两部分:操作系统资源概况信息和进程信息.首先分析资源 ...
- python常用函数拾零
Python常用内置函数总结: 整理过程中参考了runoob网站中python内置函数的相关知识点,特此鸣谢!! 原文地址:http://www.runoob.com/python/python-bu ...
- 利用python deque的extend特性实现列表元素查重
from collections import deque mydquene = deque() mylist = [0,1,1,2,2,3,3,3,3,4,5,6,7,7,8,8,9,10,10,1 ...
- THUWC2020 游记
不知道标题该叫什么,那就叫游记吧.反正是来玩的. CSP-S 排到我省三十几名,也不知怎么就过了 THU 的初审. Day0 到了宾馆.和 cy 划了一晚上. 发现自己不会做这次月考数学题,丢人啊丢人 ...
- BZOJ 4562: [Haoi2016]食物链 拓扑排序
建反图,跑一个拓扑排序dp即可. Code: #include <bits/stdc++.h> #define ll long long #define N 100005 #define ...
- HDU 5852 Intersection is not allowed! ( 2016多校9、不相交路径的方案、LGV定理、行列式计算 )
题目链接 题意 : 给定方格中第一行的各个起点.再给定最后一行与起点相对应的终点.问你从这些起点出发到各自的终点.不相交的路径有多少条.移动方向只能向下或向右 分析 : 首先对于多起点和多终点的不相交 ...