zoukankan      html  css  js  c++  java
  • ClientDataSet的查找和过滤功能

    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中。

  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/sun998/p/6528606.html
Copyright © 2011-2022 走看看