CR 8 and VFP 6 have a look at the code :
Declare RegOpenKey in ADVAPI32.DLL INTEGER, STRING, INTEGER @ID_Cle &&verify if crystal is installed
=RegOpenKey(2147483650,"Software\Seagate",@ID_Cle)
if ID_Cle # 0
*! /N start c:\windows\desktop\crystal\requetes\nouveau_rapport_req.rpt
rapport = 'c:\windows\desktop\crystal\requetes\nouveau_rapport_req.rpt'
table_result = 'c:\windows\desktop\crystal\requetes\fin_de_mois.dbf'
IF FILE(rapport) AND FILE(table_result)
=CRYSTAL_REPORT("c:\windows\desktop\crystal\requetes\nouveau_rapport_req.rpt",;
"c:\windows\desktop\crystal\requetes\fin_de_mois.dbf","",0)
**********************************************
endif
else
messagebox("Crystal Report n'est pas installé!"

endif
close databases all
FUNCTION CRYSTAL_REPORT
PARAMETERS V_CRFILE,V_TABLE,V_OUTFILE,V_OUTTYPE
PRIVATE V_CRFILE,V_OUTFILE,V_OUTTYPE,V_RTN
V_CRFILE = 'c:\windows\desktop\crystal\requetes\nouveau_rapport_req.rpt'
V_TABLE = 'c:\windows\desktop\crystal\requetes\fin_de_mois.dbf'
V_OUTFILE = 'c:\windows\desktop\test'
V_OUTTYPE = 0
V_RTN=.T.
ON ERROR V_RTN=.F.
IF FILE(V_CRFILE) AND FILE(V_TABLE)
* Create and set up the Crystal OCX
V_CRYSTAL=CREATEOBJECT("Crystal.CrystalReport"

V_CRYSTAL.REPORTFILENAME=V_CRFILE
V_CRYSTAL.WINDOWTITLE="Report Preview"
V_CRYSTAL.DATAFILES(0)=V_TABLE
V_CRYSTAL.WINDOWSTATE=2
V_CRYSTAL.PRINTFILENAME=V_OUTFILE
V_CRYSTAL.PRINTFILETYPE=V_OUTTYPE
V_CRYSTAL.DESTINATION=0
V_CRYSTAL.WindowShowGroupTree=.T.
V_CRYSTAL.WindowShowSearchBtn=.T.
V_CRYSTAL.WindowShowCloseBtn=.T.
V_CRYSTAL.ACTION=1
* This isn't required, as we have V_CRYSTAL
* as PUBLIC ABOVE
IF V_OUTTYPE=0
*!* This is required to stop the procedure
*!* from dropping out during a preview.
=MESSAGEBOX("Holding report preview, press OK " + "to continue",64,"CrystFox"
ENDIF
ELSE
V_RTN=.F.
=MESSAGEBOX("Missing Crystal report or Fox2x table!",48,"CrystFox"
ENDIF
ON ERROR
RETURN V_RTN
****************************************