Foxtable(狐表)用户栏目专家坐堂 → 请教一个关于datacolchanged问题


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

主题:请教一个关于datacolchanged问题

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


加好友 发短信
等级:幼狐 帖子:52 积分:448 威望:0 精华:0 注册:2019/8/7 20:12:00
请教一个关于datacolchanged问题  发帖心情 Post By:2020/1/9 11:38:00 [只看该作者]

老师,我用datacolchanged事件来触发A表生成B表,B表触发生成C表,这样A表的数据一变,B和C都变化了,现在只想B表数据更新,C表不变,我再项目属性里面的afteropenproject事件里面加入DataTables("C").AllowAddNew =False,还是不能阻止C表更新,这个问题该怎么解决。

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/9 11:58:00 [只看该作者]

把B表触发生成C表的代码去掉不就行了

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


加好友 发短信
等级:幼狐 帖子:52 积分:448 威望:0 精华:0 注册:2019/8/7 20:12:00
  发帖心情 Post By:2020/1/9 12:11:00 [只看该作者]

不是了,c表的数据需要b表产生的,直接通过a表触发产生的c表数据不全,但是先产生b表的数据,再触发b表产生c表的数据,就是正常的,下面是代码,像case“西餐厅”里面的dr("FAccountNum") = "501.02.001"这个数据直接就可以用a表触发生成正确的,但是像Case "清餐厅"里面这个dr("FAccountNum") 通过select语句生成的,就不能直接通过a表生成正确数据,直接出来的数据是空的,但是先生成b表的数据,再触发B表就可以生成正确的数据

If Forms("凭证生成").opened AndAlso e.DataCol.name = "posstation"
    Dim dtp As WinForm.DateTimePicker = Forms("凭证生成").Controls("Date1")
    Dim dtp1 As Date = dtp.value
    If e.DataRow("date") <> dtp.value Then Return
    Select Case e.newvalue
        Case "西餐厅"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                dr("FAccountNum") = "501.02.001"
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---003---西餐"
            End If
        Case "清餐厅"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                Dim fa As String = e.DataRow("incomecategory")
                Select Case fa
                    Case "食品收入"
                        dr("FAccountNum") = "501.02.001"
                    Case "饮料收入"
                        dr("FAccountNum") = "501.02.002"
                    Case "酒水收入"
                        dr("FAccountNum") = "501.02.003"
                    Case "服务费"
                        dr("FAccountNum") = "501.02.006"
                    Case "手工折扣"
                        dr("FAccountNum") = "501.02.007"
                    Case "场租收入"
                        dr("FAccountNum") = "501.02.008"
                End Select
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---002---清餐"
            End If
            End Select
End If

 


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/9 13:44:00 [只看该作者]

A表、B表的datacolchanged代码都给出来。

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


加好友 发短信
等级:幼狐 帖子:52 积分:448 威望:0 精华:0 注册:2019/8/7 20:12:00
  发帖心情 Post By:2020/1/10 12:03:00 [只看该作者]

A表代码

If Forms("凭证生成").opened AndAlso e.DataCol.name = "key2"
Dim dtp As WinForm.DateTimePicker = Forms("凭证生成").Controls("Date1")
If e.DataRow("YYYYMMDD") <> dtp.value Then Return
    Select Case e.newvalue
          Case "WAI"
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' And incomecategory = '散客收入'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "客房部"
                    dr("paycode") = "客房收入"
                    dr("incomecategory") = "散客收入"
                    dr("amount")= e.DataRow("dicvalue")
                End If
          Case "RSC"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and incomecategory = '订房中心'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "客房部"
                    dr("paycode") = "客房收入"
                    dr("incomecategory") = "订房中心"
                    dr("amount")= Tables("cb").compute("sum(dicvalue)","YYYYMMDD = '" & dtp.value & "' and key2 = 'RSC'" )
                End If
           Case "LSG"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and incomecategory = '长住客'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "客房部"
                    dr("paycode") = "客房收入"
                    dr("incomecategory") = "长住客"
                    dr("amount")= e.DataRow("dicvalue")
                End If
          Case "CCS"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and incomecategory = '会议展览'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "客房部"
                    dr("paycode") = "客房收入"
                    dr("incomecategory") = "会议展览"
                    dr("amount")= e.DataRow("dicvalue")
                End If
          Case "LCA"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and incomecategory = '商务散客'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "客房部"
                    dr("paycode") = "客房收入"
                    dr("incomecategory") = "商务散客"
                    dr("amount")= Tables("cb").compute("sum(dicvalue)","YYYYMMDD = '" & dtp.value & "' and key2 = 'LCA'" )
                End If
          Case "10301"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and posstation = '西餐厅' and incomecategory = '食品收入'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "西餐厅"
                    dr("paycode") = "餐饮收入"
                    dr("incomecategory") = "食品收入"
                    dr("amount")= e.DataRow("dicvalue") - Tables("cb").compute("sum(dicvalue)","YYYYMMDD = '" & dtp.value & "' and key2 = 'G' and key1 = '90203'" )
                End If
          Case "9999"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and posstation = '清餐厅' and incomecategory = '手工折扣'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "清餐厅"
                    dr("paycode") = "餐饮收入"
                    dr("incomecategory") = "手工折扣"
                    dr("amount")= e.DataRow("dicvalue")
                End If
          Case "9998"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and posstation = '清餐厅' and incomecategory = '服务费'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "清餐厅"
                    dr("paycode") = "餐饮收入"
                    dr("incomecategory") = "服务费"
                    dr("amount") = e.DataRow("dicvalue")
                End If
          Case "10202"   
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and posstation = '清餐厅' and incomecategory = '饮料收入'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("posstation") = "清餐厅"
                    dr("paycode") = "餐饮收入"
                    dr("incomecategory") = "饮料收入"
                    dr("amount") = e.DataRow("dicvalue")
                End If
End Select
End If


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


加好友 发短信
等级:幼狐 帖子:52 积分:448 威望:0 精华:0 注册:2019/8/7 20:12:00
  发帖心情 Post By:2020/1/10 12:04:00 [只看该作者]

b表代码

If Forms("凭证生成").opened AndAlso e.DataCol.name = "posstation"
    Dim dtp As WinForm.DateTimePicker = Forms("凭证生成").Controls("Date1")
    Dim dtp1 As Date = dtp.value
    If e.DataRow("date") <> dtp.value Then Return
    Select Case e.newvalue
        Case "西餐厅"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                dr("FAccountNum") = "501.02.001"
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---003---西餐"
            End If
        Case "清餐厅"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                Dim fa As String = e.DataRow("incomecategory")
                Select Case fa
                    Case "食品收入"
                        dr("FAccountNum") = "501.02.001"
                    Case "饮料收入"
                        dr("FAccountNum") = "501.02.002"
                    Case "酒水收入"
                        dr("FAccountNum") = "501.02.003"
                    Case "服务费"
                        dr("FAccountNum") = "501.02.006"
                    Case "手工折扣"
                        dr("FAccountNum") = "501.02.007"
                    Case "场租收入"
                        dr("FAccountNum") = "501.02.008"
                End Select
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---002---清餐"
            End If
        Case "宴会厅"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                Dim fa As String = e.DataRow("incomecategory")
                Select Case fa
                    Case "食品收入"
                        dr("FAccountNum") = "501.02.001"
                    Case "饮料收入"
                        dr("FAccountNum") = "501.02.002"
                    Case "酒水收入"
                        dr("FAccountNum") = "501.02.003"
                    Case "服务费"
                        dr("FAccountNum") = "501.02.006"
                    Case "手工折扣"
                        dr("FAccountNum") = "501.02.007"
                    Case "场租收入"
                        dr("FAccountNum") = "501.02.008"
                End Select
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---008---宴会厅"
            End If
        Case "泳池"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                dr("FAccountNum") = "501.03.005"
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---014---泳池健身房"
            End If
        Case "客房部"
            Dim id1 As Integer = e.DataRow("_Identify")
            If  DataTables("page").compute("count(Fdate)","Fdate = '" & dtp.value & "' And CBid = "& id1) = 0 Then
                Dim dr As DataRow = DataTables("page").AddNew()
                dr("CBid") = e.DataRow("_Identify")
                Dim fa As String = e.DataRow("incomecategory")
                Select Case fa
                    Case "会议展览"
                        dr("FAccountNum") = "501.01.005"
                    Case "商务散客"
                        dr("FAccountNum") = "501.01.002"
                    Case "订房中心"
                        dr("FAccountNum") = "501.01.009"
                    Case "长住客"
                        dr("FAccountNum") = "501.01.004"
                    Case "散客收入"
                        dr("FAccountNum") = "501.02.001"
                End Select
                dr("FAmountFor") = e.DataRow("amount")
                dr("FDebit") = 0
                dr("FCredit") = dr("FAmountFor")
                dr("FExplanation") = dtp1.month & "." & dtp1.day & "收入"
                dr("FItem") = "部门---015---客房部"
            End If

    End Select
End If


 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/10 13:42:00 [只看该作者]

首先强烈不建议使用"_Identify"来做业务数据的关联,因为自增主键的值完全不可控,并且可能会变,到时数据关联就完全乱套了。

然后A表代码换个位置,加个保存就可以了

Case "9998"    
                If  DataTables("cbdata").compute("count(date)","date = '" & dtp.value & "' and posstation = '清餐厅' and incomecategory = '服务费'") = 0 Then
                    Dim dr As DataRow = DataTables("CBDATA").AddNew()
                    dr("DATE") = e.DataRow("YYYYMMDD")
                    dr("paycode") = "餐饮收入"
                    dr("incomecategory") = "服务费"
                    dr("amount") = e.DataRow("dicvalue")
dr.save() ‘先保存,这样"_Identify"值就正常了
                    dr("posstation") = "清餐厅" '这个赋值放到最后即可,因为这个是触发B表添加C表的关键
                End If

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


加好友 发短信
等级:幼狐 帖子:52 积分:448 威望:0 精华:0 注册:2019/8/7 20:12:00
  发帖心情 Post By:2020/1/10 18:14:00 [只看该作者]

谢谢老师

 回到顶部