博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ClientDataSet的查找和过滤功能
阅读量:5925 次
发布时间:2019-06-19

本文共 1877 字,大约阅读时间需要 6 分钟。

ClientDataSet在可以使用Locate,Lookup和SetRange方法在本地(如果本地数据只是一张表的一部分数据会从服务器下载整张表)数据集中快速找到想要的数据,而不必用SQL访问数据库,这样不仅减少了查询时间,也减轻了服务器的负担,提高了网络利用率。

Locate函数:

function Locate(const KeyFields: string;const KeyValues: Variant; Options: TLocateOptions): Boolean;

参数KeyFields指定查找的字段,如有多个字段用分号(;)分隔。

参数KeyValues指定要查找字段的值,如有多个值要用VarArrayOf()构成数组进行传递。

参数Options选项,指定是否区分大小写,是否部分匹配。

TLocateOption = (loCaseInsensitive, loPartialKey);

如果找到记录返回TRUE,并把记录移到该条数据上。否则返回FALSE。

Lookup函数:

function Lookup(const KeyFields: string; const KeyValues: Variant;const ResultFields: string): Variant;

参数KeyFields指定查找的字段,如有多个字段用分号(;)分隔。

参数KeyValues指定要查找字段的值,如有多个值要用VarArrayOf()进行传递。

参数ResultFields指定要返回的字段,如有多个如有多个字段用分号(;)分隔。

当ResultFields返回多个时,是一个数组,用if VarIsArray()判断下,为true时用vararraylowbound和vararrayHighbound遍历取出结果。

Lookup匹配到就返回结果,但不会移动记录指针。

Locate和Lookup都只会返回匹配到的第一个记录。如果要返回多个记录就要用到过滤功能或SetRange。

ClientDataSet中的过滤功能可以返回符合条件的记录的子集。

ClientDataSet.Filtered设为ture即可开启过滤,关闭为false。

ClientDataSet.Filter:='过滤条件',这种方式使用字符串来设置过滤条件。不适合用于复杂的过滤。

ClientDataSet1.OnFilterRecord过使用DELPHI语法过滤复杂的条件。

OnFilterRecord事件原型:

procedure FilterRecord(DataSet:TDataSet;var Accept:Boolean);

参数DataSet触发事件的数组集。

参数Accept,符合过滤条件的设为true,否则设为false。

ClientDataSet.FilterOptions选项设置是否区分大小写。

TFilterOption = (foCaseInsensitive, foNoPartialCompare);

SetRange方法:

此方法只能用于索引字段。原型:

procedure SetRange(const StartValues, EndValues: array of const);

参数StartValues指定开始值。

参数EndValues指定结束值。

可调用CancelRange恢复到SetRange之前的结果。

************************************************************************************************************************

注意:以上的方法最好用于过滤本地数据集,如果服务端中有还存有大量数据ClientDataSet会把数量全部取到本地再过滤,不仅造成网络负担,降低服务器性能,还有可能引起客户端内存不足导致程序崩溃。所有通常会用CloneCursor方法或Data属性把数据给另一个ClientDataSet2,再在ClientDataSet2中调用Locate,Lookup,filter,避免从服务器下载大量数据。如果在本地数据集中没有符合条件的,就转为SQL语句让服务器帮忙查找,这样就只会返回符合条件的结果到ClientDataSet中。

转载于:https://www.cnblogs.com/sun998/p/6528606.html

你可能感兴趣的文章
(转)DOTA新版地图6.78发布:大幅改动 增两位新英雄
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
快速排序——Java
查看>>
unity游戏与我
查看>>
187. Repeated DNA Sequences
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
$resource in AngularJS
查看>>
java虚拟机学习笔记 【1】
查看>>
DUBBO笔记
查看>>
nginx php上传大文件的设置(php-fpm)
查看>>