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