社内SEの徒然なる日記

oo4oでExcelから接続してみた(接続・切断)

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


接続に失敗すると、こんなメッセージが出てきます。
Oracle接続失敗

補足

ExcelからOracleに接続したい」なんて考えるのは、Excel(VBA)やOracleに精通している人だと思うので、細かいことは書きません。というか、書き出すときりがないんですよね。

え?精通してない?インスタンスって何?
...いや、そういう人はこんなの作っちゃダメよ。


次回:oo4oでExcelから接続してみた(抽出)
投稿記事の一覧:目次

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する
 

EXCELからDBへの接続

http://www.superdbtool.com/index.htm
ExcelDBToolです。
エクセルから直接データベースへ接続できる便利なツールです。
慣れたら絶対に手を離せません。データ作成だけでも是非使ってみてください。
主な機能はデータ取得/更新/削除/データ作成です。
Oracle,DB2,Sybase,MySQL,PostgreSQL,SQL Server,Sqlite対応。
ガイドもあります。
http://superdbtool.com/blog/basic-guide

60種類以上の本番擬似データをエクセルで作成
シート名で一括でDBから複数のテーブルを取得
複数のSQLを発行して、一括でデータをエクセルへ出力
エクセルを使って、直接データベースを更新
......

テスター | URL | 2014-02-28(Fri)21:20 [編集]


Re: EXCELからDBへの接続

あー、その、なんというか、折角ですが、そういうツールでしたらObject Browserを使ってるので、それで十分だったりします。Excelから直接ってのに、あまり魅力を感じないですしね。

たかたかハリコフ | URL | 2014-03-01(Sat)00:35 [編集]