我使用m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);查询数据库,
VC编译没问题,可每次执行程序时,总是弹出一个 Rumtime Error! 错误,这是怎么回事?

解决方案 »

  1.   

    没有啊!用command 方法也是出现这样的错误
      

  2.   

    前面用m_pConnection->Open("....);连接数据库都没有错,就是m_pRecordset->Open("..);查询时出错了.
      

  3.   

    我用过的一个函数,仅供参考。
    BOOL CADORecordset::Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec, int nOption)
    {
    Close();

    if(strcmp(lpstrExec, _T("")) != 0)
    m_strQuery = lpstrExec;ASSERT(!m_strQuery.IsEmpty());if(m_pConnection == NULL)
    m_pConnection = mpdb;m_strQuery.TrimLeft();
    BOOL bIsSelect = m_strQuery.Mid(0, strlen("Select ")).CompareNoCase("select ") == 0 && nOption == openUnknown;try
    {
    m_pRecordset->CursorType = adOpenStatic;
    m_pRecordset->CursorLocation = adUseClient;
    if(bIsSelect || nOption == openQuery || nOption == openUnknown)
    m_pRecordset->Open((LPCSTR)m_strQuery, _variant_t((IDispatch*mpdb, TRUE), adOpenStatic, adLockOptimistic, adCmdUnknown);
    else if(nOption == openTable)
    m_pRecordset->Open((LPCSTR)m_strQuery, _variant_t((IDispatch*)mpdb, TRUE), adOpenKeyset, adLockOptimistic, adCmdTable);
    else if(nOption == openStoredProc)
    {
    m_pCmd->ActiveConnection = mpdb;
    m_pCmd->CommandText = _bstr_t(m_strQuery);
    m_pCmd->CommandType = adCmdStoredProc;
    m_pConnection->CursorLocation = adUseClient;

    m_pRecordset = m_pCmd->Execute(NULL, NULL, adCmdText);
    }
    else
    {
    TRACE( "Unknown parameter. %d", nOption);
    return FALSE;
    }
    }
    catch(_com_error &e)
    {
    dump_com_error(e);
    return FALSE;
    }return m_pRecordset != NULL;
    }
      

  4.   

    在你open之前,判断m_pRecordset是否有效还有,在编译的时候,是否有warning出现
      

  5.   

    是不是忘了初始化m_pRecordset,或者是m_pRecordset在前面已经open了。如果已经open了没close的时候是不能在open的
      

  6.   

    我前面用
    HRESULT hr=m_pRecordset.CreateInstance("ADODB.Recordset");
    if(SUCCEEDED(hr))
    {
    AfxMessageBox("asdf");
    m_pRecordset->Close();//1
    ....
    }
    进行判断,确实运行到1就出错,可能真的是m_pRecordset无效,但为什么SUCCEEDED(hr)
    是真的呢?
      

  7.   

    to: greatest(成吉思汗) 
    请问m_pRecordset要怎么初始化?
      

  8.   

    初始化:
    m_pRecordset.CreateInstance(__uuidof(Recordset));
      

  9.   

    推荐你一个经典的ADO类,保证你用ADO不在有困难:)
    http://www.codeproject.com/database/caaadoclass1.asp