0


顧客に配布されたソフトウェアのメンテナンスを行う必要があります。
このソフトウェアはデータベースを使用しており、コンピューターでデバッグ セッションを実行するには、SQL Server 2008 R2 と、このソフトウェアで使用される 2 つのデータベース (MyData と MyRecord) をインストールする必要がありました。
設定(ログイン、データベースのユーザーへのマッピング)に問題がありましたが、なんとかそれらの問題を解決しました。
今、ソフトウェアを実行しようとしていますが、初期化中にレコードセットを開こうとするとクラッシュします。

最初に、データベースに接続するために次のことを行います。

::CoInitialize(NULL);
try   
{   
    HRESULT hr = pConnection.CreateInstance("ADODB.Connection");   
    if (SUCCEEDED(hr))   
    {   
        pConnection->ConnectionTimeout = 0;   
        CString strConnect;
        strConnect.Format(_T("Data Source=MyRecord;uid=sa;pwd=sa123456;"));
        hr = pConnection->Open((_bstr_t)strConnect,"","", -1);
    }   
}

pConnection を次のように定義します。

_ConnectionPtr pConnection;

その後、次のコードを使用して、データベース「MyRecord」からデータを読み取ろうとしています。

CString sqlQuery = _T("select * from 通道1设置参数表");
try
{
    pRecordset.CreateInstance(_uuidof(Recordset));
    pRecordset->Open(_bstr_t(sqlQuery ),pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
} 
catch(_com_error   *e)  
{  
    AfxMessageBox(e->Description());   
}  

pRecordSet を次のように定義します。

_RecordsetPtr pRecordset;

「pRecordset->Open(...)」行を実行すると、msado15.tli ファイルの関数 Recordset15::Open(...) でソフトウェアがクラッシュします。
この Recordset15::Open 関数では、raw_Open(...) 関数が DB_E_NOTABLE を返します。
ただし、テーブル dbo.通道 1 設定パラメーター表が MyRecord データベースに存在することは確かです。

エラーは次のとおりです。

エラーメッセージ

問題が SQL サーバーの構成にあるのか、コードにあるのかわかりません。
このコードは顧客の PC で完全に機能するため、構成の問題を解決する必要があります。前もって感謝します !!

4

2 に答える 2

0

このデータベースの ODBC コネクタで、[既定のデータベースを変更する] の設定が MyRecord データベースに設定されていませんでした。
チェックボックスにチェックを入れ、データベースを選択すると、正しく機能するようになりました。

于 2012-09-12T06:47:59.117 に答える
0

catch ステートメントは catch(_com_error & e) である必要があります

MFC はポインターによって例外をスローすることがよくありますが、_com_error は参照です。

于 2012-09-12T06:48:56.480 に答える