※ 아래 Daily Tip은 염기웅님이 제공해주신 내용입니다
(오늘의 학습자료 다운받기)
다음과 같은 폼이 있다고 생각해 봅시다.
이 폼은 무역회사에서 ‘수주’ 정보를 기록하는 폼입니다.
오늘은 ‘고객’을 입력했을 때 ‘고객’에 대한 상세정보를 표시하게 하는 방법에 관해서 알아보겠습니다.
‘고객’ 정보를 입력할 때 고객의 주소가 같이 표시된다면 좋겠지요? 이런 것은 다른 부분에서도 많이
활용될 여지가 있습니다.
우선 액세스의 계산식에 대해서 잠시 알아보도록 하겠습니다.
다음 그림은 ‘고객’을 입력하면 자동으로 그 왼편에 있는 컨트롤에 고객의 세부정보가 보이게 하는 폼을
간단히 구현한 것입니다.
이 폼을 디자인 보기로 열어보면 다음 그림과 같습니다.
라는 계산식을 빈 컨트롤에 기록하면 이 컨트롤에는
CustomerID의 컨트롤 값이 복사됩니다. 원래 폼을 살펴보기 바랍니다.
분명히 CustomerID 컨트롤에는 ‘해바라기 백화점’이라고
기록되어 있는데 왜 ‘VINET’이라는 값이 복사되었을까요? 이는 CustomerID 컨트롤이
콤보상자이기 때문에 그렇습니다.
일반적으로, 콤보상자는 보여지는 값과
콤보상자가 반환하는 값이 다를 수 있습니다. |
콤보상자에서 보이는 값은 고객명인 ‘해바라기 백화점’이지만
실제로 콤보상자가 가지고 있는 값은 고객번호인 ‘VINET’이 됩니다. 궁극적으로 오늘 알아볼 내용은
CustomerID 콤보상자에서 다른 값을 가져오는 방법에 관한 것입니다.
이제 ‘고객’을 입력하면 다음 그림과 같이 고객의 ‘주소’가
같이 표시되도록 구현해 보겠습니다.
가장 간단한 방법은 Orders 폼의 레코드 원본을
‘고객 주소’까지 포함하는 방법입니다. Orders 폼의 레코드 원본을 다음 그림과 같이
수정합니다.
그러면 수주정보와 함께 고객번호, 그리고 고객의 주소까지 한
화면에서 볼 수가 있습니다.
그리고 빈 컨트롤을 하나 등록하고, 레코드 원본에서 설정한
값인 CompanyAddress를 컨트롤 원본 속성으로 지정하면 고객 정보와 함께 세부 정보인
고객 주소까지 한 화면에서 볼 수 있습니다.
지금까지 알아본 것이 첫 번째 방법이고, 다른 방법이
있습니다. 첫 번째 방법보다는 이 방법이 여러 가지 이유로 더 좋은 방법입니다. 다음 그림처럼 결과는
같지만 구현하는 방식은 완전히 틀립니다.
폼의 레코드 원본 속성은 수정하지 않습니다. 그리고 다음
그림과 같이 세부정보를 표시할 컨트롤의 컨트롤 원본 속성을
라고 설정합니다. 이 식은 CustomerID’
콤보상자에서 2번째 컬럼값을 가져오라는 의미를 가지고 있습니다.
그리고 콤보상자의 행 원본 속성을 다음 그림과 같이
수정합니다. 세부정보로 표시하고 싶은 필드를 콤보상자의 행 원본 속성에 삽입해야 합니다.
이 쿼리를 데이터시트 보기로 해 보면 다음 그림과 같습니다.
만약, 현재 레코드가 ‘LONEP’ 이고, Column(2)로
했다면 세번째 컬럼(0부터 시작해서 2번째 컬럼)의 값이 보이게 되는 것입니다.
여기서 첫 번째 방법으로 하는 것보다 두 번째 방법으로 하는
것이 더 좋습니다. 왜냐하면 두 번째 방법은 데이터의 원본을 수정하는 것이 아니고 부가적인 데이터만
수정하는 것이기 때문입니다.
일반적으로 입력폼의 경우 데이터 원본을 여러 테이블로 구성된
쿼리로 하는 것보다는 실제로 입력해야 하는 테이블 한 개로만 구성하는 것이 좋습니다. 그런데 부가적인
데이터를 표시하기 위해서 입력폼에 여러 테이블로 구성된 쿼리를 데이터 원본으로 한다는 것은 부적절해
보입니다. 또, 여러 테이블로 구성된 쿼리를 구현할 때는 조인 문제도 생각해야 하는 등, 첫 번째
방법은 고려해야 할 사항이 많습니다.
두 번째 방법은 폼의 데이터 원본은 수정하지 않습니다.
Orders 입력폼이므로 Orders 테이블만 폼의 데이터 원본으로 설정하면 됩니다. 부가적인
데이터를 보기 위해서 콤보상자의 데이터 원본을 수정하였으므로 입력폼의 데이터 원본 자체를 수정할
필요가 없습니다. 두 번째 방법이 더 발전적인 방법이며 이를 활용하면 여러분 응용프로그램이 보다 더
풍성해질 것이라고 생각합니다.
|