我在一个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();
}
我写的如下:
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();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货