2011-01-31 3 views
-1

Microsoft Access를 처음 사용합니다.다른 테이블에서 동일한 레코드 세트 변수를 사용할 수 있습니까?

다른 테이블에서 동일한 레코드 세트 변수를 사용하려면 어떻게해야합니까?

+0

내가 무엇을 묻고 있는지 잘 모르겠다. –

+1

우리가하고 싶은 것을 보여주세요. –

+0

VBA 스크립트 프로 시저를 작성하고있는 것 같습니다. 내가 시도 할 것입니다 "개체"첫 번째 테이블을 마친 때 Null 레코드 집합에 사용하는 변수를 설정하는 것입니다. 객체와 관련된 할당 된 자원을 확보하고 같은 테이블 또는 다른 테이블과 연관된 다른 쿼리의 결과를 보유하도록 다시 초기화 할 수 있습니다. – hardmath

답변

0

네,하지만 레코드 세트 변수를 다른 레코드 세트에 다시 할당하기 전에 레코드 세트를 닫아야합니다. 이 질문에 코멘트

Dim rs As DAO.Recordset 
Dim bTimeToChangeRecordsets As Boolean 

Set rs = CurrentDb.OpenRecordset("Contacts") 

'add business logic here' 

If bTimeToChangeRecordsets Then 
    rs.Close 
    'setting to Nothing is not necessary here,' 
    'because setting to a new recordset instance has the ' 
    'same effect on the variable reference count ' 
    Set rs = CurrentDb.OpenRecordset("Comments") 
End If 

'more business logic' 

rs.Close 
Set rs = Nothing 

많은 사람들이 필요하고, 경우에는 닫기를 호출 할 필요가 있는지 여부와, Nothing에 레코드 변수를 설정할 필요에 초점을 맞추고있다 예를 들면 : 레코드 집합 참조를 릴리스하기 전에 레코드 집합. 스택 오버플로에 대한 몇 가지 질문에 걸쳐이 주제에 대한 훌륭한 해설이 있습니다. this one은 특히 귀하의 상황과 관련이 있습니다. 또한 this knowledgebase articlethis in-depth book excerpt으로 연결됩니다.

지나치게 단순화 될 위험이 있으므로이 방법으로 문제를 요약 할 수 있습니다. 액세스 참조 횟수가 제대로 작동하면 참조 번호를 Nothing으로 명시 적으로 해제하거나 레코드 세트를 명시 적으로 닫지 않아도 걱정할 필요가 없습니다. Howerver, 실제 경험에 따르면 Access의 동작을 감안할 때 이러한 습관은 모두 VBA를 코딩하는 모범 사례의 일부가되어야합니다.

+2

사실 변수를 다시 사용하기 전에 변수를 닫을 필요가 없습니다. –

+0

레코드 집합을 열린 상태로두면 참조를 잃어 버리기 때문에 레코드를 닫을 수 없습니다. 이것은 좋지 않다. –

+0

어떤 참조가 유실 되었습니까? 너 스스로 해봤 니? –

2

예, 변수가 두 개의 레코드 집합을 가리 키지 않는 한 오래 사용할 수 있습니다.

그러나 질문은 왜 그런가요? 당신은 무엇을 구하기를 기대합니까? 자원? 별로 중요하지 않습니다. 또한 코드 가독성이 떨어집니다. 앞으로 1 주일이나 다른 사람이 나중에 코드를보고 있다면 무슨 일이 일어나고 있는지 알지 못할 수도 있습니다. 따라서 테이블/쿼리 당 레코드 집합 변수를 제안합니다.

또한 변수의 범위가 있습니다. 서브 루틴/함수에서 정의 된 경우 해당 하위/함수에서만 볼 수 있습니다. 맨 위에 있으면 해당 양식/보고서/모듈의 모든 기능/기능에 표시됩니다. 모듈에있는 동안 그것이 전역이라면 모든 곳에서 볼 수 있습니다.

그래서 질문하는 이유는 무엇입니까?

+0

동일한 테이블을 반복하여 동일한 작업을 수행해야한다면 레코드 세트 변수를 다시 사용할 수 있습니다. 그러나 다시, 만약 그들이 동일하다면, 왜 그들은 분리되어 있는가? – BIBD

+0

새로운 개체에 변수를 재사용하는 것은 나쁜 습관이라는 것에 대해서는 동의하지 않습니다. CodeSlave의 예가 적절합니다. –

+0

Paul, CodeSlave의 구체적인 예에서 확인하십시오. 그러나 일반적으로 동일한 서브 루틴/함수에서 두 변수에 대해 동일한 변수를 재사용해서는 안되며 코드에서 혼란 스럽습니다. –