Access雖然有內建報表功能,但Crystal Report的功能似乎更略勝一籌,安裝好Crystal Report後,可以由Access的表單內加入「Crystal Report Viewer Control」物件,再透過VBA程式,即可帶出指定的報表,修改查詢內容,達到要呈現的效果。相關顯示的程式碼如下:
Private Sub cmd_Open_Click()
'來源報表檔
strFile = Lista2.Column(2)
'來源資料庫
strDB = Lista2.Column(4)
'strMDB = CurrentProject.FullName
'來源MDB檔案
strMDB = Config("MDBPath") & "\" & "xxxx.mdb"
'設定密碼
strPassword = "xxxxxx"
'報表檔案路徑
strReportPath = "C:\Reportes\"
'報表名稱
sReportName = strReportPath & strFile & ".rpt"
Set objCRApp = CreateObject("CrystalRunTime.Application")
Set objReport = objCRApp.OpenReport(sReportName)
Set reportDb = objReport.Database
Set reportTables = reportDb.Tables
Set reportTable = reportTables.Item(1)
'reportTable.ConnectBufferString = strConnectBufferString
'資料庫來源指到MDB檔案
reportTable.ConnectionProperties("Database Name") = strMDB
'MDB密碼
reportTable.ConnectionProperties("Database Password") = strPassword
'變更SQL語句,可進行篩選內容調整
strSQL = objReport.SQLQueryString
strSQL = Replace(strSQL, 尋找字串, 替換字串)
objReport.SQLQueryString = strSQL
Debug.Print strSQL
'來源
CRViewer90.ReportSource = objReport
'CR報表樣貌
CRViewer90.EnableExportButton = True
CRViewer90.EnableGroupTree = True
CRViewer90.EnableRefreshButton = True
CRViewer90.EnableZoomControl = True
CRViewer90.EnableHelpButton = True
'進行檢視
CRViewer90.ViewReport
'看是否顯示群組樹狀圖來決定顯示寬度
If CRViewer90.EnableGroupTree = True Then
CRViewer90.Width = 15390
Else
CRViewer90.Width = 12764
End If
'CRViewer90.Height = 10000
End Sub
筆者拿來跟樹狀圖配合,替現有的水晶報表製作了產生報表用的操作界面,不過這是公司內部使用,僅呈現給各位參考,報表的呼叫,可以參考程式碼的部份,產生出來的畫面如下:
另外筆者也製作了一個簡要的水晶報表來顯示工作紀錄資料,用來展示水晶報表的載入方式: