PROGRAMMING WORKSHOP

VB.Net |
System.Data.DataSet...Access-mdb 테이블관계의 매력

앞페이지까지 실행한 것으로 Customers 테이블만 표현하는
윈도우폼을 자동생성하는 것 까지해 보았다
이제 DB의 관계테이블의 파워와 더불어 다양한 데이타관련
DataSet,DataTable그리고 윈도우의 컨트롤들을 경험할 차례다



끌어다 놓으면 윈도우하단 트레이에 OrdersBindingSource콘트롤과
OrdersTableAdapter콘트롤이 또 생성됨을 볼 것이다



(물론 이 콘트롤들은 눈에 보이는 콘트롤은 아니다)
Oders테이블만 전담하여 일을하는 녀석들이다

DataSource창에서 각 테이블의 옆의 어떤 컨트롤을 사용하겠느냐의
선택에 따라서 Detail형식과 DataGridView형식으로 그려진다
위의 Customers와 Orders 테이블의 관계는 northWind.mdb에서
이미 관계에서 정의된 내용이 DataSource와 DataSet다이아그램상에
구현된 것이다..원본상에서 구현된 내용들이 그대로 반영된 것...

이것의 의미는 하나의 고객이 여러개의 자식뻘 되는 주문정보를
갖고 있다는 이야기가 되는 것이다
즉 Customer정보를 다음 정보로 이동될때마다 해당 고객이
주문하였던 기록이 DataGridView상에 줄줄이 나타나는 것이다
물론 동기화가 된상태로 보여주는 것

실행시켜보면 알게 된다
만약 DataSorce창에서 Customers의 트리형식으로 자식이
되게 표현된 Orders테이블을 사용하지 않고
Customers테이블과 같은 레벨에 있는 것을 끌어다 놓았다면
두개의 테이블의 내용은 전혀 상관없는 남남이 된다는 점
잊지 마시기 바란다!!

다음은 Order Details테이블을 아래의 그림과 같이 위와 같은 요령으로
끌어다가 윈도우에 놓는다



테이블의 관계를 또 잘 이해하셔야 한다
Orders테이블은 한번의 주문이 발생한 기록을 관리하는 테이블이다
한번의 주문서에는 품목이 다양하고 특기사항들이 있는 것이
실생활이다..
식당에 가서 밥을 먹어도 한번의 주문서에는
메뉴에 따라 여러개의 기록이 있다는 것을 아는 것은 상식이다
바로 그런 일상의 일의 관계를 테이블로 구성을 하려면
관계, 테이블의 상하관계가 이루어지지 않고는 구성을 할 수 없는 것이고
테이블을 구성하고 테이블과 테이블간의 관계를 설계하는 것은
전체의 흐름을 볼수 있는 눈을 갖여야 한다
식당의 DB를 설계한다고 하면 종업원은 설계를 할 수 없다
전체흐름을 볼수 있는 사장만이 할 수 있는 것이다
예를 들어서 설렁탕한그릇이 나온다..
설렁탕을 만들기위한 원자재에 대한 생각은 종업원은 할 수없다
주방에서 일하는 조리사들의 정보도 알수가 없다
모든 정보는 관계가 구성되어야 정보로서 가치가 있다..
그러니 DB설계자는 경영자와 동급의 눈을 갖여야한다
아니..동급보다 더 디지탈마인드까지 갖추어야 하는 특수한 존재다
그러니 이 페이지를 즐기는 분들은 자부심을 갖여야 할 일이다

아무튼 Order Details테이블을 끌어다 놓으니
윈도우밑의 트레이에 또 Order Details용 콘트롤 두개가
(Order_DateilsBindingSource와 Order_DatailsTableAdpater)
또 생기는 것도 관찰할수 있었을 것이다
하나도 놓치지 말고 관찰하셔야 한다..흥미로우니까..
프로젝트가 커지면 이런 콘트롤들이 잔뜩 몰리게 되니까..
차근 차근 관찰하면서 하는 것이 오류를 방지 한다
자동화적으로 모두 만들어지지만..까딱 잘못삭제를 해버리거나
하면...자동이 커버를 못하고 모든 것이 엉망이 되는수가
있으니까..

지금 위와 같이 메뉴얼로 하는 내용은 앞페이지에서 하였던
프로그래밍적으로 모두 처리가 된다는 점도 잊지 마시고
우선 이렇게 메뉴얼로 할 수 있다는 것을 아시고
프로그래밍적으로 처리하는 것이 좋은 방법이다
아래의 그림과 같이 데이타베이스적틀이 완성된 내용이다
이제 윈도우상의 컨트롤를 좀더 보기좋게 꾸미고
다양한 콘트를들을 추가하여 나가면 될 것이다



고객을 선택하면 해당 고객의 주문서가 나오고
주문서의 내용을 선택하면 자동으로 Order Details상의
관련 주문내역이 실시간으로 연동이 되어 움직인다
이와같은 것을 만들면..
실제업무에서 주문받고 처리하는 하나의 소루션이 아주
빠른 시간에 만들어진 셈이다

또한 중요한 것은 아하!!! 관계를 구성한다는 것이
중요하겠구나!!라는 것을 실감하시면 된다
DB테이블만 잘 만들면..
윈도우폼에서 관리하던..웹페이지에서 관리하던..
엑셀에서 관리하던..억세스의 내장된 폼이나 리포트를 사용하던
다양한 사용자인터페이스의 선택의 폭이 있다
그러니 인터페이스를 만드는 입장, 윈도우폼,억세스폼등등에서
기를 쓰고 내가 더 좋은 기능이 있다!!!라고 뽐내고 있는 것이다
위의 내용을 억세스의 폼으로 구성해도 똑같은 요령이다
그런데 윈도우폼이 거의 억세스와 흡사하게 기능을
발휘하니..윈도우폼을 좀더 선호하기도 하지만
외국에서는 억세스마니아들은 억세스를 또한 자알 활용한다
억세스입장에서 좋은 것은 Report개체가 좋은 것이 있다고 하고
윈도우폼입장에서는 웃기지마라..엑셀을 활용하여도 되고
워드를 활용해도 되고..서로 버티는 것이 재미있는 일이다

VB.Net의 다양한 기능을 활용하는 입장에서는 또
윈도우폼이 이점도 훨..많은 셈이기도 하고!!
여기에서는 VB.Net측면의 활용을 지향하기 때문에
억세스는 좀 잊고 윈도우폼으로 집중하고 있는 것!!

위의 완성된 상태는 View는 별일 없이 하지만
문제는 입력,수정등을 할때
위의 콘트롤에서 손을 좀 보아줄일들이 생긴다



그래서 쉬운 것 같으면서 까다롭다..
그러니 아무나 할 수 있는 것이 아니다..
여러분만이 할 수 있는 작업이다
아니 직원의 ID만 나타나고 상품의 ID만 나타나니
수정을 하거나 추가를 하려고 해도..깝깝하다..
번호에 따른 조견표를 딜다 보고 할 수도 없는 것이고
콘트롤을 좀 손을 보아주면 된다..
앞에서 하였던 콤보상자를 달아매면 되는데
위에서 나타나는 ID번호와 콤보상자를 어떻게 엮느냐..
모르면 한없이 헷갈리는 것이고..
알면 쉬운 것이고