以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 求高效简洁的代码,高手请指点 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=9216) |
-- 作者:唐尸三摆手 -- 发布时间:2011/3/15 8:37:00 -- 求高效简洁的代码,高手请指点 在工厂的生产日历中会涉及到避开周日的因素,但是由于erp软件不够智能,所以只好做一次“体外治疗”,下面的代码就是针对周日做的处理,但是效率出其的慢 Dim st As Date = Date.Now Dim cmd As New SQLCommand Dim dt As DataTable Dim ct AS Integer Dim ct1 AS Integer Dim ct2 AS Integer Dim ct3 AS Integer Dim ct4 AS Integer Dim ct5 AS Integer Dim ct6 AS Integer cmd.C cmd.CommandText="select * from aec00000 where centercode=\'0100\' and requiredate between \'2011-02-27\' and \'2011-03-10\'" dt=cmd.ExecuteReader() For Each dr As DataRow In dt.datarows Dim d1 As Date=dr("requiredate") Dim d2 As Date Dim d3 As Date Dim wk As Byte=d1.DayOfWeek If wk=2 Then \'如果总装日期是周二,那么 d2=dr("requiredate").AddDays(-3) d3=dr("requiredate").AddDays(-5) Else If wk=5 Then \'如果总装日期是周五,那么 d2=dr("requiredate").AddDays(-2) d3=dr("requiredate").AddDays(-4) Else \'如果总装日期是周一?周三?周四或周六?周日,那么 d2=dr("requiredate").AddDays(-2) d3=dr("requiredate").AddDays(-5) End If \'-总装线日期设定 cmd.CommandText="update aeg00000 set inputdate=\'"& d1 &"\',outputdate=\'"& d1 &"\' from aeg00000 where GTcode=\'"& dr("planid") &"\' And childlevel=0 And deptcode=\'0148\'" ct1=cmd.ExecuteNonQuery() \'-装配一线日期设定 cmd.CommandText="update aeg00000 set inputdate=\'"& d1 &"\',outputdate=\'"& d1 &"\' from aeg00000 where GTcode=\'"& dr("planid") &"\' And childlevel=1 And deptcode=\'0102\'" ct2=cmd.ExecuteNonQuery() \'-装配组件日期设定 cmd.CommandText="update aeg00000 set inputdate=\'"& d2 &"\',outputdate=\'"& d2 &"\' from aeg00000 where GTcode=\'"& dr("planid") &"\' And workcentercode=\'010212\'" ct3=cmd.ExecuteNonQuery() \'-装配二线日期设定 cmd.CommandText="update aeg00000 set inputdate=\'"& d2 &"\',outputdate=\'"& d2 &"\' from aeg00000 where GTcode=\'"& dr("planid") &"\' And childlevel=1 And deptcode=\'0143\'" ct4=cmd.ExecuteNonQuery() \'-成型一车间日期设定 cmd.CommandText="update aeg00000 set inputdate=\'"& d2 &"\',outputdate=\'"& d2 &"\' from aeg00000 where GTcode=\'"& dr("planid") &"\' And deptcode=\'0112\'" ct5=cmd.ExecuteNonQuery() \'-成型二车间日期设定 cmd.CommandText="update aeg00000 set inputdate=\'"& d3 &"\',outputdate=\'"& d2 &"\' from aeg00000 where GTcode=\'"& dr("planid") &"\' And deptcode=\'0113\'" ct6=cmd.ExecuteNonQuery() Next ct=ct1+ct2+ct3+ct4+ct5+ct6 Messagebox.Show( "本次操作总共影响" & ct & "行!耗时: " & (Date.Now - st).TotalSeconds & "秒") 只要一算就死机,看来是代码带冗余了,请高手指点精简代码。 红色部分大约有2000行数据结果,估计可能是判断周六周日的过程中发生死机的
[此贴子已经被作者于2011-3-15 8:41:32编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2011/3/15 9:00:00 -- 如果2000行数据,你还不如直接载入这2000行到FoxTable处理,要高效很多。 你现在是2000*6 = 12000,要执行12000次Update语句,慢是正常的。 |