我现在数据表中有一项Spend存放的数据库类型是货币。ACCESS数据库。
我想用SUM(Spend)把里面的钱数统计出来。然后通过MessageBox显示出来。 m_pCommand->CommandText = "SELECT SUM(Spend) FROM data";
try
{
m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdText);
vTotal = m_pRecordset->GetCollect(_variant_t((long)0));
}
catch(_com_error e)
{
CATCH_ERROR;
return ;
}
CString str;
         //关键就是下面这一句,但我不知道返回的SUM到底存到哪去了,
         //因为这个_variant_t型的vTotal后面跟一堆放数的,我不知道存在哪个里了。
         //请帮忙看看啊。
//str.Format(_T("%2f"),vTotal.lVal);
AfxMessageBox(str);

解决方案 »

  1.   

    SELECT SUM(Spend) FROM data //select sum(spend) total from dategetcollect("total")
    试试
      

  2.   

    也可以用Recordset->Fields->Item[0]
      

  3.   

    str.Format(_T("%2d"),vTotal.lVal);其实,可以直接用的:
    AfxMessageBox(CString(_bstr_t(vTotal)));
      

  4.   

    跟踪调试到vTotal = m_pRecordset->GetCollect(_variant_t((long)0));看看Vtotal结果是什么类型,应该不是long型,很可能是DECIMAL型,你调试看看;
    或者在vTotal = m_pRecordset->GetCollect(_variant_t((long)0));
    之后添加vTotal.ChangeType(VARTYPE vartype);调用,参数为你要改的目标类型
      

  5.   

    这里的主要问题是 ,货币类型是带小数的啊,就这个让我头疼无法弄出来. Mackz(在相互) 的办法我早试过了,只能显示整数,后面的小数部分不显示.而且,用那种方法显示的结果比实际的大了10000倍.
    而我改成:
    str.Format(_T("%2f"),vTotal.lVal/10000.0);后是能显示了,但显示出来的后面的小数点有点多了,
    我只想要两位.另外问问 eeixy2000(eeixy2000)怎么跟踪看Vtotal的类型啊?