2010-10-22 3 views
0

В форме MS-Access, я следующий код прилагается к событию:Доступ к MS: .Закрыть после .RecordSetClone?

Dim frm As Form, rs As Recordset 
Set rs = Me.RecordsetClone 

'do some stuff with rs 
' 
rs.Close 
Set rs = Nothing 
Set frm = Nothing 

Мой вопрос: требуется rs.Close? Это даже хорошо (нежелательные побочные эффекты?)

+2

Вы должны определить свою переменную набора записей как 'rs As DAO.Recordset'. То есть, если вы собираетесь объявить это вообще. Практически никогда не бывает случая, когда это необходимо при работе с RecordsetClone. Вместо этого используйте блок WITH/END WITH, т. Е. 'With Me.RecordsetClone'. –

+0

@ Давид: С есть хорошая идея. Я никогда не указываю часть DAO, потому что я никогда не ссылаюсь на ADO, но вы, вероятно, правы, и в один прекрасный день я заплачу за это: -/ –

+0

Указав это, вы делаете процесс компиляции, требуя меньше разрешения неявных объектов в пределах Пространство имен. Хотя я никогда не видел, чтобы VBA ошибался только с ссылкой DAO, я бы лучше сказал VBA, на что смотреть, поэтому не нужно «беспокоиться» об этом. Это также просто лучшее кодирование - имейте в виду, что одна из целей кода - информировать программиста о том, что происходит (а не только компилятор), и указание DAO во всех случаях ясно дает понять во всех случаях. –

ответ

1

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

Итак, вы используете существующий встроенный набор записей, и вы не открыли этот набор записей. Установка как ничто, как у вас, не требуется, но она может оставаться на месте и четко показывает ваши намерения, сделанные вами с объектами.

1

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

Доступ имел место, если у вас не было объекта, он бы не ушел, но вместо этого он свести к минимуму панель задач, и вам придется убить задачу. Однако, поскольку вы устанавливаете объект на ничего, это не повлияет на вас.

+0

Моя проблема в том, что мы говорим здесь о * клоне *, который я понимаю как указатель на другой ранее существовавший объект. –

+0

Но он не открыл его - RecordsetClone формы уже существует. –

Смежные вопросы