以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教一个关于datacolchanged问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145128)

--  作者:frankcat
--  发布时间:2020/1/9 11:38:00
--  请教一个关于datacolchanged问题
老师,我用datacolchanged事件来触发A表生成B表,B表触发生成C表,这样A表的数据一变,B和C都变化了,现在只想B表数据更新,C表不变,我再项目属性里面的afteropenproject事件里面加入DataTables("C").AllowAddNew =False,还是不能阻止C表更新,这个问题该怎么解决。
--  作者:有点蓝
--  发布时间:2020/1/9 11:58:00
--  
把B表触发生成C表的代码去掉不就行了
--  作者:frankcat
--  发布时间: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

 


--  作者:有点蓝
--  发布时间:2020/1/9 13:44:00
--  
A表、B表的datacolchanged代码都给出来。
--  作者:frankcat
--  发布时间: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
--  发布时间: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


--  作者:有点蓝
--  发布时间: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
--  发布时间:2020/1/10 18:14:00
--  
谢谢老师