我放一个Database1、query1、frreport1、frDBDataSet1、Button1放在窗口上,
然后设置相关的属性如:
frReport.Dataset:=frDBDataSet;
frDBDataSet.DataSet:=query1;
在报表中能添加相应的字段,并打印。我现在想做动态报表。
就是说我不在报表设计器中添加字段。我想用程序添加。
function TForm1.DataSetToReport(frReport: TfrReport;
frDBDataSet: TfrDBDataSet; FirstTitle, SecondTitle: String;
DataSet: TDataSet): Boolean;
var
frPage: TfrPage;
frBandView: TfrBandView;
frMemoView: TfrMemoView;
i,Left:integer;
Ls_Field:string;
begin
if (not DataSet.Active) or (DataSet.RecordCount < 1) then
begin
Result:=False;
Exit;
end; try
frReport.Dataset:=frDBDataSet;
frDBDataSet.DataSet:=DataSet;
frReport.Pages.Clear;
frReport.Pages.Add;
frPage := frReport.Pages[0];
frBandView := TfrBandView.Create;
frBandView.SetBounds(0, 300, 800, 30);
frBandView.BandType := btMasterData;
frBandView.Dataset := frDBDataSet.Name;
frPage.Objects.Add(frBandView); Left:=20;
for i := 0 to DataSet.FieldCount - 1 do
begin
frMemoView := TfrMemoView.Create;
frMemoView.FrameTyp:=15;
if i > 0 then
begin
Left:=Left + DataSet.Fields[i -1].DisplayWidth;
end;
frMemoView.SetBounds(Left, 300, DataSet.Fields[i].DisplayWidth, 30);
frMemoView.Prop['Alignment'] := frtaMiddle;
//为什么这样写不行,该怎么写啊??????
Ls_Field:='['+ DataSet.Name + '."' + DataSet.Fields[i].FieldName + '"]';
frMemoView.Memo.Add(ls_field);
//
frPage.Objects.Add(frMemoView);
end;
frReport.ShowReport;
Result:= True;
except
Result:=False;
end;
end;
调用该函数时报错:
计算时发生错误
["姓名"]报表:
对象符号没定义"姓名"
为什么 ???????请帮忙。。我发现只要是用程序绑定:
frReport1.Dataset:=frDBDataSet;
frDBDataSet.DataSet:=query1;
并设置:frreport1.modifyprepared:=true;
在运行程序时,运行frReport.ShowReport后,双击进入设计状态,插入一个矩形对象,再双击
该对象,再点插入表达式,再点字段进行字段选择,但里面是空,没有可选字段??????
如果不是用程序设置各个控件的对应关系,而是直接在窗口中设置,则可以。
然后设置相关的属性如:
frReport.Dataset:=frDBDataSet;
frDBDataSet.DataSet:=query1;
在报表中能添加相应的字段,并打印。我现在想做动态报表。
就是说我不在报表设计器中添加字段。我想用程序添加。
function TForm1.DataSetToReport(frReport: TfrReport;
frDBDataSet: TfrDBDataSet; FirstTitle, SecondTitle: String;
DataSet: TDataSet): Boolean;
var
frPage: TfrPage;
frBandView: TfrBandView;
frMemoView: TfrMemoView;
i,Left:integer;
Ls_Field:string;
begin
if (not DataSet.Active) or (DataSet.RecordCount < 1) then
begin
Result:=False;
Exit;
end; try
frReport.Dataset:=frDBDataSet;
frDBDataSet.DataSet:=DataSet;
frReport.Pages.Clear;
frReport.Pages.Add;
frPage := frReport.Pages[0];
frBandView := TfrBandView.Create;
frBandView.SetBounds(0, 300, 800, 30);
frBandView.BandType := btMasterData;
frBandView.Dataset := frDBDataSet.Name;
frPage.Objects.Add(frBandView); Left:=20;
for i := 0 to DataSet.FieldCount - 1 do
begin
frMemoView := TfrMemoView.Create;
frMemoView.FrameTyp:=15;
if i > 0 then
begin
Left:=Left + DataSet.Fields[i -1].DisplayWidth;
end;
frMemoView.SetBounds(Left, 300, DataSet.Fields[i].DisplayWidth, 30);
frMemoView.Prop['Alignment'] := frtaMiddle;
//为什么这样写不行,该怎么写啊??????
Ls_Field:='['+ DataSet.Name + '."' + DataSet.Fields[i].FieldName + '"]';
frMemoView.Memo.Add(ls_field);
//
frPage.Objects.Add(frMemoView);
end;
frReport.ShowReport;
Result:= True;
except
Result:=False;
end;
end;
调用该函数时报错:
计算时发生错误
["姓名"]报表:
对象符号没定义"姓名"
为什么 ???????请帮忙。。我发现只要是用程序绑定:
frReport1.Dataset:=frDBDataSet;
frDBDataSet.DataSet:=query1;
并设置:frreport1.modifyprepared:=true;
在运行程序时,运行frReport.ShowReport后,双击进入设计状态,插入一个矩形对象,再双击
该对象,再点插入表达式,再点字段进行字段选择,但里面是空,没有可选字段??????
如果不是用程序设置各个控件的对应关系,而是直接在窗口中设置,则可以。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货