배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
액세스 2000, 김규경님의 데이터베이스 기초 다지기 - 6강. 액세스 필드의 빈 값- Null 과 빈 문자열, Access 2000
  


6강. 액세스 필드의 빈 값- Null 과 빈 문자열

강좌를 읽다 보면 Null이라는 단어가 많이 등장합니다. 앞으로도 많이 언급이 될 것이므로 이번에는 Null 값에 대한 설명을 할까 합니다. 초보자 경우 값을 검색하거나 VBA로 코드 작업을 할 때 많이 부딪칠 수 있는 내용입니다. 

Microsoft Access에서는 빈 값을 Null 값과 빈 문자열 두 가지로 다음과 같이 구분합니다. 

1) Null 값은 값을 알 수 없을 때: 값을 모름
2) 빈 문자열은 값을 알고 있는데 그 값이 비어있는 경우: 값이 없음 

예를 들어, Customers 테이블에 팩스 번호 필드가 있을 때 고객의 팩스 번호를 모르거나 고객이 팩스를 갖고 있는지 모를 때 필드를 입력하지 않을 수 있습니다. 이 경우 필드를 입력하지 않고 Null 값을 입력하는 데, 이것은 값을 모른다는 의미입니다. 
나중에 고객이 팩스를 갖고 있지 않다는 사실을 확인하면 필드에 빈 문자열을 입력하여 값이 없다는 사실을 알고 있음을 나타낼 수 있습니다. 

Null

필드에 입력하거나 식과 쿼리에 사용할 수 있는 값으로서 손실된 데이터 알 수 없는 데이터를 표시합니다. 

Null값은 사용자가 키보드로 직접 입력할 수 없습니다. 필드의 속성 중 필수 속성을 <아니오> 해두면 자료를 입력하지 않거나 자료를 지우게 되면 기본적으로 Null 값이 입력됩니다.

Visual Basic의 경우, Null 키워드는 Null 값을 표시합니다. 유효성 검사규칙이나 필터 속성 등에 조건을 입력하는 Script 상에서는 'Is Null' 이라고 사용할 수 있지만 VBA 코드상에서 Null 값 여부를 확인할 때는 IsNull() 함수를 이용합니다.
아래 그림에서 필드의 유효성 검사규칙 속성에 Null 이라는 키워드가 사용되었습니다. 이것은 예를 들기 위한 것으로 결과는 필수 속성을 <예> 설정한 것과 같습니다.

참고] 
이 속성에서는 IsNull() 이라는 함수를 사용할 수 없습니다. IsNull([필드/변수/컨트롤이름]) 과 같이 사용하는데 필드의 유효성 검사 규칙상에서는 필드를 참조 할 수 없기 때문입니다.
따라서 Null 이라는 키워드를 사용합니다. 

아직은 이른 감이 있지만 VBA 코드 상에서는 다음과 같이 사용합니다. 
Variant 변수에는 Null값을 할당할 수 있으므로 모듈을 하나 만들고 다음 코드를 모듈에 복사한 다음 커서를 Function testNull() 내에 클릭해 두고 삼각형의 실행 버튼 메뉴를 클릭하여 코드를 실행해 보십시오

Function testNull()
Dim varRet As Variant
     varRet = Null
     Debug.Print IsNull(varRet) '직접실행 창에 True라고 찍힙니다.
End Function

참고]
Variant 변수에는 초기화 되기 전까지 값은 Empty 입니다. VBA에서 다른 변수들은 Dim 문으로 변수를 정의하면 기본적인 값으로 초기화 됩니다. 그러나 Variant 변수는 초기화 되지 않고 Empty 상태로 존재합니다.
Variant 변수의 초기화 여부는 IsEmpty()라는 함수를 이용합니다.

필드에 Null 값 입력이 허락되어 Null 값이 들어 있는 경우나 Null 허용되는 컨트롤의 값을 확인하는 경우나 Variant 변수 값을 확인하는 경우에 있어서 Null 값은 오류가 발생하는 원인이 됩니다. 
따라서…
Null 값을 허용하게 되면 Null 값인가 아닌가를 검사하는 부분이 추가되어야 합니다. 다시 말해 "<> 8 Or Is Null"과 같이 유효성 검사 규칙에 "Is Null" 부분이 추가되어야 오류가 없이 검사 규칙이 이행됩니다. 코드상에서는 IsNull()함수를 이용하여 검사하는 부분이 추가되어야 합니다. 이러한 오류는 초보자를 몹시 괴롭힙니다. 명심하십시오

기본 키 필드 같은 일부 필드에서는 Null 값을 포함할 수 없습니다.

빈 문자열

문자가 포함되지 않은 문자열입니다. 빈 문자열을 사용하여 필드에 값이 없음을 표시할 수 있습니다. 
빈 문자열을 입력하려면 큰따옴표 두 개를 그 사이에 공백 없이 붙여서 ("") 입력합니다.

다음은 필수(Required) 및 빈 문자열허용(AllowZeroLength) 속성 설정을 결합할 때 예상되는 결과를 보여주는 표입니다.

필수 
Required 
빈 문자열 허용 AllowZeroLength 사용자 작업  저장되는 값
No  No  Enter 키를 누릅니다.
스페이스 바를 누릅니다.
빈 문자열을 입력합니다.
Null
Null
(사용할 수 없음)
No Yes  Enter 키를 누릅니다.
스페이스 바를 누릅니다.
빈 문자열을 입력합니다.
Null
Null
빈 문자열
Yes  No  Enter 키를 누릅니다.
스페이스 바를 누릅니다.
빈 문자열을 입력합니다.
(사용할 수 없음)
(사용할 수 없음)
(사용할 수 없음)
Yes  Yes  Enter 키를 누릅니다.
스페이스 바를 누릅니다.
빈 문자열을 입력합니다. 
(사용할 수 없음)
빈 문자열
빈 문자열

이미 언급했지만 Null값이 허용되면 약간 번거롭습니다. 전혀 Null 값을 고려하지 않고 '빈 값 = 빈 문자열' 이란 생각으로 필드 작업을 하는 것이 초보자의 경우 일단 편할 겁니다. 따라서 위의 표에서 알 수 있듯이 Null이 입력되지 않고 빈 문자열만 입력하려면 필수 속성과 빈 문자열 허용을 <예>로 설정하면 되겠습니다. 그런데 빈 값을 넣기 위해 항상 스페이스 바를 누르거나 따옴표를 두 번("") 입력해야 합니다.(설마 공백 없이 따옴표를 두 번 입력하면 빈 문자열이 입력된다는 것을 모르시지는 않겠지요?) 
하여간 너무 번거롭습니다. 방법이 없을까요? 
없을 리는 없죠! 필드의 기본값 속성에 공백 없는 따옴표 두 개("")를 설정해 두면 됩니다.
다음 그림은 예제 파일의 Employees 테이블의 TestField 라는 필드의 속성 설정입니다.

빈 문자열 값과 Null 값의 구분
1) 테이블에서 필드의 형식속성을 이용하여 설정합니다.
예제 테이블 Employees의 CellPhone의 Format 속성을 다음과 같이 설정하였습니다. 

     (@@@@)@@@@\-@@@@;"없음";"미확인"

첫 번째 섹션은 입력마스크인 < \(CC99\)9999\-9999;;_ >와 비슷합니다. 이렇게 설정함으로써 입력마스크의 모습을 유지하여 보여줄 수 있습니다.
그렇지 않으면 입력할 때와 화면에 보여지는 모습이 다르게 됩니다.
두 번째 섹션이 빈 문자열일 때, 세 번째 섹션이 Null 값일 때 필드에 보여 줄 텍스트입니다.

입력마스크의 앞부분의 CC는 빈 문자열 값 즉 따옴표 2개 ("")를 입력할 수 있도록 설정한 것입니다.

06-05.gif(13140바이트)

2) 계산식을 이용하는 경우에는 IsNull()함수를 이용합니다.
속성설정을 하지 않고 계산식만을 이용하여 질의에서 계산필드를 하나 만들어 본다면 다음과 같겠습니다.

06-04.gif(10756바이트)

CPhone: IIf(IsNull([CellPhone]), "미확인", IIf([CellPhone]="", "없음", [CellPhone]))

06-07.gif(11707바이트)

Null 과 빈문자열을 구별하지 않고 하나의 경우로 처리한다면
Null 값이나 빈문자열 값을 모두 하나의 경우로 처리한다면 필드의 형식 속성에선 세 번째 값을 생략하면 됩니다.
@;"모름"

계산식에서는 
CPhone: IIf(IsNull([CellPhone]) Or [CellPhone]="", "모름", [CellPhone]))

이때 Nz 함수를 이용하는 것이 간편합니다. Nz()함수에 대해서는 도움말을 참고하십시오.
CPhone: IIf(Nz([CellPhone],"")="", "모름",[CellPhone])

예제 파일] 
예제 파일에는 휴대전화 번호 필드(CellPhone)필드를 < 필수-아니오, 빈 문자열허용-예> 로 설정하여 필드가 비어 있을 때 그것이 휴대전화를 가지고 있는지 확인하지 않은 경우인가 아니면 휴대전화가 없다는 것을 확인하는 필드의 형식속성 예와 질의테이블의 계산필드 예가 들어 있습니다. 

 

  목차 | 이전 | 다음