OracleCI Unit

Top  Previous  Next

OracleCIユニットはOracle Call Interface (OCI)を含みます。OCISQL*NetNet8の一部で、そしてDLLとして提供されます。 このDLLOraclebinディレクトリに位置しora73.dll (for SQL*Net 2.3), ora803.dll (for Net8 8.0.3), or oci.dll (for Net8 8.1 and later)のような名前が付けられています。 OCI DLLはデータベースへ初めてログオンを試みた時に初期化されます(一度だけ)。

次の変数はOCI DLLに関係があります:

OCI70: Boolean = False;       // OCI 7.0 functions detected

OCI72: Boolean = False;       // OCI 7.2 functions detected

OCI73: Boolean = False;       // OCI 7.3 functions detected

OCI80: Boolean = False;       // OCI 8.0 functions detected

OCI81: Boolean = False;       // OCI 8.1 functions detected

OCI90: Boolean = False;       // OCI 9.0 functions detected

OCI92: Boolean = False;       // OCI 9.2 functions detected

OracleHomeName: string = '';  // Name of Oracle Home

OCIDLL: string = '';          // Name of OCI DLL

 

決してOCI70..OCI81 booleanを設定しないでください! これらは内部的にどの関数が使用可能かを表すために使われています。OCI80 booleanはアプリケーション内でOracle8機能 (LOB'sObjects)を使えるかどうかを決定します。しかしながらOracle8に接続できるかどうかも知っていなければなりません。

OracleHomeName変数は、使いたいと思うOracle Homeの名前に設定できます。これはOracle Homeへのレジストリパスでもなければ、ディレクトリパスでもありません。それはORACLE_HOME_NAMEレジストリキーの値です。これはOracleHome Selectorユーティリティと共に使われる名前と等しくなります。OracleHomeList関数を通じてoracle home nameのリストを取得できます。

OCIDLL 文字列を使って使われているOCI DLLの正確なファイルネームを判断することが出来ます。 この変数を使って、特定のバージョンのSQL*Netを読み込ますように出来ます。 単純にDLLInitが呼ばれる前に希望するDLLファイルネームを設定します。OCIDLL文字列はDirect Oracle Accessに対するもので、Vendor Initに対するBDEです。

次の関数はOCI DLLと関係があります:

procedure InitOCI;

この関数はDLLInit を呼び出すことで初期化し、結果をチェックし、失敗した時には適切な例外を発生させます。

function DLLLoaded: Boolean;

OCI DLLが読み込まれ初期化されたかどうかを表します。

function DLLInit: Integer;

OCI DLLを読み込み、初期化します。 次のことが起こります:

1.        すでに初期化されていると、exitします
2.        OCIDLL= parameterがコマンドラインで入力されたかをチェックします。9までスキップする
3.        もしOCIDLL 文字列が値を持っていたら、9
4.        CもしORACLEHOME= parameterがコマンドラインで入力されたら、7
5.        もしOracleHomeName文字列が値を持っていたら、7
6.        Primary Oracle Homeを決定する
7.        ORACLE_HOMEディレクトリを決定するためにレジストリをチェックする
8.         \bin\を追加しora*.dlloci.dllを探す
9.        最も大きい数と共にファイルにOCIDLL文字列を設定します
10.        LoadLibrary(OCIDLL)を呼ぶ
11.        もし成功したら現在のパスをOraclebinディレクトリに設定してもう一度やってみる
12.        名前で全ての関数を判断する

DLLInit関数は次の値を持つ整数を返します:

dllOK        全てうまくいきました
dllNoRegistry        レジストリーキーが見つかりませんでした(SQL*Netがインストールされていない)
dllNoFile        ステップ5でファイルが見つからなかったかLoadLibrary()が失敗
dllMismatch        ステップ9で関数が見つからなかった

procedure DLLExit;

DLLInitで初期化されたOCI DLLを解放します

procedure OracleHomeList: TStringList;

oracle home name付きでTstringListインスタンスを返します。 OCIが初期化される前に、OracleHomeNameをその中の一つの名前で設定できます。

function OracleAliasList: TStringList;

tnsnames.ora file内で定義されたデータベースエイリアス付きのTstringListインスタンスを返します。 このリストを解放しないで下さい、 これは内部的にTOracleSession.LogonDatabaseプロパティとTOracleLogonダイアログに使われています。Net8が使われているかどうかを知る必要があるので、この関数は初めにInitOCIを呼び出してOCIを初期化します。

function TNSNames: string;

tnsnames.ora fileの名前を返します。 Net8が使われているかどうかを知る必要があるので、この関数はまず最初にInitOCIを呼び出してOCIを初期化します。