Подтвердить что ты не робот

Какая разница между rs.close vs rs = ничего в RecordSet

Я часто сбиваю с толку, когда это целесообразно:

rs.Close 

против

Set rs = Nothing

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

Могу ли я просто установить для переменной значение Nothing, чтобы пропустить шаг закрытия соединения? Будет ли это считаться плохой практикой?

4b9b3361

Ответ 1

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

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

Ответ 2

Метод Close сбрасывает структуру памяти.

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

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

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

Ответ 3

Вы можете установить Recordset на Nothing без необходимости вызова Close, согласно официальной документации:

Альтернативой методу Close следует установить значение переменной объекта Nothing (Set dbsTemp = Nothing).

Дополнительная информация: Метод Recordset.Close(DAO)