OLE DB のエラーメッセージ取得方法 – プログラミング – Home

OLE DB のエラーメッセージ取得方...
 
通知
すべてクリア

[解決済] OLE DB のエラーメッセージ取得方法


bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
Topic starter  

OLE DB コンシューマ テンプレートクラス(CDataSource, CSession, CAccessor, ...)
を使用したデータベース処理を行うプロジェクトを作成しております。

処理自体は完成したのですが、分からないことが出てきました。

WindowsAPIを使用したアプリケーションならば、エラー発生時はGetLastError()を
呼び出して得られたコードをFormatMessage()で変換すればエラーメッセージが取得
できます。
(例) ERROR_FILE_NOT_FOUND(= 2)なら、
「指定されたファイルが見つかりません。」

同様にOLE DBでもエラーメッセージを取得したいのですが、ざっと探した限りで
取得方法が見つかりません。
ご存じの方がいましたら、よろしくお願いいたします。


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

HRESULTを返却される。
ということでいいんですかね?

http://msdn.microsoft.com/ja-jp/library/f9k758da%28v=vs.90%29.aspx
とか。
HRESULT自体はwinerror.hにある程度記述されています。
追加のエラーとかある場合は関連するヘッダファイルに書かれているんじゃないでしょうか?

HRESULTからメッセージに変換したい。というのであれば…検索してみると
http://blog.firefly-vj.net/blog/2008/05/11/Get-errmsg-from-hresult/
とか見つかります。
そんなワケで、そのままFormatMessage()に突っ込んでみてはどうでしょうか?

http://msdn.microsoft.com/ja-jp/library/cc428939.aspx
FORMAT_MESSAGE_FROM_HMODULEを指定してモジュールハンドルを指定する必要がある…かも
知れませんが。
# OLE DBで使用しているDLLなりを指定する必要があるかも知れない…と。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
Topic starter  

HRESULT値もFormatMessage()で変換できるんですね。
早速やってみました。

CDataSource::OpenFromInitializationString()
でわざと接続文字列を間違えてエラーしてみた結果、
HRESULT値が E_FAIL でした。

うーん、接続失敗したという情報以上のものではないですねぇ。

もう少し詳しい情報が得られる方法がないか調査してみます(^^)


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

> もう少し詳しい情報が得られる方法がないか調査してみます(^^)
ODBC_SDKのAPIでいう「SQLError」みたいな関数はないですか。
結構詳しいです。
アクセスだと確か、日本語です。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
Topic starter  

ありがとうございます。

探してみたら、CDBErrorInfoというクラスが見つかりました。
もしかすると、これが答なのかもしれません。

引き続き調査してみます。


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

補足、
 ODBCの場合、基本的な接続エラー等は別として、エラーは確か各DBに
依存していたと思います。

アクセスの場合は日本語、オラクルの場合はエラー番号だったと思います。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
Topic starter  

皆さん、ありがとうございました。

CDBErrorInfo::GetAllErrorInfo()で、無事、詳細メッセージが得られました。

コードは長くなるので省略しますが、
要は atldbcli.h の AtlTraceErrorRecords() 内のコードの丸写しです。

以下のような初期化文字列を与えて、
Provider = Microsoft.Jet.OLEDB.4.0; Data Source = AAA.mdb

以下のようなエラーコードが得られます。
「ファイル 'AAA.mdb' が見つかりませんでした。」


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
Topic starter  

クローズ忘れました(^-^;


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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