Access violations for sub-reports after loading end-user report
Hi, I've just upgraded to RB Pro 12 and I'm am trying to implement the
end-user reporting module.
I have loaded the report at runtime ok, but there seems to be a problem with
the sub-reports.
My existing code has these objects:
rptGlassOrder: TppReport;
srGlassOrderPanelDetails: TppSubReport;
rptGlassOrderPanelDetails: TppChildReport;
srGlassOrderPanelSummary: TppSubReport;
rptGlassOrderPanelSummary: TppChildReport;
srGlassOrderCutouts: TppSubReport;
rptGlassOrderCutouts: TppChildReport;
Then I load from file:
rptGlassOrder.Template.LoadFromStream(LFileStream); <- OK
However after loading from file, I get an access an access violation when I
try to access any of the sub reports or child report objects.
eg:
rptGlassOrder.PrinterSetup.PaperName := lsPaperName; <- OK
rptGlassOrderPanelDetails.PrinterSetup.PaperName := lsPaperName; <- AV
rptGlassOrderPanelSummary.PrinterSetup.PaperName := lsPaperName; <- AV
rptGlassOrderCutouts.PrinterSetup.PaperName := lsPaperName; <- AV
What am I dong wrong?
Thanks.
Rick.
end-user reporting module.
I have loaded the report at runtime ok, but there seems to be a problem with
the sub-reports.
My existing code has these objects:
rptGlassOrder: TppReport;
srGlassOrderPanelDetails: TppSubReport;
rptGlassOrderPanelDetails: TppChildReport;
srGlassOrderPanelSummary: TppSubReport;
rptGlassOrderPanelSummary: TppChildReport;
srGlassOrderCutouts: TppSubReport;
rptGlassOrderCutouts: TppChildReport;
Then I load from file:
rptGlassOrder.Template.LoadFromStream(LFileStream); <- OK
However after loading from file, I get an access an access violation when I
try to access any of the sub reports or child report objects.
eg:
rptGlassOrder.PrinterSetup.PaperName := lsPaperName; <- OK
rptGlassOrderPanelDetails.PrinterSetup.PaperName := lsPaperName; <- AV
rptGlassOrderPanelSummary.PrinterSetup.PaperName := lsPaperName; <- AV
rptGlassOrderCutouts.PrinterSetup.PaperName := lsPaperName; <- AV
What am I dong wrong?
Thanks.
Rick.
This discussion has been closed.
Comments
Are these newly created templates or older ones? Where (which event)
are you trying to access the subreport's properties? If you trace into
your source where the AV occurs, is the subreport a valid object? If
possible, try tracing into the RB source to see exactly where the AV is
occuring.
Regards,
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
I see that you posted here and also sent the same question to support@.
Please post questions to a single destination.
The example code you show produces the result I would expect.
The report rptGlassOrder is comprised of elements - labels, subreports, etc.
When you load a template, the elements are destroyed and the elements
defined in the report template file/stream are instantiated.
The simplest solution is to use RAP code embedded in the report. Then the
code is saved with the report definition and can access the elements by
name. For this you need RB Enterprise.
The other solution is to call the
Report.Owner.FindComponents(aComponentName) to get access to the instance
and then typecast it to the appropriate type and set the properties. The
Report.Owner is the Form/DataModule upon which the component resides.
In terms of what your code is trying to accomplish, when
subreport.ParentPrintSetup is true (the default), then setting the main
report's printersetup properties is all that is needed. If you set the main
report's printersetup properties, then the subreport's will use those values
as well. Only section subreports can have a different printersetup from the
parent.
-
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Thanks for getting back to me. Sorry for the double post - I wasn't sure how
"active" these news groups are, but obviously *very* ;-)
The problem was all the event code directly access members which were freed
by the Template.LoadFromFile.
I could figure out the FindComponents method you suggested, but I managed to
get it working with another workaround.
I changed all the event code to use the "Sender: TObject" parameter and cast
it to the type needed.
It is not ideal since obviously old RTM files will not work with new events
etc.
But will have to suffice for now, since I cannot afford to upgrade to
enterprise, nor have the time to invest in re-jigging the reports.
Thanks again for your help.
Rick.