麻烦大家帮忙看一下下边的程序 
void CCeshiDlg::OnRead() 
{
// TODO: Add your control notification handler code here
_variant_t var;
CString strAge; // 清空列表框
//m_AccessList.ResetContent();
strAge=""; // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
} // 读入库中各字段并加入列表框中
while(!m_pRecordset->rsEOF)
{

var = m_pRecordset->GetCollect("sheet1");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var); //m_AccessList.AddString( strName + " --> "+strAge ); m_pRecordset->MoveNext();
} // 默认列表指向第一项,同时移动记录指针并显示
//m_AccessList.SetCurSel(0);
//OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}调试时出现了Access Violation   
这是怎么回事呀??谢谢哦

解决方案 »

  1.   

    先查看m_pRecordset 的队应得值是否正确!在看一步查看上面代码!
    这个存取错误, 很有可能m_pRecordset 是错误的,根本就没有数据!
      

  2.   

    Access Violation,非法访问,你看一下堆栈就知道了,
      

  3.   

    检查你的指针等是否正确初始化 m_pRecordset,多数是指针访问出错了
      

  4.   

    if(!m_pRecordset->BOF)
    m_pRecordset->MoveFirst(); 
    这句错了吧.
      

  5.   

    判断为空可以这样if((Record->BOF)&&(Record->adoEOF))//判断记录集是否有记录 

      AfxMessageBox("目前还没有信息!"); 
      return false;