程序连接到数据库正常,往combo里面添加数据正常,在数据集release之后如果添加数据集=NULL则出现错误,如果不添加,到return TRUE时出现同样的错误,错误如下
unhandled exception in ff.exe:0x0000005:Access Violation程序代码如下:
AfxOleInit();
m_Connection.CreateInstance(__uuidof(Connection));
try
{
m_Connection->Open("Provider=SQLOLEDB.1;Data Source=fxy;Database=LFGL;uid=sa;pwd=","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("连接出错!");
return FALSE;
}
_RecordsetPtr m_Rs;
m_Rs.CreateInstance(__uuidof(Recordset));
try
{
m_Rs->Open("select * from sysobjects where xtype='u'",m_Connection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("取数据出错!");
return FALSE;
}
_variant_t var;
CString strName;
while(!m_Rs->adoEOF)
{
var=m_Rs->GetCollect("name");
if(var.vt!=VT_NULL)
strName=(LPCTSTR)_bstr_t(var);
m_Table.AddString(strName);
m_Rs->MoveNext();
}
try
{
m_Rs->Close();
m_Rs->Release();
//m_Rs=NULL;//  
}
catch (_com_error e) {
AfxMessageBox("hahah");
return FALSE;
}

解决方案 »

  1.   

    m_Rs->Close();
    m_Rs->Release();//错误,要么不要这句,要么m_Rs.Release();
      

  2.   

    ->Release()为什么不能在这里用呀?昨天才开始用vc6.0
      

  3.   

    谢谢 vieri_ch,已经解决,不过还是上面的问题,能留下QQ吗?我想如果可以的话能够随时请教.
      

  4.   

    ->Release()//是指针所指向ADO对象recordset实例的Release方法
    .Release()//智能指针对象的Release()方法,用来释放所包装的ADO实例对象的引用计数,当计数为0的时候,COM环境会自动释放ADO实例对象的资源ADO对象在这里实际就是一些COM的接口指针,这些指针的Release方法是IUnknow接口要求实现的。但不应当由调用方直接调用_RecordsetPtr是对ADO对象的接口指针进行了再一次的包装,其Release方法含义不同,是智能指针包装类为了管理引用计数的而实现的。