我一行要打印两行记录,现在不好怎么处理。

解决方案 »

  1.   

    再说女孩.................打你 .........勾引我大哥..........
    没有做过 这样可以吗 ?如果有100行,第一行和51行打印在一行 ,用 Union 连接 ,只要从1到50取纪录,就可以取全 。 
    select * from TableName where id = 1
    Union all
    select * from TableName where id = 51 id 可以用参数引入, 用循环 就应该可以
      

  2.   

    你是要打印两列把,把yourquickreport的report setting 里的NUmber  of columns的值设为2
      

  3.   

    用两个数据集,一个从1--50,一个从51--100 ,多加一组QRDBText ,两组QRDBText分别链到两个数据集 ;应该可以吧
      

  4.   

    yourquickreport的report setting 里的NUmber  of columns的值设为2啊 ,这么简单 :) 算我灌水了
      

  5.   

    小妹妹不要着急,我昨晚刚好解决了这个问题,方法如下:
       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;
      如果还有什么问题请发邮件。
      

  6.   

    “如果你是女的,你神经;
    如果你不是女的,你变态;”
    出于一个大家都基本认同的观念,在CSDN上有意自称“女子”、“小妹”的实际上大多是大老爷们,所有我才在本贴上对楼主开了一个这样对于男子汉应该影响不大的无恶意的玩笑。
    如果有人认为我这样的言论很令人不愉快的话,我对于我伤害到的人表示歉意并收回我的话。
      

  7.   

    li_zhifu(东北人) : 您好, 都怪我:) ,我误解您了 ,望见谅 。
      

  8.   

    真的太抱歉了,我还以为您在说我...我向li_zhifu(东北人) 道歉 ,同时也真诚的感谢他的帮助 ,至少现在我也会用多行打印了 :) 再次向您道歉 ,请原谅
      

  9.   

    这里好热闹,谁来关注我的打印问题?
    http://expert.csdn.net/Expert/topic/1247/1247593.xml?temp=.5607263伤心中。
      

  10.   

    回复人: yxiner() ( ) 信誉:100 
    可行