关于数据动态加载的ClientDataset和FastReport的主从报表问题 200分

genispan 2009-01-09 03:58:54
主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中数据的主从报表显示?
...全文
242 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
twzcn222 2009-05-25
  • 打赏
  • 举报
回复
谢谢12楼分享经验,也解决了我的问题
genispan 2009-01-10
  • 打赏
  • 举报
回复
有人帮看看吗?
genispan 2009-01-10
  • 打赏
  • 举报
回复
感谢bdmh 和 SmallHand ,虽然你们没有回答正确。
genispan 2009-01-10
  • 打赏
  • 举报
回复
问题解决了,就当是散分帖了!!!!!!!!!!!!!!!!!!
解决方式如下:

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';
genispan 2009-01-09
  • 打赏
  • 举报
回复
小手 把这个加上 再看看?

DataSource1.DataSet:= ClientDataSet_Master;
ClientDataSet_Master.Active:=true;
DataSource2.DataSet:= ClientDataSet_Sub;
ClientDataSet_Sub.Active:=true;
genispan 2009-01-09
  • 打赏
  • 举报
回复
你再把ClientDataset的Active置为true 估计就有错了
genispan 2009-01-09
  • 打赏
  • 举报
回复
我写的跟你的一样啊
不过提示 Field index out of range
火龙岛主 2009-01-09
  • 打赏
  • 举报
回复
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;

经测试通过,没有报错。
你是怎么做的?
genispan 2009-01-09
  • 打赏
  • 举报
回复
我这没表啊 你看我问题里面的说明啊 数据都是从XML文件中读取的啊!!
bdmh 2009-01-09
  • 打赏
  • 举报
回复
而且要设置从clientdata的masterdatasource为主clientdata的datasource
bdmh 2009-01-09
  • 打赏
  • 举报
回复
比如主从表靠id字段关联
主 select * from 主表

从 select * from 从表 where id:=id
genispan 2009-01-09
  • 打赏
  • 举报
回复
我直接用属性 MasterSource 和 MasterField没有效果

在程序里面写

{两个ClientDataset定义部分}
ClientDataSet_Sub.MasterSource:= DataSource1;
ClientDataSet_Sub.MasterFields:='id';

报错,提示 Field out of range!
genispan 2009-01-09
  • 打赏
  • 举报
回复
我FastReport中已经那么设置了

现在关键是外面的两个ClientDataset怎么关联起来
bdmh 2009-01-09
  • 打赏
  • 举报
回复
FastReport中添加一个主数据项,一个细数据项,把主数据项的dataset设置为主数据集,细数据项设为从数据集
程序中要写好主从表的sql语句,这样就ok了

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧