배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
액세스 2000, 김규경님의 데이터베이스 기초 다지기 - 15강. 식의 작성 (3) – 개체이름 입력(Bang Dot), Access 2000
  


15강. 식의 작성 (3) – 개체이름 입력(Bang & Dot)

지금까지 데이터 형식과 연산자에 대해 알아 보았습니다. 이번 강좌에서는 개체를 참조하는 방법에 대해 알아보겠습니다.

식은 리터럴 값과 변수, 상수, 필드나 컨트롤, 폼, 보고서 등 개체나 그 속성 그리고 연산자 등으로 구성됩니다. 이때 필드나 컨트롤, 속성 값을 식에 포함하기 위해서는 몇 가지를 더 알아야 합니다.

필드나 컨트롤, 속성 값을 참조하는 식의 요소를 식별자(Identifier)라고 부릅니다.
예를 들어, Forms![Orders]![OrderID]는 폼에서 OrderID 컨트롤의 값을 참조하는 식별자입니다.

개체 이름 입력(참조)

식별자에서 필드, 컨트롤, 속성을 묶는 대괄호([ ])는 해당 요소가 테이블, 쿼리, 폼, 보고서, 필드, 컨트롤 등의 이름임을 나타냅니다.

식별자에 개체 이름을 입력할 때 공백이나 밑줄과 같은 특수 문자를 사용하려면 해당 이름을 대괄호로 묶어야 합니다. 개체 이름에 공백이나 특수 문자가 없으면 대괄호를 사용하지 않아도 됩니다. 그러나 자동으로 대괄호가 삽입됩니다. 자동으로 대괄호가 삽입되지만 대괄호를 같이 입력하는 습관을 갖는 것이 중요합니다.

예를 들어, 컨트롤 원본/Control Source 속성을 설정할 때 다음 식을 입력하여 Freight 필드 값과 OrderAmount 필드 값의 합계를 계산합니다.
= Freight + OrderAmount

위와 같이 식을 입력하면 자동으로 다음과 같이 나타납니다.
= [Freight] + [OrderAmount]

예외 2가지)

그러나 다음과 같은 두 가지 경우는 항상 이름을 자동으로 대괄호로 묶지 않습니다.

1) 쿼리 디자인 눈금의 조건 셀에 식을 입력
2) 유효성 검사 규칙/Validation Rule 속성 설정

그러므로 개체 이름을 입력할 때 직접 대괄호를 입력해야 합니다. 그렇지 않으면 텍스트로 인식되어 자동으로 대괄호 대신 따옴표가 삽입될 수 있습니다. 이때 따옴표로 둘러싸인 문자열은 리터럴 값을 의미하므로 전혀 의도하지 않는 결과가 나오게 됩니다.

!(느낌표 Bang)와 .(점 Dot)

식별자에 !(느낌표) 연산자와 .(점) 연산자를 사용하여 바로 뒤에 오는 항목의 형식을 나타냅니다.

!(느낌표 Exclamation / Bang) 연산자

!(느낌표) 연산자는 뒤에 오는 것이 컬렉션의 요소사용자 정의 항목임을 표시합니다. 즉, 이것은 컬렉션 다음에 찍어서 컬렉션의 멤버를 나타나게 됩니다.

예를 들어, !(느낌표) 연산자로 열린 폼, 열린 보고서 또는 열린 폼이나 보고서의 컨트롤을 참조합니다.

식별자 참조 대상

Forms![Orders]

열린 Orders 폼

Reports![Invoice]

열린 Invoice 보고서

Forms![Orders]![OrderID]

열린 Orders 폼의 OrderID 컨트롤

이제 이 내용을 해석해 보도록 하겠습니다.

Forms![Orders]

Forms 라는 컬렉션의 한 멤버(구성요소)인 Orders라는 폼을 참조하는데 이 Orders라는 폼은 사용자가 만든 항목입니다.

Forms![Orders]![OrderID]

Forms컬렉션의 한 멤버인 사용자가 만들어 놓은 Orders라는 폼에서 사용자가 만들어 둔 OrderID하는 컨트롤을 참조하게 됩니다.

참고
Forms![Orders]![OrderID] 참조 형식은 Forms![Orders].Controls![OrderID] 을 간단히 줄여 놓은 것입니다.
Forms![Orders].Controls![OrderID]는 다음과 같은 의미를 같습니다.
즉, Forms컬렉션의 한 멤버인 사용자가 만들어 놓은 Orders라는 폼에서 Controls라는 컬렉션의 멤버인 OrderID컨트롤을 참조하는 것입니다. (Dot 연산자의 역할은 다음 내용을 읽어보십시오.)

.(점 Dot) 연산자

.(점) 연산자는 대개 그 다음에 오는 것이 Microsoft Access에서 정의한 항목임을 표시합니다. 이것은 개체 다음에 찍어서 속성, 메소드 또는 컬렉션을 참조하게 됩니다.

예를 들어, .(점) 연산자를 사용하여 폼, 보고서, 컨트롤의 속성을 참조할 수 있습니다. 또한 .(점) 연산자를 사용하여 SQL 문, Microsoft Visual Basic for Applications 메소드 또는 컬렉션의 필드 값을 참조할 수도 있습니다.

식별자 참조 대상
Reports![Invoice]![ShipName].Visible Invoice 보고서에서 ShipName 컨트롤의 화면 표시/Visible 속성
SELECT Employees.EmployeeID, Orders.OrderID
FROM Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID;
Employees 테이블과 Orders 테이블의 EmployeeID 필드
DoCmd.Close Microsoft Visual Basic의 Close 메서드
Forms![Orders].Properties.Refresh Orders 폼에서 Properties 컬렉션의 Refresh 메서드

주의]

필드, 컨트롤, 개체 이름을 지정할 때는 Microsoft Access에서 사용하는 다른 요소나 속성 이름과 중복되지 않도록 합니다. 이름이 중복되면 잘못된 결과가 나타날 수도 있습니다.

예를 들어, 구문 Customers.Name을 사용하여 Customers 테이블의 Name 필드의 값을 참조하면, Name 필드의 값 대신 테이블의 이름/Name 속성 값을 참조하게 됩니다.

예상치 못한 결과를 방지하는 또 다른 방법은 항상 .(마침표) 연산자 대신에 !(느낌표) 연산자를 사용하여 필드, 컨트롤, 개체 값을 참조하는 것입니다.

예를 들어, 다음 식별자는 이름/Name 속성이 아닌 Name 필드의 값을 명시적으로 참조합니다.

           [Customers]![Name]

또 한가지 초보자들이 질문하는 것 중에 하나는 열려있지 않는 폼의 컨트롤을 참조하여 발생하는 오류에 대한 것입니다. 폼이나 보고서를 참조하는 식이 있는 Microsoft Visual Basic for Applications 코드나 매크로를 실행할 때는 폼이나 보고서를 열려 있어야 합니다.

Microsoft Visual Basic 프로시저에서 !(느낌표) 연산자를 사용하는 대신 괄호와 큰따옴표(")로 이름을 표시하여 개체를 참조할 수 있습니다. 괄호 구문은 식별자 안에 변수를 사용할 때 필요합니다. 다음 두 식별자는 동일합니다.

            Forms![Orders]![OrderDate]
            Forms("Orders")("OrderDate")
 

필드, 컨트롤, 속성 값 조합

&(연결) 연산자를 사용하여 리터럴 문자열이 있는 필드, 컨트롤, 속성의 값을 조합할 수 있습니다. 예를 들어, 다음 식은 리터럴 문자열 "[CategoryID] = "과 Products 폼의 CategoryID 컨트롤 값을 조합합니다.

"[CategoryID] = " & Forms![Products]![CategoryID]

참고] Dlookup()등 액세스 도메인 계산함수 사용하기

초보자 분들이 가장 많이 하는 질문 중의 하나는 도메인 계산함수를 사용하는 경우 발생하는 오류에 대한 것입니다.

도메인 계산함수 중에서 많이 사용하는 Dlookup()함수를 예로 들어 봅니다. 이 함수를 작성할 때 함수의 인수는 문자열로 보내 주어야 합니다. 따라서 인수로 보낼 필드, 컨트롤, 속성의 값은 작은따옴표(‘)나 큰따옴표(")로 묶여야 합니다. 그러나 인수로 보낼 내용에 리터럴 문자열 값은 따옴표로 둘러싸여 표현하는데 이것을 다시 인수로 보내기 위해 따옴표를 한번 더 사용해야 합니다. 그러나 그렇게 간단히 표현되지는 않습니다.

예를 들면, Categories 테이블에서 CategoryID 필드의 값이 “K-0003” 인 레코드에서 CategoryName 필드 값을 조회하고자 한다면

Dlookup()함수로 보낼 세 번째 인수에 다음과 같은 조건식을 문자열로 보내야 할 겁니다.
[CategoryID] = “98-0003”
Dlookup() 함수로 이 값을 보낼 때는 문자열 형태로 만들어 보내주어야 하므로 다음과 같이 위 식을 따옴표로 둘러싸는데

“[CategoryID] = “98-0003””과 같이 하면 오류가 발생합니다. 그건 액세스가 문자열을 구성요소로 분석 처리하는(Parse) 규칙 때문에 일어납니다.

따라서 “98-0003”이란 따옴표로 둘러싸인 리터럴 값이 있으므로 이미 이전 강좌에서 말씀 드렸듯이 이것을 작은따옴표로 바꾸던지 각각의 큰따옴표 하나를 두 개로 늘려 주어야 합니다.
"[CategoryID] = ‘K-0003‘ "
"[CategoryID] = “”K-0003”” "

만약 폼에 있는 어떤 컨트롤의 값을 리터럴 값으로 보낸다면 다음과 같습니다.

"[CategoryID] = ‘ " & Forms![Products]![CategoryID] & " ‘ "

이것은 만약 Forms![Products]![CategoryID] 값이 현재 “K-0003” 이라면 위에서와 같이

"[CategoryID] = “”K-0003”” " 식으로 처리되어 Dlookup(),함수로 보내지게 되는 것이지요.

그러나 만약 폼에 있는 어떤 컨트롤의 값을 리터럴 값으로 보내지 않고 그 컨트롤의 값을 참조하라고 한다면 다음과 같습니다.

"[CategoryID] =Forms![Products]![CategoryID] "

그래서 Categories 테이블의 CategoryName 필드 값을 참조해 오려면…

DLookup(“CategoryName”,”Categories”, "[CategoryID] = ‘K-0003‘ ")

DLookup(“CategoryName”,”Categories”, "[CategoryID] = ‘ " & Forms![Products]![CategoryID] & " ‘ ")

DLookup(“CategoryName”,”Categories”, "[CategoryID] = Forms![Products]![CategoryID]")

 

 

  목차 | 이전 | 다음