TDataSource 本身簡單輕量,屬性/事件/方法寥寥數個,却是連結 TTable/TQuery 與 DBGrid/DBEdit 等視覺元件的關鍵。若無資料感知元件,甚至不需放置。
| 屬性 | 型別 | 說明 |
|---|---|---|
DataSet | TDataSet | 指定資料來源(Table/Query),可跨視窗指派:DataSource1.DataSet := Form2.Table1; |
Enabled | Boolean | False 切斷與資料集連線,所有關聯視覺元件變空白。實務多用資料集的 DisableControls/EnableControls 批次控制。 |
AutoEdit | Boolean | True:使用者在視覺元件輸入即自動進入編輯狀態;False:需呼叫資料集 Edit 方法才能修改。 |
資料集指標變動(Next/Prior/Insert/Append 等)觸發。常用於多元件同步,如 Detail Grid 隨 Master 移動自動重查。
Post 呼叫後、資料真正寫回磁碟前觸發。非資料感知元件(如自訂編輯框)需在此同步資料集。
資料集 State 屬性變化時觸發。State 值:dsInactive/dsBrowse/dsEdit/dsInsert/dsSetKey。
procedure TForm1.DataSource1StateChange(Sender: TObject);
var S: string;
begin
case Table1.State of
dsInactive: S := 'Inactive';
dsBrowse: S := 'Browse';
dsEdit: S := 'Edit';
dsInsert: S := 'Insert';
dsSetKey: S := 'SetKey';
end;
Label1.Caption := S;
end;
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
InsertBtn.Enabled := (Table1.State = dsBrowse); // 只在瀏覽態可新增
CancelBtn.Enabled := Table1.State in [dsInsert, dsEdit, dsSetKey]; // 編輯/新增/查找態可取消
end;
善用 OnStateChange 可讓 UI 即時反映資料操作狀態,避免使用者誤操作。
| 字段元件類別 | 對應資料型別 | 範圍/備註 |
|---|---|---|
TStringField | 字串 | — |
TSmallIntField | 短整數 | -32768~32767 |
TIntegerField | 整數 | — |
TWordField | 無號整數 | 0~65535 |
TBooleanField | 布林 | — |
TFloatField | 浮點數 | — |
TCurrencyField | 貨幣 | 固定 4 位小數 |
TDateField | 日期 | — |
TTimeField | 時間 | — |
TBCDField | 固定精度浮點 | — |
TDateTimeField | 日期時間 | — |
本書重點介紹常用型別,其餘請參閱線上說明。