我的问题不是专门寻找解决方案的想法,更多的是对我自己的解决方案进行完整性检查,因为我已经工作了一段时间(至少有两个主要修订版) 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个未使用。如果我删除所有的连接,那么它将不可逆转地中断数据透视表。
有没有更好的方法来做到这一点?是否有程序化的方法来清理未使用的连接?