Delphi TQuery 的Locate用法


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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM