fastreport 一页打印两表(100分)

B

bjgdczl

Unregistered / Unconfirmed
GUEST, unregistred user!
在用fastreport 进行多表打印时,每张纸上需依次打印两张表
请哪位大虾指点,或给个例子
具体表结构如下

标题
主项数据(每记录一条数据)
细项数据(每记录1~5条数据)
细项脚
另外,若细项数据全为0时不打印该band 怎样设置?

 
细项数据全为0时 将band设为不可见就行了。
 
放上两个table,对应两个frdbdataset就可以了
若细项数据全为0时不打印该band 怎样设置主项数据band不选‘’为空时打印‘’就可以了
 
to lzwjf :
我用的是clientdataset对应frdbdataset,
并且每页的两个表是根据主项数据某个字段依次排序来打印的
能否说仔细一些,谢谢!
 
主要是在外部设好数据源,可以静态实现,也可以编程实现。
比如打印主从表,在两个table设置好主从关系,在主项数据和细项数据band中对应就可以
 
to lzwjf :
做单表打印,一张纸打印一个表,没问题,就是多表打印时不能实现一张纸打印两个表


能否给个例子?
 
我没有单独的例子,给你的话需要数据库才能运行,程序比较大
clientdataset我到是没有试过,用两个query,table是可以的
下面这个你可以参考一下:



话题702224的标题是: 一个很简单的fastreport的问题,希望有人解答 (100分)
分类:打印 base7 (2001-11-02 15:50:00)
一个rpReport对象是不是只能有一个对应的数据集?
可是我的一张报表中要同时用到两个Query控件查询出来的数据,应该怎么办?[:(]

pingbaoshi (2001-11-02 16:01:00)
你看看delphi的这个例子
(路径)/Borland/Delphi5/Demos/Quickrpt/Qr2
中master/detail符合你的要求嘛?

jackl (2001-11-02 16:01:00)
不知道你用的报表工具是什么?


autumn (2001-11-02 16:07:00)
可以使用子报表。看看fReport自带的例子。

nsj (2001-11-02 16:22:00)
你可以用存储过程。

YNTW (2001-11-03 18:54:00)
TO base7:
你所说的“同时用到两个Query控件查询出来的数据”是怎么个同时法?主-明细型报表还是其它什么的?

base7 (2001-11-05 15:38:00)
我用的报表工具是fastreport2.42
比如说:我的报表上有一个细项表和一个与之有一定联系但不是很密切的总表
分别是从两个表中查询出来的,(查询条件也不一样),所以用了两个QUERY,可是
一个报表控件好象只有一个DATASET?所以不知该怎么处理了...[:(]
另:如果我的查询语句中用到select A.name, B.name from ....
在报表细项中如何让其显示出来?我试了下好象只能填[name]而不能填[A.name]?

YNTW (2001-11-05 20:56:00)
第一个问题:
一个报表控件可以支持多个数据集对象,我已经试过了,不过对于用Query后的数据作细项数据,只显示第一条记录,还需要再研究一下。
第二个问题:
对于多表选择生成的数据集,使用AS语句试试,即select A.name As Aname

base7 (2001-11-05 22:51:00)
to yntw:
请问对第一点你是怎么实现的?
fastreport中那个rpreport控件不是只有一个dataset属性吗?

YNTW (2001-11-05 23:15:00)
frReport的DataSet属性不用设置,直接在报表设计器里用,你可以按下面的例子做:
1、放ADOConnection、ADOQuery1、ADOQuery2、DataSource1、DataSource2、frReport、
frDBDataSet1、frDBDataSet2在Form中
2、除frReport的属性不用设置外,设置其余控件的属性
ADOConnection->ADOQuery1->DataSource1->frDBDataSet1
ADOConnection->ADOQuery2->DataSource2->frDBDataSet2
3、打开frReport的设计器,放一个主项数据Band,再放两个Memo在上面
若ADOQuery1的查询语句为select Name from 表a,ADOQuery2的查询语句为select Name from 表b,
则设置Memo1的Memo为[ADOQuery1."Name"],Memo2的Memoy为[ADOQuery2."Name"]
4、frReport.ShowReport


 
TO lzwjf 我就是这样做的
frReport的DataSet属性不用设置,直接在报表设计器里用,你可以按下面的例子做:
1、放ADOConnection、ADOQuery1、ADOQuery2、DataSource1、DataSource2、frReport、
frDBDataSet1、frDBDataSet2在Form中
2、除frReport的属性不用设置外,设置其余控件的属性
ADOConnection->ADOQuery1->DataSource1->frDBDataSet1
ADOConnection->ADOQuery2->DataSource2->frDBDataSet2
3、打开frReport的设计器,放一个主项数据Band,再放两个Memo在上面
若ADOQuery1的查询语句为select Name from 表a,ADOQuery2的查询语句为select Name from 表b,
则设置Memo1的Memo为[ADOQuery1."Name"],Memo2的Memoy为[ADOQuery2."Name"]
4、frReport.ShowReport

但还是解决不了
那位大虾愿意帮助,我再出100分
 
每份表中就套了多个表,结构如下
主项头
主项数据(table1,table2))//table2与table1关联,有1条数据
细项头1
细项数据1(table3,table4)//table3,table4与table1关联,有1—5条数据,数据多少与table1的主字段有关
细项数据2(table3,table4)//table3,table4与table1关联,有1—5条数据,数据多少与table1的主字段有关
以上数据打印在一页上没问题

但由于需要,想在一页纸上打印两份这样的报表,并且依照table1的主字段依次打印完毕

拜托各位大虾帮忙,分数不够,可以再加100,谢谢!
 
两份这样的报表是什么意思,是不是分栏打印,能不能画个样子?
 
to whf:
比如:
******************************************************************************
主项头
主项数据(table1,table2))
细项头1
细项数据1(table3,table4)
细项数据2(table3,table4)
主项脚
*******************************************************************************


******************************************************************************
主项头
主项数据(table1,table2))
细项头1
细项数据1(table3,table4)
细项数据2(table3,table4)
主项脚
*******************************************************************************

以上在一页纸上打印
(上下栏数据依主表某字段顺序依次排序,直到数据集table1结束)
 
不用主项角,主项角只在打印完主项数据后才打印,换成细项角行不行?
 
将主项脚去掉还是不行
我怀疑是打印代码有问题:
代码如下:
if ComboBox1.Items[ComboBox1.itemindex]='' then
begin

IF Application.MessageBox ('是否确定打印所有用户的结算表?',MB_OKCANCEL+MB_ICONQUESTION)=1
then
begin


ClientDataSet1.close;
ClientDataSet1.CommandText :='SELECT * FROM X_JBDA ORDER BY HH ';
ClientDataSet1.OPEN;
ClientDataSet1.First;
while not ClientDataSet1.Eofdo
begin

TRY
ClientDataSet2.CLOSE;
ClientDataSet2.CommandText:='SELECT * FROM X_JFCSB WHERE HH='''+ClientDataSet1['HH']+'''';
ClientDataSet2.Open;
ClientDataSet3.Close;
ClientDataSet3.CommandText:='SELECT * FROM X_JSQKB WHERE RQ='''+DATE2+''' AND HH='''+ClientDataSet1['HH']+'''';
ClientDataSet3.Open;
ClientDataSet4.Close;
ClientDataSet4.CommandText:='SELECT * FROM X_JSDDB WHERE RQ='''+DATE2+''' AND HH='''+ClientDataSet1['HH']+'''ORDER BY JLDH';
ClientDataSet4.Open;
ClientDataSet5.Close;
ClientDataSet5.CommandText:='SELECT * FROM X_JSDDB WHERE RQ='''+DATE0+''' AND HH='''+ClientDataSet1['HH']+'''ORDER BY JLDH';
ClientDataSet5.Open;
ClientDataSet1.Next;

EXCEPT
ShowMessage(。。。。);
end;

frReport1.ShowReport;
end;
 
请各位大虾帮忙,分数不够可以再加
 
这样:
ClientDataSet1.close;
ClientDataSet1.CommandText :='SELECT * FROM X_JBDA ORDER BY HH ';
ClientDataSet1.OPEN;
ClientDataSet1.First;

ClientDataSet2.CLOSE;
ClientDataSet2.CommandText:='SELECT * FROM X_JFCSB ORDER BY hh'
ClientDataSet2.MasterFields := 'HH';
ClientDataSet2.MasterDataSource := DataSource1 //DataSource1指向ClientDataSet1
ClientDataSet2.Open;
其它的也这样改,也可以在IDE中设置好这几个表间的Master-Detail关系
 
to whf:
我按你提示的做了,出现‘找不到对象‘错误
后来我去掉代码:
ClientDataSet2.MasterFields := 'HH';
ClientDataSet2.MasterDataSource := DataSource1 //DataSource1指向ClientDataSet
在对象编辑器做了如下设置:
datasouse1 对应clientdataset1
datasouse2 对应clientdataset2 ,clientdataset2 的 mastersource 为datasouse1,masterfileds 为 HH
...
datasouse5 对应clientdataset5 ,clientdataset5的 mastersource 为datasouse1,masterfileds 为 HH

但还是出现‘找不到对象‘错误
我用的是三层结构,CLIENTDATASET首先要与远端SERVER的DECOM连接,与这有关系么

请大虾指导,不甚感谢!
 
这我也说不清楚了,如果用fr打印主子表,就必须将数据集先设置好主子关系。
 
if ComboBox1.Items[ComboBox1.itemindex]<>'' then
begin

IF Application.MessageBox ('是否确定打印该户的结算表?',MB_OKCANCEL+MB_ICONQUESTION)=1
then
begin


ClientDataSet1.close;
ClientDataSet1.CommandText :='SELECT * FROM X_JBDA WHERE HH='''+ComboBox1.Items[ComboBox1.itemindex]+''' ORDER BY HH ';
ClientDataSet1.OPEN;
TRY
ClientDataSet2.CLOSE;
ClientDataSet2.CommandText:='SELECT * FROM X_JFCSB WHERE HH='''+ClientDataSet1['HH']+'''';
ClientDataSet2.Open;
ClientDataSet3.Close;
ClientDataSet3.CommandText:='SELECT * FROM X_JSQKB WHERE RQ='''+DATE2+''' AND HH='''+ClientDataSet1['HH']+'''';
ClientDataSet3.Open;
ClientDataSet4.Close;
ClientDataSet4.CommandText:='SELECT * FROM X_JSDDB WHERE RQ='''+DATE2+''' AND HH='''+ClientDataSet1['HH']+'''ORDER BY JLDH';
ClientDataSet4.Open;
ClientDataSet5.Close;
ClientDataSet5.CommandText:='SELECT * FROM X_JSDDB WHERE RQ='''+DATE0+''' AND HH='''+ClientDataSet1['HH']+'''ORDER BY JLDH';
ClientDataSet5.Open;
frReport1.ShowReport;

EXCEPT
ShowMessage(。。。。);
end;


end;

这个打印一页没问题,就是打不了多个表
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
755
DelphiTeacher的专栏
D
D
回复
0
查看
609
DelphiTeacher的专栏
D
顶部