InheritFromTemplate, Datasets
Hello
I have a question. I'm not sure what is the problem. I'm using Delphi 5 and FastReport 4.7.5 Professional. I've created a simple example of my problem:
On a form I have two frxReport components frxReport1 and frxReport2 all properties with defaults. frxReport1 contain only PageHeader with one Memo. frxReport2 contain MasterData linked to IBQuery1:TfrxIBQuery, and IBDatabase: TfrxIBDatabase. Query contain simple select statement, and on MasterData I drop one field.
I'd like to use inheritance (target report is Report2, Report1 is a parent report), but both Reports have StoreInDFM set to True. So i write the folowing code to achive this:
procedure TForm1.frxReport2LoadTemplate(Report: TfrxReport;
const TemplateName: String);
var theMS : TMemoryStream;
begin
If TemplateName = 'templ' then
Begin
theMS := TMemoryStream.Create;
try
frxReport1.SaveToStream(theMS);
theMS.Position := 0;
Report.LoadFromStream(theMS);
finally
theMS.Free;
end;
End;
end;
(It works fine without dataset in report2). But when I put frxIBQuery in report2 and do the folowing:
frxReport2.InheritFromTemplate('templ'); // when I comment this line it works fine
frxReport2.ShowReport;
i get exception:
Dataset "IBQuery1" not exists
What is going on ?
I've observed one interesting thing, before I call InheritFromTemplate in debuger:
frxReport2.datasets[0] : ($DE5680, 0, $F1512C, 'IBXQuery1')
and after call InheritFromTemplate:
frxReport2.datasets[0] : ($DE5680, 2, nil, 'IBXQuery1')
Best regards
b
I have a question. I'm not sure what is the problem. I'm using Delphi 5 and FastReport 4.7.5 Professional. I've created a simple example of my problem:
On a form I have two frxReport components frxReport1 and frxReport2 all properties with defaults. frxReport1 contain only PageHeader with one Memo. frxReport2 contain MasterData linked to IBQuery1:TfrxIBQuery, and IBDatabase: TfrxIBDatabase. Query contain simple select statement, and on MasterData I drop one field.
I'd like to use inheritance (target report is Report2, Report1 is a parent report), but both Reports have StoreInDFM set to True. So i write the folowing code to achive this:
procedure TForm1.frxReport2LoadTemplate(Report: TfrxReport;
const TemplateName: String);
var theMS : TMemoryStream;
begin
If TemplateName = 'templ' then
Begin
theMS := TMemoryStream.Create;
try
frxReport1.SaveToStream(theMS);
theMS.Position := 0;
Report.LoadFromStream(theMS);
finally
theMS.Free;
end;
End;
end;
(It works fine without dataset in report2). But when I put frxIBQuery in report2 and do the folowing:
frxReport2.InheritFromTemplate('templ'); // when I comment this line it works fine
frxReport2.ShowReport;
i get exception:
Dataset "IBQuery1" not exists
What is going on ?
I've observed one interesting thing, before I call InheritFromTemplate in debuger:
frxReport2.datasets[0] : ($DE5680, 0, $F1512C, 'IBXQuery1')
and after call InheritFromTemplate:
frxReport2.datasets[0] : ($DE5680, 2, nil, 'IBXQuery1')
Best regards
b
Comments
? Hmmm ?
I stored the parent report in fr3 file (I've removed OnLoadTemplate event handler from my source) and there is the same effect.
I thougt (I've read that in Yours docs) that event OnLoadTemplate is designed to load template from any source (for example templates sotred in DB).
By the way, the method I've presented works fine if there is no frIBQuery component in frxReport1.
// Edit
Of course I set StoreInDFM to False in parent report.
is this a typo
frIBQuery component
and you meant
frxIBQuery component