关于 报表
我的代码,运行到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或者其它数据集
[解决办法]
那位帮你处理的网友的意思是,假设值不为空,就报表的