读书人

关于 报表解决思路

发布时间: 2012-04-24 14:15:38 作者: rapoo

关于 报表
我的代码,运行到frxReport1.PrepareReport() 就出错

Delphi(Pascal) code
                  Query_RP.Close;                  Query_RP.SQL.Clear;                                                           Query_RP.SQL.Add(Str_SQL);                  Query_RP.Parameters.ParamByName('SNO').Value := Query_Search.FieldByName('SNO').AsString;                  Query_RP.Open;                  Str_Path:=  ExtractFilePath( Application.ExeName );                  Str_RPFile := Str_Path + 'rp\rp3.fr3';                  frxReport1.LoadFromFile(Str_RPFile,True);                  frxReport1.PrepareReport();                  frxReport1.PrintOptions.ShowDialog:=false;                  frxReport1.print;


一个朋友,帮我把unit frxDBSet;修改了下
if (ReportRef <> nil) and (frxResources <> nil) then //添加这一行上去,就不出错了

我用FR的版本是3.0

{******************************************}
{ }
{ FastReport v3.0 }
{ DB dataset }
{ }
{ Copyright (c) 1998-2004 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}

Delphi(Pascal) code
function TfrxDBDataset.GetValue(Index: String): Variant;var  i: Integer;begin  i := Fields.IndexOf(Index);  if i <> -1 then    Result := TField(Fields.Objects[i]).Value  else  begin    Result := Null;    if (ReportRef <> nil) and (frxResources <> nil)  then  //添加这一行上去              ReportRef.Errors.Add(ReportRef.CurObject + ': ' +      frxResources.Get('dbFldNotFound') + ' ' + UserName + '."' + Index + '"');  end;end;



请问是什么问题

[解决办法]
并不是版本有BUG,而是你的报表没设计好,ReportRef.Errors.Add();
这一句就是显示错误信息的,你加了判断实际上就是把你的程序错误的地方隐藏了,治标不治本
要是那天重新装了frx忘记了修改源代码,错误一样存在

frxResources不用判断,源代码在调用时已经判断了,不存在会自动创建
ReportRef就是frxDBDataset关联的frxReport1

所以修改方法:报表中用到frxDBDataset要设置它的DataSet属性为ADOQuery或者其它数据集


[解决办法]
那位帮你处理的网友的意思是,假设值不为空,就报表的

读书人网 >.NET

热点推荐