컴퓨터활용능력 1급(실기)/엑세스

[엑세스] 문제3. 조회 및 출력 기능 구현

초록초록해 2025. 3. 4. 16:18

1. 보고서 

·  바닥글을 서로 다른 페이지에 출력되게 설정: 바닥글 클릭 > 우클릭 > 속성 > 형식 > 페이지 바꿈: 구역후

=D함수("구할 필드명","원본","조건“)
cf. 조건 내 문자가 들어가면 작은 따옴표를 붙임 (예) "양식 = '치킨'"

 

단, 모든 D함수가 저런 형태는 아니다. 

(예) 회계정보 테이블의 년도 중 가장 큰 값이 txt프렌차이즈 컨트롤에 표시되도록 이벤트 프로시저를 구현하시오

(답) txt프렌차이즈=Dmax("년도", "회계정보")

 

 


(24_03_3번) Txt도서관수에는 다음 지시에 따른 건수가 나오도록 하시오. 담당일이 빈 셀인 경우 휴관이며 빈 셀이 아닌 경우 이용가능수에 포함한다. (Dcount, IS NULL, NOT, &). '점수'를 이용해 개수를 구하라
* 해당 보고서의 원본은 도서관점검이라는 것을 찾았으며 도서관점검에는 점수와 담당일 모두 있음을 확인했다

=Dcount("점수", "도서관점검","담당일 IS NULL")  < 담당일이 빈 셀인 경우 (휴관)
=Dcount("점수", "도서관점검","담당일 IS NOT NULL") < 담당일이 빈 셀이 아닌 경우(이용가능)

 

 


(24_03_3번) 학생관리 폼에 txt교육청명에는 교육청명이 나오게 하시오 

폼의 교육청코드를 교육청정보 테이블과 매칭해 관련한 교육청명을 추출하시오

Dlookup 사용(단, 폼 화면에는 교육청 코드가 없다)


=DLookUp("교육청명","교육청정보","교육청코드 = txt교육청코드")
라고 하면 오류가 날 것이다. 왜냐하면 txt교육청코드는 어디에도 없는 개체이기 때문.
그러면 학생관리 폼의 원본을 확인하면 교육청별 학생관리인데 거기에는 교육청코드가 있다.근데 얘는 폼이 아니라 컨트롤이 없다(..) 하지만 일단 원본에 연결되어있으므로 끌어쓰면 된다.
=DLookUp("교육청명","교육청정보","교육청코드 = [forms]![학생관리]![교육청코드]") 이런식이다

 

 


(23_02_3번) 시공현황폼의 Txt개수에는 시공사별 개수가 표현하도록 구현하라. 시공사 테이블을 참조하고, Dcount를 이용하시오.
확인결과 시공사 테이블에도 시공사와 순번 등이 있으며 시공현황폼에도 Txt개수가 있다.

개수를 구하기 위해 가져오는 대상은 무엇이든 상관없다

시공사 테이블에는 순번이 있으므로 순번을 가져온다.

=Dcount("순번", "시공사", "개수=txt개수")

 

 


(23_01_3번) txt봉사장소에는 [주소] 필드의 ',' 다음의 글자를 추출하여 아래와 같은 형태로 표시하시오

▶ 표시 예: [주소] 서울시 도봉구, 가람'  > 가람초등학교

▶ RIGHT, LEN, INSTR 이용

 

① =Instr(필드명, "찾는 문자열")

② =Len([주소])

③ =Right([주소], Len([주소])- Instr(필드명, "찾는 문자열")-1) & "초등학교"

 

 


(23-01) 보고서 머리글의 내용도 페이지마다 표시되도록 적절히 이동시킨 후 보고서 머리글의 높이를 0으로 지정하시오

> 개체를 페이지 머리글로 옮기기

 


(24_01_03) 만약 #,###이 숫자로 표현되지 않고 #,### 기호 그대로 나오는 경우는?

=Format(Sum([점수]),"점수 합계 #,###점") 이라고 엔테를 치면

=Format(Sum([점수]),"""점수 합계 ""#,###₩점") 이렇게 된다

=Format(Sum([점수]),"""점수 합계 : ""#,###₩점") 사이에 :를 넣으면 된다


(24_03) "분류"가 변경되면 매 구역 전에 페이지도 변경되도록 설정하시오

개체로서의 분류를 건드리는 게 아니다. 해당 보고서를 보면 분류는 카테고리로서 작동한다. 이떄 분류가 변경되면 매 구역 전에 페이지도 변경되도록 설정하라고 했으므로 분류머리글을 건드려야 한다. 


(24_03) Txt시도에는 시도코드와 시도명이 출력되도록 하시오. (예) 가-01 서울시

(답) =[시도코드]&" "&[시도명]

 


2. 프로시저 만들기 

 

(24_02) 학생관리 폼의 Txt검색 컨트롤 내에 학과명을 입력하고 cmd조회 버튼을 클릭하면 다음 기능을 구현하시오.

  Txt검색 컨트롤에 입력된 글자를 포함하는 자료들의 모든 항목을 조회하시오
▶ <학생> <학과> 테이블 및 RECORDSOURCE, INNERJOIN

 

① 원본 테이블에 필요한 요소가 있는 지 확인한다. 
▷ 없는 경우
② 기존 쿼리를 끌어서 쓴다(D함수의 경우)
③ 콤보상자에 숨겨진 요소가 있다
④ 쿼리를 직접 새로 만들어서 SQL문을 뽑는다

 

문제에서 INNER JOIN이라고 했으니 쿼리를 만들어서 SQL문을 뽑는 방식이다. 

Txt검색 컨트롤에 입력된 글자를 포함하는 자료들의 모든 항목을 조회하라는 말은 ★ 학과명 = Txt검색을 쓰라는 것이다. 

쿼리만들기 > 학생 - 학과 테이블 더블클릭 > 학생은 원래 있는 항목이라 모두 추가 + '학과명'  > SQL문 복사
프로시저 > 매크로 


Me.RecordSource = "SELECT 학생.*, 학과.학과명 FROM 학생 INNER JOIN 학과 ON 학생.학과코드 = 학과.학과코드 
WHERE 학과명 LIKE '*" & Txt검색 & "*' "

 

 


(23_02) 학교교실관리폼의 Txt교실수 컨트롤을 더블 클릭하면 다음과 같은 기능을 수행하도록 프로시저를 구현하시오

▶ 교실수가 40이상인 자료들만 표시하시오

▶ Filter, FilterOn 이용

① Txt교실수가 있는 학교교실관리폼의 원본 레코드를 확인한다.

② 원본 레코드의 교실수 항목이 숫자인지 텍스트인지 확인한다. 

③ 숫자라면 식을 쓸 수 있으므로 다시 돌아와 식을 써준다


Private Sub Txt교실수_DblClick(Cancel As Integer)
 Me.Filter = "교실수 >= 40"
 Me.FilterOn = True

End Sub

 

 


(23_01) 고객관리 폼에서 Txt조회 컨트롤에 고객명의 일부를 입력하고 Cmd검색을 클릭하면 다음 기능을 수행하도록 구현하시오
▶ Txt조회가 비어있다면 아래와 같은 메시지상자가 나오게 하시오
    [입력오류] [고객명을 입력하시오] [확인]
▶ Txt조회가 비어있지 않다면 Txt조회 컨트롤에 입력된 글자를 포함하는 자료들을 표시하시오. Filter, FilterOn, If 이용

※ 다음과 같은 프로시저를 구현하였다. 틀린 부분을 고치시오
Private Sub Txt조회_Click()

If Txt조회 = "" Then
 MsgBox "고객명을 입력하시오", vbOKOnly, "입력오류"
 
Else
 Me.Filter = Txt조회
 Me.FilterOn = True
 
End If
End Sub
↓                    ↓                                                                                                                                                   
(정답) Private Sub Txt조회_Click()

If Isnull(Txt조회) = True Then                                             ▶ 엑세스에서는 ""이 적용되지 않는다. 
 MsgBox "고객명을 입력하시오", vbOKOnly, "입력오류"
 
Elseif Isnull(Txt조회) = False Then
 Me.Filter = "고객명 Like '*" &  Txt조회 & '*"                         ▶ 무엇의 일부를 Txt조회에 적었더니 필터가 작동된다

                                                                                                고객명 = Txt조회이나 일부이므로 양쪽에 별표를 넣어주고

                                                                    별표가 들어갔으므로 Like를 쓰며 짝홀짝 짝홀짝 공식으로 콤마를 변경한다. 
 Me.FilterOn = True
 
End If
End Sub

 

 


(24_01) 소방관명단 폼의 Txt근무년수 컨트롤을 더블클릭 시 다음과 같은 기능을 수행하는 업무시간출력 매크로를 구현하시오

▶ Txt근무년수가 4~7에 해당하는 지료에 대해서만 아래와 같은 메시지 상자가 나오게 하고, 메시지 상자에서 확인을 누르면(메시지 상자가 닫히면) 소방업무시간 폼이 읽기전용모드로 열리면서 소방관명단 폼이 닫히게 하시오. 해당 폼이 닫힐 때 자동으로 저장되도록 지정하시오

단, 점검일자는 시스텤의 오늘 날짜와 시간이다.

 

If















End If
[forms]![소방관명단]![txt근무년수] >= 4 and [forms]![소방관명단]![txt근무년수] <= 7 Then
MessageBox
                     메시지   ="점검일 : " & now()
OpenForm
                     폼이름  소방업무시간
                     보기형식 
                     데이터모드 읽기 전용
CloseWindow
                     개체유형
                     개체이름 소방관명단
                      저장       

 

[팁] 매크로 만들기에서의 where 조건은 항상 외부폼으로!


(24_02) 학교현황의 cmb조회월을 변경하면 다음과 같은 기능을 수행토록 프로시저를 구현하시오. 설립일자가 cmb조회월에 입력된 월과 일치하는 항목을 표시하고 Txt관할교육청으로 포커스를 이동하시오. RECORDSOURCE, MONTH, SETFOCUS 이용

 

원본 레코드는 '학교정보'이며 해당 레코드 내 설립일자 필드가 있다. 학교현황 폼의 cmb조회월에는 "월"만 있다. 

비교할 컨트롤명이 문자열일때 Me.Filter = " 필드명 = ' " & 컨트롤명 & " ' "
비교할 컨트롤명이 문자열의 일부와 일치할 때 Me.Filter = " 필드명 like '*" & 컨트롤명 & "*' "
비교할 컨트롤명이 숫자 혹은 논리값일때 Me.Filter = " 필드명 = " & 컨트롤명
비교할 컨트롤명이 날짜형일때 Me.Filter = " 필드명 = # " & 컨트롤명 & ' # "

 

Private Sub Cmb조회월_Change()

Me.RecordSource = "Select * from 학교정보 where month(설립일자) = " & Cmb조회월
                               ← Cmb조회월은 완벽한 날짜형이 아니라 숫자(월)이다. 
Txt관할교육청.SetFocus

End Sub

(24_02) Cmd정렬 컨트롤명에 현재 폼의 데이터를 '개강일' 필드 기준으로 내림차순 정렬하는 프로시저를 작성하시오. Orderby, OrderByOn 이용

Private Sub Cmd정렬_Click()


Me.OrderBy = "개강일 desc"
Me.OrderByOn = True


End Sub

(24_04) 대여소관리 보고서의 Txt활동지역을 더블클릭하면 활동지역에 맞는 '시간당가격'과 '관리주체'가 나오도록 설정하시오(DLOOKUP) 대여관리 테이블을 참조하시오

 

< 대여소관리 보고서

 

 

 

 

 

 

 

 

 < 원본테이블인 '대여소'

 

보다시피 '시간당가격'이 있다

사실 원본폼에도 이에 따라 시간당가격이 버젓이 나와있다. 

 

 

 

< 문제에서 참조하라고 제시한 테이블인 '대여관리'

 

 

 

 

 

Private Sub Txt활동지역_DblClick(Cancel As Integer)

MsgBox "가격 : " & 시간당가격 & "원(" & DLookup("관리주체", "대여관리", "활동지역 = TXT활동지역") & ")", vbOKOnly


End Sub

 


(24_04) 도서관현황관리 폼의 Txt도서관코드를 클릭하면 다음과 같이 도서관내역관리 폼이 열리면서 도서관현황관리 폼을 닫히도록 프로시저를 구현하시오.

▶ 도서관현황관리에서 클릭한 레코드의 '도서관코드'와 동일한 자료만이 '도서관내역관리'폼에 표시되도록 지정하라

▶ 도서관현황관리 폼이 닫힐 때 자동으로 저장되도록 설정하시오. Docmd.Openform, Close 이용

  여는 명령
폼 열기 Docmd.openform "폼이름", acNormal,, "조건"
보고서 열기 Docmd.openreport"폼이름", acNormal,, "조건"
  닫는 명령
폼 닫기 DoCmd.Close acForm, "폼이름", acSave여부

 

Private Sub Txt도서관코드_Click()

DoCmd.OpenForm "도서관내역관리", acNormal, , "도서관코드 = '" & Txt도서관코드 & "'"

DoCmd.Close acForm, "도서관현황관리", acSaveYes

End Sub

 

[팁] '도서관내역관리의 도서관코드와 도서관현황관리의 txt도서관코드를 비교

 

[24_04]