首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 資料庫查找技術全解析:GotoKey/FindKey 精確查找、GotoNearest/FindNearest 不精確查找、SetKey/IndexFieldNames 關鍵設定完整指南

     編輯:Delphi

GotoKey 精確查找四步驟

  1. 確保查找欄位為關鍵字或已定義輔助索引,且 TTable.IndexFieldNames 含關鍵欄位名或索引名
  2. 呼叫 SetKey 將 TTable 置入查找模式
  3. 將查找值送入被查找欄位的查找緩衝區(賦值給 FieldByName('FieldName').AsString)
  4. 呼叫 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;

FindKey 簡化查找

功能同 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 與 FindNearest

精確查找非成即敗。不精確查找絕不失敗,總回傳最接近匹配記錄。若找到精確匹配最理想,否則回傳最接近記錄。

  • GotoNearest 用法同 GotoKey(需 SetKey + 緩衝區賦值)
  • FindNearest 用法同 FindKey(參數陣列)

查找值可不完整:查 'Dunteman' 可用 'Dunteman'、'Dun'、'Du'。若無精確匹配,指標停留於最接近記錄(如 'Dunwoody' 或 'Event')。若查 'Du' 可能停留 'Duncan' 甚至 'Dunteman' 之前。Delphi 自動調整指標指向最接近記錄。

兩方法均回傳 Boolean 指示是否精確匹配,但總會移動指標至某位置。

實作範例:公司名稱不精確查找

建立表單,編輯框輸入不完整公司名稱,按「不精確查找」按鈕觀察結果與指標位置。重複測試理解運作機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved