PROGRAMMING WORKSHOP

VB.Net |
System.Data.DataSet...얽히고 섥혀서..헷갈리는 것들..

개발개체들을 만드는 사람들은 심혈을 기우려 만든다
그런데 개발자들에게 배포를 하고 사용을 잘 하게 하려면
참으로 시간이 걸린다
DataSet,DataTable 이런 컨셉으로 기존의 DAO,ADO의 Recordset등과 같이
직접 DB에서 끌어 오던 것과 전혀 다른 것을 만들어 놓으면
참으로 개념잡기에 헷갈리게 되는 것이다
또한 프로그래머, 개발자들의 입장에서는 뭐..새로 나온 것은
어떤데???궁금하고 새로운 개념에 박수도 치고 흥분도 하고 그런다
그래서 프로그래밍을 하는 사람들은 지루할 시간이 없다
나의 나이먹은 또래 친구들과는 다르다
세상모두 다 안다는 생각으로 사는 것과 는 다르다
항상 새로움에 신이 난다,모르는 것이 닥치면 또한 신이 난다
나이가 들면 세상만사 다 안다고 착각하게 되지만
프로그래밍은 그런 착각에 빠지지 않게 만든다
항상 새로운것이 지천에 널려있다는 것을 알면서 산다
그래서 좋은 것이고..자꾸 권하게 되는 셈이다

특히 DataSet의 개념은 박수를 많이 보내고 싶은 개체들이다
이것도 계속 진화하고 있다는 점..!!

실은 몇번을 패대기치고 말았던 개체들이다..
뭐야...뭐가 이렇게 복잡해..그냥 Recordset하나에 불러다가
쓰고 말면 되지..복잡하게스리...
그러다가 다시 한번 살펴보고..또 한동안 버리고..
그리고 미련이 남아서 또 깊이 살피고..
모든 새로운 무언가를 자기화시키는데는 그런 과정을 거치는 것!!

그런데 억세스에서 테이블 전체를 참조하여
모두 DataSet.xsd화일에 구성이 다 되어있고
TableAdapter들도 모두 구성이 되어 있는데
왜 테이블을 끌어다 놓으면 윈도우 밑에 또 TableAdapter 콘트롤등이
만들어지나요????
DataSet.xsd화일에 구성된 것은
우리가 변수를 선언해 놓은 상태라고 생각하시면 된다
아직 변수에 값이 어싸인 된것은 아닌 상태이다
그러나 윈도우폼에 테이블을 끌어다가 놓을때는

Dim oTableAdapter As TabelAdapter
라는 변수 선언이
Dim oTableAdapter As New TableAdapter

와 같이 프로그래밍적으로 개체가 생성되는 순간으로 보시면 되는 것이다
DataSet.xsd 화일의 다이아그램은
그냥 변수가 선언된 상태로 보시면 되는 것이다
공연히..이렇게 테이블을 죄다 끌어다 놓으면 화일이 무겁지 않나요??
라는 헷소리를 하지않게 되는 것이다

이제 지난 화일에서 DataGridView에 끌어다 놓은 테이블의
참조 ID만 덜렁 나타나서..



이런...이렇게 숫자만 줄줄이 나타나면 어떻게 뭐가 뭔지 알고
입력을 하거나 수정을 한단 말이야!!!
라는 이유와 의문과 해결을 해보도록 하자
헷갈리는 속성..이렇게 저렇게 하다가 우연히 소뒷발로 쥐잡는 식으로
해서는 영원히 헷갈린다..제대로 원리를 알면 영원히 잊어 먹지 않는다
이런 개념은 억세스도 마찬가지 모든 DB관련 공히 같다..

억세스의 테이블을 열어 보면
어..이것은 콤보상자가 있는데요..
그렇게 설정을 해서 콤보상자가 나타나는 것이지..그냥 나타나는 것이 아니다



Employees테이블을 참조하여 이름을 모두 갖여다가
콤보상자의 DataSorce로 삼고 본래의 테이블..Orders테이블과는
EmployeeID 휠드와 Binding을 하는 것이 핵심이다

이미 앞에서 수없이 언급한 DataSource 그리고 Binding..그것을
차분히 생각하면 되는 것이다
콤보상자에 주욱 채워지는 것은 어떤 데이타를 갖여오고
콤보상자에서 어떤 값을 선택하였을때 콤보상자의 어떤값과
Order테이블의 어떤 값을 바인딩할 것인가..를
차분히 정리해주면 끝나는 셈이다

지난 페이지에서 억세스의 North.mdb화일의 테이블을 모두
한꺼번에 끌어다가 DataSet을 만들었다
이것은 줄줄이 변수를 만들어 놓는 것과 같다고 했다
그래도 필요한 것만 뽑아다 놓는 것이 좋을수도 있고..
지난 페이지에서는 northwind.mdb화일의 테이블의 구성을
보여드리기 위하여 모두 끌어다 놓은 것이고
실제로는 필요한 테이블만 끌어다가 만드는 것이 좋다
물론 다 끌어다 놓아도 잘못된 것은 아니지만...개발자의 취향대로다..
문제는..
하나의 프로젝트에는 DataSet이 여러개 만들어져도 되나요???
라는 질문이 있을 법한 것이다..당연 여러개가 만들어져도 상관없다
문제는 상품을 조회하는 콤보상자를 만들기 위한 참조테이블은
상품ID와 상품명만 있는 테이블이면 된다
다른 휠드는 필요 없는 것이다
그런데 이전 페이지에서 northwind.mdb에서 몽땅 끌어온 테이블들 중
상품을 관리하는 테이블 Products 테이블은 상품ID와 상품명외에
필요하지 않은 정보도 모두 갖여오게 DataTable이 구성된 셈이다
그러니 참조를 위한 DataTable을 별도로 만드는 것이 알뜰 살뜰한
살림이 된다

DataGridView속의 ComboBox를 만들어 넣으려면
ComboBox가 참조할 목록이 준비되어야 할 것이다
Orders 테이블을 참조하고 있는 DataGridView속의 휠드중의 하나인
ProductID는 숫자이다 이것을 숫자는 그대로 유지하면서
사용자의 눈에만 상품명을 인식할수 있는 ProductName휠드를
보이게 하고 싶은 것이다

그럼 목록상에 두개의 정보가 있어야 한다
하나는 Orders테이블상의 EmployeeID와 같은 값을 유지하고 있어야 할
EmployeeID와 EmployeeName 두개의 정보가 필요할 것이다
목록테이블 즉 참조테이블을 만들자..



이렇게 데이타베이스관련 소루션을 만들다보면
테이블..참조테이블..이것을 관리하는 DataSet의 갯수가
많이 늘어나게 되고 이때는 이름을 잘 식별하기편리하게 하는 것이
좋다 위와 같은 참조테이블은
실은 테이블에서 원하는 것만 골라서 갖여다 놓는 쿼리테이블의
이름에는 LookUp(참조)라는 것을 붙여 주는 것이 식별하기 좋다
혹은 자신만이 알기 쉬운 나름대로의 문자를 사용해도 좋고

이제 이것을 어떻게 연결할까..
항상 기억하시고 계실 것은 윈도우폼과 DataSet..즉 DataSource와의
연결역활은 BindingSource콘트롤이 한다는 것을 기억하시는 것이 좋다
기억할 것도 없다 몇개의 테이블의 작업을 하다 보면
자동적으로 기억나게 될 것이니까..
DataSet을 끌어다가 윈도우폼에 놓으면 DataGridView나 Detail이
만들어졌지만 이 LookUp용 DataSet(DataTable)은 어디다 끌어다놓아야 하나???
끌어다 놓을 곳이 현재 없다..
이럴때는 BindingSource콘트롤을 아래의 그림과 같이 끌어다 놓는다



그리고 속성창에서 이름을 식별하기 좋게 지어준다
벌써 이컨트롤을 모아놓고 있는 것이 복잡해 보인다..
그러니 이름을 헷갈리지 않게 잘 지어주는 것이 편리하다
물론 머리가 좋아서 헷갈리지 않는 다면 아무렇게나 지어준다고 누가 잡아가지 않는다
그러니 현재 이 BindingSource는 빈탕이다..
DataSorce를 연결해 주어야 할 것이다



현재 DataSet은 테이블을 하나밖에 없지만
BindingSorce속성중의 DataMember속성을 Employees를
선택해 준다
이 것의 의미는 DataSet에는 여러개의 테이블이 있을수 있으니
그중의 하나의 테이블인 Employee테이블을 사용하겠다는 속성인 것이다
이것을 선택해주지 않으면 역시 허당이 된다
DataSet중에 어떤 테이블을 사용할 것인지의 지정..
이제 이 BindingSource를 어디에 연결하나..
아래의 그림과 같이 DataGridView의 오른쪽 끝의 작은 화살표
편집모드로 들어가서 문제의 열에 대한 편집을 그림과 같이 한다



콤보상자의 DataSource속성에 위의 DataBinding콘트롤을
연결해 주는 것이다
DisplayMember는 콤보상자에 인지하기 좋게 나타나는 이름이고
ValueMember는 DataGridView의 값과 같은 값을 유지하는
EmployeeID가 되는 것이다

장황하게 이야기했지만 간단하지만 또 헷갈리기 쉬운것
Display나 Value를 엑셀에서 진정한 값과 보여지는 값등에서
이미 컨셉이 잡히신 분들은 쉽게 이해할 것이지만
그렇지 않으면 마냥헷갈린다..
그래서 역시 엑셀은 모든 프로그래밍의 기초다!!

아래와 같이 보기 좋게 실행 될 것이다



워크시트에서 유효성검사의 목록과는 쫌 다르겠다..
유효성목록의 값은 그자체가 값이고
위의 콤보상자는 보이는 값과 실제값이 다르다는 것!!
자꾸 관련지어서 생각하면 이해가 훨씬 쉬워진다
VBA에만 열공하시는 분들도 종종 이 페이지를 같이 보시면
좀더 VBA에 대한 느낌이 강하게 될 것이니까..

자..아직도 갈길이 좀 멀다!!
화일에 첨부된 northwind.mdb쌤플화일은 앞으로 억세스관련되는
작업을 할때 항상 참조될 것이니..잘 보관하셔서 소루션내에
삽입하면서 보시기 바랍니다

***[LOG-IN]***