主要代码如下
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语句在查询分析器中是正确的啊,不知道什么原因,望大家不吝赐教,谢谢!!!!