Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

External Datas - DAO_002

DataBase.Table.Field.Property

  • Microsoft DAO 3.6 Object Library
  • CopyFromRecordset
  • Field.Name
  • Field.Properties
  • Excel Worksheet Grouping

지난 페이지에서 아래의 구문을 실행하니..

Sub UseDAO() Dim oRst As Recordset Dim oDB As Database Set oDB = OpenDatabase(ThisWorkbook.Path & "\northwind.mdb") Set oRst = oDB.OpenRecordset("Products") With Worksheets.Add .Range("A1").CopyFromRecordset oRst .UsedRange.Columns.AutoFit End With End Sub

아래와 같이 허접해 보이는 테이블이
northwind.mdb라는 데이타베이스의 products 라는 이름의
테이블에서 테이블의 내용이 주욱 끌려 들어왔다
그런데 의아하다..
우선 휠드의 제목이 없네??!!
그리고 이 숫자들은 무엇을 의미하나???
뭔가 잘못된 것 아닌가???
라는 두가지의 의문점이 생겨야 데이타베이스에 관심을 갖는 셈이다



그렇다면 휠드이름은 어디서 갖여 와야 하나??
휠드이름은 어떤 오브젝트에서 관리하고 있는지 알아야 한다
정보를 넣고..갖여오고..모두 오브젝트의 어떤 속성인가가..!#@#
관리하고 있을텐데..
이런 때는 잔머리를 굴리면 된다..
흠흠..휠드이름이려면 Field라는 오브젝트가 있을 같은데..
여러개의 휠드를 집합체로 관리한다면 Fields 라는 오브젝트일것이고..
맞다!!!
DAO를 통하여 얻어낸 Recordset이라는 오브젝트의 하위 오브젝트중에
Fields오브젝트라는 것이 있다..
그렇다면 이것을 순환하여 갖여 오면 되겠네??!!
엑셀의 오브젝트를 다루던 솜씨가 있다면 외부라이브러리의
오브젝트들은 대강 미루어 짐작할수가 있는것이다
어떤 원리만 알면 쥐뿔도 아닌것이다
아래와 같이 돌려 보시기 바란다

Sub UseDAOWithField() Dim oRst As Recordset Dim oDB As Database Dim oFld As Field, iX As Integer Set oDB = OpenDatabase(ThisWorkbook.Path & "\northwind.mdb") Set oRst = oDB.OpenRecordset("Products") With Worksheets.Add With .Range("A1") For Each oFld In oRst.Fields .Offset(, iX) = oFld.Name iX = iX + 1 Next .Offset(1).CopyFromRecordset oRst .CurrentRegion.Columns.AutoFit End With End With End Sub

변수를 두개 더 만들고
Dim oFld As Field, iX As Integer
하나는 Field오브젝트를 담는 oFld 변수
다른 하나는 엑셀시트의 셀을 Offset하기 위한 iX

For Each oFld In oRst.Fields
.Offset(, iX) = oFld.Name
iX = iX + 1
Next

Recordset 오브젝트인 oRst의 하위 오브젝트..Fields를 순환하면서
해당 Field오브젝트가 갖고 있는 Name속성값이
휠드의 이름인것이다
이것을 셀을 순환할때마다 오른쪽으로 한칸씩 이동하면서
뿌려 주면 휠드이름을 얻어서 사용하게 되는것이고
B1셀의 CopyFromRecordset메소드로 테이블의 내용을 얻어오면
되는것이다

어휴,..뭐 번거롭게 이렇게 코딩을 해..
그냥 데이타메뉴에서 외부데이타갖여오기를 하여 ms-query 에게
일을 시키면 되지..



그렇게 하고 싶으신 분들은 그렇게 하면 된다
그러나 그것은 파워유저정도가 할일이고
엑셀프로그래머라면 DAO를 마음대로 다룰줄 알아야 할것이다
DAO의 파워풀함을 만끽할때까지 가자!!

아무튼..그런데 또 하나 이상하다..
휠드명이 억세스의 Products테이블의 휠드명과는 틀린다??!!
어렵쇼..이건또 왜 이런거야..



여기에서 엑셀과 데이타베이스(억세스)와 틀린 점을 알게 된다
엑셀에서는 데이타타입과 휠드명같은 것에 그렇게 공을 드리지 않는다
하지만 데이타베이스는 테이블과 테이블을 구성하는 각각의 휠드(열)의
성격을 완벽히 규정을 지어놓는것이 기본인것이다
휠드의 성질머리(Property)를 규정한다는 것..
이것이 뭔소리냐??!!!
엑셀은 테이블의 각셀이 아주 긴 문장을 받아들이기도 하고
숫자를 받아들이기도 하고..아주 융통성이 많다
그러나 데이타베이스는 이 부분이 엄격하다
하나의 휠드가 문자열정보라고 한다면 몇개의 문자까지 넣을것인지..
숫자라면 어떤 크기의 숫자를 넣을것인지 미리 정해야 하는것이다
그리고 또 어떤 정보는 반드시 입력을 하여야 하는 정보인지..
아니면 입력을 해도 좋고..안해도 좋은 휠드인지 등등을 정하는 것이다
또한 위에서 문제가 된 Field의 테이블상에 나타나는 캡션을
무엇으로 할것인지도 정하게 된다
물론 정하지 않으면 휠드명이 대신하게 된다
그러나 Field명은 프로그래밍할때 접근하는 기본적인 인식표가 되므로
Field명은 프로그래머가 코딩하게 좋게 정하고
Caption은 데이타베이스 테이블상에서 사용자가 보기 좋게 하는것이다
한마디로 억세스에서 테이블을 설계한다고 하는 것은 창고를 아주 야무지게 규격을 딱딱 정해놓고 창고에 물건을
들여서 쌓아놓겠다는 의지를 갖고 만드는 셈이다
싸이즈가 큰것은 위쪽에..싸이즈가 작은 것은 아랫쪽에
이런 모양의 것은 저쪽에 ..저런 모양의 것은 이쪽에...
그것에 비하면 엑셀의 시트상의 테이블은 자유스롭기 그지 없다
아무튼 그 Caption을 억세스 데이타베이스에서
설계된 대로 어디에선가 읽어왔으면 좋겠다
아래의 그림과 같이



읽어 오도록 해보자

나는 억세스를 열어 본적도 없구요..
데이타베이스 같은 것을 사용할일도 없구요..
그러니 무슨 소린지 통 모르겠어요..
엑셀프로그래머소리를 듣고 싶으면 억세스를 열어보고
관심을 갖고 그렇지 않으면 이쯤에서 접는것이 좋다

알고 나면 정말 아무것도 아닌데..
데이타베이스라는 창고에 파이프라인만 접속시키면
다양한 정보가 쏟아지고,
다양한 분석꺼리가 쏟아지고,다양한 보고서가 쏟아지고,
다양한 문제의식이 생기고,다양한 일꺼리가 생기고,
결국은 여러분의 가치를 올린다

고개 넘기가 힘들다..
고개 넘기가 힘든 것이 아니고 공연히 겁을 먹는다






XLDAO_002.