Foxtable(狐表)用户栏目专家坐堂 → tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect


  共有1558人关注过本帖树形打印复制链接

主题:tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect

帅哥哟,离线,有人找我吗?
creastzh
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:306 积分:2248 威望:0 精华:0 注册:2023/1/11 7:15:00
tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect  发帖心情 Post By:2024/7/16 20:50:00 [只看该作者]

老师, 程序运行出错,可检查没有问题:

报错提示: 
.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 ,然后进行计算, 但还是报错

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110887 积分:564391 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/16 21:00:00 [只看该作者]

1、把这些列都改为高精度

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

 回到顶部
客人(202.111.*.*)
  3楼


  发帖心情 Post By:2024/7/16 21:14:00 [只看该作者]

使用高精度小数解决了, 但此前我用了一个Round2 取小数点后1位数,为什么还是不行?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110887 积分:564391 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/16 21:26:00 [只看该作者]

我测试没有问题,是不是出现了除数为0的情况

 回到顶部
帅哥哟,离线,有人找我吗?
creastzh
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:306 积分:2248 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By:2024/7/16 21:30:00 [只看该作者]

我就是为了防止处数为0的情形出现,一开始我用了 dr1("WO_1")>0 的条件, 发现没有用, 所以改用了dr1("WO_1")>0.5 , 我奇怪的是为什么Round2() 没有作用.

 回到顶部
帅哥哟,离线,有人找我吗?
creastzh
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:306 积分:2248 威望:0 精华:0 注册:2023/1/11 7:15:00
  发帖心情 Post By: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.
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110887 积分:564391 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/16 22:04:00 [只看该作者]

"无穷大"就是出现了除以0。

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

 回到顶部