엑셀 VBA 오라클 연결 - egsel VBA olakeul yeongyeol

연동환경

 서버

 DATABASE

 Goldilocks 3.1.15 r25159

 클라이언트

 OS

 Windows 7

 DATABASE Client

 Goldilocks 3.1.15 r25159 win64

 Excel

 64bit

 Visual Basic  7.0.1590

Visual Basic 과 Database 는 아래처럼 ADO, OLE, ODBC 를 이용하여 연동할 수 있습니다.

이 중 ODBC 방식을 이용하여 Goldilocks 와 Visual Basic 을 연동해 보겠습니다.

엑셀 VBA 오라클 연결 - egsel VBA olakeul yeongyeol

ODBC 관리자에 Office Excel 버전에 맞는 Goldilocks DSN 64 bit 를 등록합니다.

등록하는 방법은 http://mozi.tistory.com/4 를 참조합니다.

연동 방법

1. 엑셀 창을 연 뒤, Alt + F11 버튼을 눌러 Microsoft Visual Basic 을 실행합니다.

2. 탭 "도구" - "참조" 를 누른 뒤, 아래 2개를 체크하고 확인을 눌러줍니다.

 - Micorosoft ActiveX Data Objects (Multi-dimensional) 2.8 Library

 - Microsoft ActiveX Data Objects 2.8 Library

3. 모듈을 생성합니다.

4. ODBC DSN 명을 사용하여 소스를 작성합니다.

6. 엑셀에서 Alt + F8 을 눌러 매크로 창을 연뒤 실행합니다.

7. 출력된 결과를 엑셀에서 확인합니다.

개발자의 경우 여러 DB툴(DB Tool)들 예를들어 TOAD, 골든(Golden), 오렌지(orange)등등을
이용하여 DB의 테이블에 있는 데이타들을 직접 ACCESS한다

그러나 업무일선의 사용자들은 데이타이용에 많은 제약을 받는다

원시적으로 화면의 데이타를 다시 수작업으로 입력하거나
약간 개선된 업무환경이라 하더라도 화면의 데이타를 덤프(Dump)하여 내려서
다시 가공하여 쓰거나 개발실(또는 전산실)에 요청하여 데이타를 작성해달라고
요청하는 정도이다

실제로 윗분들에게 보고하는 많은 자료는 엑셀로 데이타를 편집,가공하여
제출하는 일들이 빈번하기 때문에 이는 업무담당자에게 상당한 업무로드가
되고있다

사용자가 약간의 엑셀 VBA지식을 갖고 있다면 아래의 VBA를 이용하여
원하는 업무데이타를 데이타베이스에서 가져와 사용할 수 있고 어떤 경우
이것은 획기적인 업무생산성으로  연결될수도 있다

녹색으로 되어있는 부분을 선택하고
VBA창으로 가서 아래의 코드를 실행하는 방식으로 하면 된다

Sub test()

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset

Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

conn.Open "Driver={Microsoft ODBC for Oracle};" & _
"Server=svr_name;" & _      'svr_name에 해당DB의 서버이름으로
"Uid=xxx;" & _                   'xxx에 접속 사용자 ID
"Pwd=yyy;"                       'yyy에 접속 패스워드

Set rng = Selection
For Each c In rng
    Sql = "select  sum(amount)  from abc_tbl " & _
      "where abc_date = '" & c.Cells(1, 2).Value & _
      "' and abc_id = '" & c.Cells(1, 1).Value

    rs.Open Sql, conn

   

Set fld1 = rs.Fields(0)
    Do Until rs.EOF
        c.Cells(1, 3).Value = fld1.Value
        rs.MoveNext
    Loop
    rs.Close

    Next

Set rs = Nothing
conn.Close
Set conn = Nothing

엑셀 파일로 만들어서 올려두었습니다.

http://acidpop.tistory.com/166

업무중에 Oracle DB 의 값들을 Select 하여 조회된 데이터를 복사하고

엑셀에 붙여 넣어 봐야할 업무가 있었다.

Oracle SQL Developer 와 엑셀을 왔다갔다 하다 보니 반복된 작업이 너무 많아 찾아 보던중

엑셀에서 Oracle DB 에 직접 붙어 데이터를 select 할 수 있었다.

다음 매크로들을 이용하여 DB에 접속하면 된다.

그 전에 Visual Basic 창에서 도구 -> 참조 메뉴를 클릭 한 다음

사용가능한 참조 목록에서

Microsoft ActiveX Data Objects 2.8 Library

Microsoft Excel 15.0 Object Library 를 체크하여 추가해주어야 한다.

DBSERVICENAME 부분은 각 DB 이름에 맞게 변경하여 사용

 
' AdoCn 변수, strDBIp 는 Oracle DB 의 IP 주소
Public Function ConnectDB(ByRef AdoCn As ADODB.Connection, strDBIp As String) As Boolean

    AdoCn.CursorLocation = adUseClient
    ' 1111 은 DB의 포트 번호이다. 각 환경에 맞게 Port 를 설정하면 된다.
    ' DBSERVICENAME 은 DB의 서비스 이름이다. 각 환경에 맞게 변경하면 된다.
    AdoCn.ConnectionString = "Provider=MSDAORA;Data Source=" + strDBIp + ":1111/DBSERVICENAME;User ID=scott;Password=tiger"
    AdoCn.Open
    
    If AdoCn.State = adStateOpen Then
        ' adStateOpen 이면 연결 됨
        ConnectDB = True
        Exit Function
    Else
        ' adStateClose 이면 연결 안됨
        ConnectDB = False
        Exit Function
    End If
    
End Function


Sub GetDB()
    Dim AdoCn   As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim bOpen As Boolean
    Dim szQuert As String
    Dim szDbIP As String

    Set rs = New ADODB.Recordset
   
    Set AdoCn = New ADODB.Connection


    szDbIP = "127.0.0.1"

    bOpen = ConnectDB(AdoCn, szDbIP)

    If bOpen Then
        szQuery = "SELECT * FROM DB_TABLE_NAME WHERE ID = 10"
        
        Set rs = AdoCn.Execute(szQuery)
        
        ' rs 에 담겨져 있는 객체를 A1 셀에 붙여넣기
        Range("A1").CopyFromRecordset rs
        
        AdoCn.Close

    Else
        MsgBox("DB Connect Failed")
    End if
End Sub