Каково различие между rs.close по сравнению с RS = ничто в RecordSet

Я часто нахожу его путающий относительно того, когда уместно использовать:

rs.Close 

настроенный против

Set rs = Nothing

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

Я ни на Что могу просто установить переменную для пропуска шага Закрытия соединения? Это считали бы плохой практикой?

19
задан Curtis Inderwiesche 30 March 2010 в 02:35
поделиться

2 ответа

Используя метод "Close" вы закрываете соединение с базой данных, но она все еще находится в памяти, где вы можете открыть ее снова, используя метод "Open".

С другой стороны, установка набора записей на "Nothing" полностью освобождает объект из памяти.

16
ответ дан 30 November 2019 в 03:59
поделиться

Метод Close разрушает структуру памяти.

Установка для переменной значения Nothing очищает указатель на эту структуру памяти.

Теоретически очистка указателя должна освободить память, на которую ссылался указатель, потому что VBA использует подсчет ссылок для определения, когда он может освободить память. К сожалению, разные вещи могут пойти не так, и счетчик ссылок может выйти из строя, а память не будет освобождена, даже когда это должно быть.

Таким образом, чтобы убедиться, что вы не подвержены утечкам памяти или странным видам ошибок, вызванных неявными и невыпущенными ссылками, вы оба Закройте и установите значение Nothing .

11
ответ дан 30 November 2019 в 03:59
поделиться