版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、深入QuickReport(一)作者:董維春(本文已在CSDN開(kāi)發(fā)高手04年第一、二、三期上發(fā)表,應(yīng)廣大網(wǎng)友的要求,經(jīng)編輯同意,發(fā)表在CSDN作者本人文檔中,略有修改,但僅即于此,未經(jīng)CSDN或作者本人同意任何個(gè)人與網(wǎng)站不得轉(zhuǎn)載、摘抄,否則任何涉及到版權(quán)的行為后果自負(fù)) 報(bào)表是數(shù)據(jù)庫(kù)應(yīng)用程序的基本組成部分之一,完整的數(shù)據(jù)庫(kù)應(yīng)用程序總要提供報(bào)表功能。與傳統(tǒng)的數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)工具相比,C+ Builder中提供了QuickReport組件,使C+ Builder的數(shù)據(jù)庫(kù)功能得到了極大的豐富。QuickReport是挪威Qusoft AS公司專(zhuān)門(mén)為C+ Builder設(shè)計(jì)的用于報(bào)表的一組
2、控件,在C+ Builder上我們使用的QuickReport與專(zhuān)業(yè)版的QuickReport相比,在功能上還有很大的差距,但對(duì)于我們來(lái)說(shuō)只要充分利用好她,就可以非??旖莸脑O(shè)計(jì)出功能強(qiáng)大、模式多樣的數(shù)據(jù)報(bào)表,最重要的是她不需要我們花額外的錢(qián)去購(gòu)買(mǎi)。其實(shí)QuickReport并不難,但介紹的這方面的內(nèi)容實(shí)在太少,并且她的幫助文檔寫(xiě)得也不太好,讓那些想學(xué)習(xí)QuickReport的C+ Builder愛(ài)好者找不到一個(gè)正確的、合適的方法。如果你想了解她、使用她,那好吧,讓我來(lái)幫你認(rèn)識(shí)這個(gè)妖女吧,如果此文對(duì)你能有所幫助,那是我最大的快樂(lè)! 第一部分:QuickReport
3、基本知識(shí) BCB引進(jìn)的Qusoft公司的報(bào)表組件系列,它包括多個(gè)組件。首先有必要先簡(jiǎn)單的了解一下這二十三個(gè)組件的基本位置與功能。一、組件功能簡(jiǎn)介 上面的兩個(gè)圖是QuickReport組件頁(yè)的中所有組件,在BCB6中提供給我們使用的不會(huì)少于上面的23個(gè)的。下表是按上圖中組件的位置先后,對(duì)各控件的使用功能逐一做了簡(jiǎn)單的介紹: 1)QuickRep帶有坐標(biāo),作為其他報(bào)表控件(如TQRBand)的容器,通過(guò)它的Band屬性可以自動(dòng)添加各種類(lèi)型的TQRBand 重要屬性 (Properties)使用說(shuō)明Da
4、taSet 連結(jié)數(shù)據(jù)來(lái)源,一般是ADO/BDE連接組件的名字Page紙張的設(shè)置,可展開(kāi)BottomMargin10.0mm報(bào)表下邊界尺寸Columns1報(bào)表分欄數(shù),默認(rèn)為1欄ColumnSpace0.0mm報(bào)表欄與欄間隔尺寸,Columns值大于1時(shí)有效LeftMargin10.0mm報(bào)表左邊界尺寸Length210.0mm報(bào)表長(zhǎng)度尺寸,與PaperSize設(shè)置相關(guān)OrientationpoPortraitpoLandscape報(bào)表方向 打印方向,有下面兩個(gè)值:直印poPortrait、橫印poLandscape PaperSizeA4報(bào)表打印紙張大小RightMargin
5、10.0mm報(bào)表右邊界尺寸Rulertrue報(bào)表標(biāo)尺顯示TopMargin10.0mm報(bào)表上邊界尺寸Width297.0mm報(bào)表寬度尺寸,與PaperSize設(shè)置相關(guān)PrinterSettingCopies1報(bào)表復(fù)制份數(shù)Duplexfalse報(bào)表雙重打印FirstPage0報(bào)表打印起始頁(yè)LastPage0報(bào)表打印終止頁(yè)OutPutBinAuto報(bào)表輸出種類(lèi)ReportTitle報(bào)表預(yù)覽打印標(biāo)題Unitsmm報(bào)表設(shè)計(jì)階段顯示標(biāo)尺單位2)QRSubDetail建立一個(gè)主/明細(xì)(master/detail) 報(bào)表,連接明細(xì)文件的組件3)QRStringsBand可建立一讀取 TString
6、s 中項(xiàng)次值的組件。在這個(gè)組件里有一個(gè)Items屬性,若Items一個(gè)值(一行空、一回車(chē)行)都沒(méi)有,那他上面的組件將不會(huì)起作用。當(dāng)String List Editor中有幾行,該組件上的內(nèi)容就重復(fù)幾次。若只有一行內(nèi)容時(shí),她與一個(gè)DetailBand是一樣的;而多行時(shí),也是差不多的,即先重復(fù)該區(qū)段內(nèi)的可視組件幾次(幾行就幾次),然后下一個(gè)再重復(fù)。比如三行,那就是第一個(gè)數(shù)據(jù)來(lái)三行,然后第二個(gè)數(shù)據(jù)來(lái)三行,再然后,直到最后 4)QRBand用來(lái)確定在報(bào)表的不同位置應(yīng)該顯示什么內(nèi)容,它上面可以放控件5)QRChildBand在報(bào)表中基礎(chǔ)子項(xiàng)條列組件。他有一個(gè)ParentBand屬性,
7、你必須把他與其它band連接起來(lái),只有這樣在她里面布置的組件才有效。說(shuō)直接就是已經(jīng)有了一個(gè)Band而你還需要一個(gè)這樣的組件,那就用她吧6)QRGroup在報(bào)表中對(duì)資料做邏輯上分組的組件。當(dāng)你連接了幾個(gè)datasets到報(bào)表時(shí)可以通過(guò)Groups成組的對(duì)dataset進(jìn)行操作7)QRLabel打印靜態(tài)的文本(即不是根據(jù)數(shù)據(jù)庫(kù)值來(lái)改變的),作用象Tlabel 。 Caption的內(nèi)容就打印出來(lái)的內(nèi)容;AutoStretch是布爾型變量,當(dāng)標(biāo)簽標(biāo)題在設(shè)定范圍內(nèi)不能打印時(shí),該屬性將起作用,若為true,報(bào)表將繼續(xù)打印沒(méi)有打印完的文本,其它需要打印的文本將依次向后移動(dòng),反之,則超出部分不被打印8)QRD
8、BText在報(bào)表中具有顯示連結(jié)資料來(lái)源的文字功能的組件9)QRExpr在報(bào)表中具有顯示陳述句或計(jì)算表示式值的組件10)QRSysData在報(bào)表中具有顯示系統(tǒng)信息的組件11)QRMemo在報(bào)表中顯示備注文字的組件12)QRExprMemo在報(bào)表中是TQRExpr 和 TQRMemo 的混合組件13)QRRichText在報(bào)表中具有顯示區(qū)域文字功能的組件14)QRDBRichText在報(bào)表具有顯示連結(jié)資料來(lái)源的區(qū)域文字功能的組件15)QRShape在報(bào)表中處理幾何圖形的組件,如方形、圓角方形、橢圓16)QRImage在報(bào)表中顯示靜態(tài)的圖片,包括(BMP,WMF,ICO
9、N)17)QRDBImage在報(bào)表中顯示從數(shù)據(jù)庫(kù)接收的圖片18)QRCompositeReport在報(bào)表中連結(jié)有關(guān)與無(wú)關(guān)的報(bào)表組件 ,用于創(chuàng)建混合報(bào)表的組件,可以把兩個(gè)或兩個(gè)以上的報(bào)表連接在一起,組成一個(gè)報(bào)表19)QRPreview在執(zhí)行階段建立自訂預(yù)覽報(bào)表組件20)QRTextFilter將報(bào)表內(nèi)容輸出于ASCII text 文件21)QRCSVFilter將報(bào)表內(nèi)容輸出于CSV文件22)QRHTMLFilter將報(bào)表內(nèi)容輸出于HTML文件23)QRChart可以在報(bào)表上應(yīng)用的圖表工具二、組件關(guān)系表 下圖說(shuō)明了與QuickReport相關(guān)組件之間的連接與關(guān)系:&
10、#160; &
11、#160; ADOTable<=| QRChilderBandDataBase<=ADO<= &
12、#160; |<=QuickRep<=QRBand <=可視化組件 ADOQuery<=|
13、 QRStringBand
14、; 數(shù)據(jù)庫(kù) ADO引擎 報(bào)表容器組件 Band區(qū)段(容器) 可視化控件(顯示)注意:可視化組件必須布置在相應(yīng)的TQRBand區(qū)段上,否則將得不到要顯示的內(nèi)容。BDE引擎與這個(gè)差不多,他與ADO只是與庫(kù)聯(lián)
15、接方式不一樣,對(duì)QuickReport沒(méi)有什么影響。 有時(shí)有些朋友不小心把可視化組件放在窗體上了,而沒(méi)有直接放在TQuickRep組件中的各Band區(qū)段上,當(dāng)把這些組件移到想要放置的區(qū)段時(shí),發(fā)現(xiàn)這些組件不能用,所以你要切記:一定要把組件放在固定的區(qū)段上,并且在區(qū)段之間也是不能移動(dòng)的。我們從Object TreeView中可以看到這些組件與TQuickRep是同一層,當(dāng)然他不可能為T(mén)QuickRep工作了,只有他成為T(mén)QuickRep中的某一個(gè)區(qū)段(某個(gè)Band)的下一層時(shí),才能正常工作。并且一定要放在一個(gè)區(qū)段中,不要誤認(rèn)為放在TQuickRep上就行,如果你直接放在TQuickRep
16、上,你的報(bào)表中將得不到什么L 三、最大容器TQuickRep QuickReport中組織層次是特別嚴(yán)格的,TQuickRep是報(bào)表組件中必須有的,并且所有Band組件都必須放在她的上面,如果說(shuō)每個(gè)Band區(qū)段都是一個(gè)小容器的話,那她就是一個(gè)最大的容器。想用好QuickReport,TQuickRep絕對(duì)不能只看作是一個(gè)類(lèi)似Form的容器,如何用好她對(duì)我們用好QuickReport會(huì)起到關(guān)鍵性作用。1)主要屬性:DataSet是TDataSet數(shù)據(jù)集類(lèi)型變量,用來(lái)設(shè)置報(bào)表使用的數(shù)據(jù)集組件對(duì)象,在主/明細(xì)報(bào)表中是主報(bào)表的數(shù)據(jù)集。若我們的報(bào)表要用到數(shù)據(jù)庫(kù),她必須指定數(shù)據(jù)庫(kù)連接工
17、具的名稱(chēng),否則你的程序?qū)⒖床坏綌?shù)據(jù)庫(kù)中的數(shù)據(jù)。當(dāng)然,在數(shù)據(jù)庫(kù)的連接組件中也一定要把Active設(shè)為true,讓不你只能在程序運(yùn)行中動(dòng)態(tài)的把數(shù)據(jù)庫(kù)打開(kāi),而在程序設(shè)計(jì)階段將看不到什么LRecordCount 是數(shù)據(jù)集組件對(duì)象中記錄的數(shù)量;RecordNumber是當(dāng)前正在打印/顯示的記錄的索引(第一條記錄的索引是0);RecordCount、RecordNumber兩個(gè)屬性只有打開(kāi)數(shù)據(jù)集對(duì)象之后,它們才可以訪問(wèn)。若報(bào)表組件成功地從數(shù)據(jù)集組件對(duì)象中提取數(shù)據(jù),并生成報(bào)表,則Available的屬性值為true。 State屬性是報(bào)表狀態(tài)信息,它是枚舉型變量,可以有以下的取值:qrA
18、vailable:報(bào)表資源已準(zhǔn)備好,可以預(yù)覽或打??;qrPrepare:正在生成報(bào)表;qrPreview:正在預(yù)覽報(bào)表;qrPrint:正在打印報(bào)表;qrEdit:正在編輯報(bào)表。Description是TStrings類(lèi)型屬性,它可以用來(lái)保存程序員對(duì)報(bào)表的簡(jiǎn)單描述。主要是起提示作用。Page屬性是TQuickRep組件中最重要屬性,它是TQRPage類(lèi)型變量,用來(lái)設(shè)置報(bào)表的頁(yè)面屬性。報(bào)表組件為她提供了特殊的編輯器,使用組件的快捷菜單Report settings就可以打開(kāi)Page的屬性編輯器窗口。在報(bào)表頁(yè)面屬性對(duì)話框上可以設(shè)置頁(yè)面的尺寸、邊框、分欄、區(qū)段等等頁(yè)面的屬性。當(dāng)
19、然我們也可以在對(duì)象查看器中點(diǎn)擊 Page前面的“+”展開(kāi)它的所有屬性,并分別設(shè)置這些屬性。其中PagerSize是設(shè)置紙張大小的,他與Width、Length是密切相關(guān)的,改變PagerSize的值,后面兩個(gè)的值也會(huì)做出相應(yīng)的變化,同樣,改變后兩個(gè)屬性時(shí),PagerSize的值也會(huì)做出相應(yīng)的改變。我們可以通過(guò)改變Orientation的值來(lái)改變打印的方向。Margins指的是報(bào)表顯示內(nèi)容在PagerSize中的位置。Columns屬性我們一定注意,它是分欄設(shè)置,與WORD里的分欄設(shè)置是一樣的,無(wú)論出于何種目的,有時(shí)我們要把打印內(nèi)容分成兩欄(或多欄)時(shí),這時(shí)我們就要用到它,把它的值改為
20、2(或?qū)嶋H欄數(shù)),至于欄間的距離我們通過(guò)Column space來(lái)設(shè)定。Units屬性是用來(lái)設(shè)置紙張的顯示單位的,我們通常都選用mm(毫米),當(dāng)然你要對(duì)其它比較了解也可以選用,但我認(rèn)為最好不要選用其它項(xiàng)。2)主要方法及事件TQuickRep提供了大量方法以實(shí)現(xiàn)生成、預(yù)覽和打印報(bào)表的功能,但是,它的許多方法是私有成員函數(shù),在類(lèi)外不允許訪問(wèn)。在實(shí)現(xiàn)報(bào)表功能時(shí),應(yīng)用程序經(jīng)常需要調(diào)用Cancel、NewColumn、Preview、PreviewModal、PreviewModeless、Print、PrinterSetup和ResetPageFooterSize幾個(gè)方面。Cancel 方法
21、用來(lái)撤銷(xiāo)當(dāng)前正在進(jìn)行的操作,它與把TQuickRep 組件對(duì)象的Cancelled屬性設(shè)置為true是一樣的。NewColumn、Print與PrinterSetup都是與打印有關(guān)的方法。其中NewColumn用來(lái)強(qiáng)制打印機(jī)從新欄開(kāi)始打印,如果當(dāng)前欄是頁(yè)面的最后一欄,則該方法將自動(dòng)調(diào)用方法NewPage ,從新頁(yè)開(kāi)始打印。Preview、PreviewModal和PreviewModeless都是用來(lái)預(yù)覽報(bào)表的。這些方法都不需要使用任何參數(shù)。TQuickRep能夠響應(yīng)的事件主要有:AfterPreview、AfterPrint、BeforePrint、OnEndPage、O
22、nStartPage和OnPreview事件,這些事件的觸發(fā)與使用方法比較簡(jiǎn)單,另外在實(shí)際應(yīng)用中運(yùn)用的并不多,這里就不再多說(shuō)了。 四、 報(bào)表控件擺放的區(qū)段 作為報(bào)表,它通常有一個(gè)固定的模式,最常見(jiàn)的報(bào)表主要是由以下六部分組成:PageHeader:頁(yè)眉,每頁(yè)均會(huì)出現(xiàn) | Title:標(biāo)題, 只出現(xiàn)在第一頁(yè)
23、160; | ColumnHeader:所有列的標(biāo)題,即報(bào)表文件的字段區(qū)域,每頁(yè)只會(huì)出現(xiàn)一次 | Detail:記錄的內(nèi)容,一個(gè)字段一列,即報(bào)表的文本區(qū)域(重復(fù)區(qū))
24、0; | Summary:摘要(只出現(xiàn)在最后一頁(yè)) | PageFooter:頁(yè)腳,每頁(yè)均會(huì)出現(xiàn) 在QuickReport中,是通過(guò)不同的TQRBand區(qū)段來(lái)實(shí)現(xiàn)的。TQRB
25、and 是放在TQuickRep組件上面的一個(gè)容器,我們?cè)谄渖厦婵梢苑胖梦覀円蛴〉目梢暬疩uickReport組件。而通過(guò)對(duì)TQRBand的BandType屬性的設(shè)置,我們可以改變TQRBand區(qū)段的類(lèi)型,來(lái)實(shí)現(xiàn)不同區(qū)段的功能。BandType是一個(gè)枚舉型變量,顯然上面常見(jiàn)報(bào)表組成表中的那六個(gè)部分也一定會(huì)出現(xiàn)在BandType的枚舉值中,只不過(guò)每個(gè)前面都加上了前綴rb。我們選擇不同的BandType值,就代表不同的區(qū)段類(lèi)型,實(shí)現(xiàn)不同的功能,這一點(diǎn)必須注意。實(shí)際上TQRBand的BandType屬性值不止上面的六個(gè),她還有以下幾個(gè)值:rbGroupHeader:組頁(yè)眉表格元,用于標(biāo)志
26、組頁(yè)中每一頁(yè)的開(kāi)始,也用于TQRSubDetail;rbGroupFooter:組頁(yè)腳表格元,與rbGroupHeader結(jié)合分隔出單頁(yè),適用于TQRGroup和TQRSubDetail;rbSubDetail:字?jǐn)?shù)據(jù)表格元,無(wú)需手工設(shè)置;rbChilder:字表格元,無(wú)需手工設(shè)置。事實(shí)上,我們還可以在TQuickRep上來(lái)布置區(qū)段,我們只要把TQuickRep組件的Band屬性前面的“+”點(diǎn)開(kāi),就會(huì)看到上面那六個(gè)值(當(dāng)然每個(gè)前面都加上了Has,可不是rb了),這些值都是布爾型的,我們想要用哪個(gè)區(qū)段類(lèi)型的TQRBand,只要把其值設(shè)為true,就可以了。從這一點(diǎn)可以看出:前者可以更加靈活的布置
27、Band區(qū)段,后者使用起來(lái)更加方便、快捷,至于到時(shí)候你用哪個(gè),那就看你當(dāng)時(shí)的心情與實(shí)際情況了。單純從結(jié)構(gòu)嚴(yán)謹(jǐn)性上來(lái)講,還是通過(guò)TQRBand的BandType來(lái)設(shè)定區(qū)段類(lèi)型更好一些,并且這樣做出的報(bào)表出現(xiàn)的問(wèn)題最少。 五、報(bào)表運(yùn)算組件TQRExpr與系統(tǒng)功能組件TQRSysData 報(bào)表運(yùn)算組件TQRExpr用來(lái)提供一些簡(jiǎn)單的計(jì)算功能。Expression屬性是她的最重要屬性,我們有必要而且也必須掌握好她。只要單擊Expression右端的編輯按鈕就可以打開(kāi)表達(dá)式編輯窗口。利用這個(gè)編輯器,我們可以比較方便的設(shè)計(jì)表達(dá)式。通過(guò)表達(dá)式編輯器窗口中的按扭,可以在表達(dá)式中插入數(shù)據(jù)庫(kù)中
28、的表的字段、函數(shù)、數(shù)學(xué)和邏輯運(yùn)算符,并可以通過(guò)Validate按扭來(lái)測(cè)試表達(dá)式的正確性。當(dāng)然,我們也可以直接在編輯器中輸入表達(dá)式。在她的函數(shù)中IF你一定要用好,因?yàn)樗龝?huì)幫我們很多忙,這個(gè)函數(shù)的對(duì)于學(xué)過(guò)DBASE的程序愛(ài)好者來(lái)說(shuō)應(yīng)該是非常熟悉的,因?yàn)樵谶@里她們的使用是一樣的;在C中,她與for(;)語(yǔ)句或“?:”表達(dá)式差不多。她的具體使用格式如下:IF(條件式,為真用這句,為假用這句)系統(tǒng)功能組件TQRSysData可以為我們提供一些經(jīng)常用到的系統(tǒng)功能。為了實(shí)現(xiàn)這些功能,他提供了兩個(gè)重要屬性Data和Text。Data是一個(gè)枚舉類(lèi)型變量,它有七個(gè)取值,如下表: 系統(tǒng)功能類(lèi)型表(Data
29、取值表) 系統(tǒng)功能類(lèi)型功能描述qrsTime系統(tǒng)時(shí)間qrsDateTime系統(tǒng)日期和時(shí)間qrsDetailCount需要打印的記錄數(shù)量qrsDetailNo正在打印的記錄索引qrsPageNumber正在打印的頁(yè)qrsReportTitle報(bào)表標(biāo)題qrsDate系統(tǒng)日期 Text屬性是字符串類(lèi)型變量,用來(lái)構(gòu)成完整的系統(tǒng)功能字符串。Data和Text這兩個(gè)屬性通常是一起使用的。如果將Text設(shè)置為“打印時(shí)間:”,而將Data設(shè)置為qrsDataTime,則系統(tǒng)打印結(jié)果為“打印時(shí)間:2003-9-21 13:08:12”的形式。許多情況下,我們更想打印如“第1頁(yè)”這樣格式的頁(yè)碼
30、,使用上面的屬性是不能實(shí)現(xiàn)的,這就要我們編寫(xiě)代碼來(lái)實(shí)現(xiàn)。在打印/顯示報(bào)表時(shí),應(yīng)用程序?qū)⒂|發(fā)OnPrint事件句柄。這樣我們只要在報(bào)表運(yùn)算組件TQRExpr或系統(tǒng)功能組件TQRSysData的OnPrint中寫(xiě)下如下代碼就可以實(shí)現(xiàn)了:void _fastcall TForm1:TQRExpr1Print(TObject *sender, AnsiString &Value) Value="第"+Value+"頁(yè)"/- 或 void _fastcal
31、l TForm1:TQRSysData1Print(TObject *sender, AnsiString &Value) Value="第"+Value+"頁(yè)"/- 通過(guò)這兩段代碼我們可以知道,原來(lái)這兩個(gè)組件顯示或起作用的就是Value,如果我們不修改Value的值,則直接打印Value內(nèi)容。由于我們?cè)贠nPrint事件中修改了她的值,從而改變了打印的內(nèi)容。注意:有些朋友把上面代碼輸入了進(jìn)去,卻得不到正確的內(nèi)容,原因很簡(jiǎn)單:TQRSysDat
32、a的Data屬性值設(shè)置不對(duì),這個(gè)例子中我們要得到頁(yè)數(shù),看一下Data的值是不是qrsPageNumber,并且Text的值是否為空;對(duì)于TQRExpr組件,你是否通過(guò)Expression編輯器的Variable按鈕進(jìn)入了下一頁(yè),選擇了PAGENUMBER值?這是你不能正確實(shí)現(xiàn)代碼的問(wèn)題所在。 六、TQRShape組件 TQRShape組件可以在報(bào)表上輸出一些簡(jiǎn)單的圖形,設(shè)置它的Shape屬性可以選擇不同的圖形,但它主要用于繪制表格線,因此與TShape有些不同,下面我們來(lái)看一下Shape的取值:TQRShape組件Shape屬性取值表 Shape屬性取值意義qrs
33、Circle畫(huà)圓qrsHorLine畫(huà)水平直線(Height要設(shè)為1或其它)qrsRectangle畫(huà)矩形qrsRightAndLeft僅在矩形左右繪直線qrsTopAndBottom僅在矩形上下繪直線qrsVertLine畫(huà)垂直線(Width要設(shè)為1或其它) 作為畫(huà)圖組件她的四個(gè)位置屬性最為重要,它們是Top、Left、Height和Width。其實(shí)對(duì)于QuickRep的絕大多數(shù)組件來(lái)說(shuō),這四個(gè)屬性也是非常重要的。在Shape屬性值為QrsHorLine/ QrsVertLine時(shí),Height/Width的屬性值要改為1或其它,這取決于你線條的寬度。Brush屬性用來(lái)設(shè)置幾何圖形
34、內(nèi)部的填充風(fēng)格,它包括填充顏色Color和填充圖案Style。Pen屬性用來(lái)設(shè)置用于畫(huà)圖的畫(huà)筆的屬性,它包括Color、Style、Mode、Wide等。TQRShape組件與TShape組件有許多相同之處,但也有一些不同之處,象Shape屬性的取值等等,我們一定注意。其實(shí)通過(guò)對(duì)兩個(gè)類(lèi)似組件的對(duì)比學(xué)習(xí),會(huì)加深我們對(duì)她們的掌握。如果運(yùn)用得當(dāng),漂亮的線條就會(huì)出現(xiàn)在我們面前。對(duì)于TQRShape組件的使用來(lái)說(shuō)更多的是熟練,她應(yīng)該是所有QuickReport組件中最好掌握的一個(gè)了,使用率也是最高的一個(gè),并且TQRShape在表格設(shè)計(jì)中的作用是其它組件所不能取代的,但本文限于篇幅就不在做過(guò)多的解釋了。深
35、入QuickReport(二)作者:董維春(本文已在CSDN開(kāi)發(fā)高手04年第一、二、三期上發(fā)表,應(yīng)廣大網(wǎng)友的要求,經(jīng)編輯同意,發(fā)表在CSDN作者本人文檔中,略有修改,但僅即于此,未經(jīng)CSDN或作者本人同意任何個(gè)人與網(wǎng)站不得轉(zhuǎn)載、摘抄,否則任何涉及到版權(quán)的行為后果自負(fù)) 第二部分:深入QuickReprot例程 在應(yīng)用中學(xué)習(xí),在實(shí)踐中進(jìn)步,這是我學(xué)習(xí)QuickReport的最大感受,通過(guò)上面的介紹,我想你對(duì)QuickReport也有了一定的了解,那么下一步我們將通過(guò)例程逐步深入QuickReportJ 例一:TQuickRep、TQRLabel、TQRDBText組
36、件的應(yīng)用 實(shí)踐是最好的老師,我們先通過(guò)一個(gè)例子來(lái)看一下QR的快捷與方便。 1) 建立一個(gè)新Project 。 2)放一個(gè)TTable到Form上,這里我們用BCB中自帶的數(shù)據(jù)庫(kù)。DatabaseName設(shè)為BCDEMOS,TableName指向Customer表
37、,Active設(shè)為true。 3) 放一個(gè)TQuickRep控件在Form上,DataSet屬性為T(mén)able1(即要顯示Table1所指向的表的內(nèi)容)。 4)展開(kāi)TQuickRep的Bands屬性,設(shè)HasDetail為true,這時(shí)自動(dòng)增加個(gè)Detail Band(一個(gè)TQRBand控件,故也可以直接放一個(gè)TQRBand控件,BandType屬性設(shè)為
38、rbDetail就行了)。這個(gè)區(qū)段是重復(fù)區(qū)段。 5)放一個(gè)TQRLabel與TQRDBText控件在Detail Band上面,TQRLabel的Caption屬性設(shè)置為“公司:”二字;TQRDBText的 DataSet指向Table1,DataField指向Company。 6)選TQuickRep控件(不要指在區(qū)段上),按右鍵,選擇“Preview”預(yù)覽,應(yīng)該看到表Cu
39、stomer的字段Company中所有字段值。 到這一個(gè)簡(jiǎn)單的例子就OK了。但這個(gè)程序你編譯后,會(huì)得到與你布置時(shí)一樣的QuickReport組件,看不到你想要的報(bào)表內(nèi)容。程序要實(shí)現(xiàn)剛才Preview時(shí)的效果只能利用TQRuickRep自帶的打印功能了,我們只要在Form中加上一個(gè)按鈕,在它的OnClick事件中寫(xiě)上:QuickRep1->Preview(); 就可以了。沒(méi)有人希望那個(gè)什么也不顯示的TQuickRep組件擺在窗體上,這也告訴我們一點(diǎn)我們的程序中最好有兩個(gè)For
40、m:一個(gè)是放置控制QuickReport顯示、打印或?qū)崿F(xiàn)其它功能的,比如本例中放置控制按扭;一個(gè)是提供給QuickReport布置組件的。當(dāng)然這不是說(shuō)在一個(gè)Form中實(shí)現(xiàn)不了上述功能,其實(shí)你只要在窗體的OnCreate事件中把TQuickRep組件隱藏起來(lái)就可以了:void _fastcall TForm1:Form1Create(TObject *Sender) QuickRep1->Hide();要注意QR你不能用Show()調(diào)用,那你將得不到你想要的程序,當(dāng)然用Preview()就沒(méi)錯(cuò)了。以下是本例的程序源代碼:#pragma pack
41、age(smart_init)#pragma resource "*.dfm"TForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Form1Create(TObject *Sender) QuickRep1->Hide();/-void _fastcall TForm1:Button1Cli
42、ck(TObject *Sender) QuickRep1->Preview();/-進(jìn)一步思考:有時(shí)我們想實(shí)現(xiàn)垂直輸出,比如用TQRLabel里的內(nèi)容我們想垂直顯示能否實(shí)現(xiàn)?當(dāng)然能實(shí)現(xiàn)。只要我們按如下設(shè)置就可以實(shí)現(xiàn):AutoSize=false;/默認(rèn)為trueAutoStrech=true;/ 默認(rèn)為falseWordWrap=true;/ 默認(rèn)為true,這是設(shè)置中的重點(diǎn),這與Label中的設(shè)置是一樣的Caption的值要注意,每個(gè)字符間一定要有空格;/一般的設(shè)置我們不會(huì)留空格,因?yàn)樵O(shè)計(jì)空格除了美觀,
43、沒(méi)什么實(shí)際意義,但在這里必須留空格進(jìn)一步思考:我們想顯示有兩位小數(shù)的數(shù)字,應(yīng)該如何辦呢? 只要把該可視化組件的mask屬性設(shè)為0.00就可以實(shí)現(xiàn)了。 例二:TQRGroup、TQRExpr組件的應(yīng)用 該報(bào)表先列出州名,接著列出該州的所有公司及公司總數(shù),一個(gè)州列完后空一行(Group中斷),列出新的州名,接著列新州下的所有公司,沒(méi)有填州名的公司統(tǒng)一列在“不清楚什么地區(qū)的”下面。 1)新建一個(gè)Project。
44、0; 2)放一個(gè)TQuery在TForm上,其SQL屬性為:select * from customer order by State,Company,即根據(jù)州、公司排序,DatabaseName為BCDEMOS,Active為true。 3) 放一個(gè)TQuickRep控件在Form1上,DataSet為Query1。
45、; 4)放一個(gè)TQRBand在TQuickRep上面,把其BandType設(shè)成rbDetail。5)放一個(gè)TQRGroup控件在TQuickRep上,這時(shí)默認(rèn)為Group Header。(任何時(shí)候當(dāng)Group中斷或更高級(jí)別的Group中斷,這個(gè)Header都將打印出來(lái),如果有表達(dá)式,根據(jù)表達(dá)式的值顯示內(nèi)容),接著添加一個(gè)Group Footer Band,但我們卻不能找到這樣的一個(gè)組件,那應(yīng)該如何設(shè)計(jì)出Group Footer Band區(qū)段呢?我們只要放一個(gè)QRBand2在報(bào)表上,把TQRGroup的FooterBand屬性指向QRBand2,看一下,QRBand2是不是變成了Gro
46、up Footer Band 。(TQRGroup的一個(gè)重要特性是表達(dá)式,任何時(shí)候當(dāng)表達(dá)式的值改變時(shí),Group都將中斷,如表達(dá)式是按省列出城市名,當(dāng)前列出遼寧省,當(dāng)屬于遼寧省的城市列完后,表達(dá)式值改變,這時(shí)Group中斷,接著顯示其他省的城市名),TQRGroup1的Expression屬性設(shè)為Query1.State(根據(jù)不同的州來(lái)中斷)。注意:為什么不直接再放一個(gè)TQRGroup,因?yàn)闊o(wú)論我們放多少個(gè)系統(tǒng)都會(huì)默認(rèn)為 Group Header。 6)放一個(gè)TQRExpr控件在Group Header
47、上面,其Expression屬性為:IF(Query1.State <> '',Query1.State,'不清楚什么地區(qū)的'),即如果公司的州沒(méi)填,就歸入“不清楚什么地區(qū)的”,否則歸入具體的州。 7)放三個(gè)TQRDBText在Detail上,他們的DataSet都指向Query1,DataField分別指向Company、Contact、Phone。 8)再放一個(gè)TQRExpr控件在Gr
48、oup Footer Band上面,Expression為Query1.State+'共有:'+STR(COUNT)+個(gè)公司,作用是在每個(gè)州的公司列完后顯示這個(gè)州總共有多少個(gè)公司。 9)把鼠標(biāo)放在QuickRep組件上(不能放在Band區(qū)段上),按右鍵選預(yù)覽,應(yīng)該看到不同的州名及其公司名稱(chēng)和該州公司總數(shù)。注意:大家發(fā)現(xiàn)看到并不是每個(gè)州公司的總數(shù),每個(gè)州后列出的都是把上一個(gè)州的總數(shù)也加上的累計(jì)值,難道是我們錯(cuò)了,沒(méi)有,檢查一下你的Expression組件(運(yùn)行COU
49、NT那個(gè))的ResetAfterPrint的屬性值是否為true,如果不是把他改為true,現(xiàn)在看一下J進(jìn)一步思考:每一組內(nèi)容都聯(lián)在一起,有些不爽,要是每組內(nèi)容之間被什么分隔開(kāi)就好了?其實(shí)這并不難實(shí)現(xiàn),我們只要把QRBand2(group Footer)的HasChild屬性設(shè)為true就可以了。當(dāng)然你直接把一個(gè)TQRChildBand組件放在QuickRep1上,把她的ParentBand屬性設(shè)置為QRBand2,同樣可以實(shí)現(xiàn)上面的設(shè)置。另外我們同樣可以在TQRChildBand布置其它可視化組件J進(jìn)一步思考:要是每組結(jié)束后就換頁(yè),那不是更爽嗎?只要我們把QRGroup1的ForceNewP
50、age屬性改為true就可以了,同樣的組件還有一個(gè)ForceNewColumn。但一定要注意,我們改了哪個(gè)區(qū)段的這兩個(gè)屬性,就從哪個(gè)區(qū)段開(kāi)始NewPage/NewColumn。 例三、TQuickRep組件的Page屬性應(yīng)用PVC胸卡有些朋友一定見(jiàn)過(guò),做這樣的卡片并不太難,最近筆者就參與制作了一批胸卡,這里我們要講的是卡片的設(shè)計(jì)。1)新建一個(gè)Project。2)放一個(gè)Table組件,把它指向我們的資源數(shù)據(jù)庫(kù),并把Active設(shè)為true。3)放置一個(gè)TQuickRep組件在Form1上,并把它DataSet設(shè)置為T(mén)able1,在她上面放一個(gè)TQRBand,把其BandType值設(shè)置成
51、rbDetail。在Band區(qū)段上面按下圖放置好四個(gè)TQRLabel組件、三個(gè)TQRDBText組件與一個(gè)TQRDBImage組件。4)三個(gè)TQRDBText組件的設(shè)置基本上一樣的,把DataSet指定為T(mén)able1,然后在從DataField中選取正確的字段。我們可以同樣的設(shè)置好TQRDBImage的相關(guān)屬性。5)對(duì)頁(yè)面進(jìn)行設(shè)置,這是關(guān)鍵。一張紙上我們不可能只打印一個(gè),打印得越多越多好,左邊打完,在右邊繼續(xù)打印,這樣才能充分利用原材料。我們這里用到了分欄,把Number of columns屬性設(shè)為2,也就是分兩欄。在TQuickRep中使用組件的快捷菜單Report
52、settings打開(kāi)Page的屬性編輯器窗口,做如下設(shè)置:其中Pager size選擇為自定義,在其后輸入紙的大小 ,其它設(shè)置按上圖即可。當(dāng)然我們也可以在對(duì)象查看器窗口單擊Page屬性左端的編輯按鈕,展開(kāi)其屬性值來(lái)進(jìn)行正確的設(shè)置,如下圖: 6)TQRBand的Width設(shè)為228,然后重新調(diào)整好Band上組件的位置。228實(shí)際上是由38×6得到的。7)把鼠標(biāo)放在QuickRep組件上(不能放在Band區(qū)段上),按右鍵選預(yù)覽,看一下效果吧。難點(diǎn):為了定位方便、準(zhǔn)確, TQuickRep組件提供了坐標(biāo)(一格一格的,邊上帶數(shù)字的,不會(huì)告訴我沒(méi)看見(jiàn)吧J),從對(duì)紙張的設(shè)置我
53、們知道這些坐標(biāo)每整格相距為10mm,但在QR中,很多組件都沒(méi)有單位,對(duì)于這10 mm,QR中對(duì)應(yīng)的單位長(zhǎng)度是38,這一點(diǎn)你一定要記住。 通過(guò)上面的三個(gè)例子,我們已經(jīng)可以進(jìn)行了一些簡(jiǎn)單的報(bào)表設(shè)計(jì),從例四開(kāi)始我們將進(jìn)一步的學(xué)習(xí)QuickReport,下面例程也只講關(guān)鍵點(diǎn),著重分析,省略一些重復(fù)性的語(yǔ)言。 例四、主/明細(xì)(Master/Detail)報(bào)表與TQRSubDetail組件的應(yīng)用設(shè)計(jì)主/明細(xì)報(bào)表的關(guān)鍵有兩點(diǎn):一是主/明細(xì)數(shù)據(jù)表的連接;二是對(duì)TQRSubDetail組件的正確使用。 主從數(shù)據(jù)表連接示意圖1(TTable與TTable) Master表&
54、#160; 關(guān)聯(lián) Detail表組件名 &
55、#160; TTable TDataSource1 TTable重要屬性 Name <= DataSet
56、0; Name TableName
57、60; Name <=DataSourceDabaseName<=指向同一庫(kù)名=>DabaseName(指定索引字段)IndexFieldName MasterField(點(diǎn)擊右側(cè)
58、“”調(diào)出Field Link Designer對(duì)話框,設(shè)置好關(guān)聯(lián)字段)Active<=同設(shè)為true=>Active 主從數(shù)據(jù)表連接示意圖2(TTable與TQuery) Master表 關(guān)聯(lián) Det
59、ail表組件名 TTable TDataSource1 TTQuery重要屬性
60、 Name <= DataSet Name
61、60; TableName Name <=DataSourceDabaseName<=指向同一庫(kù)名=>DabaseName(指定索引字段)IndexFieldName &
62、#160; SQL(點(diǎn)擊右側(cè)“”調(diào)出String list Editor對(duì)話框設(shè)置好關(guān)聯(lián)字段)Active<=同設(shè)為true=>Active TQRSubDetail組件的設(shè)置:1)Master的值設(shè)為所在TQu
63、ickRep組件的名;2)DataSet的值設(shè)為連接明細(xì)表的組件名;3)點(diǎn)擊Bands前面的“+”,展開(kāi)屬性,能看到HasFooter與HasHeader 兩個(gè)屬性,把其值設(shè)為true,這樣我們就得到了一對(duì)Group(當(dāng)然完全我們完全可以用別的方法)。注意:通過(guò)TQRSubDetail屬性Band里的HasHeader、HasFooter產(chǎn)生的Group組,在Group Header中沒(méi)有Expression,她們默認(rèn)按主/明細(xì)表的關(guān)聯(lián)關(guān)系分組。其實(shí)沒(méi)有他們,TQRSubDetail也是這樣用的。
64、160; 我們建立如下圖的主/明細(xì)報(bào)表: 1)設(shè)置數(shù)據(jù)集在窗體上放置TTable、TDataSource、TQuery組件,把Table1、Query1的DatabaseName屬性設(shè)置為BCDEMOS,把T
65、able1的TableName設(shè)為customer.db(主表名),把IndexFieldName設(shè)為索引字段名CustNo。把DataSource1的DataSet設(shè)為T(mén)able1,為做主/明細(xì)數(shù)據(jù)做好準(zhǔn)備。連接明細(xì)表的Query1,我們把其DataSource設(shè)為DataSource1,從而建立關(guān)聯(lián)關(guān)系,并將其SQL屬性設(shè)成: SELECT * FROM orders
66、60; WHERE CustNo =: CustNo
67、;
68、; |
69、0; | |
70、160; | | |選擇所有字段 從orders表(從表) 條件
71、160; 從表的字段 建立主從關(guān)系 主表字段 這樣我們就建立了明細(xì)表與主表的關(guān)聯(lián),明細(xì)表是按上式關(guān)系分組的,就是把CustNo一樣的放在一起。2)設(shè)置報(bào)表結(jié)構(gòu)首先,在前面設(shè)計(jì)的窗體上放置一個(gè)報(bào)表組件TQucikRep,在對(duì)象查看器窗口中把Band屬性展開(kāi),將其HasColumnHeader、HasDetail、HasPageFooter、HasPageHeader、HasSummary和HasTitle屬性設(shè)為true。把QuickRep1的DataSet屬性設(shè)為T(mén)able1,為報(bào)表主表指定數(shù)據(jù)
72、源。然后,把TQRSubDetail組件放到QuickRep1組件上,作為明細(xì)表Band區(qū)段。把其Master屬性設(shè)置為QuickRep1,設(shè)置Bands的子屬性HasHeader和HasFooter為true,并將其DataSet屬性設(shè)置為Query1,指定明細(xì)表數(shù)據(jù)來(lái)源。3)設(shè)置主/明細(xì)報(bào)表的主體在ColumnHeaderBand1區(qū)段中添加主表中各字段的標(biāo)題使用的報(bào)表標(biāo)簽組件(TQRLable),它們的Caption分別為客戶(hù)號(hào)、公司、電話、傳真和所在城市。在DetailBand1區(qū)段中添加顯示主表字段值的報(bào)表組件(TQRDBText),與前面標(biāo)題對(duì)應(yīng)設(shè)置其字段,要注意的是它們的Data
73、Set都為T(mén)able1。在明細(xì)報(bào)表部分,我們首先在GroupHeaderBand1中放置明細(xì)表的表頭標(biāo)簽(TQRLable),它們的Caption依次設(shè)置為定單號(hào)、條款、付款方式、款項(xiàng)總額和未付款額。在QRSubDetail1區(qū)段中放置顯示明細(xì)報(bào)表的組件對(duì)象(TQRDBText),其DataSet屬性全設(shè)為Query1,字段名稱(chēng)依次是OrderNo、Terms、PaymentMethod和ItemsTotal。接著添加一個(gè)TQRExpr組件,設(shè)置其Master屬性為QRSubDetail,打開(kāi)表達(dá)編輯器,輸入下面的表達(dá)式:INT(Query1.ItemsTotal-Query1.AmounPa
74、id)在GroupFooterBand1區(qū)段中添加統(tǒng)計(jì)報(bào)表組件QRExpr2,并將其屬性設(shè)置為QRSubDetail1,打開(kāi)表達(dá)式編輯器,輸入如下 表達(dá)式:SUM(INT(Query1.ItemsTotal-Query1.AmounPaid)即計(jì)算未付款項(xiàng)的總額,并設(shè)置ResetAfterPrinter屬性為true,這樣,就可以統(tǒng)計(jì)出明細(xì)表的總額了。在SummaryBand1區(qū)段中添加一個(gè)QRExpr3,打開(kāi)表達(dá)式編輯器,在其中輸入如下語(yǔ)句:SUM(INT(Query1.ItemsTotal-Query1.AmounPaid)這樣這個(gè)報(bào)表的主體我們就做完了,其它設(shè)置看一下上面的圖你
75、就應(yīng)該明白了。下面我們?cè)偬砑永恢械哪菢拥某绦虼a,至此這樣的一個(gè)復(fù)雜報(bào)表我們就完成了。本例是用TTable與TQuery做的主/明細(xì)數(shù)據(jù)關(guān)聯(lián),同樣我們可以用TTable與TTable做主/明細(xì)數(shù)據(jù)關(guān)聯(lián),實(shí)現(xiàn)本例這樣的報(bào)表。深入QuickReport(三)作者:董維春(本文已在CSDN開(kāi)發(fā)高手04年第一、二、三期上發(fā)表,應(yīng)廣大網(wǎng)友的要求,經(jīng)編輯同意,發(fā)表在CSDN作者本人文檔中,略有修改,但僅即于此,未經(jīng)CSDN或作者本人同意任何個(gè)人與網(wǎng)站不得轉(zhuǎn)載、摘抄,否則任何涉及到版權(quán)的行為后果自負(fù)) 第三部分:報(bào)表中的其他問(wèn)題 通過(guò)前兩部分的學(xué)習(xí),我想你對(duì)QuickRep
76、已經(jīng)有了一定的掌握,在這部分我們對(duì)報(bào)表設(shè)計(jì)中的其他一些問(wèn)題做一下簡(jiǎn)單介紹,也許這些你并不常用,但同樣這些內(nèi)容對(duì)于我們學(xué)習(xí)QuickRep還是有很大益處的。此部分內(nèi)容都以例程的形式講解,為了保持文章的完整性,例子的編號(hào)接上部分。 例五、報(bào)表的連接及保存 通過(guò)上面的例子,你也許會(huì)動(dòng)手做了幾個(gè)報(bào)表,有時(shí)你一定會(huì)想把其中的一些報(bào)表連接起來(lái),組成一個(gè)綜合報(bào)表,并作為整體來(lái)操作。在BCB中實(shí)現(xiàn)這一點(diǎn)并不難,我們這時(shí)要用到TQRCompositeReport組件。它提供了一個(gè)OnAddReprots事件,在創(chuàng)建報(bào)表時(shí)將觸發(fā)這個(gè)事件,因此我們只要在這個(gè)事件中用Add方法將需要連接在一起的報(bào)
77、表添加到該組件的事件中就可以了。下面給出一個(gè)示例程序段,這是把兩個(gè)報(bào)表添加到綜合報(bào)表中的,代碼如下:void _fastcall TForm1:QRCompositeReportAddReports(TObject *Sender)(TQRCompositeReport*)Sender)->Reports->Add(Form2->QuickRep1);/添加第一個(gè)報(bào)表(TQRCompositeReport*)Sender)->Reports->Add(Form3->QuickRep1);/添加第二個(gè)報(bào)表做好的報(bào)表我們一定都想保存起來(lái),保存的文件格式有:文本格
78、式文件(TXT),組件TQRTextFilter;超文本格式文件(HTML/HTM),組件TQRHTMLFilder;逗號(hào)分隔文件(CSV),組件TQRCSVFilter;以及報(bào)表文件。保存前三種格式文件需要調(diào)用ExportToFilter方法,而直接保存報(bào)表組件,則只需用Save。這個(gè)例子中我們放了一個(gè)TSaveDialog對(duì)話框和QuickReport組件頁(yè)中的TQRTextFilter、TQRHTMLFilder、TQRCSVFilter三個(gè)組件。完整的代碼如下:void _fastcall TForm1: SaveReportClick(TObject *Sender)
79、160; AnsiString FileExt; / 打開(kāi)保存文件對(duì)話框獲得文件名 if(SaveDialog1->Execute() / 獲得文件后綴 FileExt = AnsiUpperCase(ExtractFileExt(SaveDialog1->FileName); &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年智慧城市建設(shè)項(xiàng)目合作實(shí)施保密及數(shù)據(jù)安全協(xié)議3篇
- 2025年度陶瓷工藝品制作勞務(wù)用工服務(wù)協(xié)議2篇
- 2025年上半年遼寧營(yíng)口市教育局直屬學(xué)校面向社會(huì)招聘教師和工作人員40人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧省盤(pán)錦遼河口生態(tài)經(jīng)濟(jì)區(qū)招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧省大連大學(xué)高層次人才選聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧沈陽(yáng)農(nóng)業(yè)大學(xué)招聘高層次人才22人(第二批)重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年遼寧事業(yè)單位聯(lián)考招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年贛州市審計(jì)局招考5名財(cái)務(wù)審計(jì)人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴陽(yáng)市公安局觀山湖分局招考輔警人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州黔東南州事業(yè)單位招考易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2023年湖北省武漢市高考數(shù)學(xué)一模試卷及答案解析
- 城市軌道交通的網(wǎng)絡(luò)安全與數(shù)據(jù)保護(hù)
- 英國(guó)足球文化課件
- 《行政職業(yè)能力測(cè)驗(yàn)》2023年公務(wù)員考試新疆維吾爾新疆生產(chǎn)建設(shè)兵團(tuán)可克達(dá)拉市預(yù)測(cè)試題含解析
- 醫(yī)院投訴案例分析及處理要點(diǎn)
- 燙傷的安全知識(shí)講座
- 工程變更、工程量簽證、結(jié)算以及零星項(xiàng)目預(yù)算程序?qū)嵤┘?xì)則(試行)
- 練習(xí)20連加連減
- 五四制青島版數(shù)學(xué)五年級(jí)上冊(cè)期末測(cè)試題及答案(共3套)
- 員工內(nèi)部崗位調(diào)換申請(qǐng)表
- 商法題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論