質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

2700閲覧

【ExcelVBA_Oracle ODBC】VBA上でODBC接続にてOracleに接続しようとすると行うと致命的エラーが発生する

beginner_Jiro

総合スコア10

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/08/09 08:34

編集2022/08/09 09:45

お世話になっております。
こちら標題の通りExcelVBAにてOracleに対しODBC接続を行おうとすると
「致命的なエラー」というエラーメッセージが出てしまい接続ができません。
前提条件として下記の内容となっております。

~~~~~~~~~~~~~~~~~~~
OraclecClient
⇒11.2.0
OracleInstantClient
⇒Version 19.16.0.0.0
ODBC Package(Oracle)
⇒instantclient-odbc-nt-19.16.0.0.0dbru.zip(32bit版)
OfficeExcel
⇒32bit版
~~~~~~~~~~~~~~~~~~~

以上になります。また、当件なのですがPCのBit数、ExcelのBit数が一致している同じ条件下のPC
でも無事に接続できるものと上記「致命的なエラー」が発生してしまうPCがあり
原因が解らず困っております。

Microsoft Visual C++ 再頒布可能パッケージについても、エラーが出る端末、エラーが出ない端末それぞれダウンロードしております。
PCによって接続できるものとできないものがありますのでVBA内のコードが間違えていることは
考えにくいと思います。

また、接続できない端末の方では、SQLPlusでは正常にOracleDBに到達しているためにtnsname.oraの表記間違いや、環境変数の間違いは考えにくいと思います。

加えて、ODBCデータソースアドミニレータ画面に関しましてもODBCドライバ構成画面に
突入することは可能となっております。ただ、端末が64bit版であることが影響しているのか
ODBCデータソースアドミニレータのテスト接続を行うとODBCデータソースアドミニレータ画面が終了してしまうためにテストが完了しているかの確認が取れていない状態になります。

端末ごとに挙動が違う為端末間での差異を確認したのですがbit数やclientのバージョン違いなど
がなくどのような影響で繋げていないのかがわかりません。
エラーについても「致命的なエラー」となる状態では根本原因が解らずに困っております。

恐れ入りますがどなたかご回答いただけませんでしょうか。

よろしくお願いいたします。

補足-01

slemntqe様より修正依頼を頂きました。ありがとうございます。
正確にはエラーコードも付属しておりますのそちらも加えて下記に記載させていただきます。
申し訳ございませんでした

「実行時エラー '-2147418113'(8000ffff)':
致命的なエラーです。」

が全文となります。

また、エラーとなる箇所はconnection.openの箇所となっており
connectionのプロパティであるconnectionStringに接続情報の入力が完了した後の部分となります。
接続情報についても記載をしてもよいのですが、接続が行えている端末もありますので
そちらは不要の判断といたしました。

よろしくお願いいたします。

補足-02

KOZ6.0様
matukeso様
から修正依頼をいただきましので追記いたします。

-->>>バージョンが違うクライアントモジュールを入れているということでしょうか?
こちら、その通りでございます。
11.2.0は接続できない端末、できる端末共に共通で導入されております。
OraclecClientを全員のPCに対し19.16に上げてもよいのですが作業量が膨大となるために
現所はこのような状態としております。(つながっている端末があることから環境は合わせたいため)

Oracleサーバーのバージョンは下記になります。
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

slemntqe

2022/08/09 08:39

本当に「致命的なエラー」としか表示されていないのですか?エラー全文を書いて下さい。 また、VBA内のプログラムで「致命的なエラー」と表示している部分はどのような条件になると「致命的なエラー」と表示するようになっていますか?
beginner_Jiro

2022/08/09 08:56

少々省略しておりました。申し訳ございませんでした。 下記に全文を記載させ頂きます。 「実行時エラー '-2147418113'(8000ffff)':  致命的なエラーです。」 また、エラーとなる箇所はconnection openの部分でVBAにてConnectionオブジェクトに対しOpen命令を行っている部分となります。よろしくお願いいたします。
slemntqe

2022/08/09 09:42 編集

質問本文に補足された「connection.open」とコメントされた「connection open」と「Connection」と「Open」は全て同じ意味ですか?大文字小文字やスペースの有無やドットの有無の違いは何ですか? また、私が追記・修正依頼したのは「どのような条件になると」という点です。 例えば、エラーコードで分岐してエラーダイアログを出すタイプであればエラーコードから原因が掴めるという意味です。 もう一度確認して下さい。
matukeso

2022/08/09 09:15

client 11.2とinstant client 19.16を混ぜている理由は何? 19.16のodbc driverが11.2のdllを呼んで死んでるような気がするケド。
beginner_Jiro

2022/08/09 09:18

申し訳ございません。そちらはすべて同じ意味になります。(大文字や小文字の違いはありません)ドットと打とうとしたらスペースが入力されてしまいました。 エラーは確かにダイアログ形式で出現しております。 ただ、特に条件をコードないで記載しているわけではなく、デバッグを行った際に connection.openの部分で実行時エラーとなり先ほど追記させていただいたエラーがエラー全文として 表示されます。 ちなみにですが、こちらVBAを介した状態でのみ発生するのか、それともODBCに問題あるかの切り分けをおこなために、 コード内でエラーハンドリングを行ったこともあります。 こちら、connection.openでエラーが発生した際にOn Error GoToのラベルを使用し ラベル内でconnection.Errors(i).Description とし、connectionオブジェクト内のエラー内容を表示させました。 しかし、エラー内容は変わらず先ほど追記した致命的なエラーと全く同様の文章が出てきてしまいました。
KOZ6.0

2022/08/09 09:21 編集

> OraclecClient > ⇒11.2.0 > OracleInstantClient > ⇒Version 19.16.0.0.0 どういう意味ですか? バージョンが違うクライアントモジュールを入れているということでしょうか? 「そちらはすべて同じ意味になります。」とはどういうことでしょう? あと、Oracle サーバーのバージョンは?
beginner_Jiro

2022/08/09 09:32

KOZ6.0様 matukeso様 修正依頼ありがとうございます。 バージョンが違うクライアントモジュールを入れているということでしょうか? >>こちら、その通りでございます。 Oracleサーバーのバージョンは下記になります。 Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
KOZ6.0

2022/08/09 09:53

サーバーが 19c ということは 19c Client で接続したいということですね。 コマンドプロンプト(office と同じビット数のものを起動してください。)から where oci.dll を実行して、11g client と 19c client どちらが先にヒットしますか? 11g client のものが先にくるようだと、たぶんアウトです。PATH 環境変数を修正し、19c のものが先にくるようにしてください。
beginner_Jiro

2022/08/09 10:00

KOZ6.0様 お世話になっております。こちら下記結果が返ってきましたのでおそらく問題ないかと思います。 C:\instantclient_19_15\oci.dll また11g clientに関してですがこちらはフォルダ内に、odbcに必要なファイル群がそろっていないために 参照できない認識です。(間違っていたらすいません…) もし万が一そちらのODBCを参照しようとしていたとしても、VBAでは「致命的なエラー」ではなく 「dllが見つかりません」のエラーとなる気がするのですがいかがでしょうか、 ちなみにodbc_install.exeはC:\instantclient_19_15フォルダ内にあるものを実施しております。
KOZ6.0

2022/08/09 10:13

>「dllが見つかりません」のエラーとなる気がするのですがいかがでしょうか、 さぁ?バージョン違いのクライアントを入れたことは無いのでわかりません。 ODBC の設定で接続確認はOKなんですか?32bit/64bit の間違いはなかったりしませんか?
beginner_Jiro

2022/08/09 10:19

KOZ6.0様 ありがとうございます。 >>>ODBC の設定で接続確認はOKなんですか? こちらについてですが、ODBCアドミニストレータの画面で接続テストを行おうとすると 画面が終了してしまい接続を確認することができません。(おそらく、64bitマシンで32bitのODBCアドミニストレータを実施していることが原因かと思われます。) もしも、上記以外で「ODBC の設定で接続確認」を実施する方法があればご教授いただけますでしょうか。 >>>32bit/64bit の間違いはなかったりしませんか? こちらは確実に確認いたしましたので問題ない認識です。
KOZ6.0

2022/08/09 10:38

>画面が終了してしまい接続を確認することができません。(おそらく、64bitマシンで32bitのODBCアドミニストレータを実施していることが原因かと思われます。) 環境が正しく設定されていれば、64bit マシンでも 32bit ODBC アドミニストレータは動作します。 ここが通らないとどうにもならないですね。さて、何が原因なのやら・・・
beginner_Jiro

2022/08/09 10:50

KOZ6.0様 ありがとうございます。 >>>環境が正しく設定されていれば、64bit マシンでも 32bit ODBC アドミニストレータは動作します。 こちらは、正常に接続できている端末もあるので私も同様の認識です。 ただ、どのマシンでも64bitマシンにて32bit ODBC アドミニストレータ内の「接続テスト」だけが 機能していない状態です。ネットのどの記事も見てもそのような事象が発生している方がいる見たいですが具体的な疎通テストについての手順は示されておりませんでした。 32bit ODBC アドミニストレータ上から接続確認を行う方法は「接続テスト」ボタン以外になにかありますのでしょうか。一般的に皆さんは64bit マシンでも 32bit ODBC の疎通テストをどのように行っているのでしょうか...
KOZ6.0

2022/08/09 11:11

>32bit ODBC アドミニストレータ上から接続確認を行う方法は「接続テスト」ボタン以外になにかありますのでしょうか。 普通に接続テストのボタンから起動しているだけです。 何かミスしている可能性が高いので、OS のバージョンやセットアップ手順を見直してください。
guest

回答1

0

質問は修正できます。Oracle Databaseのバージョンは?
Windows10で古いバージョンのOracleデータベースにODBC接続する、32bit 64bit 共存させる
って試みはあります。

Oracle Database, Oracle Client for Windows ソフトウェア要件 で動作保証されている組み合わせを用意しましょう。

投稿2022/08/09 08:59

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner_Jiro

2022/08/09 09:39

Orlofsky様 ご回答ありがとうございます。 こちら、共存について自身の環境で試してみましたが、Excelのバージョンが32bitバージョンだった場合に 64bitのODBCドライバを追加しても 「システムエラーコード 126:指定されたモジュールが見つかりません。(C:\instantclient_19_15\SQORAS32.DLL)のために,Oracle in instantclient_19_15 ODBC ドライバーのセットアッププログラムを読み込むことができません。」 とのエラーとなりVBA上で64bitのODBCを読みに行くことはありませんでした。 よってbit数等の問題ではないかと思われます。 また、Oracle Database, Oracle Client for Windows ソフトウェア要件についても動作保証内であることは確認済みです。
Orlofsky

2022/08/09 19:59

slemntqeさん 指摘ありがとうございます。 なぜかURLの修正ができません。 teratail のバグらしいです。
Orlofsky

2022/08/09 20:05

beginner_Jiroさん 10年以上前はWindows Update でODBC接続がエラーになったことを思い出しました。 サポート契約が有効ならオラクル・サポートに問い合わせてみては?サポート契約なしで使えるほどOracle Databaseは甘くないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問