Foxtable(狐表)用户栏目专家坐堂 → [讨论]DataTable 内部索引已损坏:“5”


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

主题:[讨论]DataTable 内部索引已损坏:“5”

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


加好友 发短信
等级:童狐 帖子:260 积分:3307 威望:0 精华:0 注册:2016/5/21 14:28:00
[讨论]DataTable 内部索引已损坏:“5”  发帖心情 Post By:2018/8/22 8:41:00 [显示全部帖子]

DataTable 内部索引已损坏:“5”的原因网上查了一下,网上的说法应该是跟datatable.select的函数有关。select执行时会创建一个dataview,此时数据被操作,内部引索就会被破坏,从而出错。

这是一张订单表

图片点击可在新窗口打开查看此主题相关图片如下:订单表.png
图片点击可在新窗口打开查看
这是一张订单的核价表

图片点击可在新窗口打开查看此主题相关图片如下:订单核价表.png
图片点击可在新窗口打开查看
两张表的数据都是同一个datatable

这是订单成本统计时的窗口,保存并关闭按钮中使用了select功能查找订单表的行,统计成本

图片点击可在新窗口打开查看此主题相关图片如下:成本核算.png
图片点击可在新窗口打开查看

经过试验发现,订单表使用上面查询工单号、款号等查询功能时,就会出现DataTable 内部索引已损坏:“5”的错误。
订单表不去操作,单单统计成本就会不会。
是不是这样理解,订单表查询时生成了一个dataview,保存并关闭按钮中使用了select功能运行时后台也要有一个datatable的dataview,但是这个dataview是订单表查询时生成的dataview,跟select的查询条件不匹配,所以出错了?

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


加好友 发短信
等级:童狐 帖子:260 积分:3307 威望:0 精华:0 注册:2016/5/21 14:28:00
  发帖心情 Post By:2018/8/22 9:16:00 [显示全部帖子]

查询插件类似以下代码


订单管理_工单号_ValueChanged

 

Tables("订单信息").Filter = "工单号 = '" & e.Sender.Value & "'"

Tables("订单信息").Sort = "工单号"


保存并关闭

If Tables("成本录入窗口_成本明细表").Rows.Count > 0 Then

    Functions.Execute("保存更新","成本录入窗口_成本明细表","成本明细表")

    Functions.Execute("成本报交")

    Functions.Execute("保存更新单行","成本核算_订单信息","订单信息")

End If

e.Form.Close


保存更新的内部函数


Dim a As String = Args(0)

Dim b As String = Args(1)

For Each r As Row In Tables(a).rows

    Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#")

    r.Save()

    Dim msg As String = p & b & "#" & r("_Identify")

    For Each bd As QQBuddy In QQClient.Buddies

        If bd.Online Then

            QQClient.Send(bd.name, msg)

        End If

    Next

Next


成本报交的内部函数:


Dim r As Row = Tables("成本核算_订单信息").Current

Dim nms() As String  = {"胚成本_原料费","胚成本_加工费","胚成本_其他","胚成本_原料费1","胚成本_加工费1","胚成本_其他1","制造成本_原料费","制造成本_染色费","制造成本_定型费","制造成本_车工费","制造成本_装饰费","制造成本_其他","包装成本_原料费","包装成本_辅料费","包装成本_加工费","包装成本_包装费","非人工成本费","包装成本_其他","管理费","包装成本_出运费","报关费","异常支出"}

For Each nm As String In nms

    r(nm) = Nothing

Next

Dim s As List (of String) = DataTables("成本明细表").GetValues("项目名称","工单号 = '" & r("工单号") & "'")

If s.Count > 0 Then

    For i As Integer = 0 To s.Count - 1

        r(s(i)) = DataTables("成本明细表").Compute("sum(金额)","工单号 = '" & r("工单号") & "' and 项目名称 = '" & s(i) & "'")

    Next

End If


保存更新单行的内部函数

Dim a As String = Args(0)

Dim b As String = Args(1)

Dim r As Row = Tables(a).Current

Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#")

r.Save()

Dim msg As String = p & b & "#" & r("_Identify")

For Each bd As QQBuddy In QQClient.Buddies

    If bd.Online Then

        QQClient.Send(bd.name, msg)

    End If

Next



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


加好友 发短信
等级:童狐 帖子:260 积分:3307 威望:0 精华:0 注册:2016/5/21 14:28:00
  发帖心情 Post By:2018/8/22 13:49:00 [显示全部帖子]

我把datatable里面的CurrentChanged事件里面的代码注释掉后不提示了,搞不懂什么原因。
[此贴子已经被作者于2018/8/22 13:50:52编辑过]

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


加好友 发短信
等级:童狐 帖子:260 积分:3307 威望:0 精华:0 注册:2016/5/21 14:28:00
  发帖心情 Post By:2018/8/23 13:03:00 [显示全部帖子]

If Tables("订单信息").Current IsNot Nothing Then

    Tables("订单明细").Filter = "工单号 = '" & Tables("订单信息").Current("工单号") & "'"

    Tables("备料明细").Filter = "工单号 = '" & Tables("订单信息").Current("工单号") & "'"

End If


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


加好友 发短信
等级:童狐 帖子:260 积分:3307 威望:0 精华:0 注册:2016/5/21 14:28:00
  发帖心情 Post By:2018/8/23 13:11:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180823131404.png
图片点击可在新窗口打开查看
另外请问EXCEL的表达式,像这种<[款号] & " " & [模具号] & " " & [尺码]>多个字符串加在一起的,如果最后一个尺码的字符串是英文字符”结尾的话就会出错是吗?

 回到顶部