主ClientDataset定义如下:  ClientDataSet_Master:=TClientDataSet.Create(nil);
  ClientDataSet_Master.FieldDefs.Add('id',ftstring,50);
  ClientDataSet_Master.FieldDefs.Add('path',ftstring,50);
  ClientDataSet_Master.CreateDataSet;                 
  ClientDataSet_Master.Active;从ClientDataset定义如下:      ClientDataSet_Sub:=TClientDataSet.Create(nil);
      ClientDataSet_Sub.FieldDefs.Add('id',ftstring,50);
      ClientDataSet_Sub.FieldDefs.Add('date',ftstring,10);
      ClientDataSet_Sub.FieldDefs.Add('statvalue',ftstring,10);
      ClientDataSet_Sub.CreateDataSet;
      ClientDataSet_Sub.Active;说明:此两个ClientDataset中的数据是从XML文件中读取的,且分别对应DataSource1和DataSource2.它们中的数据可以通过id字段进行关联。现在问题是 如何用FastReport实现两个Dataset中数据的主从报表显示?

解决方案 »

  1.   

    FastReport中添加一个主数据项,一个细数据项,把主数据项的dataset设置为主数据集,细数据项设为从数据集
    程序中要写好主从表的sql语句,这样就ok了
      

  2.   

    我FastReport中已经那么设置了 现在关键是外面的两个ClientDataset怎么关联起来
      

  3.   

    我直接用属性 MasterSource 和 MasterField没有效果 在程序里面写  {两个ClientDataset定义部分}
      ClientDataSet_Sub.MasterSource:= DataSource1;
      ClientDataSet_Sub.MasterFields:='id'; 报错,提示 Field out of range!
      

  4.   

    比如主从表靠id字段关联
    主 select * from 主表从 select * from 从表 where id:=id
      

  5.   

    而且要设置从clientdata的masterdatasource为主clientdata的datasource
      

  6.   

    我这没表啊 你看我问题里面的说明啊 数据都是从XML文件中读取的啊!!
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ClientDataSet_Master:TClientDataSet;
      ClientDataSet_Sub:TClientDataSet;
    begin
      ClientDataSet_Master:=TClientDataSet.Create(self);
      ClientDataSet_Master.FieldDefs.Add('id',ftstring,50);
      ClientDataSet_Master.FieldDefs.Add('path',ftstring,50);
      ClientDataSet_Master.CreateDataSet;  ClientDataSet_Sub:=TClientDataSet.Create(self);
      ClientDataSet_Sub.FieldDefs.Add('id',ftstring,50);
      ClientDataSet_Sub.FieldDefs.Add('date',ftstring,10);
      ClientDataSet_Sub.FieldDefs.Add('statvalue',ftstring,10);
      ClientDataSet_Sub.CreateDataSet;  ClientDataSet_Sub.MasterSource:= DataSource1;
      ClientDataSet_Sub.MasterFields:='id';  ClientDataSet_Master.Active;
      ClientDataSet_Sub.Active;end;
    经测试通过,没有报错。
    你是怎么做的?
      

  8.   

    我写的跟你的一样啊 
    不过提示 Field index out of range
      

  9.   

    你再把ClientDataset的Active置为true 估计就有错了
      

  10.   

    小手 把这个加上 再看看?      DataSource1.DataSet:= ClientDataSet_Master;
         ClientDataSet_Master.Active:=true;
         DataSource2.DataSet:= ClientDataSet_Sub;
         ClientDataSet_Sub.Active:=true;
      

  11.   

    问题解决了,就当是散分帖了!!!!!!!!!!!!!!!!!!
    解决方式如下:      ClientDataSet_Master.FieldDefs.Add('BH',ftstring,8);
          ClientDataSet_Master.FieldDefs.Add('path',ftstring,50);
          ClientDataSet_Master.IndexFieldNames:='BH';               //========加上此句
          ClientDataSet_Master.CreateDataSet;                     
           ClientDataSet_Master.Active;
          ClientDataSet_Sub:=TClientDataSet.Create(self);
          ClientDataSet_Sub.FieldDefs.Add('BH',ftstring,8);
          ClientDataSet_Sub.FieldDefs.Add('date',ftstring,10);
          ClientDataSet_Sub.IndexFieldNames:='BH';                 //=========加上此句
          ClientDataSet_Sub.CreateDataSet;
          ClientDataSet_Sub.Active;      ClientDataSet_Sub.MasterSource:= DataSource1;   // 主从报表部分代码
          ClientDataSet_Sub.MasterFields:='BH';
      

  12.   

    感谢bdmh  和 SmallHand ,虽然你们没有回答正确。