_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 ?; ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出
{
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 ?; ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出
解决方案 »
- 定时器中声明变量的问题
- MFC监测IE控件消息
- 删除等高线上的点,请教高手!!!
- 关于put_innerHTML用法的一点疑问(关于动态修改网页内容的疑问)
- 一个关于鼠标的很简单,但问了N个人却没人会的问题。
- 谁知道QQ的原理,我想在局域实现它,该如何下手.清高手赐教.
- 怎么在网页中动态得到Windows文件夹的路径??
- 怎样在代码中让WINDOWS重新启动并进入DOS直接运行一个批处理文件?
- invoke 和 call 有什么区别?不都是调用吗?
- 如何从CView类访问CFormView类的成员对象
- 大家有MyDetective按键侦测程序的代码吗?就是监测鼠标及键盘的所有按下次数。
- Visual studio 2008 Feature Pack生成的MFC程序,标题字体被改
我是这样打开数据库的
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;
}
返回引用的时候的确麻烦啊。
第一个对话框的提示是:未指定的误.按确定后
第二个对话框的提示是:Runtime error!按确定后,系统退出
{
//创建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;
}
当我手工打开数据库的时候,我再连接数据库,就会提示连接失败,但也会系统退出,可不可不让系统退出???
{
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
}
_RecordsetPtr MyPtr
if(NULL != (MyPtr = GetRecordSet("select * form a")))
{
//此处使用返回的MyPtr
}
编译错误:
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
{
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