2012-11-26 72 views
0

我有一個數據模塊稱爲MainModule含有一個的ADOConnection和另一數據模塊稱爲DatabaseModule包含ADOQuery,ADOStoredProcedure等所表示從MainModule子類:保持的ADOConnection的連接在Delphi

TDatabaseModule= class(TMainModule) 
  • 此模塊是自動創建的。
在我的應用程序

全部來自DatabaseModule類的子類的,現在覺得2類,如:

TMyClass1= class(TDatabaseModule) 

TMyClass2= class(TDatabaseModule) 
在我的應用

我創建TMyClass1和TMyClass2,既類的實例,最後連接到MainModule的ADOConnection,現在當我釋放其中一個類的時候,MainModule的連接被拋出,其他類無法訪問數據庫,因爲我的ADOQuery等連接到MainModule的ADOConnection並且它的連接不活動,我該如何保持連接活着?

注意:我知道我可以把連接放到我的DatabaseModule中,並且每次創建類時都會創建該類的特定連接實例,但它對數據庫有重載,我在SQL Server Profiler中檢查它。

謝謝。

+0

對此有何想法? –

+0

爲實際顯示您描述的問題的類顯示類的析構函數的代碼以及任何附加的OnDestroy事件處理程序。 – jachguate

+0

這些類沒有任何手動析構函數,它只是從DatabaseMadoule的子類TDataModule –

回答

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)屬性,並在代碼中分配使用的數據集的連接屬性。而且您不應該自動創建您根本不打算使用的DataModule。