procedure TForm3.frxReport1BeforePrint(Sender: TfrxReportComponent);
begin
DataModule1.ADOQueryDd.close;
DataModule1.ADOQueryDd.sql.clear;
DataModule1.ADOQueryDd.sql.add('Select * from test ');
end;procedure TForm3.Button9Click(Sender: TObject);
begin
frxReport1.LoadFromFile('dd.fr3');
frxReport1.ShowReport;
end;如果直接在ADOQuery的SQL属性里面写语句 就正常,为什么?
begin
DataModule1.ADOQueryDd.close;
DataModule1.ADOQueryDd.sql.clear;
DataModule1.ADOQueryDd.sql.add('Select * from test ');
end;procedure TForm3.Button9Click(Sender: TObject);
begin
frxReport1.LoadFromFile('dd.fr3');
frxReport1.ShowReport;
end;如果直接在ADOQuery的SQL属性里面写语句 就正常,为什么?
procedure TForm3.frxReport1BeforePrint(Sender: TfrxReportComponent);
begin
DataModule1.ADOQueryDd.close;
DataModule1.ADOQueryDd.sql.clear;
DataModule1.ADOQueryDd.sql.add('Select * from test ');
DataModule1.ADOQueryDd.sql.open; //加入这句试试。
end; procedure TForm3.Button9Click(Sender: TObject);
begin
frxReport1.LoadFromFile('dd.fr3');
frxReport1.ShowReport;
end;
begin
DataModule1.ADOQueryDd.close;
DataModule1.ADOQueryDd.sql.clear;
DataModule1.ADOQueryDd.sql.add('Select * from test ');
end; 似乎每个报表上的控件遍历到的时候,都会触发这个事件也就是报表上有多少个控件,就可能触发多少次beforeprint建议写个全局变量,判断是否有add成功过,有就不add第二次procedure TForm3.frxReport1BeforePrint(Sender: TfrxReportComponent);
begin
if SQLAdded then exit;
DataModule1.ADOQueryDd.close;
DataModule1.ADOQueryDd.sql.clear;
DataModule1.ADOQueryDd.sql.add('Select * from test ');
SQLAdded := true;
end;