2026_최신기출유형_05회
-2. 이벤트 프로시저 구현 5/5
2026_최신기출유형_05회
-2. 이벤트 프로시저 구현 5/5
시험에서 바운드 된 컨트롤 원본을 편집하지 않게 하라는 조건이 있었는데, 이 문제랑 연관이 있어서 질문드립니다.
-문제는 txt시도군, txt시도코드에 바운드 된 컨트롤 원본이 편집되지 않게 설정하라고 했었습니다. 이 2필드는 전부 검색용?으로 있었는데, 그러면 그냥 컨트롤 원본을 전부 지우면 되나요? 이 문제에서 필드의 값은 변경할 수 있게 되어있었습니다. 그냥 잠금으로 끝내는게 아닌 것 같아서요.
- 속성에서 "잠금" 이 친구는 진짜 뭔가요? 그냥 단순히 그 필드의 내용을 편집하지 못하게만 하는 건가요?
안녕하세요.
이 경우 컨트롤 원본을 지우면 안 됩니다. 핵심은 바운드 상태는 유지하면서 사용자가 값을 수정하지 못하게 하는 것입니다.
txt시도군, txt시도코드가 각각 테이블/쿼리의 필드에 바운드되어 있다면,
컨트롤 원본 : 시도군
컨트롤 원본 : 시도코드는 그대로 두고 **[잠금] 속성을 예**로 설정합니다.
잠금의 의미가 바로 질문하신 내용입니다.
잠금 = 아니요→ 사용자가 컨트롤의 값을 직접 편집할 수 있음잠금 = 예→ 값은 표시하지만 사용자가 직접 편집할 수 없음- 컨트롤 원본과의 연결은 그대로 유지됨
반대로 컨트롤 원본을 지우면 언바운드 컨트롤이 되어 해당 필드의 값 자체가 자동으로 표시되지 않습니다. 따라서 문제의 “바운드된 컨트롤의 내용을 편집하지 못하게”라는 요구와는 다른 작업이 됩니다.
그리고 말씀하신 **“필드의 값은 변경할 수 있게 되어 있었다”**는 것도 모순이 아닙니다. 잠금은 그 폼의 해당 컨트롤을 통한 직접 수정만 막는 속성입니다. 원본 테이블의 필드 자체를 수정 불가능하게 만드는 것은 아닙니다.
따라서 시험에서는 이렇게 기억하시면 됩니다.
“컨트롤의 내용을 편집하지 못하게” → [잠금] = 예
컨트롤 원본은 지우지 않음
즐거운 하루 되세요.
이전에 이렇게 답장을 받았었는데,
시험에서는 따로 검색창은 없는 상태에서, 필드의 값이 달라진 상태에서 하위 필드에서 표시되는 결과값은 교체가 되었습니다.
이걸 봤을 때, 제가 txt의 필드를 직접 교체하여도, 원본 필드의 값이 변경되지 않으면서 하위 필드에서 표시되는 값이 변경되게 해야하는 거 아닌가요?
잠금을 예로 하면 그냥 txt의 필드를 아예 편집할 수 없게 되는데, 이건 어떻게 해야하나요?
안녕하세요.
여기서는 “사용자가 직접 편집하는 것”과 “현재 레코드가 바뀌면서 표시값이 자동으로 교체되는 것”을 구분해야 합니다.
txt시도군, txt시도코드를 [잠금] = 예로 설정해도 다음과 같은 값 변경은 정상적으로 일어납니다.
- 다른 레코드로 이동한 경우
- 상위 콤보 상자의 선택에 따라 폼이 검색·필터링된 경우
- 컨트롤 원본의 값이 코드나 쿼리에 의해 다시 계산된 경우
Requery또는Refresh가 실행된 경우
즉, 잠금은 컨트롤의 값을 완전히 고정하는 기능이 아닙니다. 사용자가 그 텍스트 상자에 커서를 놓고 직접 타이핑하여 원본 필드를 변경하는 것만 막습니다.
예를 들어 현재 레코드가 바뀌면:
현재 레코드: 서울특별시 → txt시도코드: 11
다음 레코드: 부산광역시 → txt시도코드: 26처럼 잠긴 텍스트 상자의 표시값도 자동으로 바뀝니다. 이것은 편집이 아니라 새 현재 레코드의 값을 표시하는 것입니다.
반면 질문하신 것처럼 사용자가 txt시도군의 내용을 직접 바꾸되 원본 필드는 변경되지 않게 하려면, 그 컨트롤은 바운드 컨트롤일 수 없습니다. 별도의 언바운드 검색용 컨트롤이 필요합니다.
검색용 컨트롤
이름: txt검색시도군
컨트롤 원본: 비워 둠
잠금: 아니요그리고 검색용 컨트롤의 값이 바뀌었을 때 폼을 검색·필터링하거나 하위 컨트롤을 다시 조회하도록 매크로나 VBA를 작성합니다. 구조는 다음과 같습니다.
검색용 언바운드 컨트롤에 입력
↓
일치하는 레코드로 이동하거나 폼을 필터링
↓
잠긴 바운드 컨트롤의 표시값이 자동으로 변경따라서 시험 문제에서 단순히
바운드된
txt시도군,txt시도코드의 내용을 편집하지 못하게 하시오.
라고 했다면 정답은 그대로입니다.
컨트롤 원본: 유지
잠금: 예검색 컨트롤을 별도로 만들거나 값을 입력해서 조회하라는 지시가 없다면, 기존 텍스트 상자를 언바운드 검색창처럼 바꾸면 안 됩니다. 시험에서 보신 “필드값이 달라지자 하위 결과도 교체되는 현상”은 직접 편집이 아니라 현재 레코드 변경 또는 재조회에 따른 자동 표시 변경일 가능성이 높습니다.
즐거운 하루 되세요.
-
관리자2026-08-26 09:34:48
안녕하세요.
여기서는 “사용자가 직접 편집하는 것”과 “현재 레코드가 바뀌면서 표시값이 자동으로 교체되는 것”을 구분해야 합니다.
txt시도군,txt시도코드를[잠금] = 예로 설정해도 다음과 같은 값 변경은 정상적으로 일어납니다.- 다른 레코드로 이동한 경우
- 상위 콤보 상자의 선택에 따라 폼이 검색·필터링된 경우
- 컨트롤 원본의 값이 코드나 쿼리에 의해 다시 계산된 경우
Requery또는Refresh가 실행된 경우
즉, 잠금은 컨트롤의 값을 완전히 고정하는 기능이 아닙니다. 사용자가 그 텍스트 상자에 커서를 놓고 직접 타이핑하여 원본 필드를 변경하는 것만 막습니다.
예를 들어 현재 레코드가 바뀌면:
현재 레코드: 서울특별시 → txt시도코드: 11 다음 레코드: 부산광역시 → txt시도코드: 26처럼 잠긴 텍스트 상자의 표시값도 자동으로 바뀝니다. 이것은 편집이 아니라 새 현재 레코드의 값을 표시하는 것입니다.
반면 질문하신 것처럼 사용자가
txt시도군의 내용을 직접 바꾸되 원본 필드는 변경되지 않게 하려면, 그 컨트롤은 바운드 컨트롤일 수 없습니다. 별도의 언바운드 검색용 컨트롤이 필요합니다.검색용 컨트롤 이름: txt검색시도군 컨트롤 원본: 비워 둠 잠금: 아니요그리고 검색용 컨트롤의 값이 바뀌었을 때 폼을 검색·필터링하거나 하위 컨트롤을 다시 조회하도록 매크로나 VBA를 작성합니다. 구조는 다음과 같습니다.
검색용 언바운드 컨트롤에 입력 ↓ 일치하는 레코드로 이동하거나 폼을 필터링 ↓ 잠긴 바운드 컨트롤의 표시값이 자동으로 변경따라서 시험 문제에서 단순히
바운드된
txt시도군,txt시도코드의 내용을 편집하지 못하게 하시오.라고 했다면 정답은 그대로입니다.
컨트롤 원본: 유지 잠금: 예검색 컨트롤을 별도로 만들거나 값을 입력해서 조회하라는 지시가 없다면, 기존 텍스트 상자를 언바운드 검색창처럼 바꾸면 안 됩니다. 시험에서 보신 “필드값이 달라지자 하위 결과도 교체되는 현상”은 직접 편집이 아니라 현재 레코드 변경 또는 재조회에 따른 자동 표시 변경일 가능성이 높습니다.
즐거운 하루 되세요.