2013-10-25 1 views
0

RecordSet을 반환하는 VBA 함수가 있고이 RecordSet이 서브 루틴에 사용됩니다. 함수 자체는 모듈에 있습니다. 나는 서브 루틴에 RecordSet을 닫으려고하면엑셀 vba 함수가 레코드 집합을 반환합니다.

  1. 나는 함수의 연결을 종료하려고하면, 그것은
  2. 실패 할 수있는 응용 프로그램을 발생합니다 함수 자체가 성공적으로 RecordSet를 반환하는 동안, 나는이 문제가 사용 후에는 응용 프로그램이 실패합니다.

그래서 레코드 세트를 반환하고 레코드 세트를 사용한 후 함수에서 연결을 닫으려면 어떻게해야합니까?

내 함수는 연결을 만들고, 열어보고 쿼리를 실행합니다.

+0

코드를 표시하십시오. – Tarik

+0

레코드 세트는 작동 할 라이브 연결에 의존합니다. 사용중인 모든 레코드 집합을 다 끝낼 때까지 연결을 닫지 마십시오. – Barranka

답변

0

레코드 집합을 사용한 후에는 반드시 닫아야합니다.

레코드 집합이 활성화되면 리소스를 소비합니다. 레코드 세트를 사용한 후에는 사용중인 메모리를 해제해야 컴퓨터의 다른 객체에서 사용할 수있게됩니다. 이 작업은 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 
+0

레코드 세트를 반환하는 함수에서 레코드 세트와 연결을 아무것도 설정하지 않거나 닫으면 코드가 실패하고 아무 것도 호출 서브 루틴으로 반환되지 않습니다. 호출하는 서브 루틴에서 사용되는 세트 레코드 세트를 닫으려고했으나 실패했다. 서브 루틴에서 레코드 세트를 닫지 않으면 실패하지 않게하고 함수의 연결을 닫지 않도록한다. 그게 실패 할까? – Andy5

+0

@ Andy5 레코드 세트를 만들 수 있습니다. 함수가 레코드 세트를 반환하도록합니다 ... 호출하는 함수에서 레코드 세트를 소비 한 다음 레코드 세트를 닫습니다. – Santosh

0

기능으로하지 마십시오. 서브 루틴으로 모듈화