Environment: VB6 SP5, CR 8.5, Using CRWRAP.BAS and GLOBAL32.BAS
Procedure Objective:
To export a Crystal Report Report Definition to a TXT file for further processing (parsing, extraction of table/field names).
There are over 600 reports to be examined. The program opens the appropriate folder, collects the names of all RPTs, exports each to a TXT file in the same (or different) directory.
Code Snippet (EXPORT):
Handle = PEOpenEngine
If Handle = 0 Then
lbl = "Error opening RPT file"
Else
lbl = "Crystal Print Engine Successfully Open"
End If
job = PEOpenPrintJob(FullName)
exportdll = "u2frdef.dll"
exportformat = 0 'crUXFReportDefinitionType
result = crPEExportToDisk(job, inpDest & FName & ".txt" + Chr(0), "u2frdef.dll" + Chr(0), exportformat, 0, 0, "", ""
If PEStartPrintJob(job, True) = 0 Then
lbl = "Error starting print job"
MsgBox "crPEExportToDisk Failed: " & Str$(PEGetErrorCode(job))
Else
lbl = FullName & " exported"
End If
PEClosePrintJob (job)
PECloseEngine
Behaviour:
The proc runs fine returning no errors until PEStartPrintJob(job, True). A Parameter Input window is displayed and, on clearing the window, the proc terminates in an errotr 500. Since the export is of a Report efinition, I cannot understand WHY the DLL requires an ODBC call to the database (no data is being exported) or, if it is imperative an ODBC call be made, how to make it. There is NO example in rystal or on the Web which shows how to handle the crPEExportToDisk function when the type of export is Report Definition.
In order for this program to function correctly, it must access, open, export the Report Definition, closwe, then retrieve another RPT until the file list for the folder is exhausted.
There is an ODBC connector on the machine - and I can view the report through CReports. I've not written any code (in this program) to view a report since there's no necessity to do so. My only intention is to export the Report Definition...
When I open Crystal Reports itself, I can FILE | OPEN the reprt, click on the Export Icon (in the icon toolbar) and immediately receive the Export Options window. If I select REPORT DEFINITION from the first dropdown, and SISK FILE from the second, the export takes place in a blink of an eye - the Crystal report is still in design mode (on the screen) and no logon dialogue window opens requiring me to 'connect' prior to the export. All of this makes sense to me, since I'm not asking Crystal to 'preview' the report - which would require a hit on the DB - I'm simply asking it to extract its own report definition and send it out to a text file. That's why this confuses me
Given that the PE call crPEExportToDisk includes the exportdll "u2frdef.dll", I imagine the engine assumes the report -won't- be opened and populated by the database - but will result in a .TXT file being produced.
All the reports I'm interested uin working with are located on the Seafate InfoServer and are already designed and used in current production. If the crPEExportToDisk doesn't 'care' about the particular export dll being used, then I'm stuck - any given report may have a UID and PWD different from another - which would make it impossible to export programmatically unless I knew every UID/PWD for every one of these reports.
After three days of head-banging, I've come to the conclusion that I cannot export a Report Def without an ODBC call being made, but I have zero idea as to how to make it within this code structure.
Crystal Reports Design/training/Consultation
ecsdata@ecsdata.com
Procedure Objective:
To export a Crystal Report Report Definition to a TXT file for further processing (parsing, extraction of table/field names).
There are over 600 reports to be examined. The program opens the appropriate folder, collects the names of all RPTs, exports each to a TXT file in the same (or different) directory.
Code Snippet (EXPORT):
Handle = PEOpenEngine
If Handle = 0 Then
lbl = "Error opening RPT file"
Else
lbl = "Crystal Print Engine Successfully Open"
End If
job = PEOpenPrintJob(FullName)
exportdll = "u2frdef.dll"
exportformat = 0 'crUXFReportDefinitionType
result = crPEExportToDisk(job, inpDest & FName & ".txt" + Chr(0), "u2frdef.dll" + Chr(0), exportformat, 0, 0, "", ""
If PEStartPrintJob(job, True) = 0 Then
lbl = "Error starting print job"
MsgBox "crPEExportToDisk Failed: " & Str$(PEGetErrorCode(job))
Else
lbl = FullName & " exported"
End If
PEClosePrintJob (job)
PECloseEngine
Behaviour:
The proc runs fine returning no errors until PEStartPrintJob(job, True). A Parameter Input window is displayed and, on clearing the window, the proc terminates in an errotr 500. Since the export is of a Report efinition, I cannot understand WHY the DLL requires an ODBC call to the database (no data is being exported) or, if it is imperative an ODBC call be made, how to make it. There is NO example in rystal or on the Web which shows how to handle the crPEExportToDisk function when the type of export is Report Definition.
In order for this program to function correctly, it must access, open, export the Report Definition, closwe, then retrieve another RPT until the file list for the folder is exhausted.
There is an ODBC connector on the machine - and I can view the report through CReports. I've not written any code (in this program) to view a report since there's no necessity to do so. My only intention is to export the Report Definition...
When I open Crystal Reports itself, I can FILE | OPEN the reprt, click on the Export Icon (in the icon toolbar) and immediately receive the Export Options window. If I select REPORT DEFINITION from the first dropdown, and SISK FILE from the second, the export takes place in a blink of an eye - the Crystal report is still in design mode (on the screen) and no logon dialogue window opens requiring me to 'connect' prior to the export. All of this makes sense to me, since I'm not asking Crystal to 'preview' the report - which would require a hit on the DB - I'm simply asking it to extract its own report definition and send it out to a text file. That's why this confuses me
Given that the PE call crPEExportToDisk includes the exportdll "u2frdef.dll", I imagine the engine assumes the report -won't- be opened and populated by the database - but will result in a .TXT file being produced.
All the reports I'm interested uin working with are located on the Seafate InfoServer and are already designed and used in current production. If the crPEExportToDisk doesn't 'care' about the particular export dll being used, then I'm stuck - any given report may have a UID and PWD different from another - which would make it impossible to export programmatically unless I knew every UID/PWD for every one of these reports.
After three days of head-banging, I've come to the conclusion that I cannot export a Report Def without an ODBC call being made, but I have zero idea as to how to make it within this code structure.
Crystal Reports Design/training/Consultation
ecsdata@ecsdata.com