|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 액세스 버전(95,97,2000,xp,2003,2007): 2007
* 아래줄에 질문을 작성하세요 >>
황동준님께 먼저 감사드립니다.
첨부파일의 '오더 번호 입력'을 클릭하면
검색조건으로 검색된 자료를 선택하고 선택된 자료에 대해
작업지시번호를 자동으로 입력하고 싶은데 잘 되지 않습니다.
For 문으로 루프 돌리는 이유는 선택된 자료의 수를 구하고 수만큼 루프를 돌려 작업지시번호를 자동으로 생성하기 위해서 입니다.
기존 문의사항에 파일이 첨부되지 않아 새롭게 문의드립니다.
==============[딸기아빠님 글에 대한 답변입니다]==============
상위폼의 조건들로 검색된 하위폼의 레코드에 오더번호를 부여하는 것으로 이해 하였습니다.
1. 상-하위폼 레코드 원본이 동일함 - 상위폼 레코드원본 삭제(언바운드폼,검색용)
2. 폼 오픈 시 마지막 오더번호 표기 부분 수정, 발행 년도의 최대 값 오더번호 가져오기. 없으면 공란으로 표기됨
Me.txt_OrderDate = Date
Me.txt_temp = DMax("오더번호", "List_작업지시서 관리대장", "Left([오더번호], 4) ='" & Year(txt_OrderDate) & "'") ' 이전오더번호중 최대값을 찾음
3. 오더번호 - 상위폼에서 레코드 이동하며 부여하도록 되어있었으나 하위폼의 레코드를 순환하면서 부여하도록 변경함
Private Sub cmd_OrderNo_Click()
Dim RS As DAO.Recordset
Dim LastOrderNo
Dim k As Integer
k = 0 '작업 카운터용 변수 초기화
'검색된 하위폼의 레코드를 dao로 선언
Set RS = Me.작업지시_하위폼.Form.Recordset
RS.MoveFirst
For i = 1 To RS.RecordCount
'만약 오더번호가 공란일 경우 아래 코드 진행하고, 이미 입력된 오더번호가 있다면 건너뜀
If IsNull(RS!오더번호) Then
'매 루프마다 업데이트된 마지막 오더번호를 찾기위해 for 문 안에 배치
LastOrderNo = DMax("오더번호", "List_작업지시서 관리대장", "Left([오더번호], 4) ='" & Year(txt_OrderDate) & "'") ' 이전오더번호중 최대값을 찾음
'레코드셋 수정
RS.Edit
'마지막 오더번호 비교하여 1증가
If IsNull(LastOrderNo) Then
RS!오더번호 = Year(txt_OrderDate) & "-000001"
Else
RS!오더번호 = Year(txt_OrderDate) & "-" & Format(Right(LastOrderNo, 6) + 1, "000000")
End If
'하위폼에 있던 오더발행일자 입력부분
RS!오더발행일자 = Date
'레코드 업데이트 반영
RS.Update
k = k + 1
End If
RS.MoveNext
Next i
RS.MoveFirst
'실행결과 메세지
If k > 0 Then
MsgBox k & "개의 레코드에 오더번호를 부여하였습니다.", vbInformation
Else
MsgBox "부여된 오더번호가 없습니다.", vbCritical
End If
Set RS = Nothing
'마지막 오더번호 업데이트
Me.txt_temp = DMax("오더번호", "List_작업지시서 관리대장", "Left([오더번호], 4) ='" & Year(txt_OrderDate) & "'")
End Sub
4. 하위폼에서 업데이트 되던 오더발행일자부분을 위 코드에 통합
5. 검색된 하위폼의 레코드중 이미 발행번호가 부여되어있는 경우 건너뜀.(이부분은 제가 잘 모르니 필요에 따라 수정하세요)
6. 실행 결과 메세지 표시
7. 실행 후 마지막 오더번호 업데이트 |
|