全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1060
推到 Plurk!
推到 Facebook!

QR如何判斷跳頁?

答題得分者是:change.jian
eugenech
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-17 13:45:16 IP:210.192.xxx.xxx 未訂閱
小弟有一報表程式不知如何判斷跳頁,請各位大大指點,謝謝 資料如下 員工 日期 AA 01 AA 05 AA 13 BB 02 BB 08 BB 21 BB 28 正確報表如下員工變更或跳頁時才印出員工 第一頁 員工 日期 AA 01 空白 05 空白 13 BB 02 空白 08 第二頁 BB 21 空白 28 但是我得到結果是 第二頁 空白 21 BB 28 我的作法是 procedure TPR999fm.DetailBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin if QueryTemp.fieldbyname('empno').asstring<>cur_empno then begin qr_empno.caption:=QueryTemp.fieldbyname('empno').asstring; cur_empno:=QueryTemp.fieldbyname('empno').asstring; end else qr_empno.caption:=''; end; procedure TPR999fm.PageHeaderAfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean); begin cur_empno:=''; end; 請問是哪裡錯了? 請各位大大指點,謝謝
zong
初階會員


發表:11
回覆:51
積分:42
註冊:2002-08-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-17 16:49:56 IP:61.219.xxx.xxx 未訂閱
再多放一個band =>PageFooter 高度設為0 因為quickrep 會先抓資料 ! 報表太長 再印到第二頁! 所以會判斷不到! 多放一個band 可能可以解決! procedure TPR999fm.PageFooterAfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean); begin cur_empno:=''; end;
eugenech
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-17 17:45:19 IP:210.192.xxx.xxx 未訂閱
引言: 再多放一個band =>PageFooter 高度設為0 因為quickrep 會先抓資料 ! 報表太長 再印到第二頁! 所以會判斷不到! 多放一個band 可能可以解決! procedure TPR999fm.PageFooterAfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean); begin cur_empno:=''; end;
試過這個方法,還是不行 感謝zong大的熱心回答
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-17 17:51:33 IP:210.243.xxx.xxx 未訂閱
    procedure TPR999fm.DetailBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  if (QueryTemp.fieldbyname('empno').asstring <> cur_empno) 
   or  (cur_empno ='') 
  then begin
    qr_empno.caption:=QueryTemp.fieldbyname('empno').asstring;
    cur_empno:=QueryTemp.fieldbyname('empno').asstring;
  end
  else
    qr_empno.caption:='';
end;    
發表人 - hahalin 於 2004/05/17 17:55:10
eugenech
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-17 18:37:18 IP:210.192.xxx.xxx 未訂閱
引言:
    procedure TPR999fm.DetailBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  if (QueryTemp.fieldbyname('empno').asstring <> cur_empno) 
   or  (cur_empno ='') 
  then begin
    qr_empno.caption:=QueryTemp.fieldbyname('empno').asstring;
    cur_empno:=QueryTemp.fieldbyname('empno').asstring;
  end
  else
    qr_empno.caption:='';
end;    
發表人 - hahalin 於 2004/05/17 17:55:10
結果還是一樣不行 謝謝版主
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-17 21:32:45 IP:61.229.xxx.xxx 未訂閱
您好,建議您這樣做: 1.在印員工的TQRDBText.OnPrint事件去檢查Value = Fcur_empno以決定要不要印出來 2.在TQuickRep.StartPage去設定變數,讓TQRDBText.OnPrint程序裡可以檢查現在是否換頁 如下:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, DBClient;    type
  TForm1 = class(TForm)
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    procedure CreateDataSet;
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation
uses Unit2;
{$R *.dfm}    { TForm1 }    procedure TForm1.CreateDataSet;
const
  Employees:array[0..6] of string = ('AA','AA','AA','BB','BB','BB','BB');
  Dates:array[0..6] of string = ('01','05','13','02','08','21','28');
var
  i:Integer;
begin
  ClientDataSet1.Active:=False;
  ClientDataSet1.FieldDefs.Add('員工',ftString,4,True);
  ClientDataSet1.FieldDefs.Add('日期',ftString,2,True);
  ClientDataSet1.CreateDataSet;
  for i:=0 to high(Employees) do
  begin
    ClientDataSet1.Append;
    ClientDataSet1.Fields[0].AsString:=Employees[i];
    ClientDataSet1.Fields[1].AsString:=Dates[i];
    ClientDataSet1.Post;
  end;
end;    procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateDataSet;
end;    procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  QuickReport2:=TQuickReport2.Create(Self);
  try
    QuickReport2.ClientDataSet1.Data:=ClientDataSet1.Data;
    QuickReport2.Preview;
  finally
    QuickReport2.Free;
  end;
end;    end.
Report的code:
unit Unit2;    interface    uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
  StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls, DB, DBClient;    type
  TQuickReport2 = class(TQuickRep)
    ClientDataSet1: TClientDataSet;
    ColumnHeaderBand1: TQRBand;
    DetailBand1: TQRBand;
    QRLabel1: TQRLabel;
    QRLabel2: TQRLabel;
    QRDBText1: TQRDBText;
    QRDBText2: TQRDBText;
    QRShape1: TQRShape;
    procedure DetailBand1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    procedure QRDBText1Print(sender: TObject; var Value: String);
    procedure QuickRepStartPage(Sender: TCustomQuickRep);
  private
    Fcur_empno:String; //儲存目前列印的員工
    FStartPage:Boolean; //每次換新頁時設為True
  public      end;    var
  QuickReport2: TQuickReport2;    implementation    {$R *.DFM}    procedure TQuickReport2.DetailBand1AfterPrint(Sender: TQRCustomBand;
  BandPrinted: Boolean);
begin
  Fcur_empno:=ClientDataSet1.fieldByName('員工').AsString;
  FStartPage:=False;
end;    procedure TQuickReport2.QRDBText1Print(sender: TObject; var Value: String);
begin
  if (Value = Fcur_empno) and
     (FStartPage=False) then
    Value:='';
end;    procedure TQuickReport2.QuickRepStartPage(Sender: TCustomQuickRep);
begin
  FStartPage:=True;
end;    end.
eugenech
一般會員


發表:2
回覆:3
積分:1
註冊:2004-05-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-17 23:03:07 IP:210.192.xxx.xxx 未訂閱
耶!成功了! 謝謝玉龍 想不到看起來簡單的問題,實作上還要轉個彎
系統時間:2024-05-15 9:24:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!