DB 응용프로그램 제작과 교훈

[목차(도우미)]
업무용 응용 프로그램을 4월에 만들어 보았다. 날로 사무관리적 업무가 폭주하기 때문에 사무 처리를 간단하고도 효율적으로 수행하기 위하여 응용 프로그램을 제작하기로 한 것이다.

하고자 하는 업무는 대략 이런 일이다.(정확한 내용이 아닌 우회 표현이다.)
  • 프로젝트 기간과 프로젝트 팀장을 기록한 서류 작성(엑셀 시트)
  • 프로젝트 납품 서류 작성(엑셀 시트)
  • 프로젝트 주문서의 작성(웹을 이용)

기존의 업무 프로세스자동화 프로세스
프로젝트의 정보는 웹에서 다운로드하여 엑셀 표 형식으로 파일 저장한다.
프로젝트 멤버에게 파일을 배포한다.
프로젝트의 정보는 웹에서 다운로드하여 엑셀 표 형식으로 파일 저장한다.(기존과 동일)
프로젝트 멤버에게 파일을 배포한다.(기종과 동일)
프로젝트 기간, 팀 정보 서류를 작성한다.응용 프로그램에서 자동 생성한다.
납품용 서류를 작성한다.
응용 프로그램에서 자동 생성한다.
프로젝트 주문서를 웹에서 다운로드한다.
(주된 검색 키워드를 원본 엑셀에서 복사)
프로젝트 주문서를 웹에서 다운로드한다.(기존과 동일)
단 엑셀에서 셀복사하면 글자 뒤에 개행 코드가 들어가는 점을 단점을 개선한다.

엑셀의 데이터 원본은 데이터베이스(DataBase, DB)를 경유하여 GUI 응용 프로그램에서 불러들여서 서류 서식에 반영처리하게 되면 프로젝트 서류와 납품용 서류를 자동으로 작성하게 된다.

데이터베이스를 사용하는 이유는 엑셀표에서 독자적으로 검색하고 내용을 기록하는 것보다 데이터베이스 엔진을 사용하는 것이 더 활용성이 있기 때문이다. 자동화하고자 하는 것 자체가 복잡한 업무가 아니므로 자세한 상술은 생략하기로 하고 자동화의 교훈을 메모하기로 한다.

데이터베이스:
MDB 파일(MS액세스)
DB엔진:
ADODB
응용프로그램 언어:
델파이(Delphi Pascal)


(팔삭과 오렌지 칼: 팔삭은 껍질이 질기고 단단해서 전용 칼을 써야 잘된다. 도구없이 맨손으로만 껍질을 벗기는 경우보다 2배 이상의 속도가 난다. 물론 빨리 껍질을 벗긴다고 해서 다 입으로 들어가는 것은 아니다. 옆에서 기다리는 아이들이 냉큼 집어먹고 나면, 남는 것은 껍질뿐이다. 이것은 아이러니인가 아이려니인가?)


자동화의 교훈

  • 서류에 오류가 없다.
    이전에는 기입 누락이 생기지 않도록 작성확인하는 시간이 많이 들었지만 자동화에는 기입누락이 생기지 않는다.
  • 작성 시간의 단축이 가능하다.
    이전에는 반나절이 결려서 해야할 양이 버튼 10번을 누르는 시간이면 된다.
  • 누가 작업하더라도 동일한 정밀도를 얻는다.
    숙련된 사람이 아니어도 버튼은 누를 수 있기 때문에 바쁠 때는 부하직원에게 실행을 의뢰하고 도장만 찍어도 된다.

주로 사용된 기법에 관해서

지금까지 사용된 기법은 소스코드리뷰(블로그)나 사례연구(블로그)에서 자주 언급한 내용이므로 새로울 것이 없지만 간단히 언급하기로 한다.


데이터베이스의 접근 클래스

type
  COffice = class (TObject)
    property Document: OleVariant;
  CExcel = class(COffice)
  CAccess = class(COffice)
     public function Execute(const Key:string; const Args:array of const);

의 계층구조를 가진다.

CExcel.Document는 WorkBook 개체가되고 CAccess.Document는 RecordSet이 된다.

여기의 독특한 부분은 CAccess.Execute인데 Execute는 먼저 ADODB의 Connection을 대상으로 Key에 해당하는 SQL 문을 데이터베이스로부터 취득한다. 다시 치환문자열(Args)을 Format(strSQL, Args)로 바꾼 다음 SQL문을 실행한 결과의 RecordSet을 되돌린다. 물론 RecordSet은 Document 속성에 넣어두기 때문에 실행 결과를 변수에 넣어두지 않아도 된다.

응용 프로그램을 기동하거나 종료할 때 프로그램 위치 정보를 기록하기 위하여 흔히 TIniFile클래스를 사용하는데 데이터베이스에 연결하는 것이 주목적이기 때문에 위치정보조차도 데이터베이스에 보관한다. 그러면 마지막 저장하는 방법이 아주 간단해 진다.
SQL문 리소스
setMyPosition : UPDATE tableApplication SET nLeft=%d, nTop=%d, nWidth=%d, nHeight=%d WHERE Key='Main'

소스코드
procedure FormDestroy(Sender)
begin
  FAccess.Execute('setMyPossition', [Left, Top, Width, Height])
end;
보통 4줄을 필요로 하는 코드가 한줄로 끝난다. 
  전체적으로 메인 유닛은 200라인정도로 완성되었다. 오피스 유닛은 50라인정도가 된다. 각 함수는 두줄짜리 함수가 많다. 부하 직원에게 슬쩍 소스를 보여 주었더니 소스의 규모에 놀라워 했다. 
by 금메달.아빠 on 2010. 5. 20. 00:24