|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 액세스 버전(95,97,2000,xp,2003,2007):
* 아래줄에 질문을 작성하세요 >> 07
안녕하세요.
'이벤트'로 '필드'값을 자동 입력하게 하려고 합니다.
방법을 잘 모르겠어서 질문해요.
질문1) 이전 레코드에 숫자 1 더한 값 출력
[상황] 단일폼에서
참고할 필드명 : 숫자 (직전 레코드 값, 값이 숫자로 되어있습니다,)
참고하여 입력될 필드명 : 숫자 (바운드 된 컨트롤 박스명은 "번호")
필요한 연산 : 이전 레코드 "숫자"필드 + 1 = 현재 레코드 "숫자"필드
DefaultValue 많이 쓰시는거 같은데 문법을 몰라서요
질문2) 현재 같은 레코드에서 다른 필드 값 복사
[상황] 단일폼에서
참고할 필드명 : 이름 (현재 레코드 값, 값이 문자로 되어있습니다,)
참고하여 입력될 필드명 : 담당자 (바운드 된 컨트롤 박스명은 "담당")
필요한 연산 : 복사
읽어주셔서 감사합니다.
==============[조병민님 글에 대한 답변입니다]==============
설명드리기에 앞서 특별한 이유가 있지 않다면 컨트롤 원본명과 폼내 컨트롤이름은 같이 써주세요. 구분하실려는 의도이신듯 한데 오히려 더 헷갈립니다.
질문1)
일련번호 처리를 위함으로 이해 됩니다.
폼에서 입력하는 방법에 따라 간단할수도 복잡할 수도 있습니다. 모든 조건을 염두해 두고 작성 했습니다.
테이블에 일련번호 필드가 필수로 있어야 합니다.(여기서는 ID )
Dim prevNo
'현재 레코드 바로 앞의 숫자를 구한다.
If Me.NewRecord Then
prevNo = DMax("숫자", "테이블1")
Else
prevNo = Nz(DMax("숫자", "테이블1", "ID < " & Me.ID))
End If
'이전 숫자가 없으면 메세지를 띄우고 명령을 중단한다.(처음레코드일경우)
If prevNo = "" Then
MsgBox "처음 레코드 입니다."
Exit Sub
Else
'아니면 이전 레코드의 숫자에 1을 더한다.
prevNo = prevNo + 1
End If
'현재 레코드에 숫자필드에 값이 부여 되었는지 확인하고
If Me.숫자 > 0 Then
'정확한 값이면 명령을 중단한다.
If Me.숫자 = prevNo Then
Exit Sub
Else
'아니면 물어보고 처리한다.
If MsgBox("이미 다른번호가 부여되어 있습니다." & vbLf & "교체하시겠습니까?", vbYesNo) = vbYes Then
Me.숫자 = prevNo
Else
Exit Sub
End If
End If
Else
'아니면 값을 넣어준다.
Me.숫자 = prevNo
End If
질문2)
앞서 이전 질문에 있던 내용입니다만,,
me.복사될필드 = me.복사할필드
로 하시면 됩니다.
추가로,
DefaultValue 는 현재 컨트롤의 기본값을 지정해주는 vba명령입니다.
새레코드 상태에서 각 컨드롤의 값이 미리 타이핑 되어지게 됩니다. 특정 필드에서 항상 같은 값을 사용하는 경우 속성창에서 기본값에 지정해주시면 되구요. 코드를 사용한다는 의미로는 종종 변하지만 연속으로 같은 값을 자주 입력할때ㅡ이전 값을 참조하여ㅡ AfterUpdate때 아래처럼 사용합니다.
필드명.DefaultValue = "'" & Me.필드명 & "'" |
|