2017-12-12 14 views
1

데이터 시트보기에서 특정 필드가 미리 채워진 폼을 만들려고합니다.불완전한 레코드가있는 폼을 닫는 액세스 문제

레코드가 불완전한 동안 사용자가 X를 클릭하여 폼을 닫은 경우 더티 레코드로 돌아가 올바른 레코드를 반환 할 수있는 방법을 찾을 수 없습니다.

BeforeUpdate가 실행되지만 Cancel = True로 설정해도 양식 닫기가 중지되지 않습니다.

Form_Unload가 실행되고 Cancel = True로 설정하면 닫히지 않지만 양식 내용이 지워집니다 (선택하지 않은 상태이지만 실행 취소가 적용된 것처럼 보임).

양식을 닫는 X가 활성화되었을 때 제어 할 수 있다면이를 피할 수 있습니다. 하지만 데이터 시트보기에있는 이후 닫기 단추를 제공 할 수 없습니다.

문제는 BeforeUpdate를 사용하여 사용자에게 문제가 있음을 알리는 한편 문제를 해결할 수 있도록 양식으로 돌려 보내는 동안 트리거 조치가 양식 닫기 인 경우 거짓말을합니다. /항해). 그래서 그들이받는 다음 메시지는 죄송합니다. 우리는 저장하지 않고 여러분을 닫습니다, 불행 (당신의 잘못이지만 너무 늦었습니다)!

업데이트 취소에도 불구하고 사용자는 Form_Unload가 시작되기 전에 "이 레코드를 저장할 수 없습니다."라는 메시지는 표시되지 않습니다.

제안 사항? 내가 놓친 게 있니?

답변

0

이렇게하려면 여러 가지 이벤트를 가지고 놀아야합니다.

Dim frmErr As Boolean 

양식로드 및 엔트리 오류가있을 때, 진정한

Private Sub Form_Load() 
    frmErr = True 
End Sub 

Private Sub Form_Error(DataErr As Integer, Response As Integer) 
    frmErr = True 
End Sub 

사용자 시도에 오류를 설정 : 코드의 맨 위에있는 형태의 오류를 추적하는 변수를 추가 양식을 닫으려면

Private Sub Form_Unload(Cancel As Integer) 

    If Not Me.Dirty Then 'user hasn't done anything. 
     If MsgBox("form is unchanged. close?", vbYesNoCancel, "really?") = vbYes Then 
      frmErr = False 
     End If 
    End If 

    If frmErr = True Then 
     Cancel = True 
    End If 
End Sub 

이것은 기본 개요입니다. Form_Dirty 이벤트와 함께 업데이트해야 게임이 제대로 작동합니다.

+0

문제는 양식을 언로드 할 때 불완전하게 채워진 레코드의 오류를 잡아 내면 양식 내용이 부분적으로 채워지지 않고 지워지므로 사용자가 제대로 완료 할 수 있습니다. @wazz – James