Delphi Locate函式[1] - 查詢、定位
阿新 • • 發佈:2022-03-09
Delphi TDataSet.Locate函式 - 查詢、定位
使用ADO等資料控制元件的時候,經常會用到 locate 函式,在結果資料集中查詢和定位,下面介紹一下:
原型:
1 |
function Locate( const KeyFields: string ; const 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)功能。
作者有感:
一個簡單的查詢/定位 函式 網路上文章參差不齊,誤導了很多人,修改和優化多次,認真實踐和研讀才能領會。