Foxtable(狐表)用户栏目专家坐堂 → 交换


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

主题:交换

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17576 威望:0 精华:0 注册:2014/7/29 19:09:00
交换  发帖心情 Post By:2017/11/1 20:36:00 [显示全部帖子]

当表中的流程编号由2变成3时更新后台数据表中的对应的数据,采用的方法是先分别按2和3获取后台数据表的_Identify集合,
然后用这个_Identify集合作为条件分别更新,如下是代码:
If e.DataRow.RowState <> DataRowState.Added AndAlso e.DataRow("Fid") <> e.DataRow.OriginalValue("Fid") Then '如果不是新增行且新旧值不同
    Dim flt,flt2,ids,ids2 As String
    Dim dt As DataTable
    Dim cmd As New SQLCommand
    cmd.ConnectionName = Mydata
    'A---更新数据表中的流程编号------------------------------------------------------
    flt = "sys_Fbh = " & e.DataRow.OriginalValue("Fid") & " and (sys_Fzt = '待处理' or sys_Fzt = '退回')"  '旧流程编号的行
    flt2 = "sys_Fbh = " & e.DataRow("Fid") & " and (sys_Fzt = '待处理' or sys_Fzt = '退回')" '新流程编号的行
    cmd.CommandText = "se lect _Identify from " & e.DataRow("tbN") & " Where " & flt
    dt = cmd.ExecuteReader
    '--分别集合新旧编号的行的_identify
    If dt.DataRows.count > 0 Then
        For Each dr As DataRow In dt.datarows
            ids + = dr("_Identify") & ","
        Next
        ids = ids.trim(",")
    End If
    cmd.CommandText = "se lect _Identify from " & e.DataRow("tbN") & " Where " & flt2
    dt = cmd.ExecuteReader
    If dt.DataRows.count > 0 Then
        For Each dr As DataRow In dt.datarows
            ids2 + = dr("_Identify") & ","
        Next
        ids2 = ids2.trim(",")
    End If
    '分别更新数据表中的流程编号
    cmd.CommandText = "Update {" & e.DataRow("tbN") & "} Se t sys_Fbh = " & e.DataRow("Fid") & " Where _Identify in (" & flt & ")"  '旧编号的行更新为新编号
    cmd.ExecuteNonQuery()
    cmd.CommandText = "Update {" & e.DataRow("tbN") & "} Se t sys_Fbh = " & e.DataRow.OriginalValue("Fid") & " Where _Identify in (" & flt2 & ")" '新编号的行更新为旧编号
    cmd.ExecuteNonQuery()  
End If

感觉 上面的方法很繁琐,还有没有简单的办法?

谢谢!

 回到顶部