Академический Документы
Профессиональный Документы
Культура Документы
By Anne-Marie Wright
'Crystal Reports' is a popular third party package that is included with Visual
Basic, which allows you to create reports for your application. The package
consists of a designer - where you can design and test the reports, Crystal
Reports API calls and Crystal Reports control.
Creating a Report
VB5 or less
To access the Crystal Report Designer, select the Report Designer from the Add-
In menu in the VB environment
VB6
To access the Crystal Report Designer, a Start menu group and shortcut will have
been automatically created.
While you are in design mode you can draw and arrange the data fields on the
report. This is done in a similar way to creating controls on a form in VB.
For the purposes of this tutorial we will be creating a simple report from the
sample database BIBLIO.
Click on the Custom button to display the Choose Report Type and Data
Type frames.
Select the Custom Report and click on the Data File.
Specify the location of the BIBLIO.MDB Access database
Select which tables from the database you want. For this example we will
need the authors table and the Title table.
check that the joins are correct in the Linking Export
Now if you run it by selecting Print Preview, you can see what the report looks
like.
Now save the report and we have a template that now can be used in VB.
Note: Turn off the Save Data with report option if you want the data to contain
new information each time the report is used. Going to the File menu, selecting
Options and clicking on the Reporting Tab sets the option
This is fine I hear you say, but what if I don't want all the data. There are many
options in the Crystal Reports and as this tutorial is more of an overview I will not
be going into it. But one important thing to do is to get specific data. This is done
by a selection formula (i.e. the Where clause of a SQL statement).
The above formula will only show Authors that have had their book published in
1984.
Note:Check the crystal report help files for the files you need to distribute with
the control. You will also need any .rpt files that you have created
You will have to add the Crystal Report control to the toolbox, this is done by
going to the Project menu and selecting Components, then looking down the list
for the control and clicking on it
To use the control add it to a form and set the following properties
o ReportFileName - The path and the filename of the .rpt file you have
created
o DataFiles(0) - The path and the filename of the database that you want it
to use.
If this is left blank it will use the one in the report.
o SelectionFormula - The formula to select the subset of data that you want.
o Destination - 0 to Preview, 1 to Print
There is alot more to crystal reports than I have covered here, but I hope it gives
you an idea of how Crystal Reports works. I have not used the new features in
Version 8, but it should still work.
This tutorial shows you how to use Crystal Reports 4.6, which is the version of
Crystal Reports that shipped with Visual Studio / Visual Basic 6.0.Crystal
Reports provides a relatively easy way to incorporate reporting into your application.
The basis of a report is a database query.
It should be pointed out that this version of Crystal Reports is quite old, and that this
version and the past versions of Crystal Reports that have shipped with VB are
generally "watered down" versions that do not have all the bells and whistles of the
standalone product that is sold by Seagate Software. Furthermore, CR 4.6 will not
work with MS-Access databases higher than Access 97. That said, what you learn
about designing reports with CR 4.6 will help when working with later versions.
Regarding the MS-Access issue, later versions of Access (2000, 2002, etc.) can read
and save in Access 97 format.
Crystal Reports 4.6 is bundled with Visual Studio/Visual Basic 6.0, but it is not
installed automatically. To install it manually, locate the CRYSREPT folder on your
installation CD – for Visual Studio 6.0, the path
is COMMON\TOOLS\VB\CRYSREPT on the third CD. In that folder, double-click the
file CRYSTL32.EXE. You will be asked if you want to install Crystal Reports.
Respond Yes. It will then tell you where it is going to install CR; you can override the
location if desired. Following that, CR will be installed, and a few moments later you
should get a message indicating that installation was successful.
The sample database used for this tutorial (as well as others to follow) is an Access
97 format database named EMPLOYEE.MDB.
EmpMast table:
DeptMast table:
JobMast table:
Two reports will be developed from this database: "Annual Salary Expenses by
Department" and "Annual Salary Expenses by Job".
For the Annual Salary Expenses by Department report, you want to show various
fields from the employee database tables grouped and subtotaled by department.
You also want to show a grand total at the end of the report. A sketch of the design
might look something like the following:
EMP # EMP NAME # JOB TITLE HIRE DATE HOURS RATE ANN SALARY
The design of the Annual Salary Expenses by Job report is similar, except that you want to
show various fields from the employee database tables grouped and subtotaled by job. You
might sketch the design as follows:
EMP # EMP NAME # DEPT NAME HIRE DATE HOURS RATE ANN SALARY
This tutorial will start off by showing the step-by-step process for designing the first
report, "Annual Salary Expenses by Department". Once that is done, it will be a
simple matter to copy that report and modify it to create the Annual Salary Expenses
by Job report.
With the report designs in mind, open Crystal Reports (Report Designer) from the
VB Add-Ins menu:
A registration form appears. Click the Cancel button.
The Create New Report dialog box appears. Click the Standard button.
The Create Report Expert dialog box appears with the Step 1: Tables tab open.
Click the Data File button:
The Choose Database File dialog box appears. Navigate to the directory where your
database file resides, then click the name of the database file so that it appears
under "File Name:". Click the Add button, then click the Done button.
The 2: Links tab then appears, showing you a diagram similar to that of Access'
Relationships diagram.
Skip down to the JobMast table and select the JobNbr and JobTitle.
Jump back up to the EmpMast table and select the HireDate, HrlyRate,
and SchedHrs.
DeptMast.DeptNbr Dept #
EmpMast.EmpNbr Emp #
JobMast.JobNbr Job #
Click the Formula button. The "New Formula" dialog box appears.
Type EmpName in the textbox and click OK
The "Edit Formula" dialog box appears. In the "Formula text" area, type:
Click the Check button. If you entered the formula correctly, the message "No errors
found" will pop up. Passing that, click the Accept button.
The formula will then appear in the Database Fields listbox (as "@EmpName"). With
@EmpName highlighted, click the "Add->" button to add it to the Report Fields list. In
the Report Fields list, drag and drop "@EmpName" so that it appears under
"EmpMast.EmpNbr". Give @EmpName a column heading of "Employee Name".
Now we must create the annual salary formula. To do so, follow these steps:
ℜ• In the "New Formula" dialog box, type "AnnSal" and click OK.
{EmpMast.HrlyRate} * {EmpMast.SchedHrs} * 52
ℜ• Use the "Add->" button to bring @AnnSal over from the Database Fields list to
the Report Fields list.
ℜ• In the Report Fields listbox, drag and drop the @AnnSal formula so that it is
the last field in the list.
Click the 5: Total tab. Within this Total tab, an inner tabbed dialog appears, with one
tab for each field selected in the sort. On the "DeptMast.DeptNbr" tab, remove all
items except "@AnnSal" from the Total Fields list, as shown below. What we are
saying is that we want to print a subtotal for the annual salary every time there is a
change, or break, in the department number.
Still in the "5: Total" tab, click the "@EmpName" tab and remove all items from the
Total Fields list, as shown below. (We don't want to print subtotals after every
employee name.)
We don't need to do anything in tab 6, so click the 7: Style tab. For the title, type
"Annual Salary Expenses by Department".
Click the Preview Report button. At this time, the "Create Report Expert" is finished
and you can't go back to it, but you can make any desired changes in the Crystal
Reports interface. Following is the screen that is initially displayed after you click the
Preview Report button from Step 7 of the Expert:
On the Crystal Reports toolbar, click the Zoom button, so you can see what the
Expert did for you (it gives you a start, but it needs some work):
Click the Design tab:
Perform the following steps to fix up the report:
ℜ• In the Page header area, click the title ("Annual Salary Expenses by
Department") to select it. Resize the title so that it spans the width of the entire
report. Go to the format bar and click the center button to center the title.
ℜ• From the Insert menu, select Text Field. In the dialog box that appears,
type Run Date: and click the Accept button. At that point, your mouse pointer will
also have box representing the text field you just entered. Drag this box to the
line where the date is. Use your mouse to arrange the items so that they look like
this:
ℜ• Still in the Page Header area, remove the column headings for Dept
# and Dept Name. (Do this by selecting each item with the mouse and pressing
the Delete key.)
ℜ• In the first area labeled #1: DeptNbr – A (the one above Details), select the
item there and delete it.
ℜ• In the Details area, select the DeptNbr and DeptName fields, and drag them
with the mouse to the first #1: DeptNbr -A area.
ℜ• Once in the new area, select these two fields and click the Bold button. Insert
a text field in this area (using the same technique as you did with "Run Date:")
with the text "Department:". Make this text field bold as well. Arrange the fields so
that they look like the following (you can resize a field by selecting it and dragging
on the handles, just like resizing a control on a VB form):
ℜ• Note that the default format for the department number contains a comma. We
don't want that. Right click the department number, and select Change Format
… from the context menu. The Format Number dialog appears, as shown below.
Clear the "Thousands Separator" checkbox and click OK. (Note: You can also
add or remove comma formatting by selecting the field and clicking the comma
button on the formatting toolbar.)
ℜ• Remove the commas from the formats for the employee number and the job
number. Resize the fields on the detail line and resize their corresponding column
headings so that the column headings can be fully read and the field data is lined
up beneath them. Use the screen shot below as a guide:
ℜ• In the second area labeled #1: DeptNbr – A (the one below Details), you
will see a text item (denoted by X's) on the far left of the line. Delete that text
item. In the same area, toward the right-hand side of the line, you will see a
numeric item (denoted by "55.56"). This is the department subtotal. Resize this
item to make it larger, and move it to the right so that it lines up with the detail
annual salary field, as shown below:
ℜ• Insert a text field with the text "Subtotal for Department" to the left of the
subtotal (not to the immediate left, because we are going to insert another field
between these two). Click the Bold button to make it bold.
ℜ• On the Insert menu, select Database Field … The "Insert Database Field"
dialog box comes up (shown below). From it, selectDeptNbr and drag the
DeptNbr field to the subtotal line, between the text "Subtotal for Department" and
the numeric subtotal.
ℜ• The second area labeled #1: DeptNbr – A should now look like this:
That's just about it. Click the Preview tab to check out the finished product.
Due to the fact this was set up to print in landscape orientation, a few screen shots
are presented to show the final report. Below is the left-hand side of the report:
At this point, if you want to do any further tweaking, you can click the Design tab and
do so. You can also print the report at this time. Before exiting Crystal Reports, save
the report in the same directory as your VB project, under the
name SALDEPT.RPT (Crystal Reports automatically appends the .RPT extension).
The real objective is to be able to print the report from the VB program. The how-to
for that is coming up shortly, but first, there is another report to create. The second
report is similar to this one, except that it will be sorted and subtotaled by job, not
department. Fortunately, this second report does not have to be built from scratch.
We can modify the first report to create the second report.
1. Copy the SALDEPT.RPT file and name the new file SALJOB.RPT.
6. From the Report menu, select Change Group Expert. The Edit Group
Section dialog box appears. There should only be one item in the listbox,
reading Group #1: DeptMast.DeptNbr – A. Select that item and click OK.
Another Edit Group Section dialog box appears. The first combo box should
have "DeptMast.DeptNbr" selected. Click the drop down arrow and
select JobMast.JobNbrand click OK.
7. In the Page header area, right-click the title, select Edit Text Field, change the
word "Department" to "Job" and click Accept.
8. The next objective is to switch the department fields in the first #1: JobNbr –
A area with the job fields in the Details area. To do this, perform the following
steps:
a. Move the job number and job title fields from the Details line to an open area of the
#1: JobNbr – A line.
b Move the department number and department name fields from the first #1:
JobNbr – A line to the space formerly occupied by the job fields in
the Details line. Resize the department name field so that it fits.
c. In the first #1: JobNbr – A line, edit the text of the "Department:" text field
so that it says "Job:". Move the job number and job title fields close to
the "Job:" text field and make these two items bold.
d. In the Details line, remove the bold formatting from the department number
and department name fields.
e. Back in the Page header area, change the text of the "Job #" and "Job
Title" column headings to "Dept #" and "Dept Name", respectively.
9. In the second #1: JobNbr – A area, delete the department number field.
Replace it with the job number field. To do this, go to theInsert menu,
select Database field, and select JobNbr. Resize the JobNbr field so that its
small enough to fit where the department number used to be. Remove the
commas from the formatting and make it bold. Edit the text field "Subtotal for
Department", changing the word "Department" to "Job". Make cosmetic
adjustments as necessary.
10. That's just about it. Click the Preview tab to view the fruits of your labor. If you
wish, go back and make any adjustments you deem necessary and print out
the report. When you are done, save the report and exit Crystal Reports.
First, you must add the Crystal Report control to your VB toolbox. To do so, go
to Project Components and check Crystal Report Control 4.6 from the
Components dialog box, as shown below:
The Crystal Reports control will then appear in the VB toolbox (it is circled in the
screen shot below):
The form used in the demo application associated with this topic,
named frmCRDemo, is shown below. The form contains two sets of option button
control arrays (each contain two option buttons indexed 0 and 1). The first option
button control array, named optReport, appears in the frame labelled "Select
Report"; the second option button control array, named optDestination, appears in
the frame labelled "Select Destination". The Crystal Report control was
renamed rptAnnSalExp. No other properties of the Crystal Report control were set
at design-time; all necessary properties are set in code at run-time. Only one Crystal
Report control is necessary to print any number of reports off of a form. The Crystal
Report control is not visible at run-time. Finally, there are two command buttons on
the form; the OK button and the Exit button. The OK button runs the report based on
the options selected by the user in the frames above; the Exit button ends the
application.
Following is the code for both the frmCRDemo form and a standard module
called modCommon. The Crystal Reports-related code will be explained following
the code listings.
Option Explicit
'-------------------------------------------------------------
-----------
'-------------------------------------------------------------
-----------
CenterForm Me
End Sub
'-------------------------------------------------------------
-----------
strReportName = "SALDEPT.RPT"
Else
strReportName = "SALJOB.RPT"
End If
intReportDestination = crptToWindow
Else
intReportDestination = crptToPrinter
End If
With rptAnnSalExp
.Destination = intReportDestination
End With
Exit Sub
cmdOK_Click_Error:
"cmdOK_Click"
End Sub
'-------------------------------------------------------------
-----------
'-------------------------------------------------------------
-----------
Unload Me
End Sub
Option Explicit
'-------------------------------------------------------------
-----------
'-------------------------------------------------------------
-----------
With pobjForm
End With
End Sub
'-------------------------------------------------------------
-----------
'-------------------------------------------------------------
-----------
End Function
Note that in the cmdOK_Click event procedure, the variable strReportName is set
to "SALDEPT.RPT" or "SALJOB.RPT", depending on which optReport button was
clicked. The variable intDestination is set to
either crptToWindow or crptToPrinter, both built-in Crystal Reports constants,
depending on which optDestination button was clicked (if you choose to send the
report to a window, a "print preview" type screen appears allowing the user to view
the report on screen; if you choose to send the report to the printer, it will be sent
directly to the default printer with no preview).
The sample app references the following properties of the Crystal Report control:
ℜ• ReportFileName refers to the name of the report definition that you saved in
Crystal Reports. Alternatively, this property can also be set at design-time.
ℜ• Action is the property that triggers the running of the report. It must be set
to 1 to run.
Code :
VB.NET Syntax (Toggle Plain Text)
1. Imports CrystalDecisions.CrystalReports.Engine
2. Imports CrystalDecisions.Shared
3. Public Class Form6
4. Inherits System.Windows.Forms.Form
5.
6.
7. Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
8.
9. 'Dim cryRpt As New ReportDocument
10. 'cryRpt.Load(Application.StartupPath &
"\CrystalReport5.rpt")
11. 'CrystalReportViewer1.ReportSource = cryRpt
12. 'CrystalReportViewer1.Refresh()
13.
14. Dim cryRpt As New ReportDocument
15. cryRpt.Load(Application.StartupPath &
"\CrystalReport5.rpt")
16.
17. Dim crParameterFieldDefinitions As
ParameterFieldDefinitions
18. Dim crParameterFieldDefinition As ParameterFieldDefinition
19. Dim crParameterValues As New ParameterValues
20. Dim crParameterDiscreteValue As New ParameterDiscreteValue
21.
22. crParameterDiscreteValue.Value = TextBox1.Text
23. crParameterFieldDefinitions =
cryRpt.DataDefinition.ParameterFields
24. crParameterFieldDefinition =
crParameterFieldDefinitions.Item("id")
25. crParameterValues =
crParameterFieldDefinition.CurrentValues
26.
27. crParameterValues.Clear()
28. crParameterValues.Add(crParameterDiscreteValue)
29. crParameterFieldDefinition.ApplyCurrentValues(crParameterVa
lues)
30.
31. CrystalReportViewer1.ReportSource = cryRpt
32. CrystalReportViewer1.Refresh()
33. cryRpt.RecordSelectionFormula = "{Button1}= " &
TextBox1.Text & ""
34. End Sub
35.
36. But now I have created two parameter to show report.
37.
38. Parameter : {asst.dt} >= {?fdt} and {asst.dt} <= {?ldt}
39.
40. fdt(first date & ldt(last date)
41.
42. I have a form with two text boxes & one button & one report
viewer. When user will input first date there in the first text
box & last date there in last text box & click on show button it
will show records between two dates including first date & last
date. As a result I have wrtie code for button event right? I am
using my previous code which is
43.
44. Code : Imports CrystalDecisions.CrystalReports.Engine
45. Imports CrystalDecisions.Shared
46. Public Class Form6
47. Inherits System.Windows.Forms.Form
48.
49.
50. Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
51.
52. 'Dim cryRpt As New ReportDocument
53. 'cryRpt.Load(Application.StartupPath &
"\CrystalReport1.rpt")
54. 'CrystalReportViewer1.ReportSource = cryRpt
55. 'CrystalReportViewer1.Refresh()
56.
57. Dim cryRpt As New ReportDocument
58. cryRpt.Load(Application.StartupPath &
"\CrystalReport5.rpt")
59.
60. Dim crParameterFieldDefinitions As
ParameterFieldDefinitions
61. Dim crParameterFieldDefinition As ParameterFieldDefinition
62. Dim crParameterValues As New ParameterValues
63. Dim crParameterDiscreteValue As New ParameterDiscreteValue
64.
65. crParameterDiscreteValue.Value = TextBox1.Text
66. crParameterFieldDefinitions =
cryRpt.DataDefinition.ParameterFields
67. crParameterFieldDefinition =
crParameterFieldDefinitions.Item("id")
68. crParameterValues =
crParameterFieldDefinition.CurrentValues
69.
70. crParameterValues.Clear()
71. crParameterValues.Add(crParameterDiscreteValue)
72. crParameterFieldDefinition.ApplyCurrentValues(crParameterVa
lues)
73.
74. CrystalReportViewer1.ReportSource = cryRpt
75. CrystalReportViewer1.Refresh()
76. cryRpt.RecordSelectionFormula = "{Button1}= " &
TextBox1.Text & ""
77. End Sub
but it doesnt work. Because it works for one parameter. Now would you please tell me
what should I change or add there in my button event code to do what I am trying to do?
Is it clear? For example user will input 1-1-2010 there in first text box & 30-1-2010 there
in last text box when he will click on show button it will show record between 1-1-2010 &
30-1-2010 including 1-1-2010 & 30-1-2010. I hope you can understand it now. Please
help me to solve this problem. I hope you will explain it to me properly because I am just
a beginner.
Screen.MousePointer = vbDefault
==========================================
I am new to crystal report. please guide me how to use parameter in crystal report.
==============================================
CRYSTAL REPORT 11 Report Designer part
==============================================
I have designed my report in Crystal Report 11 product using the Report Designer. And i
have NOT used the standard wizard that pops up for designing the reports.
STEP 1:
I have opened a blank report and used the Database Expert tool for connecting my MS
ACCESS (.MDB) database file and also selected the tables that would be used in report
generation.
STEP 2:
Dragged & dropped the fields from the Feild Explorer's database tables and placed it on
the Report Designer window. Like this i have designed my reports.
==============================================
Visual Basic 6 Code View part
==============================================
STEP 1:
In VB6 code, i have used the ".SQLQueryString" property
STEP 3:
setting .MDB database location:
SYNTAX: ".Database.SetDataSource (App.Path & "\XYZ.mdb")"
STEP 4: There is some other code also. Main thing is that now my reports are being
generated perfectly using the user selected item from a combo box's dropdownlist on a
vb form window.
QUESTIONS:
========
1. I will be adding the CR11 Merge Modules to my setup builder, as given on the
Business Objects site.
Now, if i do the things as stated above. Then will i be able to deploy & view my reports at
the client's end/end-user's computer without
installing the Crystal Report 11 product there ??
intellogo
Newbie Poster
Offline
21 posts
since Mar 2007
Permalink
0
Re: Issue about passing parameter to Crystal Report
11..
Hi..and thanks for ur reply
I have a new situation here...with CR 11 and VB6
==============================================
CRYSTAL REPORT 11 Report Designer part
==============================================
I have designed my report in Crystal Report 11 product using the Report Designer. And i
have NOT used the standard wizard that pops up for designing the reports.
STEP 1:
I have opened a blank report and used the Database Expert tool for connecting my MS
ACCESS (.MDB) database file and also selected the tables that would be used in report
generation.
STEP 2:
Dragged & dropped the fields from the Feild Explorer's database tables and placed it on
the Report Designer window. Like this i have designed my reports.
==============================================
Visual Basic 6 Code View part
==============================================
STEP 1:
In VB6 code, i have used the ".SQLQueryString" property
STEP 2:
setting report location:
SYNTAX: ".OpenReport(App.Path & "\ABC.rpt")"
STEP 3:
setting .MDB database location:
SYNTAX: ".Database.SetDataSource (App.Path & "\XYZ.mdb")"
STEP 4: There is some other code also. Main thing is that now my reports are being
generated perfectly using the user selected item from a combo box's dropdownlist on a
vb form window.