드로우홀릭 더베이직

보고서 완료 후 체크박스 상태 변경

2021.07.13 00:09:21 조회 수 819 추천 수 0
안녕하세요.


체크박스를 사용하여 선택한 항목만 보고서로 출력하게끔 폼을 만들었습니다.
돌직구님께서 하위폼/하위보고서 조언을 주셨지만... 제 능력이 거기에 미지치 못하여 어찌어찌 구현하였습니다.. (맞게했는지는 모르겠습니다...)

보고서 단추 onclick 이벤트에는 단순하게 아래 코드만 작성하였습니다.

DoCmd.OpenReport "견적서", acViewPreview, , "[선택]=True"


코드 작성한대로 보고서 프리뷰까지는 열리고 아래 기능을 구형하려고합니다.

a) 보고서 폼을 열때 모든 체크박스가 체크되어 있지않고, 
b) 보고서 작업 완료 후 (출력완료 하거나, 프리뷰를 종료하거나, 보고서 폼을 종료하였을때) 체크됐던 체크박스가 자동으로 '체크안됨' 상태로 되돌리려고 합니다.

현재는 체크 상태에서 프리뷰를 끝내도 계속 체크 상태로 되어있습니다. 
보고서 폼을 종료해도 레코드에는 체크 상태로 저장되어있습니다.

(1가지 방법만이라도 괜찮습니다만...) 위 2가지를 충족 시킬만한 방법이 있는지 문의드립니다~!  

profile

돌직구

2021.07.13 09:40:13
*.38.65.95

네, 좋은 질문입니다.

실무에서 많이 궁금해 하실 만한 질문입니다.


1. 보고서 폼을 열 때, 모든 체크박스가 체크되어 있지 않도록 설정하기

보고서 폼이 열릴 때, '견적서' 테이블의 모든 체크박스를 체크되지 않은 상태로 바꾸어 줘야 합니다.


Private Sub Form_Open(Cancel As Integer)

    Dim strSQL As String
    
    strSQL = "UPDATE 견적서 SET 선택=false WHERE 선택=true"
    CurrentProject.Connection.Execute strSQL
    
End Sub


2. 보고서 작업 완료 후, 체크박스가 자동으로 체크되어 있지 않도록 설정하기

이것은 명령 자체는 1번 작업과 동일합니다만, 이벤트를 어디에 설정하느냐가 관건입니다.

프리뷰를 종료하였을 때 자동으로 하는 것은 썩 좋지 않습니다.

(프리뷰를 하고, 조금 더 추가해서 선택하고 싶을 때도 있을 텐데.. 선택이 초기화 되어 있다면 짜증이 좀 나겠죠.)


이런 상황은 보고서 폼(그러니까 보고서를 열기 위한 대화상자 폼)이 닫힐 때, 해당 작업을 해 주면 됩니다.


Private Sub Form_Close()

    Dim strSQL As String
    
    strSQL = "UPDATE 견적서 SET 선택=false WHERE 선택=true"
    CurrentProject.Connection.Execute strSQL
    
End Sub



추가로, 개념적인 설명을 좀 덧붙여 보겠습니다.

보통 '체크박스'를 이용해서 불규칙적인 '선택'을 하기 위해서 이런 테크닉을 사용하는데..

이 방식의 가장 큰 문제는 내가 선택하는 행동이 '레코드를 수정'한다는 데 있습니다.

일단 저희 회사에서는 이런 방식으로는 절대 사용하지 않습니다.

'레코드를 수정'하는 것은 정말 필요할 때만 해야 합니다.

단순히 내가 어떤 항목을 선택했는데, 그 결과가 '레코드를 수정'하는 것으로 되면 곤란합니다.

(지면 관계상 자세히 말씀드리긴 어렵지만 '쓰기 충돌 오류'도 자주 발생하고요.)

(내가 '선택'하는 것은 내 PC의 메모리에서만 이루어져야 하지, 내가 '선택'하는 것이 DB에 반영되는 건 좋지 않습니다.)


또, 여러 사람이 동시 사용하는 시스템이라면, 절대로 이렇게 사용해서는 안 됩니다.



그래서 저희는 보통 이런 상황이라면 '목록 상자'를 사용합니다.

여러 항목을 선택할 수 있는 목록 상자를 사용합니다.


그런데, 이러한 목록 상자는 사용 편의성이 좀 떨어지긴 합니다.

특히 목록이 매우 길 때, 키 한 번 잘못 누르면 선택된 것이 싹 초기화 되기도 하죠.


그래서, 불편하지만 정 체크박스를 사용해야 한다면.. 다음과 같은 테크닉을 사용합니다.

이 방식은 여러 사람이 동시 사용하는 시스템이라고 해도 잘 동작합니다.


1. 별도의 '선택 전용' 테이블을 만듭니다.

여기에서는 '견적서_선택' 테이블을 만듭니다.

필드는 다음과 같습니다.

견적서ID    사용자ID    선택


2. 이렇게 하고, 이 테이블과 '견적서' 테이블을 조인해서 표시해 줍니다.

이렇게 하면, 내가 '선택'하게 되면, '견적서 선택' 테이블에만 선택값이 반영됩니다.

'사용자ID'도 있기 때문에, 여러 사용자가 사용하더라도 별 문제가 없습니다.

아놀드

2021.07.13 10:26:41
*.44.198.147

정말 감사합니다. 막혔던 속이 시원하게 뚤리는 기분입니다....

자세하게 설명해주셨는데 말씀대로 여러사람이 사용하는 환경이라면 사용하면 안될것 같습니다....


마지막에 알려주신 방법대로 구현해보려고하는데요...

1. 견적서ID 사용자ID -> 필드형식이 자동으로 증분 되는 값을 말씀하시게 맞을까요?

2. 테이블을 조인한다는 말씀은 쿼리를 만들라는 말씀이실까요..?

3. 2번이 맞다면 이 쿼리를 데이터 원본으로 견적서 폼을 만들고 -> 댓글 상단에 알려주신 대로 구현해보면 될까요??


질문이 많네요...

일단 구현해보고.... 길을 잃으면... 10분 찬스를 써보도록 하겠습니다. ㅎ (교제 구매자 입니다... ㅎㅎ)

profile

돌직구

2021.07.13 10:35:31
*.38.65.95

1. 당연히 자동으로 증분되는 값을 사용하면 안 됩니다. 견적서 테이블의 견적서ID 값을 저장하는데 사용하는 것이고, 사용자 테이블의 사용자ID값을 저장하는데 사용하는 것이죠.

2. 네, 쿼리를 만들어야 합니다.

3. 맞습니다.


이 개념을 혼자서 구현하기는 쉽지 않을 것입니다.

10분 찬스, 언제든 사용하십시오!

profile

돌직구

2021.07.28 18:25:58
*.38.65.95

아놀드 님.

질문하신 내용을 바탕으로 영상을 만들어 보았습니다.

http://www.td21.com/kb/16471

아놀드

2021.08.19 10:38:06
*.44.198.147

감사합니다! 너무 많은 도움이 되었습니다.

말씀하신대로 데이터가 수정 되는 부분때문에 고민이 좀 있습니다. ^^

아놀드

2021.09.16 10:28:02
*.44.198.147

안녕하세요!!

염치없이 한가지 더 질문 드립니다... ^^

알려주신대로 만들어 사용하면서 테스트해보는 중인데요 혹시 보고서 만든 후 pdf나 이미지 파일로 저장이 가능할까요..? 현재는 인쇄미리보기에서 인쇄만 가능한데 PDF드라이버를 깔아서 프린터 선택을 PDF로 만들게끔 할수는 있지만 바로 파일로 저장하는 기능을 구현해보고 싶어서요... 

감사합니다!

profile

돌직구

2021.09.16 11:31:10
*.38.65.95

좋은 질문이네요~

액세스에서 결과물을 PDF로 만들 때, 'OutputTo' 라는 명령을 사용합니다.

다음과 같이 사용합니다.

'파일 이름을 그때 그때 사용자가 지정하게 하고 싶을 때
docmd.OutputTo acOutputReport,"보고서이름", acFormatPDF

'파일 이름을 자동으로 지정하게 하고 싶을 때
docmd.OutputTo acOutputReport,"보고서이름", acFormatPDF, "경로_및_파일이름"

'파일 이름을 자동으로 지정하게 하고, PDF 생성 후 바로 열리도록 하고 싶을 때
docmd.OutputTo acOutputReport,"보고서이름", acFormatPDF, "경로_및_파일이름", True

더 많은 옵션이 있으니, 액세스 도움말 꼭 참고하시고요~

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 31822
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 27978
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 23110
519 특정 테이블의 필드 값을 다른 테이블로 옮기는 작업 1 1 thedream77 2014-12-18 45465
518 하나의 폼에서 데이터 입력 및 조회 구현 file 1 park 2018-08-22 45318
517 한 필드에서 여러개의 같은 데이터중 한개의 데이터만 가져오는 방법 2 백두산 2020-06-05 42776
516 추가쿼리에서 키위반 오류 문의드립니다 file 3 1 박형근 2022-07-17 36060
515 엑세스로 재고관리대장을 만들계획입니다. 2 1 똥구녕멍멍 2019-04-18 32398
514 외부데이터 "가져오기 오류 - 형식변환실패"의 의미는~? file 1 1 방랑김사깟 2017-02-19 31978
513 액셀의 데이타(하이퍼링크)를 복사해서 기존의 액세스 테이블에 붙이기 file 3 1 광야에서살아남기 2015-08-21 30978
512 이벤트 에러 file 4 1 엑세스29 2017-06-15 29384
511 엑세스 데이터베이스 일관성 에러 문의 1 박상순 2021-02-22 28422
510 목록상자 클릭시 클릭한 COL, ROW의 값 vb로 받아오기 2 쐬주도사 2017-12-15 27982
509 메시지박스의 체크박스로 테이블의 체크박스 컨트롤하기 1 공잇 2016-04-07 27795
508 엑셀파일 불러오기 오류 문의 file 3 기영주 2016-02-16 27446
507 vba에서 날짜 포멧 변환 질문드립니다. 1 1 쐬주도사 2017-12-18 27040
506 액세스 데이터베이스 딜레이 및 멈춤 문제 file 1 3 전맥 2016-10-11 26528
505 통화 필드에 단위($ 또는 \)표시가 저장 안 되게 할 수 있을까요? 3 클로이 2019-07-04 25879
504 리스트박스의 선택된값을 해제 하려면 어떻게해야하나요, 1 김은교 2016-01-16 25785
503 입력식에 유호하지 않는 날짜값이 있습니다. 2 sky3300 2019-03-26 25000
502 사진이나 그림 삽입 방법 1 notebook01 2016-05-01 24840
501 액세스 DB 파일 용량 문제 문의 드립니다. 4 바남풍 2019-08-26 24836
500 텍스트 가져오는 데 문제가 생겨요. 1 당연히나지 2021-01-24 24173


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