1. 오라클 클라이언트를 설치하고
2. TNS 설정을 해주고.
3. ADODB를 이용해 접속 하면 됩니다.
예제 코드는 아래와 같습니다.
주요 서브루틴을 설명하면..
Private Sub dbCon() 에서 오라클 DB에 연결하고,
Private Sub Command1_Click() 에서는 쿼리를 이용해 실제 Data를 가져와서
MSFlexGrid에 데이타를 넣습니다.
Private Sub btnExport_Click() 에서는 엑셀을 열어 워크시트를 하나 생성하고,
MSFlexGrid에 있던 데이타를 넣습니다.
오랜만에 VB를 할려니 삽질이네요.
하지만 역시 잘아는 VC보다도 생산성이 좋네요 ㅎㅎ
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]
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보다도 생산성이 좋네요 ㅎㅎ


