如何使用快速报告创建报告而不直接连接到数据库

时间:2012-12-17 04:12:51

标签: delphi fastreport quickreports

我的公司要求我更新用delphi编写的特定应用程序的报告功能,并使用快速报告代替使用FastReports。

当前实现将所有数据从数据库中提取出来,为组织和计算报告所需的数据做了大量工作,并将所有这些数据存储在几个不同的对象中。然后使用快速报告OnNeedData事件来填充波段,直到没有更多数据(通过设置MoreData = false表示)

我遇到的问题是Fast Reports似乎需要一个频段连接到一个我没有的实际数据源。此外,fastReports似乎没有类似于OnNeedData的事件。

无论如何要在代码中填写数据带的值并重新打印,直到打印完所有数据而不将带连接到数据集?

我为这个问题的模糊性道歉,我对报告软件非常陌生,任何建议去哪里以及看什么都会非常感激。

5 个答案:

答案 0 :(得分:7)

快速报告使用从_TFrxDataSet降序的中介对象连接报告引擎,该报告引擎将打印数据。

要将报表连接到由程序本身管理的数据源,可以使用TfrxUserDataSet组件,让您在报表中看到数据集,但是您可以手动指定列中的列名称。字段(TStrings)属性和管理和提供值以编程方式为以下事件编写事件处理程序:

  • OnCheckEOF 在功能上等同于OnNeedData,如果没有要打印的内容,则将EOF var参数设置为true
  • OnFirst 您可以做任何事情来开始行走数据。
  • OnGetValue OnNewGetValue 您为当前行
  • 的每个提供了值>
  • OnNext OnPrior 您将当前行移动到下一个或前一个位置。

如您所见,行/列概念(DataSet)用于向报表提供数据,但您可以从用于存储计算结果的任何结构中提取数据(列表,数组或任何其他对象/结构/文件等。)

在报告中,您将频段链接到此逻辑 DataSet ,并使用标准组件打印此 DataSet 的列

如果您已经在DataSet中拥有数据,例如计算后的内存中DataSet,那么最好使用TfrxDBDataset直接将报表绑定到该数据源。

答案 1 :(得分:2)

你可以使用TfrxUserDataSet。在'demos'文件夹下有一个名为'printstringlist'的演示。

答案 2 :(得分:2)

在我们的项目中,我们实现了自己继承自TfrxCustomQuery的类。这个新的查询类只是将其SQL语句重定向到我们的应用程序的内部查询引擎。我们在FastReport调色板中注册了这个新类(FR版本3和4使用了frxDsgnIntf​​.frxObjects.RegisterObject *),现在它在我们所有的报告模板中使用,而不是TfrxADOQuery或其他内置数据集类。

答案 3 :(得分:1)

这是另一种选择:

我多年来一直在使用FastReport。我有时遇到类似的情况。对于离线表格报告,我使用内存数据集。我很久以前就购买了DevExpress,所以我有TdxMemData。但即使没有它,您也应该对使用TClientDataset组件感到满意。

除此之外,TfrxUserDataset是我在显示对象列表时使用的替代方法。

答案 4 :(得分:0)

有可能这样做,但它很慢,

<强>代码: -

var
  FRX: TfrxReport;
procedure NewPage;
begin
  MyPage := TfrxReportPage.Create(FRX);
  MyPage.CreateUniqueName;
  MyPage.PaperSize := DMPAPER_A4;
end;
procedure ...(AText: string);
var
  frMemo : TfrxMemoView;
begin
  frMemo := TfrxMemoView.Create(MyPage);
  frMemo.CreateUniqueName;
  frMemo.Text := AText;
end;

问候
赫尔曼