以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]同步更新遇到困难了  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=71822)

--  作者:huhu
--  发布时间:2015/7/18 19:20:00
--  [求助]同步更新遇到困难了

   Dim r As Row = Tables("BUG录入表").Current

 If r.DataRow.GetChildRows("BUG研发表").Count = 0 Then
            Dim dr As DataRow = DataTables("BUG研发表").AddNew()
            dr("BUG_ID") = r("BUG_ID")
            MessageBox.show("BUG编号:" & r("BUG_ID") & "此BUG故障已通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
        ElseIf r.DataRow.GetChildRows("BUG研发表").Count > 0  Then
            Dim rr As Row = Tables("BUG录入表").Current
            Dim fl As String = "BUG_ID = \'"  & r("BUG_ID") & "\'"
            rr.Load() \'加载父行
            LockBaseMainForm() \'锁定主窗口
            DataTables("BUG研发表").StopRedraw \'停止绘制订单明细
            DataTables("BUG研发表").RemoveFor(fl) \'移除当前订单的订单明细
            DataTables("BUG研发表").Appendload(fl) \'追载当前订单的订单明细
            DataTables("BUG研发表").ResumeRedraw \'恢复绘制订单明细
            UnLockBaseMainForm() \'解锁主窗口
            MessageBox.show("BUG编号:" & r("BUG_ID") & "此BUG故障信息已修改,并通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
        End If

 

我是按照帮助来做的。可是效果不对。

比如BUG_ID 为201507018的数据。提交后。然后再次在BUG录入表修改BUG_ID201507018的数据,又再次提交。

问题来了,怎么在BUG研发表又增加了一行同样是是BUG_ID为201507018的数据(修改后的),也就是说在BUG研发表存在2个BUG_ID201507018的数据。

本意是希望是同步更新,而不是新增加行。


--  作者:大红袍
--  发布时间:2015/7/19 10:36:00
--  

 

[此贴子已经被作者于2015/7/19 10:36:31编辑过]

--  作者:大红袍
--  发布时间:2015/7/19 10:38:00
--  

先load数据,再判断 If r.DataRow.GetChildRows("BUG研发表").Count = 0 Then

 

或者,用sqlFind先查找 http://www.foxtable.com/help/topics/2911.htm

 


--  作者:huhu
--  发布时间:2015/7/19 12:56:00
--  


        If r.DataRow.GetChildRows("BUG研发表").Count = 0 Then
            Dim dr As DataRow = DataTables("BUG研发表").AddNew()
            dr("BUG_ID") = r("BUG_ID")
            MessageBox.show("BUG编号:" & r("BUG_ID") & "此BUG故障已通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
        End If
        Dim rr As Row = Tables("BUG录入表").Current
        Dim s As String = "BUG_ID = \'" & rr("BUG_ID") & "\'"
        Dim fr As DataRow = DataTables("BUG研发表").SQLFind(s)
        If fr IsNot Nothing Then
            rr.Load() \'加载父行
            LockBaseMainForm() \'锁定主窗口
            DataTables("BUG研发表").StopRedraw \'停止绘制订单明细
            DataTables("BUG研发表").RemoveFor(s) \'移除当前订单的订单明细
            DataTables("BUG研发表").Appendload(s) \'追载当前订单的订单明细
            DataTables("BUG研发表").ResumeRedraw \'恢复绘制订单明细
            UnLockBaseMainForm() \'解锁主窗口
            MessageBox.show("BUG编号:" & r("BUG_ID") & "此BUG故障信息已修改,并通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
        End If
    End If

红色的代码应该还是有问题。BUG研发表还是增加了新的行,并不是把原来的数据更新。

请大师再帮我瞅瞅。


--  作者:程兴刚
--  发布时间:2015/7/19 13:56:00
--  

不绕这些弯路,效果一样:

 

 

If Tables("BUG录入表").Current IsNot Nothing    
    Dim r As Row = Tables("BUG录入表").Current  
    Dim dr As DataRow = DataTables("BUG研发表").find("BUG_ID = \'" & r("BUG_ID") & "\'")
    If dr Is Nothing
        dr = DataTables("BUG研发表").AddNew()
    End If
    dr("BUG_ID") = r("BUG_ID")

    dr.save()

    r.save() \'加载父行
    MessageBox.show("BUG编号:" & r("BUG_ID") & "此BUG故障已通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
 End If

[此贴子已经被作者于2015/7/19 13:59:43编辑过]

--  作者:程兴刚
--  发布时间:2015/7/19 13:57:00
--  

刚刚少了个右括号,已修改!


--  作者:大红袍
--  发布时间:2015/7/19 14:11:00
--  

Dim dr As DataRow = DataTables("BUG研发表").AddNew()
dr("BUG_ID") = r("BUG_ID")

 

写到sqlfind判断里面啊。


--  作者:huhu
--  发布时间:2015/7/19 16:53:00
--  
以下是引用程兴刚在2015/7/19 13:56:00的发言:

不绕这些弯路,效果一样:

 

 

If Tables("BUG录入表").Current IsNot Nothing    
    Dim r As Row = Tables("BUG录入表").Current  
    Dim dr As DataRow = DataTables("BUG研发表").find("BUG_ID = \'" & r("BUG_ID") & "\'")
    If dr Is Nothing
        dr = DataTables("BUG研发表").AddNew()
    End If
    dr("BUG_ID") = r("BUG_ID")

    dr.save()

    r.save() \'加载父行
    MessageBox.show("BUG编号:" & r("BUG_ID") & "此BUG故障已通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
 End If

[此贴子已经被作者于2015/7/19 13:59:43编辑过]

程老师,你这个好像只能对BUG录入表的数据生效。但是BUG研发表的数据并没有修改,还是之前的。


--  作者:大红袍
--  发布时间:2015/7/19 16:57:00
--  
Dim rr As Row = Tables("BUG录入表").Current
Dim s As String = "BUG_ID = \'" & rr("BUG_ID") & "\'"
Dim fr As DataRow = DataTables("BUG研发表").SQLFind(s)
If fr Is Nothing Then
    Dim dr As DataRow = DataTables("BUG研发表").AddNew()
    dr("BUG_ID") = rr("BUG_ID")
    dr.save
    MessageBox.show("BUG编号:" & rr("BUG_ID") & "此BUG故障已通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
Else
   
    rr.Load() \'加载父行
    LockBaseMainForm() \'锁定主窗口
    DataTables("BUG研发表").StopRedraw \'停止绘制订单明细
    DataTables("BUG研发表").RemoveFor(s) \'移除当前订单的订单明细
    DataTables("BUG研发表").Appendload(s) \'追载当前订单的订单明细
    DataTables("BUG研发表").ResumeRedraw \'恢复绘制订单明细
    UnLockBaseMainForm() \'解锁主窗口
    MessageBox.show("BUG编号:" & rr("BUG_ID") & "此BUG故障信息已修改,并通知研发,请静静的耐心等待研发解决!","博达BUG综合管理系统")
   
End If

--  作者:huhu
--  发布时间:2015/7/19 17:16:00
--  

.NET Framework 版本:2.0.50727.8009
Foxtable 版本:2014.11.11.1
错误所在事件:
详细错误信息:
列“_Identify”被约束为是唯一的。值“28”已存在。

报上面的错。