我的問題不是專門尋找解決方案的想法,更多的是對我自己的解決方案進行完整性檢查,因爲我已經工作了一段時間(至少有兩個主要修訂版) Excel VBA中的ADODB。數據透視表動態查詢到外部數據源
所以情況是這樣的。我爲想要訪問數據庫視圖的大塊的用戶創建Excel報告,該視圖太大而不適合內存。用戶需要能夠訪問所有的視圖,所以硬編碼過濾器是不可能的。除非我錯過了一個更優雅的解決方案,他們需要的是能夠以生成的SQL語句的形式動態控制連接上的過濾器,該語句將饋入到pivotcache中,然後告訴該數據透視表刷新。
我創建了一個「刷新」按鈕,它將顯示一個窗體,其中包含用戶通常需要的所有過濾器。用戶輸入過濾器值,我解析並驗證它們,從這些值中形成適當的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
因此,我按下按鈕,它的工作原理!設置這些屬性後,pivottable將自動刷新,因爲它知道緩存後面有新數據,並根據新條件提取查詢結果。
問題是,當我查看外部數據源列表時,每當我更改這些屬性時,它都會創建一個新的連接,並且不會自行清理。 100次使用後,有100個連接鋪設,其中99個未使用。如果我刪除所有的連接,那麼它將不可逆轉地中斷數據透視表。
有沒有更好的方法來做到這一點?是否有程序化的方法來清理未使用的連接?