컨트롤과 하위 폼
쉽게 말하면
컨트롤은 폼 위에 놓는 부품이에요. 글자를 보여 주는 레이블, 값을 넣는 텍스트 상자, 목록에서 고르는 콤보 상자, 누르면 일이 일어나는 명령 단추 같은 것들이죠. 필드와 이어진 컨트롤에 값을 넣으면 그대로 테이블에 저장돼요.
시험용 정의
컨트롤은 폼·보고서에 놓아 데이터를 보이거나 입력받는 개체다. 컨트롤이 보여 줄 값은 컨트롤 원본 속성으로 정한다. 필드를 원본으로 하면 바운드 컨트롤, 원본이 없으면 언바운드 컨트롤, =로 시작하는 식(예: =[단가]*[수량])을 원본으로 하면 계산 컨트롤이다. 레이블은 제목·설명 글자(내용 없이 두면 사라짐), 텍스트 상자는 값 입력·표시(바운드·언바운드 모두 가능), 목록 상자는 늘 몇 줄이 보이는 목록에서 고르기만, 콤보 상자는 드롭다운 화살표를 눌러 목록을 펼치고 직접 입력도 할 수 있다. 옵션 그룹은 여러 옵션 중 하나, 확인란은 예/아니요, 명령 단추는 누르면 매크로·프로시저를 실행한다(명령 단추 마법사가 폼 닫기 같은 동작을 만들어 줌). 컨트롤 이름은 한 폼 안에서 겹칠 수 없다. 숫자 표시 모양은 Format 함수나 형식 속성으로 정한다. 하위 폼은 기본 폼 안에 들어간 폼으로, 일대다 관계의 '다' 쪽을 보여 주며 기본 필드 연결과 하위 필드 연결로 이어진다(두 필드는 형식이 같거나 호환되어야 함). 하위 폼도 따로 열 수 있다. 도메인 집계 함수 DSum·DAvg·DCount·DMax·DMin·DLookup은 =DAvg("[급여]", "[사원]", "[직급]='부장'")처럼 (필드, 테이블·쿼리, 조건) 순서로 모두 따옴표에 넣는다. 조건부 서식은 필드 값·식·포커스 여부에 따라 서식을 바꾸며, 규칙 여러 개를 위·아래로 옮겨 우선순위를 정한다.
비유로 이해하기
폼은 계기판이고 컨트롤은 계기다. 바운드 컨트롤은 엔진(테이블)에 선이 이어진 계기, 언바운드는 선이 없는 장식, 계산 컨트롤은 속도와 시간을 곱해 거리를 보여 주는 계기다.
자세히
컨트롤 종류
| 컨트롤 | 특징 |
|---|---|
| 레이블 | 고정 글자. 마법사 없음, 내용을 안 쓰면 사라짐 |
| 텍스트 상자 | 입력·표시. 바운드·언바운드·계산 모두 가능 |
| 목록 상자 | 늘 펼쳐진 목록. 고르기만 가능 |
| 콤보 상자 | 드롭다운 목록. 고르기 + 직접 입력 |
| 옵션 그룹 | 옵션 단추 여러 개 중 하나 선택 |
| 확인란·토글 단추 | 예/아니요 |
| 명령 단추 | 눌러서 매크로·이벤트 프로시저 실행 (마법사 제공) |
| 하위 폼/하위 보고서 | 다른 폼·보고서를 넣는다 |
도메인 집계 함수
| 식 | 뜻 |
|---|---|
| =DCount("*", "학생", "학년=1") | 학생 테이블에서 1학년 레코드 수 |
| =DSum("[금액]", "주문", "[지역]='서울'") | 서울 주문 금액 합계 |
| =DAvg("[급여]", "[사원]", "[직급]='부장'") | 부장 급여 평균 |
| =DLookup("[이름]", "회원", "[번호]=7") | 7번 회원의 이름 하나 |
하위 폼
- 일대다에서 '일'은 기본 폼, '다'는 하위 폼
- 기본 필드 연결·하위 필드 연결 속성으로 잇는다. 두 필드의 형식은 같거나 호환
- 하위 폼도 독립된 폼이라 따로 열 수 있다
- 폼 분할로 만들면 하위 폼이 생기지 않는다 (폼 마법사에서 두 테이블을 고르면 만들 수 있다)
조건부 서식
- 필드 값 비교, 식(예: [성별]="여자"), 포커스가 있는지로 규칙을 만든다
- 한 레코드의 여러 컨트롤을 한꺼번에 꾸미려면 컨트롤을 모두 고르고 '식' 규칙을 쓴다
- 규칙 여러 개, 위·아래로 옮겨 우선순위. 둘 이상 참이면 첫 번째 규칙만
- 값이 바뀌어 조건에 안 맞으면 기본 서식으로 돌아간다
- 다른 형식으로 내보내면 조건부 서식은 유지되지 않는다
시험에 이렇게 나와요
- 바운드 → 필드가 원본, 언바운드 → 원본 없음, 계산 → =식
- 목록 상자 → 고르기만, 콤보 상자 → 입력도 가능
- 텍스트 상자는 언바운드도 가능, 컨트롤 이름 중복 불가
- 하위 폼 → 일대다의 '다', 연결 필드 형식 호환, 따로 열 수 있음, 폼 분할로 자동 생성 안 됨
- DCount("*","학생","학년=1"), DAvg("[급여]","[사원]","[직급]='부장'")
- 조건부 서식 → 규칙 여러 개·우선순위 이동, 첫 참 규칙만, 내보내면 유지 안 됨
- 계산 결과 표시 모양 → Format 함수
확인 문제
Q1. 폼이나 보고서에서 테이블·쿼리의 필드를 컨트롤 원본으로 쓰는 컨트롤은?
- 언바운드 컨트롤
- 바운드 컨트롤
- 레이블 컨트롤
- 계산 컨트롤
정답 보기
2번 바운드 컨트롤
필드에 '묶인(bound)' 컨트롤이라 바운드 컨트롤이다. 원본이 없으면 언바운드, =식이면 계산 컨트롤이다.
Q2. [주문] 테이블에서 '상태'가 "배송중"인 레코드 수를 폼에 보여 주는 식은?
- =Count("주문", "*", "[상태]='배송중'")
- =DCount("*", "주문", "[상태]='배송중'")
- =DLookup("*", "주문", "[상태]='배송중'")
- =DCount(*, 주문, 상태=배송중)
정답 보기
2번 =DCount("*", "주문", "[상태]='배송중'")
도메인 함수는 (필드, 테이블, 조건)을 모두 따옴표로 감싼다. 개수는 DCount다.
Q3. 목록에서 고를 수도 있고 목록에 없는 값을 직접 입력할 수도 있는 컨트롤은?
- 콤보 상자
- 레이블
- 옵션 그룹
- 목록 상자
정답 보기
1번 콤보 상자
목록 상자는 고르기만 할 수 있다.
Q4. 하위 폼에 대한 설명으로 옳지 않은 것은?
- 보통 일대다 관계의 '다' 쪽을 원본으로 한다
- 기본 폼 안에서만 존재해 따로 열 수 없다
- 기본 필드 연결과 하위 필드 연결로 잇는다
- 연결 필드는 형식이 같거나 호환되어야 한다
정답 보기
2번 기본 폼 안에서만 존재해 따로 열 수 없다
하위 폼도 하나의 폼이라 따로 열 수 있다.
Q5. 한 컨트롤의 조건부 서식에 규칙 두 개가 있고 둘 다 참이면?
- 두 서식이 모두 섞여 적용된다
- 목록에서 위에 있는 규칙의 서식만 적용된다
- 오류가 나서 서식이 적용되지 않는다
- 아래쪽 규칙이 적용된다
정답 보기
2번 목록에서 위에 있는 규칙의 서식만 적용된다
참인 첫 번째 규칙만 적용되므로 위·아래로 옮겨 우선순위를 정한다.
헷갈리기 쉬운 O·X
텍스트 상자는 바운드 컨트롤로만 쓸 수 있다.
정답 보기
X 원본을 비워 언바운드로, =식을 넣어 계산 컨트롤로도 쓴다.
폼을 다른 파일 형식으로 내보내도 조건부 서식은 그대로 남는다.
정답 보기
X 조건부 서식은 내보낸 파일에서 유지되지 않는다.