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,--类型: ...
随机推荐
- chrome上一些好用的插件
1. Super Auto Refresh Plus - 这个插件可以自动刷新网页 2. 屏蔽百度推广 - 这个插件可以屏蔽百度搜索的推广广告
- 如何通过字符串形式导包(importlib模块的使用)
1 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外,importlib允许程序员创建他们自定 ...
- Python 获得程序 exe 的版本号
Python 获得程序 exe 的版本号 python中需要安装 pywin32 包 # based on http://stackoverflow.com/questions/580924/pyth ...
- File "/usr/bin/pip", line 11, in <module> sys.exit(__main__._main()) AttributeError: 'module' object has no attribute '_main'
多个版本pip共存导致 直接使用pip2进行安装即可 如:pip2 install requests
- texture2dArray
https://medium.com/@calebfaith/how-to-use-texture-arrays-in-unity-a830ae04c98b http://cdn.imgtec.com ...
- ZOJ4019——贪心&&DP
题目 链接 大意:有一个容量为$c$的背包,有$n$个$s_1$类物体,价值都为$k_1$,体积分别为$s_{1,1}, s_{1,2}, \cdots, s_{1,n}$,有$m$个$s_2$类物体 ...
- c++ const修饰词
常变量: const 类型说明符 变量名 // const int i = 20;常变量定义必需初始化赋值且变量值不可更改 常引用: const 类型说明符 &引用名 //引用:指 ...
- 顺序表元素位置倒置示例c++实现
#include <iostream> #define MAXSIZE 100 using namespace std; void reverse(int a[],int n)//对数组元 ...
- [Luogu] 国王游戏
https://www.luogu.org/problemnew/show/P1080 按照 a * b 排序 高精度 #include <bits/stdc++.h> using nam ...
- Django基础之命名空间模式(include)
即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 例如: project中的urls.py from django.conf.urls import url, ...