데이터베이스·1급 전용·25장
매크로와 데이터베이스 프로그래밍
Access 매크로와 주요 매크로 함수, 이벤트의 종류, VBA 모듈과 DoCmd 개체, 레코드셋 처리 개념을 정리합니다.
노란 밑줄n회 기출에 나온 지점(숫자는 등장 문항 수)✎ 는 덧붙인 필기
출제 비중 — VBA32회 와 매크로 함수16회, 이벤트 프로시저15회 가 번갈아 나온다. 어느 이벤트에 어떤 동작인지가 관건.
1. Access 매크로
- 매크로: 자주 하는 작업을 명령(매크로 함수)의 목록으로 저장해 두고 실행하는 개체.
- 독립 실행 매크로(탐색 창에 개체로 보임)와 포함된 매크로(폼·보고서·컨트롤의 이벤트 속성에 들어 있음)로 나뉜다.
- AutoExec 이라는 이름으로 저장하면 데이터베이스를 열 때 자동으로 실행된다(Shift 를 누른 채 열면 건너뛴다).
- 주요 매크로 함수17회
| 함수 | 동작 |
|---|---|
| OpenForm / OpenReport | 폼·보고서 열기. 보기 형식·조건(Where) 지정 |
| MessageBox | 메시지 상자 표시 |
| RunSQL | 실행 쿼리 실행 |
| GoToRecord | 처음·이전·다음·마지막·새 레코드로 이동 |
| ApplyFilter | 필터 적용 |
| SetValue | 컨트롤·필드 값 설정 |
| Requery | 원본을 다시 읽어 최신 데이터 표시 |
| CloseWindow | 창 닫기 |
| QuitAccess | Access 종료 |
| RunMacro | 다른 매크로 실행. 반복 횟수·조건 지정 가능 |
- 매크로에는 조건(If) 과 그룹을 넣을 수 있고, 한 단계씩 실행으로 디버깅한다.
2. 이벤트
- 이벤트30회: 사용자의 동작이나 상태 변화. 해당 속성에 매크로나 이벤트 프로시저를 연결한다.
| 구분 | 이벤트 |
|---|---|
| 폼/보고서 | Open(열 때) → Load(불러올 때) → Resize → Activate → Current(레코드 이동) |
| 데이터 | BeforeUpdate / AfterUpdate(업데이트 전·후), BeforeInsert, Delete, Dirty |
| 키·마우스 | KeyDown / KeyPress / Click / DblClick / MouseMove |
| 포커스 | Enter → GotFocus … Exit → LostFocus |
- 입력 값을 저장 전에 검사하려면 BeforeUpdate 이벤트를 쓴다.
3. 모듈과 프로시저
- 모듈: VBA 코드를 담는 개체. 표준 모듈(모든 개체에서 호출 가능)과 클래스 모듈(폼·보고서에 딸린 모듈)로 나뉜다.
- 편집기: Alt + F11. 프로시저는 Sub(값 반환 없음)과 Function(값 반환).
- Private 는 해당 모듈에서만, Public 은 모든 모듈에서 호출할 수 있다.
- 사용자 정의 함수는 쿼리·폼의 컨트롤 원본에서도 사용할 수 있다.
4. DoCmd 개체
- DoCmd4회: 매크로 함수를 VBA 코드에서 실행하는 개체.
| 코드 | 동작 |
|---|---|
| DoCmd.OpenForm "폼이름" | 폼 열기 |
| DoCmd.OpenReport "보고서", acViewPreview | 미리 보기로 보고서 열기 |
| DoCmd.Close | 현재 개체 닫기 |
| DoCmd.GoToRecord , , acNewRec | 새 레코드로 이동 |
| DoCmd.RunSQL "UPDATE …" | SQL 실행 |
| DoCmd.Requery | 원본 다시 읽기 |
- 값 참조: Forms![폼이름]![컨트롤이름], 현재 폼은 Me![컨트롤이름].
5. 레코드셋과 데이터 접근
- DAO / ADO: VBA 에서 데이터를 직접 다루는 개체 모델.
- 흐름: Set rs = CurrentDb.OpenRecordset("테이블명") → rs.MoveFirst / MoveNext → rs.EOF 로 끝 확인 → rs.Close.
- AddNew → 값 대입 → Update 로 레코드를 추가하고, Edit → 값 대입 → Update 로 수정한다.
- rs.RecordCount 는 레코드 수. 정확한 값을 얻으려면 MoveLast 를 먼저 실행한다.
마무리 체크
- AutoExec 매크로는 DB 를 열 때 자동 실행
- OpenForm·MessageBox·Requery·GoToRecord 의 동작
- 폼 이벤트 순서 Open → Load, 포커스는 Enter → GotFocus
- 저장 전 검사에는 BeforeUpdate
- 표준 모듈 vs 클래스 모듈, Public vs Private
- Forms![폼]![컨트롤], 현재 폼은 Me!