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

[推薦] QuickReport基本知識

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-25 11:09:37 IP:61.218.xxx.xxx 未訂閱
QuickReport基本知識    資料來源:  一、 簡單了解各控件功能 以下是各控件最簡單的使用功能,其他功能依具體的實現而介紹。 1. TquickRep:帶有坐標,作為其他報表控件(如TQRBand)的容器,它的Band屬性可以自動添加各種類型的TQRBand. 2. TQRLabel:打印靜態的文本(即不是根據數據庫值來改變的),作用象Tlabel , Caption的內容就打印出來的內容。 3. TQRDBText:打印數據庫字段值,一個值一行。作用象TDBText.把它的DataSet , DataField分別賦予Table1,Company時,將打印Table1所指向的表的Company字段的內容。 4. TQRSysData:打印系統信息如時間,頁碼,報表頭等。 5. TQRMemo:非常象TQRLabel,只是它可以打印多行,也是打印靜態數據。 6. TQRRichText:打印RichText格式,能夠連接到一個Form上的RichEdit控件並打印它的內容,不過必須是32位版本的。 7. TQRShape:打印方框、圓和垂直、水平線。 8. TQRImage:打印靜態的圖片,包括(BMP,WMF,ICON). 9. TQRDBImage:從數據庫接收圖片。 10. TQRBand:用來確定報表的不同位置應該顯示什麼內容,它上面可以放控件(參見二)。 11. TQRGoups:Groups可以不限級別的組操作。當你連接了幾個datasets到報表時可以通過Groups成組的對dataset進行操作。 二、 報表的控件擺放循序 出現在所有頁上的標題(PageHeader) | 標題(只有首頁才有)(Title) | 所有列的標題(ColumnHeader) | 記錄的內容,一個字段一列(Detail) | 摘要(最後一頁才有)(Summary) | 出現在所有頁上的頁腳(PageFooter) 這些根據設置不同的Band(不是控件,一種類型而已,在其上面可以放其他控件)來定位。總共有六種Band。 三、 一個簡單的例子 這個例子制作打印一張表的部分字段名及該字段數據內容的報表。 1. 建立一個新project 2. 放一個TTable到Form上,DatabaseName設為BCDEMOS,TableName指向Customer表,Active設為true. 3. 放一個TquickRep控件在Form上,DataSet屬性為Table1.(即要顯示上邊Table1所指向的表的內)。 4. 展開TquickRep的Bands屬性,設HasDetail為true,這時自動增加個detail band(一個TQRBand控件,故也可以直接放一個TQRBand控件,BandType屬性設為detail就行了)。 5. 放一個TQRDBText控件在detail band上面,設DataSet指向Table1,DataField指向Company。第四步是設置在報表的什麼位置顯示什麼類型的數據,而TQRDBText則具體實現。 6. 選TquickRep控件,按右鍵,選擇”Preview”預覽,應該看到表Customer的字段Company的所有字段值。 到這一個簡單的例子就OK了,程序實現預覽及利用TQRuickRep自帶的打印功能只須在Form中加一個按鈕,它的OnClick事件為:QuickRep1->Preview(); 四、一個使用TQRGoups、TQRExpr控件的報表 該報表先列出州名,接著列出該州的所有公司及公司總數,一個州列完後空一行(groups中斷),列出新的州名,接著列新州下的所有公司,沒有填州名的公司統一列在Unknown state下面。 1. 建立一個新project。 2. 放一個Tquery在Tquickrep上,其SQL屬性為:select * from customer order by State,Company;(即根據州、公司排序),DatabaseName為BCDMome,Active為true. 3. 放一個TquickRep控件在Form1上,DataSet為Tquery1. 4. 放一個TQRGroups控件在TquickRep上,這時默認為group header。(任何時候當group中斷或更高級別的group中斷,這個header都將打印出來,如果有表達式,根據表達式的值顯示內容。)接著添加一個group footer band,添加時,放一個TQRBand控件在報表上,連接TQRGroups的FooterBand屬性到這個QRBand,這時這個新建的TQRBand就成為Group Footer. (TQRGroup的一個重要特性是表達式,任何時候當表達式的值變時Group都將中斷,如表達式是按省列出城市名,當前列出廣東省,當屬於該省的城市列完後,表達式值改變,這時Group中斷,接著顯示其他省的城市名。)TQRGroups的Expression屬性設為Query1.State(根據不同的州來中斷)。 5. 放一個TQRBand控件在報表上,BandType為rbDetail. 6. 放一個TQRExpr控件在group header上面,其Expression屬性為:if(State<>’’,State,’Unknown state’),即如果公司的州沒填,就歸入Unknown state,否則歸入State. 7. 放三個TQRDBText在Detail上,他們的DataSet都指向Query1,DataField分別指向Company,Contact,Phone. 8. 在放一個TQRExpr控件在group Footer上面,Expression為’Customers in’ State ’:’ Str(Count) 作用是在每個州的公司列完後顯示該州總共有多少個公司。 9. 按右鍵選預覽,應該看到不同的州名及其公司和公司公司總數。 五、QuickReport 條件式列印 可以直接在 TQuickReport 的 OnFilter 事件中寫明條件判斷,OnFilter事件的引數中有一個以 var 宣告的 PrintRecord 布林型態變數,將這個變數設為 True(預設值), 該筆記錄便會印出;反之, 設為False,就不印出這筆記錄. procedure TForm1.QuickReport1Filter(var PrintRecord: Boolean); begin PrintRecord := False; if YourTable.FieldByName('WantedField').AsInteger <= 100 then Exit; if YourTable.FieldByName('WantedField').AsInteger >= 150 then Exit; PrintRecord := True; 時間就是金錢---[ 發問前請先找找舊文章]
crlin
一般會員


發表:47
回覆:57
積分:20
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-30 16:19:52 IP:203.74.xxx.xxx 未訂閱
我依照此篇文章第四點 一個使用TQRGoups、TQRExpr控件的報表 的方式製作報表, 第一次成功了 第二次又試著做第二個報表, 也是依相同的方式 但是 preview 時卻只看到 title 資料部份都沒出現 我檢查了好幾次所有的步驟, 都沒問題 但 preview 時還是看不到資料 後來發現 Report settings 中的 papersize 是 customs 所以把它改成 A4 然後就看到資料了 !! 接著又做了第三個報表, 也是依照相同的方式 這次仍只看到 title 然後我又去改 Report settings 中的 papersize 確定其是設成 A4 (本來就是 A4) 但這次仍無法看到 data 請問各位有遇過這樣的問題嗎 ??
danielldf
一般會員


發表:44
回覆:60
積分:20
註冊:2003-05-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-12 09:13:01 IP:218.16.xxx.xxx 未訂閱
re:接著又做了第三個報表, 也是依照相同的方式 這次仍只看到 title 然後我又去改 Report settings 中的 papersize 確定其是設成 A4 (本來就是 A4) 但這次仍無法看到 data 請問各位有遇過這樣的問題嗎 你的數據庫連接好了嗎?我用sql server 2000數據庫如果在ado沒有設connettion string 就不能先預覽數據.(我的connettion string 是用before connection事件產生的)
系統時間:2024-04-27 8:16:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!