数据库为SQL.
下面代码在一个while语句中,运行出现无效的描述符索引,问题出现在if语句中的m_recordset->GetFieldValue(temp,varvalue);
为什么if语句外面可以给ok1,ok2,ok3赋值,而if语句内则出现“无效的描述符索引”的错误?
要怎样修改?小弟先谢过了,^_^
                int ok1,ok2,ok3;
m_recordset->GetFieldValue(14,varvalue);
ok1=varvalue.m_iVal;
m_recordset->GetFieldValue(15,varvalue);
ok2=varvalue.m_iVal;
m_recordset->GetFieldValue(16,varvalue);
ok3=varvalue.m_iVal;            //需要回访的条件
if((year1<=sysyear && time1days <= sysnum && ok1==0)||(year2<=sysyear&&time2days<=sysnum&&ok2==0)||(year3<=sysyear&&time3days<=sysnum&&ok3==0))
{
int temp=0;
// MessageBox("有");
m_recordset->GetFieldValue(temp,varvalue);
m_h_list.InsertItem(i,varvalue.m_pstring->GetBuffer(1)); m_recordset->GetFieldValue(1,varvalue);
m_h_list.SetItemText(i,1,varvalue.m_pstring->GetBuffer(1));
}
m_recordset->MoveNext();
i++;
UpdateData(FALSE);

解决方案 »

  1.   

    直接用数字,不用变量temp可以吗??
    如果不行,换GetCollect取值试试..
      

  2.   

    喔..你用的是ODBC...没有GetCollect...
    试试 m_recordset->GetFieldValue(short(0),varvalue);可不可以
      

  3.   

    我看其他人说好像是顺序写错了,  比如select   a,b   from   c   
     在有的驱动中,必须先读a,然后再读b,否则就出现这样的问题.
    我把 if 中的语句提到ok1,ok2,ok3赋值语句的前面就不会出现这个问题了。但是提到前面去就达不到程序的要求了。
    用GetCollect怎么取值?
      

  4.   

    嗯,好像是要按字段的顺序读才行.. 那你试试按你取值的顺序写SQL语句..比如你先取b字段,则写select b,a from c
      

  5.   

    用m_recordset->GetFieldValue(short(0),varvalue);也是出现同样的问题。
      

  6.   

    我把整个程序和数据库放到下面的链接上了,大侠帮我看看吧。
    http://tele.126disk.com/down.aspx?down=ok&filepath=zxh0528%2f%b2%a1%c8%cb%bb%d8%b7%c3%cf%b5%cd%b3%2b%ca%fd%be%dd%bf%e2.rar