newtype
::: newtype의 지식창고 :::
newtype
전체 방문자
오늘
어제
  • 분류 전체보기 (392)
    • Dev (214)
      • C, C++ (43)
      • Go (5)
      • Web (49)
      • DBMS (21)
      • DevOps (8)
      • Java (2)
      • Windows, Win32 (4)
      • Visual Basic (5)
      • C# (2)
      • Mobile (25)
      • SQL CE (7)
      • Google Map (6)
      • Python (2)
      • cygwin (2)
      • 기타 (32)
      • Ruby (1)
    • 명언 (10)
    • 모임 (18)
      • 붕주회 (3)
      • 신흥컴정 (14)
      • 웹20기 (1)
    • 사진 (8)
    • 불펌 (29)
    • 막글 (98)
    • 게임 (6)
    • 여행 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

  • whoami
05-13 00:00
hELLO · Designed By 정상우.
newtype

::: newtype의 지식창고 :::

Dev/Visual Basic

VB 에서 오라클 DB 조회

2006. 12. 27. 15:00
1. 오라클 클라이언트를 설치하고

2. TNS 설정을 해주고.

3. ADODB를 이용해 접속 하면 됩니다.

예제 코드는 아래와 같습니다.

[CODE type="visual basic"]
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.Form Form1
   Caption         =   "정보 조회 v0.1"
   ClientHeight    =   7635
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   10605
   LinkTopic       =   "Form1"
   Picture         =   "Form1.frx":0000
   ScaleHeight     =   7635
   ScaleWidth      =   10605
   StartUpPosition =   3  'Windows 기본값
   Begin VB.CommandButton btnExport
      Caption         =   "내보내기"
      Height          =   375
      Left            =   8040
      TabIndex        =   7
      Top             =   240
      Width           =   1215
   End
   Begin MSFlexGridLib.MSFlexGrid lstResult
      Height          =   6735
      Left            =   0
      TabIndex        =   6
      Top             =   840
      Width           =   10455
      _ExtentX        =   18441
      _ExtentY        =   11880
      _Version        =   393216
      Rows            =   1
      Cols            =   1
      FixedRows       =   0
      FixedCols       =   0
      AllowUserResizing=   1
   End
   Begin VB.TextBox txtMDN
      Height          =   270
      Left            =   3600
      TabIndex        =   1
      Text            =   "01192900725"
      Top             =   240
      Width           =   2295
   End
   Begin VB.ComboBox cmbOp
      Height          =   300
      Left            =   720
      Style           =   2  '드롭다운 목록
      TabIndex        =   2
      Top             =   240
      Width           =   2055
   End
   Begin VB.Frame Frame1
      Caption         =   "조회"
      Height          =   735
      Left            =   0
      TabIndex        =   0
      Top             =   0
      Width           =   9495
      Begin VB.CommandButton Command1
         Caption         =   "조회"
         Height          =   375
         Left            =   6000
         TabIndex        =   5
         Top             =   240
         Width           =   1935
      End
      Begin VB.Label Label2
         Caption         =   "MDN"
         Height          =   255
         Left            =   3000
         TabIndex        =   4
         Top             =   240
         Width           =   495
      End
      Begin VB.Label Label1
         Caption         =   "정보"
         Height          =   255
         Left            =   240
         TabIndex        =   3
         Top             =   240
         Width           =   495
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public adocn As ADODB.Connection
Public Excel As Object

Private Sub dbCon()
    Dim Cnn_Str$
    Set adocn = New ADODB.Connection
    Cnn_Str = "Provider=MSDAORA.1;Password=******;User ID=******;Data Source=서비스명;Persist Security Info=True;"
    adocn.Open Cnn_Str
End Sub

Private Sub loadConfig()
    ' 설정파일을 읽는다.(미구현)  
End Sub

Private Sub initForm()
    cmbOp.AddItem "요금제 정보"
    cmbOp.AddItem "빌링 정보"
    cmbOp.AddItem "정액제 정보"
    cmbOp.Text = cmbOp.List(0)
End Sub

Private Function getQuery(opIndex As Integer) As String
    Select Case opIndex
        Case 0
            getQuery = "SELECT * FROM TABLE1 A, TABLE2 B"
            getQuery = getQuery & "WHERE A.PRODUCT_ID = B.PRODUCT_ID AND A.MDN = '" & txtMDN.Text & "' "
        Case 1
            getQuery = "SELECT * FROM TABLE2 A, TABLE3 B"
           getQuery = getQuery & "WHERE A.PRODUCT_ID = B.PRODUCT_ID AND A.MDN = '" & txtMDN.Text & "' "
        Case 2
            getQuery = "SELECT * FROM TABLE3 A, TABLE1 B"
           getQuery = getQuery & "WHERE A.PRODUCT_ID = B.PRODUCT_ID AND A.MDN = '" & txtMDN.Text & "' "
    End Select
End Function


Private Sub btnExport_Click()

    Dim row As Integer
    Dim col As Integer

    If lstResult.Rows <= 1 Then
        MsgBox "먼저 조회 하세요", , "에러"
        Exit Sub
    End If
   
    If MsgBox("정말 내보낼까요?", vbYesNo, "정말?") <> vbYes Then
        Exit Sub
    End If

    ' 엑셀 Object 생성
    If Excel Is Nothing Then
       Set Excel = CreateObject("Excel.Application")
    Else
       Set Excel = GetObject(, "Excel.Application")
    End If
   
    Excel.Visible = True
    Excel.Workbooks.Add
    Excel.ActiveSheet.Name = txtMDN.Text
   
    For row = 0 To lstResult.Rows - 1
        For col = 0 To lstResult.Cols - 1
            Excel.ActiveSheet.Cells(row + 1, col + 1).NumberFormatLocal = "@"
            Excel.ActiveSheet.Cells(row + 1, col + 1).Value = lstResult.TextMatrix(row, col)
        Next col
    Next row
       
End Sub


' 선택한 쿼리로 조회 한다.
Private Sub Command1_Click()
  
    Dim col As Integer
    Dim row As Integer
    Dim sqlStr As String
    Dim adorec As ADODB.Recordset
  
    ' 유효성 체크
    If txtMDN.Text = "" Then
        MsgBox "전화번호를 입력하세요", , "에러"
    End If
   
    Screen.MousePointer = vbHourglass
       
    ' 쿼리 선택
    sqlStr = getQuery(cmbOp.ListIndex)
  
    ' DB
    Set adorec = New ADODB.Recordset
    adorec.Open sqlStr, adocn, adOpenForwardOnly
   
    ' Clear
    lstResult.FixedRows = 0
    lstResult.Cols = 0
    lstResult.Rows = 1
    lstResult.Clear
   
    Screen.MousePointer = vbArrow
     
    If Not adorec.EOF Then
          
        ' Title
        lstResult.AddItem ""
       
        lstResult.FixedRows = 1
        lstResult.Cols = adorec.Fields.Count
        row = 0
              
        For col = 0 To lstResult.Cols - 1
            lstResult.TextArray(col) = adorec.Fields(col).Name
        Next col
      
        ' Data Insert
        Do While Not adorec.EOF
            lstResult.AddItem ""
            row = row + 1
               
            For col = 0 To lstResult.Cols - 1
                If adorec.Fields(col).Value <> "" Then
                    lstResult.TextMatrix(row, col) = adorec.Fields(col).Value
                End If
            Next col
                 
            adorec.MoveNext
        Loop
       
    Else
        MsgBox "조회결과가 없습니다", , "에러"
    End If

    ' Release
    adorec.Close
    Set adorec = Nothing

End Sub

Private Sub Form_Load()
    loadConfig
    initForm
    dbCon
End Sub

Private Sub Form_Resize()
    On Error Resume Next
    lstResult.Move 0, Frame1.Top + Frame1.Height, Form1.Width - 10, Form1.Height - (Frame1.Top + Frame1.Height) - 10
End Sub

[/CODE]




주요 서브루틴을 설명하면..

Private Sub dbCon() 에서 오라클 DB에 연결하고,

Private Sub Command1_Click() 에서는 쿼리를 이용해 실제 Data를 가져와서
MSFlexGrid에 데이타를 넣습니다.

Private Sub btnExport_Click() 에서는 엑셀을 열어 워크시트를 하나 생성하고,
MSFlexGrid에 있던 데이타를 넣습니다.

오랜만에 VB를 할려니 삽질이네요.
하지만 역시 잘아는 VC보다도 생산성이 좋네요 ㅎㅎ
반응형

'Dev > Visual Basic' 카테고리의 다른 글

MDI에서 특정 자식창을 하나만 띄우기  (0) 2003.07.18
항상 위 효과 내기  (0) 2003.07.18
폴더 만들기 ( 부모 폴더가 없을경우에는 부모 폴더도 만듬)  (0) 2003.07.18
전체 경로를 받아 파일명 또는 폴더명만 얻기  (0) 2003.07.18
    'Dev/Visual Basic' 카테고리의 다른 글
    • MDI에서 특정 자식창을 하나만 띄우기
    • 항상 위 효과 내기
    • 폴더 만들기 ( 부모 폴더가 없을경우에는 부모 폴더도 만듬)
    • 전체 경로를 받아 파일명 또는 폴더명만 얻기
    newtype
    newtype
    지극히 개인적인 지식의 창고

    티스토리툴바