创建一个过滤器以显示dbgrid的报告

时间:2015-05-03 14:46:14

标签: delphi

我使用FastReport进行了报告,并且还在DBGrid中提供了数据。我想通过DBGrid报告基于我单击的数据的双击事件。例如,我点击ID为007的数据,它会显示数据ID为007的报告,如何制作过滤器?

2 个答案:

答案 0 :(得分:3)

为了解释的目的,我们来看看下面的例子:

DbGrid通过DataSource1连接到数据库 - > MainQuery:TQuery其中MainQuery.SQL = 'SELECT * FROM TABLE1';

要显示在DbGrid中选择的仅一条记录的数据,您可以执行以下操作:

在表单中放置另一个DataSet,例如名为“FilterQuery”的TQuery组件 将FilterQuery连接到与MainQuery相同的数据源,并将FilterQuery.SQL属性指定为:

变体1:准备按SQL文本过滤

'SELECT * FROM TABLE1 WHERE ID = 0'

或变体2:准备按参数

过滤
'SELECT * FROM TABLE1 WHERE ID = :P'

或变体3:准备通过“过滤”属性进行过滤

'SELECT * FROM TABLE1 WHERE ID'

将FastReport组件frxDBDataset1:TfrxDBDataset连接到FilterQuery。 根据需要准备FastReport模板。

现在我们准备好显示记录了。

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  //prepare the filter according to the selected record
  try
  //Variant 1:
  FilterQuery.SQL :=  Format('SELECT * FROM TABLE1 WHERE ID = %s',[MainQuery.FieldByName('ID').asString]);

  //Variant 2:
  FilterQuery.ParamByName('P').Value :=  MainQuery.FieldByName('ID').Value;

  //Variant 3 ( not recomended because here all data will be loaded from database):
  FilterQuery.Filter := Format('ID = %s', [MainQuery.FieldByName('ID').asString]);
  FilterQuery.Filtered := true;

  //open query
  FilterQuery.Refresh;
  //prepare report
  frxReport1.LoadFromFile('MyReportTemplateFile.fr3');
  frxReport1.PrepareReport;

  //show report
  frxReport1.ShowPreparedReport;
  finally
    FilterQuery.Close;
  end;
end; 

答案 1 :(得分:0)

感谢 但我改变了一点,它的工作原理

试 ADOQuery1.SQL.Text:='SELECT * from TABLE1 WHERE ID ='+
。ADOQuery2.FieldByName( 'ID')asString;

ADOQuery1.open; frxReport1.LoadFromFile( 'REPORT.fr3');

frxReport1.PrepareReport; frxReport1.ShowPreparedReport; 最后     ADOQuery1.Close; 端;