VBA MySQL SELECT문

VBA 2012. 10. 9. 09:52
Sub SearchDB(inputData As String)
        
    Dim conn As ADODB.Connection        ' DB 연결을 위한 변수
    Dim dbRecset As ADODB.Recordset     ' DB Record 저장을 위한 변수
    Dim countRow As Integer             ' 입력된 데이터의 행의 갯수 저장을 위한 변수
    Dim setSQL As String                ' SQL문을 저장하기 위한 변수
    Dim tableName As String             ' 디비의 테이블 명을 받아오기 위한 변수
    Dim saveRange As Range              ' 셀에 값이 저장될 변수
    Dim searchRange As Range            ' 검색 범위를 위한 셀 변수
    Set searchRange = Range("E8:E300")
    
    Set conn = New ADODB.Connection     ' ODBC 객체생성

    ' -------------------------------------------------------------------------
    ' MySQL ODBC에 연결
    ' -------------------------------------------------------------------------
    conn.ConnectionString = "DRIVER={MySQL ODBC 5.1 driver};" & _
                            "server = localhost;" & _
                            "database = works32;" & _
                            "UID=root;password=1234;option=3"
    conn.Open
    On Error GoTo errorhandler
    
    ' -------------------------------------------------------------------------
    ' 쿼리문을 입력하고 레코드 값을 저장
    ' -------------------------------------------------------------------------
    Set dbRecset = New ADODB.Recordset
    dbRecset.CursorLocation = adUseClient
    
        setSQL = "SELECT SUBSTR(A.nm, 6, LENGTH(A.nm) - 8) AS table_eng_nm, B.begin_dt, B.end_dt " _
                    & "FROM prj A, prj_exec_log B WHERE A.nm LIKE 'P%' AND A.prj_id = B.prj_id AND B.begin_dt " _
                    & "BETWEEN CAST('" & Left(inputData, 4) & "-" & Mid(inputData, 5, 2) & "-" & Right(inputData, 2) _
                    & " 00:00:00' AS DATETIME) AND CAST('" & Left(inputData, 4) & "-" & Mid(inputData, 5, 2) & "-" & _
                    Right(inputData, 2) & " 23:59:59' AS DATETIME)"
                    
    ' -------------------------------------------------------------------------
    ' 커서 이동방법과 레코드를 읽어만 올수 있도록 설정
    ' -------------------------------------------------------------------------
    dbRecset.Open Source:=setSQL, ActiveConnection:=conn, CursorType:=adOpenForwardOnly, _
             LockType:=adLockReadOnly, Options:=adCmdText
             
    dbRecset.MoveFirst                  ' 레코드의 처음으로 이동
    
    ' -------------------------------------------------------------------------
    ' 셀에 있는 테이블 명과 디비의 테이블 명을 비교하여
    ' 이름이 같으면 시작시간과 종료시간을 입력
    ' -------------------------------------------------------------------------
    Dim i As Integer
    Dim j As Integer
    For i = 1 To dbRecset.RecordCount
        tableName = dbRecset.Fields(0).Value
        
        If Not searchRange.Find(what:=tableName, lookat:=xlWhole) Is Nothing Then
            For j = 1 To dbRecset.Fields.Count - 1
                Set saveRange = searchRange.Find(what:=tableName, lookat:=xlWhole)
                saveRange.Offset(0, j).Value = dbRecset.Fields(j).Value
            Next
        End If
        dbRecset.MoveNext
    Next
    ' -------------------------------------------------------------------------
    ' DB연결을 종료하고 객체 저장변수와 레코드 저장변수를 초기화
    ' -------------------------------------------------------------------------
    Range("I4").Value = "확인일자 : " & Left(inputData, 4) & "-" & Mid(inputData, 5, 2) & "-" & Right(inputData, 2)
    dbRecset.Close
    conn.Close
    Set dbRecset = Nothing
    Set conn = Nothing
    MsgBox "검색완료"
    Exit Sub
errorhandler:
    MsgBox "검색할 수 없습니다."

End Sub

'VBA' 카테고리의 다른 글

VBA Oracle 접속  (0) 2012.11.30
VBA MySQL 접속  (0) 2012.10.09
VBA OnTime  (0) 2012.10.05
Posted by gosunari
,