- PR -

oo4oによる接続エラーについて

1
投稿者投稿内容
モグワイ
会議室デビュー日: 2007/10/09
投稿数: 4
投稿日時: 2007-10-09 20:03
お世話になります。

VB.NET2005よりoo4oでORACLE10gに接続するプログラムの
メンテナンスを行おうとしたのですが、OpenDataBaseでエラーが発生してしまい、
実行できません。
他のPCでは同様の記述で実行できる場合もあり、原因がどこにあるのかがわかりません。
どなたかご教授お願いいたします。

■開発環境
OS:Windows2000 SP4
VB:VisualStudio2005 SP1
Oracle:Oracle Client 10.2.0.1.0

■エラー発生部分のソース
Public gOraSession As Object
Public gOraDatabase As Object

Public Const ORADB_ORAMODE = &H1&
Public Const ORADB_NOWAIT = &H2&

gOraSession = CreateObject("OracleInProcServer.XOraSession")
gOraDatabase = gOraSession.OpenDatabase(サービス名, ユーザー名 & "/" & _          パスワード, ORADB_ORAMODE Or ORADB_NOWAIT)

■現象
CreateObjectでセッションは作成できるのですが、次行のOpenDatabaseでエラーが発生し、
「'System.ArgumentException' の初回例外が Microsoft.VisualBasic.dll で発生しました。」のように表示されてしまいます。
エラーを拾ってメッセージを表示すると、「値が有効な範囲にありません。」というメッセージです。



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-10-10 18:17
実行できるPCがあるということは、コードではなく環境の問題ではないでしょうか?
動くものと動かないものを比べないと………
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-10-10 18:32
oo4o で接続するときの OraSession.OpenDatabase(service, username & "/" & password, 〜) で指定する service って TNS 接続文字列ですよね。確か。
エラーが出たマシンの %ORACLE_HOME%\network\admin\tnsnames.ora にエントリはありますでしょうか。
SQL*Plus でその接続文字列、ユーザ名、パスワードで接続することは出来ますでしょうか?

コード:

C:\>sqlplus username/password@service




_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2007-10-10 18:33 ]
モグワイ
会議室デビュー日: 2007/10/09
投稿数: 4
投稿日時: 2007-10-10 18:37
Jittaさん
アドバイスありがとうございます。

今日の昼間にODPをアンインストールしレジストリを削除してから、動作するPCに合わせてOracleClient10.2.0.1をインストールして試してみましたが、やはり同様の現象が発生してしまいました。

他に環境の違いというと、動作する環境ではOSがXPでこちらのOSは2000とである、ということくらいしか浮かばないのですが、OSによって動作が変わるといったことがあるのでしょうか?
モグワイ
会議室デビュー日: 2007/10/09
投稿数: 4
投稿日時: 2007-10-10 18:46
もしもしさん
ありがとうございます。

tnsnames.oraにサービス名のエントリは作成してあり、SQL*PLUSやObjectBrowserによる接続は問題なく行うことができました。
また、他のプログラムで試してみたところODP.NETの場合は同じデータベースに接続することができました。
やはり.NETでoo4oを利用することに問題があるのでしょうか・・・
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2007-10-10 21:21
saki1208です。

異なるバージョンのOracleクライアントがインストールされている
ということはないですか?

oo4oはすべてのOracle Homeで一つだけしか存在できません。

# よく見ると、OpenDatabaseでエラーですね。
# CreateObjectではないので、それはないか。

ちょっと、言葉足らず。
複数のOracle Homeがあって、oo4oの入っていないOracle Homeが
指定されていないか?
のつもりでした。

[ メッセージ編集済み 編集者: saki1208 編集日時 2007-10-10 21:23 ]
モグワイ
会議室デビュー日: 2007/10/09
投稿数: 4
投稿日時: 2007-10-10 22:06
saki1208さん
ありがとうございます。

この質問を書き込んだ時点では8iのClientと10.2のODPが入っていたのですが、
今はアンインストールして10gのClientのみが入っている状態です。

saki1208さんのおっしゃる通り、CreateObjectは成功しているようで、
イミディエイトウィンドウで「gOraSession.OIPVersionNumber」を調べると
「10.2.0.1.0」と表示されます。


こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-11 11:09
引用:
ODPをアンインストール


8iClientは完全にアンインストールしましたか?
インストーラを使用した通常の手順ではレジストリにゴミが残ります。

引用:
CreateObjectは成功している


regsvr32でシステムに登録している(OracleHomeは見ていない)からじゃないでしょうか?
#そして OpenDatabase ではOracleHomeを見ている。
1

スキルアップ/キャリアアップ(JOB@IT)