드로우홀릭 더베이직

함수 질문 드립니다

2018.05.19 10:18:02 조회 수 6810 추천 수 0

회사 일 때문에 액세스를 이용하는데


가입일자로부터 이용기간을 더해서 만료일자를 자동으로 입력되게 하고 싶어서


만료일자 필드 기본값에


=dateadd('m',[이용기간],[가입일자])


라고 입력하니 '데이터베이스 엔진에서 유효성 검사식의 '이용기간' 필드 또는 '회원명단' 테이블의 기본값을 인식할 수 없습니다.'


라는 메시지가 떠서 인터넷에 검색해보니 이용기간 필드에 공백이 있어서 그렇다길래


=iif([이용기간]="","",dateadd("m",[이용기간],[가입일자])) 라고 입력해 봤지만 똑같은 메시지만 뜨네요 ㅠㅠ


뭐가 문젠지 모르겟어요 ㅜㅜ


profile

윈드님

2018.06.22 22:26:43
*.227.97.207

안녕하세요.


일단 테이블에서 사용 하신 것 같습니다만.

아래 링크를 보시면 필드의 기본값에는 다른 필드의 참조가 가능하지 않은 것 같습니다.

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 이벤트를 걸어서 [만료일자]에 계산된 값을 넣어 주도록 하는 것입니다.


   Private Sub 가입일자_AfterUpdate()


    '이용기간의 값이 없거나 0인경우 만료일자를 지운다.

    If Nz(이용기간, 0) = 0 Then

        만료일자 = Null

        Exit Sub

    End If

    

    '가입일자의 값이 없는경우 만료일자를 지운다.

    If Nz(가입일자, "") = "" Then

        만료일자 = Null

        Exit Sub

    End If

    

    '만료일자 자동계산

    [만료일자] = DateAdd("d", [이용기간], [가입일자])

    

End Sub


Private Sub 이용기간_AfterUpdate()


    '이용기간의 값이 없거나 0인경우 만료일자를 지운다.

    If Nz(이용기간, 0) = 0 Then

        만료일자 = Null

        Exit Sub

    End If

    

    '가입일자의 값이 없는경우 만료일자를 지운다.

    If Nz(가입일자, "") = "" Then

        만료일자 = Null

        Exit Sub

    End If

    

    '만료일자 자동계산

    [만료일자] = DateAdd("d", [이용기간], [가입일자])

    

End Sub


폼1에서는 [이용기간] 과 [가입일자]에 각각 똑같은 코드가 들어 있기 때문에 무언가 수정 하려고 하면 두곳을 다 수정 해야 하는 불편함이 있습니다. 또한 깜빡하여 한곳만 수정하는 경우 결과값이 이상 해 질 수도 있겠지요?


그래서 폼2를 보시면 


Private Sub 가입일자_AfterUpdate()


    '만료일자 자동계산 프로시저 호출

    sbAddDate

    

End Sub


Private Sub 이용기간_AfterUpdate()


    '만료일자 자동계산 프로시저 호출

    sbAddDate

    

End Sub


Private Sub sbAddDate()


    '이용기간의 값이 없거나 0인경우 만료일자를 지운다.

    If Nz(이용기간, 0) = 0 Then

        만료일자 = Null

        Exit Sub

    End If

    

    '가입일자의 값이 없는경우 만료일자를 지운다.

    If Nz(가입일자, "") = "" Then

        만료일자 = Null

        Exit Sub

    End If

    

    '만료일자 자동계산

    [만료일자] = DateAdd("d", [이용기간], [가입일자])


End Sub

만료일자를 계산하는 프로시저는 따로 만들고 [이용기간], [가입일자]의 AfterUpdate 이벤트에서는 이 프로시저를 호출하는 기능만 넣어 줍니다.


이렇게 하는 경우, 한곳만 고치면 되겠지요? ^^


폼 3의 경우는 [만료일자] 컨트롤의 컨트롤 원본을 수식으로 대체 한 것입니다.  

이 경우는 폼에서는 [만료일자]를 보여주지만 테이블에 있는 필드가 아니기 때문에 테이블에는 저장되지 않습니다.


마지막으로 위에 적어주신 수식은 '일' 계산이 아니라 '월' 계산입니다. dateadd 에서 '일'의 경우 "d" 로 해 주셔야 합니다.

첨부
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 31830
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 27980
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 23113
459 대화상자에서 매크로동작 2 열심 2022-07-30 1148
458 디자인보기 1 열심 2022-07-29 329
457 개발 컨셉 1 LoneStar 2022-07-29 1198
456 실행버튼 1 열심 2022-07-28 1430
455 다른PC에서는 왜정상작동이 안되는지요? 1 열심 2022-07-27 2349
454 추가쿼리에서 키위반 오류 문의드립니다 file 3 1 박형근 2022-07-17 36072
453 온라인강의(비메오vimeo) 동영상 재생 오류 7 디비32 2022-07-06 828
452 엉뚱한 질문 하나 드립니다... 아놀드 2022-06-14 530
451 액세스 화면색상이 이상해져서 문의드립니다 file 1 박형근 2022-06-05 1784
450 안녕하세요 기본적인 질문입니다. 5 으흐흐 2022-06-03 83
449 엑세스 오류 file 1 엑세스00 2022-05-12 2390
448 테이블에서 일대다 폼으로 레코드를 읽어오기 file 3 원죽 2022-04-05 786
447 날짜간의 시간차이를 "시분초"로 표현하고 싶습니다. file 1 엑세스초보탈출 2022-01-02 3795
446 압축 및 복구에 대한 문의입니다. 3 vrn001 2021-12-23 3202
445 액셀과 엑세스 VBA 차이점 문의 2 겨루기 2021-12-08 15776
444 오프라인 수업 문의 드립니다.~ 2 문건 2021-12-08 586
443 튜터링 범위에 대한 문의입니다. (Azure를 이용한 메일 보내는 기능 관련) 4 vrn001 2021-11-19 237
442 로그인된 유저이름 반환하기 가능할까요?? 2 아놀드 2021-11-08 244
441 Collection 관련 문의입니다. 8 vrn001 2021-11-05 221
440 2013 초급동영상 중 질문사항 입니다 file 2 푸리쏠 2021-10-29 296


  주소  12925 경기도 하남시 미사대로 540, B동 917호 (현대지식산업센터 한강미사2차) ㈜팀데이터이십일  |  고객센터 전화번호  02-467-2998  |  대표이사  염기웅
개인정보관리책임자  염기웅 (ml_privacy@td21.com)  |  사업자등록번호  120-86-79260  |  통신판매업신고번호  제 2021-경기하남-1166 호  [사업자 정보 확인]
  TD21의 사전 서면 동의 없이 TD21 사이트 일체의 정보, 콘텐츠 및 UI 등을 상업적 목적으로 전시, 전송, 스크래핑 등 무단 사용할 수 없습니다.