misc.log

日常茶飯事とお仕事と

ExcelからOracleにVBA経由でアクセスするときの……

VBA経由でOracleを操作するときのライブラリを調べるのに、とりあえず10.2.0.5のOracle Client全部入り環境に何が入っているかを見てみた。可能であれば、最小構成のOracle Clientしか入っていない環境で動かしたいのだけど……

たぶん使ってるのはこのOracle Provider for OLE DBってやつ……。

ExcelOracle連携(2)Page 2/3 お手軽が一番、ExcelOracleクライアントに
http://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_2.html

ADOでOracleにつなぐサンプルを書いてみる

これを参考にしてサンプルコードを書いてみましょう……

Private serverName As String
Private userName As String
Private password As String


Private Sub PrepareAccountInfo()

   serverName = ActiveWorkbook.Sheets("DbTest").Cells(3, 2).Value
   userName = ActiveWorkbook.Sheets("DbTest").Cells(4, 2).Value
   password = ActiveWorkbook.Sheets("DbTest").Cells(5, 2).Value

End Sub


Public Sub ConnectOleDB()
   
   'ADO+OLEDB(Oracle Data Provider for OLE DB)利用での接続
   
    On Error GoTo ErrorProc

    PrepareAccountInfo
   
    Dim ADOConnection As ADODB.Connection
    Set ADOConnection = New ADODB.Connection
    ADOConnection.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=" & serverName & ";User ID=" & userName & ";Password=" & password & ";"
    ADOConnection.Open
   
    Call MsgBox("接続成功", vbOKOnly)
   
    ADOConnection.Close

Exit Sub
ErrorProc:
    Call MsgBox(Err.Description, vbCritical + vbOKOnly, "ERROR")

End Sub



Public Sub ConnectODBC()
   
   'ODBC利用での接続
   
    On Error GoTo ErrorProc

    PrepareAccountInfo
   
    Dim ADOConnection As ADODB.Connection
    Set ADOConnection = New ADODB.Connection
    ADOConnection.ConnectionString = "DSN=" & serverName & ";UID=" & userName & ";PWD=" & password & ";"
    ADOConnection.Open
   
    Call MsgBox("接続成功", vbOKOnly)
   
    ADOConnection.Close

Exit Sub
ErrorProc:
    Call MsgBox(Err.Description, vbCritical + vbOKOnly, "ERROR")

End Sub

とりあえず、エクセルのセルに用意したサーバー情報(ホスト名、IPアドレスかデータソースネーム)と、ユーザーID、パスワードを使い、OLE DBとODBCで接続してみる関数のサンプルです。ここまでやって、ODBC接続のための設定を作っていて気づきました。Oracle関連のODBCドライバには以下の選択肢がありました。

おそらく後者の後半の名前は、インストールした環境によって変わるのでしょう。問題は前者。これはおそらくOfficeを入れた時点で導入されるドライバですね。これが使えれば、環境にOracle ClientをインストールしなくてもOracleに接続できるかも……。

……だめみたい。以下のリンクにあるように、このドライバーはOracle 8i 以降を正式にはサポートしていない。

[INFO] Microsoft Oracle ODBC Driver および OLE DB Provider の制限事項
http://support.microsoft.com/kb/244661/ja

ということはやはり、Oracleクライアントのインストーラーにある「Oracle Windows Interfaces 10.2.0.1.0」などを入れる必要があるようですね。その先で、oo4o、ODBC、OLE DBのどれを使うかは選択できますが、いずれもOracle提供のドライバが必要ってことですね。

oo4oでもやってみる

ついでに、oo4oもやってみました。基本、Object型なんですかね?選択肢から選ぶ方法でコードを書けないのでつらいです。

Public Sub ConnectOo4o()

    'oo4o利用での接続
    
    On Error GoTo ErrorProc
    
    PrepareAccountInfo
   
    Dim oo4oSession As New OraSessionClass
    Dim oraDB As Object
    Set oraDB = oo4oSession.OpenDatabase(serverName, userName & "/" & password, 0&)
    
    Call MsgBox("接続成功", vbOKOnly)
   
    oraDB.Close

Exit Sub
ErrorProc:
    Call MsgBox(Err.Description, vbCritical + vbOKOnly, "ERROR")
    
End Sub