现在的位置: 首页 > 综合 > 正文

Delphi中AdoTable通过Locate方法快速定位记录

2013年09月01日 ⁄ 综合 ⁄ 共 1370字 ⁄ 字号 评论关闭

Locate可以将当前光标定位在符合条件的记录上,Locate的第一个参数是条件字段,第二个参数是条件
值,第三个参数指出在查找时是否考虑大小写,是否部分匹配。Locate可以设置多个条件,如下所示:
Table1.Locate('company;contact;phone',VarArrayOf(['Sight Diver','P ','408-431-1000']),[loPartialKey]);

 

又如:

 

参与第三个参数的介绍:

loCaseInsensitive : 忽略大小写

loPartialKey : 是否采用局部相同的找法。此时, 只要搜寻条件的字串相等於栏位内容的开头文字, 即使长度不等, 仍然可判定为相等.( 就好像 xBASE 的 set exact off 的情形 )

 

用以下的例子来说明比较容易懂. 假定 Table1 为 :

cu_no cu_name
AMKB 王大同
ACJC 金士钦
BDFD 林火金

 

若 sTest 为 'AMKB':
  Table1.Locate('cu_no', sTest, [])
  ==> 当然可以找到 

若 sTest 为 'AC':
  Table1.Locate('cu_no', sTest, [])
    ==> 找不到
  Table1.Locate('cu_no', sTest, [loPartialKey])
    ==> 找到 'ACJC 金士钦 ' 这笔记录.
        因为集合中有 loPartialKey 这个项目, 此时, 'AC' 相同於 'ACJC'
        的开头两个字元, 即使两者长度不等, 也算找到.

若 sTest 为 'ac':
  Table1.Locate('cu_no', sTest, [loPartialKey])
    ==> 找不到, 因为区分大小写之故, 所以 'AC' 虽开头相同於 'ACJC',
        也不能算作符合条件.
  Table1.Locate('cu_no', sTest, [loCaseInsensitive, loPartialKey])
    ==> 找到 ACJC 金士钦 这笔记录.
        此时不再区分大小写了. 可以顺利找到接近的资料.

简言之, Locate() 的第三引数如果是空集合, 那表示找到的资料必须大小写与资料长度均相等, 也就是完全相等的方式搜寻资料 ; 而集合中的元素, 视情况加入 loCaseInsensitive( 不区分大小写 ) . loPartialKey( 局部相等 ) 则提供了搜寻近似资料的弹性作法.

如果条件只有中文字呢? loCaseInsensitive 就没有什麽意义, 加与不加都不影响结果 ; 局部搜寻仍是有效的

抱歉!评论已关闭.