드로우홀릭 더베이직

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

2021.07.13 00:09:21 조회 수 90 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 17374
공지 좋은 답변을 이끌어 내는 방법 돌직구 2017-07-14 16410
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 19383
436 직장인 실무 액세스 디버그 관련 질문입니다. 1 chaBR21 2021-08-05 46
435 상위폼 하위폼에서 상위폼 데이터 저장이 안된다고 합니다. 2 탈야마 2021-08-03 38
» 보고서 완료 후 체크박스 상태 변경 7 아놀드 2021-07-13 90
433 엑세스 쿼리 명령문 문의 1 박상순 2021-07-12 70
432 [직장인을 위한 실무 액세스] 책의 첨부 파일을 받고 싶습니다. 1 darkhead 2021-04-25 499
431 openForm으로 폼을 띄워서 기존 테이블에 있는 정보를 채워 넣고 싶습니다. 3 darkhead 2021-04-21 494
430 보고서를 이렇게도 만들수 있을까요....???? 1 아놀드 2021-04-20 550
429 엑세스 데이터베이스 일관성 에러 문의 1 박상순 2021-02-22 752
428 조회 폼 모듈 컴파일 오류... 3 하나하나 2021-02-17 777
427 ebook 관련 질문입니다. 2 David 2021-02-09 1463
426 SQL에 대한 궁금즘 2 겨루기 2021-02-03 2252
425 튜터링 서비스 문의드립니다. 1 vrn001 2021-02-02 749
424 텍스트 가져오는 데 문제가 생겨요. 1 당연히나지 2021-01-24 766
423 intel vs amd 2 겨루기 2021-01-20 2047
422 유료수강 문의드립니다. 1 정도하 2021-01-16 2288
421 시스템 공유 문제 해결방안 제안 요청드립니다. 4 vrn001 2021-01-15 2619
420 TFaccess - Error in loading DLL (48) 오류 file Jay 2021-01-09 2320
419 실무 액세스 2 "참조"부분 file 3 키스톤 2020-12-22 2801
418 외부테이터 불러오기 중 file 2 키스톤 2020-12-09 971
417 로그온폼 만들기 강의중에 이미지가 안보입니다. file 4 키스톤 2020-11-26 2134


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