ヘッダーをスキップ
Oracle® Objects for OLE開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B58887-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 オートメーション・クライアントでのOracle Objects for OLEの使用

この章では、オートメーション・クライアントを使用してOracleデータにアクセスする方法を説明します。

内容は次のとおりです。

オートメーション・クライアントの使用に関する概要

Oracle Objects for OLE(OO4O)は、各種プログラミングまたはスクリプト言語を使用して、Oracleデータベースのデータにすばやく効率的にアクセスできるように設計されています。

OO4Oは、Visual Basic、Excel、Active Server Pages、Internet Information Server(IIS)およびその他開発ツールとともに簡単に使用できます。

Visual BasicでOracle Data Controlを使用すると、Oracleデータにアクセスする別のメソッドを使用できます。

この開発者ガイドには、特定のメソッドとプロパティに関する例が記載されています。さらに、サンプル・プログラムがOracle Objects for OLEとともにインストールされ、ORACLE_BASE\\ORACLE_HOME\oo4o\ディレクトリ内のVB、EXCEL、IIS、CPPなどの下に置かれます。

Visual BasicのOO4Oのクイック・ツアーも用意されています。

デモ・スキーマとサンプル・コード

この開発者ガイドに含まれているサンプル・コード、およびOracle Objects for OLEに同梱されているサンプル・アプリケーションは、デモ・スキーマ(データベース表およびその他のオブジェクト)およびデモ用のユーザー/パスワード(scott/tiger)とともに使用できるように設計されています。サンプル・コードはORACLE_BASE\\ORACLE_HOME\oo4oディレクトリにあります。

デモ・スキーマの作成

ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリにあるdemobld7.sqlスクリプトで、OO4Oデモ・スキーマを作成できます。デモ・スキーマは、demodrp7.sqlスクリプトで削除できます。

デモ・スキーマ

デモ・スキーマには次の参照が含まれます。

  • デモ表EMPおよびDEPT

  • ユーザーscottとパスワードtiger(scott/tiger)

  • ネットワーク別名ExampleDb

    ネットワーク・サービス(データベース)の別名およびtnsnames.oraファイルの設定の詳細は、『Oracle Net Services管理者ガイド』を参照してください。

    多くの例では、ネットワーク別名に" "(NULL文字列)を使用することによって、ローカル・データベースにアクセスできます。

その他のスキーマ

例を実行するために他のスキーマが必要な場合があります。このガイドの付録では、例の説明の中でスキーマの名前と場所を示しています。


関連項目:

追加のスキーマ

関連ファイル

ORACLE_BASE\\ORACLE_HOME\oo4oディレクトリには、次の項目が含まれています。

  • OO4Oのサンプル・プログラム。

    サブディレクトリには、C++とVisual Basicの両方のサンプルがあります。

  • ストアド・プロシージャの作成に使用されるoraexamp.sqlスクリプト。multicur.sqlempcur.sqlなどの追加スクリプトが、他のサンプル・プログラムを設定するために用意されています。

  • オプション・フラグおよびプロパティ値に使用される定数の値が含まれる、Oracle Objects for OLEのグローバル定数ファイルoraconst.txt。これらの定数はOracleインプロセス・サーバーのタイプ・ライブラリにも含まれているため、通常、このファイルは必要ありません。

Visual BasicでのOracle Objects for OLEオートメーションの使用

この例で示すコード部分は、ダイナセットに必要なオブジェクトをすべて作成してからダイナセット自体を作成する方法を示します。

  1. Visual Basicを起動して新規プロジェクトを作成します。「Project」メニューから「References」を選択し、「InProcServer 5.0 Type Library」をチェックします。

    「OIP Server 5.0 Type Library」がチェックされた状態の「References」ダイアログ・ボックス
    画像illustration o4o00003.gifの説明

  2. Visual Basicを起動して新規プロジェクトを作成します。次に、フォームの宣言セクションに次のコードを追加します。

    ... 
    ' Declare variables 
    Dim OraSession As OraSession 
    Dim OraDatabase As OraDatabase 
    Dim OraDynaset As OraDynaset 
    Dim OraFields As OraFields
    
  3. Oracleデータを表示するフォームに関連付けられているLoadプロシージャに、次のコードを追加します。

    ' Create the OraSession Object. The argument to CreateObject is the 
    ' name by which the OraSession object is known to the OLE system. 
    Set OraSession = CreateObject("OracleInProcServer.XOraSession") 
     
    ' Create the OraDatabase Object by opening a connection to Oracle.
    Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 
     
    ' Create the OraDynaset Object. 
    Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 
     
    ' You can now display or manipulate the data in the dynaset. For example: 
    Set OraFields = OraDynaset.fields 
    OraDynaset.movefirst 
    Do While Not OraDynaset.EOF 
    MsgBox OraFields("ename").Value 
    OraDynaset.movenext 
    Loop 
    End Sub 
    
  4. フォームを実行し、結果を表示します。

Active Server Pages(ASP)でのOO4Oオートメーションの使用

この例では、Microsoft Internet Information Server(IIS)のActive Server Pages(ASP)を使用して、Oracle Objects for OLEの接続プール機能について説明します。サンプル・コードでは、SQL SELECT問合せを実行し、その結果をHTML表として戻します。このスクリプトで使用されているデータベース接続は、global.asaファイルの実行時に作成されたプールから取得されています。

Oracle Objects for OLEをOLEオートメーションとIISで使用するためには、すべてのASP拡張機能を含めて、IIS 3.0以上をインストールする必要があります。IISを実行しているコンピュータで、Oracleデータベースにアクセス可能であることも必要です。


注意:

この例のサンプル・コードは、ORACLE_BASE\\ORACLE_HOME\oo4o\iis\samples\asp\connpoolディレクトリから入手できます。

  1. SQL*Plusを起動し、scott/tigerでOracleデータベースにログインします。

    次のPL/SQLプロシージャを作成します。

    -- creates PL/SQL package to be used in ASP demos
    create or replace package ASP_demo as 
        --cursor c1 is select * from emp; 
        type empCur is ref cursor; 
    PROCEDURE GetCursor(p_cursor1 in out empCur, indeptno IN NUMBER, 
                      p_errorcode OUT NUMBER); 
    END ASP_demo;
    /
    

    ASP_demoパッケージ本体を次のように作成または置換します。

    PROCEDURE GetCursor(p_cursor1 in out empCur, indeptno IN NUMBER, 
                     p_errorcode OUT NUMBER) is 
    BEGIN 
        p_errorcode:= 0; 
        open p_cursor1 for select * from emp where deptno = indeptno; 
    EXCEPTION 
        When others then 
        p_errorcode:= SQLCODE; 
    END GetCursor; 
    ...
    
    END ASP_demo; 
    /
     
    
  2. Active Server Pages(ASP)のサンプル・コードを作成します。OO4Oに関係のあるコードは太字になっています。

    'GLOBAL.ASA 
    
    <OBJECT RUNAT=Server SCOPE=Application ID=OraSession 
                  PROGID="OracleInProcServer.XOraSession"></OBJECT> 
    <SCRIPT LANGUAGE=VBScript RUNAT=Server> 
    Sub Application_OnStart 
     
    'Get an instance of the Connection Pooling object and 
    'create a pool of OraDatabase 
    OraSession.CreateDatabasePool 1,40,200,"exampledb", "scott/tiger",  0 
    End Sub 
     
    'OO4ODEMO.ASP 
    
    <html> 
    <head> 
    <title>Oracle Objects For OLE (OO4O) </title> 
    </head> 
    <body BGCOLOR="#FFFFFF"> 
    <font FACE="ARIAL,HELVETICA"> 
    <h2 align="center">Oracle Objects For OLE (OO4O) </h2> 
    <form ACTION="OO4ODEMO.asp" METHOD="POST"> 
    <% 
    SqlQuery = Request.Form("sqlquery") 
    %> 
    <p>This sample executes a SQL SELECT query and returns the result as an HTML table. The database connection used in this script is obtained from a pool that is created when the <strong>global.asa</strong> is executed. </p> 
    <p>SQL Select Query: <input SIZE="48" NAME="sqlquery"> </p> 
    <p><input TYPE="SUBMIT"> <input TYPE="RESET"> <input LANGUAGE="VBScript" TYPE="button" VALUE="Show ASP Source" ONCLICK="Window.location.href = &quot;oo4oasp.htm&quot;" 
     
    NAME="ShowSrc"></p> 
    </form> 
    <% 
    If SqlQuery = "" Then 
    %> 
    <% Else %> 
    <table BORDER="1"> 
    <% 
    Set OraDatabase = OraSession.GetDatabaseFromPool(10) 
    Set OraDynaset = OraDatabase.CreateDynaset(SqlQuery,0) 
    Set Columns = OraDynaset.Fields 
    %> 
    <tr> 
    <td><table BORDER="1"> 
    <tr> 
    <% For i = 0 to Columns.Count - 1 %> 
    <td><b><% = Columns(i).Name %></b></td> 
    <% Next %> 
    </tr> 
    <% while NOT OraDynaset.EOF %> 
    <tr> 
    <% For col = 0 to Columns.Count - 1 %> 
    <td><% = Columns(col) %> 
    </td> 
    <% Next %> 
    </tr> 
    <% OraDynaset.MoveNext %> 
    <% WEnd %> 
    </table> 
     
    <p></font><%End If%> </p> 
    <hr> 
    </td> 
    </tr> 
    </table> 
    </body> 
    </html>
     
    
  3. 読込みと実行のアクセスが可能なMicrosoft Internet Service Managerから仮想ディレクトリを作成し、すべての.aspおよび.asaファイルをそのディレクトリに格納します。

  4. oo4odemo.aspファイルを起動するHTMLページを作成します。次のように、リンクをそのページに追加します。

    <a href="/<your_path>/OO4ODEMO.ASP">This link launches the demo!</a>
    
  5. Webブラウザにページをロードし、デモへのリンクをクリックします。

  6. 「SQL SELECT Query」フィールドにSELECT * FROM EMPなどの問合せを入力し、「Submit Query」ボタンを選択します。問合せの最後にセミコロン(;)を含めないでください。

    select * from empと入力された「SQL Select Query」フィールド
    画像の説明

ExcelでのOracle Objects for OLEオートメーションの使用

このサンプルでは、OracleデータをExcelワークシートに挿入する方法を示します。


注意:

この例のサンプル・コードは、ORACLE_BASE\\ORACLE_HOME\oo4o\excel\samples\ディレクトリから入手できます。

Microsoft ExcelでOLEオートメーションを使用してOracleデータをワークシートに挿入する手順は、次のとおりです。

  1. Excelを起動して新しいワークシートを作成します。

  2. 「ツール」メニューの「マクロ」オプションを使用してOracleデータを操作するための新しいマクロを作成して編集します。

    使用可能なマクロのリストが表示されたダイアログ・ボックス
    画像の説明

  3. マクロ用のVisual Basicコードを入力し、Oracleダイナセットを作成してアクセスします。たとえば、次のEmpData()およびClearData()プロシージャ(マクロ)を参照してください。

    Sub EmpData() 
     
    'Declare variables 
    Dim OraSession As OraSession 
    Dim OraDatabase As OraDatabase 
    Dim EmpDynaset As OraDynaset 
    Dim flds() As OraField 
    Dim fldcount As Integer 
      Set OraSession = CreateObject("OracleInProcServer.XOraSession") 
      Set OraDatabase = OraSession.OpenDatabase("ExampleDB", "scott/tiger", 0&)  
      Set EmpDynaset = OraDatabase.CreateDynaset("select * from emp", 0&) 
      Range("A1:H15").Select 
      Selection.ClearContents 
     
       'Declare and create an object for each column. 
       'This will reduce objects references and speed up your application.  
    fldcount = EmpDynaset.Fields.Count 
    ReDim flds(0 To fldcount - 1) 
    For Colnum = 0 To fldcount - 1 
      Set flds(Colnum) = EmpDynaset.Fields(Colnum) 
    Next 
     
    'Insert Column Headings 
    For Colnum = 0 To EmpDynaset.Fields.Count - 1 
      ActiveSheet.Cells(1, Colnum + 1) = flds(Colnum).Name 
    Next 
     
    'Display Data 
    For Rownum = 2 To EmpDynaset.RecordCount + 1 
      For Colnum = 0 To fldcount - 1 
        ActiveSheet.Cells(Rownum, Colnum + 1) = flds(Colnum).Value 
      Next 
      EmpDynaset.MoveNext 
    Next 
    
    Range("A1:A1").Select
     
    End Sub 
    
    Sub ClearData() 
      Range("A1:H15").Select 
      Selection.ClearContents 
      Range("A1:A1").Select 
    End Sub 
    
  4. 簡単にアクセスできるように、EmpData()ClearData()などの作成されたプロシージャ(マクロ)をワークシート上のコマンド・ボタンに割り当てます。このボタンを選択すると、ワークシートのデータを消去してリフレッシュできます。次のスクリーンショットでは、ClearData()が「Clear」ボタンに、EmpData()が「Refresh」ボタンに割り当てられています。

    EMPNO、ENAME、JOBなどのサンプル・データが表示されたスプレッドシート
    画像exsheet.gifの説明

Microsoft C++の使用

Visual C++でのOracle Objects for OLEの詳細は、オンライン・ヘルプとして利用できるOracle Objects for OLE C++クラス・ライブラリ開発者ガイドを参照してください。

Visual BasicでのOracle Data Controlの使用

Oracle Data Controlがリフレッシュされると、クライアント(必要な場合)、セッション、データベースおよびダイナセットが自動的に作成されます。基本的なアプリケーションの場合、コードは不要かほとんど必要ありません。

この項では、Oracle Data Controlのプロパティを設定する方法を2つ示します。

  • Visual Basicの「Properties」ウィンドウを使用する方法

  • プロパティをプログラミングする方法

「Properties」ウィンドウでのOracle Data Controlのプロパティの設定

  1. Visual Basicを起動して新規プロジェクトを作成します。

  2. 「Project」メニューの「Components」オプションで、プロジェクトに「Oracle Data Control」を追加します。

    「Project」メニューの「Components」オプション
    画像o4o00004.gifの説明

    Visual Basicのツール・パレットにOracle Data Controlが追加され、次のように表示されます。

    「Project」メニューの「Components」オプション
    画像oradc.gifの説明

  3. Oracle Data Controlをプロジェクトに追加するために、そのコントロールをフォーム上にドラッグ・アンド・ドロップします。コントロールのサイズと位置を調整してください。

  4. コントロールの名前をOraDataControlに変更します。Oracleデータベースにアクセスするために、ConnectDatabaseNameおよびRecordSourceプロパティを次のように設定します。

    「Properties」ウィンドウ
    画像dcprops.gifの説明

  5. Oracle Data Controlが設定されると、Visual Basicコントロールを同じフォームにドラッグ・アンド・ドロップして、コントロール内のデータにアクセスできます。希望するデータ・フィールドとデータ・ソースにアクセスするには、「Data」にあるプロパティを設定します。次の図は、従業員番号の表示を設定するTextBoxコントロールを示します。

    従業員番号の表示を設定するTextBoxコントロール
    画像boxprops.gifの説明

  6. プロジェクトが実行されると、Oracle Data Controlを使用して、RecordSourceプロパティによって識別されたデータが表示されます。

    実行時にサンプル・データが表示された実際のフォーム
    画像runform.gifの説明

    Microsoft Grid Controlを使用して、表内の全データを表示することもできます。「Project」メニューの「Components」オプションで、グリッド・コントロールを追加する必要があります。

プログラムによるOracle Data Controlのプロパティの設定

次に示すコード部分では、ダイナセットの作成に必要なOracle Data Controlのプロパティをプログラムで設定する方法を示します。これらは、Visual Basicの「Properties」ウィンドウで設定できるプロパティと同じです。

  1. 新しいプロジェクトを作成し、「Project」メニューの「Components」オプションでプロジェクトに「Oracle Data Control」を追加します。

  2. Oracle Data Controlをフォーム上にドラッグ・アンド・ドロップします。コントロールの名前をOraDataControlに変更します。

  3. フォームにOracle Data Controlを挿入した後、フォームに関連付けられているLoadプロシージャに次のコードを追加します。

    ... 
     
    'Set the username and password. 
    OraDataControl.Connect = "scott/tiger" 
     
    'Set the database name. 
    OraDataControl.DatabaseName = "ExampleDb" 
     
    'Set the record source. 
    OraDataControl.RecordSource = "select * from emp" 
     
    'Refresh the data control. 
    OraDataControl.Refresh 
    ... 
    

    これで、次のように、参照できる有効なセッション、データベースおよびダイナセットが作成されました。

    オブジェクト 参照
    orasession oradatacontrol.oradatabase.orasession
    oradatabase oradatacontrol.oradatabase
    oradynaset oradatacontrol.recordset

  4. 前の例に示したように、TextBoxなどのVisual Basicコントロールを使用して、RecordSourceプロパティのデータにアクセスできます。

MS Visual C++でのOracle Data Controlの使用

この例では、Oracle Data Controlを伴った簡単なWin32アプリケーションをMS Visual C++を使用して作成する方法を示します。この例では、Oracleデータ・コントロールとDBグリッド・コントロールの両方がシステムに登録されていると仮定しています。

  1. Microsoft Visual C++プログラムを起動します。

  2. 「File」メニューから「New」を選択します。

  3. 「New Window」「Projects」タブで、「MFC AppWizard.exe」を選択します。OO4Oなどのプロジェクト名を入力し、プロジェクトの位置を決定します。「OK」をクリックします。

  4. 「MFC AppWizard」のステップ1で、「Dialog based application」を選択してから「Next」をクリックします。

  5. ウィザードのステップ2で、「ActiveX Controls」ボックスがチェックされていることを確認してデフォルトを受け入れ、ダイアログ・ボックスのタイトルを入力します。「Next」をクリックします。

  6. ウィザードのステップ3で、デフォルトを受け入れます。「Next」をクリックします。

  7. ステップ4で、「Finish」をクリックします。「New Project Information」画面で「OK」をクリックします。

  8. 「Project Workspace」ダイアログ・ボックスで、「ResourceView」タブを選択します。「Resources」フォルダを拡張してから「Dialog」フォルダを拡張します。

  9. ダイアログ・ボックスを編集できるように、メイン・プロジェクトのダイアログ・ボックスをダブルクリックします。

    注意: OO4Oをプロジェクト名として使用していた場合は、IDD_OO4O_DIALOGとなります。

  10. ダイアログ・ボックスにあるデフォルトのコントロールを削除します。サイズを調整してダイアログ・ボックスを拡大します。

  11. 選択したダイアログ・ボックスで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Properties」を選択します。「Properties」ウィンドウの「General」タブで、キャプションを「Oracle Data Control Example」に変更します。「Properties」ウィンドウをクローズします。

  12. 選択したダイアログ・ボックスで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Insert ActiveX Control...」を選択します。このウィンドウで「ORADC Control」を選択し、「OK」をクリックします。

    「Insert ActiveX Control」ダイアログ・ボックス
    画像の説明

  13. ダイアログ・ボックスの下部に「ORADC Control」を配置します。選択したデータ・コントロールで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Properties」を選択します。

  14. 「Properties」ウィンドウの「General」タブで、IDIDC_ ORADATACONTROLに変更します。アプリケーションの実行時にコントロールが非表示になるように、「Visible」のチェック・マークを解除します。

  15. 「Properties」ウィンドウの「All」タブを表示し、次のプロパティを設定します。

    Connect: scott/tiger 
    DatabaseName: exampledb 
    RecordSource: select * from emp 
    
    「ORADC Control」ダイアログ・ボックス
    画像oradcprp.gifの説明

  16. 選択したダイアログ・ボックスで、マウスの右ボタンをクリックしてメニューを表示します。メニューから「Insert ActiveX」コントロールを選択します。「DBGrid Control」を配置して「OK」をクリックします。

  17. 「DBGrid Control」をダイアログ・ボックスの上部に配置してサイズを調整します。コントロールに対するプロパティを表示します。「Properties」ウィンドウの「All」タブで、DataSourceプロパティにOracle Data Control(IDC_ORADATACONTROL)を設定します。その他のプロパティに関しては、デフォルトを受け入れます。これらのデフォルトは後で変更できます。

  18. 「File」メニューから「Save All」を選択します。

  19. プロジェクトをビルドして実行します。

  20. 次の図のように、emp表からのレコードがDBGrid Controlに表示されます。

    ORADC Controlの例
    画像oradcemp.gifの説明