2009-05-22 3 views
2

제목에서와 같이 나는 이상한 현상을 보았습니다. 두 개의 하위 양식이 포함 된 양식이 있습니다. 두 하위 폼에는 관련 하위 폼의 쿼리를 트리거하는 단추가 있습니다. 양식을로드 한 후 즉시이 단추 (양식 다시 쿼리)를 클릭하십시오. OnCurrent 이벤트의 현재 레코드의 기본 키 값을 변수에 저장하려고하면 "3021 : 현재 레코드 없음"오류가 발생합니다.Form.CurrentRecord = 1 and Form.RecordSet.Asoluteposition = -1

Form.CurrentRecord=1 
    Form.RecordSet.Absoluteposition=-1 
    Form.RecordSet.RecordCount=14 
    Form.RecordSet.EOF=False 
    Form.RecordSet.BOF=False 

는 또한 양식이로드 될 때로드 이벤트에서 여전히 올바르게 작동하는지주의하고, 거기에 내가있는 기본 키 값을 저장할 수 있습니다 디버거에서 이상하게도 관련 값이 같다 첫 번째 레코드에 포함 된 기본 키.

어쨌든 Form_Load와 그 requery 버튼 사이를 클릭하면 폼의 상태가 동기화되지 않게됩니다. 방금 최근 Access 2003에서 2007로 전환했으며이 오류가 발생하지 않았 음을 기억합니다. (이 버튼을 제대로 누르지 않았을 수도 있음).

현재로서는 해결 방법이 있지만 어떻게 이런 일이 발생할 수 있는지 알고 싶습니다.

답변

0

MoveFirst 등을 통해 양식 레코드 세트의 특정 레코드에 레코드 포인터를 배치해야합니다. 그리고 반환 값은 1 기반 대신 0 기반으로 나타납니다.

반환하는 오류를 -1 재현 할 수 없습니다. 폼의 레코드 세트를 ADO 레코드 세트로 설정하고 있습니까? 만약 그렇다면, 그것은 설명 할 수 있습니다 - DAO 레코드 셋은 -1을 반환하지 않습니다. 그러나 .MoveLast 전에는 ADO RecordCount가 -1을 반환합니다. 아마도 AbsolutePosition은 ADO에서 동일한 작업을 수행합니다.

달성하려는 작업은 무엇입니까? Recordset을 할당하고 RecordsetClone을 탐색하는 것이 훨씬 쉬워지면 양식의 Recordset 개체를 사용하는 데 유틸리티가 표시되지 않습니다 (Recordset이있을 때 훨씬 더 밀접하게 폼의 Recordset보다 폼의 편집/표시 버퍼에 더 밀접합니다. ADO 레코드 세트로 할당 됨).

+0

이 다른 컬럼의 복잡한 합계를 계산하는 데 사용하는 기능에 모든 이들의 사용 "하지만 난 .MoveLast 전에 ADO도 RecordCount가 반환 -1 믿는다"- 잘못된. DAO 레코드 집합과 달리 ADO의 RecordCount 속성은 모든 행을 가져 오기 때문에 EOF를 탐색하여 변경되지 않습니다. 비동기 적으로 행을 가져 오는 중에도 _Progess 이벤트에서 RecordCount는 지금까지 가져온 행 수가 아닌 최종 값을 표시합니다. 그러므로 AbsolutePosition이 같은 방식으로 작동하지 못하는 것을 나는 볼 수 없다. – onedaywhen

+0

양식의 .Recordset 또는 .RecordsetClone과 함께보고 된 문제를 복제 할 수 없습니다. 테스트 할 때마다 첫 번째 레코드가 0을 반환하므로 문제가 무엇인지 알 수 없습니다. * ADO 레코드 세트의 위치를 ​​기억하는 몇 가지 상황이 있습니다 .RecordCount는 -1을 반환하지만 ADO를 자주 사용하여 두뇌에 저장하지 않기 때문에 정확한 상황을 기억하지 못합니다. –

+0

속성이 지원되지 않는 경우 RecordCount는 -1을 반환합니다. 공급자가 지원하지 않거나 (예 : ACE/Jet의 경우는 해당되지 않음) 공급자 설정이 지원하지 않습니다. 전달 전용 커서를 사용하고 있습니다. 내가 말하고있는 것은 EOF를 탐색하는 것이 -1이든 아니든 상관없이 RecordCount를 변경시키지 않는다는 것입니다. IIRC DAO는 항상 모든 행을 가져 오지 않습니다. 올바른 RecordCount, 즉 RecordCount 값을 변경하려면 EOF를 탐색해야하는 경우가 있습니다. ADO에서 RecordCount는 -1이더라도 결코 변경되지 않습니다 ('지원되지 않음'을 의미). – onedaywhen

1

ADO 인 경우 어떤 OLE DB 공급자가 사용되고 있는지 확인하십시오. 우연히 만약

Debug.Print Form.RecordSet.ActiveConnection.Provider 

을 (추측)는 3.51 버전은 볼 수 있습니다 :

INFO: AbsolutePosition Property with JET Databases in ADO

을 ... 당신은 ACE 공급자를 사용하는 경우, 아마도 그것은 회귀 버그입니다!

0

"디자인보기"로 이동하려고하면 똑같은 문제가 발생합니다. 나는 빨리 클릭 할 필요가 없으며 한 시간 정도 기다린 다음 그 일을 할 수 있습니다. 이 오류가 있습니다.

하위 양식이 여전히 비어있는 경우에만 오류가 발생합니다 (즉, 처음 창을 열었을 때 실제로 어떤 레코드도 포함하지 않았 음). 그래서 나는 항상 정상이라고 생각했습니다.

커서가 현재 특정 위치를 가리키고 있지 않을 때 AbsolutePosition은 -1로 설정됩니다. 또한이 값은 0을 기준으로합니다 (다른 사람이 언급 한 것처럼 첫 번째 행은 AbsolutePosition 0 임). 그러나 하위 양식의 특정 행에 포커스가 있어도이 위치는 -1이 될 수 있습니다. 이것은 쓸모가 없다는 것을 의미합니다.

현재 커서 위치가 CurrentRecord인지 알아야 할 경우 사용하려는 항목. 이것은 1부터 시작하는 숫자입니다.목록이 비어 있으면 CurrentRecord를 0 또는 -1로 설정하여 행을 사용할 수 없다는 사실을 나타낼 수 있습니다.

내가 여기 페이지 http://linux.m2osw.com/msaccess-sum-focus-recordset-problem