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

Delphi 資料庫控件入門完全指南:資料繫結、編輯模式、刷新控制與常用控件詳解

     編輯:Delphi

資料感知控件是 Delphi 快速建構資料庫應用的基石。本文系統梳理:資料來源架構、編輯與更新機制、刷新控制策略、以及 主流資料控件(單欄位、多行文字、RTF、圖像、下拉清單、核取方塊、資料網格、資料來源) 的核心屬性與實務用法,助您快速上手。

一、資料繫結架構:DataSet → DataSource → DataControl

  1. 放置資料集元件(TTable/TQuery/TADOTable),設定 DatabaseName、TableName、Active = True
  2. 放置 TDataSource,設定 DataSet 指向上述資料集
  3. 放置資料控件(TDBEdit、TDBGrid 等),設定 DataSource 指向 TDataSource
  4. 單欄位控件另需設定 DataField 指定顯示欄位;TDBGrid、TDBCtrlGrid、TDBNavigator 操作整個資料集,無需設定 DataField

二、編輯與更新機制

條件結果
DataSource.AutoEdit = True(預設)使用者輸入時自動進入 dsEdit 模式
DataSource.AutoEdit = False需程式呼叫 DataSet.Edit 才能編輯
DataControl.ReadOnly = False允許使用者修改
DataControl.ReadOnly = True唯讀顯示
DataSet.ReadOnly = True資料集層級鎖定,修改不會寫入

焦點移動觸發寫入: 非 TDBGrid 控件需將焦點移離該控件(或按 Esc 取消);TDBGrid 需移至另一筆記錄。

三、刷新控制:DisableControls / EnableControls

遍歷或搜尋大量資料時,暫停控件重繪可大幅提升效能並避免閃爍:

CustTable.DisableControls;
try
  CustTable.First;
  while not CustTable.EOF do begin
    // 處理邏輯
    CustTable.Next;
  end;
finally
  CustTable.EnableControls;  // 確保即使發生例外也會恢復
end;

建議永遠採用 try...finally 結構保證配對呼叫。

四、手動刷新:Refresh 方法

多使用者環境下,呼叫 DataSet.Refresh 可重讀最新資料。注意:若他人已刪除當前記錄,Refresh 後該記錄將從控件消失。

五、常用資料控件詳解

1. 單欄位顯示與編輯

控件基底類別用途關鍵屬性
TDBTextTLabel唯讀標籤顯示欄位值AutoSize = True 避免截斷
TDBEditTEdit單行文字編輯ReadOnly, DataField
TDBMemoTMemo多行文字/備註欄位WantTabs, MaxLength, ScrollBars, WordWrap, AutoDisplay
TDBRichEditTRichEditRTF 格式化文字(BLOB)需自行設計工具列發揮功能
TDBImageTImage圖像欄位(BLOB)Stretch, AutoDisplay, CutToClipboard/CopyToClipboard/PasteFromClipboard

2. 下拉清單與查找控件

控件資料來源特性
TDBListBox靜態 Items單選清單
TDBComboBox靜態 Items可輸入或選擇,Style=csOwnerDrawFixed 時可設 ItemHeight
TDBLookupListBox另一 DataSet顯示查找表欄位,ListField/KeyField/ListSource
TDBLookupComboBox另一 DataSet下拉式查找,同 TDBLookupListBox 設定

查找範例: 訂單表 OrdersTable 含 CustNo,客戶表 CustomersTable 含 CustNo、Company。設定 TDBLookupComboBox.ListSource = CustomersSource、ListField = Company、KeyField = CustNo、DataField = CustNo、DataSource = OrdersSource,即可在訂單編輯時以公司名稱選擇客戶。

3. 核取方塊處理布林/字串欄位

TDBCheckBox 將欄位值與 ValueChecked、ValueUnchecked 比對(支援分號分隔多值,如 'True;Yes;On'),匹配則勾選,否則取消;兩者皆不符時呈現灰色不確定狀態。區分大小寫。

4. TDBGrid 進階:動態欄 vs 永久欄

  • 動態欄(csDefault): 依資料集欄位自動生成,切換資料集無需重設計,但設計期無法調整欄屬性
  • 永久欄(csCustomized): 設計期透過 Columns 編輯器建立,可自訂 Caption、Width、Alignment、ButtonStyle 等,適合固定結構報表

建立永久欄:選取 Grid → Object Inspector 雙擊 Columns → 右鍵選單 Add All Fields 或工具列 Add New。永久欄刪除後自動回復動態模式。

技巧:FieldName 可留空建立空白欄,用於 OnDrawColumnCell 繪製圖示、圖表等自訂內容;多欄可指向同一 FieldName。

5. TDataSource 事件與動態切換資料集

// 動態切換資料集
with CustSource do
  if DataSet = Customers then DataSet := Orders else DataSet := Customers;

// 跨表單引用
procedure TForm2.FormCreate(Sender: TObject);
begin
  DataSource1.DataSet := Form1.Table1;
end;

事件:OnDataChange(記錄位置變更)、OnUpdateData(寫入前驗證)。AutoEdit 控制自動進入編輯模式。

六、最佳實務小撇步

  • 設計期設定 Active = True 即時預覽資料,開發效率倍增
  • 大量異動前後務必 DisableControls/EnableControls 配對
  • 查找控件搭配 TDBLookupComboBox 替代硬寫下拉選單,維護性更佳
  • TDBGrid 永久欄模式下修改 Title.Caption 不影響底層 Field.DisplayLabel

掌握上述核心概念與控件特性,即可高效開發專業級資料庫應用程式。

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