FastRepor循环取数

伏特加 2008-10-29 08:57:43
我做了一个户籍管理系统,例如一家人,有好几口人,怎么样才能把它打在一个报表上,报表我已经设计好了,但不知道如何才能循环取数,我只会取一个,不知道怎样才能多取啊。


如上图:姓名1.姓名2,姓名3,
性别1,性别2,性别3...
每页取三组数据,大于三组的放入下一页。。求急啊,我找了很多都没有找到相关的贴子。
...全文
412 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
耙子 2008-11-07
  • 打赏
  • 举报
回复
你给的数据库我在2005里面附加不上。
请把数据库备份出来或者导入access里面
耙子 2008-11-05
  • 打赏
  • 举报
回复
pazee@21cn.com

不是不加QQ,而是我不用qq。呵呵
kye_jufei 2008-11-05
  • 打赏
  • 举报
回复
reportmachine masterdata解决
llh6795 2008-11-05
  • 打赏
  • 举报
回复
学习了
伏特加 2008-11-04
  • 打赏
  • 举报
回复
我这么整理了一个精简的demo,如果不想加QQ的可以通邮件和我说一声
我发一个,让大家一起研究一下。。谢谢了。。
邮件:liujian@jymw.com.cn
伏特加 2008-11-04
  • 打赏
  • 举报
回复
此贴已无法再加分,如果有人能帮忙。我愿意新开一贴,再赠200分。。。
伏特加 2008-11-04
  • 打赏
  • 举报
回复
恩,好的。
太谢谢了。。。我把数据文件,和工程文件一起发给你吧。
耙子 2008-11-01
  • 打赏
  • 举报
回复
没有你的调试环境,可能下面的内容不准确。
大概说一下:

1、按照我的理解,应该是三列,而不是四列,应该把【户主关系】【姓名】【别名】和相应的字段 作为一个列,只是后面两列里面不再显示【户主关系】这些;

2、通过调整 ColumnGap 为负数,让三个列存在一定的重叠,以此消除不显示【户主关系】这些带来的定位差;

3、为了实现第2、3列隐藏【户主关系】,在Band的OnBeforePrint 事件中增加如下内容

procedure Band4OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i:= <line> - 1;
if (i mod 3)=0 then begin
Memo2.Visible:= true;
end
else
Memo2.Visible:= false;
end;


4、结合之前的换页方法,应该能实现你的需求。
伏特加 2008-11-01
  • 打赏
  • 举报
回复
楼上的方法我试了,还是行不通。
我不知道说的分页到是在哪里写的?你是masterdata中的beforeprint中写的么?
如果是,分页是不成功的。
masterdata我是用来绑定主数据的,而detaildata是用来绑定明细数据的。这样不可行么?
例如我数据库中有这样的记录
Hh(户号) Hb 户别 Xm 姓名 Hzgx 户主关系
001 普通 张三 户主
001 普通 李四 长子
001 普通 王五 次子
001 普通 赵花 长女
001 普通 小红 次女
请问如果数据库有这样五条记录,应该怎样取出来,并排列成上图的报表样式呢?
只用一个masterdata,我没有做出来,就用masterdata绑定户主,再用detaildata绑定家庭成员的信息。
这样做不行么?
耙子 2008-11-01
  • 打赏
  • 举报
回复
把它作为主从表应该是可行的。

另一个办法就是全部都作为动态报表,用代码生成报表。

你要是方便给我精简一个你的demo,我调试一下。
耙子 2008-10-31
  • 打赏
  • 举报
回复
才看明白,

我觉得应该能做到。

Band 有个 Columns 属性,你设定为3就行,至于定位你要好好琢磨一下。
伏特加 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 pazee 的回复:]
引用 17 楼 hrc_evollj 的回复:
16楼你好。按你的方法我设置好了可以分为三栏,但是当数据大于三栏后为什么不
自动放入下一页,而是在一页面中继续循环取数,如果我要每页只显示三栏,大于三栏后,自动放入下一页应该
怎么处理?


你的意思是换行就换页是吧?

在报表里面写脚本,自己计数,显示三个就换一页。

在MasterDate 添加 OnAfterPrint,

var
i: integer;


[/Quote]



按你的方法,我实现了上面的要求,但是band中放入标签以后,标签就会随绑定的数据一起循环
例如:姓名:band xm.
他的显示结果是:姓名:姓名张三,姓名李四,姓名王五。能有不让memo不循环的方法么?
耙子 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hrc_evollj 的回复:]
16楼你好。按你的方法我设置好了可以分为三栏,但是当数据大于三栏后为什么不
自动放入下一页,而是在一页面中继续循环取数,如果我要每页只显示三栏,大于三栏后,自动放入下一页应该
怎么处理?
[/Quote]

你的意思是换行就换页是吧?

在报表里面写脚本,自己计数,显示三个就换一页。

在MasterDate 添加 OnAfterPrint,

var
i: integer;

// MasterDate 的 OnAfterPrint
procedure Band4OnAfterPrint(Sender: TfrxComponent);
begin
if (i mod 3) = 0 then begin
Engine.NewPage();
i:= 1;
end
else
inc(i);
end;

begin
i:= 1;
end.

代码仅供参考,希望能给你提供一个思路
寻梦928 2008-10-31
  • 打赏
  • 举报
回复
上面都已经说的很清楚了。我没话可说了!
伏特加 2008-10-31
  • 打赏
  • 举报
回复
报表就是我开始的时候发的那个图
现在我根据大家的方法已经实现的差不多了。
只用一个masterdata不能实现,我就加了一个detaildata来绑定明细数据。
但当我在detaildata的beforeprint事件写上分页代码以后。
第一页的数据排列是好的,但是下面的时候就乱了。。。
伏特加 2008-10-31
  • 打赏
  • 举报
回复
16楼你好。按你的方法我设置好了可以分为三栏,但是当数据大于三栏后为什么不
自动放入下一页,而是在一页面中继续循环取数,如果我要每页只显示三栏,大于三栏后,自动放入下一页应该
怎么处理?
耙子 2008-10-31
  • 打赏
  • 举报
回复
我不知道你报表的具体情况,所以没办法给你调试。
fastreport 非常强大,
建议参看一下他的Demo。

你这个情况我觉得还可以用 Side by side subreports形式。

他的形式是左右两个子报表,左边是户主别名这些标签,右边是三列数据。
然后自己控制换行。
伏特加 2008-10-31
  • 打赏
  • 举报
回复
第二页
伏特加 2008-10-31
  • 打赏
  • 举报
回复
我是这样做的,请看看问题出在哪里。
1、我用了masterdata 绑定是的户主信息,detaildata 绑定的家庭成员的信息。

2、我在detaildata 的beforeprint 中写了
procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
memo13.suppressrepeated:=true;
if ( <line> mod 4) = 0 then
begin
Engine.NewPage();
memo13.suppressrepeated:=false;
end
end;

memo13就是姓名标签。

3、但是写代码以后,第一页是好的,但是第二页的排列方式出了问题,请大家看看图片,问题出在哪里?

第二页
http://album.hi.csdn.net/app_uploads/hrc_evollj/20081031/151940738.p.jpg?d=20081031152447208
judd_fu 2008-10-31
  • 打赏
  • 举报
回复
其实楼上已经把解决办法说出来了.补充点:
针对MasterData 的属性Columns 设置为3,属性Columnwidth自己根跟你的表格调整一下大小.
触发MasterData 的事件:
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
memo2.suppressrepeated:=true;
if (<line> mod 4) = 0 then
begin
Engine.NewPage();
memo2.suppressrepeated:=false;
end
end;
处理了如上面的"姓名"重复打印的问题,注:上面的memo2.text="姓名";
加载更多回复(15)

5,392

社区成员

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

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