fastreport 一个怪问题,望高手指点迷津(100分)

  • 主题发起人 主题发起人 liuranball
  • 开始时间 开始时间
L

liuranball

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个Form中放入一个frReport,在frReport中设计好报表.再在同一个form中放入一个button按钮,单击button执行的代码是frReport1.ShowReport,
问题来了,当我运行程序,第一次点击button是,报表能正常显示.当我关闭报表预览,回到form第二次点击button是,报表就不能正常显示了,出现了一个异常"Invalid floating point operation".这到底是怎么一会是啊??????
 
frreport1.LoadFromFile('Untitled.frf');
frreport1.ShowReport;
 
将设计好的报表先保存,打印时调出如下。
procedure Tbxjffrm.printbtnClick(Sender: TObject);
begin
frReport1.LoadFromFile('bxjf.frf');
frReport1.ShowReport;
//frReport1.PrintPreparedReport('', 1, True, frAll);//直接打印报表
end;
 
生成后是否释放?
 
对不起,我忘了说,我得报表是动态生成的,不用loadfromfile
 

怎么释放?
 
1

在线等待?
 
frReport的窗口是不能这样调用的,它本身的Form其实就是一个打印的窗体了,你可以在另一个窗体中调用这个窗体,就可以了
 
我也试过,不行!
 
frreport1.Free or Destroy
 
我试了,不行也!
 
if frReport1.PrepareReport then
//打印准备
frReport1.ShowPreparedReport;
准保备好了再打印试试??
 
代码贴出来看看。
 
procedure TForm1.BntPreviewClick(Sender: TObject);
var
v: TfrView;
b: TfrBandView;
Page: TfrPage;
begin
try
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text :='select * from Data';
ADOQuery1.Active := True;
try
FN1 := ComboBox1.Text;
FN2 := ComboBox2.Text;
FN3 := ComboBox3.Text;
FN4 := ComboBox4.Text;
FN5 := ComboBox5.Text;
FN6 := ComboBox6.Text;
except
ShowMessage('字段名有错,请修改后再预览');
end;
try
FW1 := round(StrToInt(Edit1.Text) * 3.6);
FW2 := round(StrToInt(Edit1.Text) * 3.6);
FW3 := round(StrToInt(Edit1.Text) * 3.6);
FW4 := round(StrToInt(Edit1.Text) * 3.6);
FW5 := round(StrToInt(Edit1.Text) * 3.6);
FW6 := round(StrToInt(Edit1.Text) * 3.6);
if FW1+FW2+FW3+FW4+FW5+FW6 > 756 then
begin
ShowMessage('字段宽度值之和太大,请修改后再预览');
exit;
end;
except
ShowMessage('字段宽度输入数据有错,请修改后再预览');
end;
except
end;
frReport1.Pages.Clear;
frReport1.Pages.Add;
// create page
frReport1.Pages[0].pgSize := 9;
Page := frReport1.Pages[0];

b:= TfrBandView.Create;
// create Title band
b.SetBounds(0, 20, 0, 20);
// position and size in pixels
b.BandType := btReportTitle;
// (only Top and Height are significant
Page.Objects.Add(b);
v := TfrMemoView.Create;
// create memo
v.SetBounds(20, 20, 758, 40);
v.BandAlign := baWidth;
v.Prop['Alignment'] := frtaCenter;
v.Prop['Font.Style'] := 4;
v.Prop['Font.Size'] := 20;
v.Prop['Font.Color'] := clRed;
v.Memo.Add('车辆登记月汇总报表');
Page.Objects.Add(v);
b := TfrBandView.Create;
b.SetBounds(0,80,758,20);
b.BandType := btMasterHeader;
Page.Objects.Add(b);
b := TfrBandView.Create;
b.SetBounds(0,100,758,20);
b.BandType := btMasterHeader;
b.DataSet := 'frDBDataSet1';
Page.Objects.Add(b);

if FN1 <> '' then
begin
v := TfrMemoView.Create;
// create memo
v.SetBounds(20, 81, FW1, 19);
v.Prop['Alignment'] := frtaCenter;
v.Prop['Font.Style'] := 2;
//v.Prop['Font.Size'] := 10;
//v.Prop['Font.Color'] := clRed;
v.Memo.Add(FN1);
Page.Objects.Add(v);
v := TfrMemoView.Create;
// create memo
v.SetBounds(20, 101, FW1, 19);
v.Prop['Alignment'] := frtaCenter;
v.Prop['Font.Style'] := 2;
//v.Prop['Font.Size'] := 10;
//v.Prop['Font.Color'] := clRed;
v.Memo.Add('[ADOQuery1."ID"]');
Page.Objects.Add(v);
end;
if FN2 <> '' then
begin
end;
if FN3 <> '' then
begin
end;
if FN4 <> '' then
begin
end;
if FN5 <> '' then
begin
end;
if FN6 <> '' then
begin
end;

frReport1.ShowReport;
end;

end.
 
v: TfrView;
b: TfrBandView;
Page: TfrPage;
这些都释放掉看看??
 
不能释放,一释放就产生异常!
 
是不是某個字符串的字段在displayformat里設成浮點型的格式呀
 
v.Memo.Clear;
v.Memo.Add(FN1);
 
第一次预览都能成功,第二次就不行了.(不终止程序)
 
后退
顶部