_RecordsetPtr RstUser;
HRESULT       hr;
COleVariant  vValue;
double fData;
strTemp.Format("SELECT TOP 1 * FROM queue");
vValue = strTemp;
hr = RstUser.CreateInstance("ADODB.Recordset");
hr = RstUser->putref_ActiveConnection(ConnSvr);
hr = RstUser->Open(vValue, vNull, adOpenDynamic, adLockOptimistic, adCmdText);
RstUser->AddNew();
fData = 100000000;
//vValue.vt = VT_R8;
//vValue.dblVal = fData;
strTemp.Format("%0.2f", fData);
vValue = strTemp;
RstUser->Fields->Item["DataVal"]->Value = vValue;
RstUser->Update();
RstUser->Close();
其中SQL字段DataVale为float;
当fData增加到100000000时候写入数据库到RstUser->Update()里出现异常,小于100000000正常,
怎么解决呀,高手帮助

解决方案 »

  1.   

    你试一下,直接在数据库里面添加这条记录,不在ADO里面操作,能成功吗??
      

  2.   

    用的是Oracle吧。检查一下float类型的最大值是多少呢?也许就是这么大?不妨用别的类型试试
      

  3.   

    我试了一下,在oracle里面往float类型字段里面插入100000000是没有问题的。。
      

  4.   

    你用其他的数据库就不会出现这个问题了,如SQL SERVER     ORACLE.
      

  5.   

    我用SQL 2000数据库, 在SQL中用INSERT插入也不行.   我之前定义数据类型为REAL后来发现不够用, 修改了数据类型为FLOAT,双精度整型. 好像它还是当单精度运算,提示转换数据类型错误.我试了新建立另外一个表,直接指定为FLOAT,就可以插入.
      

  6.   

    你不防直接用Command.Excute来执行看看。e.g.
    HRESULT hr = S_OK;
    char srSql[256];hr = pCommand.CreateInstance (__uuidof (Command));
    if (FAILED( hr ))
      cout << "Can't create an instance of ADO.Command." << endl;
    pCommand->ActiveConnection = m_pConn; // 已打开的连接指针
    memset(srSql, 0, sizeof(srSql));
    sprintf(srSql, "update table_name set xxx = %.2f where ...", ...);

    pCommand->CommandText = _bstr_t(srSql);
    hr = pCommand->Execute(NULL, NULL, adCmdText);