我的问题不是专门寻找解决方案的想法,而是更多地检查我自己的解决方案的完整性,因为我在 Excel VBA 中使用 ADODB 已经有一段时间了(至少有两个主要修订版)。
所以情况是这样的。我正在为想要访问大块数据库视图的用户创建一个 Excel 报表,该数据库视图太大而无法放入内存。用户需要能够访问所有视图,因此硬编码过滤器是不可能的。除非我错过了一个更优雅的解决方案,否则他们需要的是能够以生成的 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 个未使用。如果我删除所有连接,那么它会不可逆转地破坏数据透视表。
有一个更好的方法吗?有没有一种编程方式来只清理未使用的连接?