VisualBasic から OO4O を使ってDBへ接続する


Windows上のアプリケーションを開発するにあたって、Microsoft VisualBasic & Oracle という組み合わせは、非常に多く見かけます。この組み合わせがベストチョイスかどうかは別として、この組み合わせで作らなければならなくなった初心者の為に、接続〜簡単な表の検索,更新方法を記述しておきます。

1.OO4Oって?

  Oracle Object for(4) OLE.ミドルウェアです。簡単に言ってしまえば、VBのプログラムと、Oracle の間のやり取りをするプログラムのことです。役割的には ODBC と同じ、と考えても間違いはないでしょう。

  ミドルウェアに ODBC を使うか、OO4Oを使うか、選択に迷う場合もあるでしょうが、特別な場合を除いては、迷う必要はありません。当然、OO4Oを使うべきです。信頼性とパフォーマンスにおいて、ODBC とは比較になりません。ODBCには、ODBCなりのメリットがあります。移植性とか...(^^;

2.VisualBasic からの接続

  接続するには、次の記述を、接続させたい場所に書きます。

'Create Session Object
set OraSession = CreateObject("OracleInProcServer.XOrasession")
'Create OraDatabase Object
set OraDatabase = OraSession.dbOpenDatabase("db","user/pass",&H0)

赤字で記述してある OraSession,OraDatabase は、オブジェクト変数です。
VB のソース上に、定義しなければなりません。

Public OraSession As Objects
Public OraDatabase As Objects

Public(またはGlobal)で宣言して下さい。1ルーチン内だけで接続〜切断をするならば、Dimでも構いませんが、通常、そんな事は無いでしょう。

青字で記述した、"db","user/pass" の部分は、それぞれ "接続文字列","接続ユーザー/接続パスワード"です。

接続文字列とは、Oracleサーバーへ接続する場合の識別を行うためのもので、具体的には、[OracleHome]\network\admin\tnsnames.oraに記述してあるものです。\network\の部分は、Oracle8以降(Net8を使う場合)、\net80\となりますので注意してください。

tnsnames.ora のサンプル
Example1.world =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS =
                (COMMUNITY = tcp.world)
                (PROTOCOL = TCP)
                (Host = Production1)
                (Port = 1521)
            )
        )
        (CONNECT_DATA = (SID = SID1)
    )
)

Example1の部分が、接続文字列です。

SQLNet Easy Config や、Net8 Easy Config を使って設定した方には、「データベース別名」と言ったほうが解りやすいかも知れません。

ちなみに、Easy Config などの GUI ツールは、インストール環境によっては使えない場合があります。ツールに頼らず、設定ファイルを直接編集できるよう、勉強しておくことは重要なことです。

さて、一点注意が必要です。上記の接続を行う記述は、VBの Form_Load には出来るだけ記述を避けた方が良いです。「どこそこにバグがあるから」という明記は出来ませんが、メモリリークなどの不具合が発生し、トラブルの元になるからです(経験談)。
理想としては、VB プログラムのスタートアップを、Form ではなく Sub Main() にして、Form_Load の前に接続処理を済ませましょう。

戻る