为什么运行到这里while(!IsEndOfFile()) m_pRecordset的值就变成了0

时间:2022-12-13 15:36:07
int CUserTable::GetUsers(CStringArray &strName,CStringArray &strjb)
{
CDataConn m_DataConn;
         m_DataConn.OnInitDataConn();
CString sql;
sql.Format("SELECT UserName,Userjb FROM usert");
m_DataConn.ExecuteSQL((_bstr_t)sql);
int nCount=0;
while(!IsEndOfFile())
{
GetOneRow(2,m_var);
strName.Add(STRING(m_var[0]));
strjb.Add(STRING(m_var[1]));
m_pRecordset->MoveNext();
nCount ++;
}
return nCount;
}
BOOL CDataConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordsAffected;
try
{
        if(m_pConnection==NULL)
      OnInitDataConn();
        m_pRecordset=m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return m_pRecordset;
}
catch(_com_error e)
{
e.Description();
return false;
}
}

Recordset21 CXX0030: Error: expression cannot be evaluated

3 个解决方案

#1


IsEndOfFile(),这个函数是不是有副作用?
或是,你开了其他的线程?

#2


应该是IsEndOfFile出错了

#3


m_pRecordset=m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return m_pRecordset
检查返回的m_pRecordset的三个属性值
TRACE("%d\n",m_pRecordset->CursorLocation);
TRACE("%d\n",m_pRecordset->CursortType);
TRACE("%d\n",m_pRecordset->LockType);
如果结果是3,0,1,那么恭喜你,这里返回的结果集是拥有只读向前游标的,不允许Move方法,Movefirst,MoveLast

然后看看你的IsEndOfFile和GetOneRow(2,m_var);实现看看有没有上述三个方法之一

还有一点
   if(m_pConnection==NULL)
     OnInitDataConn();
        m_pRecordset=m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return m_pRecordset;
这里返回的一个结果集,但是你的函数声明为什么是返回BOOL类型。

程序里调用ExecuteSQL,也是一个直接调用,没有返回值接受

#1


IsEndOfFile(),这个函数是不是有副作用?
或是,你开了其他的线程?

#2


应该是IsEndOfFile出错了

#3


m_pRecordset=m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return m_pRecordset
检查返回的m_pRecordset的三个属性值
TRACE("%d\n",m_pRecordset->CursorLocation);
TRACE("%d\n",m_pRecordset->CursortType);
TRACE("%d\n",m_pRecordset->LockType);
如果结果是3,0,1,那么恭喜你,这里返回的结果集是拥有只读向前游标的,不允许Move方法,Movefirst,MoveLast

然后看看你的IsEndOfFile和GetOneRow(2,m_var);实现看看有没有上述三个方法之一

还有一点
   if(m_pConnection==NULL)
     OnInitDataConn();
        m_pRecordset=m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return m_pRecordset;
这里返回的一个结果集,但是你的函数声明为什么是返回BOOL类型。

程序里调用ExecuteSQL,也是一个直接调用,没有返回值接受