我用的是sqlserver2000,为什么我的Rs访问GetEditMode()的时候老是出下面这个错误呢?
{"Unknown error 0x800A0BCD"}

解决方案 »

  1.   

    是这样的,我打开一个记录集,等我对这个记录集操作完成以后我要关闭这个记录集。在关闭的时候我要调用GetEditMode()看看当前这个记录集是不是还有编辑或者增加的操作没有完成,如果都完成了就关闭,如果还有动作没有完成就先结束了那个编辑或者增加的动作再关闭。现在就是在我调用GetEditMode查看当前记录集的动作的时候出上面的错误。不知为何。
      

  2.   

    没有相关代码的话,怎么知道什么出错了呢。把出错的地方贴一下吧。
    正常调用GetEditMode是不会有错误的,我想你是不是已经把记录集Close了再调用GetEditMode,这样就会出错,你可以在GetEditMode前一句用IsOpen()看看记录集是不是打开的。
      

  3.   

    void CAdoRecordSet::Close()
    {
    try
    {
    if (m_pRecordset != NULL && m_pRecordset->State != adStateClosed)
    {
    if (GetEditMode() != adEditNone) CancelUpdate();
    m_pRecordset->Close();
    }
    }
    catch (const _com_error& e)
    {

    }
    }
    EditModeEnum CAdoRecordSet::GetEditMode()
    {
    ASSERT(m_pRecordset != NULL);
    try
    {
    if (m_pRecordset != NULL) 
    {
    return m_pRecordset->GetEditMode();
    }
    }
    catch (_com_error e)
    {
    //这里出错,而且出错的errormessage是空字符串。
    CString str=e.ErrorMessage();
    return adEditNone;

    return adEditNone; 
    }
      

  4.   

    改成这样看看
    EditModeEnum CAdoRecordSet::GetEditMode()
    {
    ASSERT(m_pRecordset != NULL);
    try
    {
    if (m_pRecordset != NULL && m_pRecordset->IsOpen()) 
    {
    return m_pRecordset->GetEditMode();
    }
    }
    catch (_com_error e)
    {
    //这里出错,而且出错的errormessage是空字符串。
    CString str=e.ErrorMessage();
    return adEditNone;

    return adEditNone; 
    }
      

  5.   

    m_pRecordset->IsOpen()没哟这个方法吧?
      

  6.   

    哦,你用的是ADO啊,那就改成m_pRecordset->State == adStateOpen
      

  7.   

    不用吧,前面已经判断了阿在void CAdoRecordSet::Close()里
    if (m_pRecordset != NULL && m_pRecordset->State != adStateClosed)
      

  8.   

    你不会只在那里调用了GetEditMode吧,我怀疑是别的地方Colse了记录集,然后又调用GetEditMode函数,不妨一试?
      

  9.   

    1.stdafx.h中加入
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 
    2。app文件的InitInstance中加入
    if(S_OK!=OleInitialize(NULL))  //或者CoInitialize()
    {
    AfxMessageBox("初始化COM组件库错误");
    }
    下面就是数据库操作
    _ConnectionPtr pConn;
    _RecordsetPtr  pRs;
    CString strSQL;
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation=adUseClient;
    strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
    pConn->Open(_bstr_t(strSQL),"","",-1);pRs.CreateInstance(__uuidof(Recordset));
    pRs->CursorLocation=adUseClient;
    pRs->PutActiveConnection(pConn.GetInterfacePtr());pRs1.CreateInstance(__uuidof(Recordset));
    pRs1->CursorLocation=adUseClient;
    pRs1->PutActiveConnection(pConn.GetInterfacePtr());strSQL="select * from catalog order by cataid";
    pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
      

  10.   

    我的是Access 2000,出现的问题是一样的。
      

  11.   

    估计代码出在这一段:
    while(!recordset->AdoEOF())

       recordset->MoveNext();
    } // recordset.MoveFirst();
             将上面的一句加上去就不会出错了。
      

  12.   

    GetEditMode() != adEditNone