Мой вопрос менее определенно ищет идеи для решения и многое другое для проверки правильности моего собственного решения, так как прошло какое-то время (по крайней мере, две основные версии), поскольку я работал с ADODB в Excel VBA.Сводная таблица с динамическим запросом к внешнему источнику данных
Итак, ситуация в этом. Я создаю отчет Excel для пользователя, который хочет получить доступ к большим кускам представления базы данных, которое слишком велико, чтобы вписаться в память. Пользователь должен иметь доступ ко всем представлениям, поэтому жестко заданные фильтры не могут быть и речи. Если мне не хватает более элегантного решения, им нужно иметь возможность динамически управлять фильтрами в соединении в форме сгенерированного оператора SQL, который загружается в сводный файл, а затем сообщает обновлению pivottable.
Я создал кнопку «Обновить», которая отображает форму, в которой есть все фильтры, которые обычно нужны пользователю. Пользователь вводит значения фильтра, я анализирую и проверяю их, формируя правильную инструкцию 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 из которых не используются. Если я удалю ВСЕ соединения, то он необратимо разрывает pivottable.
Есть ли лучший способ сделать это? Существует ли программный способ очистки только неиспользуемых соединений?