我有一个名为MainModule的数据模块,它包含一个ADOConnection和另一个名为DatabaseModule的数据模块,它包含来自MainModule的子类的ADOQuery,ADOStoredProcedure等:
TDatabaseModule= class(TMainModule)
在我的应用程序中,所有类都是DatabaseModule的子类,现在认为2类就像:
TMyClass1= class(TDatabaseModule)
TMyClass2= class(TDatabaseModule)
在我的应用程序中我从TMyClass1和TMyClass2创建一个实例,这两个类最终连接到MainModule的ADOConnection,现在当我释放其中一个类时,MainModule的连接被droped而其他类无法访问数据库因为我的ADOQuery等连接到MainModule的ADOConnection并且它的连接不活,我怎样才能保持连接活着?
注意:我知道我可以将连接放在我的DatabaseModule中,并且每次创建类时都会为该类创建一个特定的连接实例,但它对数据库有重载,我在SQL Server Profiler中检查它。
谢谢。
答案 0 :(得分:1)
MainModule和DatabaseModule的AutoCreation将创建2个ADOConnection实例,并且每个TDatabaseModule子类的实例将创建一个。
如何将您的TMyClass1实例(假设MyObj1)连接到MainModule.ADOConnection?像MyObj1.ADOConnection:= MainModule.ADOConnection; ?
如果您现在销毁MyObj1,它的所有组件也会被销毁,但是当您将MyObj1.ADOConnection引用更改为MainModule.ADOConnection时,您将松开MainModule.ADOConnection。
您可以将ADOConnection组件移动到另一个DataModule,将ADOConnection设置为DatabaseModule(或MainModule)属性,并在代码中分配已使用数据集的Connection属性。并且您不应该自动创建您根本不打算使用的DataModule。