哪位大虾有用ReportBuilder做过多多报表的实际案例?(50分)

  • 主题发起人 主题发起人 softdog
  • 开始时间 开始时间
S

softdog

Unregistered / Unconfirmed
GUEST, unregistred user!
将报表的主体部分写成动态链接库,然后不同的报表调用不同的模板。在应用程序中只要调用
Dll中的函数,并传递必要的参数就可以打印不同的报表。
哪位大虾有实际的制作案例吗?
 
曾经用过,但不是写在DLL中!
比如:
procedure TMainForm.PrintRep(RepFile:String;
DataSrcs:array of TDataSource;
SetMaster:Boolean);
//报表文件名,所用的数据源,是否为主从关系。
另可在设定数据源的过程中,取舍字段及控制字段的显示与否。
procedure TRbReportsForm.SetPipelines(SetMaster:Boolean);
var n:integer;
begin
PipelineCnt := Length(FDataSources);
if PipelineCnt=0 then
Exit;
FreeAllPipelines;
SetLength(RepPipelines, PipelineCnt);
for n:=0 to PipelineCnt-1do
begin
RepPipelines[n]:=TppBDEPipeline.Create(Self);
RepPipelines[n].AutoCreateFields:=false;
RepPipelines[n].UserName:='数据表'+IntToStr(n+1);
RepPipelines[n].Name:='BDEPipeline'+IntToStr(n+1);
RepPipelines[n].DataSource:=FDataSources[n];
if (n>0) and SetMaster then
begin
RepPipelines[n].MasterDataPipeline:=RepPipelines[0];
RepPipelines[n].MasterFieldLinks:='ID';
end;
SetPipelineFlds(RepPipelines[n]);
RepPipelines[n].Open;
end;
end;

procedure TRbReportsForm.SetPipelineFlds(Pipeline : TppBDEPipeline);
var
str : string;
vFld : TField;
pFld : TppField;
n, k : integer;
begin
if Pipeline=nil then
Exit;
with Pipeline.DataSource.DataSetdo
begin
k := FieldCount;
for n:=0 to k-1do
begin
vFld := Fields.Fields[n];
if vFld.Tag<0 then
Continue;
str := vFld.FieldName;
pFld := TppField.Create(nil);
pFld.FieldName := str;
pFld.DataType := ppConvertFieldType(vFld.DataType);//RB自带函数ppDBPipe.pas
pFld.FieldAlias:= vFld.DisplayLabel;
pFld.Sort := false;
pFld.Sortable := false;
Pipeline.AddField(pFld);
end;
end;
end;
 
只用一个DataPipeLine也可以实现Master-Detail报表吧?
 
你有没有看上面的代码,
PipelineCnt := Length(FDataSources);//取表总数
FreeAllPipelines;//Free所有的Pipeline,(自己写)
SetLength(RepPipelines, PipelineCnt);//设定Pipeline数组长度
for n:=0 to PipelineCnt-1do
begin
//创建每个Pipeline
RepPipelines[n]:=TppBDEPipeline.Create(Self);
...
...
if (n>0) and SetMaster then
begin
//如果需设置主从关系
RepPipelines[n].MasterDataPipeline:=RepPipelines[0];
RepPipelines[n].MasterFieldLinks:='ID';
end;
另在此没有考虑多层次的主从关系,你可自行实现!
 
Thank you!
加分了
 
接受答案了.
 
后退
顶部