delphi TClientDataSet[23]: 使用数据集字段(TDataSetField)  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi TClientDataSet[23]: 使用数据集字段(TDataSetField)


TClientDataSet[23]: 使用数据集字段(TDataSetField)


运行时的设计方法:

o_10012102.gif



设计时的准备工作:

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;



设计时完成数据集字段:

o_10020602.gif


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.041233062744141 seconds