在VC6中同样方法生成并编译的程序,可以打开数据库,没有任何问题,但VS2005下怎么就不行了呢?我用断点找到if (FAILED(hr))总是为真:
函数如下:
HRESULT OpenDataSource()
{
CDataSource _db;
HRESULT hr;
//#error Security Issue: The connection string may contain a password
// 此连接字符串中可能包含明文密码和/或其他重要
// 信息。请在查看完此连接字符串并找到所有与安全
// 有关的问题后移除 #error。可能需要将此密码存
// 储为其他格式或使用其他的用户身份验证。
hr = _db.OpenFromInitializationString(L"Provider=MSDASQL.1;Persist Security Info=True;Data Source=su;Extended Properties=\"DSN=su;DBQ=E:\\SoftExercise\\20080830\\su;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\";Initial Catalog=E:\\SoftExercise\\20080830\\su");
if (FAILED(hr))
{
#ifdef _DEBUG
AtlTraceErrorRecords(hr);
#endif
return hr;
}
return m_session.Open(_db); }

解决方案 »

  1.   

    _db是自动生成的,我都没有东过啊!!!
    我用的是ODBC数据源,就是那个OLEDB Provider FOR ODBC Driver的那个,之前我已经在DNS上设置了一个ACCESS数据库Cnews类是自动生成(数据库的)类,我给CMyDlg类添加了一个Cnews类型的m_ImSet变量
    然后我在:
    CKTest038Dlg::CKTest038Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CKTest038Dlg::IDD, pParent)
    {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_ImSet.OpenAll();
    //在这里出错了,Release时在MoveFirst函数的hr = m_spRowset->RestartPosition(NULL);处中断,Debug后提示如下图:
            m_ImSet.MoveFirst();
    }
      

  2.   

    看这个没用,用try/catch捕获_com_error错误看信息。
      

  3.   

    这个看起来像是断言ASSERT发出的错误把
    说明本来p应该不能为零的,结果p为空,所以某个成员函数调用失败?