티스토리 뷰

하위폼

 

1-1. 하위폼으로 추가하기

· 하위폼과 상위폼의 사이를 클릭하여 오렌지 색이 나오도록 한 후 우클릭

> 속성시트 > 데이터 > 원본개체 및 기본 필드 연결(하위 필드 연결) 

즉 두 테이블의 원본을 열어 동시에 가지는 필드를 확인함

 

1-2. 하위폼의 속성 설정 

· 구분 선, 탐색 단추, 레코드 선택기가 표시되지 않도록 관련 속성을 설정하시오
→ 하위폼의 빈 공간(회색지대) 우클릭 > 형식에서 바꾸기

 

1-3. 본문 영역에서 탭이 다음 순서대로 정지하도록 관련 속성을 설정하시오

- 탭 순서 설정 방법: 본문 클릭 > 우클릭 > 탭 순서 > 드래그 해서 직접 바꾸기

 

속성 시트

 

2-1. 폼 속성

· 폼이 가동되면 커서가 Txt금액 컨트롤에 나타나 있도록 탭 정지를 위해 탭 순서를 변경하시오: 탭 인덱스 > 0부터 적기

· 폼이 열려있을 경우 다른 작업을 수행할 수 없도록 설정하시오: 모달 > (예)

· 포커스가 이동되지 않도록(=탭이 전환되지 않도록) 설정하시오: 탭 정지 > (아니오)

· Txt금액과 바운드된 값을 폼에서 수정하지 못하지만 해당 컨트롤로 포커스가 이동하시오: 잠금

· Txt금액은 활성화되지 않도록 설정하시오: 사용가능 > 아니오

· 팝업창이 보이도록 설정하시오: 팝업 > 예

· 숫자값 기준으로 소수점을 나타낼때: 형식 > 표준, 소수 자릿수 설정

· 교차 배경색 = 다른 배경색

 

2-2. 컨트롤 원본

· 개수를 구하는 함수: =Count(*)

· 필드가 비어있다 (빈 값(null)이 있는 경우): =isnull([필드명])

· 필드가 비어있지 않은 (빈 값(null)이 없는 경우): =not(isnull([필드명]))

· Txt강의시작시간이 오후 12시 이전이라면: [Txt강의시작시간] >= #12:00#

 

 


이벤트 프로시저

 

  Me 나는.명령 한다(=) "어떤 조건"
기준으로 정렬 Me.OrderBy = "피자 asc(desc)" 
Me.OrderByOn = True
파자를 기준으로 오름차순 조회하라
조건 만족 자료 추출 Me.Filter = "조건" 
Me.FilterOn = True
(예)나는.필터 한다(=)
피자가 txt조회에 입력된 값과 같은 레코드만 표시하도록 설정
Me.Filter =  "피자 = '" & txt조회 &"'"
Me.FilterOn = True
Me.recordsource = "Select * From 테이블명 Where 조건식(필드명=컨트롤명)"
  Docmd 명령한다.
컨트롤로 포커스 이동 Docmd.GoToControl “컨트롤명" 명령한다.가라 "무엇이"
열기 Docmd.OpenForm "이름",보기형식,,조건식
명령한다.폼을열어라 "이름",보기형식,조건
보고서를 인쇄 미리보기로 여시오
Docmd.OpenReport "보고서명", acViewPreview, ,
" 피자 = ' " & cmb조회 & " ' " ← 문자 일 때
폼을 폼 보기 형태로 여시오
Docmd.OpenForm “폼이름”, , ,
“고객번호=” & txt고객번호 ← 숫자 일 때
닫기 Docmd.Close 명령한다.닫아라
표시 Docmd.ApplyFilter, 명령한다.필터를적용하라고,

 

 

 

(문제) Txt프렌차이즈명 컨트롤 내에 프렌차이즈명을 입력하고 cmd검색 버튼을 클릭하면 다음 기능을 수행하도록 하시오
▶ Txt프렌차이즈명 컨트롤에 입력된 글자를 포함하는 자료들의 모든 항목을 가져오되 수량의 내림차순으로 표시하시오


ⓐ 모든 항목이므로 select 다음에는 *  
ⓑ from 다음에 적을 항목은 원본테이블이므로, '치킨판매'라는 것을 직접 찾아서 확인 
ⓒ where 다음에는 조건이 나와야 하는데 프렌차이즈명 = Txt프렌차이즈명에서 더 나아가 '입력된 글자를 포함하는 자료'라는 조건이 있으므로 프렌차이즈명 like "*" & Txt프렌차이즈명 & "*"  > 이런 경우 강약강 강약강 공식을 사용 (큰따옴표=강, 작은따옴표=약)
ⓓ 수량의 내림차순이므로 order by 수량 desc


(정답) Me.RecordSource = "select * from 치킨판매 where 프렌차이즈명 like '*" & Txt프렌차이즈명 & "*' order by 수량 desc"


  만약 프렌차이즈수 = cmb프렌차이즈명처럼 숫자=숫자였다면? (24-3)

Me.RecordSource = "select * from 치킨판매 where 프렌차이즈수 = " & Cmb프렌차이즈수

 

 

▶ Isnull(cmb조회): cmb조회 컨트롤에 조회가 선택되지 않은 경우

 

 

만약 Txt조회가 비어 있다면~                           If IsNull(Txt조회) = True  Then
▶ 만약 Txt조회가 비어있지 않다면~                    If IsNull(Txt조회) = False Then

 

 

▶ '성적' 필드를 기준으로 내림차순인 경우

Me.OrderBy ="기준필드 desc"    
Me.OrderByOn = True

 

 

(24_02_3번) 학생관리 폼의 Txt검색 컨트롤 내 학과명 을 입력하고, Cmd조회 버튼을 클릭하면 다음과 같은 기능을 수행하도록 구현하시오. Txt검색 컨트롤에 입력된 글자를 포함하는 자료들의 모든 항목을 표시하시오. <학생>, <학과> 테이블과 RECORDSOURCE, INNERJOIN을 이용하시오

 

Txt검색에 학과명을 입력해야 하는데 학생관리폼에는 학과명이라는 개체가 없다. 그러므로 다른 테이블에서 가져와야 한다. 

원본레코드인 '학생'에는 없지만 문제에서 참고하라고 한 '학과' 테이블에는 '학과명'이 있다는 것을 확인할 수 있다. 

그럼 둘을 연결해서 가져와야 한다.

 

▷ 힌트: INNERJOIN을 이용하라는 말은? 곧 쿼리 구문을 만들어서 복사 + 붙여넣기를 하라는 뜻

 

① 학생, 학과 테이블을 열어서 INNERJOIN 할 만한 "겹치는 개체"가 있는 지 확인한다. "학과코드"가 겹친

② 쿼리만들기 > 학과코드를 INNERJOIN, 즉 연결해준다(1번 방식)

③ '학생관리' 폼의 원본은 '학생' 테이블이다. '학생관리' 폼에서 필요한 개체는 '학생'의 모든 개체와 '학과'에 있는 '학과코드'가 필요하다. (더블클릭)

④ SQL 보기에서 SELECT 학생.*, 학과.학과명 FROM 학생 INNER JOIN 학과 ON 학생.학과코드 = 학과.학과코드 (맨끝의 세미콜론 지우기)를 복사한다

⑤ 매크로를 만들어준다. 이렇게 Select문을 복붙할 때는 Me.RecordSource 구문을 사용한다. 

Me.RecordSource = "Select 필드명 From 테이블 Where 조건"

 

Private Sub Cmd조회_Click()


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

 

End Sub

 

 

 

(문제) '도서관현황관리'폼의 Txt도서관코드를 클릭하면 다음과 같이 도서관내역관리 폼이 열리면서 '도서관현황관리' 폼을 닫히도록 프로시저를 구현하시오
> 도서관 현황관리에 클릭한 레코드의 도서관코드와 동일한 자료만이 도서관내역관리 폼에 표시되도록 지정하시오
> 도서관현황관리폼이 닫힐 때 자동으로 저장되도록 설정하시오
> Docmd.OpenForm, Close 이용

DoCmd.OpenForm "도서관내역관리", acNormal, , "도서관코드 = '" & Txt도서관코드 & "'"
DoCmd.Close acForm, "도서관현황관리", acSaveYes

 

(24_03) 시행일정 폼의 T시도코드를 더블클릭 시 아래와 같은 메시지 상자가 나오도록 설정하시오. 시도코드 끝자리가 1이면 특별시, 2이면 광역시, 3이면 특별자치시, 4이면 도, 5이면 특별자치도.(SELECT CASE, RIGHT 이용)

< 틀린 부분을 수정하시오 >

Private Sub T시도코드_DblClick(Cancel As Integer)
Select Case Right(시도코드, 1)
 Case Is = 1                                                       > T시도코드의 형식은 일반텍스트이므로 숫자라 Case "1"
 MsgBox 시도명 & "특별시", vbOKOnly
 
 Case Is =  2
 MsgBox 시도명 & "광역시", vbOKOnly
 
 Case Is = 3
 MsgBox 시도명 & "특별자치시", vbOKOnly
 
 Case Is = 4
 MsgBox 시도명 & "도", vbOKOnly
 
 Case Is = 5
 MsgBox 시도명 & "특별자치도", vbOKOnly
 
End Select
End Sub

 

D함수 

 

(예제) 보카로현황 폼의 'Txt개수'에는 보카로회사별 개수가 표시되도록 구현하시오. 각 레코드에는 표시된 보카로회사에 해당하는 자료의 수를 아래 예처럼 표시하시오. Dcount와 iif를 이용하되 '보카로회사자료' 테이블을 활용할 것

[표시 예 : 보카로회사 개수가 0개라면 > 보카로회사 없음, 보카로회사 개수가 2개라면 > 총 개수 : 2개]

 

 

원본자료를 확인했는데 쓸 만한 게 없다면 문제에서 참고하라고 한 테이블(보카로회사자료)을 확인한다.

한편 Dcount, 즉 개수를 구하므로 계산할 필드는 참조테이블인 보카로회사자료의 '어떠한' 개체라도 상관이 없다

(그냥 칸 자체를 세기만 하면 되니까) 보통 순번/번호처럼 순서가 바뀔 수록 1씩 커지는 자연수로 많이 한다.

'번호'라는 개체로 계산한다고 가정하자. 

① "번호"

② 참고한 테이블인 "보카로회사자료"

③ 조건인데, 조건의 경우 겹치는 개체를 쓰므로 보카로현황폼과 보카로회사자료에서 겹치는 개체를 찾아본다. '보카로회사'

 

=Dcount("번호", "보카로회사자료", "보카로회사=Txt보카로회사")

 

 

 

(24_02) 총 휴가가능일은 휴가 가능일은 휴가가능일 - 휴가시작일과 휴가종료일의 차이값이다. (datediff) (예) 36 (단위:일)

(답) datediff("d", 휴가시작일, 휴가종료일)

 

 


(24_02) 제품관리 폼의 하위폼에 있는 Txt만족도평균에는 다음과 같은 평균이 나오도록 설정하시오

▶ '제품명'에 따른 '만족도점수'평균이 나오도록 하시오. DAVG

 

① 비교할 두 개체 제품명과 만족도 평균이 원본 레코드(제품판매리스트)에 있는 지 확인한다

②  없다면 기본폼의 원본 레코드(제품)에 두 개체가 있는 지 확인한다

③ 두 개체를 모두 가진 레코드를 찾을 수 없는 경우 두 개체를 가진 요소 혹은 "쿼리"를 직접 클릭해서 찾아야 한다

④ 상위/하위 폼에 있는 요소의 경우 콤보상자로 첫 행이 0이라서 SELECT문에 숨겨져 있는 경우가 있고

    그렇지 않은 경우 "쿼리"에 있다

 

=DAvg("만족도점수","제품내역","제품명 = [forms]![제품관리]![txt제품명]")

 

 


(24_01) 교수담당일정 폼의 Txt교수명에는 다음 지시에 따라 교수명이 나오도록 설정하시오. 교수 테이블의 교수코드 를 참조해 그에 맞는 교수명 을 가져오시오. 단, Cmb과목코드의 행원본에는 'SELECT 과목별교수.과목코드, 과목별교수.과목명, 과목별교수.교수코드 FROM 과목별교수' 라고 적혀있는 것을 확인했다. 형식의 열너비에는 1cm;1cm;0cm이다. 

실제 문제에서는 Cmb과목코드에 교수코드가 있는 것을 알려주지 않고 직접 찾아야 한다. 즉 콤보상자에 숨어있는 형태이다.    
열번호, 즉 Column값은 0번지부터 시작한다.  그러므로 과목별교수.교수코드는 2번지에 있다. 

=Dlookup("교수명", "교수", "교수코드 = '" &  cmb과목코드.column(2)"'")

 

(24_03) 학생관리 폼에 Txt교육청명에는 다음 지시에 따라 교육청명이 나오도록 설정하시오

▶ 폼의 교육청코드를 교육청정보 테이블과 매칭해 관련 교육청명을 추출하시오(DLOOKUP사용) 폼 화면에는 교육청코드가 없음

 

학생관리 폼의 원본은 교육청별학생관리 테이블임을 확인했고, 해당 테이블에는 교육청코드가 있다. 

교육청정보 테이블에는 교육청코드가 있다.

 

=DLookUp("교육청명","교육청정보","교육청코드 = [forms]![학생관리]![교육청코드]")

 

① 왜 작은따옴표로 구분하여 "교육청코드 = '" & [Forms]![학생관리]![교육청코드] & "'")로 쓰지 않는가?

작은 따옴표로 구분하는 경우는 컨트롤과 비교 할 때이다.  [Forms]![학생관리]![교육청코드] 이 식은 컨트롤이 아닌 레코드 원본에 있는 필드를 끌어와 비교하기 때문에 구분기호를 사용하지 않고 전체 큰 따옴표로 묶어 줘야 한다. 

 

② 왜 원본인 "교육청코드 = [forms]![교육청별학생관리]![교육청코드]"가 아닌가?

[forms]![폼이름]![개체명]이기 때문에 원본레코드는 들어갈 수 없다.


조건 구문
▶ 조건: 기본적으로 <예> 단추가 선택되어 있도록 설정
▶ 조건: <예>단추 클릭했을 때 저장 여부 묻지 않고 저장하고 폼 종료
a= MsgBox("내용",vbYesNo + vbDefaultButton1, "제목")
 If a = vbYes Then 
Docmd.Close acForm,“폼이름”,acSaveYes
End If

 

※ Select Case

Selet Case 식

↘ Case is = 숫자

 Case is < 숫자

★ Case 숫자 To 숫자

 Case "문자"

        fn함수 = ""

    Case else

      fn함수 = ""

End Select

 

이름 있는 매크로 (메뉴 바 > 만들기 > 매크로)

 

매크로 이름이 지정되어있다면? 상단의 만들기탭-매크로 및 코드-매크로를 눌러 제작

매크로 이름이 없는 매크로 제작은? 매크로 작성기

 

(예문) '치킨관리'폼의 cmb보고서 단추를 클릭하면 다음 기능을 수행하도록 '출력' 매크로를 구현하시오
▶ '치킨현황보고서'를 인쇄미리보기 형태로 여시오
▶ 메시지상자로 "2025-01-01 오전 12:00:00 보고서를 엽니다"와 같이 현재 날짜와 시간이 출력되고
   확인을 누르면 '치킨관리'폼의 txt검색에 입력된 '후라이드'에 해당하는 레코드만 보고서에 표시하도록 설정하시오

※ 메시지상자가 열리고 > 보고서가 열리는 형태
MessageBox : =Now() & " 보고서를 엽니다."
OpenReport 
 보고서 이름: 치킨현황보고서
 보기 형식: 인쇄 미리보기
 Where 조건문: [기관코드] = [forms]![봉사기관관리]![txt검색]

 

 

 

(24_02) '종목조회' 폼의 cmd조회를 클릭하면 다음과 기능이 적용되도록 매크로를 구현하시오
▶ 'Txt조회' 컨트롤에 입력된 글자를 포함하는 '종목명' 자료들을 표시하고 'Txt이름'으로 포커스를 이동하시오
▶ Gotocontrol, Applyfilter 이용

 

우클릭 > 프로시저 >  매크로 만들기 

Applyfilter       

Where 조건: 종목명 like "*" & [forms]![종목조회]![Txt조회] & "*"

GotoControl
컨트롤 이름: Txt이름

 

 

 

 

(예제) 학교현황의 cmb조회월 변경 시 다음과 같은 기능을 수행하도록 프로시저
- 설립일자가 cmb조회월에 입력된 월과 일치하는 항목들을 표시하고 txt관할교육청으로 포커스를 이동하시오
- recordsource, month, setfocus 

Private Sub Cmb조회월_Change()
Me.RecordSource = "select * from 학교정보 where month(설립일자) = " & Cmb조회월
→  Me.RecordSource = "selct 나타나는 항목 from 원본 where 조건
                                       나타나는 항목은 모든 항목이므로 *, 조건은 month(설립일자) = Cmb조회월
                                       그런데 조회월은 숫자이므로 "select from where 설립일자 = " & 조회월 이렇게한다.
Txt관할교육청.SetFocus

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함