以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]老师帮忙改下代码让执行效率高点 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=62817) |
||||
-- 作者:huangfanzi -- 发布时间: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 -- 发布时间:2015/1/8 15:23:00 -- SQLcommand 执行SQL语句查询 "select top 1 * fr om {工序合并表} where 卷号= \'" & r("卷号") & "\' order by _SortKey"
|
||||
-- 作者:huangfanzi -- 发布时间: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编辑过]
|
||||
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2015/1/8 15:45:00 -- [_SortKey] 加上括号 |
||||
-- 作者:huangfanzi -- 发布时间: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
|
||||
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2015/1/8 21:41:00 -- 有点甜老师,你的代码执行结果不对,我上传了附件,项目打开后就会有个下停靠窗口,窗口中有二个按钮, 左边哪个就是目前我用了,其实也是之前有点甜老师帮我写的,这段代码能正确执行,但效率太差, 右边哪个是按钮放着上面有点甜老师的代码,执行结果不正确。
|
||||
-- 作者:有点甜 -- 发布时间:2015/1/8 21:47:00 -- 这个意思?
For Each dr As DataRow In DataTables("工序表").Select("母卷号 = \'CS141001\'", "开始时间") |
||||
-- 作者:huangfanzi -- 发布时间:2015/1/8 22:01:00 -- 还是不对,我把例子改了下,注意表中第一条记录,不应该打上库存标记,因为一个卷在加工中由于断裂变成了二个卷,这时原来哪个卷实际已经不存在了,断后的二个卷分别在原来卷号后面加上A与B
|