procedure TForm1.Button1Click(Sender: TObject);
var
ltemp : TfrxVariable;
begin
ltemp := frxReport1.Variables.Add;
ltemp.Name := ' TESTVAR' ;
frxReport1.Variables.AddVariable('TESTVAR','测试','12');
frxReport1.Variables.AddVariable('TESTVAR','测试23','qwewr');
frxReport1.DesignReport();
var
ltemp : TfrxVariable;
begin
ltemp := frxReport1.Variables.Add;
ltemp.Name := ' TESTVAR' ;
frxReport1.Variables.AddVariable('TESTVAR','测试','12');
frxReport1.Variables.AddVariable('TESTVAR','测试23','qwewr');
frxReport1.DesignReport();
end;
运行后,在报表上增加一个变量[测试23]
然后点击“预览”,报错:
网上查询都是修改这个组件的源码如下:
frxClass单元中
function TfrxReport.DoGetValue(const Expr: String; var Value: Variant): Boolean;
里面的源语句 if Pos(#13#10, val) <> 0 then 修改后的语句 if (Pos(#13#10, val) <> 0 ) or( ds=nil) then
但FastReport为收费组件,此类常用就出现的报错,不应通过修改组件源码解决,应该是自身使用组件不当造成的;参照网上解决方案,将自身代码改成
procedure TForm1.Button1Click(Sender: TObject);
var
ltemp : TfrxVariable;
begin
ltemp := frxReport1.Variables.Add;
ltemp.Name := ' TESTVAR' ;
frxReport1.Variables.AddVariable('TESTVAR','测试','12');
frxReport1.Variables.AddVariable('TESTVAR','测试23','qwewr'#13#10);
frxReport1.DesignReport();
end;
再运行就不报错了