VBA経由でOracleを操作するときのライブラリを調べるのに、とりあえず10.2.0.5のOracle Client全部入り環境に何が入っているかを見てみた。可能であれば、最小構成のOracle Clientしか入っていない環境で動かしたいのだけど……
たぶん使ってるのはこのOracle Provider for OLE DBってやつ……。
- Excel‐Oracle連携(2)Page 2/3 お手軽が一番、ExcelをOracleクライアントに
- 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