Foxtable(狐表)用户栏目专家坐堂 → [求助]同步更新关联列的处理逻辑


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

主题:[求助]同步更新关联列的处理逻辑

美女呀,离线,留言给我吧!
tubairabbit
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:70 积分:971 威望:0 精华:0 注册:2014/2/18 14:27:00
[求助]同步更新关联列的处理逻辑  发帖心情 Post By:2014/4/22 17:46:00 [显示全部帖子]

同步更新关联列的处理逻辑是什么?

a. 对子表关联行,直接修改关联列的数据?

b. 新增复制关联行,关联列为修改后数据,再删除原关联行?

 

因为有如下父表A  关联子表B,勾选了同步更新关联列,同步删除关联行

表A                                           表B

关联列  第二列  第三列                  关联列 

test1                                        test1   

                                               test1 

 

表B datacolchanged设置:

Select Case e.DataCol.Name
    Case "关联列"
   Dim dr As DataRow
dr = DataTables("表A").Find("关联列 = '" & e.NewValue & "'")
    If dr IsNot Nothing Then
        dr("第二列") = "执行了新值代码"
    End If

Dim pr As DataRow
pr = DataTables("表A").Find("关联列 = '" & e.OldValue & "'")
    If pr IsNot Nothing Then
        pr("第三列") = "执行了旧值代码"
    End If

End Select

 

发现修改表A关联列内容为test2后,如下:表B关联列是能够同步更新,但是为什么没有执行新值代码?

 

表A                                           表B

关联列  第二列  第三列                  关联列 

test2              执行了旧值代码      test2   

                                               test2 

 

 

 

 

[此贴子已经被作者于2014-4-22 17:46:41编辑过]

 回到顶部
美女呀,离线,留言给我吧!
tubairabbit
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:70 积分:971 威望:0 精华:0 注册:2014/2/18 14:27:00
  发帖心情 Post By:2014/4/22 18:10:00 [显示全部帖子]

实际的数据是

表A

关联列  费用合计          

pc001  300

pc002  150

 

表B

关联列  费用种类  费用金额

pc001  保费       100                

pc001  运费       200

pc002  保费       100             

pc002  税费       50           ------> pc001 税费 50

考虑到有可能表B的关联列pc002修改为pc001,需重新统计表A的“费用合计”,所以在表B datacolchanged 设置了:

Select Case e.DataCol.Name
    Case "关联列" '子表关键字变化,触发父表新旧2个关键字汇总内容更新
        If e.OldValue <> e.NewValue Then
            Dim pr,prold As DataRow
            pr = DataTables("表A
").Find("[关联列] = '" & e.DataRow("关联列") & "'")
            prold = DataTables("表A").Find("[关联列] = '" & e.OldValue & "'")
            If pr IsNot Nothing Then
                pr("费用合计") = DataTables("表B").Compute("Sum([费用金额])","[关联列] = '" & e.DataRow("关联列") & "'")
             messagebox.show("新值代码执行")

End If
           
            If prold IsNot Nothing Then

           prold("费用合计") = DataTables("表B").Compute("Sum([费用金额])","[关联列] = '" & e.OldValue & "'")
           messagebox.show("旧值代码执行")

   End If

   End If

 

此代码对于上面修改子表数据的情况,确实起到作用了,

表A

关联列  费用合计          

pc001  350

pc002  100

 

但是觉得勾选了“同步更新关联列”,pc001改成pc003,应该也能触发表B的新旧两个值的这两段代码,为什么旧值代码执行了,新值汇总的代码没有执行?


               

 


 回到顶部
美女呀,离线,留言给我吧!
tubairabbit
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:70 积分:971 威望:0 精华:0 注册:2014/2/18 14:27:00
  发帖心情 Post By:2014/4/22 18:17:00 [显示全部帖子]

如果不用关联设置里的“同步更新关联列”内容,改用写代码的方式实现关联列更新,在表A的datacolchanged中设置了

Select Case e.DataCol.Name

    Case "关联列"

  Dim Filter As String = "[关联列] = '" & e.OldValue  & "'"
DataTables("表B").ReplaceFor(e.DataCol.Name, e.NewValue, Filter)    

end select

 

发现就没问题,能够按预想执行表B的关联列的新旧两个值汇总的代码。 这里我主要是希望执行新值汇总的代码。    

[此贴子已经被作者于2014-4-22 18:19:48编辑过]

 回到顶部
美女呀,离线,留言给我吧!
tubairabbit
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:70 积分:971 威望:0 精华:0 注册:2014/2/18 14:27:00
  发帖心情 Post By:2014/4/23 9:11:00 [显示全部帖子]

大家如果“关联”里设置同步更新关联列,都是怎样设计父表汇总的呀?


 回到顶部