Foxtable(狐表)用户栏目专家坐堂 → 后台数据问题


  共有2138人关注过本帖树形打印复制链接

主题:后台数据问题

帅哥哟,离线,有人找我吗?
cuicuibing
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:3511 威望:0 精华:0 注册:2014/1/8 17:12:00
后台数据问题  发帖心情 Post By: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 的。另外,这种遍历,如何提高下效率。数据多时,速度慢。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/2 16:32:00 [只看该作者]

使用sql

先更新
up
date 订单 set 余量 = 余量 - b.用量 from 订单 as a inner join  (selec编码,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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:3511 威望:0 精华:0 注册:2014/1/8 17:12:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:3511 威望:0 精华:0 注册:2014/1/8 17:12:00
  发帖心情 Post By:2020/4/3 15:07:00 [只看该作者]

蓝版主,按照你的方式,试验了可以。但有个问题。
派工明细表里边比如,原来有qd000001的数据。后来删除了。这时候,后台更新 {工序清单} 中的可派工量,值没有变化。

感觉 当派工明细表中  没有 符合条件的记录时, 不返回数据呢。   可派工量 = 工序数量 - b.派工量     b.派工量,没有反馈会数据

如果是这种情况,如何更新  工序清单中  的可派工量 = 工序数量

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/3 15:12:00 [只看该作者]

删除后要保存。

试试:可派工量 =  isnull(工序数量,0) - isnull(b.派工量,0)

 回到顶部
帅哥哟,离线,有人找我吗?
cuicuibing
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:3511 威望:0 精华:0 注册:2014/1/8 17:12:00
  发帖心情 Post By: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的记录。可以更新后台数据



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/3 16:33:00 [只看该作者]

 inner join 改为 left join

 回到顶部
帅哥哟,离线,有人找我吗?
cuicuibing
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:3511 威望:0 精华:0 注册:2014/1/8 17:12:00
  发帖心情 Post By:2020/4/3 16:53:00 [只看该作者]

left join 直接没有数据

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/3 17:03:00 [只看该作者]

上传实例测试

 回到顶部
总数 11 1 2 下一页