这个相互引用问题该如何解决?(80分)

  • 主题发起人 主题发起人 basket
  • 开始时间 开始时间
B

basket

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个FrmData,上面放上了一些TQuery和TTable,用来从数据库中取数
FrmData上还有一个Button,作为Print之用。
我在FrmReport上放上了QuickReport,为了仅打印当前记录,我需要引用
FrmData中的TTable和TQuery,所以我在FrmReport的Uses中加入了前面的
frmData,但问题是我在frmData中为了打印数据,得用
frmReport.QuickRep.Preview(or Print),也就是frmData中还要引用
frmReport,而这种相互引用是不允许的,该怎么办?
由于在frmData的TQuery中需要使用frmData上放置的DBText的值,因而我也
不能将所有的TQuery和TTable放到公共的DataModule上。

Delphi允许连环引用吗?即A引用B,B引用C,C引用A
 
应该可以吧
 
你应该把所有的TDatabase|TTable|TQuery都放到公共的DataModule上,
这样便于管理,而且也解决了循环引用的问题。
至于你的Query用到的DBText的值的问题,用动态添加SQL语句的方法解决。
动态添加SQL语句方法若不清楚可查书。
 
to:Hjking:

动态添加SQL语句方法我是知道的,但问题在这儿:
如果所有TDatabase|TTable|TQuery都放到公共的DataModule上,那么在frmData中
必须引用DataModule,但是在TTable的一些事件中,我需要得到DBtext的当前值,
而DBtext是在frmData中的,那么DataModule也要引用frmData,这样还是会造成循环
引用。

to:小猪
太可惜了,我刚试了试,不行。


你应该把所有的TDatabase|TTable|TQuery都放到公共的DataModule上,
这样便于管理,而且也解决了循环引用的问题。
至于你的Query用到的DBText的值的问题,用动态添加SQL语句的方法解决。
 
关于'Delphi允许连环引用吗?即A引用B,B引用C,C引用A'
答:完全可以,只是要注意USES语句应放在 implementation之后
如:
implementation

uses Unit2;

implementation

uses Unit3;
 
没仔细看,对A引用B,B引用C,C引用A:
unit A;
interface
uses B;

unit B;
interface
uses C;

unit C;
implementation
uses A; ---- 这个引用放在执行部分。
是否可以?
 
谢谢各位,我按照y_zl的方法实现了
 
多人接受答案了。
 
后退
顶部