16
14단원 보고서 작성을 위한 조회 및 출력기능 14단원 보고서 작성을 위한 조회 및 출력기능 1. 보고서 2. 조회 기능 구현 3. 출력 기능 구현 1/16

14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

14단원

보고서 작성을 위한 조회 및 출력기능

1. 보고서

2. 조회 기능 구현

3. 출력 기능 구현

1/16

Page 2: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

1. 보고서

조회 및 출력기능의 구현 부분에서는 보고서기본형태가 이미 갖춰진 보고서에 서식을 중심으로 일부 컨트롤

을 추가하는 문제와 데이터베이스에 저장되어 있는 데이터의 전체 도는 특정부분에 조건을 적용하여 추출하

는 조회 문제로 이루어져 있습니다. 조회는 출제율이 높은 부분이며, 다양한 조건이 제시될 수 있으므로 숙

달될 때까지 반복연습이 필요합니다.

그러면 보고서 부분부터 차근차근 학습해보도록 하겠습니다.

보고서는 이미 구축된 데이터베이스를 사용하여 여러 형태로 결과를 확인하는 기능을 가진 개체로서, 이미

만들어진 테이블이나 쿼리 등을 이용하여 데이터의 출력이나 요약을 목적으로 새로운 형태로 재가공하는 방

법입니다. 주로 종이에 출력할 때 많이 사용하나 차트, 주소 레이블, 우편 엽서, 기타 업무에 필요한 특정 양

식 등 다양한 출력물로 작성할 수 있습니다.

보고서의 사용법은 폼과 유사합니다. 예를 들어 컨트롤 등의 배치를 통해 사용자가 원하는 형태의 양식을 만

들어 낼 수 있고, 문자열이나 컨트롤 등에 배경 색이나 글자 색을 넣어 사용자의 취향에 맞는 양식을 만들

수 있습니다. 그러나 보고서와 폼의 다른 점이 있다면 보고서는 테이블에 수록된 데이터를 전문적으로 출력

해 내기 위해 만들어 내는 인쇄양식이라고 볼 수 있습니다. 그러면 지금부터 보고서를 직접 만들어 보면서

보고서의 특징을 살펴보도록 하겠습니다.

1) 보고서 만들기

보고서를 만드는 방법에는 마법사를 사용하여 보고서를 만드는 방법과 디자인 보기에서 보고서를 만드는 2

가지 방법이 있는데. 여기서는 마법사를 사용하여 보고서를 만들어 보도록 하겠습니다.

2/16

Page 3: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

데이터베이스 창에서 [보고서]개체를 선택하고 [마법사를

사용하여 보고서 만들기]를 더블클릭합니다.

[보고서 마법사]대화상자의 ‘테이블/쿼리’항목에서 [테이블:

사원목록]을 선택하고 [모두 추가]버튼을 클릭하여 모든

필드를 [선택한 필드]로 옮긴 후 [다음]버튼을 클릭합니다.

[보고서 마법사 2 단계]에서 ‘그룹 수준을

지정하겠습니까?’에서 [부서]필드를 더블클릭한 후

[다음]버튼을 클릭합니다.

[보고서 마법사 3 단계]에서 정렬의 첫 번째 기준을

‘사원번호’로 지정하고 [요약 옵션]버튼을 클릭하여 ‘급여’

필드와 ‘보너스’ 필드의 합계와 평균을 선택하고

[확인]버튼을 클릭하여 [요약 옵션]대화상자를 닫고

[보고서 마법사]대화상자의 [다음]버튼을 클릭합니다.

3/16

Page 4: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

그러 [보고서 마법사 4 단계]는 ‘모양’과 ‘용지방향’을

설정하는 단계입니다. 특별한 설정 없이 [다음]버튼을

클릭합니다.

[보고서 마법사 5 단계]는 보고서 유형을 설정하는 단계로

기본으로 그대로 두고 [다음]버튼을 클릭합니다.

[보고서 마법사 6 단계]에서 저장할 이름에

‘사원목록_보고서’라고 입력한 후 [마침]버튼을 클릭합니다.

그러면 보고서가 만들어 진 것을 확인할 수 있습니다.

2) 보고서의 주요속성

(1) 형식

캡션 제목 표시줄에 표시될 텍스트를 설정한다.

페이지 머리글/바닥글 페이지 머리글/바닥글의 표시 여부를 설정한다.

그룹화 기준 그룹화의 기준으로 사용할 대상을 설정한다.

너비 보고서의 너비를 설정한다.

4/16

Page 5: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

(2) 데이터

레코드 원본 사용할 데이터의 원본을 설정한다.

필터 추출 조건으로 사용할 필터를 설정한다.

필터 사용 지정된 필터의 사용 여부를 설정한다.

정렬 기준 정렬할 기준을 설정한다.

정렬 기준 사용 지정된 정렬의 사용 여부를 설정한다.

(3) 기타

레코드 잠금 원본 테이블이나 쿼리의 레코드를 잠글 것인지를 설정한다.

날짜 그룹화 날짜를 기준으로 하여 그룹화할 때 사용할 날짜 형식을 설정한다.

3) 정렬 및 그룹화

보고서가 통계적 분석 기능을 가지는데 꼭 필요한 수단으로, 사용자가 원하는 정보를 얻기 위해 데이터를

일정한 기준에 따라 정렬하는 작업입니다.

(1) 정렬

특정 필드를 기준으로 오름차순 또는 내림차순으로 정렬합니다. 보고서에서는 필드나 식을 기준으로 열

개까지 정렬할 수 있습니다.

(2) 그룹화

특정한 필드의 값을 기준으로 데이터를 구분하여 표시하는 기능으로 특정 필드를 기준으로 그룹화를 하는

경우 데이터는 그 필드를 기준으로 정렬되어 표시됩니다. 그룹으로 설정한 필드에 그룹 머리글/바닥글,

그룹 설정, 그룹 간격 등의 속성을 설정할 수 있습니다.

(3) 머리글/바닥글에 요약 정보 표시

① 날짜와 페이지 번호

보고서에 현재 날짜와 시간, 인쇄 페이지 수를 표시하는 기능으로, 주로 페이지 머리글과 페이지 바닥글을

이용합니다. ․[삽입]메뉴 - [페이지 번호]나 [삽입]메뉴 - [날짜 및 시간] 메뉴를 이용하여 쉽고 간단하게

삽입할 수 있습니다.

② 집계 정보의 표시

입력란 컨트롤을 이용하여 날짜, 합계, 평균, 레코드 개수 등과 같은 요약 정보를 표시할 수 있습니다.

집계 정보를 페이지 머리글/바닥글에 입력하면 각 페이지마다, 보고서 머리글/바닥글에 입력하면 보고서의

맨 앞/마지막 페이지에 집계 정보가 표시됩니다.

5/16

Page 6: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

③ 누적 총계

보고서 입력란 컨트롤에만 적용되는 속성으로 보고서에서 레코드나 그룹별로 누적값을 계산하는

기능입니다. ․컨트롤 속성의 ‘데이터’ 탭 ‘누적 총계’ 속성을 이용합니다.

아니오 기본값으로, 현재 레코드의 원본으로 사용하는 필드의 데이터를 입력란에 표시한다.

그룹 그룹별로 누적 총계를 계산하여 표시한다.

모두 그룹에 관계없이 보고서의 끝까지 값이 누적된다.

④ 페이지 번호식

컨트롤의 [컨트롤 원본] 속성에 사용자가 원하는 형식으로 페이지 번호 식을 입력합니다.

∙ 페이지 번호 식

현재 페이지 번호는 [Page], 전체 페이지 개수는 [Pages]를 식에 포함시킵니다.

식 결과

=[Page] 1, 2, 3

=[Page]&"페이지“ 1 페이지, 2 페이지, 3 페이지

=[Page] & "/" [Pages] & "페이지" 1/3 페이지, 2/3 페이지, 3/3 페이지

=Format([Page],"000") 001, 002, 003

⑤ 날짜/시간

컨트롤의 '컨트롤 원본' 속성에 날짜 처리 식을 입력합니다.

∙ 현재 날짜 처리 식 예제

식 결과

=Date( ) YY-MM-DD 와 같은 형식으로 현재 날짜를 표시

=Format(Now(), "yyyy-mm-dd")현재 날짜를 YYYY-MM-DD 형식으로 표시

자.. 그러면 이제부터 ‘31 예제.mdb’의 ‘생일자명단’ 보고서를 이용하여 작성된 보고서를 지시한 조건에

맞게 편집해보겠습니다.

▶ <생일검색> 쿼리를 보고서의 레코드 원본으로 설정

▶ 2 차적으로 ‘성별’ 순으로 오름차순 정렬

▶ 반이름 바닥글의 ‘txt 인원수’ 컨트롤에는 해당 반의 인원수가 표시되도록 설정(예:1 명)

▶ 페이지 머리글의 ‘txt 조회월’ 에는 <생일관리> 폼의 ‘cbo 월’ 에 입력된 값이 표시되도록 설정

▶ 매 페이지의 오른쪽 아래에 다음과 같은 형식으로 페이지가 되도록 입력란(txt 페이지) 컨트롤을 생성

- 표시 형식 : 현재 페이지/전체 페이지

6/16

Page 7: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

- 예를 들어 전체 분량이 5 페이지이고 현재 페이지가 2 이면 ‘2 / 5’과 같이 표시

▶ 본문의 ‘txt 반이름’ 컨트롤의 데이터가 이전 레코드와 동일하면 경우에는 표시되지 않도록 설정

▶ 반이름별 한 페이지에 표시되도록 설정

데이터베이스 창에서 [보고서]개체를 선택하고 ‘생일자명단’

보고서를 선택한 후 [디자인]버튼을 클릭하여 [디자인

보기]상태로 전환합니다.

7/16

Page 8: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

보고서 선택기를 더블클릭하여 [보고서]속성 창을

불러냅니다.

[보고서]속성창의 [데이터]탭을 클릭한 후 ‘레코드 원본’

속성의 목록버튼을 클릭하여 ‘생일검색’쿼리를 선택합니다.

[보기]메뉴 – [정렬 및 그룹화]를 선택합니다.

[정렬 및 그룹화] 대화상자에서 ‘필드/식’의 ‘반이름’

아래행의 목록 버튼을 클릭한 후 기준이 되는 ‘성별’필드를

선택하고, 정렬 순서를 오름차순으로 설정합니다.

8/16

Page 9: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

반이름 바닥글 영역의 ‘txt 인원수’ 컨트롤을 더블클릭하여

‘txt 인원수’ 속성 창을 불러냅니다.

[데이터]탭의 ‘컨트롤원본’에 ‘=Count([이름]) & “명”’을

입력합니다.

페이지 머리글의 ‘txt 조회월’ 컨트롤을 더블클릭하여

‘txt 조회월’ 속성 창을 불러냅니다.

[데이터]탭의‘컨트롤원본’에

‘=[Forms]![생일관리]![cbo 월]’을 입력합니다.

9/16

Page 10: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

도구상자가 보이지 않으면 [보기]메뉴 – [도구상자]를

클릭하여 [도구상자]를 불러낸 다음 ‘입력란’ 아이콘을

클릭하고 페이지 바닥글 영역에서 적당한 크기로

드래그하여 입력란을 생성합니다.

레이블 컨트롤은 클릭하여 [Delete]키를 눌러 삭제하고

‘입력란’ 컨트롤을 더블클릭하여 속성창을 불러냅니다.

[기타]탭의 ‘이름’속성에 ‘txt 페이지’를 입력하고,

[데이터]탭의 ‘컨트롤원본’에 ‘="" & [Page] & " / " &

[Pages]’ 을 입력합니다.

10/16

Page 11: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

2. 조회 기능 구현

1) ApplyFilter 매크로 함수

매크로 함수 인수 설명

필터 이름 레코드를 추출하는 조건, 쿼리 또는 쿼리로서 지정한 필터를 지정.

Where 조건문

레코드를 추출하는 조건식으로 256 자까지 가능

- 형식 : [필드명] [연산자] [조건식]

필드명은 원본이 되는 테이블/쿼리의 필드 이름

- 문자열을 지정하는 경우에는 큰따옴표(“ ”) 로 묶음

(예:[성별]=“남”)

- 날짜를 지정하는 경우에는 샵(#)으로 묶음

(예:[생년월일]>#70/01/01#)

- 다른 폼 필드의 데이터를 Where 조건으로 사용할 경우

[필드명]=Forms![폼명]![컨트롤명] 형식으로 반드시 등호(=) 뒤

부분에는

Forms![폼명]![컨트롤명] 처럼 전체 경로로 작성해야 함

∙ 구문 : Docmd.ApplyFilter [필터이름],[Where 조건문]

2) OpenForm 매크로 함수

매크로 함수 인수 설명

폼이름 열고자하는 폼의 이름

보기 형식 폼을 어떤 상태로 열 것인지 결정(폼,디자인,미리보기,데이터시트)

필터 이름 폼에 나타날 레코드를 제한하는 필터의 이름

Where 조건문 폼에서 데이터를 검색할 때 사용하는 식

데이터 모드 폼의 데이터 입력 모드(추가,편집,읽기전용)

창 모드 폼의 창 모드(기본,숨김,아이콘,대화상자)

구문 : Docmd.OpenForm 폼이름,[보기형식],[필터이름],[Where 조건문],[데이터모드],[창모드]

11/16

Page 12: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

3) Filter 속성

① Filter 속성 : 레코드를 추출하는 조건을 문자열 식으로 지정합니다.

예 1) Me.Filter = "성별=‘여’“

: “성별” 필드의 값이 "여“인 레코드를 추출합니다.

예 2) Me.Filter = "입사일 Between #02-1-1# And #02-12-31#“

: “입사일” 필드의 값이 02 년 1 월 1 일부터 02 년 12 월 31 일까지의 레코드를 추출합니다. 날짜/시간

데이터 형식의 값일 경우에는 앞뒤에 #기호가 붙어야 합니다.

② ∙ FilterOn 속성 : 설정한 필터의 유효성을 지정합니다.

설정한 필터를 유효하게 할 때에는 FilterOn 속성에 'True'를 설정합니다.

4) 코드 작성시 유의사항

∙ 모든 식은 양쪽에 큰따옴표(“ ”)로 묶음. (단, 컨트롤 이름과 변수는 제외)

∙ 식에 포함된 문자열은 작은 따옴표(‘ ’)로, 날짜/시간은 샵(#) 기호로 묶음

∙ 한 문장을 여러 행으로 입력할 경우 : 문장 끝에서 한 칸의 공백을 삽입한 후 밑줄(_) 입력

∙ 앰퍼센트(&) : 단어와 단어를 연결하는 연산자, 앞뒤에 공백이 삽입되어야 함

예 1) 성별이 ‘남’ 인 값을 검색

Docmd.ApplyFilter ,"성별=‘남’“

예 2) 현재 폼에서 남,여를 ‘txt 성별’ 컨트롤로 입력을 받아서 검색을 한다면

Docmd.ApplyFilter ,"성별=‘“ & Me!txt 성별 & ”’“

‘txt 성별’ 컨트롤에는 문자가 입력되므로 작은 따옴표(‘ ’)로 묶어야 함

그러면 실습을 통해 조회 기능을 학습해 보도록 하겠습니다.

예제.mdb’의 ‘생일관리’ 폼 머리글의 ‘cbo 월’ 컨트롤의 값이 변경되면(Change) 다음과 같이 수행하도록

구현하시오.

12/16

Page 13: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

▶ ‘cbo 월’ 에서 선택한 월과 일치하는 유치원생들을 조회하도록 설정하시오.

▶ 예를 들어 ‘cbo 월’에서 ‘2 월’을 선택하면 생년월일에 월이 ‘2 월’인 유치원생들을 필터하도록

설정하시오.

▶ 필터(Filter) 기능을 이용하시오.

데이터베이스 창에서 [폼]개체를 선택한 후 ‘생일관리’ 폼을

클릭하고 [디자인]버튼을 클릭하여 [디자인 보기]로 연 후

폼 머리글의 ‘cbo 월’에서 더블클릭하여 속성 시트를

불러냅니다.

속성 시트 [이벤트] 탭의 ‘On Change' 이벤트에서

(작성)을 클릭하여 [작성기 선택] 대화상자가 표시되면

‘코드 작성기’를 선택한 후 [확인] 버튼을 클릭합니다.

여기서 잠깐!

원본으로 연결된 ‘생년월일’ 필드의 값에서 월만 추출하도록 가공해야 하므로 매크로로 작성을 할수

없습니다. 매크로를 사용할 경우에는 원본 필드명이 사용되어야 합니다. 따라서 코드 작성기를 이용합니다.

여기서는 ApplyFilter 메서드를 이용하겠습니다. Filter 속성이나 OpenForm 메서드를 사용해도 무방합니다.

13/16

Page 14: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

Visual Basic Editor(VBE) 창의 cbo 월_Change() 이벤트

프로시저를 다음과 같이 작성합니다.

B :‘생년월일’ 필드의 월과 ‘cbo 월’ 컨트롤의 왼쪽에서 1 자리나

2 자리 값을 추출한 결과와 일치하는 것을 검색하도록 지정한

것입니다. 여기서 추출된 결과는 숫자이므로 어떠한 기호도

붙이지 않습니다.

∙ Month(날짜)는 지정한 날짜의 월 부분만 표시하는 함수이며,

Left(텍스트, 숫자)는 텍스트의 왼쪽에서 지정한 숫자만큼

추출하는 함수입니다. Len(텍스트)는 텍스트의 길이를

계산합니다.

∙ 현재 ‘cbo 월’ 컨트롤의 값이 1 월, 2 월로 저장되어 있으므로

숫자만 추출해야 합니다. 그런데 숫자는 1 자리와 2 자리 두

종류이므로 전체 길이를 계산하여 “월”이라는 문자 1 자리를

빼면 1 자리 또는 2 자리를 추출할 수 있습니다.

변경된 내용을 저장합니다.

14/16

Page 15: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

3. 출력 기능 구현

4) OpenForm 매크로 함수

매크로 함수 인수 설명

보고서이름 열고자하는 보고서 이름

보기 형식 보고서를 어떤 상태로 열 것인지 결정(인쇄 미리 보기, 디자인 모드)

필터 이름 보고서에 나타날 레코드를 제한하는 필터의 이름

Where 조건문 보고서에서 데이터를 검색할 때 사용하는 식

∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문]

그러면 실습을 통해 출력 기능을 학습해 보도록 하겠습니다.

31 예제.mdb’의 ‘생일관리’ 폼 머리글의 ‘인쇄’ 버튼(cmd 인쇄)을 클릭할 때 다음과 같은 기능을

수행하도록 구현하시오.

▶ 생일자명단> 보고서를 ‘미리보기’의 형태로 여시오.

▶ ‘cbo 월’ 컨트롤에 입력된 값에 해당하는 유치원생만 대상으로 하시오.

데이터베이스 창에서 [폼]개체를 선택한 후 ‘생일관리’ 폼을

클릭하고 [디자인]버튼을 클릭하여 [디자인 보기]로 연 후

폼 머리글의 '인쇄(cmd 인쇄)‘ 컨트롤을 선택합니다. 마우스

오른쪽 버튼을 클릭하고 [이벤트 작성]을 선택하여 [작성기

선택] 대화상자가 표시되면 ‘코드 작성기’를 선택한 후

[확인] 버튼을 클릭합니다.

15/16

Page 16: 14단원 보고서 작성을 위한 조회 및 출력기능 · ∙ 구문 : Docmd.OpenReport 보고서이름,[보기형식],[필터이름],[Where 조건문] 그러면 실습을 통해

14단원 보고서 작성을 위한 조회 및 출력기능

Visual Basic Editor(VBE) 창의 cmd 명단_Click() 이벤트

프로시저를 다음과 같이 작성합니다.

∙B : “생일자명단” 보고서를 미리보기 형태로 여는 식입니다. 단

‘생년월일’의 월과 ‘cbo 월’의 값과 동일한 레코드만표시합니다..

아이콘을 클릭하여 저장합니다.

16/16