翻譯|使用教程|編輯:李爽夏|2019-01-30 11:39:53.000|閱讀 533 次
概述:本篇文章介紹使用UniDAC中的兩個表之間的主/細節(MD)關系。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Universal Data Access Components (UniDAC)是一款通用數據庫訪問組件,提供了多個數據庫的直接訪問,如針對Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。我們將長期的經驗集于這個小組件,提供統一的數據庫連接訪問(如oracle、微軟SQL等等)。這意味著您可以在您的項目之間輕松地切換不同的數據庫,以及創建跨數據庫應用程序接口。
兩個表之間的主/細節(MD)關系非常廣泛。因此,為數據庫應用程序開發人員提供一種簡單的方法來使用它是非常重要的。讓我們研究一下UniDAC是如何實現這一特性的。
假設我們在“Department”和“Employee”表之間有典型的MD關系。
“Department”表中有字段Dept_No。Dept_No是主鍵。
“Employee”表有一個主鍵EmpNo和一個將“Employee”綁定到“Department”的外鍵Dept_No。
必須顯示和編輯這些表。
UniDAC提供了兩種綁定表的方法。第一個代碼示例演示如何通過參數將兩個TCustomUniDataSet組件綁定到MD關系中。
procedure TForm1.Form1Create(Sender: TObject); var Master, Detail: TUniQuery; MasterSource: TDataSource; begin // create master dataset Master := TUniQuery.Create(Self); Master.SQL.Text := 'SELECT * FROM Department'; // create detail dataset Detail := TUniQuery.Create(Self); Detail.SQL.Text := 'SELECT * FROM Employee WHERE Dept_No = :Dept_No'; // connect detail dataset with master via TDataSource component MasterSource := TDataSource.Create(Self); MasterSource.DataSet := Master; Detail.MasterSource := MasterSource; // open master dataset and only then detail dataset Master.Open; Detail.Open; end;
注意一點:細節數據集SQL中的參數名必須等于用作細節表外鍵的主數據集中的字段名或別名。打開細節數據集后,始終保留Dept_No字段值等于當前主數據集記錄中的字段值的記錄。
還有一個附加功能:當向細節數據集插入新記錄時,它會自動用從主數據集獲取的值填充外鍵字段。
現在假設明細表“Department”外鍵字段名為DepLink,而不是Dept_No。在這種情況下,上面代碼中描述的詳細數據集不會自動填充當前“Department”的DepLink字段。Dept_No插入值。這個問題在第二個代碼示例中得到解決。
procedure TForm1.Form1Create(Sender: TObject); var Master, Detail: TUniQuery; MasterSource: TDataSource; begin // create master dataset Master := TUniQuery.Create(Self); Master.SQL.Text := 'SELECT * FROM Department'; // create detail dataset Detail := TUniQuery.Create(Self); Detail.SQL.Text := 'SELECT * FROM Employee'; // setup MD Detail.MasterFields := 'Dept_No'; // primary key in Department Detail.DetailFields := 'DepLink'; // foreign key in Employee // connect detail dataset with master via TDataSource component MasterSource := TDataSource.Create(Self); MasterSource.DataSet := Master; Detail.MasterSource := MasterSource; // open master dataset and only then detail dataset Master.Open; Detail.Open; end;
在這個代碼示例中,MD關系是使用MasterFields和DetailFields屬性建立的。還要注意,在詳細的數據集SQL中沒有WHERE子句。
要在主數據集導航期間延遲細節數據集的刷新,可以使用DetailDelay選項。
這種MD關系可以是本地的和遠程的,這取決于TCustomDADataSet.Options.LocalMasterDetail選項。如果此選項設置為True,則數據集使用本地篩選來建立主-細節關系,而不引用服務器。否則,每次在主數據集中選擇記錄時,細節數據集都執行查詢。使用本地MD關系可以減少服務器調用次數并節省服務器資源。它可以用于慢速連接。CachedUpdates模式只能用于局部MD關系的詳細數據集。當明細表包含的行太多時,不建議使用本地MD關系,因為在遠程MD關系中,只提取與主數據集中當前記錄對應的記錄。因此,在某些情況下,這可以減少網絡流量。
購買UniDAC正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn