我用如下语句删除数据库中符合条件的数据,可是指针却关闭不了,那怎么办呢?  CString  m_Str;
  int n = 10;
  m_Str.format("Delete mytable where %s = %d","myid",n);
  _bstr_t sqlstr = m_Str;
   
  m_pRecordSet->open(sqlstr ,_variant_t((IDispatch *)m_pConnection,true), \
adOpenKeyset,  adLockOptimistic, adCmdText);  这样可以删除数据,但是下面执行就出了问题;
  m_pRecordSet->Close();或者m_pRecordSet->Release();
  都会出错,请问原因是什么;

解决方案 »

  1.   


    if(m_pRecordSet->State)
            m_pRecordSet->Close();
    m_pRecordSet= NULL;
      

  2.   

    m_pRecordset->Close(); //注意!!!不要多次关闭!!!!否则会出错
    m_pConnection->Close();//创建了则关
    m_pRecordset = NULL;
    m_pConnection = NULL;
      

  3.   

    不关闭,如果别的函数使用 m_pRecordset指针,不是会出错了吗?
    难道该指针的关闭是在析构函数中吗?也就是说:CMyclass::~CMyclass
    {
        .........    m_pRecordset->close();
        m_pConnection->close();
    }
      

  4.   

    在ExitInstance中关闭 if(m_pConnection->State)
    m_pConnection->Close();
              m_pConnection = NULL;
      

  5.   

    要知道你是使用动作命令delete from  来操作数据库,而它本身是不产生记录集的怎么可以使用m_pRecordset.close()对记录集进行关闭呢?既然没有打开,也就不能关闭。
      

  6.   

    建议你不要使用RecordSet来打开那些不会产生结果集的操作(delete ,update ,insert),而使用Command对象,实际上,建议你所有的数据库SQL语句的执行都使用command对象,可以避免很多麻烦
      

  7.   

    if(...)
    {
    close()
    release()
    }
    才是安全的用法