FastReport和ReportMachine如何直接引用Form的DataSet?

wanjunxiao 2010-07-16 04:45:03
FastReport2.x可以直接在报表设计器中引用Form里的DataSet,可是FastReport3之后的版本则一定要通过frxDBDataSet来引用,这样如果我在报表设计时要引用Form里的多个数据集,就必须每个数据集都通过对应的frxDBDataSet才能引用。改用ReportMachine也是一样的。
由于我的程序是允许用户在运行期间设计报表的,所以必须要能让用户在运行期间可以在报表里引用当前Form的不同的数据集,而不用通过修改程序再增加或更新frxDBDataSet。有高手可以告诉我如何实现吗?

顺便感慨一下,FastReport功能越来越强大,可以开发也越来越复杂了,有些很简单的应用也搞得很复杂才能实现。。。
...全文
178 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenshm 2010-08-03
  • 打赏
  • 举报
回复
试试就知道了~
kye_jufei 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 iamduo 的回复:]
高手没有。
给你一段参考。
function ShowFastReportManageForBpl(AOwner:TForm):Boolean;
var i,iCount:Integer;ds:TfrxDBDataset;
begin
Result:=false;
if not FileExists(AppPrintIniFileName) then
begin
S……
[/Quote]

這個方法是可行的。。。
ouyanghaiwa 2010-07-20
  • 打赏
  • 举报
回复
三楼的说的对
ntjrr 2010-07-20
  • 打赏
  • 举报
回复
那可能你得动态创建,写出更复杂的代码来解决了。本身放多个数据集能否改一下,也就是在窗口本身的设计思路上改改?
wanjunxiao 2010-07-19
  • 打赏
  • 举报
回复
顶一下,盼高手出现
iamduo 2010-07-19
  • 打赏
  • 举报
回复
高手没有。
给你一段参考。
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;
iqyely 2010-07-16
  • 打赏
  • 举报
回复
不太会用,来学习下。
wanjunxiao 2010-07-16
  • 打赏
  • 举报
回复
iamduo:
我是在Delphi开发,当然是用VCL的FastReport,也就是你所说的bpl,但不知你说的Components具体是怎么实现呢?请赐教!
iamduo 2010-07-16
  • 打赏
  • 举报
回复
如果是 bpl 里的话,用 Components 是可行的。
如果是 dll 的话,…… 搞定了也告诉我一下。学习。
wanjunxiao 2010-07-16
  • 打赏
  • 举报
回复
ReportMachine的设计器继承了FastReport2时代的简洁特征,但好像也必须通过rmDataSet来引用数据集,不过因为我用得不熟,不知道熟ReportMachine的高手有没有好的解决方法?
wanjunxiao 2010-07-16
  • 打赏
  • 举报
回复
bdmh:
没有完全明白你的意思。我是想不通过frDataSet而直接引用Form里的ADODataSet,而且可能会同时引用多个ADODataSet,这样就是通过frDataSet来引用,也不能同时引用吧?
bdmh 2010-07-16
  • 打赏
  • 举报
回复
他们都有各自的DBDataSet,然后指定到form上的adoquery就行了
wanjunxiao 2010-07-16
  • 打赏
  • 举报
回复
tjianliang:
我是要把报表设计的权限完全交给用户,而不用去二次开发,就像FastReport2.x的设计器里可以直接让用户选择当前程序所有的数据集和数据字段一样。
亮剑_ 2010-07-16
  • 打赏
  • 举报
回复
动态创建frxDBDataSet,仅供参考

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧