报表打印问题,如何实现坚式打印转横式打印(100分)

  • 主题发起人 主题发起人 zhilon
  • 开始时间 开始时间
Z

zhilon

Unregistered / Unconfirmed
GUEST, unregistred user!
使用Delphi自带的QReport 制作报表,在 DetailBand 中放入一个TQRDBText
就可以坚式打印出 QRDBText 连接的数据,(如下所示)
column1 column2 column3
data data data
. . .
. . .
. . .
由于要求不同,如何打印出横式的报表(如下所示)
column1 data . . .
column2 data . . .
column3 data . . .
请问用什么方法可以实现,或是有什么好控件,多谢各位!
 
改变你输出的sql语句,或者生成中间的临时数据
 
如何改变输出的sql语句,请说清
 
不是一两句能说清的,要用存储过程
 
比较复杂,用游标可以做到。
 
交叉表,用FAST REPORT或REPORT MACHINE
 
为什么在SQL语句上烦心?
只要在打印的时候将打印方向旋转90度而已?
不知道可不可以这样理解?
 
printer.Orientation:=poPortrait;//垂直打印
printer.Orientation:=poLandscape;//水平打印
根据你的情况应该用printer.Orientation:=poLandscape;
...
printer.Orientation:=poLandscape;
printer.begin
Doc;// 开始打印
...
Printer.EndDoc;//结束打印
 
打印机的水平/垂直打印跟zhilon的要求根本不同!
你可以找一张已经打印了的纸看看:先是正常看,然后把纸转90度,
看看会不会变成zhilon的效果?根本不可能!字都已经倒转了!
应该就是zhtx说的交叉表,不过我没做过,所以不知道该如何实现。
 
如果只有一个就自己写代码,看quick report的例子,在ONNEEDDATA里处理
 
为何还没人给出满意答案,分不够的话可以加,
 
前面已经有人提示了,只是没给出具体的做法。
设打印的Columns = 3, rows = 12
1、用临时表:
建一个表temp(c, v1, v2, ..., v12),使table关联这个表;用一个query把数据select出来;
table.tablename := temp;
table.active := true;
with query1do
begin
for i := 0 to fields.count - 1do
begin
first;
j := 0;//计数器
table.append;
table.fieldbyname('c').asstring := fields.fieldname;
while not eofdo
//或者用for j := 1 to 12do
且略去下面的 j := j + 1;
begin
j := j + 1;
table.fieldby('v' + inttostr(j)).asstring := fields.asstring;
next;
end;
table.post;
end;
close;
end;
然后把table打出来就可以了。
2、用游标:
方法和1差不多,就是用存储过程来建临时表。
3、数组:
设一个数组a : array [0..2, 0..12] of string;
//给a赋值
with querydo
begin
first;
for i := 0 to 2do
a[i, 0] := fields.fieldname;
for j := 1 to 12
begin
for i := 0 to 2do
a[i, j] := fields.asstring;
next;

end;
end;
//设全局变量 row : integer;初始化为零;
在detailband.onprint中写入
row := row + 1;
给detailband中放13个qrlabel,并赋 tag 值0..12;
所有的qrlabel 的 onprint事件均为:
value := a[row - 1, (sender as qrdbtext).tag];
*******************************************************************************
以上只是提供参考,并未经过调试。
 
ReportMachine就可以实现了。
 
我写的已经很详细了,再要详细就只能给你写程序了!
或者把运行结果贴出来。
 
使用REPORTEXPERT,点几次鼠标就可,不用编码!
http://www.smartparter.com/download/ReportExpert20.zip
 
多人接受答案了。
 

Similar threads

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