2003. 10. 22. 15:12

오라클 디비 연결

오라클과 VB 연결하는 방법입니다. 물론 이 방법 말고도 ODBC, OO4O 등 여러가지 방법이 있지만, 제가 생각하기에는 이 방법이 간단한 것 같습니다.
*******************************************************************************************************************************

1. Oracle Client를 설치하고, 연결할 Oracle을 에 대한 설정을 한다.

2. DB connect Function(여기서 XXX 부분에 Oracle Client에서 설정한 값을 입력한다.)
  - DB 연결이 필요한 부분에 아래 function을 호출한다.

Private Sub ConnectDB()
    Set adoOraCon = New ADODB.Connection
    
    With adoOraCon
        .ConnectionString = "Provider=MSDAORA.1;Data Source=XXX;User ID=XXX;Password=XXX;Persist Security Info=True"
        .ConnectionTimeout = 60
        .Open
    End With
    
End Sub

3. 모듈에  다음 function을 입력한다.
Option Explicit

Public adoOraCon As ADODB.Connection

'   Procedure : GetRecordSet
' Description : 인자로 넘어오는 쿼리를 실행하고, 결과값을 RecordSet으로 반환
'   Parameter : szSql(쿼리)
'Return Value : Recordset
Public Function GetRecordSet(ByVal szSql As String) As ADODB.Recordset
    
    Dim adoRs As ADODB.Recordset
    
    Set adoRs = New ADODB.Recordset
    
    adoRs.Open szSql, adoOraCon, adOpenKeyset, adLockBatchOptimistic
        
    'Recordset 반환
    Set GetRecordSet = adoRs

    Set adoRs = Nothing
        
End Function

'   Procedure : ExecuteQuery
' Description : 인자로 넘어오는 쿼리를 실행하고 성공여부를 반환
'   Parameter : szSql(쿼리)
'Return Value : True/False
Public Function ExecuteQuery(szSql As String) As Boolean
    
    On Error GoTo ErrHandler
    
    adoOraCon.Execute szSql
    
    ExecuteQuery = True
    
    Exit Function
    
ErrHandler:
    If Err.Number <> 0 Then
        MsgBox Err.Source & vbCrLf & Err.Description, vbExclamation, "쿼리 수행 오류"
        ExecuteQuery = False
        Err.Clear
    End If
End Function

4. 원하는 쿼리를 만들어 모듈의 function을 실행한다.
  - 일반적으로 값을 가지고 오는 Select Query이면, GetRecordSet를 실행하고,
  - insert, delete와 같은 데이터 조작 쿼리인 경우에는 ExecuteQuery를 실행한다.

  예) SELECT Query
    Dim strSQL As String
    Dim adoRs As ADODB.Recordset
  
    '//IMPORTANT : 조회 쿼리 생성
    strSQL = "SELECT * FROM TEST_TAB ORDER BY A_COL"
    
    Set adoRs = GetRecordSet(strSQL)

    While Not adoRs.EOF
        '//IMPORTANT : 가지고 온 결과를 처리하는 부분
        adoRs.MoveNext
    Wend
    
    adoRs.Close
    Set adoRs = Nothing

  예) Execute Query
  Dim strSQL As String
  strSQL = "INSERT INTO TEST_TAB(a_col, b_col, c_col, d_col) VALUES ('" & strName & "', '" & strKorean & "', '" & strMath & "', '" & strEnglish & "')"
        
  If ExecuteQuery(strSQL) = False Then
      Msgbox "실패"
  Else
      Msgbox "성공"
  End If