咔藞 發表於 2022-3-9 18:53:00

Delphi Locate函数[1] - 查询、定位

<p><strong>Delphi TDataSet.Locate函数 - 查询、定位</strong></p>
<p>使用ADO等数据控件的时候,经常会用到<strong>&nbsp;locate 函数</strong>,<strong>在结果数据集中查询和定位</strong>,下面介绍一下:</p>
<p>原型:</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_683625" class="syntaxhighlighterdelphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi keyword">function</code>&nbsp;<code class="delphi plain">Locate(</code><code class="delphi keyword">const</code>&nbsp;<code class="delphi plain">KeyFields:&nbsp;</code><code class="delphi keyword">string</code><code class="delphi plain">;&nbsp;</code><code class="delphi keyword">const</code>&nbsp;<code class="delphi plain">KeyValues: Variant; Options: TLocateOptions):&nbsp;</code><code class="delphi keyword">Boolean</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>Locate 方法的3个参数:</p>
<p>1、KeyFields //字段名称。单一字段,直接传入字段名称。多个字段条件查寻,字段名称以分号分隔每一个字段名称,例如:‘A1;A2;A3’<br>2、KeyValues&nbsp; //条件数值。类型 Variant,几乎可以代表任何的类型,可查整数、小数、字符串,或是布尔值的条件。同样,查寻一个条件数值,直接在参数位置传入。如果是以多个字段条件来查寻,</p>
<p>  那么开发人员必须建立一个Variant数组,然后在这个数组中的每一个元素中指定条件数值,再传递Variant数组到这个参数中。至于Variant数组则可以使用VarArrayOf方法,或是使用VarArrayCreate方法来建立</p>
<p>  例如:VarArrayOf( [ Name1,Name2 ] )</p>
<p>3、TLocateOptions //查询选项标准。例如:不分大小写查寻字符串数据,或以部分字符串数值来查寻数据(模糊查询)。两个参数类型:</p>
<ul>
<li><strong>loCaseInsensitive&nbsp; 不区分大小写查寻数据;&nbsp;</strong></li>
<li><strong>loPartialKey&nbsp; 以部分字符串查寻数据(模糊查询)。</strong></li>
<li>原型:
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_258479" class="syntaxhighlighterdelphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi keyword">Unit</code></div>
<div class="line number2 index1 alt1"><code class="delphi spaces">&nbsp;&nbsp;</code><code class="delphi plain">DB</code></div>
<div class="line number3 index2 alt2"><code class="delphi keyword">type</code></div>
<div class="line number4 index3 alt1"><code class="delphi spaces">&nbsp;&nbsp;</code><code class="delphi plain">TLocateOption = (loCaseInsensitive, loPartialKey);</code></div>
<div class="line number5 index4 alt2"><code class="delphi spaces">&nbsp;&nbsp;</code><code class="delphi plain">TLocateOptions =&nbsp;</code><code class="delphi keyword">set</code>&nbsp;<code class="delphi keyword">of</code>&nbsp;<code class="delphi plain">TLocateOption;  </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</li>
</ul>
<p>单独使用:</p>
<ul>
<li>[&nbsp;loCaseInsensitive&nbsp;]&nbsp; 不区分大小写,(关键字字段和关键字值的匹配不考虑大小写)</li>
<li>[&nbsp;loPartialKey ]&nbsp; 区分大小写,模糊查询数据(键值只能包含部分匹配的键值字段;例如,“HAM”会同时匹配“HAMM”和“HAMMER”)</li>
</ul>
<p>一起使用:</p>
<ul>
<li>[ loCaseInsensitive ,loPartialKey ]&nbsp; 不区分大小写,模糊查询数据</li>
</ul>
<p>示例:</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_274188" class="syntaxhighlighterdelphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi plain">Name1:= ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">FieldbyName(</code><code class="delphi string">'A1'</code><code class="delphi plain">).AsString;&nbsp;&nbsp;&nbsp;&nbsp;</code></div>
<div class="line number2 index1 alt1"><code class="delphi plain">Name2:= ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">FieldbyName(</code><code class="delphi string">'A2'</code><code class="delphi plain">).AsString;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div>
<div class="line number3 index2 alt2"><code class="delphi plain">ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">Locate(</code><code class="delphi string">'A1'</code><code class="delphi plain">, Name1, []);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="delphi comments">//精确查询</code></div>
<div class="line number4 index3 alt1"><code class="delphi plain">ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">Locate(</code><code class="delphi string">'A1'</code><code class="delphi plain">, Name1, );&nbsp;&nbsp;</code><code class="delphi comments">//模糊查询</code></div>
<div class="line number5 index4 alt2"><code class="delphi plain">ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">Locate(</code><code class="delphi string">'A1'</code><code class="delphi plain">, Name1, );&nbsp;</code><code class="delphi comments">//模糊查询,不区分大小写</code></div>
<div class="line number6 index5 alt1"><code class="delphi plain">ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">Locate(</code><code class="delphi string">'A1;A2'</code><code class="delphi plain">, VarArrayOf(), []);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="delphi comments">//多个数据一起查询,精确匹配</code></div>
<div class="line number7 index6 alt2"><code class="delphi plain">ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">Locate(</code><code class="delphi string">'A1;A2'</code><code class="delphi plain">, VarArrayOf(), );&nbsp;</code><code class="delphi comments">//多个数据一起查询,不区分大小写 精确匹配</code></div>
<div class="line number8 index7 alt1"><code class="delphi plain">ADOQuery1</code><code class="delphi value">.</code><code class="delphi plain">Locate(</code><code class="delphi string">'A1;A2'</code><code class="delphi plain">, VarArrayOf(), );&nbsp;</code><code class="delphi comments">//多个数据一起查询,不区分大小写 模糊匹配</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>返回值:</strong></p>
<p> Locate 方法的回传数值是布尔值,表示是否成功找到了要查寻的数据。找到,就回传True,否则就回传False。</p>
<p> 当成功地查寻到数据之后,它就会移动目前的记录位置到这个数据上,否则就会停留在Locate开始查寻之前的记录位置上。</p>
<p> 注意:查寻数据的结果是一条数据,如果想查寻符合条件的一群数据,需使用 过滤器(Filter)功能。<br><br></p>
<p>&nbsp;</p>
<p>作者有感:</p>
<p>  一个简单的查询/定位 函数 网络上文章参差不齐,误导了很多人,修改和优化多次,认真实践和研读才能领会。</p><br><br>
来源:https://www.cnblogs.com/karkash/p/15986582.html
頁: [1]
查看完整版本: Delphi Locate函数[1] - 查询、定位