以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- datacolchanged触发其他表有时候会丢数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=192115) |
-- 作者:dahai -- 发布时间:2024/5/29 19:00:00 -- datacolchanged触发其他表有时候会丢数据 用的阿里云sql数据库,在上面有三个表《采购入库》,《库存明细》,《入库统计》。《采购入库》表的“库房确认”列,由待入库—>已入库或者已入库—>待入库都会触发datacolchanged事件,从而对《库存明细》,《入库统计》两个表进行增减行操作。 目前遇到的问题是:datacolchanged事件发生了,但是没有对《库存明细》,《入库统计》两个表进行操作,或者只对其中的一个表进行了操作。不是经常发生,极偶尔才出现,请专家帮看看这样设计有问题吗? 《采购入库》表的datacolchanged代码如下: If e.DataCol.Name = "库房确认" Then If e.OldValue = "待入库" And e.NewValue = "已入库" Then \'在《采购入库》表中的变化 e.DataRow("入库日期") = Date.Today \'库房确认,由待入库变为已入库,那么当前的日期就为入库日期 e.DataRow("操作人") = User.Name e.DataRow.Save() \'在《入库统计》表中的变化 Dim dr As DataRow = DataTables("入库统计").AddNew dr("入库日期") = e.DataRow("入库日期") dr("入库序号") = e.DataRow("入库序号") dr("名称") = e.DataRow("名称") dr("型号") = e.DataRow("型号") dr("数量") = e.DataRow("数量") dr("单价") = e.DataRow("单价") dr.Save() \'在《库存明细》表中的变化 Dim kdr As DataRow = DataTables("库存明细").AddNew kdr("入库日期") = e.DataRow("入库日期") kdr("入库序号") = e.DataRow("入库序号") kdr("名称") = e.DataRow("名称") kdr("型号") = e.DataRow("型号") kdr("数量") = e.DataRow("数量") kdr("单价") = e.DataRow("单价") kdr.Save() End If \'事先需要datacolchanging 判断物料是否还在,以及数量是否和入库时一致,如果不在或者不一致,不允许变更。 If e.OldValue = "已入库" And e.NewValue = "待入库" Then DataTables("库存明细").SQLDeleteFor("入库序号 = \'" & e.DataRow("入库序号") & "\'") DataTables("入库统计").SQLDeleteFor("入库序号 = \'" & e.DataRow("入库序号") & "\'")\'入库统计只是起到记录的作用,不用判断 e.DataRow("操作人") = Nothing e.DataRow("入库日期") = Nothing e.DataRow.Save() End If End If |
-- 作者:有点蓝 -- 发布时间:2024/5/30 8:50:00 -- 估计是用户操作不当,比如"库房确认"单元格原来的值是"待入库",用户不是在单元格直接录入"已入库",而有可能是按del键清空单元格,再录入"已入库",这时事件会触发2次,先是【e.OldValue = "待入库" And e.NewValue = nothing】,再是【e.OldValue = nothing And e.NewValue = "已入库"】。还有一种可能是旧的状态不是"待入库",而是其它。 考虑在datacolchanging 加个判断,如果旧状态不是"待入库",就不能把状态改为"已入库"
|
-- 作者:dahai -- 发布时间:2024/5/30 9:43:00 -- 谢谢蓝老师! |