線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3569
推到 Plurk!
推到 Facebook!

如何在Fast Report的MasterDataBand中秀出目前筆數跟全部筆數?

答題得分者是:chris681016
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-18 16:04:37 IP:59.124.xxx.xxx 訂閱
目前有一需求
是要在報表的每一筆資料前面放在該筆資料的筆數與全部資料的筆數
Ex 這次報表資料一共5筆
我想印出如下面的樣子
第1筆 / 共5筆 資料XXXXXXXXXXXXXXXXXXXXX
第2筆 / 共5筆 資料XXXXXXXXXXXXXXXXXXXXX
第3筆 / 共5筆 資料XXXXXXXXXXXXXXXXXXXXX
第4筆 / 共5筆 資料XXXXXXXXXXXXXXXXXXXXX
第5筆 / 共5筆 資料XXXXXXXXXXXXXXXXXXXXX

有點像是DataSet.RecNo跟DataSet.RecordCount個感覺
但是不知道如何在FastReport的MasterDataBand裡面達成
有使用過再Band上放入Count(MasterDataBand) 但預覽時不會顯示任何東西
而使用Line跟Line#則是只會顯示該筆筆數 卻無法顯示所有筆數
會變成 1之1 2之2 3之3 依此類推
請前輩指點

補充: Fast Report版本為 3.24.6
編輯記錄
帥氣銀行 重新編輯於 2007-10-18 16:19:28, 註解 無‧
chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-18 18:01:21 IP:211.75.xxx.xxx 訂閱
假設合計memo是memo2
用下例方式看看
procedure TForm2.frxReport1BeginDoc(Sender: TObject);

begin
inttostr(DataSet.RecordCount);
end;

帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-18 18:20:40 IP:59.124.xxx.xxx 訂閱
感謝chris681016提供的方法
此一方法可顯示所有筆數
但是卻無法顯示是所有筆數中的第幾筆
當程式寫成下列樣子時
TfrxMemoView(frxReport1.FindObject('memo2')).Memo.Text:=inttostr(DataSet.RecNo) '筆' ' 共' inttostr(DataSet.RecNo)另外放在一個Memo中
使用內建變數Line即可正常跑出我要的結果
第1筆 共4筆 XXXXXXXXXXXXXXXXXXXX
第2筆 共4筆 XXXXXXXXXXXXXXXXXXXX
第3筆 共4筆 XXXXXXXXXXXXXXXXXXXX
第4筆 共4筆 XXXXXXXXXXXXXXXXXXXX
順便提供給其他人做個參考
雖然我還是不知道Line的確切用法是什麼...XD

再次感謝chris681016前輩
===================引 用 chris681016 文 章===================
假設合計memo是memo2
用下例方式看看
procedure TForm2.frxReport1BeginDoc(Sender: TObject);

begin
inttostr(DataSet.RecordCount);
end;

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-18 18:23:37 IP:61.67.xxx.xxx 未訂閱
如果你只在乎能達成目標的話,有一個辦法可以做到
1.另建一個query (select count(*) ... ) 取得本次總筆數,然後傳入FR的變數(totcount)中
為何要使用query來算,因為某些資料庫來說,recordcount 未必能取得本次正確的記錄數,有時是-1
2.FR 另設一個reccount 變數, 初值為0 或1
2.在masterdataband 的 beforeprint(初值0) 或 afterprint(初值1) 事件,執行 reccount:= reccount 1,然後在masterdataband 拉一個memo object 加入這組 [reccount] / [totcount][的顯示

這樣應該可以達到你想要的結果,註,我是根據理論推斷,並未實作過,所以不負責保證程式的可行性, 請自行實作看看
編輯記錄
P.D. 重新編輯於 2007-10-18 18:24:08, 註解 無‧
帥氣銀行
一般會員


發表:13
回覆:40
積分:15
註冊:2005-05-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-19 15:48:57 IP:59.124.xxx.xxx 訂閱
感謝PD前輩熱心的提醒
我知道RecordCount有時無法取得正確的筆數
只是因為我是使用Paradox資料庫
想說小小的偷懶一下
果然馬上被發現
不過剛剛測試時也發現明明有資料但RecoedCount筆數回傳是0的靈異事件
所以也馬上將程式改成使用query去另外計算了
再次感謝PD前輩熱心的提醒

另外幾個問題想請教PD前輩
您說到
1.另建一個query (select count(*) ... ) 取得本次總筆數,然後傳入FR的變數(totcount)中
請問所謂的傳入FR變數中 是像chris681016說的 在Memo內設定其Text為 [totcount]
再利用 frxReport1GetValue 的事件傳入嗎?
2.FR 另設一個reccount 變數, 初值為0 或1
請問這要在FR的哪裡做設定?
因小弟接觸FR不久
還不知如何自訂FR變數
還請前輩指點
===================引 用 P.D. 文 章===================
如果你只在乎能達成目標的話,有一個辦法可以做到
1.另建一個query (select count(*) ... ) 取得本次總筆數,然後傳入FR的變數(totcount)中
為何要使用query來算,因為某些資料庫來說,recordcount 未必能取得本次正確的記錄數,有時是-1
2.FR 另設一個reccount 變數, 初值為0 或1
2.在masterdataband 的 beforeprint(初值0) 或 afterprint(初值1) 事件,執行 reccount:= reccount 1,然後在masterdataband 拉一個memo object 加入這組 [reccount] / [totcount][的顯示

這樣應該可以達到你想要的結果,註,我是根據理論推斷,並未實作過,所以不負責保證程式的可行性, 請自行實作看看
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-20 22:03:34 IP:61.67.xxx.xxx 未訂閱
我記得你之前也曾有發文過是使用FR3, 雖然我有FR3,但苦於目前沒有時間去STUDY, 所以還是用2.5X版做,所以,以下的解答都是以2.5X版為基準
QUERY COUNT 是在Delphi中執行,然後利用
1.FRVariables['totcount'].Value:= query 出來的值, 這樣可以把 query 值送到 FR 中
2.有關 FR 的 totcount, reccount 是在 FR內的 Dictionary 設定
3.至於 reccount 的計算,如果寫在MasterDataBand 的 beforePrint ,那初值就是0
因為FR3已提供AfterPrint 事件(FR2.5x沒有), 所以初值是 1
===================引 用 帥氣銀行 文 章===================
另外幾個問題想請教PD前輩
您說到
1.另建一個query (select count(*) ... ) 取得本次總筆數,然後傳入FR的變數(totcount)中
請問所謂的傳入FR變數中 是像chris681016說的 在Memo內設定其Text為 [totcount]
再利用 frxReport1GetValue 的事件傳入嗎?
2.FR 另設一個reccount 變數, 初值為0 或1
請問這要在FR的哪裡做設定?
因小弟接觸FR不久
還不知如何自訂FR變數
還請前輩指點
編輯記錄
P.D. 重新編輯於 2007-10-20 22:04:24, 註解 無‧
系統時間:2024-04-19 0:28:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!