以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=192726)

--  作者:creastzh
--  发布时间:2024/7/16 20:50:00
--  tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect
老师, 程序运行出错,可检查没有问题:

报错提示: 
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:
详细错误信息:
The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 3 (""): The supplied value is not a valid instance of data type real. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision.

.运行语句,出错的语句如下黄色:

For Each dr2 As DataRow In dr2s
    Dim pnop As String = dr2("PartNumber") & "|" & dr2("OP")
    If d1.ContainsKey(pnop) Then
        Dim dr1 = d1(PNOp)
        \'Output.Show(PNOP)
        If dr1("WO_2") > 0.5 Then \'调试次数
            dr2("自去年来工序生产状态_次数") = dr1("WO_2")
            \'Output.Show(pnop & "   " & dr1("WO_2"))
            Dim Sh As Single = Round2( (dr1("TotalMachineHours_2") - dr1("BREAKHours_2")) / dr1("WO_2") * 60, 0)
            If sh > 0 Then 
                If dr2("自去年来工序生产状态_平均每次调试分钟") <> Sh Then
                    dr2("自去年来工序生产状态_平均每次调试分钟") = Sh    \'单精度小数
                    dr2.Save
                End If
            End If
        End If
        If dr1("WO_1") > 0.5 Then \'运行数量
            dr2("自去年来工序生产状态_生产数量") = dr1("GOODQty_1")
            \'Output.Show(pnop & "   " & dr1("GOODQty_1"))
            Dim Sh As Single = Round2((dr1("TotalMachineHours_1") - dr1("BREAKHours_1")) / dr1("GoodQty_1") * 60, 1)
            If Sh <> dr2("自去年来工序生产状态_单件平均工时单位") Then
                dr2("自去年来工序生产状态_单件平均工时单位") = Sh  \'单精度小数
                dr2.Save
            End If
        End If 
    End If
Next

检查被除数>0.5 ,然后进行计算, 但还是报错

--  作者:有点蓝
--  发布时间:2024/7/16 21:00:00
--  
1、把这些列都改为高精度

2、If dr1("WO_1") > 0.5 Then \'运行数量
改为
If dr1("GoodQty_1") > 0.5 Then \'运行数量

--  作者:客人
--  发布时间:2024/7/16 21:14:00
--  
使用高精度小数解决了, 但此前我用了一个Round2 取小数点后1位数,为什么还是不行?
--  作者:有点蓝
--  发布时间:2024/7/16 21:26:00
--  
我测试没有问题,是不是出现了除数为0的情况
--  作者:creastzh
--  发布时间:2024/7/16 21:30:00
--  
我就是为了防止处数为0的情形出现,一开始我用了 dr1("WO_1")>0 的条件, 发现没有用, 所以改用了dr1("WO_1")>0.5 , 我奇怪的是为什么Round2() 没有作用.
--  作者:creastzh
--  发布时间:2024/7/16 21:33:00
--  


刚刚我在另一个程序中运行, 其除数为0.66, 结果出现了"无穷大"的报错:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:自定义函数,ProductionEfficiencySta
详细错误信息:
Exception has been thrown by the target of an invocation.
Value was either too large or too small for a Decimal.Couldn\'t store <∞> in Efficiency Column.  Expected type is Decimal.
Value was either too large or too small for a Decimal.
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2024/7/16 22:04:00
--  
"无穷大"就是出现了除以0。

另外如果被除数过大,除数过小,除的结果可能会超出高精度能够表示的范围。