FastReport2.x可以直接在报表设计器中引用Form里的DataSet,可是FastReport3之后的版本则一定要通过frxDBDataSet来引用,这样如果我在报表设计时要引用Form里的多个数据集,就必须每个数据集都通过对应的frxDBDataSet才能引用。改用ReportMachine也是一样的。
由于我的程序是允许用户在运行期间设计报表的,所以必须要能让用户在运行期间可以在报表里引用当前Form的不同的数据集,而不用通过修改程序再增加或更新frxDBDataSet。有高手可以告诉我如何实现吗? 顺便感慨一下,FastReport功能越来越强大,可以开发也越来越复杂了,有些很简单的应用也搞得很复杂才能实现
由于我的程序是允许用户在运行期间设计报表的,所以必须要能让用户在运行期间可以在报表里引用当前Form的不同的数据集,而不用通过修改程序再增加或更新frxDBDataSet。有高手可以告诉我如何实现吗? 顺便感慨一下,FastReport功能越来越强大,可以开发也越来越复杂了,有些很简单的应用也搞得很复杂才能实现
解决方案 »
- delphi装好后怎么没有clientserver和serversocket这两个控件啊》?
- 晕 !
- delphi dbedit 数值计算
- 在一个程序得主页面中,有两个webbrowser控件,如何能点击左边网页中得链接后在右边得浏览器中出现链接页面
- 请问一条SQL语句?
- 我用BDE的TQUERY来运行一个“select * from users;"我想取里面的一个字段怎么 取?
- 关于数据库恢复
- 熟悉GDI的朋友帮我看看代码哪儿错了
- 如何用程序实现execl表格导入数据库,用自己的代码实现!
- 为什么4697.7变成了4697.669????????
- delphi那个版本支持64位系统,现在出来了没?
- Self 的功能和用途,可以举两个例子吗?(初学者)
我是要把报表设计的权限完全交给用户,而不用去二次开发,就像FastReport2.x的设计器里可以直接让用户选择当前程序所有的数据集和数据字段一样。
没有完全明白你的意思。我是想不通过frDataSet而直接引用Form里的ADODataSet,而且可能会同时引用多个ADODataSet,这样就是通过frDataSet来引用,也不能同时引用吧?
如果是 dll 的话,…… 搞定了也告诉我一下。学习。
我是在Delphi开发,当然是用VCL的FastReport,也就是你所说的bpl,但不知你说的Components具体是怎么实现呢?请赐教!
给你一段参考。
function ShowFastReportManageForBpl(AOwner:TForm):Boolean;
var i,iCount:Integer;ds:TfrxDBDataset;
begin
Result:=false;
if not FileExists(AppPrintIniFileName) then
begin
ShowMessage('配置文件不存在'+#13#10+AppPrintIniFileName);
exit;
// raise Exception.Create('configuration file not found(配置文件丢失)');
end;
with TfrmFastReportManage.Create(AOwner) do
try
// 先建立Fast的DataSet
frxReport1.DataSets.Clear;
iCount:=0;
for i:=0 to AOwner.ComponentCount-1 do
begin
if AOwner.Components[i] is TDataSource then
begin
Inc(iCount);
ds:=TfrxDBDataset.Create(This);
ds.DataSource:=TDataSource(AOwner.Components[i]); // TDataSource(AOwner.Components[i]);//DLL中用as会失败,原因似乎是FR在DLL中与DataSet不合。
ds.UserName:=TDataSource(AOwner.Components[i]).Name; // 还是不要修改名字看得清楚点 'FastDataSet'+IntToStr(iCount);
// frxReport1.DataSets.Add(ds); //好像加不加都一样存在
end;
end;
if iCount=0 then ShowMessage('当前模块不支持打印') else Result:=true;
ShowModal;
finally
Free;
end;
end;