TTable.IndexFieldNames 含關鍵欄位名或索引名SetKey 將 TTable 置入查找模式FieldByName('FieldName').AsString)GotoKey 並測試回傳值:True 成功(指標指向找到記錄),False 失敗(指標不變)欄位物件不可見無名稱。查找模式下,賦值給欄位物件 AsString 屬性即寫入查找緩衝區。AsString 為轉換屬性:任何字串自動轉換為該欄位對應資料庫欄位的資料型別。不支援 BLOB/Bytes/Memo/Graphic 型別轉換(亦鮮少查找此類欄位)。
procedure TForm1.Button1Click(Sender: TObject);
begin
with Table1 do
begin
Label1.Caption := '';
Label2.Caption := '';
IndexFieldNames := 'CustNo';
SetKey;
FieldByName('CustNo').AsString := Edit1.Text;
if GotoKey then
begin
Label1.Caption := '查找成功';
Label2.Caption := FieldByName('Phone').AsString;
end
else
Label1.Caption := '查找失敗';
end;
end;
功能同 GotoKey 但更簡單:查找值作為參數傳遞給 FindKey,無需 SetKey 與緩衝區賦值。參數為方括號包裹的陣列(逗號分隔),支援多欄位同時查找。
procedure TForm1.Button1Click(Sender: TObject);
var SeekValue: string;
begin
with Table1 do
begin
Label1.Caption := '';
Label2.Caption := '';
IndexFieldNames := 'CustNo';
SeekValue := Edit1.Text;
if FindKey([SeekValue]) then
begin
Label1.Caption := '查找成功';
Label2.Caption := FieldByName('Phone').AsString;
end
else
Label1.Caption := '查找失敗';
end;
end;
多欄位查找:IndexFieldNames 指定多欄位(逗號分隔),FindKey 參數陣列對應各欄位查找值。
精確查找非成即敗。不精確查找絕不失敗,總回傳最接近匹配記錄。若找到精確匹配最理想,否則回傳最接近記錄。
GotoNearest 用法同 GotoKey(需 SetKey + 緩衝區賦值)FindNearest 用法同 FindKey(參數陣列)查找值可不完整:查 'Dunteman' 可用 'Dunteman'、'Dun'、'Du'。若無精確匹配,指標停留於最接近記錄(如 'Dunwoody' 或 'Event')。若查 'Du' 可能停留 'Duncan' 甚至 'Dunteman' 之前。Delphi 自動調整指標指向最接近記錄。
兩方法均回傳 Boolean 指示是否精確匹配,但總會移動指標至某位置。
建立表單,編輯框輸入不完整公司名稱,按「不精確查找」按鈕觀察結果與指標位置。重複測試理解運作機制。
SplitEx:支援多字元分隔符、Unicode、去重與排序
Delphi 多層分布式開發:數據庫連接參數傳遞與異常處理(第 2 部分第 3 節)
輕鬆打造 ASP 圖像輸出元件:Delphi/VB 皆適用的極簡實作
Lazarus/FPC 開發 OPC Client:Interface 接口機制深度解析
Delphi Shape + Timer 圖形移動動畫:多圖形同步控制、速度可調、ListBox 選取實作