PROGRAMMING WORKSHOP

VB.Net |
System.Data.DataSet,,,,쏘스의 정보를 바꿔주기

uno-weekly의 후론트페이지의 섭타이블을..
[개체지향적 사고..]라고 지어 놓았다
왜 이런 희안한 소리를 하는지..
VB.Net을 살펴보면서 슬슬 감이 잡히셨으면 좋겠다
그런 목적의 페이지라고 할 수 도 있으니까
프로그래밍개체의 철학에 빠져들면 참으로 흥미로운데..
그냥 그런 생각을 하면서..이 코너의 흐름을 잡아간다
워드문서에 접근하다 보면 Table이라는 개체를 갖고 있다
엑셀에서 VBA에 어느 정도 구력이 쌓이면...
가만있자..워드의 Table개체가 재미있네..
이 개체를 엑셀에서는 없으니까 하나 만들어 볼까??
라는 생각이 들면 잘 빠져 들고 있는 셈이다

아무튼..
앞페이지에서 XML을 쏘스로 윈도우폼에서 정보를 불러 보고
편집도 해보고..했는데...어라!@#
닫았다가 다시 열면 편집한 내용은 다 사라지고 변함없는
내용을 또 보여준다
쉽게 생각하여
엑셀을 연다 편집을 한다..도형도 그려 넣고, 서식도 하고
그런데 깜빡 그냥 닫았다..
다 날아갔다..
저장을 하지 않는 것이다
윈도우폼의 경우도 마찬가지다..저장을 하지 않았다

엑셀에서 저장을 하지 않았다고 하는 것은
엑셀이 메모리상에 떠 있는 상태에서는 정보가 모두 메모리에 저장은 되었었다
그러나 이 메모리상의 것이 하드메모리쪽으로 저장이 안되었듯이..
윈도우폼에서 연결된 DataTable은 메모리상의 정보창고였을 뿐이다
이것을 하드상으로 옮겨야 하는 것이고
이때 하드메모리는 여러분의 PC상의 하드메모리일수도 있고
네트워크로 연결된 써버상의 하드일수도 있을 것이다
물론 앞페이지의 것은 여러분의 PC상의 하드메모리상의 xml화일
인 것이고..

DataTable의 내용을 하드로 옮긴다..
한단계 더 높은 개체 DataSet에서 이 일을 하게 된다
혹시 몇페이지 전의 DataSet내의 TableAdapter라는 개체를
살짝 보여드렸는데 기억하시는지???
바로 이 TableAdapter가 정보를 하드와 (혹은 써버와)사이에서 옮겨가고, 옮겨오고 하는 일을 한다
그러니 모든 정보의 변화는 이놈의 역할이다
아참..!!그런데 이 Adapter는 데이타베이스와의 역할이다
일반 화일 XML화일과는 상관 없다
데이타베이스를 다루기전에 미리 그냥 힌트만 드린 것이고..
데이타베이스외의 저장작업은 다른 방법을 택한다

그냥 너무도 간단하다
DataSet에서 xml화일을 어떻게 읽어 들였었나??
DataSet.ReadXML("화일명")
그렇다면 써주면 되지 않겠는가?
그런 메소드가 있나..
DataSet.WriteXML("화일명")
오호...이것으로 끝이다

우선 저장하는 버튼을 하나 달자..
BindingNavigator콘트롤을 참 편리하다
BindingNavigator는 실은 윈도우 콘트롤중의 하나인 ToolStrip개체속에
만들어 진것이다
아래의 그림과 같이 디자인 모드에서 ToolStip콘트롤 오른쪽 끝을 마우스로
크릭하면 추가할수 콘트롤 목록이 나타난다



버튼을 하나 선택한다
버튼은 저장표시의 image화일을 버튼의 그림에 올리면 좋겠으나
생략하고 디폴트로 나타나는 그림을 그냥 사용하도록 하고
이 버튼을 더블크릭하여 크릭이벤트프로시져로 이동하여
아래와 같이 작성한다

Private Sub ToolStripButton1_Click_1( _
	ByVal sender As System.Object, ByVal e As System.EventArgs) _
	 Handles ToolStripButton1.Click
	 
        Dim oTbl As DataTable = BindingSource1.DataSource
        oTbl.DataSet.WriteXml("books.xml")
End Sub

딱 한줄만 하면 된다
두줄 인데요????
보기 좋으라고 두줄로 한 것이고 한줄로 하면

CType(BindingSource1.DataSource, DataTable).DataSet.WriteXml("books.xml")

와 같이 된다
DataSet에 WriteXML메소드가 있다고 그랬다
그러면 DataSet개체를 찾아 올라가야 한다
BindingSource1개체는 그냥 접근 되는 개체이니
여기에서 DataSource속성이 곧 DataTable이고
DataTable에 올라가면 그냥 DataSet속성을 사용하면
DataSet개체를 얻게 되고 그러면 WriteXML메소드멤버에
접근하니 그렇게 실행하면 하드의 XML화일에 저장이 되는 것이다
뭐가..이렇게 쉬워??!!
DataSet개체가 없다면 코딩삽질을 꽤나 해야할 일인 것이다

앞페이지의 화일에 위의 내용을 직접 연습해 보시기 바란다
또한 저장후 프로젝트창에서 xml화일을 열어보니..
어라...화일에 변화가 없는데요???
그런데 윈도우폼이 뜰때는 바뀐내용이 나오고..
귀신이 곡할 노릇이네요????
아주 많은 이전 페이지에서 이야기 하였던 것을 까맣게 잊어 먹고
계시는 것이다
데이타화일은 내용이 변하면 Bin/Debug 폴더에 있는 데이타화일로
정보가 넘어가는 것이고
원본은 변하지 않고 있다는 점..
Bin/Debug 폴더에 있는 것이 정상적인 데이타화일이라는 점
잊지 마시기를!!!!
그래서 원본 Books.xml의 속성을 [Copy if newer] 혹은 [copy always]라는 것을
반드시 선택하여야 한다고 몇번 이야기를 했던 것이고..
또 하는 것이다

개발 방법에 대하여 아주 많은 확장성 가능성을 보게 되는 것이고
XML화일의 정보호환성에 대하여 실감이 나게 되는 것이다
위와 같이 저장과 동시에 바탕화면에 또 저장을 할수도 있을 것이고
바탕화면의 것을 엑셀에서 불러다 볼수도 있을 것이고
워드에서 불러다 볼수 있을 것이고
그래서 DataSet은 XML을 생산해내는 재능을 갖고 있는 것이다
데이타베이스같은 DataSource에 접근하여 용도에 맞게 필요한 것들을
XML로 만들어서 여기저기 필요한 곳에 나누어주면 각자의 용도에 맞게 사용하는 것이다
예를 들어서 회사의 데이타베이스써버에 프로젝트관리 데이타가
담긴 테이블이 있다고 치고, 모든 회사의 프로젝트에서 발생하는
정보가 실시간으로 담긴다
홍보부에서 대외실적 PT를 하기 위하여 작년도
프로젝트별로,개요,사업비,담당자,실적등의 정보가 필요하다고 치자
그러면 데이타베이스에서 필요한 정보를
DataSet에 담아서 그냥
DataSet.WriteXML("적절한 경로및 XML화일명")으로 만들어주면
아래와 같이 하면

oTbl.DataSet.WriteXml(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Books.xml") 바탕화면에 저장 되겠고... 홍보부에서 VBA를 잘하는 친구가 달랑 갖다가
VBA코딩 몇줄 하면 파워포인트 스라이드가 멋지게 만들어 질 것이다

물론 uno21.com의 내용을 샅샅히 뒤지는 분들은..
그냥 파워포인트까지 만들어줄께...!!
라고 할 수 있을 것이다..그냥 지금 하고 있는 Window프로그램에서
Powpoint를 참조시키고 DataSet의 DataTable을 그대로 읽으면서
파워포인트를 생성할수 있을 것이니까..

그래도 일은 나누어서 해야 하니까..
공연히 다 해준다고 너무 나대면..왕따가 될 수 있으니까..
해달라고 하지도 않은 것을 덥썩덥썩해주면 미련한 짓이다
그냥 내공만 쌓고..
만들어 달라고 간곡히 부탁할때만 해주시기를....^____^
너무 막해주면 깔보거나..왕따가 된다!!

그냥 해달라는 XML화일이나 하나 뽑아주면 된다!!
아니 ..XML화일..이것이 뭔대요???!!
그럴수도 있을 것이다..
이럴때는 아니 너는 VBA를 한다면서 XML화일도 모르냐??!!
슬쩍 깔보고 넘어가도 좋다
갈쳐달라고 하면 우노싸이트 가 바라...!!
VBA로 xml화일 불러들이기가 있을 것이니..라고 하시고..
어디에 박혀있는지 전혀 찾지 못하겠는데요...할 수도 있을 것이다
이곳을 샅샅이 뒤지는 분들은 자신만의 나도 헷갈리는 우노장부(?)가 있다..
찾기 쉬운 인텍스화일을 차곡차곡 만들어가신 분들
이것도 어떤 면에서 자산이다..하하
잘 보관들 하시기를...

***[LOG-IN]***