我用的是 Delphi 2007。
我知道我可以使用TClientDataSet
的.locate
方法来定位记录,如下所示:
myClient.locate('name','John',[loPartialKey,loCaseInsensitive]);
但是,让我们假设我想找到任何记录与'约翰'包含在其名称,一些东西:
名称类似于“%John%”
会在正则SQL表达式中执行此操作。
使用.locate
方法是否可以实现这一点?
看起来[loPartialKey]
的工作原理是从开始而不是包含。
4条答案
按热度按时间dxpyg8gm1#
在.Locate中,loPartialKey从字段值的第一个字符开始匹配,因此您不能只使用. Locate来完成您想要的操作。
但是,TClientDataSet * 的Filter属性可以 * 包含
like
,如将CDS的Filter属性设置为或者,在代码中,
因此,您可以使用筛选器来缩小行数,然后使用Locate来查找特定的行,或者简单地遍历筛选后的行来查找所需的确切行。
qfe3c7zg2#
不。在第一部分可以部分匹配。如"使用定位"的帮助中所述。
Locate将光标移动到与指定的搜索条件集匹配的第一行。在其最简单的形式中,您传递Locate要搜索的列的名称、要匹配的字段值以及指定搜索是否不区分大小写或是否可以使用部分键匹配的选项标志。(部分关键字匹配是指条件字符串只需是字段值的前缀。)例如,以下代码将光标移动到CustTable中Company列中值为"Professional Divers,Ltd."的第一行:
参考:Delphi online documentation: Using Locate
mfpqipee3#
LocateRecord在内部使用DSCursor.LocateWithFilter,所以我相信可以编写自定义方法来执行您想要的操作
tp5buhyn4#
最好使用.FindFirst和.FindNext:
使用。当您要搜索知道确切值的键时,请查找。
对于您不介意其他记录是否会在dbGrid上消失的情况,只使用Filtered:= true就可以了。