Foxtable(狐表)用户栏目专家坐堂 → 求和代码优化


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

主题:求和代码优化

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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/24 16:49:00 [只看该作者]

可以试试,比如

updat表A as a set a.工时 = b.工时,a.直接材料_配件费用=b.直接材料_配件费用 from (Select Sum(循环时间) As 工时, Sum(直接材料_配件成本) As 直接材料_配件费用 From 工序跟踪表 Where b.[成品编码] = a.成品编码 and b.[毛坯编码] =a.毛坯编码) as b

不能使用表事件,到按钮里执行上面SQL:http://www.foxtable.com/webhelp/topics/0696.htm

表事件保留11楼的用法,然后不要使用重置列功能

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:2844 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/11/24 20:32:00 [只看该作者]

老师,需要把分组的那一部分代码保留吗?UPDATE只是替换“Dim dt As DataTable = b.Build(True)  For Each dr As DataRow In dt.DataRows”这个代码的吗?我写后提示如图错误,我改的是分级求的没变,改成了UP DATE 成本总明细_明细查询 As a S et a.工时 = b.循环时间, a.直接工资_直接人工 = b.加工单价 From (Sel ect Sum(循环时间) As 工时, Sum(加工单价) As 直接工资_直接人工 From 工序跟踪表 Wh ere b.[成品编码] = a.成品编码 And b.[毛坯编码] = a.毛坯编码) As b

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2022/11/24 20:32:07编辑过]

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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/24 20:37:00 [只看该作者]

11楼的用法之后的用法都不要用了。

其实如果使用分组统计,代码放到按钮里执行,和使用update效果相差不大的。慢主要是慢在逐行的查询统计,一次性统计这个表的数据不会慢的。相当于一车就把所有人拉到目的地和一个人送一趟的区别

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:2844 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/11/24 20:57:00 [只看该作者]

老师,那如果把11楼的代码写到按钮里,e.datarow这个有其他的变量方法吗?因为这个在按钮里不能用

Dim dr As DataRow = e.DataRow

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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/24 21:11:00 [只看该作者]

如果使用sql语句,不需要分组,也不需要e.datarow,调用SQL要使用SQLcommand:http://www.foxtable.com/webhelp/topics/0696.htm

如果使用分组,要遍历所有行赋值,也不需要e.datarow,更不需要sql
[此贴子已经被作者于2022/11/24 21:11:30编辑过]

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:2844 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/11/24 21:31:00 [只看该作者]

我改成了这样的,但是列名都是对的,但在执行过程中总是提示没有该列名。

For Each dr3 As Row In Tables("成本总明细_明细查询").Rows
    Dim ld As Integer
    Dim cmd As New SQLCommand
    cmd.CommandText = "Sel ect Sum(循环时间) As 工时, Sum(直接材料_配件成本) As 直接材料_配件费用, Sum(加工单价) As 直接工资_直接人工, Sum(直接工资_社保费) As 直接工资_社保费, Sum(直接工资_福利) As 直接工资_福利费, Sum(直接工资_工时补助) As 直接工资_工时补助, Sum(制造费用_工资) As 制造费用_工资, Sum(制造费用_保险) As 制造费用_保险, Sum(制造费用_福利) As 制造费用_福利, Sum(制造费用_外协费用) As 制造费用_外协费用, Sum(制造费用_水费) As 制造费用_水费, Sum(制造费用_电费) As 制造费用_电费, Sum(制造费用_运输费) As 制造费用_运输费, Sum(制造费用_设备折旧) As 制造费用_设备折旧, Sum(管理费用_工资) As 管理费用_工资, Sum(管理费用_其他管理费) As 管理费用_其他管理费, Sum(制造费用_修理费) As 制造费用_修理费, Sum(制造费用_刀具修磨) As 制造费用_刀具修磨, Sum(直接材料_刀具费用) As 直接材料_刀具费用, Sum(制造费用_其他折旧) As 制造费用_其他折旧, Sum(制造费用_油料费) As 制造费用_油料费, Sum(制造费用_量检具费) As 制造费用_量检具费, Sum(管理费用_保险) As 管理费用_保险, Sum(制造费用_基础设施费) As 制造费用_基础设施费, Sum(制造费用_低值易耗) As 制造费用_低值易耗, Sum(制造费用_工装费用) As 制造费用_工装费用, Sum(管理费用_福利) As 管理费用_福利 From 工序跟踪表 Where [成品编码] = '" & dr3("成品编码") & "' and [毛坯编码] = '" & dr3("毛坯编码") & "'" 
    cmd.C
    Dim dt As DataTable = cmd.executereader
    Dim dr As DataRow = dt.datarows(0)
    dr3("工时") = dr("循环时间")
    dr3("直接材料_配件费用") = dr("直接材料_配件成本")
    dr3("直接工资_直接人工") = dr("加工单价")
    dr3("直接工资_社保费") = dr("直接工资_社保费")
    dr3("直接工资_福利费") = dr("直接工资_福利")
    dr3("直接工资_工时补助") = dr("直接工资_工时补助")
    dr3("制造费用_工资") = dr("制造费用_工资")
    dr3("制造费用_保险") = dr("制造费用_保险")
    dr3("制造费用_福利") = dr("制造费用_福利")
    dr3("制造费用_外协费用") = dr("制造费用_外协费用")
    dr3("制造费用_水费") = dr("制造费用_水费")
    dr3("制造费用_电费") = dr("制造费用_电费")
    dr3("制造费用_运输费") = dr("制造费用_运输费")
    dr3("制造费用_修理费") = dr("制造费用_修理费")
    dr3("制造费用_油料费") = dr("制造费用_油料费")
    dr3("制造费用_低值易耗") = dr("制造费用_低值易耗")
    dr3("制造费用_设备折旧") = dr("制造费用_设备折旧")
    dr3("制造费用_刀具修磨") = dr("制造费用_刀具修磨")
    dr3("制造费用_量检具费") = dr("制造费用_量检具费")
    dr3("制造费用_工装费用") = dr("制造费用_工装费用")
    dr3("管理费用_工资") = dr("管理费用_工资")
    dr3("直接材料_刀具费用") = dr("直接材料_刀具费用")
    dr3("管理费用_保险") = dr("管理费用_保险")
    dr3("管理费用_福利") = dr("管理费用_福利")
    dr3("管理费用_其他管理费") = dr("管理费用_其他管理费")
    dr3("制造费用_其他折旧") = dr("制造费用_其他折旧")
    dr3("制造费用_基础设施费") = dr("制造费用_基础设施费")
Next

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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/24 21:43:00 [只看该作者]

如果提示列名不对肯定有不对的。

上面这种用法和1楼的速率没有任何区别,一样很慢。都说了很多次了,不要在循环里做统计,而是一次性把工序跟踪表这个表的数据统计出来


Dim b As New sqlGroupTableBuilder("统计表1", "工序跟踪表")
b.Groups.AddDef("成品编码") '根据产品分组
b.Groups.AddDef("毛坯编码") '根据产品分组
b.Totals.AddDef("循环时间") '对数量进行统计
……
Dim dt As DataTable = b.Build(True)
dim dr as datarow
For Each dr3 As Row In Tables("成本总明细_明细查询").Rows
dr = dt.find("成品编码 = '" & dr3("成品编码") & "' and 毛坯编码 = '" & dr3("毛坯编码") & "'")
if dr isnot nothing then
    dr3("工时") = dr("循环时间")
    dr3("直接材料_配件费用") = dr("直接材料_配件成本")
……
end if
next

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:2844 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/11/24 22:03:00 [只看该作者]

老师,改成27楼的后,不仅慢,而且还提示超时。
Dim b As New sqlGroupTableBuilder("统计表1", "工序跟踪表")
b.C
b.Groups.AddDef("成品编码") '根据产品分组
b.Groups.AddDef("毛坯编码") '根据产品分组
b.Totals.AddDef("循环时间") '对数量进行统计
b.Totals.AddDef("加工单价") '对数量进行统计
b.Totals.AddDef("直接材料_刀具费用") '对数量进行统计
b.Totals.AddDef("直接材料_配件成本") '对数量进行统计
b.Totals.AddDef("直接工资_社保基数") '对数量进行统计
b.Totals.AddDef("直接工资_社保费") '对数量进行统计
b.Totals.AddDef("制造费用_油料费") '对数量进行统计
b.Totals.AddDef("制造费用_量检具费") '对数量进行统计
b.Totals.AddDef("制造费用_运输费") '对数量进行统计
b.Totals.AddDef("制造费用_工装费用") '对数量进行统计
b.Totals.AddDef("制造费用_设备折旧") '对数量进行统计
b.Totals.AddDef("制造费用_外协费用") '对数量进行统计
b.Totals.AddDef("制造费用_水费") '对数量进行统计
b.Totals.AddDef("制造费用_电费") '对数量进行统计
b.Totals.AddDef("直接工资_福利") '对数量进行统计
b.Totals.AddDef("制造费用_工资") '对数量进行统计
b.Totals.AddDef("制造费用_福利") '对数量进行统计
b.Totals.AddDef("制造费用_保险") '对数量进行统计
b.Totals.AddDef("制造费用_修理费") '对数量进行统计
b.Totals.AddDef("制造费用_基础设施费") '对数量进行统计
b.Totals.AddDef("制造费用_其他折旧") '对数量进行统计
b.Totals.AddDef("管理费用_工资") '对数量进行统计
b.Totals.AddDef("管理费用_保险") '对数量进行统计
b.Totals.AddDef("管理费用_福利") '对数量进行统计
b.Totals.AddDef("管理费用_其他管理费") '对数量进行统计
b.Totals.AddDef("制造费用_刀具修磨") '对数量进行统计
b.Totals.AddDef("制造费用_低值易耗") '对数量进行统计
b.Totals.AddDef("直接工资_工时补助") '对数量进行统计
Dim dt As DataTable = b.Build(True)
dim dr as datarow = dt.datarows(0)
For Each dr3 As Row In Tables("成本总明细_明细查询").Rows
    dr = dt.find("成品编码 = '" & dr3("成品编码") & "' and 毛坯编码 = '" & dr3("毛坯编码") & "'")
    If dr IsNot Nothing Then
        dr3("工时") = dr("循环时间")
        dr3("直接材料_配件费用") = dr("直接材料_配件成本")
        dr3("直接工资_直接人工") = dr("加工单价")
        dr3("直接工资_社保费") = dr("直接工资_社保费")
        dr3("直接工资_福利费") = dr("直接工资_福利")
        dr3("直接工资_工时补助") = dr("直接工资_工时补助")
        dr3("制造费用_工资") = dr("制造费用_工资")
        dr3("制造费用_保险") = dr("制造费用_保险")
        dr3("制造费用_福利") = dr("制造费用_福利")
        dr3("制造费用_外协费用") = dr("制造费用_外协费用")
        dr3("制造费用_水费") = dr("制造费用_水费")
        dr3("制造费用_电费") = dr("制造费用_电费")
        dr3("制造费用_运输费") = dr("制造费用_运输费")
        dr3("制造费用_修理费") = dr("制造费用_修理费")
        dr3("制造费用_油料费") = dr("制造费用_油料费")
        dr3("制造费用_低值易耗") = dr("制造费用_低值易耗")
        dr3("制造费用_设备折旧") = dr("制造费用_设备折旧")
        dr3("制造费用_刀具修磨") = dr("制造费用_刀具修磨")
        dr3("制造费用_量检具费") = dr("制造费用_量检具费")
        dr3("制造费用_工装费用") = dr("制造费用_工装费用")
        dr3("管理费用_工资") = dr("管理费用_工资")
        dr3("直接材料_刀具费用") = dr("直接材料_刀具费用")
        dr3("管理费用_保险") = dr("管理费用_保险")
        dr3("管理费用_福利") = dr("管理费用_福利")
        dr3("管理费用_其他管理费") = dr("管理费用_其他管理费")
        dr3("制造费用_其他折旧") = dr("制造费用_其他折旧")
        dr3("制造费用_基础设施费") = dr("制造费用_基础设施费")
    End If
Next

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看


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


加好友 发短信
等级:超级版主 帖子:105470 积分:536335 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/24 22:08:00 [只看该作者]

应该是"工序跟踪表"数据太多了,如果只需要统计和"成本总明细_明细查询"有关的数据,要确定一下,"成本总明细_明细查询"的数据是从哪来的,"成本总明细_明细查询"是查询表还是数据表?是加载了全部的数据还是部分数据?

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:2844 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/11/24 22:19:00 [只看该作者]

成本总明细_明细查询这个表是一个窗口表,操作方法:点击查询按钮,查询出每个月1号和最后一天之间的明细,然后根据成本编码、毛坯编码等在工序跟踪表中汇总对列列的数据,把结果在返回记录到成本总明细_明细查询对表的列中(工序跟踪表是个数据表,每天会有3000条的数据录入)。

 回到顶部
总数 38 上一页 1 2 3 4 下一页