드로우홀릭 더베이직
회사 일 때문에 액세스를 이용하는데
가입일자로부터 이용기간을 더해서 만료일자를 자동으로 입력되게 하고 싶어서
만료일자 필드 기본값에
=dateadd('m',[이용기간],[가입일자])
라고 입력하니 '데이터베이스 엔진에서 유효성 검사식의 '이용기간' 필드 또는 '회원명단' 테이블의 기본값을 인식할 수 없습니다.'
라는 메시지가 떠서 인터넷에 검색해보니 이용기간 필드에 공백이 있어서 그렇다길래
=iif([이용기간]="","",dateadd("m",[이용기간],[가입일자])) 라고 입력해 봤지만 똑같은 메시지만 뜨네요 ㅠㅠ
뭐가 문젠지 모르겟어요 ㅜㅜ
안녕하세요.
일단 테이블에서 사용 하신 것 같습니다만.
아래 링크를 보시면 필드의 기본값에는 다른 필드의 참조가 가능하지 않은 것 같습니다.
https://support.office.com/ko-kr/article/%ED%95%84%EB%93%9C-%EB%98%90%EB%8A%94-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EC%9D%98-%EA%B8%B0%EB%B3%B8%EA%B0%92-%EC%84%A4%EC%A0%95-99508d03-b28b-4057-9652-dac1c4c60d86?ui=ko-KR&rs=ko-KR&ad=KR#bm1
예를 들어 기본값을 현재 테이블의[이용기간]필드만을 지정해도 같은 오류가 나오게 됩니다.
이와 같이 만료일자를 자동 계산되게 하려면 폼에서 작업을 하셔야 합니다.
폼에서 [이용기간] 이나 [가입일자]를 새로입력/변경 하는 순간 자동 계산되게 하는 방법입니다.
첨부한 파일의 '폼1'을 보시면 [이용기간] 과 [가입일자] 에 AfterUpdate 이벤트를 걸어서 [만료일자]에 계산된 값을 넣어 주도록 하는 것입니다.
폼1에서는 [이용기간] 과 [가입일자]에 각각 똑같은 코드가 들어 있기 때문에 무언가 수정 하려고 하면 두곳을 다 수정 해야 하는 불편함이 있습니다. 또한 깜빡하여 한곳만 수정하는 경우 결과값이 이상 해 질 수도 있겠지요?
그래서 폼2를 보시면
만료일자를 계산하는 프로시저는 따로 만들고 [이용기간], [가입일자]의 AfterUpdate 이벤트에서는 이 프로시저를 호출하는 기능만 넣어 줍니다.
이렇게 하는 경우, 한곳만 고치면 되겠지요? ^^
폼 3의 경우는 [만료일자] 컨트롤의 컨트롤 원본을 수식으로 대체 한 것입니다.
이 경우는 폼에서는 [만료일자]를 보여주지만 테이블에 있는 필드가 아니기 때문에 테이블에는 저장되지 않습니다.
마지막으로 위에 적어주신 수식은 '일' 계산이 아니라 '월' 계산입니다. dateadd 에서 '일'의 경우 "d" 로 해 주셔야 합니다.