FireDac Locate 方法

Delphi的Locate方法
function Locate(const AKeyFields: string; const AKeyValues: Variant;
      AOptions: TLocateOptions = []): Boolean; override;

(1) 搜索一个字段条件时非常简单,只需要输入字段以及第二个参数的数值;

(2) 搜索多个字段条件,第二个参数有两种方式,

          a 可以用VarArrayCreate创建一个数组,并对各字段赋值;

             xe10中当数值类型位varString时会报错误,可以直接用varVariant代替;

            如果查询的字段各个数据类型不一样,也可以直接用varVariant来作为数据类型;

          b 可以直接用VarArrayOf()调用的时候直接赋值;
————————————————

loc1:= qry1.FieldbyName('SPBM').AsString;      //商品编码

loc2:= qry1.FieldbyName('XH').AsString;          //型号

qry.Locate('XH;SPBM', VarArrayOf([loc2,loc1]), [loCaseInsensitive]);     //精确匹配  

在使用Locate时:

如果使用loCaseInsensitive就代表不分大小写查询数据;

如果使用loPartialKey就代表要以模糊查询(部分字符串)来查询数据。

用到Locate   返回Booled

loCaseInsensitive = 不区分大小写

loPartialkey =部分搜索

单个值搜索   

FQuery1.Locate(字段名,值,[loCaseInsensitive, loPartialkey])

多个值搜索

FQuery1.Locate(字段名:字段名, VarArrayof(['值, 值']),[loCaseInsensitive])

搜索完直接定位到搜索数据。可以直接提取

LocateEx  增强版搜索

前面两个参数一样,后面多加了几个参数

[lxoFromCurrent = 从当前记录的位置开始搜索

 lxoBackward = 从当前记录的位置开始往前搜索

 lxoCheckOnly = 只搜索看看要搜索的数据存在不存在 而不改变当前记录位置

lxoNoFetchAll = 只搜索在TFQuery 数据中的数据而不要把所有的数据从后端数据库中取出再搜索]

搜索 1000到2500 之间

 

sExpr := '字段名 >= ' + '''' + '1000' + '''' + 'and' + '字段名 <= ' + '''' + '2500' + '''',

如果搜索1000 到2500 之间为直

if (FQuery1.LocateEX(sExpr, [lxoPartialkay, lxoFormCurrent])) then

begin

  把数据输出到Listview

end;

delphi 中locate函数的使用方法
TDataSet控件以及它的继承控件,例如TSimpleDataSet/TClientDataSet等都可以使用Locate方法在结果数据集中查寻数据。
程序首先必须使用SQL命令从后端数据库中取得数据并且形成结果数据集,然后才使用Locate方法查寻数据。 

当使用Locate方法查寻数据时,开发人员可以使用任何的字段条件来查寻,而无须理会这个字段是不是索引字段。当然,当开发人员使用索引字段来查寻数据时,Locate会直接使用索引来帮助查寻,因此速度会非常快速。如果开发人员使用非索引字段查寻数据,那么Locate也将使用目前它知道最好的方式来查寻数据。 此外,Locate方法不只能够查寻一个单一的字段,它同时还能以数个字段的条件来查寻数据。

开发人员可以组合数个字段的查寻条件在结果数据集中查寻数据。 由于Locate能够查寻各种不同数据类型的字段,因此Locate方法在设定查寻条件时是以Variant类型的变量来储存查寻数值的。当开发人员要使用多个字段来查寻数据时必须建立一个Variant数组来储存查寻数值。 此外,Locate方法在查寻数据时也能够使用模糊条件标准来寻找特定的数据,例如开发人员可以要求Locate在查寻数据时不分大小写,或是以部分字符串来查寻数据,这样就为开发人员提供了非常大的弹性空间。 
-------------------------------参数值---------------------------------------
下面就是Locate的方法原型: function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; Locate方法接受三个参数。
第一个参数KeyFields是开发人员要查寻的字段名称。如果开发人员要查寻单一字段,那么只需要直接传入此字段名称。如果要以多个字段条件来查寻,那么便需传入所有的字段名称,并且以分号分隔每一个字段名称。 
第二个参数KeyValues是指开发人员欲查寻的条件数值。它的类型是Variant,因为Variant几乎可以代表任何的类型,因此开发人员可以查寻整数、小数、字符串,或是布尔值的条件。同样,如果开发人员只查寻一个条件数值,那么就可以直接在这个参数位置传入。如果是以多个字段条件来查寻,那么开发人员必须建立一个Variant数组,然后在这个数组中的每一个元素中指定条件数值,再传递Variant数组到这个参数中。至于Variant数组则可以使用VarArrayOf方法,或是使用VarArrayCreate方法来建立,在稍后的范例中会有程序代码说明。 Locate方法的最后一个参数TLocateOptions则是让开发人员在查寻字符串字段时,指定以什么标准来查寻数据。开发人员可以指明不分大小写来查寻字符串数据,或是以部分字符串数值来查寻数据。
下面就是TLocateOptions的类型定义: type  TLocateOption = (loCaseInsensitive, loPartialKey);  TLocateOptions = setof TLocateOption; 在使用Locate时,如果使用loCaseInsensitive就代表不分大小写查寻数据;如果使用loPartialKey就代表要以部分字符串来查寻数据。 

-------------------------------返回值:-------------------------------
Locate方法的回传数值是布尔值,它代表Locate方法是否成功找到了要查寻的数据。如果找到,就回传True,否则就回传False。当Locate方法成功地查寻到数据之后,它就会移动目前的记录位置到这笔数据上,否则就会停留在Locate开始查寻之前的记录位置上。 请注意Locate方法查寻数据的结果是一笔数据,因此,如果你想查寻符合条件的一群数据,那么你可以使用稍后将介绍的过滤器(Filter)功能。
-------------------------------范例1:单数值-------------------------------
 现在,让我们使用数个范例来说明如何使用Locate方法。下面的范例程序代码即是以一个字段来查寻数据,它是以数据表的NAME字段来查寻拥有“李维”数值的这笔数据,由于最后一个参数是空集合,因此,这代表NAME字段必须拥有一模一样的“李维”这个数值才算查寻成功。  aSQLClientDataSet.Locate('NAME', '李维' , []); 
-------------------------------范例2:多数值-------------------------------
下面的程序代码则以City和District两个字段来查寻数据,查寻的条件是City字段拥有“台北”数值,而District字段拥有“大安区”数值的数据。  aSQLClientDataSet.Locate('City;District', VarArrayOf(['台北,大安区']),[]); 
-------------------------------范例3:模糊查找-------------------------------
下面的程序代码和第一个范例非常相像,只是这个程序代码查寻的是第一笔在NAME字段以“李”数值开头的数据。  aSQLClientDataSet.Locate('NAME', '李', [loPartialKey]); 
-------------------------------范例4:模糊查找且不区分大小-------------------------------
最后一个范例则是查寻ID字段中任何以“A12”数值开头的第一笔,而且是不分A大小写的数据。  aSQLClientDataSet.Locate('ID', 'A12', [loCaseInsensitive ,loPartialKey]); 
————————————————
版权声明:本文为CSDN博主「猫叔66」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31209383/article/details/72385291

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值