「VBA覚書」データベースの接続方法 [VBA覚書]
「VBA覚書」データベースの接続方法
「前提条件 - 環境設定」
①Oracleのクライアントがインストールされていること
②接続するDBのサービスが設定されていること
③接続が確立されていること
※環境設定については後日、別途記載予定
「実行環境」
Microsoft Office Professional Plus [Excel 2007 SP3]
「前準備」
①参照設定「OracleInProc Server 5.0 Type Library」
「ツール(T)」→参照設定
一覧の中ほど
「サンプルコード」
''''''''''''''ORACLE DB接続
Public pOraSession As OraSession
Public pOraDatabase As OraDatabase
Private Const cnstInstance As String = "******"
Private Const cnstUserPass As String = "*****/*****"
'*****************************************
' データベース接続(Oracle)
'*****************************************
Public Sub connectOracle()
On Error GoTo Err_
''接続前に切断を実行する
Call disConnectOracle
''セッションを開く
Set pOraSession = CreateObject("OracleInProcServer.XOraSession")
''開いたセッションからデータベースに接続する
Set pOraDatabase = pOraSession.OpenDatabase(cnstInstance, cnstUserPass, ORADB_DEFAULT)
Err_:
''エラー時の処理
If Err.Number <> 0 Then
''エラーの内容を表示する
MsgBox (Err.Description)
''処理を中断する
End
End If
End Sub
'*****************************************
' データベース切断(Oracle)
'*****************************************
Public Sub disConnectOracle()
On Error Resume Next ''エラーを無視して次行を実行する
''データベースを閉じて解放する
pOraDatabase.Close
Set pOraDatabase = Nothing
''セッションを閉じて解放する
pOraSession.Close
Set pOraSession = Nothing
On Error GoTo 0 ''エラー番号をリセットする
End Sub
'*****************************************
' レコードを取得してExcelに出力する
'*****************************************
Public Function procMain() As Integer
Dim rsOra As OraDynaset ''データセット
Dim objField As OraField ''フィールド
Dim rowNum As Integer ''行番号
Dim colNum As Integer ''列番号
On Error GoTo Err_
''DB接続
Call connectOracle
''SQL実行
Set rsOra = pOraDatabase.CreateDynaset(selectSql(), ORADYN_READONLY)
''取得したレコードのカラム名を一行目に表示する
rowNum = 1
colNum = 1
For Each objField In rsOra.Fields
''カラム名を出力する
Cells(1, colNum) = objField.Name
''次の列番号を取得する
colNum = colNum + 1
Next objField
''取得したレコードの表示
rowNum = 2
If Not rsOra.EOF Then
While Not rsOra.EOF
''イベントをOSで実行させる
DoEvents
''レコードを出力する
Cells(rowNum, 1) = rsOra.Fields("PROD_ID").Value
Cells(rowNum, 2) = rsOra.Fields("PROD_NAME").Value
Cells(rowNum, 3) = rsOra.Fields("PRICE").Value
''次の行番号を取得する
rowNum = rowNum + 1
''次のレコードを取得する
rsOra.MoveNext
Wend
End If
''DB解放
Set rsOra = Nothing
''DB切断
Call disConnectOracle
Err_:
''エラー時の処理
If Err.Number <> 0 Then
''エラーの内容を表示する
MsgBox (Err.Description)
End If
End Function
'*****************************************
' SQL文の作成
'*****************************************
Public Function selectSql() As String
Dim strSql As String
strSql = ""
strSql = strSql & " SELECT"
strSql = strSql & " PROD_ID"
strSql = strSql & " , PROD_NAME"
strSql = strSql & " , PRICE"
strSql = strSql & " FROM"
strSql = strSql & " PRODUCT"
selectSql = strSql
End Function
''=================================
「実行結果」
「前提条件 - 環境設定」
①Oracleのクライアントがインストールされていること
②接続するDBのサービスが設定されていること
③接続が確立されていること
※環境設定については後日、別途記載予定
「実行環境」
Microsoft Office Professional Plus [Excel 2007 SP3]
「前準備」
①参照設定「OracleInProc Server 5.0 Type Library」
「ツール(T)」→参照設定
一覧の中ほど
「サンプルコード」
''''''''''''''ORACLE DB接続
Public pOraSession As OraSession
Public pOraDatabase As OraDatabase
Private Const cnstInstance As String = "******"
Private Const cnstUserPass As String = "*****/*****"
'*****************************************
' データベース接続(Oracle)
'*****************************************
Public Sub connectOracle()
On Error GoTo Err_
''接続前に切断を実行する
Call disConnectOracle
''セッションを開く
Set pOraSession = CreateObject("OracleInProcServer.XOraSession")
''開いたセッションからデータベースに接続する
Set pOraDatabase = pOraSession.OpenDatabase(cnstInstance, cnstUserPass, ORADB_DEFAULT)
Err_:
''エラー時の処理
If Err.Number <> 0 Then
''エラーの内容を表示する
MsgBox (Err.Description)
''処理を中断する
End
End If
End Sub
'*****************************************
' データベース切断(Oracle)
'*****************************************
Public Sub disConnectOracle()
On Error Resume Next ''エラーを無視して次行を実行する
''データベースを閉じて解放する
pOraDatabase.Close
Set pOraDatabase = Nothing
''セッションを閉じて解放する
pOraSession.Close
Set pOraSession = Nothing
On Error GoTo 0 ''エラー番号をリセットする
End Sub
'*****************************************
' レコードを取得してExcelに出力する
'*****************************************
Public Function procMain() As Integer
Dim rsOra As OraDynaset ''データセット
Dim objField As OraField ''フィールド
Dim rowNum As Integer ''行番号
Dim colNum As Integer ''列番号
On Error GoTo Err_
''DB接続
Call connectOracle
''SQL実行
Set rsOra = pOraDatabase.CreateDynaset(selectSql(), ORADYN_READONLY)
''取得したレコードのカラム名を一行目に表示する
rowNum = 1
colNum = 1
For Each objField In rsOra.Fields
''カラム名を出力する
Cells(1, colNum) = objField.Name
''次の列番号を取得する
colNum = colNum + 1
Next objField
''取得したレコードの表示
rowNum = 2
If Not rsOra.EOF Then
While Not rsOra.EOF
''イベントをOSで実行させる
DoEvents
''レコードを出力する
Cells(rowNum, 1) = rsOra.Fields("PROD_ID").Value
Cells(rowNum, 2) = rsOra.Fields("PROD_NAME").Value
Cells(rowNum, 3) = rsOra.Fields("PRICE").Value
''次の行番号を取得する
rowNum = rowNum + 1
''次のレコードを取得する
rsOra.MoveNext
Wend
End If
''DB解放
Set rsOra = Nothing
''DB切断
Call disConnectOracle
Err_:
''エラー時の処理
If Err.Number <> 0 Then
''エラーの内容を表示する
MsgBox (Err.Description)
End If
End Function
'*****************************************
' SQL文の作成
'*****************************************
Public Function selectSql() As String
Dim strSql As String
strSql = ""
strSql = strSql & " SELECT"
strSql = strSql & " PROD_ID"
strSql = strSql & " , PROD_NAME"
strSql = strSql & " , PRICE"
strSql = strSql & " FROM"
strSql = strSql & " PRODUCT"
selectSql = strSql
End Function
''=================================
「実行結果」
-----[PR]-----
-----------【PR】-------------
コメント 0