_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 ?; ////问题就在这,当访问失败后反回一个什么值?才不会使系统退出
解决方案 »
- 链表操作中断,如何处理?
- VC转定义问题
- 子控件闪烁的问题?(问题较长)
- 怎么自动安装自己写好的协议呢?急高分求解
- IP控见的SetAddress函数!晕等!
- 请问怎么样才能改变CDialogBar的工具栏大小和位置呢?
- OpenGL场景除了用对话框做RC外,还可用PICTURE等其它控件吗?如何使用呢?
- 在线等待, 关于显示鼠标提示信息问题
- ShellExecute的第一个参数该如何获得?
- 我想用ON_COMMAND_RANGE宏,但几个控件的ID值不连续怎么办?
- 大家有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