程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> TClientDataSet[23]: 使用數據集字段(TDataSetField)

TClientDataSet[23]: 使用數據集字段(TDataSetField)

編輯:Delphi

運行時的設計方法:

TClientDataSet[23]: 使用數據集字段(TDataSetField)

  設計時的准備工作:

  ClIEntDataSet1、DataSource1、DBGrid1 並關聯, 這用於主表;

  ClIEntDataSet2、DataSource2、DBGrid2 並關聯, 這將成為主表的一個字段(或叫嵌套表);

  還可以放個 Splitter1 來協調 DBGrid 的大小.

procedure TForm1.FormCreate(Sender: TObject); 
begin 
 { 主表: 定義了兩個字段, 其中 "銷售明細" 是 DataSet 字段 }  
 with TStringFIEld.Create(Self) do begin 
  FIEldName := '銷售員'; 
  Size := 11; 
  DataSet := ClIEntDataSet1; 
 end; 
 with TDataSetFIEld.Create(Self) do begin 
  FIEldName := '銷售明細'; 
  DataSet := ClIEntDataSet1; 
 end; 
 
 { 從表: 定義了三個字段 } 
 with TIntegerFIEld.Create(Self) do begin 
  FIEldName := '商品ID'; 
  DataSet := ClIEntDataSet2; 
 end; 
 
 with TStringFIEld.Create(Self) do begin 
  FIEldName := '商品名稱'; 
  Size := 7; 
  DataSet := ClIEntDataSet2; 
 end; 
 
 with TIntegerFIEld.Create(Self) do begin 
  FIEldName := '銷售數量'; 
  DataSet := ClIEntDataSet2; 
 end; 
 
 { 讓 ClientDataSet1 的 DataSet 字段(銷售明細) 關聯到 ClIEntDataSet2 } 
 ClientDataSet2.DataSetField := TDataSetField(ClientDataSet1.FIEldByName('銷售明細')); 
 ClientDataSet1.CreateDataSet; { 數據集 ClientDataSet2 現在是 ClIEntDataSet1 的一個字段 } 
 
 { 添加測試數據 } 
 ClIEntDataSet1.AppendRecord(['張三']); 
 ClIEntDataSet2.AppendRecord([1, '手機', 11]); 
 ClIEntDataSet2.AppendRecord([2, '電腦', 22]); 
 ClIEntDataSet2.AppendRecord([3, '打印機', 33]); 
 
 ClIEntDataSet1.AppendRecord(['李四']); 
 ClIEntDataSet2.AppendRecord([1, '手機', 55]); 
 ClIEntDataSet2.AppendRecord([2, '電腦', 66]); 
 
 ClIEntDataSet1.AppendRecord(['王五']); 
 ClIEntDataSet2.AppendRecord([3, '打印機', 77]); 
end; 
 
{ 訪問嵌套表的方法 } 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 DataSetField: TDataSetFIEld; 
begin 
 DataSetField := ClientDataSet1.FieldByName('銷售明細') as TDataSetFIEld; 
 ShowMessage(DataSetField.NestedDataSet.FIElds[1].AsString); 
 ShowMessage(DataSetField.FIElds[1].AsString); 
end; 

 僅就這個例子來講, "商品"和對應的編號應該是統一的, 為避免出錯和輸入方便, 這裡應該使用查找字段.

  下面是為添加查找字段重寫的代碼(設計時再多添加一個 ClIEntDataSet3 ):

procedure TForm1.FormCreate(Sender: TObject); 
begin 
 { 先准備給 ClIEntDataSet2 的查找字段使用的數據集} 
 with ClIEntDataSet3 do begin 
  FIEldDefs.Add('ID', ftInteger); 
  FIEldDefs.Add('Name', ftString, 7); 
  CreateDataSet; 
  AppendRecord([1, '手機']); 
  AppendRecord([2, '電腦']); 
  AppendRecord([3, '打印機']); 
  AppendRecord([4, '掃描儀']); 
 end; //------------------------------------------ 
 
 { 主表: 定義了兩個字段, 其中 "銷售明細" 是 DataSet 字段 } 
 with TStringFIEld.Create(Self) do begin 
  FIEldName := '銷售員'; 
  Size := 11; 
  DataSet := ClIEntDataSet1; 
 end; 
 with TDataSetFIEld.Create(Self) do begin 
  FIEldName := '銷售明細'; 
  DataSet := ClIEntDataSet1; 
 end; 
 
 { 從表: 定義了三個字段 } 
 with TIntegerFIEld.Create(Self) do begin 
  FIEldName := '商品ID'; 
  DataSet := ClIEntDataSet2; 
 end; 
 
 with TStringFIEld.Create(Self) do begin { 這個定義為查找字段 } 
  FIEldName := '商品名稱'; 
  FIEldKind := fkLookup; 
  DataSet := ClIEntDataSet2; 
  KeyFIElds := '商品ID'; 
  LookupDataSet := ClIEntDataSet3; 
  LookupKeyFIElds := 'ID'; 
  LookupResultFIEld := 'Name'; 
 end; 
 
 with TIntegerFIEld.Create(Self) do begin 
  FIEldName := '銷售數量'; 
  DataSet := ClIEntDataSet2; 
 end; 
 
 { 讓 ClientDataSet1 的 DataSet 字段(銷售明細) 關聯到 ClIEntDataSet2 } 
 ClientDataSet2.DataSetField := TDataSetField(ClientDataSet1.FIEldByName('銷售明細')); 
 ClientDataSet1.CreateDataSet; { 數據集 ClientDataSet2 現在是 ClIEntDataSet1 的一個字段 } 
 
 { 添加測試數據 } 
 ClIEntDataSet1.AppendRecord(['張三']); 
 ClIEntDataSet2.AppendRecord([1, null, 11]); { 查找字段會自動填寫, 不需要輸入 } 
 ClIEntDataSet2.AppendRecord([2, null, 22]); 
 ClIEntDataSet2.AppendRecord([3, null, 33]); 
 
 ClIEntDataSet1.AppendRecord(['李四']); 
 ClIEntDataSet2.AppendRecord([1, null, 55]); 
 ClIEntDataSet2.AppendRecord([2, null, 66]); 
 
 ClIEntDataSet1.AppendRecord(['王五']); 
 ClIEntDataSet2.AppendRecord([3, null, 77]); 
end; 

  設計時完成數據集字段:

TClientDataSet[23]: 使用數據集字段(TDataSetField)

  查看原圖(大圖)



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved