none
ADO例外で補足される_com_errorのエラーについて RRS feed

  • 質問

  • 御世話になっております。

    現在、VC++でADOを使用したPG開発を行っております。

    当該PGでは、SQL文実行時に例外が発生した場合にエラーの種類によって処理を制御する必要があり、ADO例外として補足される

    _com_errorオブジェクトから取得できるエラーコード(ErrorもしくはWCode関数により取得)の値を判断して処理を分岐することを考えております。

    ただ、ADOエラーやSQLServerのシステムエラーは見つかるのですが、COMに関するエラーコード一覧は見つかりませんでした。

    _comm_errorのErrorやWCodeで取得できるコードをADOエラーやSQLServerのエラーコードと照らし合わせても見つからないので、_comm_errorから取得できるエラーコードとは関係ないのでしょうか?

    であれば、_comm_errorで取得できるエラーコードはSQLServerが拡張したCOMエラーコードのような気がしますが、このエラーコードの一覧は無いのでしょうか。

    ちなみに、以下の例外の場合のコードは以下のようでした。

    何か情報をご存知の方がおられましたら、宜しく御願いいたします。

    ・一意制約(WCode:3092/Error:0x80040E14)

    ・算術オーバーフロー(WCode:3159/Error:0x80040E57)

    ■開発環境

    OS:Windows Server 2012

    開発言語:Visual C++ 2013

    DB:SQL Server 2014

    2016年9月13日 2:51

すべての返信

  • 参考までに得られたHRESULT(_com_error::Error)は何でしょうか?

    Common HRESULT Valuesにほんの少し載っていました。後はヘッダーファイルを見るくらいしかないかと。

    ちなみにVisual C++ 2013ですと、_com_ptr_tの他にATL::CComPtrやMicrosoft::WRL::ComPtrなんかも用意されています。

    2016年9月13日 4:15
  • 御回答有難うございます。

    本文にも記しておりましたが、ちょっと分かりにくかったですね。失礼致しました。

    _com_error::Error関数で取得した値は以下のようになっておりました。

    このような情報は、やはりヘッダファイルを見るしか情報がないのでしょうね、、、

    ・一意制約:0x80040E14

    ・算術オーバーフロー:0x80040E57

    2016年9月13日 4:59
  • ADOのドライバは何ですか?

    「SQL Server Native Client OLEDB」(SQLNCLI等)ですか?
    ODBCドライバ経由でのSQL Server ODBCだったりします?


    jzkey

    2016年9月14日 0:02
  • ドライバはODBC経由のもの(ODBC Driver 11 for SQL Server)を使用しております。

    2016年9月14日 4:58
  • 0x80040E14は、DB_E_ERRORSINCOMMANDで、「なにかエラーがあるよ」程度のエラーコードですね。
    https://msdn.microsoft.com/ja-jp/library/cc431524.aspx あたりにある程度は一覧があります(ADOCEですが)

    本当のSQLServerのエラーコード(UNIQUE INDEXの重複のため挿入不可、等)は、例外を捕まえたあと、ADOConnectionのErrorsコレクションから取得する必要があります。
    https://msdn.microsoft.com/ja-jp/library/cc407852.aspx


    jzkey

    2016年9月14日 7:40