2013-10-25 6 views
0

У меня есть функция VBA, которая возвращает RecordSet, и этот RecordSet используется в подпрограмме. Сама функция живет в модуле. В то время как сама функция возвращает RecordSet успешно, у меня есть две проблемы:excel vba function to return recordset

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

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

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

+0

Показать ваш код пожалуйста. – Tarik

+0

Записи зависят от подключения к работе. Вы не должны пытаться закрыть соединение до тех пор, пока не закончите использовать любой набор записей. – Barranka

ответ

0

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

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

'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 
+0

В функции, которая возвращает набор записей, если я установил набор записей и соединение ни к чему или не закрыл, код завершится неудачно и ничего не будет возвращено вызывающей подпрограмме. Я попытался закрыть набор записей, который используется в вызывающей подпрограмме, но, как я сказал, это не сработает. Где вы помещаете в подпрограмму закрытие набора записей, чтобы не сделать это сбоем и закрыть соединение в функции, чтобы не было заставить его потерпеть неудачу? – Andy5

+0

@ Andy5 Вы можете создать функцию, которая записывает набор. Пусть функция возвращает набор записей .... потребляет набор записей в вызывающей функции, а затем вы закрываете набор записей. – Santosh

0

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