VC6.0,ADO连接SQL2000数据库,程序如下:
1、变量定义:_RecordsetPtr  m_pRecordsetToSee;2、连接:m_pRecordsetToSee.CreateInstance(__uuidof(Recordset));
        try
{
CString str;
str = "select * from sm_供应商档案";
m_pRecordsetToSee->Open((_bstr_t)str, _variant_t((IDispatch *)m_pConnection,true),\
adOpenDynamic,adLockReadOnly,adCmdText);  //说明:m_pConnection已连接上数据库
}
catch (_com_error e)
{
MessageBox("RecordsetToSee Open Failed!","Prompt",MB_OK|MB_ICONERROR);
}
3、按钮ID_BTN_PREV的响应函数:
void CDlgAddVendor::OnBtnPrev() 
{
if(TRUE == CheckIsEditing()) //判断是否正在编辑
{
if(IDYES == MessageBox("是否保存正在新增的供应商信息?","提示",MB_YESNO))
{
OnBtnSave();//保存信息
return;
}
}
        else
{
if(!m_pRecordsetToSee->BOF)
{
try
{
m_pRecordsetToSee->MovePrevious();
DispCurrentItem(m_pRecordsetToSee); // 显示当前记录至对话框中
}
catch (_com_error e)
{
MessageBox(e.ErrorMessage());
}
}
}
}4、运行结果:当记录已到达第一条时,再单击“<|”按钮就出错(见附图)。

解决方案 »

  1.   

    if(!m_pRecordsetToSee->BOF) 

      try 
      { 
        m_pRecordsetToSee->MovePrevious(); 
        //向前移动后需要判断是否到了记录头
        if(!m_pRecordsetToSee->BOF)
        {
            DispCurrentItem(m_pRecordsetToSee); // 显示当前记录至对话框中 
         }
      } 
      catch (_com_error e) 
      { 
        MessageBox(e.ErrorMessage()); 
      }  
      

  2.   

    谢谢你,lfchen,好了。程序的错误在于到达BOF后调用 DispCurrentItem()时产生的错误。这个问题困扰我很长时间,我还一直以为是MovePrevious()函数的错误。再次感谢。结贴