DataModule中的几个不解问题 ( 积分: 20 )

  • 主题发起人 主题发起人 publicnews
  • 开始时间 开始时间
P

publicnews

Unregistered / Unconfirmed
GUEST, unregistred user!
1:
我在DataModule中放了一些AdoTable对象,如AdoTable1和AdoTable2,在DataModule的Destroy中我定义了
if AdoTable1.Active then AdoTable1.Close;
AdoTable1.free;
if AdoTable2.Active then AdoTable1.Close;
AdoTable2.free;
如果我在程序中使用过AdoTable1则释放的时候释放AdoTable1就不会出错,而释放到AdoTable2就会出错.
请问DataModule是如何管理这些对象的生命周期的

2:
另外我在其它使用到DataModule对象的窗体上对这些数据对象是这样访问的:
if DataModule.AdoTable1.Active=False then
begin
DataModule.AdoTable1.Open;
DataModule.AdoTable1.Tag:=DataModule.AdoTable1.Tag+1;
end;

当窗体结束时执行:
DataModule.AdoTable1.Tag:=DataModule.AdoTable1.Tag-1;
if DataModule.AdoTable1.Tag=0 then DataModule.AdoTable1.Close //当没有其它窗体引用时就关闭对象,以释放资



请问这种访问方法正确吗?

3:
我将用到的数据集对象放在一个DataModule上,而将Connection与图标等其它资源放在另一个DataModule上,这样做是否

可行,与所有都放在一个DataModule上,哪种更好?

4:
其它窗体使用DataModule上的AdoConnection对象,但我在使用中发现这样的问题:
我的DataModule不是设置的自动创建,而是在登录窗体中创建,如:DataModule1:=TDataModule1.Create;
我在设计期为了方便获取字段将AdoDataModule的AdoConnection设置了连接属性,在其它单元中直接将AdoTable的Conne

ction指向这个AdoConnection;但在程序运行时发现AdoTable的Connection并不是指向的我所创建的DataModule1,也就

是说设计期指向的那个DataModule的Connection并不是我创建的DataModule1的AdoConnection,为什么?我明明将其从自

动创建列表中移去了,为什么还存在?
 
1:
我在DataModule中放了一些AdoTable对象,如AdoTable1和AdoTable2,在DataModule的Destroy中我定义了
if AdoTable1.Active then AdoTable1.Close;
AdoTable1.free;
if AdoTable2.Active then AdoTable1.Close;
AdoTable2.free;
如果我在程序中使用过AdoTable1则释放的时候释放AdoTable1就不会出错,而释放到AdoTable2就会出错.
请问DataModule是如何管理这些对象的生命周期的

2:
另外我在其它使用到DataModule对象的窗体上对这些数据对象是这样访问的:
if DataModule.AdoTable1.Active=False then
begin
DataModule.AdoTable1.Open;
DataModule.AdoTable1.Tag:=DataModule.AdoTable1.Tag+1;
end;

当窗体结束时执行:
DataModule.AdoTable1.Tag:=DataModule.AdoTable1.Tag-1;
if DataModule.AdoTable1.Tag=0 then DataModule.AdoTable1.Close //当没有其它窗体引用时就关闭对象,以释放资



请问这种访问方法正确吗?

3:
我将用到的数据集对象放在一个DataModule上,而将Connection与图标等其它资源放在另一个DataModule上,这样做是否

可行,与所有都放在一个DataModule上,哪种更好?

4:
其它窗体使用DataModule上的AdoConnection对象,但我在使用中发现这样的问题:
我的DataModule不是设置的自动创建,而是在登录窗体中创建,如:DataModule1:=TDataModule1.Create;
我在设计期为了方便获取字段将AdoDataModule的AdoConnection设置了连接属性,在其它单元中直接将AdoTable的Conne

ction指向这个AdoConnection;但在程序运行时发现AdoTable的Connection并不是指向的我所创建的DataModule1,也就

是说设计期指向的那个DataModule的Connection并不是我创建的DataModule1的AdoConnection,为什么?我明明将其从自

动创建列表中移去了,为什么还存在?
 
1 你写的那些代码没实际用途!该关 在 DM释放时候自然就关了 并且与 DM一起释放
 
楼上的说法我不能完全认同

我第二个问题的用意主要是这样的,如果把所有DataModule上的数据集组件用后都等到程序结束时再释放,假如数据集组件较多时将会占用较多系统资源,但如果用后就关闭数据集的话有可能多个窗体用到同一个数据集组件而造成关闭后其它窗体将不能访问,所以想出了这个用Tag标识引用次数的做法

再重复一下最后一个问题
我在窗体上都是直接将数据集组件的Connection指身DataModule上的组件(设计时).这样做本来没什么问题,但我把DataModule从工程的自动创建列表中删除了,然后在登录窗体的登录事件中去创建DataModule1,但是后来在用的时候发现
Form1.Query1.Connection和DataModule1.AdoConnection1竟不是同一个Connection
(肯定不是我设置错了,Form1.Query1.Connection是在设计时指向的DataModule1上的AdoConnection1)
 
去网上找一些程序源代码学习一下吧。
 
敢问楼主参加过什么项目么?
1、xebaobei已经说了,不要关闭的。
2、想来想去都不知道你这样做什么意思,你的DM 是系统级别的么?有可能几个窗体同时
使用一个打开的数据集么?建议多看看别人的代码,看看他们是怎样取数据,怎样释放
资源的。
3、图片资源最好不要放在DM里,如果你程序里用的图标很多的话这样很浪费资源,因为你
要一次都创建出来(不管是要用的还是不要用的),建议:在放在每个模块里,也便于
以后维护。
4、第四个问题很悬乎,要看代码才能知道,不过肯定的是你错了,而不是宝兰。
 
第二个问题:
多个窗体同用到一个数据集并非不可能,比如一个进销存系统,里面可能有多个窗体中的的查询字段会用到产品资料数据集,比如用户可能同时打开了进货录入窗体和销货录入窗体都会用到此产品资料数据集的
第四个问题:
修改OldCreateOrder属性后正常
 
多人接受答案了。
 
后退
顶部