在VB中利用Crystal ActiveX控件制作報(bào)表 在自行開發(fā)的應(yīng)用軟件中,一般都需要制作報(bào)表。我們可以利用Crystal Reports(也稱水晶報(bào)表)方式,調(diào)用Print方法直接輸出,通過其他( TextBox等)控件輸出報(bào)表,使用OLE技術(shù)與Word和Excel連接輸出報(bào)表。Crystal Reports方式需要許多文件支持,通常需要耗用更多的系統(tǒng)資源,但與其他方法 相比,具有容易實(shí)現(xiàn)、功能強(qiáng)大、報(bào)表樣式豐富的特點(diǎn)。 用Crystal ActiveX控件制作報(bào)表一般有兩種方法: 1. 直接使用Crystal ActiveX控件生成報(bào)表。 2. 先用CRW32.EXE產(chǎn)生RPT報(bào)表文件,然后在控件中引用RPT文件。 常用報(bào)表大約有:列表式的報(bào)表;帶有分類、匯總式的報(bào)表;以及帶有各種 圖形、圖表的報(bào)表。下面就這兩種方法舉例說明幾種報(bào)表的制作。 一、 直接使用Crystal ActiveX控件生成報(bào)表 使用Crystal ActiveX控件應(yīng)先建立數(shù)據(jù)庫,Crystal ActiveX控件支持流行 的數(shù)據(jù)庫類型,如:Access、xBase、Paradox。直接使用Crystal ActiveX 控件 只能制作簡單的列表式報(bào)表。 1. 新建一個(gè)工程,在窗體Form1上添加Data 控件,Crystal ActiveX控件, 命令按鈕。 2. 在Data 控件上將DatabaseName 屬性設(shè)置為要生成報(bào)表的數(shù)據(jù)庫名稱, 如Biblio.mdb。 設(shè)置 RecordSource 屬性為數(shù)據(jù)庫中表名稱或SQL查詢語句。這里我們設(shè)置 成表Authors。 3. 在Crystal ActiveX控件上設(shè)置 DataSource 屬性為Data1,設(shè)置 ReportSource 屬性為3。 ReportSource 屬性: 0 - 使用RPT報(bào)表文件; 1 - 綁定到TrueGrid控件 ; 3 - Data 控件所有的 Fields。 設(shè)置Destination屬性為0。 Destination 屬性: 0 - 輸出到窗口; 1 - 輸出到打印機(jī); 2 - 輸出到文件; 3 - 通過MAPI Email將報(bào)表發(fā)送到別處; 4 - 通過VIM Email將報(bào)表發(fā)送到別處。 若使用屬性2,需要設(shè)置PrintFileName、 PrintFileType等相關(guān)屬性。 若使用屬性3、4,需要設(shè)置EMailToList、EMailCCList、EMailMessage等相關(guān)屬性。 設(shè)置WindowState 屬性為2。 WindowState 屬性: 0 - 打印窗口正常方式; 1 - 打印窗口最小化; 2 - 打印窗口最大化。 4. 對于報(bào)表的激活,Crystal ActiveX 控件提供兩個(gè)途徑:屬性Action等 于1;或者使用PrintReport方法。PrintReport方法可以返回錯(cuò)誤代碼,以便于 進(jìn)行錯(cuò)誤處理。 在按鈕上增加代碼 Private Sub Command1—Click() CrystalReport1.Action = 1 End Sub 代碼也可以寫成: Private Sub Command1—Click() Dim Result% On Error GoTo Err—handler Result% = CrystalReport1.PrintReport Err—handler: Select Case Result% Case 20xxx: ′此處錯(cuò)誤處理 End Select End Sub 錯(cuò)誤處理,可參閱水晶報(bào)表CRW32.EXE幫助→DEVELOPER→The Crystal ActiveX Control→Error Messages。該處提供詳細(xì)的錯(cuò)誤信息以及出錯(cuò)原因。 運(yùn)行程序,單擊命令按鈕,就可預(yù)覽、打印按列列表的報(bào)表了。 二、 使用RPT報(bào)表文件制作報(bào)表 使用報(bào)表文件(*.RPT)可以制作前文所述的三種報(bào)表。推薦使用這種方法制作 報(bào)表。用這種方法時(shí),首先要制作一個(gè)報(bào)表文件??梢韵扔脠?bào)表文件生成向?qū)Мa(chǎn)生 一個(gè)大概的輪廓來,然后再修改報(bào)表文件使其符合要求。 制作報(bào)表文件 1. 運(yùn)行水晶報(bào)表CRW32.EXE。 在File→Options→Fonts中設(shè)置報(bào)表文件的標(biāo)題、頁首、頁腳、細(xì)目處的字型。 在File→Options→Fields中設(shè)置字串、數(shù)字、貨幣、日期、布爾型Fields的格式。 2. 單擊菜單File→New運(yùn)行報(bào)表文件生成向?qū)А?br> 3. 選取Standard標(biāo)準(zhǔn)格式。 Step1:Tables 單擊Data files,選取VB自帶的數(shù)據(jù)庫Biblio.mdb,單擊Done按 鈕,數(shù)據(jù)庫中表項(xiàng)出現(xiàn)在右邊列表框中,然后自動(dòng)進(jìn)入Step2。 Step2:Links 單擊Next>>按鈕。 Step3:Fields 報(bào)表文件可以使用數(shù)據(jù)庫表中的Fields,也可以使用數(shù)據(jù)庫表 Fields的運(yùn)算結(jié)果(Formula)作為報(bào)表文件的列。我們先選取左邊Datebase Fields 列表框里Authors表中Au—ID、Author、Year_born增加到右邊Report Fields列表 框中,可以在Column Heading中修改Fields的標(biāo)題。接下來要增加一個(gè)Formula, 單擊Formula按鈕,給公式取名f1,在Formula Text中輸入{Authors.Au_ID} + 10, 單擊Accept按鈕,左邊Datebase Fields列表框中出現(xiàn)@f1,把@f1添加到右邊Report Fields列表框中,然后單擊Next>>按鈕。 Step4:Sort 選擇Authors .Au—ID 排序并分組。排序次序和排序項(xiàng)可以在程序 里修改。單擊Next>>按鈕。 Step5:Totle 選擇一個(gè)Field進(jìn)行統(tǒng)計(jì),例如:小計(jì)、合計(jì)、計(jì)算平均值、個(gè)數(shù) 等。這里我們不做統(tǒng)計(jì),可以將Totle Fields中的值全部移去。 Step6:Select 在這里我們可以篩選數(shù)據(jù)庫中的記錄,假如需要使Au_ID大于500 的記錄才出現(xiàn)在報(bào)表里,我們可選擇Authors.Au—ID項(xiàng),然后選擇is →greater than → 500。注意:記錄的選擇也可以在程序里修改。單擊Next>>按鈕到下一步。 Step7:Style 選擇報(bào)表文件的樣式,這里我們選擇Table類型。點(diǎn)擊圖片按鈕還 可以給報(bào)表加些圖片,在Title后輸入報(bào)表標(biāo)題,至此報(bào)表初步制作完成。單擊Preview Report按鈕可以預(yù)覽報(bào)表了。 4.單擊Design標(biāo)簽進(jìn)入設(shè)計(jì)模式。在設(shè)計(jì)模式中我們可以做修改調(diào)整,完成最終 的報(bào)表。Click選擇一項(xiàng),Shift+ Click選擇多項(xiàng)。修改時(shí)應(yīng)充分利用鼠標(biāo)右鍵功能。 最后將報(bào)表文件存為test.rpt。 帶有圖表的報(bào)表文件制作步驟與上面所述相似,在此不做詳細(xì)敘述。 報(bào)表文件制作完畢,我們就可以在Crystal ActiveX 控件中引用了。 在Crystal ActiveX 控件中引用報(bào)表文件 1. 新建一個(gè)工程,在窗體Form1上添加Crystal ActiveX 控件,命令按鈕。 2. 在Crystal ActiveX 控件上設(shè)置ReportSource 屬性為0,設(shè)置ReportFileName 為制作完的報(bào)表文件test.rpt,設(shè)置WindowState 屬性為2。 3. 在按鈕上增加代碼: Private Sub Command1—Click() Dim Result% On Error GoTo Err—handler CrystalReport1.SortFields(0) = ″-{Authors.Au_ID}″ ′將Authors.Au_ID按順序排列 CrystalReport1.GroupSelectionFormula = ″{Authors.Au_ID} in 100 to 1000″ ′篩選Authors.Au—ID為100至1000的記錄 Result% = CrystalReport1.PrintReport Err—handler: Select Case Result% Case 20xxx: ′此處錯(cuò)誤處理 End Select End Sub 例: Private Sub Form_Load() Dim capp As New CRAXDRT.Application Dim crp As New CRAXDRT.Report Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Integer If cn.State = adStateOpen Then cn.Close With cn .Provider = "MSDASQL.1" .ConnectionString = "Persist Security Info=True;User ID=SA;Data Source=plans;Initial Catalog=plan" .Open End With If rs.State = adStateOpen Then rs.Close ‘rs.Open "select * from apb where zdph like ‘14%‘ ", cn, adOpenKeyset, adLockOptimistic Set crp = capp.OpenReport(App.Path & "\report1.rpt") ‘For i = 1 To crp.Database.Tables.Count ‘ If crp.Database.Tables.Item(i).Name = "ado" Then ‘ crp.Database.Tables(i).SetDataSource rs ‘ End If ‘Next i ‘crp.Database.SetDataSource rs CRViewer1.ReportSource = crp CRViewer1.ViewReport End Sub Private Sub Form_Resize() CRViewer1.Top = 0 CRViewer1.Left = 0 CRViewer1.Height = ScaleHeight CRViewer1.Width = ScaleWidth End Sub |
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面