1. 程式人生 > 其它 >Delphi Locate函式[1] - 查詢、定位

Delphi Locate函式[1] - 查詢、定位

Delphi TDataSet.Locate函式 - 查詢、定位

使用ADO等資料控制元件的時候,經常會用到 locate 函式在結果資料集中查詢和定位,下面介紹一下:

原型:

1 function Locate(const KeyFields: stringconst KeyValues: Variant; Options: TLocateOptions): Boolean;

Locate 方法的3個引數:

1、KeyFields //欄位名稱。單一欄位,直接傳入欄位名稱。多個欄位條件查尋,欄位名稱以分號分隔每一個欄位名稱,例如:‘A1;A2;A3’
2、KeyValues  //條件數值。型別 Variant,幾乎可以代表任何的型別,可查整數、小數、字串,或是布林值的條件。同樣,查尋一個條件數值,直接在引數位置傳入。如果是以多個欄位條件來查尋,

  那麼開發人員必須建立一個Variant陣列,然後在這個陣列中的每一個元素中指定條件數值,再傳遞Variant陣列到這個引數中。至於Variant陣列則可以使用VarArrayOf方法,或是使用VarArrayCreate方法來建立

  例如:VarArrayOf( [ Name1,Name2 ] )

3、TLocateOptions //查詢選項標準。例如:不分大小寫查尋字串資料,或以部分字串數值來查尋資料(模糊查詢)。兩個引數型別:

  • loCaseInsensitive  不區分大小寫查尋資料; 
  • loPartialKey  以部分字串查尋資料(模糊查詢)。
  • 原型:
    1 2 3 4 5 Unit   DB type   TLocateOption = (loCaseInsensitive, loPartialKey);   TLocateOptions = set of TLocateOption;  

單獨使用:

  • [ loCaseInsensitive ]  不區分大小寫,(關鍵字欄位和關鍵字值的匹配不考慮大小寫)
  • [ loPartialKey ]  區分大小寫,模糊查詢資料(鍵值只能包含部分匹配的鍵值欄位;例如,“HAM”會同時匹配“HAMM”和“HAMMER”)

一起使用:

  • [ loCaseInsensitive ,loPartialKey ]  不區分大小寫,模糊查詢資料

示例:

1 2 3 4 5 6 7 8 Name1:= ADOQuery1.FieldbyName('A1').AsString;     Name2:= ADOQuery1.FieldbyName('A2').AsString;         ADOQuery1.Locate('A1', Name1, []);              //精確查詢 ADOQuery1.Locate('A1', Name1, [loPartialKey]);  //模糊查詢 ADOQuery1.Locate('A1', Name1, [loCaseInsensitive,loPartialKey]); //模糊查詢,不區分大小寫 ADOQuery1.Locate('A1;A2', VarArrayOf([Name1,Name2]), []);        //多個數據一起查詢,精確匹配 ADOQuery1.Locate('A1;A2', VarArrayOf([Name1,Name2]), [loCaseInsensitive]); //多個數據一起查詢,不區分大小寫 精確匹配 ADOQuery1.Locate('A1;A2', VarArrayOf([Name1,Name2]), [loPartialKey,loCaseInsensitive]); //多個數據一起查詢,不區分大小寫 模糊匹配

 

 

返回值:

 Locate 方法的回傳數值是布林值,表示是否成功找到了要查尋的資料。找到,就回傳True,否則就回傳False。

 當成功地查尋到資料之後,它就會移動目前的記錄位置到這個資料上,否則就會停留在Locate開始查尋之前的記錄位置上。

 注意:查尋資料的結果是一條資料,如果想查尋符合條件的一群資料,需使用 過濾器(Filter)功能。

 

作者有感:

  一個簡單的查詢/定位 函式 網路上文章參差不齊,誤導了很多人,修改和優化多次,認真實踐和研讀才能領會。