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

ADO_005 | ADO로 억세스화일|테이블 만들기

2003 mdb화일과 2007 accdb화일

억세스데이타베이스화일을 만들려면
라이브러리를 다른 것을 참조한다



Sub CreateNewDatabase()
Dim oCat As ADOX.Catalog
Dim sDB As String
On Error Resume Next
Set oCat = New ADOX.Catalog
If oCat Is Nothing Then
    MsgBox "개체생성 실퍠"
    Exit Sub
End If
sDB = ThisWorkbook.Path & "\NewAccDb.mdb"
oCat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & sDB
If Err.Number <> 0 Then
    MsgBox "이미 화일이 존재합니다"
Else
    MsgBox sDB & " 에 Access DB File 생성"
End If
Set oCat = Nothing
End Sub

2007의 경우는 화일명과 Provider를 바꿔주면 된다

Provider=Microsoft.ACE.OLEDB.12.0;

확장자는 당연히 mdb를 accdb로 바꾸어주어야 할 것이고

DAO에서는 DbEngine의 CreateDatabase메소드를 사용하였던과 다르다
Dim oDB As Database
Dim oEng As DAO.DBEngine
Set oDB = oEng.CreateDatabase(..,...)

DAO는 억세스자체의 엔진이라서..DAO는 2007버전이상의 것과는 상관이 없다

그러니 전천후로 접근하는 ADO를 사용하는 습관을 갖는 것이 좋고
이 코너가 더욱 중요할 것이다

테이블만들기

테이블을 만들거나 할때 ADO의 개체를 활용하는 것 보다는
SQL문을 활용하는 것이 프로답고 효율적이다
아래와 같이 통합문서의 시트에 데이타를 하나 만들고 이것을
데이타베이스의 테이블로 만들고 다시 정렬하여 다른 시트에 뿌려 보자
엑셀자체의 휠터기능이나 정렬기능보다 대용량의 경우는 훨씬 효율적이다
ADO를 숙달시키는 이유가 데이타베이스에 접근하여 정보를 갖여 오는 것도
좋지만 엑셀시트상의 정보도 데이타베이스에게 분석을 시켜면 효율적인 경우도 많이 있는 것이다

아래와 같이 테스트용테이블을 만들고..
이렇게 테이블이 있다고 치고.
이것을 분석할때 엑셀의 기능을 사용하는 것도 좋지만
ADO에게 일을 시켜서 분석작업을 시킬수도 있는 것이다
즉 정렬을 하거나, 휠터를 하거나, 피봇을 하거나
모두 ADO에서도 가능한 것이다
정보가 대용량일 때는 ADO의 기능이 파워풀해지는 것이다
외부라이브러리를 잘 활용하는 것이 엑셀프로그래밍의 마지막단계다

Sub createDummyDatas()
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("datas").Delete
Application.DisplayAlerts = True

Dim shtX As Worksheet
Dim iX As Integer
Set shtX = Worksheets.Add
shtX.Name = "data"
With shtX.Range("A1")
    .Resize(, 3) = Array("Fld_A", "Fld_B", "Fld_C")
    For iX = 1 To 1000
        .Offset(iX) = _
     Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Int(Rnd() * 25) + 1, 2)
        .Offset(iX, 1) = _
     DateSerial(2010, Int(Rnd() * 20) + 1, Int(Rnd() * 50) + 1)
        .Offset(iX, 2) = _
     Application.Round(Int(Rnd() * 10000) + 1000, -2)
    Next
    .CurrentRegion.Columns.AutoFit
End With
End Sub


아래의 그림과 같이 데이타베이스없으면 만들고
테이블도 삭제후 다시 만들고
만든 테이블에 엑셀정보 옮기고
DB테이블의 정보 가공하여 다시 엑셀로 갖여 와 본다



다른 프로그램과 정보를 전달하고 받는 과정에서
가장 조심할 것은 상호정보의 타입의 비교하여 적절한것으로 변환하여야 하고
SQL 문은 문자열 로 구성된 정보이고
이때 날자나 문자나 숫자정보를 SQL문에 어떻게 전달하여야 할지
잘 살펴보아야 하고
또 엑셀의 Cell의 VALUE속성와 TEXT속성이 왜 두개가 있는지
이유를 알게 될 것이다

DB와 정보를 주고 받고를 잘하면 대용량의 정보는 DB의 SQL문으로
분석하여 한꺼번에 뿌려주는 방법이 효율적일때가 많다
엑샐은 강력한 정보분석프로그램이지만..
대용량의 정보처리를 하는 것은 DB에 대용량의 정보를
저장하고 ADO로 필요한 부분만 끌어다가 엑셀에서 분석을 하고 보고서를
만드는 방법을 택하는 것이 좋은 것


XLADO_005_CreateAccessAndTable.