以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQLUpdate无法更新,参数3错误  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=143345)

--  作者:Hareen时代
--  发布时间:2019/11/21 14:46:00
--  SQLUpdate无法更新,参数3错误
For Each dr As DataRow In DataTables(bm).DataRows
    Dim srs As New List(of DataRow) 
    srs = DataTables("Test").SQLSelect("年月 = \'" & dr("年月") & "\' and 仓库名称 = \'" & dr("仓库名称") & "\' and 存货名称 = \'" & dr("存货名称") & "\'")
    If srs.Count>1 Then        
        Dim sum As Double = Math.Round(DataTables("Test").Compute("Sum(成本金额)","年月 = \'" & dr("年月") & "\' and 仓库名称 = \'" & dr("仓库名称") & "\' and 存货名称 = \'" & dr("存货名称") & "\'"),4)
        For Each sr As DataRow In srs
            sr("调拨差异") =  Math.Round(sr("调拨差异") + Math.Round(dr("差异金额") * (sr("成本金额")/sum), 2),2)
            sr("实际成本") = sr("成本金额") + sr("调拨差异")
        Next
    DataTables("Test").SQLUpdate(srs)
    End If  
Next


传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 3 (""): 提供的值不是数据类型 float 的有效实例。请检查源数据中的无效值。例如,小数位数大于精度的数值类型的数据即为无效值。


老师,这个错误怎么原因是什么呢?我用了 Math.Round去除了小数位,也不行,求解

--  作者:有点蓝
--  发布时间:2019/11/21 14:48:00
--  
"调拨差异"、"实际成本"这个2个列改为双精度列
--  作者:Hareen时代
--  发布时间:2019/11/21 15:01:00
--  
我这两个字段是在Sql Server数据库里面的,应该由Float  改成什么类型呢?
--  作者:Hareen时代
--  发布时间:2019/11/21 15:08:00
--  
我尝试将数据库中的值转换成nvarchar(255),转换之后可以计算了,没有出现报错,但是填写的值出现正无穷大
--  作者:有点蓝
--  发布时间:2019/11/21 15:10:00
--  
那是出现了除以零的操作,判断一个除数为0的就不要计算了
--  作者:Hareen时代
--  发布时间:2019/11/21 15:51:00
--  
找到原因了,是因为我的compute 不是用的Sqlcompute,这也太粗心了,谢谢了