再说女孩.................打你 .........勾引我大哥.......... 没有做过 这样可以吗 ?如果有100行,第一行和51行打印在一行 ,用 Union 连接 ,只要从1到50取纪录,就可以取全 。 select * from TableName where id = 1 Union all select * from TableName where id = 51 id 可以用参数引入, 用循环 就应该可以
你是要打印两列把,把yourquickreport的report setting 里的NUmber of columns的值设为2
yourquickreport的report setting 里的NUmber of columns的值设为2啊 ,这么简单 :) 算我灌水了
小妹妹不要着急,我昨晚刚好解决了这个问题,方法如下: 1、设置NUmber of columns的值为2。这是设置报表为分栏打印,但它的打印顺序是先左边打印满页再打印右边,此打印顺序格式实在不美观。 2、在细节带区打印完第一条记录值后移动下一条记录指针,好象打印内容还是有点问题,如: QRDBText1 | QRDBText2 | QRDBText3 | QRDBText4 | 假定TDBText2为第一条记录的最后一个打印值,那么在TDBText3的OnPrinter事件中写:if Not adofquery.Eof then AdoQuery.Next;即开始移动记录指针为下一记录。 3、此方法最为有效,不论一行打印几条记录都可以。具体实现方法是利用OnNeedDate事件自己提取打印数据,例:在细节带区设置打印项目,表示打印三栏 打印内容: QrlXM1 | QrlJE1 | QrlXM2 | QrlJE2 | QrlXM3 | QrlJE3 procedure TFrmRb.qrtSFNeedData(Sender: TObject; var MoreData: Boolean); var uJE:Currency; begin if Not dmCwtj.adquySF.Eof then MoreData:=True; //当还有记录时继续打印//提取打印数据 if MoreData then begin with (dmCwtj.adquySF) do begin qrlXM1.Caption:=FieldByName('cw_mc').AsString; uJE:=FieldByName('ssje').asCurrency; if uJE=0 then //当没有数据时不打印 qrlJE1.Caption:='' else qrlJE1.Caption:=FormatCurr('0.00',uJE); //打印实收金额 Next; if Eof then //打印是否打印完毕,如果没完,则设置打印空,不然会打印出控件名称。 begin qrlXM2.Caption:=''; qrlJE2.Caption:=''; qrlXM3.Caption:=''; qrlJE3.Caption:=''; Exit; end else begin qrlXM2.Caption:=FieldByName('cw_mc').AsString; uJE:=FieldByName('ssje').asCurrency; if uJE=0 then qrlJE2.Caption:='' else qrlJE2.Caption:=FormatCurr('0.00',uJE); end; Next; if Eof then begin qrlXM3.Caption:=''; qrlJE3.Caption:=''; Exit; end else begin qrlXM3.Caption:=FieldByName('cw_mc').AsString; uJE:=FieldByName('ssje').asCurrency; if uJE=0 then qrlJE3.Caption:='' else qrlJE3.Caption:=FormatCurr('0.00',uJE); end; Next; end; end; end; 注意:该方法如果直接打印而不进行预览则可,否则在预览时完全正确,但在打印时只会打印最后一笔数据,原因是预览时提取了一次数据,而在打印时又提取一次数据,因此需要再写一句OnBeforePrint事件。 procedure TFrmRb.qrtSFBeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); begin dmCwtj.adquySF.First; end; 如果还有什么问题请发邮件。
没有做过 这样可以吗 ?如果有100行,第一行和51行打印在一行 ,用 Union 连接 ,只要从1到50取纪录,就可以取全 。
select * from TableName where id = 1
Union all
select * from TableName where id = 51 id 可以用参数引入, 用循环 就应该可以
1、设置NUmber of columns的值为2。这是设置报表为分栏打印,但它的打印顺序是先左边打印满页再打印右边,此打印顺序格式实在不美观。
2、在细节带区打印完第一条记录值后移动下一条记录指针,好象打印内容还是有点问题,如:
QRDBText1 | QRDBText2 | QRDBText3 | QRDBText4 |
假定TDBText2为第一条记录的最后一个打印值,那么在TDBText3的OnPrinter事件中写:if Not adofquery.Eof then AdoQuery.Next;即开始移动记录指针为下一记录。
3、此方法最为有效,不论一行打印几条记录都可以。具体实现方法是利用OnNeedDate事件自己提取打印数据,例:在细节带区设置打印项目,表示打印三栏
打印内容: QrlXM1 | QrlJE1 | QrlXM2 | QrlJE2 | QrlXM3 | QrlJE3
procedure TFrmRb.qrtSFNeedData(Sender: TObject; var MoreData: Boolean);
var
uJE:Currency;
begin
if Not dmCwtj.adquySF.Eof then MoreData:=True; //当还有记录时继续打印//提取打印数据
if MoreData then
begin
with (dmCwtj.adquySF) do
begin
qrlXM1.Caption:=FieldByName('cw_mc').AsString;
uJE:=FieldByName('ssje').asCurrency;
if uJE=0 then //当没有数据时不打印
qrlJE1.Caption:=''
else
qrlJE1.Caption:=FormatCurr('0.00',uJE); //打印实收金额
Next;
if Eof then //打印是否打印完毕,如果没完,则设置打印空,不然会打印出控件名称。
begin
qrlXM2.Caption:='';
qrlJE2.Caption:='';
qrlXM3.Caption:='';
qrlJE3.Caption:='';
Exit;
end else
begin
qrlXM2.Caption:=FieldByName('cw_mc').AsString;
uJE:=FieldByName('ssje').asCurrency;
if uJE=0 then
qrlJE2.Caption:=''
else
qrlJE2.Caption:=FormatCurr('0.00',uJE);
end;
Next;
if Eof then
begin
qrlXM3.Caption:='';
qrlJE3.Caption:='';
Exit;
end else
begin
qrlXM3.Caption:=FieldByName('cw_mc').AsString;
uJE:=FieldByName('ssje').asCurrency;
if uJE=0 then
qrlJE3.Caption:=''
else
qrlJE3.Caption:=FormatCurr('0.00',uJE);
end;
Next;
end;
end;
end;
注意:该方法如果直接打印而不进行预览则可,否则在预览时完全正确,但在打印时只会打印最后一笔数据,原因是预览时提取了一次数据,而在打印时又提取一次数据,因此需要再写一句OnBeforePrint事件。
procedure TFrmRb.qrtSFBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
dmCwtj.adquySF.First;
end;
如果还有什么问题请发邮件。
如果你不是女的,你变态;”
出于一个大家都基本认同的观念,在CSDN上有意自称“女子”、“小妹”的实际上大多是大老爷们,所有我才在本贴上对楼主开了一个这样对于男子汉应该影响不大的无恶意的玩笑。
如果有人认为我这样的言论很令人不愉快的话,我对于我伤害到的人表示歉意并收回我的话。
http://expert.csdn.net/Expert/topic/1247/1247593.xml?temp=.5607263伤心中。
可行