функция excel vba для возврата набора записей

У меня есть функция VBA, которая возвращает RecordSet, и этот RecordSet используется в подпрограмме. Сама функция находится в модуле. Хотя сама функция успешно возвращает RecordSet, у меня есть две проблемы:

  1. Если я попытаюсь закрыть соединение в функции, это приведет к сбою приложения.
  2. Если я попытаюсь закрыть RecordSet в подпрограмме после ее использования, это приведет к сбою приложения.

Итак, как мне закрыть соединение в функции после возврата набора записей и закрыть набор записей после его использования?

Моя функция устанавливает соединение, открывает его и выполняет запрос.


person Andy5    schedule 25.10.2013    source источник
comment
Покажите свой код, пожалуйста.   -  person Tarik    schedule 26.10.2013
comment
Наборы записей зависят от живого подключения к работе. Вы не должны пытаться закрыть соединение, пока не закончите с любым используемым набором записей.   -  person Barranka    schedule 26.10.2013


Ответы (2)


После использования набора записей его необходимо закрыть.

Когда набор записей активен, он потребляет ресурсы. После использования набора записей вы должны освободить память, которую он использовал, чтобы сделать их доступными для других объектов компьютера. Для этого объекту Recordset присваивается значение Nothing. Вот пример:

'Clean Up
rsTemp.Close 'closing recordset
Set rsTemp= Nothing ' free the memory

Также вы можете закрыть соединение в конце.

If con.State = adStateOpen Then
 con.Close
End If

If Not con Is Nothing Then Set con = Nothing
person Santosh    schedule 25.10.2013
comment
В функции, которая возвращает набор записей, если я устанавливаю для набора записей и соединения ничего или закрытие, код завершится ошибкой, и вызывающей подпрограмме ничего не будет возвращено. Я попытался закрыть набор записей, который используется в вызывающей подпрограмме, но, как я уже сказал, это не удается. привести к неудаче? - person Andy5; 26.10.2013
comment
@ Andy5 Andy5 Вы можете создать функцию, которая записывает. Пусть функция вернет набор записей....используйте набор записей в вызывающей функции, а затем вы закроете набор записей. - person Santosh; 29.10.2013

Не делайте это как функцию. Модулировать в подпрограмму

person Andy5    schedule 28.10.2013