私の質問は、ソリューションのアイデアを具体的に探すことではなく、Excel VBA で ADODB を使用してからしばらく経っているため (少なくとも 2 つの主要なリビジョン)、自分のソリューションの健全性チェックを目的としています。
というわけでこんな状況です。大きすぎてメモリに収まらない大きなデータベース ビューのチャンクにアクセスしたいユーザーのために、Excel レポートを作成しています。ユーザーはすべてのビューにアクセスできる必要があるため、ハードコーディングされたフィルターは問題外です。より洗練された解決策がない限り、彼らが必要としているのは、生成された SQL ステートメントの形式で接続のフィルターを動的に制御できることです。SQL ステートメントはピボットキャッシュにフィードされ、ピボットテーブルに更新を指示します。
ユーザーが一般的に必要とするすべてのフィルターを備えたフォームを表示する「更新」ボタンを作成しました。ユーザーがフィルター値を入力すると、それらを解析して検証し、値から適切な SQL ステートメントを形成します。次に、これを行うと問題が発生します。
'this has to be dynamic becuase I'm distributing to multiple users, using different testing/production databases on different workstations.
mypivottable.PivotCache.Connection = "ODBC;" & driver & myserver & myuser & trusted & app & workstationid & databse
'this also has to be dynamic becuase of the sql filters
mypivottable.PivotCache.CommandText = sql
だから私はボタンを押して、それが動作します! これらのプロパティを設定した後、キャッシュの背後に新しいデータがあることを認識しているため、ピボットテーブルは自動的に更新され、新しい基準でクエリ結果をフェッチします。
問題は、外部データソースのリストを見ると、これらのプロパティを変更するたびに新しい接続が作成され、それ自体がクリーンアップされないことです。100回使用すると、100個の接続が残り、そのうち99個が未使用です。すべての接続を削除すると、ピボットテーブルが元に戻せなくなります。
これを行うより良い方法はありますか?未使用の接続のみをクリーンアップするプログラムによる方法はありますか?