ado模式时,数据库开始和结尾的问题,请高手来指点啊

wangruixionghui 2010-05-03 10:54:58
点击next,记录切换到下一条,但是到达最后一条后,再点击netx,程序就报警了。
请高手看看我写的这语句有什么问题。

void CTFDialog::OnNext()
{
// TODO: Add your control notification handler code here

//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////


if(!(m_pRecordset->adoEOF))
{
m_pRecordset->MoveNext();
}
else
{
//MessageBox("到达最终数据记录!","提示",MB_ICONERROR|MB_OK);
return;
}

_variant_t vUf,vDf,vUs,vDs,vQs,vWind,vView,vSnow,vRain,vDateTime;
CString strUf,strDf,strUs,strDs,strQs,strWind,strView,strSnow,strRain;

vUf=m_pRecordset->GetCollect("上游流量UF");
strUf=(char*)_bstr_t(vUf);
m_uf=atoi(strUf.GetBuffer(0));
vUf.Clear();


vDf=m_pRecordset->GetCollect("下游流量DF");
strDf=(char*)_bstr_t(vDf);
m_df=atoi(strDf.GetBuffer(0));
vDf.Clear();

vUs=m_pRecordset->GetCollect("上游速度US");
strUs=(char*)_bstr_t(vUs);
m_us=atoi(strUs.GetBuffer(0));
vUs.Clear();

vDs=m_pRecordset->GetCollect("下游速度DS");
strDs=(char*)_bstr_t(vDs);
m_ds=atoi(strDs.GetBuffer(0));
vDs.Clear();

vQs=m_pRecordset->GetCollect("排队长度QS");
strQs=(char*)_bstr_t(vQs);
m_qs=atoi(strQs.GetBuffer(0));
vQs.Clear();


vWind=m_pRecordset->GetCollect("风力");
strWind=(char*)_bstr_t(vWind);
m_wind=atoi(strWind.GetBuffer(0));
vWind.Clear();

vView=m_pRecordset->GetCollect("可见度");
strView=(char*)_bstr_t(vView);
m_view=atoi(strView.GetBuffer(0));
vView.Clear();

vSnow=m_pRecordset->GetCollect("冰雪");
strSnow=(char*)_bstr_t(vSnow);
m_snow=atoi(strSnow.GetBuffer(0));
vSnow.Clear();


vRain=m_pRecordset->GetCollect("降雨量");
strRain=(char*)_bstr_t(vRain);
m_rain=atoi(strRain.GetBuffer(0));
vRain.Clear();

vDateTime=m_pRecordset->GetCollect("时刻");
m_datetime=(char*)_bstr_t(vDateTime);
vDateTime.Clear();



UpdateData(false);

}
...全文
123 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csu_liying013 2010-05-18
  • 打赏
  • 举报
回复
if(!(m_pRecordset->adoEOF))
改成if(!(m_pRecordset->EOF))试试
yaozhiyong110 2010-05-03
  • 打赏
  • 举报
回复
if(!(m_pRecordset->adoEOF))
{
m_pRecordset->MoveNext();
if(!(m_pRecordset->adoEOF))
{
MessageBox("到达最终数据记录!","提示",MB_ICONERROR|MB_OK);
return;
}
}
else
{
//MessageBox("到达最终数据记录!","提示",MB_ICONERROR|MB_OK);
return;
}
wangruixionghui 2010-05-03
  • 打赏
  • 举报
回复
非常感谢您的回复,请问如何修改才能实现我想要的功能呢,就是不停的按next,最后停到最后一条记录上。
zyq5945 2010-05-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/zyq5945/archive/2010/04/29/5541280.aspx
if(!(m_pRecordset->adoEOF))
{
m_pRecordset->MoveNext();
}
假如刚好是最后一个记录的时候,你再移动一次就到m_pRecordset->adoEOF上了,肯定会出错。



//打印调用ADO控件时产生的详细错误信息
void dump_com_error(_com_error &e)
{
CString ErrorStr;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
ErrorStr.Format( "\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n",
e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription );
//在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息
::OutputDebugString((LPCTSTR)ErrorStr);
#ifdef _DEBUG
AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);
#endif
}


try
{
//你的ADO代码

}
catch(_com_error& e)
{
dump_com_error(e);
}
yaozhiyong110 2010-05-03
  • 打赏
  • 举报
回复
这说明你没数据嘛
wangruixionghui 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yaozhiyong110 的回复:]
if(!(m_pRecordset->adoEOF))
{
m_pRecordset->MoveNext();
if(!(m_pRecordset->adoEOF))
{
MessageBox("到达最终数据记录!","提示",MB_ICONERROR|MB_OK);
return;
}
}
else
{
//MessageBox("到达最终数据记录!","提示",M……
[/Quote]


我觉得这个就行了,但是为什么点击一下next,就出现了“到达最后的数据”对话框了呢。这程序怎么运行的呢?
wangruixionghui 2010-05-03
  • 打赏
  • 举报
回复
非常感谢上面2位,但是还是不行,依旧报警。
尹成 2010-05-03
  • 打赏
  • 举报
回复
if(!(m_pRecordset->adoEOF))
{
m_pRecordset->MoveNext();
}
else
{
m_pRecordset->adoEOF;
}
这样子不就实现你想要的功能,就是不停的按next,最后停到最后一条记录上。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧