CDatabase* m_pDB;
strConnect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=F:\\VC\\test\\v2\\disk.mdb;";m_pDB = new CDatabase();
if( m_pDB->OpenEx( _T(strConnect) , CDatabase::noOdbcDialog) )
{
m_isDBConnected = true;

}
else
{
return -1;
}
CRecordset* pRS = new CRecordset(m_pDB);
pRS->m_pDatabase->ExecuteSQL("select * from UserInfo");
CString MSG;
MSG.Format("there are %d records", pRS->GetRecordCount());
MessageBox(MSG);
delete pRS;
return 1;执行到 
MSG.Format("there are %d records", pRS->GetRecordCount());
就出错了

解决方案 »

  1.   

    还是不对呀。
    加了pRS->MoveLast()后就在这句出错了
      

  2.   

    pRS->m_pDatabase->ExecuteSQL("select * from UserInfo");这个是不能返回记录集的,pRS还是空的,所以会出错。
    pRS->Open(CRecordset::forwardOnly,"select * from UserInfo");
    pRS->MoveLast();
      

  3.   

    我不知到你出现在什么错误,但pRS->GetRecordCount()函数得到的只是你当前
    光标走过的记录,你这样直接调用的话是得不到你想得到的记录的总数的!
    要想得到记录总数,你可以这样
    while(!pRS->IsEof())
    {
    pRS->MoveNext();
    }
    然后再调用pRS->GetRecordCount()就可以得到总记录数了!
      

  4.   

    还有ExecuteSQL()好像不支持查询功能的SQL语句!只有Open()函数才支持查询语句!
      

  5.   

    谢谢大家帮助。
    不过现在又有问题了,
    我执行MoveNext()的时候,程序报告说只支持前向移动。
    怎么回时
      

  6.   

    因为CRecordset::forwardOnly只能向前移
      

  7.   

    pRS->Open(CRecordset::forwardOnly,"select * from UserInfo");//只支持前移!
    将这句改为pRS->Open(CRecordset::dynaset,"select * from UserInfo");
      

  8.   

    再问个问题,是不是CRecordset的Open不能执行insert SQL了?