본문 바로가기

work/delphi

Using Automation with Crystal Reports and Delphi

원문 : http://www.delphi3000.com/articles/article_2159.asp?SK=

In order to use the automation features in Crystal Reports 8.0 and higher, you must first import the type libraries into Delphi.

1. From the Delphi IDE main menu, go to Project | Import Type Libary.
2. Highlight 'Crystal Report 8 Active X Designer Run Time Libary'.
3. In the Class Names box, change the following items (TReport and TDatabase
   conflict with standard Delphi components):
      TReport   >>> change to >>> TCrReport
      TDatabase >>> change to >>> TCrDatabase
4. Change the Palette page to Crystal Reports
5. Click 'Generate Component Wrapper'
6. Click 'Install...'
7. Click the Into New Package tab.
8. Click 'Browse', select a destination directory for the new package, enter.
   the filename 'CR_AUTO.DPK', then click the 'Open' button.
9. Enter the description 'Crystal Reports Automation Server' (or another one
   if you like), and click the 'OK' button.
10. At the confirmation box 'Package CR_AUTO.bpl will be built then installed.
   Continue?' choose 'No'.
11. Go back to the main menu and choose Project | Import Type Library.
12. This time choose the 'Crystal Report Viewer Control'.
13. Change the Palette page to Crystal Reports
14. Click 'Generate Component Wrapper'
15. Click 'Install...'
16. Click the Into Existing Package tab.
17. Browse or Select the 'CR_AUTO.DPK' package we created earlier.
18. Click 'OK'
19. This time the install confirmation box, click 'Yes'.
20. A message will appear notifying you that the following components have
    been registered: TApplication, TCRField, TCRFields, TCrReport,
    CRVEventInfo, TCRViewer, TCRVTrackCursorInfo, TReportSourceRouter.
    Click 'OK'
21. Save and Close the package.
22. We have now imported the appropriate type libraries and are ready to
    build a test application.

NOTE: Importing the Crystal Report Run Time Library registers a component TApplication.  This will conflict with TApplication - the Delphi standard component.  If you need to access the original TApplication in a form where you are using the Crystal Reports Server components or Crystal Reports viewer, you can access it as: Forms.Application.

-------------------------------------------------------------------------------

Next you must create a sample report in Crystal Reports to work with.  For purposes of this example, make a very simple report just until you are comfortable with the process, then expand on it from there.

Save this report to 'C:\MyReport.rpt'.

-------------------------------------------------------------------------------

Next let's setup the sample application:

1. In Delphi, create a New Application.
2. From the Crystal Reports tab drop an Application component onto the form
   and rename it 'CrystalApp'.
3. Next drop a CrReport component onto the form and rename it 'CrystalRpt'.
4. Finally drop a CRViewer component onto the form, rename it 'CrystalView',
   and change the align probably to alClient.
5. In the FormCreate procedure for the form, enter the following:

      CrystalApp.LogOnServer();   { <<<<<<<<<<<  SEE NOTES BELOW }
      CrystalRpt.ConnectTo(CrystalApp.OpenReport('C:\MyReport.rpt'));
      CrystalView.ReportSource := CrystalReport.DefaultInterface;
      CrystalView.ViewReport;


   The CrystalApp.LogOnServer call can take a wide variety of input depending
   on how you are connecting to the database used in your report.  The
   following is an excerpt from Crystal Reports Developer Help File:

   Syntax
   ------
   LogOnServer ( pDllName As String, pServerName As String, [pDatabaseName],
                 [pUserID], [pPassword] )


   Parameters      Description
   ----------      ------------------------------------------------------------
   pDllName        Specifies the name of the DLL for the server or password
                   protected non-SQL table you want to log on to, for
                   example "PDSODBC.DLL". Note that the dllName must be
                   enclosed in quotes. DLL names have the following naming
                   convention: PDB*.DLL for standard (non-SQL) databases,
                   PDS*.DLL for SQL/ODBC databases.  Specifies the name of
                   the DLL for the server or password protected non-SQL table
                   you want to log on to, for example "PDSODBC.DLL". Note that
                   the dllName must be enclosed in quotes. DLL names have the
                   following naming convention: PDB*.DLL for standard
                   (non-SQL)databases, PDS*.DLL for SQL/ODBC databases.

  pServerName      Specifies the log on name for the server used to create the
                   report. For ODBC, use the data source name. This value is
                   case-sensitive. See Remarks below.

  [pDatabaseName]  Specifies the name for the database used to create the
                   report. See Remarks below.

  [pUserID]        Specifies the User ID number necessary to log on to the
                   server. See Remarks below.

  [pPassword]      Specifies the password necessary to log on to the server.
 

  Remarks
  -------
  When you pass an empty string ("") for this parameter, the program uses the
  value that's already set in the report. If you want to override a value
  that's already set in the report, use a non-empty string (for
  example, "Server A").


NOTE: For an easy way to determine what your correct LogOnServer server is, open the report in Crystal Reports, and from the main menu go to Database | Set
Location.  The location screen will show you the settings for Server Type, Server Name, Database, and User ID.

NOTE: For an easy way to determine the correct dllName to use, open the report in Crystal Reports, and from the main menu go to Database | Convert Database Driver.  From the Convert Database Driver window, place a checkmark in the box 'Convert Database Driver on next Refresh'.  Your dllName is listed next to From.  CLICK CANCEL WHEN CLOSING THIS WINDOW SO YOU DO NOT ACTUALLY CHANGE THE DATABASE DRIVER!

I connect to a password protected Microsoft Access 97 database and use the
following format.

     LogOnServer('pdsodbc.dll','MyDSN.dsn','','DB_Username','DB_Password');

NOTE: For those unfamiliar with ODBC, the DSN is setup through ODBC Data Sources in Windows Control Panel, and contains the database type, location, system database, and additional logon info.

You may have to experiment around a bit to get the LogOnServer funciton working for your connectivity needs.  Reference the help file Developr.hlp in the Seagate Software directory for assistance.

That's ALL there is to it!