Foxtable(狐表)用户栏目专家坐堂 → [求助]老师帮忙改下代码让执行效率高点


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

主题:[求助]老师帮忙改下代码让执行效率高点

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]老师帮忙改下代码让执行效率高点  发帖心情 Post By:2015/1/8 15:13:00 [只看该作者]

工序合并表数据样式如下:
工序            卷号                        母卷号           库存标记  重量
原料入库     CS150001               CS150001         F          1000
材料分切     CS150001A             CS150001        T          500
材料分切     CS150001B             CS150001        F          500
材料分切     CS150001BA           CS150001        T          250
材料分切     CS150001BA           CS150001        T          250

原料入库     CS150002               CS150002         F          1000
材料分切     CS150002A             CS150002        T          500
材料分切     CS150002B             CS150002        T          500

......


目前代码如下:
Dim i As Integer=0
Do While i < Tables("工序合并表").Rows.Count
Dim r As Row = Tables("工序合并表").Rows(i)
If Tables("工序合并表").Find( r("卷号"),i+1,"卷号",False, False, False)>-1 Then
r("库存标记")=False
Else r("库存标记")=True
End If
i=i+1
Loop

代码功能:
根据卷号来判断哪一步为此卷的最后一步工序,也就是此步的重量才是真正的库存重量,此时库存标记的值变为TRUE

目前问题:
当工序发生变化后必须执行上述代码以达到标识出库存的目的,但目前的代码很没效率,目前工序表中有18000条记录,执行上面的代码用了近30秒,实际使用时,并不用全部重算,只要重算某个指定母卷号所对应的相关的记录就行了,例如上面代码如何改,能达到计算得到母卷号为CS150001的相关记录的库存标记,其他的母卷号不计算。
谢谢老师!
[此贴子已经被作者于2015-1-8 15:13:52编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/1/8 15:23:00 [只看该作者]

SQLcommand 执行SQL语句查询

"select top 1 * fr om {工序合并表} where 卷号= '" & r("卷号") & "' order by _SortKey"

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/1/8 15:36:00 [只看该作者]

BIN老师,你的代码不会用啊,
.NET Framework 版本:2.0.50727.6421
Foxtable 版本:2014.10.23.1
错误所在事件:
详细错误信息:
语法错误 在查询表达式 '_SortKey' 中。
[此贴子已经被作者于2015-1-8 15:39:43编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/1/8 15:41:00 [只看该作者]

For Each dr As DataRow In DataTables("工序合并表").Select("母卷号 = 'CS150001'", "卷号")
    If DataTables("工序合并表").Find("卷号 like '" & dr("卷号") & "%'") IsNot Nothing  Then
        dr("库存标记")=False
    Else
        dr("库存标记")=True
    End If
Next

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/1/8 15:45:00 [只看该作者]

[_SortKey] 加上括号

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/1/8 15:59:00 [只看该作者]

有点甜老师,这段代码的思路看懂了,但有点问题,是我举的例子不够完整,我把例子写完整点。

工序            卷号                        母卷号           库存标记  重量
原料入库     CS150001               CS150001         F          1000
材料分切     CS150001A             CS150001        T          500
材料分切     CS150001B             CS150001        F          500
材料分切     CS150001BA           CS150001        T          250
材料分切     CS150001BA           CS150001        F          250
打包入库     CS150001BA           CS150001        T          250

另外,用老师写的代码,我去运行了下,发现指定的母卷的库存标记全部清空了,也就是全变成了FALSE

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/1/8 16:24:00 [只看该作者]

For Each dr As DataRow In DataTables("工序合并表").Select("母卷号 = 'CS150001'", "卷号")
    If DataTables("工序合并表").Find("卷号 like '" & dr("卷号") & "%' and _Identify <> " & dr("_Identify")) IsNot Nothing  Then
        dr("库存标记")=False
    Else
        dr("库存标记")=True
    End If
Next

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/1/8 21:41:00 [只看该作者]

有点甜老师,你的代码执行结果不对,我上传了附件,项目打开后就会有个下停靠窗口,窗口中有二个按钮,

左边哪个就是目前我用了,其实也是之前有点甜老师帮我写的,这段代码能正确执行,但效率太差,

右边哪个是按钮放着上面有点甜老师的代码,执行结果不正确。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:库存标记的有效率执行.rar


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/1/8 21:47:00 [只看该作者]

 这个意思?

 

For Each dr As DataRow In DataTables("工序表").Select("母卷号 = 'CS141001'", "开始时间")
    If DataTables("工序表").Find("卷号 = '" & dr("卷号") & "' and 开始时间 > #" & dr("开始时间") & "#") IsNot Nothing  Then
        dr("库存标记")=False
    Else
        dr("库存标记")=True
    End If
Next


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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/1/8 22:01:00 [只看该作者]

还是不对,我把例子改了下,注意表中第一条记录,不应该打上库存标记,因为一个卷在加工中由于断裂变成了二个卷,这时原来哪个卷实际已经不存在了,断后的二个卷分别在原来卷号后面加上A与B


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:库存标记的有效率执行new.rar


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