드로우홀릭 더베이직

테이블에서 일대다 폼으로 레코드를 읽어오기

2022.04.05 21:49:34 조회 수 793 추천 수 0

액세스 VBA를 배우며 업무에 적용하고 있습니다. 물론 ‘직장인을 위한 실무 액세스’도 몇번 읽어보고 공부하고 있습니다. 며칠 동안 자력으로 풀어보려고 노력했으나 답을 못 구해서 도움을 요청 드립니다.

테이블과 폼을 바운드하면 저절로 해결되나 언바운드 폼(서브폼이 포함된 일대다 폼) 으로는 되지 않습니다.

f출고등록 폼에서 ‘출고번호’에 ‘201230S10’ 값을 입력한 다음 ‘읽기’ 단추를 클릭하면 ‘출고등록’ 테이블에서 레코드를 제대로 불러와 f출고등록 폼에 표시되는데, 서브폼에는 ‘출고’ 테이블의 출고번호(201230S10)에 해당하는 레코드가 5개이나 마지막 1개만이 표시될 뿐입니다. 여러 방법을 모색하여도 해결되지 않는데, 서브폼에 모든 레코드를 표시할 방법을 조언해주시면 감사하겠습니다.

읽기 버튼의 프로시저는 아래와 같습니다.

Private Sub cmd읽기_Click()

    If IsNull(Me.txt출고번호.Value) Then Exit Sub

   

    Dim db As DAO.Database

    Set db = CurrentDb

    Dim rs As DAO.Recordset

    Dim vSQL As String

   

    '일측 레코드의 읽기

   

    vSQL = "SELECT 출고일자, 판매처코드, 유무상 FROM 출고등록 "

    vSQL = vSQL & "WHERE 출고번호 = '" & Me.txt출고번호.Value & "';"

   

    Set rs = db.OpenRecordset(vSQL)

   

    If rs.BOF And rs.EOF Then

        MsgBox "대상 레코드가 없습니다.", vbInformation, "확인"

        GoTo Finally

    End If

   

    Me.txt출고일자.Value = rs!출고일자

    Me.txt판매처코드.Value = rs!판매처코드

    Me.txt유무상.Value = rs!유무상

   

    rs.Close

 

    '다측 레코드의 읽기

   

    Dim i As Integer

    vSQL = "SELECT 상품코드, 출고수량, 참고 FROM 출고 "

    vSQL = vSQL & "WHERE 출고번호 = '" & Me.txt출고번호.Value & "';"

   

    Set rs = db.OpenRecordset(vSQL)

   

    rs.MoveFirst

    Do While Not rs.EOF

        Me.f출고.Form.txt상품코드 = rs!상품코드

        Me.f출고.Form.txt출고수량 = rs!출고수량

        Me.f출고.Form.txt참고 = rs!참고

        rs.MoveNext

    Loop

       

Finally:

    If Not rs Is Nothing Then

        rs.Close

        Set rs = Nothing

    End If

   

    If Not db Is Nothing Then

        db.Close

        Set db = Nothing

    End If

End Sub

출고등록.png


profile

돌직구

2022.04.06 14:22:49
*.38.65.95

일단, 언바운드 폼을 이런 식으로 사용하는 것은..
정말 특별한 이유가 있지 않고서는 권장하지 않습니다.

바운드 폼으로 하면, 특정 출고번호로 '이동'하는 것이 쉽지 않아서 이렇게 구현하신건가요?
그렇다면 차라리 특정 출고번호로 '이동'하는 방법을 문의하심이 좋겠습니다.

 

 

일단, 질문에 대해 답을 드리자면..
한 화면에 여러 레코드가 나오는 하위 폼의 경우..
언바운드로는 여러 레코드를 나오게 할 수 있는 방법이 없습니다.

액세스의 데이터시트는 일반적인 프로그래밍 도구에 포함되어 나오는 '그리드(grid)'와는 그 의미가 완전히 다릅니다.
지금은 그리드를 사용하듯 하려고 하시는 것인데요..
방법이 없습니다.

쉬운 예로, 그리드를 사용하는 것처럼 하려면, 몇 번째 줄에 값이 표시되어야 하는지.. 그 속성을 정의하셔야 할텐데..
'원죽' 님께서 작성한 코드에는 '몇 번째 줄' 이라는 개념은 없지요?

'상품코드', '출고수량' 같은 '열'에 어떤 값을 표시하라는 개념은 있지만요.

액세스 데이터시트는 언바운드로는 한 줄만 표시할 수 있습니다.

profile

돌직구

2022.04.06 14:31:32
*.38.65.95

답글을 달고 나서 보니, 예제 파일을 첨부하셨더군요?
올바른 해결책을 제가 간단히 만들어서 첨부합니다.

'fEx_출고등록' 폼을 참고하시면 됩니다.

첨부

원죽

2022.04.06 15:46:36
*.177.135.160

답변 감사 드립니다.

서브폼 레코드 읽기를 레코드셋으로 가능한지 모색을 했을 뿐입니다. 

불가능하다는 결론을 잘 알겠습니다.

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


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