배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Access 버전:   2002
검색어:   텍스트박스,쿼리
제목:   텍스트박스와 쿼리와의 조화
     
 

새 페이지 1

  STEP> 따라하기


※ 오늘 Daily Tip은 Crocii(최천군)님이 제공해주신 내용입니다.

지난번 반응이 너무 썰렁해서 어떻게 해야 하나 고민하다가 내용을 이어나가기로 힘겹게 결정 했습니다. 오늘은 텍스트박스와 쿼리와의 조화에 대해 알아보도록 하겠습니다.

지난번에 도메인 함수에 대해 설명 드렸습니다. 센스 있으신 분은 눈치 채셨겠지만 도메인 함수는 쿼리 즉 SQL과 많이 닮았습니다.

이전 팁에서 예제로 사용했던 함수를 예를 들어 설명하겠습니다.

DSum("
금액", "판매", "고객 = '홍길동'")
같은 내용을 쿼리로 얻으려면 아래와 같이 디자인 해주면 됩니다.

아래에서처럼 Dsum함수를 사용했을 때와 같은 결과를 얻을 수 있습니다.

이 쿼리를 마우스 오른쪽 버튼을 클릭하고 SQL보기로 전환하면 다음과 같은 SQL구문이 나타납니다.

   SELECT Sum([금액]) AS 총금액
   FROM
판매
   WHERE (((
판매.고객)="홍길동"));

SELECT Sum([금액]) AS 총금액
구문에서 값을 부를 필드명 선택합니다.

AS 총금액(필드의 별칭)
[
금액]이라는 필드의 데이터를 가공하기 때문에 [금액]이라는 이름을 다시 사용할 수 없습니다. 때문에 새롭게 다른 이름을 지정해 주는 것이지요. 디자인 보기에서는 총금액: 이와 같이 표현합니다.

FROM 판매
데이터를 부를 테이블 또는 쿼리의 이름입니다. 즉 도메인 함수에서의 도메인 부분이지요.

WHERE 고객="홍길동";
괄호가 많아서 정리했습니다. 위와 같이 작성하여도 문법적으로 틀리지 않습니다. 이 구문이 조건부분 입니다. 고객이 홍길동인 사람의 데이터를 찾으라는 구문이지요. 도메인 함수와 비교해 보겠습니다.

DSum(“필드명”, “도메인명”, “필드= ‘홍길동’”))
SELECT Sum(
필드명) FROM 도메인명 WHERE 필드=”조건”; 

도메인함수의 조건부분에 데이터타입의 조건이 오면 왜 작은 따옴표가 필요 했는지 이제 눈치 채셨을 겁니다.
쿼리문에서 사용할 따옴표를 함께 넣어주기 위해서 작은 따옴표를 배치한 것 입니다. 다음 기회에 사용자 도메인 함수(?)를 모듈에서 만드는 팁을 소개할 생각입니다. 그 때 자세히 설명 드리겠습니다.

결론은 도메인 함수는 바로 쿼리 그 자체입니다. 그런데 문제는 도메인 함수는 쿼리를 직접 사용하는 것 보다 결과값을 구하는 속도가 상당히 느립니다. 또한 쿼리처럼 사용자의 복잡한 요구에 응하는 조건을 모두 표현하기에도 한계가 있습니다.

예를 들면 홍길동이라는 고객의 전체 구매한 금액의 합계, 평균, 최대값, 최소값을 구하라고 한다면 합계를 위해 전체 레코드에서 한번 함수를 사용하고 평균을 위해 전체 레코드에서 다시 한번 사용하고 최대값을 위해 전체 레코드에서 다시 한번 사용하고 최소값을 위해 전체 레코드에서 다시 한번 사용하게 됩니다.

읽기 지루하시라고 일일이 열거 했습니다. 이만큼이나 비능률적인 작업이라는 것이지요. 레코드 수가 많다면 눈에 띄게 속도가 느려지게 됩니다.

게다가
조건이 복잡하다면 도메인 함수 사용은 불가능하게 됩니다.
예를 들어 홍길동이라는 고객의 최근 세 번(같은 판매일에 두 번 이상 구매 했으면 구매번호가 큰 것이 최근 것) 구매한 금액의 합계와 평균과 최대값과 최소값을 구하라라는 조건이라면 도메인 함수로는 구할 방법이 없습니다. 텍스트박스가 다시 바보가 되는 순간입니다.
이 때, 모든 컨트롤의 똑똑하고 절친한 친구 쿼리가 나 몰라라 외면하지 않습니다.

위의 두 번째 조건대로 데이터를 구하기 위해 다음과 같이 쿼리를 작성합니다
. 쿼리의 이름은 "내친구쿼리"라고 하겠습니다.

SQL보기로 전환하신 다음 아래와 같이 TOP 3 라고 살짝 적어 주십시오.

아래와 같이 조건에 맞는 세 레코드가 나왔습니다. "내친구쿼리"라는 이름으로 저장 합니다.

입력란의 컨트롤 원본에 아래와 같이 작성하였습니다.

="최근세번구매 합계:" & DSum("금액","내친구쿼리") & " 평균:" & round(DAvg("금액","내친구쿼리"),0)

=DSum("금액","내친구쿼리")
도메인명에 쿼리의 이름을 적어 줍니다. 조건은 이미 내친구쿼리가 걸러 줬기 때문에 기입할 필요가 없습니다.

도메인 함수는 적은 레코드에서 계산하기 때문에 속도 문제도 해결 되었고  위와 같이 만족할 만한 결과도 얻어 냈습니다. 입력란도 쿼리를 얼마든지 사용할 수 있습니다.

쿼리에 익숙하시다면 아래와 같이 작성해서

이런 데이터를 만든 다음

=Dfirst(“금액합”,”내친구쿼리”)
이와 같이 도메인 함수를 사용하면 더더욱 효율적 이겠지요?

다음 기회에 DAO를 사용하여 사용자 정의 도메인 함수를 생성하여 진짜로 입력란에서 쿼리를 마음껏 사용하는 팁을 소개 하겠습니다. 텍스트박스의 개과천선(?)을 축하하며 샘플은 배움터 자료실에 올려 놓겠습니다. ^^