2025_최신기출문제_2023년상시02
-2. 이벤트 프로시저 구현 5/5
저는 DoCmd 개체와 ApplyFilter 메소드를 이렇게 작성하였고, 결과 화면에서 매개변수 입력창이 떴습니다. 아무래도 오답인 거 같은데, 왜 정답으로 채점이 되었을까요? 혹시 올바른 결과를 도출할 수 있는 다른 방법인건가요? 답안과의 어떤 차이가 있는지를 중심으로 설명 요청드립니다.
제가 작성한 프로시저 함수식 :

답안 :

안녕하세요.
두 코드는 겉보기에는 비슷하지만 의미가 다릅니다. 질문자분이 작성한 코드는 다음과 같습니다.
DoCmd.ApplyFilter "select * from 강좌 where 강좌분류=txt분류조회"반면 답안은 다음과 같습니다.
DoCmd.ApplyFilter , "강좌분류 = '" & txt분류조회 & "'"가장 큰 차이는 ApplyFilter의 인수 사용 방식입니다. ApplyFilter는 보통
DoCmd.ApplyFilter 필터이름, 조건식형식으로 사용하는데, 답안에서는 첫 번째 인수인 필터 이름은 생략하고 두 번째 인수인 WhereCondition에 조건식을 넣었습니다.
답안의
"강좌분류 = '" & txt분류조회 & "'"는 예를 들어 txt분류조회에 컴퓨터가 들어 있다면 최종적으로
강좌분류 = '컴퓨터'라는 조건식이 만들어집니다. 따라서 현재 폼의 레코드 중 강좌분류가 컴퓨터인 레코드만 필터링됩니다.
반면 질문자분의
"select * from 강좌 where 강좌분류=txt분류조회"는 ApplyFilter의 첫 번째 인수(FilterName) 위치에 SQL 문장을 넣은 것입니다. Access는 이것을 정상적인 WHERE 조건으로 처리하는 것이 아니라, 저장된 필터/쿼리 이름처럼 해석하려고 할 수 있습니다. 또한 SQL 안의 txt분류조회도 명확하게 현재 폼의 컨트롤 값으로 연결되어 있지 않기 때문에, Access가 이를 알 수 없는 이름으로 판단하여 매개 변수 입력창을 띄우는 현상이 발생할 수 있습니다.
따라서 질문자분이 실제 실행했을 때 매개 변수 창이 떴다면 기능적으로 올바른 해결 방법이라고 볼 수 없습니다.
그런데도 5/5로 채점된 이유는 채점 프로그램이 이벤트 프로시저를 완전히 실행해서 결과까지 검증한 것이 아니라, 코드 안에
DoCmd
ApplyFilter같은 요구 요소가 들어 있는지 또는 해당 이벤트 프로시저가 존재하는지 중심으로 검사했을 가능성이 높습니다. 즉 자동채점에서 정답 처리됐다고 해서 실행 결과까지 올바르다는 뜻은 아닙니다.
특히 이번 경우는 실제 실행 결과가 명확한 판단 기준입니다.
질문자 코드
→ 매개 변수 입력창 발생
→ 정상적인 필터 결과 아님
답안 코드
→ txt분류조회 값을 문자열 조건으로 만들어 필터 적용
→ 정상그리고 텍스트 필드이기 때문에 답안에서 작은따옴표 '가 들어간 것도 중요합니다.
"강좌분류 = '" & txt분류조회 & "'"예를 들어 값이 일반이면
강좌분류 = '일반'이 만들어져야 하기 때문입니다.
결론적으로 이번 5/5는 채점 프로그램이 코드의 핵심 명령어 위주로 판정해서 통과한 것으로 보는 것이 타당하며, 질문자 코드가 답안과 동일한 다른 해법인 것은 아닙니다. 실제 시험 대비에서는 답안처럼 ApplyFilter의 두 번째 인수에 조건식을 작성하는 방식으로 익히시는 것이 맞습니다.
즐거운 하루 되세요.
-
관리자2026-09-08 10:29:20
안녕하세요.
두 코드는 겉보기에는 비슷하지만 의미가 다릅니다. 질문자분이 작성한 코드는 다음과 같습니다.
DoCmd.ApplyFilter "select * from 강좌 where 강좌분류=txt분류조회"반면 답안은 다음과 같습니다.
DoCmd.ApplyFilter , "강좌분류 = '" & txt분류조회 & "'"가장 큰 차이는
ApplyFilter의 인수 사용 방식입니다.ApplyFilter는 보통DoCmd.ApplyFilter 필터이름, 조건식형식으로 사용하는데, 답안에서는 첫 번째 인수인 필터 이름은 생략하고 두 번째 인수인 WhereCondition에 조건식을 넣었습니다.
답안의
"강좌분류 = '" & txt분류조회 & "'"는 예를 들어
txt분류조회에컴퓨터가 들어 있다면 최종적으로강좌분류 = '컴퓨터'라는 조건식이 만들어집니다. 따라서 현재 폼의 레코드 중 강좌분류가 컴퓨터인 레코드만 필터링됩니다.
반면 질문자분의
"select * from 강좌 where 강좌분류=txt분류조회"는
ApplyFilter의 첫 번째 인수(FilterName) 위치에 SQL 문장을 넣은 것입니다. Access는 이것을 정상적인 WHERE 조건으로 처리하는 것이 아니라, 저장된 필터/쿼리 이름처럼 해석하려고 할 수 있습니다. 또한 SQL 안의txt분류조회도 명확하게 현재 폼의 컨트롤 값으로 연결되어 있지 않기 때문에, Access가 이를 알 수 없는 이름으로 판단하여 매개 변수 입력창을 띄우는 현상이 발생할 수 있습니다.따라서 질문자분이 실제 실행했을 때 매개 변수 창이 떴다면 기능적으로 올바른 해결 방법이라고 볼 수 없습니다.
그런데도 5/5로 채점된 이유는 채점 프로그램이 이벤트 프로시저를 완전히 실행해서 결과까지 검증한 것이 아니라, 코드 안에
DoCmd ApplyFilter같은 요구 요소가 들어 있는지 또는 해당 이벤트 프로시저가 존재하는지 중심으로 검사했을 가능성이 높습니다. 즉 자동채점에서 정답 처리됐다고 해서 실행 결과까지 올바르다는 뜻은 아닙니다.
특히 이번 경우는 실제 실행 결과가 명확한 판단 기준입니다.
질문자 코드 → 매개 변수 입력창 발생 → 정상적인 필터 결과 아님 답안 코드 → txt분류조회 값을 문자열 조건으로 만들어 필터 적용 → 정상그리고 텍스트 필드이기 때문에 답안에서 작은따옴표
'가 들어간 것도 중요합니다."강좌분류 = '" & txt분류조회 & "'"예를 들어 값이
일반이면강좌분류 = '일반'이 만들어져야 하기 때문입니다.
결론적으로 이번 5/5는 채점 프로그램이 코드의 핵심 명령어 위주로 판정해서 통과한 것으로 보는 것이 타당하며, 질문자 코드가 답안과 동일한 다른 해법인 것은 아닙니다. 실제 시험 대비에서는 답안처럼
ApplyFilter의 두 번째 인수에 조건식을 작성하는 방식으로 익히시는 것이 맞습니다.즐거운 하루 되세요.