18차시
폼과 컨트롤
Part 3. 데이터베이스 일반 · 출제 빈도 ★★★
이 차시를 공부하는 이유
폼 문제는 속성 이름을 보고 기능을 고르는 형태가 많습니다. 레코드 원본(폼) ↔ 컨트롤 원본(컨트롤)처럼 비슷한 이름의 속성을 짝지어 정리하면 혼동이 크게 줄어듭니다.
학습 목표
폼의 구역과 바운드·언바운드 폼, 기본 보기 형식을 설명할 수 있다.
레코드 원본, 편집·추가·삭제 가능, 레코드 잠금 등 폼 속성을 이해한다.
컨트롤의 종류(바운드·언바운드·계산)와 주요 속성을 구분할 수 있다.
하위 폼 연결, 탭 순서, 조건부 서식, 도메인 함수를 활용할 수 있다.
핵심 개념
1. 폼의 개요와 구역
| 구역 | 표시 위치 |
|---|---|
| 폼 머리글 / 폼 바닥글 | 폼 보기에서 항상 위/아래에 표시, 인쇄 시 첫 페이지 위 / 마지막 페이지에 한 번 (제목, 요약 정보) |
| 페이지 머리글 / 페이지 바닥글 | 인쇄 미리 보기에서만 확인, 매 페이지 위/아래 (날짜, 페이지 번호) |
| 세부 구역(본문) | 실제 데이터가 표시되는 구역 (기본으로 표시) |
- 폼은 테이블·쿼리를 원본으로 데이터를 입력·수정·삭제·조회하는 화면입니다. 폼에서 수정하면 원본 테이블에 반영됩니다.
- 필요한 데이터만 보여 줄 수 있어 보안성이 높아지고, 이벤트로 작업을 자동화할 수 있습니다.
- 바운드 폼: '레코드 원본'으로 테이블·쿼리와 연결된 폼 / 언바운드 폼: 연결되지 않은 폼(시작 화면, 검색 화면 등). 새로 만든 빈 폼은 기본적으로 언바운드입니다.
2. 폼 만들기와 폼 속성
| 폼 속성 | 기능 |
|---|---|
| 레코드 원본 (데이터) | 폼에 연결할 테이블, 쿼리, SQL문 |
| 기본 보기 (형식) | 단일 폼(한 번에 레코드 1개), 연속 폼(여러 레코드), 데이터시트, 분할 표시 폼 |
| 편집·추가·삭제 가능 (데이터) | 레코드 수정·추가·삭제 허용 여부 |
| 레코드 잠금 (데이터) | 잠그지 않음(기본) / 모든 레코드 / 편집한 레코드(한 번에 한 사람만 편집) |
| 캡션 / 레코드 선택기 / 탐색 단추 / 스크롤 막대 | 제목 표시줄 텍스트 / 각종 화면 요소 표시 여부 |
| 팝업 / 모달 (기타) | 항상 위에 표시 / 닫기 전까지 다른 창 사용 불가 |
- 작성 도구: [폼](자동 생성), 폼 디자인, 새 폼, 폼 마법사, 탐색, 여러 항목, 데이터시트, 분할 표시 폼, 모달 대화 상자(확인·취소 단추 자동 생성, 닫기 전에는 다른 개체 선택 불가)
- 분할 표시 폼: 하나의 원본을 폼 보기와 데이터시트 보기로 동시에 표시하며 두 보기는 동기화됩니다. '분할 표시 폼 방향'으로 데이터시트 위치(위·아래·왼쪽·오른쪽)를 지정합니다.
- 필드 목록에서 필드를 드래그하면 Yes/No는 확인란, OLE 개체는 바운드 개체 틀, 나머지는 텍스트 상자로 만들어집니다.
3. 컨트롤의 분류와 종류
바운드 컨트롤
필드에 연결된 컨트롤. 값을 수정하면 필드 값도 수정. 텍스트 상자, 콤보·목록 상자, 확인란, 옵션 그룹 등
언바운드 컨트롤
필드에 연결되지 않은 컨트롤. 레이블, 명령 단추, 선, 사각형 등
계산 컨트롤
컨트롤 원본에 '='로 시작하는 식을 입력. 값을 직접 입력할 수 없음. 예: =[단가]*[수량]
| 컨트롤 | 특징 |
|---|---|
| 레이블 | 제목·설명 텍스트 표시 (언바운드, 탭 순서 없음) |
| 텍스트 상자 | 데이터나 계산 결과 표시·입력 |
| 콤보 상자 | 텍스트 상자 + 목록. 목록에서 선택하거나 직접 입력 가능, 하나만 선택, 좁은 공간에 적합 |
| 목록 상자 | 목록에 있는 값만 선택, 직접 입력 불가, 여러 값 선택 가능 |
| 옵션 그룹 | 확인란·옵션 단추·토글 단추를 묶어 하나만 선택. 숫자(정수)·Yes/No 필드에 사용 |
| 확인란 / 옵션 단추 / 토글 단추 | Yes/No 값 표시·선택 |
| 명령 단추 | 매크로·이벤트 프로시저 실행 |
| 하위 폼/하위 보고서 | 폼 안에 다른 폼·보고서 삽입 (1:N 관계 표시) |
시험 함정 포인트
같은 폼이나 보고서 안에서 같은 이름의 컨트롤은 만들 수 없습니다. 하나의 필드를 여러 컨트롤에 바운드하는 것은 가능합니다.
같은 폼이나 보고서 안에서 같은 이름의 컨트롤은 만들 수 없습니다. 하나의 필드를 여러 컨트롤에 바운드하는 것은 가능합니다.
4. 컨트롤 속성과 탭 순서
| 속성 | 기능 |
|---|---|
| 컨트롤 원본 (데이터) | 연결할 필드나 '='로 시작하는 식. 식에서 필드는 [ ], 문자는 " "로 묶음. 다른 폼의 컨트롤: =[Forms]![폼]![컨트롤] |
| 형식 / 소수 자릿수 / 표시 (형식) | 표시 형식 / 소수 자릿수 / 화면 표시 여부 |
| 사용 가능 (데이터) | '아니요'면 포커스를 받을 수 없음 (회색 표시) |
| 잠금 (데이터) | '예'면 데이터를 편집할 수 없음 (포커스는 받음) |
| 기본값 / 입력 마스크 / 유효성 검사 규칙 | 컨트롤 단위로 지정 |
| 행 원본 유형 / 행 원본 / 바운드 열 | 콤보·목록 상자의 목록 데이터 |
| 탭 정지 / 탭 인덱스 (기타) | Tab 키로 포커스를 받을지 / 탭 이동 순서 번호 |
| 컨트롤 팁 텍스트 / 상태 표시줄 텍스트 | 마우스를 올렸을 때 팁 / 포커스 시 상태 표시줄 문구 |
- 탭 순서: Tab이나 Enter로 이동하는 컨트롤 순서. 기본은 만든 순서이며 [탭 순서] 대화상자의 [자동 순서]는 위→아래, 왼쪽→오른쪽으로 설정합니다.
- 레이블과 '탭 정지'가 '아니요'인 컨트롤은 탭 순서에 나타나지 않습니다. 탭 순서는 폼에만 적용됩니다(보고서 없음).
- 컨트롤 정렬: [정렬] 탭에서 맞춤·크기·간격 조정, 여러 컨트롤을 그룹으로 묶어 함께 이동·서식 지정
시험 함정 포인트
'사용 가능=아니요'는 포커스 자체가 안 가고, '잠금=예'는 포커스는 가지만 수정이 안 됩니다. 둘을 바꾼 보기를 조심하세요.
'사용 가능=아니요'는 포커스 자체가 안 가고, '잠금=예'는 포커스는 가지만 수정이 안 됩니다. 둘을 바꾼 보기를 조심하세요.
5. 하위 폼
- 1:N 관계에서 '1'은 기본(주) 폼, 'N'은 하위 폼으로 표시합니다. 하위 폼에는 기본 폼의 현재 레코드와 관련된 레코드만 나타납니다.
- 기본 폼은 단일 폼으로만 표시할 수 있고, 하위 폼은 단일·연속·데이터시트·분할 표시 폼으로 표시할 수 있습니다.
- 하위 폼은 개수 제한이 없고 7수준까지 중첩할 수 있습니다.
- 연결 속성: 원본 개체(하위 폼으로 쓸 폼), 기본 필드 연결(기본 폼의 필드), 하위 필드 연결(하위 폼의 필드). 여러 필드는 세미콜론(;)으로 구분합니다.
- 연결 필드는 데이터 형식·크기가 같거나 호환되어야 합니다. 관계가 설정되어 있지 않아도 조건이 맞으면 하위 폼을 만들 수 있습니다.
6. 조건부 서식과 도메인 함수
- 조건부 서식: 텍스트 상자처럼 값을 표시하는 컨트롤에 설정합니다. 조건 유형은 필드 값이, 식이, 필드에 포커스가 있음이며, 최대 50개 조건을 지정할 수 있습니다.
- 두 개 이상의 조건이 참이면 첫 번째 조건의 서식이 적용됩니다. 다른 파일 형식으로 변환하면 조건부 서식은 해제됩니다.
- 도메인 함수: 레코드 원본에 없는 테이블·쿼리에서 값을 계산해 표시합니다.
DSum, DAvg, DCount, DMin, DMax, DLookup
DLookup 형식 (인수마다 큰따옴표)
=DLookup("[필드]", "[테이블/쿼리]", "조건")
=DLookup("거래처명", "거래처", "거래처코드='A1'") 문자 조건
=DLookup("거래처명", "거래처", "거래처코드=" & [txt코드]) 숫자형 컨트롤 값
=DLookup("거래처명", "거래처", "거래처코드='" & [txt코드] & "'") 문자형 컨트롤 값
=DCount("*", "학생", "학년=1") 1학년 학생 수
확인 문제
1 / 5
문제 1
폼의 구역에 대한 설명으로 옳지 않은 것은?
💡 정답 ② 해설: 페이지 머리글/바닥글은 인쇄 미리 보기에서만 확인할 수 있습니다.
문제 2
목록에 있는 값을 선택할 수도 있고 목록에 없는 값을 직접 입력할 수도 있는 컨트롤은?
💡 정답 ② 해설: 콤보 상자는 텍스트 상자와 목록 상자를 결합한 형태로 직접 입력이 가능합니다. 목록 상자는 목록의 값만 선택할 수 있습니다.
문제 3
컨트롤 원본에 =[단가]*[수량] 과 같이 식을 입력하여 만든 컨트롤에 대한 설명으로 옳은 것은?
💡 정답 ② 해설: '='로 시작하는 식을 원본으로 하는 컨트롤은 계산 컨트롤이며, 결과만 표시하고 직접 입력할 수 없습니다.
문제 4
기본 폼과 하위 폼에 대한 설명으로 옳지 않은 것은?
💡 정답 ③ 해설: 기본 폼은 단일 폼으로만 표시할 수 있고, 하위 폼은 단일·연속·데이터시트·분할 표시 폼 형태가 가능합니다.
문제 5
폼에서 컨트롤에 포커스는 이동할 수 있지만 데이터를 수정할 수는 없도록 하려면 어떤 속성을 설정해야 하는가?
💡 정답 ② 해설: '잠금=예'는 포커스는 받되 편집을 막습니다. '사용 가능=아니요'는 포커스 자체를 받을 수 없게 합니다.
18차시 문제 더 풀기
확인문제와 실전 모의고사에서 이 차시 범위 문제만 모아 해설과 함께 볼 수 있습니다.