OO4Oとは
OO4O(Oracle Objects for OLE)とはWindows用アプリケーション向けにOracleが提供しているデータベースへ接続するミドルウエアです。 ファイルの実体としては、%ORACLE_HOME%\binに存在しているoipXX.dll(XXにはバージョンが入ります。oip11.dll、oip10.dll、oip9.dll等)がOO4Oのライブラリで、 visual Basic等では参照設定で拡張子をtlbに変えたoipXX.tlbを参照に追加して開発を行います。OO4Oは11gR2を最後のリリースに12c以降提供されなくなりました。
64bit Windows OS上での使用
OO4Oは64bit版ORACLEクライアントには付属しておらず64bit Windows上でOO4Oを使用するには11gR1までは32bitのORACLEクライアントをインストールした上で32bitアプリケーションから使用する必要がありましたが、 11gR2のマニュアル(Oracle® Objects for OLE開発者ガイド11g リリース2(11.2) for Microsoft Windows)よりOSのシステム要件に32bitと明記されるようになっています。OO4Oのインストール
OO4OはCOMコンポーネントの為レジストリに登録して使う必要があり、複数のバージョンを同時に使い分けることはできません。 また、9iまでのバージョンではOUIで新規インストールを行う時にすでに端末にOO4Oがインストール済みの場合はインストールする製品から自動でOO4Oを除外してしまうため複数バージョンをインストールすることができません。 10g以降では複数のバージョンをインストールすることができるようになっているためレジストリ登録をやり直すことで任意のバージョンのOO4Oを選択して使用することができます。以下は10.2のバージョンでE:\oracle\product\10.2.0\db_1にインストールされたOO4Oの情報を削除し、 E:\oracle\product\10.2.0\db_2にインストールされたOO4Oの情報を登録しています。
--レジストリ情報削除 cd /d E:\oracle\product\10.2.0\db_1\BIN regsvr32.exe /u oo4ocodewiz.dll regsvr32.exe /u odbtreeview.ocx regsvr32.exe /u oo4oaddin.dll regsvr32.exe /u oip10.dll --レジストリ情報登録 cd /d E:\oracle\product\10.2.0\db_2\BIN regsvr32.exe oo4ocodewiz.dll regsvr32.exe odbtreeview.ocx regsvr32.exe oo4oaddin.dll regsvr32.exe oip10.dll
OO4Oのサンプルプログラム
以下はOO4Oをインストールしたときに一緒に付いてくるエクセルのVBAのサンプルです。 select * from emp;で取得したデータをエクセルに貼り付けるという処理になっています。 (%ORACLE_HOME%oo4o\EXCEL\SAMPLESに入っています)Sub Get_Data() ' Create and initialize the necessary objects Dim OraSession As Object Dim OraDatabase As Object Dim EmpDynaset As Object Dim ColNames As Object Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("接続識別子", "ユーザ/パスワード", 0&) Set EmpDynaset = OraDatabase.DbCreateDynaset("select * from emp", 0&) ' Using field array, ie. ColNames("ename").value, is significantly faster than using ' field lookup, ie. EmpDynaset.fields("ename").value Set ColNames = EmpDynaset.Fields ' Place column headings on sheet For icols = 1 To ColNames.Count Worksheets("DataSheet").Cells(1, icols).Value = ColNames(icols - 1).Name Next ' Place data on sheet using CopyToClipboard EmpDynaset.CopyToClipboard -1 Sheets("DataSheet").Select Range("A2").Select ActiveSheet.Paste End Sub
マニュアル
Oracle Objects for OLE 開発者ガイド10g リリース2(10.2)Oracle® Objects for OLE開発者ガイド11g リリース2(11.2) for Microsoft Windows