362페이지의 문제2-1-3에 관한 질문이면서 공부 과정에서 전반적으로 헷갈렸던 부분에 대한 질문입니다.
dsum을 사용하는 과정에서 저는 계산개체, 범위 및 조건에 쓰이는 테이블/쿼리의 이름을dsum([총주차수], [건물주차현황], [주차장유형]=[txt주차장유형번호])와 같이 세 인수 모두 중괄호로 묶어 표현했습니다. 하지만 답지는 dsum("총주차수", "건물주차현황", "[주차장유형]=[txt주차장유형번호]")와 같이 표현되었고, 실제로 제가 쓴 답엔 오류가 발생했습니다.
공부를 하면서 전반적으로 느낀 점은 쿼리나 테이블의 이름을 함수나 코드에 적을 때 중괄호로 묶어야한다고 느꼈지만, 중간중간 유형이나 문제를 풀다보면 갑자기 큰따옴표로 묶거나, 그냥 이름만 적어서 표현하는 문제들도 많이 접한 것 같습니다.
가장 먼저 첨부한 문제의 답에 대한 풀이가 궁금하고, 그 다음으로는 정확히 언제 [중괄호]로 묶고, 언제 "큰따옴표"로 묶고, 언제 그냥 이름만 적는 것인지 함수와 프로시저 코드 두가지 경우에 대해서 설명해주셨으면 좋겠습니다.
감사합니다
안녕하세요.
먼저 용어부터 하나 정리하면, 질문하신 [ ]는 중괄호가 아니라 대괄호입니다.
핵심은 [ ]와 " "의 역할이 완전히 다르다는 것입니다.
1. DSum에서는 왜 " "를 사용하나요?
정답:
=DSum("총주차수","건물주차현황","[주차장유형]=[txt주차장유형번호]")
DSum의 구조는
DSum(계산할 필드, 테이블/쿼리, 조건)
인데, 이 세 인수는 기본적으로 이름이나 조건식을 '문자열' 형태로 함수에 전달합니다. 그래서 큰따옴표를 사용합니다.
즉,
"총주차수"
는 ‘총주차수라는 이름의 필드를 찾아라’,
"건물주차현황"
은 ‘건물주차현황이라는 이름의 테이블/쿼리에서 찾아라’라는 의미입니다.
따라서
DSum([총주차수],[건물주차현황],...)
처럼 쓰면 Access는 이를 문자열로 된 이름이 아니라 현재 식에서 직접 참조해야 하는 개체나 필드로 해석하려 하기 때문에 오류가 발생합니다.
2. 그런데 조건 안에는 왜 다시 [ ]가 나오나요?
다음 부분을 보면
"[주차장유형]=[txt주차장유형번호]"
바깥의 " "는 DSum에 조건식 전체를 문자열로 전달하기 위한 것입니다.
그 문자열 안의
[주차장유형]
[txt주차장유형번호]
는 각각 필드와 컨트롤의 이름을 명확하게 표시하는 대괄호입니다.
즉, 층을 나눠 생각하면 쉽습니다.
" [주차장유형] = [txt주차장유형번호] "
↑ ↑
└──── 조건식 전체를 문자열로 전달 ────┘
[주차장유형] → 필드 이름
[txt주차장유형번호] → 컨트롤 이름
3. [ ], " ", 아무것도 없는 경우의 차이
이렇게 구분하시면 가장 쉽습니다.
| 표현 | 의미 | 예 |
|---|---|---|
[ ] | 필드·컨트롤·개체 이름을 명확히 표시 | [금액], [txt조회] |
" " | 문자열 자체 | "서울", "금액" |
| 그냥 이름 | Access/VBA가 이름임을 알 수 있을 때 | 금액, txt조회 |
예를 들어 일반 Access 식에서는
=[수량]*[단가]
처럼 실제 필드를 직접 참조하므로 [ ]를 사용합니다.
반면 DSum에서는
=DSum("금액","매출현황",...)
처럼 **‘금액’이라는 필드 이름과 ‘매출현황’이라는 테이블 이름을 문자열로 넘겨야 하므로 " "**를 사용합니다.
4. VBA 프로시저에서는?
VBA에서도 원리는 같습니다.
실제 컨트롤 값을 직접 사용할 때는
txt과목명
처럼 그냥 씁니다.
문자 자체를 전달할 때는
DoCmd.OpenReport "성적보고서"
처럼 " "를 사용합니다. 여기서 "성적보고서"는 보고서 이름을 문자열로 전달하는 것입니다.
조건식을 VBA에서 만들어 전달할 때는 조금 더 복잡해집니다.
DoCmd.OpenReport "성적보고서", acViewPreview, , _
"[학과명]='" & txt학과명 & "'"
여기서는
"[학과명]='" → 조건식의 문자 부분
txt학과명 → 컨트롤의 실제 값
& → 둘을 연결
입니다.
예를 들어 txt학과명에 컴퓨터공학과가 들어 있다면 최종적으로 만들어지는 조건은
[학과명]='컴퓨터공학과'
가 됩니다.
시험 대비용으로 가장 간단히 기억하면
일반 계산식에서 필드/컨트롤 직접 참조 →
[필드명]
DLookup, DSum, DCount 등의 필드명·테이블명 →"필드명","테이블명"
D함수의 조건 →"조건식"
VBA에서 개체 이름을 인수로 전달 →"보고서명","폼명"
VBA에서 컨트롤의 실제 값을 사용 →txt과목명처럼 직접 사용
따라서 이번 문제의 DSum에서는 세 인수를 모두 [ ]로 묶는 것이 아니라, 세 인수 모두 기본적으로 문자열로 전달하고 그 조건 문자열 안에서 필요한 필드·컨트롤을 [ ]로 표현한다고 이해하시면 가장 정확합니다.
-
관리자2026-08-11 10:16:43
안녕하세요.
먼저 용어부터 하나 정리하면, 질문하신
[ ]는 중괄호가 아니라 대괄호입니다.
핵심은[ ]와" "의 역할이 완전히 다르다는 것입니다.1. DSum에서는 왜
" "를 사용하나요?정답:
=DSum("총주차수","건물주차현황","[주차장유형]=[txt주차장유형번호]")DSum의 구조는DSum(계산할 필드, 테이블/쿼리, 조건)인데, 이 세 인수는 기본적으로 이름이나 조건식을 '문자열' 형태로 함수에 전달합니다. 그래서 큰따옴표를 사용합니다.
즉,
"총주차수"는 ‘총주차수라는 이름의 필드를 찾아라’,
"건물주차현황"은 ‘건물주차현황이라는 이름의 테이블/쿼리에서 찾아라’라는 의미입니다.
따라서
DSum([총주차수],[건물주차현황],...)처럼 쓰면 Access는 이를 문자열로 된 이름이 아니라 현재 식에서 직접 참조해야 하는 개체나 필드로 해석하려 하기 때문에 오류가 발생합니다.
2. 그런데 조건 안에는 왜 다시
[ ]가 나오나요?다음 부분을 보면
"[주차장유형]=[txt주차장유형번호]"바깥의
" "는 DSum에 조건식 전체를 문자열로 전달하기 위한 것입니다.그 문자열 안의
[주차장유형] [txt주차장유형번호]는 각각 필드와 컨트롤의 이름을 명확하게 표시하는 대괄호입니다.
즉, 층을 나눠 생각하면 쉽습니다.
" [주차장유형] = [txt주차장유형번호] " ↑ ↑ └──── 조건식 전체를 문자열로 전달 ────┘ [주차장유형] → 필드 이름 [txt주차장유형번호] → 컨트롤 이름3.
[ ]," ", 아무것도 없는 경우의 차이이렇게 구분하시면 가장 쉽습니다.
표현 의미 예 [ ]필드·컨트롤·개체 이름을 명확히 표시 [금액],[txt조회]" "문자열 자체 "서울","금액"그냥 이름 Access/VBA가 이름임을 알 수 있을 때 금액,txt조회예를 들어 일반 Access 식에서는
=[수량]*[단가]처럼 실제 필드를 직접 참조하므로
[ ]를 사용합니다.반면 DSum에서는
=DSum("금액","매출현황",...)처럼 **‘금액’이라는 필드 이름과 ‘매출현황’이라는 테이블 이름을 문자열로 넘겨야 하므로
" "**를 사용합니다.4. VBA 프로시저에서는?
VBA에서도 원리는 같습니다.
실제 컨트롤 값을 직접 사용할 때는
txt과목명처럼 그냥 씁니다.
문자 자체를 전달할 때는
DoCmd.OpenReport "성적보고서"처럼
" "를 사용합니다. 여기서"성적보고서"는 보고서 이름을 문자열로 전달하는 것입니다.조건식을 VBA에서 만들어 전달할 때는 조금 더 복잡해집니다.
DoCmd.OpenReport "성적보고서", acViewPreview, , _ "[학과명]='" & txt학과명 & "'"여기서는
"[학과명]='" → 조건식의 문자 부분 txt학과명 → 컨트롤의 실제 값 & → 둘을 연결입니다.
예를 들어
txt학과명에컴퓨터공학과가 들어 있다면 최종적으로 만들어지는 조건은[학과명]='컴퓨터공학과'가 됩니다.
시험 대비용으로 가장 간단히 기억하면
일반 계산식에서 필드/컨트롤 직접 참조 →
[필드명]
DLookup, DSum, DCount 등의 필드명·테이블명 →"필드명","테이블명"
D함수의 조건 →"조건식"
VBA에서 개체 이름을 인수로 전달 →"보고서명","폼명"
VBA에서 컨트롤의 실제 값을 사용 →txt과목명처럼 직접 사용따라서 이번 문제의
DSum에서는 세 인수를 모두[ ]로 묶는 것이 아니라, 세 인수 모두 기본적으로 문자열로 전달하고 그 조건 문자열 안에서 필요한 필드·컨트롤을[ ]로 표현한다고 이해하시면 가장 정확합니다.