如果直接运行一切正常,用加断点或者用F5运行就在connection->open处出错!!
是不是很奇怪!
该测试程序是基于对话框的,除了这点代码(还有ado的导入部分),什么也没有!

解决方案 »

  1.   

    式不是路径错了。Dao*recorderdet呢?
      

  2.   

    我用的是Ado的智能指针,是这样定义的:
    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordset;
      

  3.   

    再再看是不是連結字串錯了.可用下面的代碼獲得連結字串,再調用Open,試試看.
    _bstr_t bstr="";
    HRESULT hr;
    oledb::IDataSourceLocatorPtr p_IDSL=NULL;
    _ConnectionPtr p_conn=NULL;
    try
    {
    hr=p_IDSL.CreateInstance(__uuidof(oledb::DataLinks));
    if(FAILED(hr))
    _com_issue_error(hr);
    p_conn=p_IDSL->PromptNew();
    if(NULL!=p_conn)
                          bstr=p_conn->ConnectionString ;
    } catch(_com_error& e)
    {
    ::MessageBox(this->m_hWnd,e.ErrorMessage (),"Error",MB_OK);
    }
             CString DBConnectStr=(char*)bstr;
             .......
    可能要在stdafx.h中加以下代碼
    #include <comdef.h>
    #import "E:\program files\common files\system\ole db\oledb32.dll" rename_namespace("oledb")
      

  4.   

    我直接用的ODBC,如果连接字串错了,直接运行也应该连不上呀
    现在的情况是:直接运行没错,断点调试连不上
      

  5.   

    它們的連結字串好像有點差別的,下面是一個OLE DB連結字串
    Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\WINDOWS\Desktop\db1.mdb
      

  6.   

    已经初始化COM了。
    系统错误信息:Unhandled exception in test.exe(KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.
    如果用try...catch捕获,错误信息是:未指定的错误!
    我的环境是win2000 server + vc6
      

  7.   

    你的m_pConnection->Open()的参数不对
    HRESULT hr;
    if(SUCCEEDED(hr))
    {
         hr=m_pConnection->Open(_bstr_t(L"Provider=Microsoft.Jet.OLEDB.3.51;Data    Source=C:\\My Documents\\machine\\Machine97.mdb"),_bstr_t(L""),_bstr_t(L""),adModeUnknown);
    if(SUCCEEDED(hr))
    {
        m_IsConnectionOpen=TRUE;
    }
    else
    {
        AfxMessageBox("连接数据库失败!");//,"提示"
        return FALSE;
    }
    }
    else
    {
    AfxMessageBox("连接数据库失败!");//,"提示"
    return FALSE;
    }
    可以连通ACCESS97数据库,2000的只要把OLEDB.3.51改为OLEDB.4.0
      

  8.   

    把catch部分写成如下形式:
    catch(_com_error& e)
    {
       CString Error=e.ErrorMessage();
       _bstr_t bstrDescription=e.Description();
       AfxMessageBox(Error+(LPCTSTR)bstrDescription);
    }
    再运行一下,可能额外的错误信息对你有帮助。
      

  9.   

    to soloz: 这里必须用oledb模式嘛?我用的是ado,连接子串应该没有错吧(而且能连上数据库)