VC2008でOracleDB接続エラー – プログラミング – Home

VC2008でOracleDB接続エラ...
 
通知
すべてクリア

[解決済] VC2008でOracleDB接続エラー


あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

はじめまして。
ネットで色々調べたのですが、見つけられずコチラに書かせて頂きます。

やりたいことは、VisualStudio2008(C++)で
Windows2008ServerにあるOracleDb11gのテーブルを
Windows7(64ビット機)の端末からアクセスし、編集したいのです。

WindowsXP(32ビット機)端末では、

 > #define INITGUID
 > #import C:\Program Files\Common Files\System\ADO\msado15.dll
rename_namespace(ADOCG) rename(EOF, adoEOF)
 > using namespace ADOCG;
 > #include icrsint.h

と定義(?)して、

 > HRESULT hr;
 > _ConnectionPtr m_pConnection;
 >
 > hr = m_pConnection.CreateInstance( __uuidof( Connection ) );
 > if( SUCCEEDED(hr) ){
 > hr = m_pConnection->Open(
 > (LFile Name=C:\\system.udl;),
 > (L"),
 > (L"),
 > adModeUnknown);

を実行すると正常に接続でき、テーブルの編集もできます。

Windows7(64ビット機)端末では、「msado15.dll」のファイルパスが違うので、

 > #import C:\Program Files (x86)\Common Files\System\ado\msado15.dll
rename_namespace(ADOCG) rename(EOF, adoEOF)

と修正して実行してみると、「クラスが登録されていません」のエラーダイアログが表
示されます。
エラー箇所は「m_pConnection->Open(...)」です。
「C:\\system.udl」自体の接続確認は正常にできているのですが。。

32ビット機と64ビット機の違いに何か問題があるのでしょうか。。
宜しくお願い致します。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

その msado15.dll は 32bit 用ですよね。
作っているアプリは 64bit 用ですか?
64bit アプリで 32bit DLL を読み込むことはできません。
アプリを 32bit 版にするか、64bit 版の DLL を用意する必要があります。


返信引用
あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

ご返答ありがとうございます!

>作っているアプリは 64bit 用ですか?
64bit用です。

64bit版のDLLは、
「C:\Program Files (x86)\Common Files\System\ado\msado15.dll」
かと思っていますが、違ってましたか?


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

x86フォルダの方は通常32bit版のプログラムが格納されるはずです。
64bit版のDLLは
C:\Program Files\Common Files\System\ado\msado15.dll
というのがありませんか?


返信引用
あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

x86フォルダではないんですね。

「C:\Program Files\Common Files\System\ado\msado15.dll」
がありましたので、コチラに置き換えて実行してみましたが
結果は同じエラーでした。。

「64bit」と「_ConnectionPtr」や「CreateInstance」で検索していますが、
全くヒットしないです…。
64ビット機でのDB接続は、また違う方法なのでしょうか??


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

x86でなくX64・IA64では?
また、64BIT版は、INTEL版とAMD版とインストール方法が違う場合がありましたよね。
ADOもその可能性はないですか?
あと、ぐぐっていると、64BIT版は、ADO_NET2.0以降対応って記事もありました。
もう少し、調べてみてはいかがでしょうか?


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

エラーの発生箇所を考えるとADOというよりデータプロバイダの方の問題かもという気が
します。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> __uuidof( Connection )

がどういう値になるかをまず調べてください。

そして、レジストリの HKEY_CLASSES_ROOT \ CLSID 下にそれがなければ、
RegSvr32.exe msado15.dll
とやって、DLL を登録してみてください。


返信引用
あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

返事が遅れて申し訳ありません。。

>>__uuidof( Connection )
>がどういう値になるかをまず調べてください。

デバックして「>>__uuidof( Connection )」見ると
「エラーです:シンボル Connectionが見つかりません」
と出ます。
ちなみに
「m_pConnection」を見ると、アドレスのような値です。
「hr」を見ると、「S_OK」です。

値を見るというのは、こういう方法で良いですか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

えーと。

アドバイスに関してどうしてそういうアドバイスを受けたのか
まで考えてみてください。

__uuidof( Connection )は何を得るマクロなんでしょう?

CreateInstanceの引数として引き渡している意味は何でしょう?

この辺を理解すれば、自分が受けたアドバイスの意味がある程度わかると思います。


返信引用
あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

system.udlのプロバイダーは「Oracle Provider for OLE DB」で
OracleDBへの接続時に、try~catchで確認したところ、
「プロバイダーが見つかりません。正しくインストールされていない可能性がありま
す。」
というエラーでした。

試しで、ODBCを設定し
system.udlのプロバイダーを「Microsoft OLE DB Provider for ODBC Drivers」で確認
してみると
「指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が
含まれています」
というエラーでした。

接続方法というよりも、oracleDB自体に何か設定が必要なのでしょうか?


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

Oracle Client 及び Oracle Provider for OLE DB は64bit版ですか?


返信引用
あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

Oracle Clientは「OracleClient11g_home1」の64bit版で、DBも64bit版です。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

データプロバイダーの方も64bitでアクセスできないなら
実はアプリ側が32bitのままという可能性はないでしょうか。

VS2008の既定の設定では64ビット機でも32bitのバイナリを吐きますが、
プラットフォームをx64に変更してからコンパイルしていますか?

ちなみに実行中のアプリケーションが32bitか64bitかは
タスクマネージャーのプロセスタブを見ればわかります。


返信引用
あゆしお
 あゆしお
(@あゆしお)
ゲスト
結合: 14年前
投稿: 11
Topic starter  

> プラットフォームをx64に変更してからコンパイルしていますか?

!!

ご指摘のとおりに実行したらDB接続が成功しました!

64bit機にインストールされたVisualStudio2008でコンパイルすれば
64bit版のプロセスが生成されるとばかり思っていました。

大変助かりました。
subaru様はじめ、返信していただいた方々ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました