void CStore::sql_Delete()
{
// 建立数据连接
AccADOConn m_AdoConn;
m_AdoConn.OnInitDBConnect(); // 设置SQL语句
CString sprice,scount;
sprice.Format("%f",_price);
scount.Format("%d",_count);
_bstr_t vSql;
vSql = "UPDATE Store SET Store.Tag = 1 WHERE Type = '" + _type + "' ";
vSql = vSql + "AND Brand = '" + _brand + "' ";
vSql = vSql + "AND LotNo = '" + _lotno + "' ";
vSql = vSql + "AND Pack = '" + _pack + "' ";
vSql = vSql + "AND Price = " + sprice + " ";
vSql = vSql + "AND Count_i = " + scount + " ";
vSql = vSql + "AND Provider = '" + _provider + "' ";
vSql = vSql + "AND Input_Date = '" + _date + "' ";
TRACE( vSql ); // 执行SQL语句
m_AdoConn.ExecuteSQL( vSql ); // 断开数据连接
m_AdoConn.ExitConnect();
}在ACCESS数据库中Price字段是单精度数字, 当Price字段的内容是1.2,25,125,0.64是,都可以,怎么当内容是向27.8,245.4就都不可以了呢?
请问是我那里错了?
我单步调试,当程序到vSql上,显示sprice是27.8->27.799999,在Access中27.799999就是27.8啊。
请问各位高手,我这是错在那里了?
谢谢!

解决方案 »

  1.   

    Price是什么类型
    access的字段类型以及sprice类型
    建议改成双精度
      

  2.   

    Price是单精度类型,是ACCESS一个字段,sprice是将float型转换成字符串型,便于连接SQL语句的。Price只是物件的价格,我想不需要改成双精度,谢谢。
      

  3.   

    问题是不是都出在浮点数格式化之后便成999的
    但是如果是double的话,那就不一定是999了
      

  4.   

    sprice.Format("%f",_price);
    _price 本来是27.8000但是变成sprice后,就又是27.799999了,我想问题出在这里,可数据库中27.8啊。
      

  5.   

    用double好像就是99了
    另外如果小数位数有个限度的话,比如两位,可以"%.2f"