以文本方式查看主题
- Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2)
---- 请教一个关于datacolchanged问题 (http://www.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
--
谢谢老师
|