0

ADOConnection を含む MainModule というデータ モジュールと、 MainModule のサブクラスである ADOQuery 、 ADOStoredProcedure などを含む DatabaseModule という別のデータ モジュールがあります。

TDatabaseModule= class(TMainModule)
  • このモジュールは自動作成です。

私のアプリケーションでは、すべてのクラスが DatabaseModule からサブクラス化されており、2 つのクラスが次のようになっていると考えてください。

TMyClass1= class(TDatabaseModule)

TMyClass2= class(TDatabaseModule)

私のアプリケーションでは、 TMyClass1 と TMyClass2 からインスタンスを作成し、両方のクラスが最終的に MainModule の ADOConnection に接続します。クラスの 1 つを解放すると、 MainModule の接続がドロップされ、ADOQuery などが接続されているため、他のクラスはデータベースにアクセスできません。 MainModule の ADOConnection とその接続が生きていません。どうすれば接続を維持できますか?

注:接続を DatabaseModule に配置できることを知っています。クラスが作成されるたびに、そのクラスの接続の特定のインスタンスが作成されますが、データベースのオーバーロードがあるため、SQL Server Profiler で確認します。

ありがとう 。

4

1 に答える 1

1

MainModule と DatabaseModule の AutoCreation は ADOConnection の 2 つのインスタンスを作成し、さらに TDatabaseModule サブクラスの各インスタンスはもう 1 つ作成します。

TMyClass1 インスタンス (MyObj1 としましょう) を MainModule.ADOConnection に接続するにはどうすればよいですか? MyObj1.ADOConnection のように:= MainModule.ADOConnection; ?

ここで MyObj1 を破棄すると、そのすべてのコンポーネントも破棄されますが、MyObj1.ADOConnection 参照を MainModule.ADOConnection に変更すると、MainModule.ADOConnection が失われます。

ADOConnection コンポーネントを別の DataModule に移動し、ADOConnection を DatabaseModule (または MainModule) プロパティとして設定し、コードで使用されているデータセットの Connection プロパティを割り当てることができます。また、使用する予定のない DataModule を自動作成しないでください。

于 2012-11-27T16:03:18.050 に答える