好的我是狂热报道的新手。我已经通过使用乐队获得了我的数据感知好的报告,但现在我需要通过manauly将代码中的参数发送到报告来制作客户报告。
我的教科书示例说我应该为报告制作参数,并将它们放在页面设计器的一列中。所以对于测试我只想填写第一列值Param.Group1,如我的教科书中所述,我使用了以下代码
// Loop at groups;
rvpgrouprep.SelectReport('grouprep',False);
rvpgrouprep.open;
while cdsgrouprep.eof = False do
begin
group := cdsgrouprep.FindField('GroupName').AsString;
rvpgrouprep.SetParam('Group1',group);
cdsgrouprep.MoveBy(1);
end;
rvpgrouprep.Execute;
rvpgrouprep.Close;
所以我的教科书示例显示,这应该提供param.group1在我的rert上的列的组列表,但是这段代码只在我的报告中提供了一行,这是最后一个条目。 while循环工作我已经对它进行了调整。我错过了什么吗?
任何帮助都是适当的。
答案 0 :(得分:2)
Rave正如此设计的那样工作。每次更改行时,参数不会生成行。
我们假设您没有告诉任何人他们的意思,变量cdsgrouprep是基于客户端数据集的组。当一个数据集有4行,并且你有一个乐队时,你自然希望rave中的带状报告生成代码能够在你的报告中生成该乐队的4个副本。但是,您可能正在寻找的东西不是依赖于它,而是从代码生成一堆行,并且根本不需要参数。对于很多事情,参数很有用,但不完全是你需要的。
纯粹基于代码的Rave报告在EDN文章中为shown here,如下所示:
procedure TFormMain.PrintTabularReport(Report: TBaseReport);
var
FolderList : TStringList;
i : Integer;
NumFiles : Cardinal;
NumFolders : Cardinal;
SizeFiles : Cardinal;
Root : string;
begin
with Report do
begin
SetFont('Arial', 15);
NewLine;
PrintCenter('List of Folders in the Drive Root', 4);
NewLine;
NewLine;
ClearTabs;
SetTab(0.2, pjLeft, 1.7, 0, 0, 0);
SetTab(1.7, pjRight, 3.1, 0, 0, 0);
SetTab(3.1, pjRight, 3.5, 0, 0, 0);
SetTab(3.5, pjRight, 4.5, 0, 0, 0);
SetFont('Arial', 10);
Bold := True;
PrintTab('Folder Name');
PrintTab('Number of Files');
PrintTab('Number of Folders');
PrintTab('Size of Files');
Bold := False;
NewLine;
FolderList := TStringList.Create;
try
Root := IncludeTrailingPathDelimiter(ExtractFileDrive(ParamStr(0)));
EnumFolders(FolderList, Root);
for i := 0 to FolderList.Count - 1 do
begin
PrintTab(FolderList[i]);
GetFolderInfo(IncludeTrailingPathDelimiter(Root+FolderList[i]),
NumFiles, NumFolders, SizeFiles);
PrintTab(Format('%u',[NumFiles]));
PrintTab(Format('%u',[NumFolders]));
PrintTab(Format('%u bytes',[SizeFiles]));
NewLine;
end;
finally
FolderList.Free;
end;
end;