以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 后台数据问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148216) |
-- 作者:cuicuibing -- 发布时间:2020/4/2 15:08:00 -- 后台数据问题 Dim cmd1 As New SQLCommand cmd1.C \'记得设置数据源名称 cmd1.CommandText = "S elect * From 订单 where 编码 = \'614-1\' " Dim dt1 As DataTable = cmd1.ExecuteReader Dim cmd5 As New SQLCommand cmd5.C \'记得设置数据源名称 For Each dr1 As DataRow In dt1.DataRows cmd5.CommandText = "S elect * From 表a where 编码 = \'"& dr1("编码") &"\'" Dim dt5 As DataTable = cmd5.ExecuteReader Dim val As Double = dt5.Compute("sum(用量)", "编码= \'"& dr1("编码") &"\'") dr1("余量") = dr1("数量") - val Next 这里如何生产一个临时表,余量> 0 的。另外,这种遍历,如何提高下效率。数据多时,速度慢。
|
-- 作者:有点蓝 -- 发布时间:2020/4/2 16:32:00 -- 使用sql 先更新 update 订单 set 余量 = 余量 - b.用量 from 订单 as a inner join (select 编码,sum(用量) as 用量 from 表a where 编码=\'614-1\' group by 编码) as b on a.编码 = b.编码 where a.编码 = \'614-1\' 然后取临时表 Select * From 订单 where 编码 = \'614-1\' and 余量> 0 |
-- 作者:cuicuibing -- 发布时间:2020/4/3 8:27:00 -- Dim Filter As String With e.Form.Controls("DropBox1") If .Value IsNot Nothing Then Filter = "内部加工单号 = \'" & .Value & "\'" End If End With With e.Form.Controls("combobox1") If .Value IsNot Nothing Then If Filter > "" Then Filter = Filter & " And " End If Filter = Filter & "工段 = \'" & .Value & "\'" End If End With With e.Form.Controls("ComboBox2") If .Value IsNot Nothing Then If Filter >"" Then Filter = Filter & " And " End If Filter = Filter & "产品名称 = \'" & .Value & "\'" End If End With With e.Form.Controls("ComboBox3") If .Value IsNot Nothing Then If Filter >"" Then Filter = Filter & " And " End If Filter = Filter & "工序名称 = \'" & .Value & "\'" End If End With Dim cmd,cmd1 As New SQLCommand Dim dt As DataTable cmd.C cmd1.C cmd1.CommandText = "select * From {工序清单} " & iif(Filter>"", "Where " & filter, "") dt = cmd1.ExecuteReader() For Each r As DataRow In dt.dataRows cmd.CommandText = "update 工序清单 SET 可派工量 = 工序数量 - b.派工量 from 工序清单 as a inner join (select 编号,sum(派工量) as 派工量 from 派工明细表 where 编号 = \'" & r("编号") & "\' group by 编号 ) As b on a.编号 = b.编号 where a.编号 = \'" & r("编号") & " \' " cmd.ExecuteNonQuery() 这里报错: 语法错误 (操作符丢失) 在查询表达式 \'工序数量 - b.派工量 from 工序清单 as a inner join (select 编号,sum(派工量) as 派工量 from 派工明细表 where 编号 = \'qd01019676\' gr oup by 编号 ) As b on a.编号 = b.编号\' 中。 Next 这里是不是可以,直接用语句后台更新,不用 for each 循环。 语句如何写。 If Filter >"" Then Filter = Filter & " And " End If Filter = Filter & "[可派工量] > 0 " If Filter > "" Then DataTables("工序库调用_Table1").LoadFilter = Filter \'设置加载条件 DataTables("工序库调用_Table1").Load() End If |
-- 作者:有点蓝 -- 发布时间:2020/4/3 9:39:00 -- 如果使用update就没有必要在遍历了,直接一条SQL搞定 Dim cmd As New SQLCommand cmd.C cmd.CommandText = "update 工序清单 SET 可派工量 = 工序数量 - b.派工量 from 工序清单 as a inner join (select 编号,sum(派工量) as 派工量 from 派工明细表 group by 编号 ) As b on a.编号 = b.编号 where " & filter cmd.ExecuteNonQuery() If Filter >"" Then Filter = Filter & " And " End If Filter = Filter & "[可派工量] > 0 " If Filter > "" Then DataTables("工序库调用_Table1").LoadFilter = Filter \'设置加载条件 DataTables("工序库调用_Table1").Load() End If
|
-- 作者:cuicuibing -- 发布时间:2020/4/3 15:07:00 -- 蓝版主,按照你的方式,试验了可以。但有个问题。 派工明细表里边比如,原来有qd000001的数据。后来删除了。这时候,后台更新 {工序清单} 中的可派工量,值没有变化。 感觉 当派工明细表中 没有 符合条件的记录时, 不返回数据呢。 可派工量 = 工序数量 - b.派工量 b.派工量,没有反馈会数据 如果是这种情况,如何更新 工序清单中 的可派工量 = 工序数量
|
-- 作者:有点蓝 -- 发布时间:2020/4/3 15:12:00 -- 删除后要保存。 试试:可派工量 = isnull(工序数量,0) - isnull(b.派工量,0)
|
-- 作者:cuicuibing -- 发布时间:2020/4/3 16:21:00 -- 蓝版主,我试验了。 具体问题如下: 工序清单 qd000001 可派工量初始值为1000 派工明细表中,派过 qd000001 的派工量 为1000, 进行其他操作时, 工序清单 qd000001 可派工量 变为0. 如果 派工明细表中,qd000001 的派工 删除掉后,也就是派工明细表中没有 qd000001的数据了。 cmd.CommandText = "update 工序清单 SET 可派工量 = 工序数量 - b.派工量 from 工序清单 as a inner join (select 编号,sum(派工量) as 派工量 from 派工明细表 group by 编号 ) As b on a.编号 = b.编号 where " & filter 没有把 可派工量 后台没有更新数据。 把 可派工量 = 工序数量 - b.派工量 改为 可派工量 = isnull(工序数量,0) - isnull(b.派工量,0) 还是没有变化。 如果 派工明细表中,qd000001 的派工 有2条记录,删除掉一条后,还剩1条qd000001的记录。可以更新后台数据 |
-- 作者:有点蓝 -- 发布时间:2020/4/3 16:33:00 -- inner join 改为 left join |
-- 作者:cuicuibing -- 发布时间:2020/4/3 16:53:00 -- left join 直接没有数据 |
-- 作者:有点蓝 -- 发布时间:2020/4/3 17:03:00 -- 上传实例测试 |