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


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

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

美女呀,离线,留言给我吧!
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编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/22 17:51:00 [只看该作者]

弹出一下看看是否有触发事件

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/22 17:51:00 [只看该作者]

 呃,同一个时间,一行,怎么可能脚踏两条船?

 

dr = DataTables("表A").Find("关联列 = '" & e.NewValue & "'")

pr = DataTables("表A").Find("关联列 = '" & e.OldValue & "'")


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/22 17:53:00 [只看该作者]

 直接说你的意图。

 回到顶部
美女呀,离线,留言给我吧!
tubairabbit
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/22 19:29:00 [只看该作者]

 能用就好,不要细究,不知内部可能做什么操作的。

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


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

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


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/23 9:14:00 [只看该作者]

你喜欢怎么样汇总都可以.

有条件统计子表数据看这里http://www.foxtable.com/help/topics/2472.htm

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/23 9:53:00 [只看该作者]

以下是引用tubairabbit在2014-4-23 9:11:00的发言:

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

 

看9楼,也可以用代码统计。

 

你的思路错了,你应该把统计代码写在父表才对的。

 


 回到顶部