Да, но вы должны обязательно закрыть набор записей, прежде чем переназначить переменную набора записей для другого набора записей. Вот пример:
Dim rs As DAO.Recordset
Dim bTimeToChangeRecordsets As Boolean
Set rs = CurrentDb.OpenRecordset("Contacts")
'add business logic here'
If bTimeToChangeRecordsets Then
rs.Close
'setting to Nothing is not necessary here,'
'because setting to a new recordset instance has the '
'same effect on the variable reference count '
Set rs = CurrentDb.OpenRecordset("Comments")
End If
'more business logic'
rs.Close
Set rs = Nothing
Многие комментарии по этому вопросу были сосредоточены на необходимости установить переменную набора записей на Nothing
, необходимо ли это и когда это необходимо, а также необходимо ли также вызывать Close для набора записей перед выпуском ссылки на набор записей. Есть несколько превосходных комментариев по этой теме, разбросанных по довольно многим вопросам о переполнении стека; этот особенно актуален для вашей ситуации. Я бы также направил вас к этой статье в базе знаний и этой выдержке из всесторонней книги .
Имея риск упрощения, я могу обобщить проблему следующим образом: если бы подсчет ссылок в Access работал хорошо, не нужно было бы беспокоиться о явном освобождении ссылок, задав для них значение Nothing
, или о явном закрытии наборов записей. Однако практический опыт подсказывает нам, что, учитывая поведение Access, обе эти привычки должны быть частью наилучшей практики кодирования для VBA.