以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [讨论]关于空值的判定 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=16259) |
-- 作者:kensou11111 -- 发布时间:2012/2/7 15:20:00 -- [讨论]关于空值的判定
有如上图两个表,要从库存表中找出与出库表中 编码和批次号相同 的行,然后 实时库存(新)=实时库存(旧)-出库数量,代码该怎么写?
其中两表中编码和数量列肯定不为空,批次号可能为空。
较为简短的代码如何编写? |
-- 作者:狐狸爸爸 -- 发布时间:2012/2/7 15:26:00 -- 我也没有什么简短的代码,你贴出你的代码看看。 |
-- 作者:kensou11111 -- 发布时间:2012/2/7 15:41:00 -- Dim n As Integer n = 0 Dim drs As List(of DataRow) Drs = DataTables("成品仓退料单_Table1").Select("材料编码 Is not null") For Each dr As DataRow In drs Dim gr As DataRow If dr.IsNull("订单号") Then \'判定操作的合法性,库存表必须有与之相对应的物料 Gr = DataTables("成品仓实时库存").find("订单号 is null and 材料编码 = \'" & dr("材料编码") & "\' And 单位 = \'" & dr("单位") & "\'") Else Gr = DataTables("成品仓实时库存").find("材料编码 = \'" & dr("材料编码") & "\' And 单位 = \'" & dr("单位") & "\' And 订单号 = \'" & dr("订单号") & "\'") End If If gr Is Nothing Then MessageBox.Show("反审核后物料库存将小于零,禁止操作","警告", MessageBoxButtons.OK ,MessageBoxIcon.Warning) n = n+1 Exit For Else Dim Ys As Double \'判定操作的合法性,若有与之相对应的物料,运算后库存不能为负 Ys = gr("实时库存") - dr("数量") If YS < 0 Then MessageBox.Show("反审核后物料库存将小于,禁止操作","警告", MessageBoxButtons.OK ,MessageBoxIcon.Warning) n = n + 1 Exit For End If End If Next If n <= 0 Then \'判定操作的合法,进行真正运算 For Each dr2 As DataRow In drs Dim gr2 As DataRow If dr2.IsNull("订单号") Then Gr2 = DataTables("成品仓实时库存").find("订单号 is null and 材料编码 = \'" & dr2("材料编码") & "\' And 单位 = \'" & dr2("单位") & "\'") Else Gr2 = DataTables("成品仓实时库存").find("材料编码 = \'" & dr2("材料编码") & "\' And 单位 = \'" & dr2("单位") & "\' And 订单号 = \'" & dr2("订单号") & "\'") End If gr2("实时库存") = gr2("实时库存") - dr2("数量") Next [此贴子已经被作者于2012-2-7 15:46:42编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2012/2/7 15:49:00 -- 我也没有更好的办法。 |
-- 作者:kensou11111 -- 发布时间:2012/2/7 15:55:00 -- 一楼的案例其实是我设计进销存系统时的一个简化模型,他模拟的一个单据审核的操作,单据审核后,单据有效,系统即自动对库存进行相应的运算。
上面的代码其实才是我真正的案例,包含了操作合法性的判定,其实真正的关于运算的只有红色的那一部分。
不过时至今日,我还是经常搞不清什么时候用NOTHING,什么时候用IS NULL,都是试出来的。
还有查找条件有朝一日能不能这样写呢? FIND( A AND ( B OR C) ) |
-- 作者:狐狸爸爸 -- 发布时间:2012/2/7 15:57:00 -- 表达式中都是用Is Null: http://www.foxtable.com/help/topics/0102.htm
代码中,看看: http://www.foxtable.com/help/topics/1470.htm
|