Help里的解释
function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean;
KeyFields: is a string containing a semicolon-delimited list of field names on which to search.
KeyValues: is a variant array containing the values to match in the key fields. TLocateOptions is a set that optionally specifies additional search latitude when searching on string fields. 关于LocateOptions type TLocateOption = (loCaseInsensitive, loPartialKey); TLocateOptions = setof TLocateOption; loCaseInsensitive Key fields and key values are matched without regard to case.//忽略大小写 loPartialKey Key values can include only part of the matching key field value; //只需部分匹配,从头开始匹配 {另外,如果KeyFields里没有字符串类型或者LocateOptions=[],该函数都会忽略此项} 看了这么多,到底Locate是干么的呢?请看 Searches the dataset for a specified record and makes that record the current record.
Call Locate to search a dataset for a specific record and position the cursor on it. 很显然Locate有别于过虑,可不要等同起来哦。Locate主要是在已经Open出来的数据集里定位你要的资料。 好了,看了Help里面密密麻麻的E文,头都晕了,是不是因为头晕所以一直学不好“英国历史(English)”呢?我怎么看E文都是这种感觉,还是中国的方块字看起来亲切舒服,^_^,扯远了,言归正传,看了理论的东西,我们来实践一下。 做事情总是从易处着手,写程序也不例外。我们先看看单栏的用法。 strCode:='Abc' Tquery1.Locate('code',strcode,[loCaseInsensitive]) 这样TQuery,就会将光标定位到code字段中等于Abc(abc,aBc,abC,....)的记录上。 不过,我们既然用来查询大部分情况下我们都是要模糊查询的,所以这样并不是我们要用的方法,我们只要稍微改下Option就OK了。 Tquery1.Locate('code',strcode,[loPartialKey]) 这样找到的是这样的结果code中“包含”(是从头开始匹配而不是真正的包含)Abc(Abcddfe...,....) 当然也可以两个同时使用
Tquery1.Locate('code',strcode,[loCaseInsensitive,loPartialKey])
with CustTable do Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
1、使用“;”来分割多个字段名称,用VarArrayOf()来传递多个定位值。 2、字段一定要和数据库完全一样,即使你用习惯了的空格也不行。虽然使得程序看起来跟清楚点,但是Locate不会自己做Trim,所以它把空格也当成字段名称的一部分。 3、因为定位值采用Variants,所以定位就不知局限于字符串了。 4、对于多栏查询的结果,一定要所有栏位全部符和才可以,只要有一栏不符合,就会返回False。 5. 最好不用对空值进行定位,会进行从头到尾的遍历,影响速度.
Ok,关于Locate的用法就说到这里,写个小例子当作总结。
var LocateSuccess: Boolean; SearchOptions: TLocateOptions; StrField,StrLocate:String;//字段名称,定位值 begin SearchOptions := [loCasesensitive,loPartialKey]; LocateSuccess := CustTable.Locate(StrField,StrLocate, SearchOptions); end;
大概说下多栏查询的一些需要注意的地方。
with CustTable do Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
1、使用“;”来分割多个字段名称,用VarArrayOf()来传递多个定位值。 2、字段一定要和数据库完全一样,即使你用习惯了的空格也不行。虽然使得程序看起来跟清楚点,但是Locate不会自己做Trim,所以它把空格也当成字段名称的一部分。 3、因为定位值采用Variants,所以定位就不知局限于字符串了。 4、对于多栏查询的结果,一定要所有栏位全部符和才可以,只要有一栏不符合,就会返回False。 5. 最好不用对空值进行定位,会进行从头到尾的遍历,影响速度.
Ok,关于Locate的用法就说到这里,写个小例子当作总结。
var LocateSuccess: Boolean; SearchOptions: TLocateOptions; StrField,StrLocate:String;//字段名称,定位值 begin SearchOptions := [loCasesensitive,loPartialKey]; LocateSuccess := CustTable.Locate(StrField,StrLocate, SearchOptions); end;
———————————————— 版权声明:本文为博主「imlangzi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/walkingboy/article/details/243736