以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  用事务逐行处理数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91875)

--  作者:pyh6918
--  发布时间:2016/10/20 19:07:00
--  用事务逐行处理数据

For Each dr As DataRow In DataTables("预记帐").DataRows ‘预记帐表是事先添加的要出库的明细
    Dim cr As Row = Tables("出入库明细").AddNew
    cr("商品类别")=dr("商品类别")
    cr("日期")=dr("日期")
    cr("业务类型")="出库"
    cr("商品编号")=dr("商品编号")
    cr("商品名称")=dr("商品名称")
    cr("会计帐务流水号")=kjz("帐务流水号")
    cr("数量")=dr("销售数量")
    cr("商品成本")=dr("贷方发生额")
    cr("销售额")=dr("销售额")
    cr("客户_名称")=dr("客户名称")
    cr("客户_编号")=dr("客户编号")
    cr("客户_客户经理")=dr("客户经理")
    cr("流水号")="C" & Format(dr("日期"),"yyyyMMdd") & format(sz("库房流水号"),"00000")
    cr("经办人")=user.Name
    Dim kc As DataRow = DataTables("库存").sqlFind("商品编号=\'" & dr("商品编号") & "\'")
    If kc IsNot Nothing Then
        kc("商品库存金额")=kc("商品库存金额")-dr("贷方发生额")
        kc("累计出库金额")=kc("累计出库金额") + dr("贷方发生额")
        kc("商品库存")=kc("商品库存")-dr("销售数量")
        kc("累计出库数量")=kc("累计出库数量") + dr("销售数量")
        kc("平均进货价格")=format(kc("商品库存金额") / kc("商品库存"),"0.00")
        kc.Save
        DataTables("库存").Load
    End If
Next

 

这是库存出库的代码,由于网络原因经常出错!如何将这段代码改成事务,请各位老大帮忙!


--  作者:有点蓝
--  发布时间:2016/10/20 20:22:00
--  
除非使用sql操作,否则没有办法使用事务:http://www.foxtable.com/webhelp/scr/2933.htm

上面代码优化一下,可以这样,可以有效提高运行速度

DataTables("库存").StopRedraw
DataTables("库存").Load
DataTables("出入库明细").StopRedraw
For Each dr As DataRow In DataTables("预记帐").DataRows \'预记帐表是事先添加的要出库的明细
    Dim cr As DataRow = DataTables("出入库明细").AddNew
    cr("商品类别")=dr("商品类别")
    cr("日期")=dr("日期")
    cr("业务类型")="出库"
    cr("商品编号")=dr("商品编号")
    cr("商品名称")=dr("商品名称")
    cr("会计帐务流水号")=kjz("帐务流水号")
    cr("数量")=dr("销售数量")
    cr("商品成本")=dr("贷方发生额")
    cr("销售额")=dr("销售额")
    cr("客户_名称")=dr("客户名称")
    cr("客户_编号")=dr("客户编号")
    cr("客户_客户经理")=dr("客户经理")
    cr("流水号")="C" & Format(dr("日期"),"yyyyMMdd") & format(sz("库房流水号"),"00000")
    cr("经办人")=user.Name
    Dim kc As DataRow = DataTables("库存").Find("商品编号=\'" & dr("商品编号") & "\'")
    If kc IsNot Nothing Then
        kc("商品库存金额")=kc("商品库存金额")-dr("贷方发生额")
        kc("累计出库金额")=kc("累计出库金额") + dr("贷方发生额")
        kc("商品库存")=kc("商品库存")-dr("销售数量")
        kc("累计出库数量")=kc("累计出库数量") + dr("销售数量")
        kc("平均进货价格")=format(kc("商品库存金额") / kc("商品库存"),"0.00")
    End If
Next
DataTables("出入库明细").Save
DataTables("出入库明细").ResumeRedraw
DataTables("库存").Save
DataTables("库存").ResumeRedraw

另外再优化还可以看看:http://www.foxtable.com/webhelp/scr/2225.htm

--  作者:pyh6918
--  发布时间:2016/10/20 20:46:00
--  
我的数据库是SQL的,麻烦帮我改下,觉得用事务出错要少一些,防止执行一半时出错。比如有点10个要出库的商品,执行5个突然出错了,这就比较麻烦了。
--  作者:有点蓝
--  发布时间:2016/10/20 20:59:00
--  
上传项目和数据库,否则没有办法改
--  作者:pyh6918
--  发布时间:2016/10/20 21:17:00
--  
已经投入使用了,上传数据库比较麻烦,您给我改个大概就行,我自己一点点测试,多谢了!
--  作者:有点蓝
--  发布时间:2016/10/20 21:25:00
--  
没有办法大概,看不到业务逻辑和数据结构,做出来的东西有害无益。

就是把代码操作改为sql的update/insert等等,自己研究一下sql:http://www.foxtable.com/webhelp/scr/1827.htm