我在一个CRecordset中用了11次GetFieldValue。但是最后一次会出问题。症状是编译可以通过,但是运行,会弹出一个空消息框,题头是database。但是里面出了个stopsign!和确定其他什么都没有。如果消除最后一次,就一切正常。绝对不是GetFieldValue调用问题,因为别的地方同样调用同一个数据库列名,没有错误。
我写的如下:
CRecordset avg(&dbInfo);
CString strtimes,strjzch,stryshk,strch,avgmaolilv,avgjinglilv,avgfuzhailv,avgliudong,avgsudong;
strFilter.Format("SELECT DISTINCT * FROM [lirun],[cash],[zhichanfuzhai],[zonghenengli] WHERE [lirun].[ID]=[cash].[ID] AND [cash].[ID]=[zhichanfuzhai].[ID] AND [zhichanfuzhai].[ID]=[zonghenengli].[ID] AND[cash].[CNumber]=%s",m_Number);
if (avg.Open(CRecordset::snapshot, 
  strFilter, CRecordset::readOnly))
{
 while(!avg.IsEOF())
 {
  avg.GetFieldValue("date1",strtimes);
  avg.GetFieldValue("CNumber",strnumber);
  if(strtimes.Left(4)==m_times.Left(4) && strnumber==m_Number)
  {
   double i;
   avg.GetFieldValue("yingshouzhangkuan",stryshk);
   i=atof(stryshk);
   i+=i;
   stryshk.Format("%f",i/2);
   avg.GetFieldValue("cunhuo",strch);
  i=atof(strch);
  i+=i;
  strch.Format("%f",i/2);
  }
  if(strtimes==m_times )
 {
 CString strshouru,strchengben,strlirun;
 avg.GetFieldValue("zhuyingshouru",strshouru);
 avg.GetFieldValue("zhuyingchengben",strchengben);
 avg.GetFieldValue("jinglirun",strlirun);
 double i,j,k;
 i=atof(strshouru);
 j=atof(strchengben);
 k=(i-j)/i*100;
 k+=k;
 avgmaolilv.Format("%f",k/m);
 k=atof(strlirun);
 k=(j/i)*100;
 k+=k;
 avgjinglilv.Format("%f",k/m);
 CString strfuzhai,strzichan;
 avg.GetFieldValue("fuzhaiheji",strfuzhai);
 avg.GetFieldValue("zichanzongji",strzichan);
 i=atof(strfuzhai);
 j=atof(strzichan);
 k=i/j*100;
 k+=k;
 avgfuzhailv.Format("%f",k/m);
 CString strldzichan,strldfuzhai;
 avg.GetFieldValue("liudongzichan",strldzichan);
 avg.GetFieldValue("liudongfuzhai",strldfuzhai);
 i=atof(strldzichan);
 j=atof(strldfuzhai);
 k=i/j;
 k+=k;
 avgliudong.Format("%f",k);
 CString strcunhuo;
 avg.GetFieldValue("cunhuo",strcunhuo);//出错的地方
 k=atof(strcunhuo);
 k=(i-k)/j;
 k+=k;
 avgsudong.Format("%f",k/m);
 m++;
 }
 avg.MoveNext();
}
avg.Close();
}