본문 바로가기

SMH/Module

VB_DB Connection(MSSQL/MYSQL/DB2/ORACLE)

Option Explicit

Public adocn            As New ADODB.Connection
Public adocn2           As New ADODB.Connection
Public adocn3           As New ADODB.Connection
Public adocn4           As New ADODB.Connection
Public adors            As New ADODB.Recordset
Public adoPara          As New ADODB.Parameter
Public AdoCmd           As New ADODB.Command

Public Result           As Integer
Public nMPointer        As Integer
Public rowindicator     As Long
Public strMsg           As String
Public strSQL           As String
Public GstrSysDate      As String
Public GstrSysTime      As String

Public Const ORACLE     As Integer = 1
Public Const MSSQL      As Integer = 2
Public Const DB2        As Integer = 3
Public Const MYSQL      As Integer = 4

Public Const DIRECT     As Integer = 6
Public Const STAFF      As Integer = 7

Type Password
    IdNumber        As String
    Name            As String
    Password        As String
End Type
Public CI    As Password

 

'//MS_SQL DB Connection ID / PASS Check

Public Function IdConnect(ByVal Id As String, ByVal PASS As String) As Boolean
    Dim rsUsm               As ADODB.Recordset
    
    Set rsUsm = New ADODB.Recordset
    strSQL = "select UserId, Passwd" _
           & "  from USR" _
           & " where UserId = '" & Id & "'" _
           & "   and Passwd = '" & PASS & "'"
    Result = AdoOpenSet(rsUsm, strSQL, MSSQL, True)
    If Result = 0 Then
        If AdoGetString(rsUsm, "UserId", 0) <> "" Then
            IdConnect = True
        Else
            IdConnect = False
        End If
    Else
        IdConnect = False
    End If

    rsUsm.Close
    Set rsUsm = Nothing
End Function

 

'//MS_SQL DB Connection

Public Function DbAdoConnect(ByVal IP As String, ByVal DBID As String, ByVal DBPASS As String, ByVal DB As String) As Boolean
    Dim ConnectStr As String
    
    On Error GoTo dbConnErr:
    
    DbAdoConnect = True
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    ConnectStr = "Driver={SQL Server};" _
               & "Server=" & IP & "; " _
               & "UID=" & DBID & "; " _
               & "PWD=" & DBPASS & ";" _
               & "Database=" & DB
    
    Set adocn2 = New ADODB.Connection
    adocn2.CursorLocation = adUseClient
    adocn2.Open ConnectStr
    
    Screen.MousePointer = nMPointer
    Exit Function
    

'/===================================================================

dbConnErr:
    Screen.MousePointer = nMPointer
    
    MsgBox "MS_SQL에 연결하지 못했습니다" & vbCrLf & vbCrLf _
           & "Error Number : " & Err.Number & vbCrLf _
           & "Description  : " & Err.Description, vbCritical, "DB Connect Error"
    DbAdoConnect = False
End Function

 

'//MY_SQL DB Connection
Public Function MySqlAdoConnect(ByVal IP As String, ByVal DBID As String, ByVal DBPASS As String, ByVal DB As String) As Boolean
    Dim ConnectStr As String
    
    On Error GoTo dbConnErr:
    
    MySqlAdoConnect = True
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
'    ConnectStr = "Driver={MySQL};" _
'               & "Server=" & IP & "; " _
'               & "UID=" & DBID & "; " _
'               & "PWD=" & DBPASS & ";" _
'               & "DataBase=" & DB
    
    ConnectStr = "driver={MySQL ODBC 3.51 Driver};" _
               & "Server=" & IP & "; " _
               & "UID=" & DBID & "; " _
               & "PWD=" & DBPASS & ";" _
               & "Database=biomedy;" _
               & "Dsn=" & DB
    
    Set adocn4 = New ADODB.Connection
    adocn4.CursorLocation = adUseClient
    adocn4.Open ConnectStr
    
    Screen.MousePointer = nMPointer
    Exit Function
    

'/===================================================================

dbConnErr:
    Screen.MousePointer = nMPointer
    
    MsgBox "MYSQL에 연결하지 못했습니다" & vbCrLf & vbCrLf _
           & "Error Number : " & Err.Number & vbCrLf _
           & "Description  : " & Err.Description, vbCritical, "DB Connect Error"
    MySqlAdoConnect = False
End Function

 

'// DB2 DB Connection

Public Function Db2AdoConnect(ByVal DBID As String, ByVal DBPASS As String, ByVal DB As String) As Boolean
    Dim ConnectStr As String
    
    On Error GoTo dbConnErr:
    
    Db2AdoConnect = True
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    ConnectStr = "DSN=" & DB & ";UID=" & DBID & ";PWD=" & DBPASS & ";"
    Set adocn3 = New ADODB.Connection
    adocn3.CursorLocation = adUseClient
    adocn3.Provider = "MSDASQL"
    adocn3.Open ConnectStr
    
    Screen.MousePointer = nMPointer
    Exit Function
    

'/===================================================================

dbConnErr:
    Screen.MousePointer = nMPointer
    
    MsgBox "DB2에 연결 하지 못했습니다" & vbCrLf & vbCrLf _
           & "Error Number : " & Err.Number & vbCrLf _
           & "Description  : " & Err.Description, vbCritical, "DB Connect Error"
    Db2AdoConnect = False
End Function

 

'//Oracle DB Connection

Public Function OraAdoConnect(ByVal DBID As String, ByVal DBPASS As String, ByVal DB As String) As Boolean
    Dim ConnectStr As String
    
    On Error GoTo dbConnErr:
    
    OraAdoConnect = True
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    ConnectStr = "Provider=MSDAORA.1;" _
                & "User ID=" & DBID & ";" _
                & "Password=" & DBPASS & ";" _
                & "Data Source=" & DB
   

'    Set adocn = New ADODB.Connection        'temp
'    adocn.CursorLocation = adUseClient
'    adocn.Open ConnectStr
    
    adocn.Open ConnectStr
    adocn.CursorLocation = adUseClient
'    adocn.Open ConnectStr
    
    Screen.MousePointer = nMPointer
    Exit Function
    

'/===================================================================

dbConnErr:
    Screen.MousePointer = nMPointer
    
    MsgBox "Oracle에 Connection(ADO)을 하지 못했습니다" & vbCrLf & vbCrLf _
           & "Error Number : " & Err.Number & vbCrLf _
           & "Description  : " & Err.Description, vbCritical, "DB Connect Error"
    OraAdoConnect = False
End Function

 

'// ADO DB DisConnection

Sub DbAdoDisConnect()             'ADO DB DisConnect
    On Error Resume Next
    adors.Close
    Set adors = Nothing
    Set AdoCmd = Nothing
    
    If adocn.State = 1 Then
        adocn.Close
        Set adocn = Nothing
        MsgBox "ADO1 Disconnection OK!"
    End If
    
    If adocn2.State = 1 Then
        adocn2.Close
        Set adocn2 = Nothing
        MsgBox "ADO2 Disconnection OK!"
    End If
    
    If adocn3.State = 1 Then
        adocn3.Close
        Set adocn3 = Nothing
        MsgBox "ADO3 Disconnection OK!"
    End If
End Sub

 

'// RecordSet

Public Function AdoOpenSet(ByRef Rs As Object, ByVal SQL As String, ByVal FLG As Integer, Optional ByVal nRowCnt As Boolean = True) As Integer
    Dim nMPointer           As Integer
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    On Error GoTo OpenError:
    
    AdoOpenSet = 0
    rowindicator = 0
    
    If FLG = ORACLE Then
        Rs.Open SQL, adocn, adOpenStatic, adLockOptimistic, adCmdText
    ElseIf FLG = MSSQL Then
        Rs.Open SQL, adocn2, adOpenStatic, adLockOptimistic, adCmdText
    ElseIf FLG = DB2 Then
        Rs.Open SQL, adocn3, adOpenStatic, adLockOptimistic, adCmdText
    End If
    
    Rs.CacheSize = 50

    If Not Rs.EOF Then
        If nRowCnt = True Then
            rowindicator = Rs.RecordCount
        Else
            rowindicator = -1
        End If
    End If
    Screen.MousePointer = nMPointer
    
    Exit Function

'/===================================================================

    
OpenError:

    AdoOpenSet = -1
    If Err.Number = 40002 Then  '응용 프로그램 정의 오류 또는 개체 정의 오류
        'strMsg = adoErrors(0).Description
        strMsg = Mid(strMsg, InStr(1, strMsg, "ORA-", vbBinaryCompare), Len(strMsg)) & vbCrLf & vbCrLf & SQL
        
        MsgBox strMsg, vbCritical, "Error - " '& Trim(Str(AdoErrors(0).Number))
    ElseIf Err.Number = 3704 Then
    ElseIf Err.Number = -2147217900 Then
        AdoOpenSet = 3
    Else
        MsgBox Err.Description, vbCritical, "VB Error - " & Trim(Str(Err.Number))
    End If

    Set Rs = Nothing
    
    Screen.MousePointer = nMPointer
End Function

 

'//Record에서 문자열 Return 받기

Public Function AdoGetString(ByRef Rs As Object, ByVal AdoCol As String, ByVal AbsPos As Long) As String
    On Error GoTo ReadError
    
    Rs.AbsolutePosition = AbsPos + 1
    AdoGetString = Trim(Rs.Fields(AdoCol).Value & "")
    
    Exit Function

'/===================================================================

ReadError:
    
    Dim strTemp             As String
    
    AdoGetString = ""
    strTemp = ", Form Name : " & Screen.ActiveForm.Name & "-" & Screen.ActiveForm.ActiveControl.Name

    Select Case Err.Number
        Case Else
            Debug.Print "AdoGetString Error - " & RTrim(Str(Err.Number)), Err.Description & strTemp
    End Select
End Function

 

'//Record에서 숫자 Return 받기

Public Function AdoGetNumber(ByRef Rs As Object, ByVal AdoCol As String, ByVal AbsPos As Long) As Double

    On Error GoTo ReadError
    
    Rs.AbsolutePosition = AbsPos + 1
    AdoGetNumber = IIf(IsNull(Rs.Fields(AdoCol).Value), 0, Rs.Fields(AdoCol).Value)
    
    Exit Function

'/========================================================================================================================================

ReadError:
    
    Dim strTemp     As String
    
    AdoGetNumber = 0
    strTemp = ", Form Name : " & Screen.ActiveForm.Name & "-" & Screen.ActiveForm.ActiveControl.Name
    
    Select Case Err.Number
        Case Else
            Debug.Print "AdoGetNumber Error - " & RTrim(Str(Err.Number)), Err.Description & strTemp
    End Select
End Function

 

'//SQL문 실행시 ERROR MESSAGE 보여줌

Public Function AdoExecute(ByVal SQL As String, Optional FLG As Integer = ORACLE) As Integer   'SQL문 실행시 ERROR MESSAGE 보여줌
    Dim nMPointer           As Integer
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    On Error GoTo ExecError:
    
    AdoExecute = 0
    rowindicator = 0
    
    Set AdoCmd = New ADODB.Command
    Set adors = New ADODB.Recordset
    
    AdoCmd.CommandType = adCmdText
    AdoCmd.CommandText = SQL
    AdoCmd.ActiveConnection = IIf(FLG = ORACLE, adocn, IIf(FLG = MSSQL, adocn2, IIf(FLG = DB2, adocn3, adocn4)))
    Set adors = AdoCmd.Execute
    
'    rowindicator = AdoRs.RecordCount  ' 한번의 Transaction 에 의해 처리된 행의 숫자
    
    Screen.MousePointer = nMPointer
    
    Exit Function

'/===================================================================

ExecError:
    
    If Err.Number = 40002 Then  '응용 프로그램 정의 오류 또는 개체 정의 오류
        MsgBox strMsg, vbCritical, "Error - " '& Trim(Str(adoerrors(0).Number))
    Else
        MsgBox Err.Description, vbCritical, "VB Error - " & Trim(Str(Err.Number))
    End If

    AdoExecute = -1
    Screen.MousePointer = nMPointer
End Function

 

Public Function Db2Execute(ByVal SQL As String, Optional FLG As Integer = MSSQL) As Integer   'SQL문 실행시 ERROR MESSAGE 보여줌
    Dim nMPointer           As Integer
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    On Error GoTo ExecError:
    
    Db2Execute = 0
    rowindicator = 0
    
    Set AdoCmd = New ADODB.Command
    Set adors = New ADODB.Recordset
    
    AdoCmd.CommandType = adCmdText
    AdoCmd.CommandText = SQL
    
'    AdoCmd.ActiveConnection = IIf(FLG = MSSQL, adocn, IIf(FLG = ORACLE, adocn2, adocn3))
    
     Select Case FLG
        Case MSSQL: AdoCmd.ActiveConnection = adocn
        Case ORACLE:    AdoCmd.ActiveConnection = adocn2
        Case Else
            AdoCmd.ActiveConnection = adocn3
     End Select
   
    Set adors = AdoCmd.Execute
    
'    rowindicator = AdoRs.RecordCount  ' 한번의 Transaction 에 의해 처리된 행의 숫자
    
    Screen.MousePointer = nMPointer
    
    Exit Function

'/===================================================================

ExecError:
    
    If Err.Number = 40002 Then  '응용 프로그램 정의 오류 또는 개체 정의 오류
        MsgBox strMsg, vbCritical, "Error - " '& Trim(Str(adoerrors(0).Number))
    Else
        MsgBox Err.Description, vbCritical, "VB Error - " & Trim(Str(Err.Number))
    End If

    Db2Execute = -1
    Screen.MousePointer = nMPointer
End Function

 

Public Function AdoExecute1(ByVal SQL As String, Optional FLG As Integer = ORACLE) As Integer   'SQL문 실행시 ERROR MESSAGE 보여줌
    Dim nMPointer           As Integer
    
    nMPointer = Screen.MousePointer
    Screen.MousePointer = vbHourglass
    
    On Error GoTo ExecError:
    
    AdoExecute1 = 0
    rowindicator = 0
    
    Set AdoCmd = New ADODB.Command
    Set adors = New ADODB.Recordset
    
    AdoCmd.CommandType = adCmdText
    AdoCmd.CommandText = SQL
    AdoCmd.ActiveConnection = IIf(FLG = ORACLE, adocn, IIf(FLG = MSSQL, adocn2, IIf(FLG = DB2, adocn3, adocn4)))
    Set adors = AdoCmd.Execute
    
    Screen.MousePointer = nMPointer
    Exit Function

'/================================================================
ExecError:
    AdoExecute1 = -1
    Screen.MousePointer = nMPointer
End Function

Public Sub AdoCloseSet(ByRef Rs As Object)
    If Not Rs Is Nothing Then
        Rs.Close
        Set Rs = Nothing
    End If
End Sub

 

'//SYSTEM DATE & TIME 읽어온 후 PC

Public Sub SetDateTime(ByVal DbGubun As Integer)    'SYSTEM DATE & TIME 읽어온 후 PC 날짜Set
    Dim rsDate  As ADODB.Recordset
    
    Set rsDate = New ADODB.Recordset
    Select Case DbGubun
        Case ORACLE
                strSQL = "select TO_CHAR(SYSDATE,'yyyy-MM-dd') SDate, TO_CHAR(SYSDATE,'hh24miss') STime" _
                       & "  from DUAL"
        Case MSSQL
                strSQL = "select convert(CHAR(8), GetDate(), 112) as SDate, convert(CHAR(8), GetDate(), 108) as STime"
    End Select
    Result = AdoOpenSet(rsDate, strSQL, DbGubun, True)
    
    
    '// 날짜 변환 형태에 맞춰서 주석 처리
'    GstrSysDate = Format(AdoGetString(rsDate, "SDate", 0), "####-##-##")
    GstrSysDate = Format(AdoGetString(rsDate, "SDate", 0), "YYYYMMDD")
    GstrSysTime = AdoGetString(rsDate, "STime", 0)
    
    AdoCloseSet rsDate
    Set rsDate = Nothing
End Sub

 

'//DB Transaction / Commit / Rollback

Public Sub BeginTrans(ByVal DbGubun As Integer)
    Select Case DbGubun
        Case ORACLE:    adocn.BeginTrans
        Case MSSQL:     adocn2.BeginTrans
        Case DB2:       adocn3.BeginTrans
        Case MYSQL:     adocn4.BeginTrans
    End Select
End Sub

 

Public Sub CommitTrans(ByVal DbGubun As Integer)
    Select Case DbGubun
        Case ORACLE:    adocn.CommitTrans
        Case MSSQL:     adocn2.CommitTrans
        Case DB2:       adocn3.CommitTrans
        Case MYSQL:     adocn4.CommitTrans
    End Select
End Sub

 

Public Sub RollbackTrans(ByVal DbGubun As Integer)
    Select Case DbGubun
        Case ORACLE:    adocn.RollbackTrans
        Case MSSQL:     adocn2.RollbackTrans
        Case DB2:       adocn3.RollbackTrans
        Case MYSQL:     adocn4.RollbackTrans
    End Select
End Sub

 

'// DB Query 작성시 ' 포함 모듈

Public Function Quot(ByVal strString As String) As String 

' 텍스트입력시 " ' " 간편하게 입력할때 사용
    Dim i           As Integer                        ' 텍스트 자료입력시 중간에 "'" 를 "''"로 변환시켜 줌
    Dim nPos        As Integer
    
    strString = Trim(strString)
    
    If InStr(strString, "'") = 0 Then Quot = strString: Exit Function
    
    nPos = 1
    Do
        For i = nPos To Len(strString)
            If Mid(strString, i, 1) = "'" Then
                strString = Left(strString, i - 1) & "''" & Mid(strString, i + 1)
                Exit For
            End If
        Next i
        nPos = i + 2
        If nPos > Len(strString) Then Exit Do
    Loop While (True)
    
    Quot = strString
    
End Function

'SMH > Module' 카테고리의 다른 글

PB_DLL File Exists Check  (0) 2011.01.01
PB_File log make  (0) 2011.01.01
VB_주민번호체크(내국인+외국인)  (0) 2011.01.01
VB_file write  (0) 2011.01.01
VB_farpoint Initailize  (0) 2011.01.01