在 C++Builder 使用 TTable、TQuery 等資料集元件時,Locate() 方法是快速定位記錄的利器。搭配 TLocateOptions 選項集合,可實現不區分大小寫、部分比對等彈性搜尋邏輯。
bool __fastcall Locate(const AnsiString KeyFields, const Variant &KeyValues, TLocateOptions Options);
"Field1;Field2")VarArrayOf() 建立 Variant 陣列TLocateOptions 集合,可包含 loCaseInsensitive (不區分大小寫)、loPartialKey (部分比對/前綴比對)void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool FindSuccess;
TLocateOptions SearchOptions;
SearchOptions.Clear(); // 清空選項
SearchOptions << loCaseInsensitive; // 加入「不區分大小寫」選項
// 在 "字段名" 欄位中搜尋 Edit1 的文字
FindSuccess = Table1->Locate("字段名", Edit1->Text, SearchOptions);
if (FindSuccess)
ShowMessage("找到符合記錄!");
else
ShowMessage("查無此資料。");
}
| 選項 | 效果 | 適用情境 |
|---|---|---|
loCaseInsensitive | 不區分英文大小寫 | 使用者輸入查詢、姓名搜尋 |
loPartialKey | 部分比對 (前綴比對) | 自動完成、關鍵字提示 |
loCaseInsensitive | loPartialKey | 不區分大小寫 + 部分比對 | 最彈性的模糊搜尋 |
TLocateOptions Opts;
Opts << loCaseInsensitive << loPartialKey;
Variant keyVals = VarArrayOf(OPENARRAY(Variant, (EditName->Text, EditCity->Text)));
if (Table1->Locate("姓名;城市", keyVals, Opts)) {
// 找到同時符合姓名前綴與城市前綴的記錄
}
Locate 若能利用現有索引會極快,否則會進行全表掃描。大量資料建議搭配 IndexFieldNames 或使用 TQuery 配合 SQL WHERE 子句。KeyValues 的型別必須與欄位型別相容,字串欄位傳入 AnsiString,數值欄位傳入數字。善用 TLocateOptions 可大幅提升資料查詢的使用者體驗,是 C++Builder 資料庫應用開發的必備技巧。