레코드 세트 RS 대 rs.close = 아무것도의 차이 :무슨 나는 종종 혼란이 사용하는 것이 적합한 경우에로 찾을
rs.Close
반대로 내가 이해할 수
Set rs = Nothing
에 소스에 대한 연결을 닫을 필요가 있지만 변수가 범위를 벗어 났을 때 둘 모두를 사용해야합니까?
연결을 종료하는 단계를 건너 뛰려면 변수를 Nothing으로 설정할 수 있습니까? 이것이 나쁜 습관으로 간주 될 것인가?
레코드 세트 RS 대 rs.close = 아무것도의 차이 :무슨 나는 종종 혼란이 사용하는 것이 적합한 경우에로 찾을
rs.Close
반대로 내가 이해할 수
Set rs = Nothing
에 소스에 대한 연결을 닫을 필요가 있지만 변수가 범위를 벗어 났을 때 둘 모두를 사용해야합니까?
연결을 종료하는 단계를 건너 뛰려면 변수를 Nothing으로 설정할 수 있습니까? 이것이 나쁜 습관으로 간주 될 것인가?
"닫기"방법을 사용하면 데이터베이스에 대한 연결이 닫히지 만 "열기"방법을 사용하여 다시 열 수있는 메모리에 남아 있습니다.
반면에 레코드 세트를 "없음"으로 설정하면 개체가 메모리에서 완전히 해제됩니다.
Close 메서드는 메모리 구조를 찢어 버립니다.
변수를 Nothing으로 설정하면 해당 메모리 구조에 대한 포인터가 지워집니다.
이론적으로 포인터를 지우는 것은 VBA가 메모리를 해제 할 수있는시기를 결정하기 위해 참조 계산을 사용하기 때문에 포인터가 참조하는 메모리를 해제해야합니다. 불행하게도, 여러 가지 일이 잘못 될 수 있으며 참조 횟수가 끝나갈 수 있으며 메모리는 해제되어야합니다.
따라서 메모리 누수가 없거나 암시 적 또는 출시되지 않은 참조로 인해 발생하는 이상한 종류의 버그가 발생하지 않도록 Nothing으로 설정하면됩니다.
:
닫기 방법에 대한 대안은 아무것도에 개체 변수의 값을 설정하는 것입니다 (설정 dbsTemp = 아무것도) .
더 많은 정보는 : Recordset.Close Method (DAO)
그래서, 하나 개의 우회 다른 작업을 수행하는 필요성을하고 있습니까? –
실제로 레코드 세트를 설정하지 않아도 오류가 발생하지는 않지만 실제로는 그렇지 않습니다. 그 레코드 세트를 사용하지 않거나 다시 같은 레코드 세트에 액세스하지 않을 때 특히 닫은 후에는 recset을 아무 것도 설정하지 않는 것이 가장 좋습니다. –
귀하의 답변은 데이터베이스 연결을 참조하지만 질문은 레코드 세트를 사용했습니다. 데이터베이스 변수는 초기화 된 방법에 따라 안전하게 수행 할 수 있다는 점에서 다른 점과 다릅니다 (CurrentDB와 DBEngine (0) (0)). 레코드 세트 변수를 사용하면 레코드 세트를 닫아도 데이터베이스 연결이 전혀 닫히지 않습니다. –