2017-02-22 20 views
0

У меня есть вопрос об ADODB.соединении.Будет ли закрыто соединение ADODB при закрытии Excel?

Я использую ADODB-соединение для подключения к Access в приложении Excel. Мне нужно закрыть соединение вручную или оно будет автоматически закрыто при закрытии приложения Excel?

Если мне нужно сделать это вручную, то когда и где? Могу ли я написать код в событии Workbook_BeforeClose? Я открываю соединение в событии Workbook_Open, и объект соединения объявляется глобальным var.

+1

Когда вы закрываете Excel, объект подключения выходит за пределы области видимости, но это хорошая практика, чтобы явно закрыть его в вашем коде. –

+1

Возможный дубликат [Когда переменная Excel VBA должна быть убита или установлена ​​в Nothing?] (Http://stackoverflow.com/q/19038350/11683) – GSerg

+0

Это может быть интересно для вас ... http://stackoverflow.com/questions/3217014/how-to-securely-store-connection-string-details-in-vba? noredirect = 1 & lq = 1 Я использую этот метод для подключения к ADODB.Connection –

ответ

-1

Я считаю, если вы явно не закрыть соединение, соединение будет оставаться открытым, даже если первенствовать выходов.

К сожалению, VBA не настолько умный, чтобы закрывать каждое соединение и т. Д., Когда объект выходит за рамки. Но, тем не менее, это была лучшая практика - закрыть каждый поток и соединение, когда вам это больше не нужно, и, конечно же, при выходе/закрытии рабочей книги, это хорошая идея, чтобы проверить, связано ли соединение открыто, и если да, закройте его. Это просто делает ваше приложение еще более надежным и надежным.

Так что я предлагаю вам, чтобы вы закрывали соединение всякий раз, когда выполнялась какая-либо операция r/w. Не оставляйте соединение открытым, пока приложение не работает (потому что, если excel или система зависает?). Поэтому держите его открытым столько, сколько необходимо, но обязательно сделайте двойную проверку в обработчике событий Workbook_BeforeClose.

+1

«К сожалению, VBA не настолько умный, чтобы закрыть каждое соединение и т. Д., Когда объект выходит из области действия» - наоборот, это [именно то, что делает VBA] (http://stackoverflow.com/a/19038890/11683). – GSerg

+0

Спасибо :) Я думаю, теперь у меня есть идея. – Guoliangcai