WalkingAlone

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
カスタム検索

★ORACLE案件承ります★