
Oracleに簡単に接続したい
諸般の事情で、Oracleのデータを取得して、Excelで集計とか編集とかをしたかったので、方法を考えてみました。
最初、ADOを使うつもりだったんですけど、ODBCの設定とか面倒だったので、oo4o(Oracle Objects for OLE)を使うことにしました。
もともと、私のPCにはOralceクライアントが入っていますね。
部品を作ってみた
まず、共通で使う変数をPublic変数として定義します。
Option Explicit
'CreateDynaset Method Options
Public Const ORADYN_DEFAULT = &H0&
Public Const ORADYN_NO_AUTOBIND = &H1&
Public Const ORADYN_NO_BLANKSTRIP = &H2&
Public Const ORADYN_READONLY = &H4&
Public Const ORADYN_NOCACHE = &H8&
Public Const ORADYN_ORAMODE = &H10&
Public Const ORADYN_NO_REFETCH = &H20&
Public Const ORADYN_NO_MOVEFIRST = &H40&
Public Const ORADYN_DIRTY_WRITE = &H80&
' ORACLEインスタンス
Public ORA_USERNAME As String 'ユーザー名
Public ORA_PASSWD As String 'パスワード
Public ORA_DBSTRING As String 'データベース
'共通変数
Public OraSession As Object 'Oracleインプロセス・サーバー
Public OraDatabase As Object 'ユーザー・セッション
次に、Oracleに接続する関数を作ります。
CreateObjectでインスタンスを作成して、OraSession.OpenDatabaseでデータベースに接続します。
ユーザー名とか接続先とかは、共通変数に設定された値を使用します。
' 機能 : Oracleに接続する
'
' 返り値 : true - 接続成功 , false - 接続失敗
'
Public Function oracleOpen() As Boolean
On Error GoTo abnormalEnd:
'Oracleインプロセス・サーバーを起動
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'ユーザー・セッションの確立
Set OraDatabase = OraSession.OpenDatabase(ORA_DBSTRING, ORA_USERNAME & "/" & ORA_PASSWD, 0&)
'--- 終了処理 --------
normalEnd:
'接続成功
oracleOpen = True
Exit Function
abnormalEnd:
'エラー情報の表示と初期化
MsgBox (Err.Number & ", " & Err.Description)
Err.Clear
'オブジェクトの開放
Set OraSession = Nothing
Set OraDatabase = Nothing
'接続失敗
oracleOpen = False
End Function
切断する関数も作っときます。
単純に、使用したオブジェクト参照を解除するだけです。
ちなみに、明示的に切断しなくても、Excelが終了すると勝手に切断されます。
' 機能 : Oracleを切断する
'
Public Sub oracleClose()
'オブジェクトの開放
Set OraSession = Nothing
Set OraDatabase = Nothing
End Sub
接続を確認する処理も作っておきます。
OraDatabaseオブジェクトのConnectionOKプロパティ(boolean型)で状態を確認できます。
' 機能 : Oracleの接続を確認する
'
' 返り値 : true - 接続中 , false - 未接続
'
Public Function oracleOpenChk() As Boolean
On Error GoTo errEnd:
'接続確認
If OraDatabase.ConnectionOK Then
oracleOpenChk = True
Else
oracleOpenChk = False
End If
normalEnd:
Exit Function
errEnd:
Err.Clear
oracleOpenChk = False
End Function
使ってみた
作った関数を使用して、Oracleに接続する処理を作ってみました。
接続状態を確認して、接続されている場合は切断、指定された条件で再度接続する処理です。
Sub db接続()
'Oracleへの接続を確認
If oracleOpenChk Then
'Oracleから切断します
Call oracleClose
End If
'ORACLEインスタンスを設定します。
ORA_USERNAME = "username" 'ユーザ名
ORA_PASSWD = "password" 'パスワード
ORA_DBSTRING = "database" '接続先
'Oracleに接続します。
If oracleOpen Then
MsgBox "Oracleに接続しました。"
End If
End Sub
接続に失敗すると、こんなメッセージが出てきます。

補足
「ExcelからOracleに接続したい」なんて考えるのは、Excel(VBA)やOracleに精通している人だと思うので、細かいことは書きません。というか、書き出すときりがないんですよね。
え?精通してない?インスタンスって何?
...いや、そういう人はこんなの作っちゃダメよ。
次回:oo4oでExcelから接続してみた(抽出)
投稿記事の一覧:目次
--- blog end ---
スポンサードリンク


