Delphi 如何在FastReport中动态分配数据集?

Delphi 如何在FastReport中动态分配数据集?,delphi,dataset,fastreport,Delphi,Dataset,Fastreport,我使用FastReport Designer创建了一个报告,并使用Delphi 6调用它。但是DataSet用于MasterData,并且在设计时不分配字段。我想在运行时基于所选的数据集设置这些属性。我该怎么做?在调用预览/打印/设计之前,如何在Delphi中访问主数据的数据集?在重新打印前在FRXReport1中添加了以下代码 t := frxReport1.FindObject('MasterData1') as TfrxMasterData; //if Assigned(t) th

我使用FastReport Designer创建了一个报告,并使用Delphi 6调用它。但是
DataSet
用于
MasterData
,并且在设计时不分配字段。我想在运行时基于所选的
数据集设置这些属性。我该怎么做?在调用预览/打印/设计之前,如何在Delphi中访问
主数据
数据集
?在重新打印前在FRXReport1中添加了以下代码

  t := frxReport1.FindObject('MasterData1') as TfrxMasterData;
  //if Assigned(t) then
    //t.DataSet := frxIBODataset1;

  m := frxReport1.FindObject('mTenderType') as TfrxMemoView;
  if Assigned(m) then
  begin
    m.DataSet := frxIBODataset1;
    m.DataField := 'ACCOUNTNAME';
    m.Text := '[frxIBODataset1."ACCOUNTNAME"]';
  end;

但是我需要在调用打印/设计/预览之前设置这些属性。非常感谢您的帮助。

您应该首先指定是尝试使用应用程序中定义的数据集,还是直接在报表中定义的数据集(FastReport designer中的“数据”选项卡)

如果您试图使用在应用程序中定义的数据集(例如,在数据模块中定义的AdoDataset实例),则不必将MasterBand绑定到数据集。动态地。在报告中,MasterBand在设计时绑定到TfrxDbDataset实例。在运行时,frxDbDataset实例可以连接到项目中的任何数据集

下面是它的方式:

1-将frxReport组件和frxDbDataset组件拖放到表单或数据模块上。 2-在报表设计器中,转到“数据集”部分,并将可用的frxDbDataset添加到报表的数据集列表中。 3-添加主数据标注栏,并将frxDbDataset分配给其Dataset属性。 4-现在在代码中,在显示或准备报告之前,您可以编写如下内容:

  if MyOption = 1 then
    frxDbDataset1.Dataset := AdoDataset1
  else
    frxDbDataset1.Dataset := AdoDataset2;
procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
  MasterData1.Dataset := <ADOQuery1."ADOQuery1">;      
end;
您分配给frxDbDataset的任何内容都将由主波段在报告中打印

如果使用FastReport designer直接在报表中定义数据集;那么一切都在你的报告里了。只需打开fastreport designer并执行以下操作:

1-转到“数据”选项卡并定义数据集(例如AdoQuery1)。 2-从报告树窗格中选择报告对象。 3-在对象检查器中,转到“事件”选项卡。 4-选择合适的活动;OnStartReport对您的工作来说是一件好事。双击它打开代码编辑器。 5-现在,您可以使用PascalScript代码将“数据”选项卡中定义的数据集分配给主数据区。大概是这样的:

  if MyOption = 1 then
    frxDbDataset1.Dataset := AdoDataset1
  else
    frxDbDataset1.Dataset := AdoDataset2;
procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
  MasterData1.Dataset := <ADOQuery1."ADOQuery1">;      
end;
程序FRXReport1启动报告(发送方:TFRX组件);
开始
MasterData1.数据集:=;
结束;

如果您使用的是FastReport 3+,则可以将数据库组件放置在报告中。您只需要提供数据库连接并从应用程序运行designer


您可以定义变量,从应用程序传递变量,然后运行.fr3报告文件。

您的解决方案在使用FastReports4/delphi XE2时不起作用。如果设置StartNewPage,我可以多次看到打印的标注栏,但是我看不到其中的任何数据。是否有其他步骤来定义它的字段(动态,忽略数据类型)?