rmreport machine 不支持多线程输出报表?(200)

  • 主题发起人 主题发起人 yjlucky
  • 开始时间 开始时间
Y

yjlucky

Unregistered / Unconfirmed
GUEST, unregistred user!
我用rmreport machine 6.5 做了一个多线程生成报表的程序,线程主要代码如下(报表模板使用了ado):rmForm := TForm.Create(nil);rmreport := TRMREPORT.Create(rmForm);rmreport.ThreadPrepareReport := False;rmreport.PrepareReport;发现执行到 rmreport.PrepareReport;
就会报错 “a component named adodataset1 already exists” 然后我写了一个测试程序,新建一个工程,放入两个rmreport,并设计了一样的报表,添加对话框,使用了ado,编译调试执行的时候报错 “a component named adodataset1 already exists” 。(直接运行编译好的程序不报错)我觉得主要原因是因为rmreport这个控件中会查找所有窗口中的ado控件,而不是只找自身窗体的。如何解决?具体可见rmreport machine 论坛: http://rmachine.5d6d.com/thread-923-1-1.html
 
找到了 rm_utils.pas 源码发现 RMGetComponents这个过程中是这样写的for i := 0 to Screen.CustomFormCount - 1do
begin
if (Screen.CustomForms.Name <> 'RMDesignerForm') and (Screen.CustomForms.Name <> 'RMGridReportDesignerForm') then
_EnumComponents(Screen.CustomForms);
end;
用的Screen.CustomFormCount ,这样就把所有的窗体的ado都取出来了,如果ado重名的话,就造成了问题,其实只要将rmreport自身的对话框(rmdialogform)中的ado取出来就可以了。如何修改源码????
 
又研究了一下,发现主要原因是 RM_Class中定义的 RMDialogForm ,代码如下: RMDialogForm := TForm.Create(nil);
RMDialogForm.SetBounds(-1000, -1000, 1, 1);
RMDialogForm.Name := 'RMDialogForm';并且RMDialogForm 在rm_class中定义的是一个全局变量,这就麻烦了,如果有两个rmreport同时运行的话,rmdialogform就会冲突了。比较难解决。
 
没有人会吗?
 
是啊,FR,RM都有很多全局变量,一般情况来讲,报表都是要一个一个看的,所以不存在同时显示多个报表的问题...
 
我改http://rmachine.5d6d.com/thread-923-1-1.html
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
回复
0
查看
657
爱音乐的孩子是小白
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部