行句柄引用了一个已被删除的行或被标识为删除的行

「已注销」 2010-11-10 03:47:41
主要代码如下
strSQL = "select VCS_BERTH.BERTH_NAME,VCS_BERTH.BERTH_WORKSHOPCODE,VCS_ATENNA.ATENNA_CURRENTTAG_TIME_ENTRANCE,VCS_ATENNA.ATENNA_LASTTAG_TIME_EXIT,VCS_BERTH.BERTH_NEXTVEHICLE,VCS_VEHC.VEHICLE_CODE as CUVEH,VCS_VEHL.VEHICLE_CODE as LASTVEH from VCS_BERTH left outer join VCS_ATENNA on VCS_ATENNA.ATENNA_CODE = VCS_BERTH.BERTH_ANTENNA left outer join VCS_VEHICLE as VCS_VEHC on VCS_VEHC.VEHICLE_TAGCODE = VCS_ATENNA.ATENNA_CURRENTTAG_CODE left outer join VCS_VEHICLE as VCS_VEHL on VCS_VEHL.VEHICLE_TAGCODE =VCS_ATENNA.ATENNA_LASTTAG_CODE order by VCS_BERTH.BERTH_WORKSHOPCODE";

m_Recordset->Open(strSQL.AllocSysString(), _variant_t((IDispatch *)plistview->m_Connection, true), adOpenStatic, adLockOptimistic, adCmdText);

if ( plistview->m_Recordset->GetRecordCount())//获得记录总数,如果记录数不为0,则执行
{
plistview->m_Recordset->MoveFirst();//指向第一条记录
while(!plistview->m_Recordset->adoEOF) //如果不是最后一条记录
{
......
m_Recordset->MoveNext();//指向下一条记录




其中SQL语句在数据库的查询分析器中执行成功,但是在在程序中运行到m_Recordset->MoveNext()时,就会出现错误:行句柄引用了一个已被删除的行或被标识为删除的行。而且如果把sql语句改成一条简单的查询语句如:select * from VCS_USER,那么程序也没有问题,可以很好的运行,但是这个复杂的sql语句在查询分析器中是正确的啊,不知道什么原因,望大家不吝赐教,谢谢!!!!
...全文
355 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-04-01
  • 打赏
  • 举报
回复
我自己来回答一下,如果还有人遇到与我一样的问题,可以参考一下。我是这样解决的:

将m_Recordset->Open的倒数第二个参数改为adLockReadOnly。

这样就没错了,但我不知道为什么。

4,011

社区成员

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

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