如何在quickreport里实现选某条记录按字段打印?(100分)

  • 主题发起人 主题发起人 benimau
  • 开始时间 开始时间
B

benimau

Unregistered / Unconfirmed
GUEST, unregistred user!
如: 编号 姓名 学号 成绩
1 可可 9903 88
打印为:

编号 1 。。。 。。。
姓名 可可 。。。 。。。
学号 9903 。。。 。。。
成绩 88 。。。 。。。
“。。。”是从其他表中选取的值
字段很多 不能一个个的列举
请各位大侠帮忙了
 
顶一下,虽然今天是愚人节,但我的确需要帮助啊
 
这倒可以做到,也可以自己选一个值来决定什么时候换行。必须先把表中的内容连同字段先放到
一个二维数组(可以是动态数组),然后在QReport中打印数组:
procedure TRept.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
//以下两个是公共变量
l_High :=High(G_Dyml[0]);

l_CurrentRow := 0;
end;

procedure TRept.QuickRepNeedData(Sender: TObject;
var MoreData: Boolean);
var xh:integer;
B_Lab:TComponent;
begin
MoreData:=False;
if l_CurrentRow = l_High + 1 then
Exit;
{如果已打印完最后行,退出}
MoreData := True;
{可以继续打印}
for xh:=0 to 5do
//0..5是数组第一维的大小,应根据情况改变
begin
B_Lab:=FindComponent('Lab'+IntToStr(xh+1));
//Detail band中用几个Qrlabel,分别命名为Lab1到Lab6
TQrLabel(B_Lab).Caption:=G_Dyml[xh,l_CurrentRow];
end;
{打印第一列}
//QRLabel2.Caption := My_Variant[l_CurrentRow, 1];
{打印第二列}
//QRLabel3.Caption := My_Variant[l_CurrentRow, 2];
{打印第三列}
l_CurrentRow := l_CurrentRow + 1;
{当前行+1}
end;
保存数据到数组及隔几个记录自动折行的操作,请自行考虑。
 
pass
问一下
这样的话 quickreport上的数据显示部分我放什么控件呢 ?
 
你可以先建一个虚拟的临时表,通过SQL查询将记录放到临时表里,
然后打印临时表即可,我以前做报表是经常需要这样打印的
 
或者。。能否告诉我如何将query选出的表行、列互转也可以
我很菜拉
 
注释中我已经说明了:
//Detail band中用几个Qrlabel,分别命名为Lab1到Lab6
 
up
我的意思是我选的记录数量少 字段多
打出的报表以记录数作为列 字段为行
帮帮我 我的 头都被搞晕了
 
sorry hunterteam
我看不太懂你的代码 。。。
 
多人接受答案了。
 
我正是按你的意思做的,第一部分代码是在QuickRep的BeforePrint(打印前)事件里
取要打印的数组的行数(即第二维大小),并设定初始行。(G_Dyml就是保存数据的数组)
第二部分代码在QuickRep的NeedData(获取数据)事件里将数组里的数据逐个保存到
报表里以供打印。
你的要求是有点复杂,你可以先按我前面的要求将数据记录保存到数组中,
再认真看一下这一段代码,将该改的地方改一下。
 

Similar threads

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