2006-11-29, 염기웅(abc@dbabc.com.korea / kiwoong.dbabc.com)


<참고> 상기한 저자 이메일의 .korea는 스팸 방지용입니다.


버전: 공통

지난 데일리 팁에서는 매개변수 쿼리를 이용하여 데이터 조회에 융통성을 부여하는 것을 알아보았습니다. 오늘은 보다 더 편한 조건 입력을 위해서 대화상자를 이용하는 방법에 대해 알아보겠습니다.

우선 예제 파일을 다운로드 받기 바랍니다.
047_samples.mdb

예제파일 다운로드



다음 그림은 고객별 판매 실적 차트를 보기 위한 대화상자와 그 구현 예입니다. ‘고객별 판매 실적’ 이라는 대화상자가 표시되고, ‘시작일’과 ‘종료일’을 적절히 설정한 후 ‘보기’ 버튼을 클릭하면 해당 조건에 맞는 차트가 표시됩니다.


1997년 데이터를 조회한 결과는 다음과 같습니다.


오늘 알아볼 내용은 이러한 것을 어떻게 구현하는가 하는 것입니다. 엑셀에서 이러한 것을 구현하려면 상당한 프로그래밍 작업을 해야 하지만, 액세스에서는 프로그래밍 작업이 거의 없이 이러한 것을 구현할 수 있습니다.

우선 대화상자를 이용하기 위해서 다음 그림과 같이 대화상자 폼을 디자인 합니다.


여기에서 ‘시작일’ 에 해당하는 텍스트 상자는 ‘txt시작일’, ‘종료일’에 해당하는 텍스트 상자는 ‘txt종료일’로 이름을 할당하였습니다.

지난번 데일리 팁에서 작성했던 매개변수 쿼리를 변경해야 합니다. 매개변수 쿼리에서 우리가 만든 대화상자의 ‘시작일’과 ‘종료일’의 값을 가리키도록 해 주면 됩니다.


예전 매개변수 [시작일] 대신 [forms]![f004_대화상자]![txt시작일] 이라는 폼 참조식이 들어갔으며, [종료일] 대신 [forms]![f004_대화상자]![txt종료일] 이라는 폼 참조식이 들어갔습니다.

폼 참조식의 일반형은 다음과 같습니다.

[forms]![폼이름]![컨트롤이름]


여기에서 ‘[폼이름]’은 ‘f004_대화상자’ 이며, ‘[컨트롤이름]’은 ‘txt시작일’ 이므로 다음과 같은 폼 참조식을 만들어 이용할 수 있습니다.

[forms]![f004_대화상자]![txt시작일]


‘q004_고객별 판매 실적_날짜조건’ 쿼리가 실행되면 폼 참조식의 컨트롤을 참조하여 우리가 원하는 대로의 데이터를 보여주게 됩니다.

다음은 기존에 매개변수 쿼리를 이용해 만들었던 차트의 데이터 원본을 변경해야 합니다. 다음 그림처럼 레코드 원본 속성을 ‘q003_고객별 판매 실적_날짜조건’ 에서 ‘q004_고객별 판매 실적_날짜조건’ 으로 변경합니다.


이렇게 하면 아주 편하게 원하는 조건을 선택하고 그에 따른 데이터 필터를 할 수 있게 됩니다. 이러한 작업을 하는데 필요한 프로그래밍 작업은 거의 없으며, 이러한 패턴을 응용하면 여러분의 업무를 정형화 하는데 많은 도움이 될 것입니다.

이번 액세스 실무 활용 과정에서는 이러한 점을 중점으로 하여 진행됩니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kiwoong~
2006-11-27, 염기웅(abc@dbabc.com.korea / kiwoong.dbabc.com)


<참고> 상기한 저자 이메일의 .korea는 스팸 방지용입니다.


버전: 공통

액세스에서 쿼리를 이용하면 우리가 원하는 데이터를 쉽게 조작하여 볼 수 있습니다. 오늘은 이러한 조작에 융통성을 부여하는 작업을 알아보도록 하겠습니다.

우선 예제 파일을 다운로드 받기 바랍니다.

046_samples.mdb

예제파일 다운로드



예제 파일에서 ‘q001_1996년 실적’ 이라는 이름의 쿼리를 디자인 보기로 열면 다음과 같습니다.


고객별 실적을 계산하는 쿼리이며, 날짜 조건에 ‘BETWEEN A AND B’ 구문을 이용하여 1996년 실적만을 추출하도록 디자인 하였습니다.

1997년 실적을 보고 싶을 때는 어떻게 할까요? 해당 쿼리를 열어서 1996이라고 표시된 것을 1997로 변경시켜주면 되겠지요? 필요하다면 쿼리를 다른 이름으로 저장하면 되겠구요.

다음 그림은 이 쿼리를 부분적으로 수정하여 1997년 실적으로 저장한 내용입니다.


이 정도만 활용하여도 엑셀에서의 데이터 처리보다 한결 편하게 이용할 수 있습니다. 엑셀에서 자동 필터를 이용하면 데이터를 유연하게 찾을 수 있지만, 다른 조건을 찾았다가 다시 원래 조건으로 돌아오는 것이 꽤나 번거로왔을 것입니다. 하지만 액세스를 이용하면 이처럼 ‘조건을 저장’하여 데이터를 불러오는 규칙을 저장할 수 있어 편리합니다.

다음은 별도로 저장된 쿼리에 의한 데이터 결과값입니다. 1996년과 1997년의 ‘원창㈜’의 실적이 다름을 알 수 있습니다.



하지만 매 년 이러한 조건을 변경하여 저장하는 것이 과연 좋은 방법일까요? 혹시 분기별로 실적을 보고 싶다면 어떻게 해야 할까요? 혹시 월별로 실적을 보고 싶다면? 수없이 많이 저장된 쿼리에서 어떤 하나를 찾아내는 작업이 오히려 어려워지지 않을까 합니다.

그래서 오늘 공부할 내용인 ‘매개변수 쿼리’를 이용하여 이러한 쿼리 활용에 융통성을 부여해 보도록 하겠습니다.

‘매개변수 쿼리’를 이용하는 것은 아주 쉽습니다. ‘조건’에 해당하는 곳을 다음 그림과 같이 매개변수로 대치하면 됩니다.


매개변수로 대치할 때는 다음의 규칙을 따라야 합니다.
  • 매개변수명을 대괄호([])로 둘러싸 줍니다.

  • 매개변수명은 한글, 영문, 숫자를 비롯한 대부분의 특수문자를 허용하지만 ‘_’를 제외한 특수문자는 이용하지 않는 것이 좋습니다.

  • 매개변수명은 해당 쿼리에 등록된 필드명과 달라야 합니다. (앞의 그림에서 [UnitPrice] 라고 매개변수명을 할당하면 이것은 매개변수로 동작하는 것이 아니고, 필드 값을 가져오는 결과를 나타냅니다.)

  • 따라서, 매개변수명에 접두어 ‘prm’을 붙여 [prmUnitPrice] 와 같이 이용하는 것이 좋습니다.


이렇게 매개변수화 된 쿼리를 실행하면 쿼리 실행 시점에 다음 그림과 같이 매개변수 값을 물어옵니다. 여기에서는 [시작일] 과 [종료일]을 물어오겠죠? (데이터베이스 창에서 ‘q003_고객별 판매 실적_날짜조건’ 이라는 이름의 쿼리를 실행해 보기 바랍니다.)


이에 대한 쿼리 결과값입니다.


쿼리를 닫고 다시 시작합니다. 시작일을 1997-1-1, 종료일을 1997-12-31 로 하게 되면 다음과 같은 결과를 얻습니다.


매개변수 쿼리가 가지는 가장 큰 장점은 데이터를 추출할 때 ‘정형화’ 할 수 있다는 점입니다. 우리가 1996년 실적, 1997년 실적 등으로 저장한 것이 아니고, 데이터의 형태에 따라 ‘고객별 판매 실적’이라는 이름으로 쿼리를 저장할 수 있다는 것 자체가 많은 융통성을 발휘하게 해 주는 것이지요. 매개변수 쿼리를 잘 활용하면 여러분의 업무에서 자주 조회하는 데이터를 정형화 하여 쉽게 볼 수 있게 됩니다.

마지막으로 응용 예를 한 번 살펴보겠습니다. 우리가 만든 ‘q003_고객별 판매 실적_날짜조건’ 쿼리를 바탕으로 하여 차트를 만들었습니다. (폼: f003_고객별 판매 실적_날짜조건)

데이터베이스 창에서 이 폼을 실행하면 우선 매개변수 쿼리가 동작하여 시작일과 종료일을 물어옵니다. 적당한 날짜를 입력하면 다음 그림과 같이 멋진 차트가 보여집니다. 이 그림은 1996년 데이터를 조회한 것입니다.


폼을 닫고 다시 열어, 1997년 데이터를 조회하면 다음과 같습니다.


이처럼 매개변수 쿼리를 이용하게 되면 ‘데이터 추출’ 작업을 보다 손쉽고, 정형화 할 수 있는 장점이 있습니다. 다음 데일리 팁에서는 매개변수 쿼리에서 한 발 앞서 나간 ‘대화상자를 이용한 정형화’에 대해서 알아보겠습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kiwoong~
원문: http://korea.internet.com/channel/content.asp?kid=31&cid=435&nid=41205

매일 같은 시간에 출근을 하다가, 하루는 10분 늦게 집에서 나왔다. 10분 차이였는데, 평소보다 버스에 사람들이 꽤 많다는 느낌을 받았다. 내 느낌은 정확했다. 나는 평소에 도착하는 시간보다 30분 늦게 회사에 도착했다. 가끔 느끼는 것이지만, 이렇게 많은 일들이 직선적인 구조를 갖고 있지는 않은 거 같다.

직선적인 구조가 있고, 그렇지 않은 구조가 있다. 직선적인 구조란 일정한 비율을 유지하는 것을 말한다. 가령, 10분 늦게 출근하면서 10분 늦게 도착하는 것을 예상했다면 그것은 직선적인 생각을 한 것이다. 또, 10분 늦게 출근했을 때 항상 30분 늦게 도착했고, 20분 늦게 출근하면 60분 늦게 도착할 것이라고 기대하는 것도 직선적인 구조로 생각하는 거다.

그러나, 현실은 그렇지 않다. 10분 늦게 출근했을 때 30분 늦게 도착했어도, 20분 늦게 출근하면 35분 늦게 도착할 수도 있는 것이 현실이다. 그래서 현실적으로 생각할 때에는 어떤 비율을 일정하게 유지시키는 직선적인 구조의 생각을 하지 않는 것이 더 현명하다.

우리가 잘 알고 있는 20:80 법칙 같은 경우도 직선적인 구조에서 벗어나는 불균형을 잘 나타내고 있다. 기숙사에 있는 100명의 학생들이 1주일 동안에 100병의 맥주를 마셨다면 1명 당 1주일에 1병의 맥주를 마셨다고 생각하는 것이 직선적인 생각이다. 하지만, 20:80 법칙은 100명이 100병의 맥주를 마셨다면 20명의 학생들이 80병을 마셨을 거고, 나머지 80명의 학생들이 20병의 맥주를 마셨을 거라고 말하고 있다. 그것이 더 현실적인 생각이다.


세상에 직선은 없다. 직선은 인간이 만들어낸 것이다. 그래서, 직선적인 구조로 생각하는 것은 비현실적인 경우가 많다. 현실적이고 효과적으로 생각하기 위해서는 직선적인 생각에 빠지지 않는 것이 좋다.

가령, 남보다 10% 더 일을 했다고 수입이 10% 더 늘어나는 것이 아니다. 그리고, 남보다 10% 더 일을 했을 때, 수입이 30% 늘어났다고 해서, 20% 더 일을 했을 때 수입이 60% 증가하는 것도 아니다. 경우에 따라서는 10% 더 일을 했을 때 30% 더 늘어나던 수입이, 15% 더 일을 했을 때 300% 더 늘어날 수도 있는 것이 현실이다.

타율이 2할8푼인 야구 선수와 타율이 3할 3푼인 야구 선수의 차이는 단지 5푼의 차이다. 5푼이라는 것은 0.05다. 이것은 20번 타석에 들어설 때마다 안타를 1번 더 치는 것을 의미하는 아주 작은 차이다. 하지만, 그 차이 때문에 3할3푼인 선수가 3억을 받을 때, 2할8푼인 선수는 3천 만원을 받을지도 모른다.


당신의 일도 비슷하다. 만약 당신이 부자인 사람들을 보면서 ‘나는 언제 저렇게 돈을 벌 수 있을까?’ 생각하다가 ‘죽었다 깨어나도 나는 저렇게 부자가 될 수 없을 거야’ 라고 생각했다면 당신은 직선적인 생각을 한 것이다. 앞에서 말했듯이 10% 더 일을 하는 것으로 30% 많은 수입이 생겼다고 60% 더 많은 수입을 위해서 20%의 일을 더해야 하는 것은 아니다. 때로는 10%를 추가해서 30%를 얻었던 것이 노력을 15%로 올렸을 때 결과가 300% 증가하기도 하니까 말이다.

만약 당신이 지금의 현실과 자신이 바라는 미래의 차이를 직선적으로 만들어가려고 생각하고 있다면 그것은 효과적인 생각이 아니다. 직선적인 생각을 버려라. 오히려 예상이 어려워도 작은 노력을 더하고 작은 차이를 더 만들어라. 그 작은 차이가 엄청나게 큰 결과를 가져올 수도 있으니까 말이다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kiwoong~