tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルOracleへの接続に関して
記事No16517
投稿日: 2019/12/25(Wed) 11:27
投稿者wanko108
多少複雑な環境ですがどなたかお分かりの方がいらっしゃいましたらご教示願います。


OS Windows10 32bit
Oracleサーバー 9i,12c
OracleClient 11g,12c(環境変数Pathは11gが優先です)
VB6.0(SP6)



現在社内にはOracleのバージョンが9iと12cのサーバーが混在しております。
OracleClientは11gと12cです。

Clientの11gは9iのDBに接続可能ですが12cでは9iには接続できません。
ですから環境変数のPathは11gを優先としています。


12cのOracleサーバーが導入されるまでは11gのクライアントしかインストールされていなかったためOraOLEDBで動作していましたが、導入後は12cのクライアントを利用してDBに接続してしまっているようで「このバージョンのサーバーへの接続は、サポートされていません」との接続エラーとなります。

11gのクライアントを指定できればDBに接続できるのではないかと思うのですがVB側でできることはないでしょうか?

[ツリー表示へ]
タイトルRe: Oracleへの接続に関して
記事No16518
投稿日: 2019/12/25(Wed) 14:18
投稿者wanko108
どうやら認識が違ったようです。

ためしに環境変数から12cのPathを削除してみましたが同様のエラーが発生しました。
直接上位のClientを使用しているようです。
(表現方法がわからずこのように書いています)

そもそも作成しているアプリケーション自体が環境変数を参照していないようですがこれを改善する方法はないでしょうか?

[ツリー表示へ]
タイトルRe: Oracleへの接続に関して
記事No16519
投稿日: 2019/12/25(Wed) 18:10
投稿者魔界の仮面弁士
> Clientの11gは9iのDBに接続可能ですが12cでは9iには接続できません。
この表ですね。
https://www.oracle.com/jp/system-requirement/interoperability-support-195844-ja.html

> 11gのクライアントを指定できればDBに接続できるのではないかと思うのですがVB側でできることはないでしょうか?
VB6 アプリの置いてあるフォルダに、11g の InstantClient を side-by-side 配置するとか。
https://www.oracle.com/technetwork/jp/topics/index-099943-ja.html

[ツリー表示へ]
タイトルRe^2: Oracleへの接続に関して
記事No16520
投稿日: 2019/12/25(Wed) 22:20
投稿者wanko108
VB6 アプリの置いてあるフォルダに、11g の InstantClient を side-by-side 配置するとか。
> https://www.oracle.com/technetwork/jp/topics/index-099943-ja.html

ありがとうございます。
この方法は11gのClientをアプリのフォルダに置くだけでよいということでしょうか?
他に何か設定等ありますか?

[ツリー表示へ]
タイトルRe^2: Oracleへの接続に関して 【解決】
記事No16521
投稿日: 2019/12/26(Thu) 09:32
投稿者wanko108
> VB6 アプリの置いてあるフォルダに、11g の InstantClient を side-by-side 配置するとか。

おはようございます。
ご教示ありがとうございました。

EXEおよび開発環境で上記試してみましたがダメでした。


WindowsのデータリンクプロパティでOracle provider for OLE DBを選択して指定のDBに接続しようと試みましたがやはり同じエラーが発生しました。
おそらくWindowsデフォルトのproviderが12cのバージョンになっているようです。

前述のとおりOracleの優先順位は11gです。
他の9iバージョンのDBに接続する、VB6以外で作成されたアプリケーションは、この環境で接続できているようですので、11gのproviderは確実に存在しており、それらのアプリケーションは環境変数のPathに依存していると思われます。

これらのことから、VB6でOracle Provider for OLE DBを使用するときは環境変数ではなくWindowsのデフォルトのバージョンを参照するものと思われます。


もしかするとレジストリレベルで変更が可能かもしれませんがそこを変更できる権限がありませんので諦めます。
もし他に設定できる項目がございましたら後意見等よろしくお願い致します。



【追記】
Microsoft OLE DB Provider for Oracle を使用すると9iのDBに接続が可能でしたのでこちらは環境変数を参照していると思われます。
ですがこのproviderも将来的には削除される予定なので使用するべきではないのでしょう。

hhttps://docs.microsoft.com/ja-jp/sql/ado/guide/appendixes/microsoft-ole-db-provider-for-oracle?view=sql-server-ver15


レジストリ値の変更で接続可能な事を確認しました。
もし行なうとすれば起動時にレジストリ値を変更してDBに接続し即座に元に戻すという方法でしょうか。
ちょっと危険かもしれませんね^^;


【追記】
Oracle provider for OLE DB のProviderにはOraOLEDB.OracleというものとOraOLEDB.Oracle.1というものが存在します。どちらもProviderに指定する事が可能ですが通常は前記の方を使用していると思います。

当社の他システムでも前記の方を使用していることを確認したため、Oracle9iのDBに接続するときはOraOLEDB.Oracle.1のレジストリ値を11gに変更し接続完了後速やかに12cに戻す方法で他システムへの影響なく処理が可能となりました。

同様な問題で悩んでいる方のためにソースを記述したいところですが、安易にレジストリを変更するのは危険ですのでここでは差し控えさせて頂きます。


魔界の仮面弁士様、ご教示ありがとうございました。

[ツリー表示へ]