_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)
{
    try
{
if(m_pConnection==NULL)
AfxMessageBox("数据库正忙,请稍候……"); m_pRecordset.CreateInstance(__uuidof(Recordset));
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
    catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());///显示错误信息
                  Return ?;  ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出
}
return m_pRecordset;
}问题如下:
AfxMessageBox(e.ErrorMessage());///显示错误信息
                  Return ?;  ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出

解决方案 »

  1.   

    什么都不用返回,屏蔽掉return 这一句,就不会退出当前函数。。 系统退出了,那就证明是很严重的错误,不是return能控制的问题。。
      

  2.   

    什么都不反回,系统就会退出.(因为我的数据库是Access)当我手工打开某一个数据表的时候,在VC++再想去打开这个数据,就会出现异常,然后就系统退出.现在我不想系统退出,
      

  3.   

    弹出了对话框吗??? 单步调试一下,看具体是哪条语句后进入了catch。。
      

  4.   

    那你程序用独占方式打开access,不让别人打开就行了。。
      

  5.   

    独占方式打开Access,怎么写代码?
    我是这样打开数据库的
    try
    {
    //创建connection对象
    m_pConnection.CreateInstance("ADODB.Connection");    
    //设置连接字符串
    _bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=EASSON.mdb;";
    //SERVER和UID,PWD的设置根据实际情况来设置
    m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    //捕捉异常
    catch(_com_error e)
    {
    //显示错误信息
    CString temp;
    temp.Format("连接数据库失败:%s",e.ErrorMessage());
    AfxMessageBox(temp);
    return;
    }
      

  6.   

    你直接throw出去,外面在搞定这些问题。
    返回引用的时候的确麻烦啊。
      

  7.   

    _bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=EASSON.mdb;Mode=Share Deny Read|Share Deny Write;Persist Security Info=False";
      

  8.   

    tabby  我这样写之后:
    第一个对话框的提示是:未指定的误.按确定后
    第二个对话框的提示是:Runtime error!按确定后,系统退出
      

  9.   

    try
    {
    //创建connection对象
    m_pConnection.CreateInstance("ADODB.Connection");    
    //设置连接字符串
    _bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=EASSON.mdb;Mode=Share Deny Read|Share Deny Write;Persist Security Info=False";
    //SERVER和UID,PWD的设置根据实际情况来设置
    m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    //捕捉异常
    catch(_com_error e)
    {
    //显示错误信息
    CString temp;
    temp.Format("连接数据库失败:%s",e.ErrorMessage());
    AfxMessageBox(temp);
    return;
    }
    当我手工打开数据库的时候,我再连接数据库,就会提示连接失败,但也会系统退出,可不可不让系统退出???
      

  10.   

    _RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL) 

        try 

    if(m_pConnection==NULL) 
    AfxMessageBox("数据库正忙,请稍候……"); m_pRecordset.CreateInstance(__uuidof(Recordset)); 
            m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), 
    adOpenDynamic,adLockOptimistic,adCmdText); 

        catch(_com_error e) 

    AfxMessageBox(e.ErrorMessage());///显示错误信息 
                      Return ?;  ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出 

    return m_pRecordset; 

    按你上面函数的声明是要返回一个_RecordsetPtr&供调用函数使用的,可是出了异常会就会返回一个错误的指针,如果你把它当正常指针来使用,不崩溃才怪.
    解决办法:
    catch(_com_error e) 

    AfxMessageBox(e.ErrorMessage());///显示错误信息 
                      Return NULL;  ////问题就在这,

    然后在调用个判空,如果为空不要使用返回的_RecordsetPtr&
    例如
    _RecordsetPtr MyPtr
    if(NULL !== (MyPtr = GetRecordSet("select * form a")))
    {
         //此处使用返回的MyPtr

      

  11.   

    不好意思,有笔误 !== 应该是!=
    _RecordsetPtr MyPtr 
    if(NULL != (MyPtr = GetRecordSet("select * form a"))) 

        //此处使用返回的MyPtr 

      

  12.   

    Return NULL;或者是Return VT_NULL;
    编译错误:
    error C2440: 'return' : cannot convert from 'const int' to 'class _com_ptr_t<class _com_IIID<struct _Recordset,&struct __s_GUID _GUID_00000556_0000_0010_8000_00aa006d2ea4> > &'
            A reference that is not to 'const' cannot be bound to a non-lvalue
      

  13.   

    BOOL CADOConn::GetRecordSet(_bstr_t bstrSQL) 

        try 

    if(m_pConnection==NULL) 
    AfxMessageBox("数据库正忙,请稍候……"); m_pRecordset.CreateInstance(__uuidof(Recordset)); 
            m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), 
    adOpenDynamic,adLockOptimistic,adCmdText); 

        catch(_com_error e) 

    AfxMessageBox(e.ErrorMessage());///显示错误信息 
                      Return FALSE;  ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出 

    return TRUE; 
    }改成这样不就行了,调用后判断如果返回TRUE再去使用m_pRecordset