數百頁計的 M/D 報表如何良好的處理在每頁列印 [共 X 頁] 呢? |
缺席
|
bestlong
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
常常有人問到要如何在報表的每一頁列印初 第幾頁共幾頁 的問題.
在 QuickReport 下共幾頁可以用下列方法 QuickRep1.Prepare;
QRLabel1.Caption := '共' inttostr(QuickRep1.Printer.PageCount) '頁';
QuickRep1.Preview; 在來源資料不多的狀況下, 都還勝任愉快. 而現在碰到大量的資料的狀況,
Master 約四千筆, 再結合到 Detail 後整個資料量達到約三萬筆紀錄, 所以在列印的時候, 直接 Preview (不做 Prepare 與 設定共幾頁) 跑出約六百頁的報表共耗二十多分鐘. 若做了 Prepare 與設定共幾頁就有的等了. 想請教有沒有能夠提升效率的方式. 我是雪龍
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
ko
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
bestlong
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
引言: bestlong 你好: 在qr的選項有個 QRSysData1 的元件 把他的date屬性改成qrsPageNumber 就會顯示這次印有幾頁!!這個是讓報表上顯示列印到第幾頁, 在報表下不必 Prepare 就可以完成了. 我的目的是要讓每一頁報表上都會印出這一份報表總共幾頁這樣可以讓觀看報表者很清楚的知道這份報表總共有幾張以避免遺失. 尤其是沒有列印 Summary 與 Footer Band 的報表. 我是雪龍
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
bestlong
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
引言: hi..bestlong 這裡有一篇M_D簡單範例可以參考看看是否有幫助.. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26567 我在使用報表的時候都不用 Prepare 了... TRY TRY SEE..Hope It Help You..
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
star
初階會員 ![]() ![]() 發表:37 回覆:93 積分:36 註冊:2002-07-18 發送簡訊給我 |
|
bestlong
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
引言: 還可以如此作: [QUERY_DETAIL]: SELECT COUNT(*) AS REC_CNT FROM DETAILTABLE WHERE 欄位一=:MASTERTABLE.欄位一 (例如:Primary Key) 在讀到MASTER TABLE時, 可依此算出頁數: CEIL(QUERY_DETAIL.FIELDBYNAME('REC_CNT').ASINTEGER / 每頁可印幾筆) = 頁數 當然, 較麻煩的是要測出一頁可印幾筆明細資料.這種處理方法我也曾經想過, 不過在 Window 環境下要做到很精密的計算是有很大的困難度, 尤其是數百頁之後的累積誤差, 不像以前 DOS 時期可以很清楚知道一頁報表會印幾行資料. 我是雪龍
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
bestlong
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
就目前所 Try 的來說, 想要直接讓報表元件在每一頁列印出 共幾頁 的功能, 都是先讓報表在背景跑過所有的資料一次來取得實際的總頁數, 在 QuickReport 是先作 Prepare , 而在 ReportBuilder 則是將屬性 PassSeting 設定為 psTwoPass 的處理方式來取得真正的總列印頁數, 然後才實際的產生報表的列印的畫面, 看來要提昇列印效率只好採取更多角度的想法, 我原來的環境是在 Client/Server 架構使用 MSSQL ADO 的狀況下跑此報表, 所以也會讓報表多花許多時間在等待資料的傳輸以及運算, 所以可能要作一些架構上的調整例如將列印所需要的資料先自 Server 端取得然後暫存至本地的臨時資料庫, 或是將Master/Detail 先 Join 成單一 Table 並排序好, 然後再讓報表處理 Groupt 的問題, 可能的話嘗試利用 MemoryDB 的元件將全部資料載入記憶體來加速運算...等等. 再慢慢研究吧. 我是雪龍
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |