나눔터  
  HOME > 나눔터 > 묻고답하기 > 액세스
액세스
액세스에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 황동준 (bogri2000)

추천:  0
파일:     241021_자동번호 매기기.accdb (912KB) 조회:  81
제목:   [RE]자동으로 번호매기기를 하는데 에러 발생..
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 액세스 버전(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. 실행 후 마지막 오더번호 업데이트
 
[불량 게시물 신고]  
딸기아빠덕분에 잘 해결 되었습니다. 진심으로 감사드립니다.10-21 (19:04)
삭제 ■신고
        
  

작성일 : 2024-10-21(13:33)
최종수정일 : 2024-10-21(13:33)
 


 ◎ 관련글

  제 목   작성자   날짜
자동으로 번호매기기를 하는데 에러 발생합니다.(2) 딸기아빠 2024-10-21
[RE]자동으로 번호매기기를 하는데 에러 발생.. 황동준 2024-10-21